Bản địa hoá ứng dụng

Android chạy trên nhiều thiết bị ở nhiều khu vực. Để tiếp cận được nhiều người dùng nhất, hãy đảm bảo ứng dụng của bạn xử lý văn bản, tệp âm thanh, số, đơn vị tiền tệ và đồ hoạ theo những cách phù hợp với khu vực mà ứng dụng được dùng.

Trang này mô tả các phương pháp hay nhất để bản địa hoá ứng dụng Android.

Bạn cần có kiến thức thực hành về Kotlin hoặc ngôn ngữ lập trình Java, đồng thời quen thuộc với việc Tải tài nguyên Android, khai báo thành phần trên giao diện người dùng ở định dạng XML, các điểm cần cân nhắc trong quá trình phát triển (chẳng hạn như vòng đời hoạt động) cũng như các nguyên tắc chung về quốc tế hoá và bản địa hoá.

Bạn nên sử dụng khung tài nguyên Android để tách biệt các khía cạnh đã bản địa hoá của ứng dụng khỏi chức năng cốt lõi của ứng dụng càng nhiều càng tốt.

  • Đặt hầu hết hoặc tất cả nội dung trên giao diện người dùng của ứng dụng vào các tệp tài nguyên, như mô tả trên trang này và trong phần Tổng quan về tài nguyên ứng dụng.
  • Mặt khác, hành vi của giao diện người dùng được điều khiển bằng mã dựa trên Kotlin hoặc Java. Ví dụ: nếu người dùng nhập dữ liệu cần được định dạng hoặc sắp xếp khác nhau tuỳ theo ngôn ngữ, thì bạn sẽ sử dụng Kotlin hoặc ngôn ngữ lập trình Java để xử lý dữ liệu theo phương thức lập trình. Trang này không đề cập đến cách bản địa hoá mã dựa trên Kotlin hoặc Java.

Để được hướng dẫn ngắn gọn về cách bản địa hoá các chuỗi trong ứng dụng, hãy xem phần Hỗ trợ nhiều ngôn ngữ và văn hoá.

Tổng quan: Chuyển đổi tài nguyên trong Android

Tài nguyên là các chuỗi văn bản, bố cục, âm thanh, đồ hoạ và mọi dữ liệu tĩnh khác mà ứng dụng Android của bạn cần. Một ứng dụng có thể chứa nhiều nhóm tài nguyên, mỗi nhóm được tuỳ chỉnh cho một cấu hình thiết bị riêng. Khi người dùng chạy ứng dụng, Android sẽ tự động chọn và tải các tài nguyên phù hợp với thiết bị nhất.

Trang này tập trung vào nội dung bản địa hoá và ngôn ngữ. Để xem nội dung mô tả đầy đủ về cách chuyển đổi tài nguyên và tất cả các loại cấu hình mà bạn có thể chỉ định, chẳng hạn như hướng màn hình hoặc loại màn hình cảm ứng, hãy xem phần Cung cấp tài nguyên thay thế.

Khi viết ứng dụng, bạn sẽ tạo các tài nguyên mặc định và tài nguyên thay thế để ứng dụng sử dụng. Khi người dùng chạy ứng dụng của bạn, hệ thống Android sẽ chọn những tài nguyên cần tải dựa trên ngôn ngữ của thiết bị. Để tạo tài nguyên, bạn đặt các tệp trong các thư mục con có tên chuyên biệt của thư mục res/ trong dự án.

Tại sao tài nguyên mặc định quan trọng

Khi ứng dụng chạy ở bất kỳ ngôn ngữ nào mà bạn chưa cung cấp văn bản dành riêng cho từng ngôn ngữ, Android sẽ tải các chuỗi mặc định từ res/values/strings.xml. Nếu không có tệp mặc định này hoặc nếu thiếu chuỗi mà ứng dụng cần, thì ứng dụng của bạn sẽ không chạy và hiển thị lỗi. Ví dụ sau minh hoạ những điều có thể xảy ra khi tệp văn bản mặc định không đầy đủ.

Ví dụ:

