Bản địa hoá giao diện người dùng bằng Translations Editor

Translations Editor cung cấp một khung hiển thị tổng hợp và chỉnh sửa được cho tất cả các tài nguyên chuỗi mặc định và đã dịch.

Để được hướng dẫn cách dịch ứng dụng sang nhiều ngôn ngữ, hãy đọc bài viết Hỗ trợ nhiều ngôn ngữ và văn hoá.

Hình 1. Translations Editor hiển thị văn bản ứng dụng trước khi dịch

Tài nguyên chuỗi

Tài nguyên chuỗi của dự án có trong tệp strings.xml. Dự án của bạn có một tệp strings.xml mặc định, trong đó chứa tài nguyên chuỗi bằng ngôn ngữ mặc định cho ứng dụng của bạn. Đây là ngôn ngữ mà bạn cho rằng hầu hết người dùng ứng dụng sử dụng. Bạn cũng có thể dịch các tệp strings.xml có chứa tài nguyên chuỗi cho các ngôn ngữ khác nếu bạn muốn ứng dụng của mình cũng hỗ trợ những ngôn ngữ đó.

Sau khi hoàn tất tệp strings.xml mặc định, bạn có thể tự thêm bản dịch hoặc thanh toán cho một dịch vụ chuyên nghiệp để thực hiện việc dịch. Dù bằng cách nào, bạn cũng nên tận dụng các tính năng của Android Studio để giúp quản lý và kiểm tra hoạt động bản địa hoá văn bản. Để biết thông tin về các dịch vụ dịch thuật chuyên nghiệp, hãy xem bài viết Yêu cầu dịch vụ dịch thuật.

Mở Translations Editor

Bạn có thể truy cập vào Translations Editor tại những nơi sau trong Android Studio.

Mở qua chế độ xem Android

  1. Trong bảng Project (Dự án) > Android ở bên trái, hãy chọn ModuleName > res > values.
  2. Nhấp chuột phải vào tệp strings.xml rồi chọn Open Translation Editor (Mở Translations Editor).

    Translations Editor sẽ hiện các cặp khoá và giá trị của tệp strings.xml.

    Lưu ý: Khi bạn đã dịch các tệp strings.xml, dự án của bạn sẽ có nhiều thư mục values tương ứng mang hậu tố chỉ ngôn ngữ, chẳng hạn như values-es để chỉ tiếng Tây Ban Nha. Tệp strings.xml mặc định của bạn luôn nằm trong thư mục values (không có hậu tố).

Hình 1 hiển thị văn bản ứng dụng mặc định (trong trường hợp này là tiếng Anh) của một ứng dụng đơn giản trong Translations Editor trước khi dịch. Nội dung của các tệp strings.xml đã dịch sẽ hiện ở bên phải cột Untranslatable (Không dịch) với một cột cho mỗi ngôn ngữ, như minh hoạ trong hình 2.

Mở qua strings.xml

Bạn có thể truy cập vào Translation Editor qua tệp strings.xml bất kỳ.

  1. Trong bảng Project (Dự án) > Android ở bên trái, hãy chọn ModuleName > res > values.
  2. Nhấp đúp vào strings.xml để mở và chỉnh sửa.
  3. Trong strings.xml, hãy nhấp vào đường liên kết Open Editor (Mở trình chỉnh sửa) ở góc trên bên phải.

Lưu ý: Nếu bạn nhấp vào đường liên kết Hide notification (Ẩn thông báo), thì đường liên kết Open Editor (Mở trình chỉnh sửa) sẽ biến mất. Để đưa dự án trở lại, hãy đóng rồi mở lại dự án.

Mở qua Design Editor

Bạn có thể mở Translations Editor qua Design Editor của Layout Editor để chỉnh sửa văn bản mặc định và văn bản dịch cho phù hợp hơn với bố cục của bạn. Để nắm được thông tin về cách chuyển đổi ngôn ngữ trong Design Editor, hãy xem nội dung Hiện văn bản đã dịch trong Design Editor.

  1. Trong bảng Project (Dự án) > Android ở bên trái, hãy chọn ModuleName > res > layout.
  2. Nhấp đúp vào content_main.xml để mở ra để chỉnh sửa.
  3. Nhấp vào thẻ Design (Thiết kế) ở góc dưới bên trái để hiện Design Editor.
  4. Trong Design Editor, hãy chọn danh sách thả xuống Language (Ngôn ngữ) .
  5. Chọn Edit Translations (Chỉnh sửa bản dịch) .

Định cấu hình các hàng không dịch

