Kiến thức lập trình

Android: Hướng dẫn tạo ứng dụng nội địa hóa

  • Tác giả NIIT - ICT HANOI

  • Ngày đăng 02/ 07/ 2018

  • Bình luận 0 Bình luận

I. Giới thiệu

Tiếp nối bài tạo ứng dụng Android đa ngôn ngữ lần trước, vấn đề đặt ra tiếp theo đó chính là “nội địa hóa” ứng dụng.

Điều này có nghĩa là khi bạn nói “Tôi có 1 quyển sách” hay “Tôi có 2 quyển sách” – đơn thuần chỉ là thay thế con số 1 hoặc 2. Nhưng với tiếng Anh, lúc này nếu chỉ có 1 quyển sách thì sẽ là “book” còn từ 2 trở lên phải là “books”. Vâng, khác nhau ở chỗ sẽ có thêm “s”.

Thêm nữa, cú pháp của mỗi ngôn ngữ có thể khác nhau về định dạng. Nếu Tiếng Việt nói “Tại ổ đĩa D:\\ tìm thấy 23 virus” thì Tiếng Anh có thể sẽ là: “System found 23 virus at D:\\ drive”. Vâng, vị trí các dữ liệu “23” và “D:\\” bị đảo chỗ….

Vấn đề nội địa hóa vô cùng cần thiết nữa bởi vì người Mỹ họ sẽ không hiểu định dạng ngày tháng mà Việt Nam sử dụng cũng như ký hiệu phân cách thập phân của họ là dấu “.” chứ không phải là dấu “,” như của chúng ta.

Định dạng về tiền tệ cũng cần phải phù hợp với từng quốc gia, lãnh thổ. Ví dụ như nước Pháp, ai cũng nghĩ họ dùng đồng franc nhưng điều đó xưa rồi, Pháp thuộc liên minh Châu Âu, họ xài đồng tiền chung Euro. Còn Anh Quốc tuy thuộc liên minh Châu Âu nhưng họ lại vẫn dùng đồng bảng.

II. Hướng dẫn tạo ứng dụng nội địa hóa

Hướng dẫn sau đây sẽ giúp các bạn khắc phục các vấn đề nêu trên để nội địa hóa ứng dụng Android, đáp ứng nhu cầu sử dụng của mọi khách hàng trên toàn thế giới.

1. Hiển thị số ít/số nhiều

Mở file resource thêm mã khai báo chuỗi dạng plurals như sau:

<plurals name="notification">
    <item quantity="one">I have %d book</item>
    <item quantity="other">I have %d books</item>
</plurals>

Xem hình 1

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-01

Hình 1

Thêm tương tự với các chuỗi resource của các ngôn ngữ khác, giá trị tại thuộc tính quantity có thể là: "zero" | "one" | "two" | "few" | "many" | "other".

Thêm một TextView trên layout (Hình 2)

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-02

Hình 2

Mở Activity code trong hàm onCreate():

// Cài đặt hiển thị thông báo theo quy ước số ít/số nhiều
String textNotifi = getResources().getQuantityString(R.plurals.notification, 2, 2);
// Lấy textview trên layout
TextView notifi = (TextView) findViewById(R.id.lblNotification);
notifi.setText(textNotifi);

Xem hình 3:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-03

Hình 3

Kết quả:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-04

Hình 4 – số ít

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-05

Hình 5 – số nhiều

|| Khóa học lập trình Android với ứng dụng thực tế

2. Làm đậm/nghiêng/gạch dưới

Dữ liệu chuỗi đặt trong resource hoàn toàn có thể chủ động làm Đậm/Nghiêng/Gạch dưới trong Android. Hãy làm như sau:

Thêm vào chuỗi resource các thẻ <b>, <i>, <u> tại các vị trí muốn làm đậm/nghiêng/gạch dưới. Hãy xem hình:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-05

Hình 6 – làm đậm

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-06

Hình 7 – làm nghiêng và gạch dưới

Kết quả:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-07

3. Mở file resource rồi thêm dữ liệu:Bố cục chuỗi theo mẫu cú pháp

 

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-08

Hình 8 – thông báo tiếng Anh

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-09

Hình 9 – thông báo tiếng Việt

Mở Activity viết mã code trong onCreate():

// Cài đặt hiển thị theo mẫu cú pháp
// %1: số lượng virus - dạng số
// %2: tên ổ đĩa - dạng chuỗi
String message = String.format(getResources().getString(R.string.msgFoundVirus), 23, "D://");
((TextView) findViewById(R.id.lblMessage)).setText(message);

Xem hình 10:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-10

Hình 10

4. Định dạng hiển thị ngày tháng / Số / tiền tệ

Thêm resource trên layout (Hình 11):

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-11

Hình 11

 Mở Activity code trong hàm onCreate():

// Cài đặt hiển thị định dạng nội địa hóa ngày tháng, số và tiền tệ
mMyLocale = getResources().getConfiguration().locale;
// Ngày tháng
Calendar calendar = Calendar.getInstance();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, mMyLocale);
((TextView) findViewById(R.id.lblDate)).setText(dateFormat.format(calendar.getTime()));
// Số
NumberFormat numberFormat = NumberFormat.getNumberInstance(mMyLocale);
((TextView) findViewById(R.id.lblNumber)).setText(numberFormat.format(1900000));
// Tiền tệ
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(mMyLocale);
((TextView) findViewById(R.id.lblCurrency)).setText(currencyFormat.format(1900000));

Xem hình 12:

android-huong-dan-tao-ung-dung-android-noi-dia-hoa-12

Hình 12

Trong đó:

DateFormat: để định dạng ngày tháng.

NumberFormat: để định dạng số và tiền tệ.

 

II. Kết luận

 

Như vậy, qua hướng dẫn này bạn đã biết cách nội địa hóa ứng dụng Android tương ứng với từng quốc gia/vùng lãnh thổ, lượng khách hàng không chỉ giới hạn tại Việt Nam nữa.

Chúc mừng bạn!

MinhVT