Mã dựa trên Kotlin hoặc Java của ứng dụng chỉ tham chiếu đến hai chuỗi là text_atext_b. Ứng dụng này chứa một tệp tài nguyên được bản địa hoá (res/values-en/strings.xml) định nghĩa text_atext_b bằng tiếng Anh. Ứng dụng này cũng bao gồm một tệp tài nguyên mặc định (res/values/strings.xml) có chứa định nghĩa cho text_a, nhưng không bao gồm định nghĩa cho text_b.

  • Khi ứng dụng này chạy trên một thiết bị có ngôn ngữ được đặt thành tiếng Anh, ứng dụng có thể chạy mà không gặp sự cố nào, vì res/values-en/strings.xml chứa cả hai chuỗi văn bản cần thiết.
  • Tuy nhiên, khi chạy ứng dụng này trên một thiết bị được đặt thành ngôn ngữ không phải là tiếng Anh, người dùng sẽ thấy thông báo lỗi và nút Force Close (Buộc đóng). Ứng dụng không tải được.

Để ngăn chặn trường hợp này, hãy đảm bảo tệp res/values/strings.xml tồn tại và tệp này xác định mọi chuỗi cần thiết. Trường hợp này áp dụng cho tất cả các loại tài nguyên chứ không chỉ chuỗi: bạn cần tạo một tập hợp các tệp tài nguyên mặc định chứa mọi tài nguyên mà ứng dụng của bạn yêu cầu, chẳng hạn như bố cục, đối tượng có thể vẽ hoặc ảnh động. Để biết thông tin về quy trình kiểm thử, hãy xem phần Kiểm thử tài nguyên mặc định.

Sử dụng tài nguyên để bản địa hoá

Phần này trình bày cách tạo tài nguyên mặc định cũng như các tài nguyên thay thế. Ngoài ra, cách tài nguyên được chỉ định mức độ ưu tiên và cách bạn tham chiếu đến tài nguyên trong mã cũng được diễn giải trong phần này.

Tạo các tài nguyên mặc định

Đặt văn bản mặc định của ứng dụng trong res/values/strings.xml. Đối với những chuỗi này, hãy sử dụng ngôn ngữ mặc định – ngôn ngữ mà bạn dự kiến hầu hết người dùng ứng dụng đều sử dụng.

Tập hợp tài nguyên mặc định cũng bao gồm mọi bố cục cũng như đối tượng có thể vẽ mặc định, đồng thời có thể bao gồm các loại tài nguyên khác như ảnh động. Những tài nguyên này nằm trong các thư mục sau:

  • res/drawable/: thư mục bắt buộc chứa ít nhất một tệp đồ hoạ cho biểu tượng của ứng dụng trên Google Play
  • res/layout/: thư mục bắt buộc chứa tệp XML xác định bố cục mặc định
  • res/anim/: bắt buộc nếu bạn có bất kỳ thư mục res/anim-<qualifiers> nào
  • res/xml/: bắt buộc nếu bạn có bất kỳ thư mục res/xml-<qualifiers> nào
  • res/raw/: bắt buộc nếu bạn có bất kỳ thư mục res/raw-<qualifiers> nào

Mẹo: Trong mã của bạn, hãy kiểm tra từng tệp tham chiếu đến một tài nguyên Android. Hãy đảm bảo là bạn đã xác định tài nguyên mặc định cho mỗi tài nguyên. Ngoài ra, hãy đảm bảo tệp chuỗi mặc định đã hoàn chỉnh: tệp chuỗi được bản địa hoá có thể chứa một tập hợp con gồm các chuỗi, nhưng tệp chuỗi mặc định phải chứa tất cả các chuỗi.

Tạo các tài nguyên thay thế

Một phần lớn trong việc bản địa hoá ứng dụng là cung cấp văn bản thay thế cho nhiều ngôn ngữ. Trong một số trường hợp, bạn cũng cung cấp đồ hoạ, âm thanh, bố cục thay thế và các tài nguyên khác dành riêng cho từng ngôn ngữ cụ thể.

Một ứng dụng có thể chỉ định nhiều thư mục res/<qualifiers>/, mỗi thư mục có các bộ hạn định khác nhau. Để tạo tài nguyên thay thế cho một ngôn ngữ khác, hãy sử dụng bộ hạn định chỉ định một ngôn ngữ hoặc tổ hợp ngôn ngữ theo khu vực. Tên của thư mục tài nguyên phải tuân theo lược đồ đặt tên đã mô tả trong phần Cung cấp các tài nguyên thay thế, nếu không, ứng dụng của bạn sẽ không thể biên dịch được.