Trong Translation Editor, bạn có thể chọn Untranslatable (Không dịch) để thể hiện rằng bạn không muốn dịch văn bản trong hàng này. Văn bản mà bạn không muốn dịch có thể là văn bản dành riêng cho sản phẩm như tên thương mại và nhãn hiệu thương mại hoặc các thuật ngữ kỹ thuật không có bản dịch.

Khi bạn chọn Untranslatable (Không dịch), dòng tương ứng trong tệp strings.xml mặc định sẽ thêm translatable="false". Trong ví dụ sau, EasyApp ở dòng trên cùng không được dịch vì đó là tên sản phẩm.

<resources>
    <string name="app_name" translatable="false">EasyApp</string>
    <string name="action_settings">Settings</string>
    <string name="easy_app">I am a Simple App!</string>
    <string name="next_page">Next Page</string>
    <string name="second_page_message">I am the Second Page!</string>
    <string name="title_activity_second">SecondActivity</string>
</resources>

Thêm và xoá ngôn ngữ

Translations Editor hỗ trợ BCP 47 và kết hợp mã ngôn ngữ bản địa hoá (locale) với mã khu vực/quốc gia (region) thành một mục chọn duy nhất để bản địa hoá theo mục tiêu. Ngôn ngữ bản địa hoá (locale) không chỉ là về ngôn ngữ (language). Ngôn ngữ bản địa hoá còn bao gồm các yếu tố theo quốc gia, chẳng hạn như định dạng ngày giờ, đơn vị tiền tệ hay số thập phân.

Để thêm ngôn ngữ, hãy làm như sau:

  1. Trong Translations Editor, hãy nhấp vào biểu tượng quả địa cầu .
  2. Trong danh sách thả xuống, hãy chọn ngôn ngữ mà bạn muốn thêm.

    Ngôn ngữ mới sẽ xuất hiện trong Translations Editor và một thư mục value-* có tệp strings.xml sẽ được thêm vào dự án. Ví dụ: value-es cho tiếng Tây Ban Nha.

Để xoá một ngôn ngữ, hãy làm như sau:

Bạn có thể xoá một ngôn ngữ trong Translations Editor bằng cách xoá mọi giá trị trong cột (xem phần Chỉnh sửa, thêm hoặc xoá văn bản) hoặc bạn có thể xoá thư mục dự án cho ngôn ngữ đó, cụ thể như sau:

  1. Trong ngăn Project (Dự án) > Android ở bên trái, hãy chọn ModuleName > res.
  2. Nhấp chuột phải vào thư mục value-* cho ngôn ngữ bạn muốn xoá. Ví dụ: value-hi cho tiếng Hindi.
  3. Trong danh sách thả xuống, hãy chọn Delete (Xoá) để xoá thư mục và tệp strings.xml trong thư mục đó.

Chỉnh sửa, thêm và xoá văn bản

Bạn có thể trực tiếp thao tác trên các tuỳ chọn cài đặt văn bản trong tệp strings.xml hoặc thông qua Translations Editor. Phần này mô tả cách thức thực hiện qua Translations Editor. Trong Translations Editor, bạn có thể chỉnh sửa, thêm hoặc xoá văn bản thông qua chế độ xem danh sách hoặc thông qua trường Translation (Bản dịch) ở cuối Translations Editor.

Hình 2. Chế độ xem danh sách ở trên cùng và trường Translation (Bản dịch) ở dưới cùng

Chế độ xem danh sách

Để chỉnh sửa hoặc thêm văn bản, hãy làm như sau:

  1. Nhấp đúp vào ô bạn muốn chỉnh sửa hoặc thêm văn bản.
  2. Dùng bàn phím để sao chép và dán, hoặc nếu bạn có bàn phím hỗ trợ các dấu phụ, hãy nhập trực tiếp vào chế độ xem danh sách.
  3. Nhấn Tab hoặc di chuyển con trỏ ra khỏi trường đó.

Để xoá văn bản, hãy làm như sau:

  1. Nhấp đúp vào ô bạn muốn xoá.
  2. Trong chế độ xem danh sách, hãy chọn văn bản rồi nhấn vào Delete (Xoá).
  3. Nhấn Tab hoặc di chuyển con trỏ ra khỏi trường đó.

Trường bản dịch

Để chỉnh sửa hoặc thêm văn bản, hãy làm như sau:

  1. Trong chế độ xem danh sách, hãy nhấp một lần vào ô mà bạn muốn chỉnh sửa hoặc thêm văn bản.
  2. Trong trường Translation (Bản dịch), hãy dùng bàn phím để sao chép và dán hoặc nhập trực tiếp vào trường Translation (Bản dịch) nếu bạn có bàn phím hỗ trợ các dấu phụ.
  3. Nhấn Tab hoặc di chuyển con trỏ ra khỏi trường đó.

