Bài viết này tập trung vào một kiến thức đơn giản – strings.xml
1.Tưởng tượng rằng bạn có một hộp thoại loading trên 2 màn hình Sign in và Sign up. Vì cả 2 đều có chung 1 hộp thoại nên bạn quyết định sử dụng chung string – R.string.loading.

Sau đó nếu bạn quyết định sử dụng một cái khác, bạn sẽ phải tạo ra hai string mới và chỉnh sửa code java. Nếu từ đầu bạn sử dụng hai string, bạn sẽ sửa chỉ duy nhât file strings.xml.

2.Bạn không bao giờ biết ứng dụng của bạn hỗ trợ ngôn ngữ nào. Trong một ngôn ngữ – bạn sẽ có thể sử dụng cùng một từ cho các nội dung khác nhau, nhưng ở một ngôn ngữ khác – bạn sẽ phải sử dụng các từ khác nhau cho nội dung khác nhau.


Nhưng phiên bản tiếng Ukraina của strings.xml sử dụng hai từ khác nhau – “Гаразд” cho R.string.download_file_yes và “Так” cho R.string.terms_of_use_yes.
Riêng biệt
Các strings riêng biệt thuộc chung một màn hình nên được phân biệt bởi tiền tố và comment.

- Thêm tên màn hình như là tiền tố vào mỗi string giúp ngay lập tức nhận ra màn hình mà string hiện tại thuộc về.
- Tệp strings.xml rõ ràng giúp dễ dàng duy trì và chuyển đổi nhiều strings sang các ngôn ngữ khác nhau – màn hình sau màn hình.
Tạo tệp strings.xml riêng cho mỗi màn hình
Nếu bạn muốn tạo file strings.xml cho mỗi màn hình – settings-strings.xml, profile-strings.xml. Nhưng thường các ứng dụng có 10-20 màn hình. Vì vậy, có 10-20 file strings.xml trong mỗi thư mục language, theo tôi, sẽ mang lại lộn xộn lớn.
Định dạng
Sử dụng Resources#getString(int id, Object… formatArgs) để định dạng strings
Không bao giờ nối chuỗi bằng toán tử +, bởi vì trong các ngôn ngữ khác thứ tự từ có thể thay đổi.


Cách đúng nên sử dụng Resources#getString(int id, Object… formatArgs).



Số nhiều
Sử dụng Resources#getQuantityString (int id, int quantity) cho strings số lượng.
Không bao giờ giải quyết số nhiều trong code java , bởi vì các ngôn ngữ khác nhau có quy tắc khác nhau cho qui định về ngữ pháp với số lượng.


Cách đúng nên sử dụng Resources#getQuantityString (int id, int quantity).


Làm nổi bật một số từ
Sử dụng văn bản html để làm nổi bật những chữ cố định.
Nếu bạn muốn thay đổi màu sắc của một số từ trong TextView – ForegroundColorSpan không phải lúc nào cũng là lựa chọn tốt nhất, bởi vì nếu làm nổi bật thông qua các indexes, nó không an toàn trong ứng dụng đa ngôn ngữ. Tốt hơn nên sử dụng html font color tags bên trong file strings.xml của bạn.
Bạn có văn bản “Discover and play games.” Bạn muốn làm nổi bật từ “Discover” và “play” với màu xanh lam.


Techtalk via Dmytro Danylyk