Ví dụ:

Giả sử ngôn ngữ mặc định của ứng dụng là tiếng Anh và bạn muốn bản địa hoá tất cả văn bản trong ứng dụng sang tiếng Pháp và tất cả văn bản, ngoại trừ tên ứng dụng sang tiếng Nhật. Trong trường hợp này, bạn sẽ tạo 3 tệp strings.xml, mỗi tệp được lưu trữ trong một thư mục tài nguyên dành riêng cho từng ngôn ngữ:

  1. res/values/strings.xml
    Chứa văn bản tiếng Anh cho mọi chuỗi mà ứng dụng sử dụng, bao gồm cả văn bản cho một chuỗi có tên title.
  2. res/values-fr/strings.xml
    Chứa văn bản tiếng Pháp cho tất cả các chuỗi, kể cả title.
  3. res/values-ja/strings.xml
    Chứa văn bản tiếng Nhật cho tất cả các chuỗi trừ title.

Nếu mã dựa trên Kotlin hoặc Java của bạn tham chiếu đến R.string.title, thì dưới đây là những gì sẽ xảy ra trong thời gian chạy:

  • Nếu bạn đặt thiết bị thành ngôn ngữ nào khác ngoài tiếng Pháp, thì Android sẽ tải title từ tệp res/values/strings.xml.
  • Nếu bạn đặt thiết bị thành tiếng Pháp, thì Android sẽ tải title từ tệp res/values-fr/strings.xml.

Nếu bạn đặt thiết bị thành tiếng Nhật, thì Android sẽ tìm title trong tệp res/values-ja/strings.xml. Tuy nhiên, do không có chuỗi nào như vậy trong tệp đó nên Android sẽ quay lại mặc định và tải title bằng tiếng Anh từ tệp res/values/strings.xml.

Tài nguyên nào sẽ được ưu tiên?

Nếu nhiều tệp tài nguyên khớp với cấu hình của một thiết bị, Android sẽ tuân theo một bộ quy tắc để quyết định tệp nào cần sử dụng. Trong số các bộ hạn định có thể được chỉ định trong tên thư mục tài nguyên, ngôn ngữ gần như luôn được ưu tiên.

Ví dụ:

Giả sử một ứng dụng bao gồm một bộ đồ hoạ mặc định và hai bộ đồ hoạ khác, mỗi bộ đồ hoạ được tối ưu hoá cho một chế độ thiết lập thiết bị khác nhau:

  • res/drawable/
    Chứa đồ hoạ mặc định.
  • res/drawable-small-land-stylus/
    Chứa thành phần đồ hoạ được tối ưu hoá để sử dụng trên một thiết bị có thể nhập vào bằng bút cảm ứng và có màn hình QVGA mật độ thấp theo hướng ngang.
  • res/drawable-ja/
    Chứa thành phần đồ hoạ được tối ưu hoá để sử dụng với tiếng Nhật.

Nếu ứng dụng chạy trên một thiết bị được định cấu hình để sử dụng tiếng Nhật, Android sẽ tải đồ hoạ từ res/drawable-ja/, ngay cả khi thiết bị đó là thiết bị có thể nhập vào bằng bút cảm ứng và có màn hình QVGA mật độ thấp theo hướng ngang.

Trường hợp ngoại lệ: Những bộ hạn định duy nhất được ưu tiên hơn ngôn ngữ trong quá trình lựa chọn là mã di động quốc gia (MCC) và mã mạng di động (MNC).

Ví dụ:

Giả sử bạn gặp phải trường hợp sau:

  • Mã ứng dụng gọi cho R.string.text_a
  • .
  • Có hai tệp tài nguyên liên quan:
    • res/values-mcc404/strings.xml, bao gồm text_a bằng ngôn ngữ mặc định của ứng dụng, trong trường hợp này là tiếng Anh.
    • res/values-hi/strings.xml, bao gồm text_a bằng tiếng Hindi.
  • Ứng dụng này đang chạy trên một thiết bị có cấu hình sau:
    • Thẻ SIM được kết nối với mạng di động ở Ấn Độ (MCC 404).
    • Ngôn ngữ được đặt thành tiếng Hindi (hi).