Để xoá văn bản, hãy làm như sau:

  1. Nhấp một lần vào ô bạn muốn xoá.
  2. Trong trường Translation (Bản dịch), hãy chọn văn bản rồi nhấn vào Delete (Xoá).

Thêm và xoá khoá

Trong Translations Editor, cột Key (Khoá) liệt kê các giá trị nhận dạng riêng biệt cho từng mục dữ liệu trong tệp strings.xml của bạn. Bạn có thể thêm và xoá khoá thông qua Translations Editor. Khi bạn xoá một khoá, Translations Editor sẽ xoá khoá đó cũng như mọi bản dịch liên kết với khoá đó. Translations Editor sử dụng tính năng tái cấu trúc Safe Delete (Xoá an toàn) để xoá khoá. Nhờ vậy, bạn sẽ biết được liệu văn bản khoá có được dùng ở nơi nào khác hay không, đồng thời có cơ hội để điều chỉnh nếu cần thiết trước khi xoá khoá. Tính năng tái cấu trúc Safe Delete (Xoá an toàn) giúp đảm bảo rằng mã của bạn vẫn biên dịch được sau khi bạn xoá khoá.

Để thêm khoá, hãy làm như sau:

  1. Trong Translations Editor, hãy nhấp vàoAdd key (Thêm khoá) .
  2. Trong hộp thoại, hãy nhập tên khoá, giá trị mặc định và vị trí của tệp strings.xml mặc định.

    Hình 3. Thêm khoá

Để xoá khoá, hãy làm như sau:

  1. Trong Translations Editor, hãy chọn khoá bạn muốn xoá.
  2. Nhấp vào biểu tượng Remove Key (Xoá khoá) .
  3. Trong hộp thoại Delete (Xoá), hãy chọn xem bạn có muốn xoá ở chế độ an toàn (Safe Delete) hay không và liệu bạn có muốn tìm kiếm trong phần nhận xét và chuỗi hay không, sau đó nhấp vào OK.

    Hình 4. Xoá hộp thoại

    Nếu không lượt tham chiếu (lượt sử dụng) nào đối với khoá đã xoá hoặc nếu mọi lượt tham chiếu đều có thể thu gọn một cách an toàn, thì khoá sẽ bị xoá. Nếu không, Translations Editor sẽ hiện hộp thoại Usage Detected (Đã phát hiện trường hợp sử dụng) kèm theo thông tin về những vấn đề phát hiện được.

    Hình 5. Xoá hộp thoại

  4. Chọn View Usages (Xem trường hợp sử dụng) để xem xét nội dung sẽ bị xoá. Hộp thoại Find Safe Delete Conflicts (Tìm xung đột xoá an toàn) cho thấy mọi trường hợp sử dụng không an toàn nếu bị xoá để bạn có thể chỉnh sửa mã tương ứng.

    Hình 6. Trường hợp sử dụng không an toàn

  5. Nhấp chuột phải vào một trường hợp sử dụng để xem trình đơn ngữ cảnh rồi chọn Jump to Source (Chuyển tới nguồn) để bạn có thể thực hiện các thay đổi cần thiết.
  6. Trong bảng Find Safe Delete Conflicts (Tìm xung đột xoá an toàn), hãy chọn Rerun Safe Delete (Chạy lại tính năng xoá an toàn) để đảm bảo không cần lưu ý trường hợp sử dụng nào khác.
  7. Khi các trường hợp sử dụng đã được dọn dẹp, hãy nhấp vào Do Refactor (Tiến hành tái cấu trúc) để xoá khoá.

Sửa lỗi

Hình 7 cho thấy Translations Editor hiện nội dung của các tệp strings.xml tiếng Anh, tiếng Tây Ban Nha và tiếng Pháp. Văn bản màu đỏ thể hiện các dòng có lỗi.

Hình 7. Văn bản màu đỏ cho biết điều kiện lỗi mà bạn phải khắc phục

Để sửa lỗi, hãy di chuột qua văn bản màu đỏ để xem nội dung giải thích vấn đề và cách giải quyết.

Khi bạn thay đổi trong Translations Editor, các tệp strings.xml cơ sở sẽ cập nhật những thay đổi của bạn. Khi bạn thay đổi tệp strings.xml, cột tương ứng trong Translations Editor sẽ cập nhật các thay đổi của bạn.

