[Android] Hướng dẫn tạo ứng dụng đa ngôn ngữ

16:04 21-08-2017BKAP Media

Làm thế nào mà một ứng dụng chỉ cần một thao tác chuyển đổi đơn giản là có thể thay đổi được ngôn ngữ, định dạng số, tiền tệ..v.v… từ kiểu quốc gia này sang kiểu quốc gia khác mà một ứng dụng chỉ cần một thao tác chuyển đổi đơn giản là có thể thay đổi được ngôn ngữ, định dạng số, tiền tệ..v.v… từ kiểu quốc gia này sang kiểu quốc gia khác?

I. Giới thiệu




Android là một hệ điều hành thiết bị di động nguồn mở phổ biến nhất hiện nay. Android có lượng người sử dụng trải rộng trên hơn 190 quốc gia và con số đó ngày càng tăng. Một lẽ tất nhiên, nhà phát triển sẽ muốn có thật nhiều người dùng ứng dụng, không chỉ người dùng tại quốc gia mình mà trên toàn thế giới. Có một vấn đề ở đây chính là người Mỹ họ có thể sẽ không hiểu Tiếng Việt, định dạng số, tiền tệ cũng sẽ khác.

Chính vì vậy, cần phải làm thế nào mà một ứng dụng chỉ cần một thao tác chuyển đổi đơn giản là có thể thay đổi được ngôn ngữ, định dạng số, tiền tệ..v.v… từ kiểu quốc gia này sang kiểu quốc gia khác. Thuật ngữ ngữ chuyên nghành gọi đây là “nội địa hóa” ứng dụng.

Bài viết này sẽ hướng dẫn các bạn tạo ứng dụng di động Android giải quyết được nhu cầu trên.

II. Hướng dẫn
Trước hết, các bạn cần nhớ là không nên sử dụng chuỗi cố định (hardcode) để trình bày nội dung. Ví dụ để hiển thị tiêu đề như hình sau:
 

Hình 1

Bạn sẽ code:

Hình 2

Như vậy là không nên, Android có hỗ trợ tạo file nguồn, hãy tận dụng nó. Hãy làm theo các bước sau để nội địa hóa ứng dụng cho từng quốc gia.
 

1. Tạo file resource cho từng quốc gia
Mặc định, project Android tạo sẵn một file strings.xml tại thư mục values(hình 3).

Hình 3

Bạn hãy tạo thêm file nữa tương tự vậy nhưng đặt trong thư mục khác, hãy xem Hình 4:

Một cửa sổ tạo mới file resource hiện ra, hãy điền các thông tin như gợi ý (Hình 5):

Hình 5

Trong đó strings.xml là tên file (có thể đặt giống với tên file mặc định), tên thư mục values-vi là thư mục đặt file trên, Android sẽ tự động nhận biết tùy theo ngôn ngữ hệ thống mà thiết bị người dùng sử dụng. Phần hậu tố “vi” được quy ước đặt theo chuẩn ISO 639-1 tên viết tắt của ngôn ngữ, ví dụ tiếng Anh sẽ là “en”, tiếng Đức là “de”, tiếng Nhật là ja” …v.v…

Tham khảo tại link: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes .

2. Tạo resource cho từng file ngôn ngữ trên 
Mở lần lượt các file strings.xml đã tạo ở các thư mục trên và thêm chuỗi vào thẻ resource.

Hình 7

Lưu ý, giá trị của thuộc tính name ở thẻstring phải:

  1. Đặt theo quy tắc tên biến của Java
  2. Giống nhau trên tất cả các file. Ví dụ muốn quy định câu chào tiếng Anh là“Hello” còn  tiếng Việt là “Xin chào” thì 2 giá trị string này phải đặt cùng name ví dụ như là “lblHello”.

3. Cài đặt resource vào layout 
Mở file layout, thay vì cố định chuỗi “Chào mừng tới Bachkhoa-Aptech” như ở trên, hãy gõ@string….rồi lựa chọn giá trị mong muốn (Hình 8).

Hình 8

 

4. Xem sự thay đổi ngôn ngữ trên layout
Hình sau mô tả có thể xem sự thay đổi ngôn ngữ tùy vào ngôn ngữ mặc định trên thiết bị người dùng:

Hình 9

 

5. Cung cấp tùy chỉnh thay đổi ngôn ngữ

Có một thực tế là người dùng có thể sử dụng cài đặt ngôn ngữ cho thiết bị của họ là Tiếng Anh nhưng lại muốn sử dụng chẳng hạn Tiếng Nhật trên ứng dụng của chúng ta. Chính vì vậy mà cần cung cấp thêm tùy chọn thay đổi ngôn ngữ ngay trên trên ứng dụng. Hãy xem hướng dẫn sau:

Chuột phải vào thư mục res > New > Android Resource File (Hình 10)

Hình 10

Tạo file mới tên làmenu_main và lựa chọn Resource TypeMenu (Hình 11).

Hình 11

Trong file menu mới này gõ code (Hình 12):

Hình 12

Mở Activity, viết hàm thay đổi ngôn ngữ:

Mở Activity, cài đặt sử dụng menu tạo trên:

6. Build ứng dụng lên thiết bị
Giao diện tiếng Anh:

Giao diện tiếng Đức:

 

Các bạn có thể đón xem hướng dẫn chi tiết tại video dưới đây

III. Kết luận

Như vậy, qua hướng dẫn này bạn đã biết cách tạo ra ứng dụng Android cho mỗi nhóm người dùng sử dụng các ngôn ngữ khác nhau. Tuy nhiên, vẫn còn thiếu phần định dạng chuỗi, số, tiền tệ. Hãy đón xem phần hướng dẫn tiếp trong thời gian tới nhé!

 

Giảng viên: Vũ Tuấn Minh

   0968276996
< wire:id="SckfavtOd7vZid1uEJOC" wire:initial-data="{"fingerprint":{"id":"SckfavtOd7vZid1uEJOC","name":"embedded.footer","locale":"vn"},"effects":{"listeners":[]},"serverMemo":{"children":[],"errors":[],"htmlHash":"26380eb1","data":[],"dataMeta":[],"checksum":"9b7f434dc179d546b57bdcd374b20bf6dd36cef9d35f63c6ee7d7341df82eb51"}}"!-- Messenger Plugin chat Code -->