Android tải text_a từ res/values-mcc404/strings.xml (bằng tiếng Anh), ngay cả khi thiết bị được định cấu hình cho tiếng Hindi. Lý do là trong quá trình lựa chọn tài nguyên, Android ưu tiên so khớp MCC thay vì so khớp ngôn ngữ.

Quá trình lựa chọn không phải lúc nào cũng đơn giản như các ví dụ đề xuất này. Để xem nội dung mô tả chi tiết hơn về quy trình này, hãy xem phần Cách Android tìm tài nguyên phù hợp nhất. Tất cả các bộ hạn định được mô tả và liệt kê theo thứ tự ưu tiên trong phần Tổng quan về tài nguyên ứng dụng.

Tham chiếu đến các tài nguyên trong mã

Trong mã dựa trên Kotlin hoặc Java của ứng dụng, bạn sẽ tham chiếu đến các tài nguyên bằng cú pháp R.resource_type.resource_name hoặc android.R.resource_type.resource_name. Để biết thêm thông tin, hãy xem phần Truy cập vào tài nguyên ứng dụng của bạn.

Quản lý chuỗi để bản địa hoá

Phần này mô tả các phương pháp hay nhất để quản lý các chuỗi có liên quan đến việc bản địa hoá.

Di chuyển tất cả các chuỗi vào strings.xml

Khi bạn tạo các ứng dụng, đừng mã hoá cứng bất kỳ chuỗi nào. Thay vào đó, hãy khai báo tất cả các chuỗi dưới dạng tài nguyên trong một tệp strings.xml mặc định để giúp bạn dễ dàng cập nhật và bản địa hoá. Bạn có thể dễ dàng trích xuất, dịch và tích hợp các chuỗi trong tệp strings.xml vào lại ứng dụng của bạn (bằng các bộ hạn định thích hợp) mà không cần thực hiện thay đổi với mã đã biên dịch.

Nếu bạn tạo hình ảnh bằng văn bản, hãy đặt các chuỗi đó vào strings.xml và tạo lại hình ảnh sau khi dịch.

Tuân thủ các nguyên tắc của Android đối với chuỗi giao diện người dùng

Khi bạn thiết kế và phát triển giao diện người dùng, hãy đặc biệt chú ý đến cách bạn trò chuyện với người dùng. Nói chung, hãy sử dụng văn phong súc tích với đặc điểm thân thiện nhưng ngắn gọn, đồng thời dùng văn phong nhất quán trong toàn bộ giao diện người dùng của bạn.

Hãy nhớ đọc và làm theo các đề xuất của Material Design về văn phong và lựa chọn từ ngữ. Làm như vậy sẽ khiến ứng dụng của bạn trông hấp dẫn hơn đối với người dùng và giúp người dùng nhanh chóng hiểu được giao diện người dùng của bạn.

Ngoài ra, hãy luôn sử dụng thuật ngữ chuẩn của Android bất cứ khi nào có thể, chẳng hạn như các phần tử trên giao diện người dùng như thanh ứng dụng, trình đơn tuỳ chọn, thanh hệ thống và thông báo. Việc sử dụng các thuật ngữ của Android một cách chính xác và nhất quán giúp dễ dàng dịch hơn và mang lại sản phẩm cuối tốt hơn cho người dùng.

Cung cấp ngữ cảnh đầy đủ cho các chuỗi được khai báo

Khi bạn khai báo các chuỗi trong tệp strings.xml, hãy nhớ mô tả ngữ cảnh mà chuỗi được sử dụng. Thông tin này là vô giá đối với người dịch và giúp bản dịch có chất lượng tốt hơn. Điều này cũng giúp bạn quản lý các chuỗi của mình hiệu quả hơn.

Dưới đây là ví dụ:

<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>

Hãy cân nhắc cung cấp thông tin ngữ cảnh như sau:

  • Chuỗi này dùng để làm gì? Người dùng nhìn thấy chuỗi này khi nào và ở đâu?
  • Mục này nằm ở vị trí nào trong bố cục? Ví dụ: bản dịch trong các nút sẽ ít linh hoạt hơn so với trong hộp văn bản.

Đánh dấu các phần của thông báo không được dịch