Ví dụ về bản chỉnh sửa của Translations Editor:

  • Hình 7 cho thấy hàng app_name được đánh dấu ở hộp Untranslatable (Không dịch), nhưng lại có bản dịch tiếng Tây Ban Nha. Xoá bản dịch tiếng Tây Ban Nha này đi để sửa lỗi.
  • Hình 7 cho thấy hàng next_page thiếu bản dịch tiếng Pháp. Sử dụng bàn phím để sao chép Page Suivante vào ô để sửa lỗi. Khi bạn dùng bàn phím để sao chép và dán, văn bản bao gồm cả dấu phụ sẽ được sao chép vào ô.

Hiện văn bản đã dịch trong Design Editor

Để xem cách thể hiện văn bản đã dịch trong bố cục của ứng dụng của bạn, hãy chuyển đổi văn bản giữa phiên bản mặc định và phiên bản đã dịch trong Design Editor, cụ thể như sau:

  1. Trong bảng Project (Dự án) > Android ở bên trái, hãy chọn ModuleName > res > layout.
  2. Nhấp đúp vào content_main.xml để mở ra để chỉnh sửa.
  3. Nhấp vào thẻ Design (Thiết kế) ở góc dưới bên trái để hiện Design Editor.
  4. Trong Design Editor, hãy chọn danh sách thả xuống Language (Ngôn ngữ) .
  5. Chọn biểu tượng Edit Translations (Chỉnh sửa bản dịch) .
  6. Chọn ngôn ngữ mà bạn muốn dùng để xem ứng dụng.

    Hình 8. Danh sách ngôn ngữ dạng thả xuống với tiếng Tây Ban Nha đang được chọn

Design Editor thể hiện bố cục của ứng dụng của bạn bằng ngôn ngữ đã chọn, trong trường hợp này là tiếng Tây Ban Nha.

Hình 9. Design Editor cho thấy văn bản đã dịch bằng tiếng Tây Ban Nha

Đặt Design Editor về ngôn ngữ mặc định

Để đặt lại ngôn ngữ về mặc định, hãy chọn es > Language (Ngôn ngữ) .

Hình 10. Đặt thành ngôn ngữ mặc định

Quản lý và kiểm tra văn bản cần bản địa hoá

Nền tảng Android và Android Studio cung cấp một số tính năng giúp bạn quản lý và kiểm tra văn bản cần bản địa hoá trong ứng dụng. Những tính năng này có một số lựa chọn để giúp bạn xử lý những vấn đề liên quan đến chữ viết từ phải sang trái (RTL), chẳng hạn như tiếng Ả Rập hoặc tiếng Do Thái. Bằng việc kiểm tra văn bản cần bản địa hoá, bạn có thể điều chỉnh văn bản giao diện người dùng và bố cục tương ứng trước khi triển khai thông điệp của bạn đến kho lưu trữ nguồn để gửi cho bản dịch sau này.

Tái cấu trúc dự án để hỗ trợ RTL

Android Studio có một lệnh tái cấu trúc cho phép hỗ trợ văn bản hai chiều trong TextView, ConstraintLayoutLinearLayout để các ứng dụng của bạn có thể hiển thị và cho phép người dùng chỉnh sửa văn bản trong cả chữ viết từ trái sang phải (LTR) và chữ viết từ phải sang trái (RTL). Lệnh này cũng cung cấp tính năng tự động phản chiếu bố cục giao diện người dùng của ứng dụng và mọi tiện ích xem. Để xem tính năng thay đổi hướng văn bản và phản chiếu bố cục, bạn cũng phải đặt giá trị cho các thuộc tính hướng văn bản và bố cục trong Layout Editor.

Quy trình sau đây thể hiện cách tái cấu trúc dự án để hỗ trợ RTL:

  1. Chọn Refactor > Add RTL support where possible (Tái cấu trúc > Thêm tính năng hỗ trợ RTL nếu có) để hộp thoại trong hình 11 xuất hiện.

    Hình 11. Thêm tính năng hỗ trợ RTL

    • Nếu phần tử <application> trong tệp AndroidManifest.xml của bạn không có thuộc tính android:supportsRTL="true", thì hãy chọn hộp đánh dấu Update AndroidManifest.xml (Cập nhật tệp AndroidManifest.xml).
    • Nếu targetSdkVersion của ứng dụng là 17 trở lên, hãy chọn Replace Left/Right Properties with Start/End Properties (Thay thế thuộc tính trái/phải bằng thuộc tính bắt đầu/kết thúc). Trong trường hợp này, thuộc tính của bạn nên sử dụng "start" ("bắt đầu") và "end" ("kết thúc") thay vì "left" ("trái") và "right" ("phải"). Ví dụ: android:paddingLeft trở thành android:paddingStart.
    • Nếu targetSdkVersion của ứng dụng là 16 trở xuống, hãy chọn Generate -v17 Versions (Tạo phiên bản -v17). Trong trường hợp này, mã XML của bạn phải sử dụng cả hai tập hợp thuộc tính. Ví dụ: mã XML của bạn phải sử dụng cả android:paddingLeftandroid:paddingStart.
  2. Để hiện cửa sổ Find Refactoring Preview (Tìm bản xem trước tái cấu trúc), hãy nhấp vào Run (Chạy).

    Hình 12. Kiểm tra bản xem trước

  3. Nhấp vào Do Refactor (Tiến hành tái cấu trúc).