Thông thường, chuỗi chứa văn bản không được dịch sang các ngôn ngữ khác. Ví dụ thường gặp là một đoạn mã, phần giữ chỗ cho một giá trị, biểu tượng đặc biệt hoặc tên. Khi bạn chuẩn bị các chuỗi cho việc biên dịch, hãy tìm và đánh dấu văn bản phải giữ nguyên mà không cần dịch để người dịch không thay đổi văn bản đó.

Để đánh dấu văn bản không được dịch, hãy sử dụng một thẻ giữ chỗ <xliff:g>. Dưới đây là một thẻ mẫu cho biết rằng bạn không nên thay đổi văn bản "%1$s" trong quá trình dịch để tránh làm hỏng thông báo:

<string name="countdown">
  <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday
</string>

Khi bạn khai báo một thẻ giữ chỗ, hãy thêm thuộc tính mã nhận dạng để giải thích mục đích sử dụng phần giữ chỗ đó. Nếu sau đó ứng dụng của bạn thay thế giá trị phần giữ chỗ, hãy nhớ cung cấp một thuộc tính mẫu để làm rõ mục đích sử dụng dự kiến.

Sau đây là một số ví dụ khác về thẻ giữ chỗ:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special Unicode symbol -->
<string name="star_rating">Check out our 5
    <xliff:g id="star">\u2605</xliff:g>
</string>
<!-- Example placeholder for a URL -->
<string name="app_homeurl">
    Visit us at <xliff:g
    id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
    Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
<!-- Example placeholder for a literal -->
<string name="promo_message">
    Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount.
</string>
...
</resources>

Danh sách kiểm tra bản địa hóa

Để biết toàn bộ thông tin tổng quan về quy trình bản địa hoá và phân phối ứng dụng Android, hãy xem phần Dịch và bản địa hoá ứng dụng.

Mẹo bản địa hoá

Hãy làm theo các mẹo sau đây khi bản địa hoá ứng dụng.

Thiết kế để ứng dụng hoạt động ở mọi ngôn ngữ

Đừng giả định bất kỳ điều gì về thiết bị mà người dùng chạy ứng dụng của bạn. Thiết bị có thể có phần cứng mà bạn không lường trước, hoặc thiết bị có thể được đặt thành ngôn ngữ không như bạn dự kiến, hoặc bạn không thể kiểm thử. Hãy thiết kế sao cho ứng dụng của bạn hoạt động bình thường hoặc nếu bị lỗi thì sẽ không gây ra hậu quả nghiêm trọng bất kể ứng dụng chạy trên thiết bị nào.

Lưu ý quan trọng: Đảm bảo ứng dụng của bạn có đủ bộ tài nguyên mặc định: bao gồm các thư mục res/drawable/res/values/ mà không có đối tượng sửa đổi bổ sung trong tên thư mục chứa tất cả hình ảnh và văn bản mà ứng dụng cần.

Nếu thiếu dù chỉ một tài nguyên mặc định, thì ứng dụng đó sẽ không chạy trên thiết bị được đặt thành ngôn ngữ không được hỗ trợ. Ví dụ: nếu tệp mặc định res/values/strings.xml thiếu một chuỗi mà ứng dụng cần, thì khi ứng dụng chạy bằng ngôn ngữ không được hỗ trợ và cố gắng tải res/values/strings.xml, người dùng sẽ thấy thông báo lỗi và nút Force Close (Buộc đóng).

Để biết thêm thông tin, hãy xem phần Kiểm thử các tài nguyên mặc định.

Thiết kế bố cục linh hoạt

Nếu cần sắp xếp lại bố cục để phù hợp với một ngôn ngữ nhất định, bạn có thể tạo một bố cục thay thế cho ngôn ngữ đó, chẳng hạn như res/layout-de/main.xml cho bố cục tiếng Đức. Tuy nhiên, việc này có thể khiến ứng dụng của bạn khó duy trì hơn. Bạn nên tạo một bố cục linh hoạt hơn.