Để biết thêm thông tin về việc tái cấu trúc dự án để hỗ trợ RTL, hãy xem nội dung Hỗ trợ RTL gốc trong Android 4.2.

Thuộc tính về hướng văn bản và bố cục

Cửa sổ Properties (Thuộc tính) ở bên phải đưa ra thuộc tính textDirection để sử dụng với các tiện ích văn bản và thuộc tính layoutDirection để sử dụng với các tiện ích bố cục nhằm thay đổi hướng của văn bản và thành phần bố cục. Thuộc tính chỉ hướng được nêu trong cửa sổ Properties (Thuộc tính) ở bên phải và dùng được trên API cấp 17 trở lên.

Để xem thay đổi về hướng văn bản và phản chiếu bố cục, bạn cũng phải tái cấu trúc dự án để hỗ trợ RTL. Trong tiếng Anh, việc thay đổi hướng văn bản chỉ di chuyển dấu câu từ bên phải sang bên trái của văn bản; ví dụ: "Hello World!" trở thành "!Hello World". Để thấy văn bản LTR chuyển sang RTL, bạn phải sử dụng ngôn ngữ RTL trong ứng dụng của mình. Nếu bạn muốn sử dụng tiếng Anh và thấy nút chuyển văn bản thành RTL cho mục đích thử nghiệm, hãy sử dụng pseudolocales. Pseudolocales độc lập với lệnh tái cấu trúc và các thuộc tính chỉ hướng.

Để truy cập và sử dụng các thuộc tính chỉ hướng, hãy làm như sau:

  1. Trong Layout Editor, hãy chọn một tiện ích văn bản.
  2. Mở cửa sổ Properties (Thuộc tính) rồi tìm thuộc tính RTL mà bạn muốn sử dụng.

    Để đặt giá trị cho thuộc tính, hãy chọn một trong các tuỳ chọn sau:

    • firstStrong: Mặc định cho chế độ xem gốc. Ký tự rõ hướng (strong directional character) đầu tiên sẽ xác định hướng của đoạn văn bản. Nếu không có ký tự nào rõ hướng, hướng của đoạn văn bản sẽ là hướng bố cục đã được phân giải của khung hiển thị.
    • anyRtl: Hướng của đoạn văn bản là RTL nếu chứa ký tự rõ hướng RTL bất kỳ. Ngược lại, hướng của đoạn văn bản là LTR nếu chứa ký tự rõ hướng LTR bất kỳ. Nếu không có ký tự nào như vậy, hướng của đoạn văn bản sẽ là hướng bố cục đã được phân giải của chế độ xem.
    • ltr: Hướng của đoạn văn bản là LTR.
    • rtl: Hướng của đoạn văn bản là RTL.
    • locale: Hướng của đoạn văn bản tuỳ thuộc vào ngôn ngữ bản địa hoá của hệ thống.
    • inherit: Mặc định. Sử dụng hướng được đặt trong phần tử mẹ.
  3. Để xem lại văn bản và bố cục đảo ngược, hãy chạy ứng dụng.

Pseudolocales

Pseudolocales là một ngôn ngữ bản địa hoá mô phỏng được thiết kế để giả định các đặc điểm của ngôn ngữ tạo nên giao diện người dùng, bố cục, RTL và các vấn đề dịch thuật khác trong quá trình dịch ứng dụng. Pseudolocales đưa ra các bản dịch nhanh và tự động (có thể đọc được bằng tiếng Anh) cho mọi thông điệp có thể bản địa hoá. Pseudolocales giúp bạn phát hiện được các thông báo không dịch được trong mã nguồn.

Để biết thông tin về cách sử dụng Pseudolocales, hãy xem nội dung Thử nghiệm ứng dụng của bạn bằng Pseudolocales.