Một tình huống điển hình khác là ngôn ngữ yêu cầu bố cục khác. Ví dụ: bạn có thể có một biểu mẫu liên hệ, trong đó bao gồm 2 trường tên khi ứng dụng chạy bằng tiếng Nhật, nhưng gồm 3 trường tên khi ứng dụng chạy bằng một số ngôn ngữ khác. Bạn có thể xử lý vấn đề này bằng một trong hai cách sau:

  • Tạo một bố cục có trường mà bạn có thể bật hoặc tắt theo cách lập trình, dựa trên ngôn ngữ.
  • Có bố cục chính bao gồm một bố cục khác có trường có thể thay đổi. Bố cục thứ hai có thể có cấu hình tuỳ theo ngôn ngữ.

Tránh tạo nhiều tệp tài nguyên và chuỗi văn bản hơn mức cần thiết

Bạn có thể không cần tạo ngôn ngữ thay thế cụ thể cho mọi tài nguyên trong ứng dụng của mình. Ví dụ: bố cục được xác định trong tệp res/layout/main.xml có thể hoạt động ở bất kỳ ngôn ngữ nào. Trong trường hợp đó, bạn không cần tạo tệp bố cục thay thế nào.

Ngoài ra, bạn có thể không cần tạo văn bản thay thế cho mỗi chuỗi. Chẳng hạn, giả sử:

  • Ngôn ngữ mặc định của ứng dụng là tiếng Anh (Mỹ). Mọi chuỗi mà ứng dụng dùng đều được xác định bằng cách sử dụng cách viết tiếng Anh (Mỹ) trong res/values/strings.xml.
  • Đối với một số cụm từ quan trọng, bạn cần cung cấp đúng chính tả bằng tiếng Anh – Anh. Bạn muốn các chuỗi thay thế này được sử dụng khi ứng dụng chạy trên một thiết bị ở Vương quốc Anh.

Để thực hiện việc này, hãy tạo một tệp nhỏ có tên là res/values-en-rGB/strings.xml chỉ bao gồm các chuỗi sẽ khác khi ứng dụng chạy ở Vương quốc Anh. Đối với tất cả các chuỗi còn lại, ứng dụng sẽ quay về các giá trị mặc định và sử dụng nội dung được xác định trong res/values/strings.xml.

Dùng đối tượng Ngữ cảnh Android để tra cứu ngôn ngữ theo cách thủ công

Bạn có thể tra cứu ngôn ngữ bằng cách sử dụng đối tượng Context mà Android cung cấp như trong ví dụ sau:

Kotlin

val primaryLocale: Locale = context.resources.configuration.locales[0]
val locale: String = primaryLocale.displayName

Java

Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0);
String locale = primaryLocale.getDisplayName();

Sử dụng dịch vụ dịch ứng dụng

Dịch vụ dịch ứng dụng được tích hợp vào Play Console. Dịch vụ này giúp bạn nhận báo giá tức thì và đặt hàng qua một công ty dịch thuật. Bạn có thể đặt hàng bản dịch sang một hoặc nhiều ngôn ngữ cho chuỗi giao diện người dùng ứng dụng, văn bản Trang thông tin trên Cửa hàng Play, tên IAP và văn bản của chiến dịch quảng cáo.

Kiểm thử ứng dụng đã bản địa hoá

Kiểm thử ứng dụng đã bản địa hoá trên thiết bị hoặc sử dụng Trình mô phỏng Android. Cụ thể, hãy kiểm thử ứng dụng để đảm bảo ứng dụng đã bao gồm tất cả tài nguyên mặc định cần thiết.

Kiểm thử trên thiết bị

Xin lưu ý rằng thiết bị bạn đang kiểm thử có thể khác biệt đáng kể so với thiết bị được cung cấp cho người tiêu dùng ở những nơi khác. Các ngôn ngữ hiện có trên thiết bị của bạn có thể khác với các ngôn ngữ có sẵn trên các thiết bị khác. Ngoài ra, độ phân giải và mật độ màn hình thiết bị có thể khác nhau, điều này có thể ảnh hưởng đến cách hiển thị các chuỗi và đối tượng có thể vẽ trong giao diện người dùng của bạn.

Để thay đổi ngôn ngữ miền bản địa hoặc ngôn ngữ trên thiết bị, hãy dùng ứng dụng Cài đặt.

Kiểm thử trên trình mô phỏng

Để biết thông tin chi tiết về cách sử dụng trình mô phỏng, hãy xem phần Chạy ứng dụng trên Trình mô phỏng Android.

Tạo và sử dụng một ngôn ngữ tuỳ chỉnh

Ngôn ngữ "tuỳ chỉnh" là một tổ hợp ngôn ngữ hoặc khu vực mà ảnh hệ thống Android không hỗ trợ rõ ràng. Bạn có thể kiểm thử cách ứng dụng chạy ở một ngôn ngữ tuỳ chỉnh bằng cách tạo một ngôn ngữ tuỳ chỉnh trong trình mô phỏng. Có hai cách để thực hiện việc này:

  • Sử dụng ứng dụng Custom Locale (Ngôn ngữ tuỳ chỉnh) có thể truy cập từ thẻ ứng dụng. Sau khi bạn tạo một ngôn ngữ tuỳ chỉnh, hãy chuyển sang ngôn ngữ đó bằng cách chạm và giữ tên ngôn ngữ.
  • Thay đổi sang ngôn ngữ tuỳ chỉnh từ shell adb, như mô tả trong phần sau.

Khi bạn đặt trình mô phỏng thành một ngôn ngữ không được hỗ trợ trong ảnh hệ thống Android, hệ thống sẽ tự hiển thị theo ngôn ngữ mặc định. Tuy nhiên, ứng dụng của bạn đã bản địa hoá đúng cách.

Thay đổi ngôn ngữ trình mô phỏng từ shell adb

Để thay đổi ngôn ngữ trong trình mô phỏng bằng cách sử dụng shell adb, hãy thực hiện như sau:

  1. Chọn ngôn ngữ bạn muốn kiểm tra và xác định thẻ ngôn ngữ BCP-47 của ngôn ngữ đó, chẳng hạn như fr-CA cho tiếng Pháp ở Canada.
  2. Chạy trình mô phỏng.
  3. Từ một trình thông dịch dòng lệnh trên máy chủ, hãy chạy lệnh sau:
    adb shell
    hoặc nếu bạn có một thiết bị được đính kèm, hãy chỉ định rằng bạn muốn trình mô phỏng bằng cách thêm tuỳ chọn -e:
    adb -e shell
  4. Tại dấu nhắc lệnh shell adb (#), hãy chạy lệnh này:
    setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
    Thay thế các mục trong dấu ngoặc vuông bằng các mã thích hợp từ Bước 1.

    Ví dụ: để kiểm tra bằng tiếng Pháp ở Canada:
    setprop persist.sys.locale fr-CA;stop;sleep 5;start

Việc này sẽ khiến trình mô phỏng khởi động lại. Khi Màn hình chính xuất hiện trở lại, hãy chạy lại ứng dụng và ứng dụng sẽ chạy bằng ngôn ngữ mới.

Kiểm thử dành cho các tài nguyên mặc định

Để kiểm thử xem một ứng dụng có bao gồm mọi tài nguyên chuỗi mà ứng dụng đó cần hay không, hãy thực hiện như sau:

  1. Đặt trình mô phỏng hoặc thiết bị thành ngôn ngữ mà ứng dụng của bạn không hỗ trợ. Ví dụ: nếu ứng dụng có chuỗi tiếng Pháp bằng res/values-fr/ nhưng không có chuỗi tiếng Tây Ban Nha nào trong res/values-es/, thì hãy đặt ngôn ngữ của trình mô phỏng thành tiếng Tây Ban Nha. Bạn có thể sử dụng ứng dụng Ngôn ngữ tuỳ chỉnh để đặt trình mô phỏng thành một ngôn ngữ không được hỗ trợ.
  2. Chạy ứng dụng.
  3. Nếu ứng dụng hiển thị thông báo lỗi và nút Buộc đóng, thì có thể ứng dụng đang tìm một chuỗi không có sẵn. Hãy đảm bảo rằng tệp res/values/strings.xml của bạn chứa định nghĩa cho mọi chuỗi mà ứng dụng sử dụng.

Nếu kiểm thử thành công, hãy lặp lại kiểm thử cho các loại cấu hình khác. Ví dụ: nếu ứng dụng có tệp bố cục với tên là res/layout-land/main.xml nhưng không chứa tệp có tên là res/layout-port/main.xml, hãy đặt trình mô phỏng hoặc thiết bị theo hướng dọc và xem ứng dụng có chạy hay không.