Android Studio 的 Translations Editor工具
前一小節我們介紹了如何使用 Resource Manager 管理界面資源,本小結我們學習如何使用 Translations Editor 處理字符串多語言翻譯。
1. 多語言支持
Android 應用可以包含特定于文化的字符串,這些字符串將轉換為當前語言區域的語言。Android 會根據系統語言區域設置來解析特定于語言和文化的資源。我們可以使用 Android 項目中的資源目錄為不同的語言區域提供支持,我們可以提供適合用戶的語言和文化的任何資源類型。
例如,以下圖片顯示了一個應用,它按設備的默認 (en_US) 語言區域和西班牙語 (es_ES) 語言區域顯示字符串和可繪制資源。
要添加對更多語言區域的支持,我們需要在 res/ 內創建額外的目錄。每個目錄的名稱都應遵循以下格式:
<resource type>-b+<language code>[+<country code>]
例如,values-es-rUS/ 包含適用于語言代碼為 es 的語言區域的字符串資源,Android 在運行時根據設備的語言區域設置加載適當的資源。
例如:
FirstApp/
res/
values/
strings.xml
values-es-rUS/
strings.xml
- 英語字符串(默認語言區域),/values/strings.xml:
<resources>
<string name="hello_world">Hello World!</string>
</resources>
- 西班牙語字符串(語言區域為 es),/values-es-rUS/strings.xml:
<resources>
<string name="hello_world">?Hola Mundo!</string>
</resources>
2. Translations Editor
Translations Editor 提供了一個合并的可修改字符串資源的視圖,方便我們查看所有默認和已翻譯的字符串資源。
2.1 打開 Translations Editor
從 Android 視圖打開
-
在左側的 Project > Android 面板中,依次選擇 ModuleName > res > values;
-
右鍵點擊 strings.xml 文件,然后選擇 Open Translations Editor。
從 strings.xml 中打開
我們可以從任一 strings.xml 文件中訪問 Translations Editor。
-
在左側的 Project > Android 面板中,依次選擇 ModuleName > res > values;
-
雙擊 strings.xml 將其打開,以供修改;
-
在 strings.xml 中,點擊右上角的 Open editor 鏈接。
從 Design Editor 中打開
我們可以從 Layout Editor 的 Design Editor 中打開 Translations Editor,以修改默認譯文,使其更好地匹配我們的布局。
-
在左側的 Project > Android 面板中,依次選擇 ModuleName > res > layout;
-
雙擊 activity_main.xml 以將其打開進行修改;
-
點擊左下角的 Design 標簽頁以顯示 Design Editor;
-
在 Design Editor 中,選擇 Language 下拉列表;
-
選擇 Edit Translations 圖標 。
2.2 添加和刪除語言
ranslations Editor 支持 BCP 47,并會將語言區域和區域(國家/地區)代碼合并到一個目標本地化選擇中。 語言區域不僅定義了語言,還包含日期和時間、貨幣和小數等內容的國家/地區相關格式。要添加語言,請執行以下操作:
-
在 Translations Editor 中,點擊地球圖標;
-
從下拉列表中選擇要添加的語言。
Translations Editor 中會顯示新語言,并且包含 strings.xml 文件的 values-* 文件夾會添加到項目中。例如,values-es 表示西班牙語。
要刪除語言,請執行以下操作:
我們可以在 Translations Editor 中刪除相應列中的每個值來刪除對應的語言,也可以刪除該語言對應的項目文件夾,如下所示:
-
在左側的 Project > Android 面板中,依次選擇 ModuleName > res;
-
右鍵點擊要刪除的語言對應的 values-* 文件夾。例如,values-hi 表示印地語;
-
從下拉列表中,選擇 Delete 以刪除該文件夾及其 strings.xml 文件。
2.3 添加和刪除鍵
在 Translations Editor 中,Key 列列出了 strings.xml 文件中每個數據項的唯一標識符。我們可以通過 Translations Editor 添加和刪除鍵。當我們刪除鍵時,Translations Editor 會刪除該鍵及其所有相關翻譯。Translations Editor 會使用安全刪除重構來刪除鍵,以便我們知曉該鍵文本是否用在別處,并且可以在刪除該鍵之前進行必要的調整。安全刪除重構可確保我們在刪除鍵后仍然可以編譯代碼。
要添加鍵,請執行以下操作:
-
在 Translations Editor 中,點擊 Add Key (加號圖標);
-
在對話框中,輸入鍵名稱、默認值以及默認 strings.xml 文件的位置。
要刪除鍵,請執行以下操作:
-
在 Translations Editor 中,選擇要刪除的鍵;
-
點擊 Remove Keys (減號圖標) ;
-
在 Delete 對話框中,確定我們是否要執行安全刪除以及是否要在注釋和字符串中進行搜索,然后點擊 OK ;
如果沒有任何對已刪除鍵的引用(使用),或者所有引用均能安全地解除,則刪除該鍵。否則,Translations Editor 會顯示 Usages Detected 對話框,其中包含檢測到的問題的相關信息。
- 選擇 View Usages,以查看將被刪除的內容。Find Safe Delete Conflicts 對話框顯示了無法安全刪除的所有用例,以便我們可以修改相應的代碼;
-
右鍵點擊相應用例以顯示上下文菜單,然后選擇 Jump to Source 以進行所需的更改;
-
在 Find Safe Delete Conflicts 面板中,選擇 Rerun Safe Delete 以確保沒有任何其他需要注意的使用情況;
-
清理相關使用情況后,點擊 Do Refactor 以刪除鍵。
2.4 修改、添加和刪除文本
在 Translations Editor 中,我們可以通過列表視圖或通過 Translations Editor 底部的 Translation 字段來修改、添加或刪除文本。
Tips:列表視圖位于頂部,Translation 字段位于底部。
2.4.1 列表視圖
要修改或添加文本,請執行以下操作:
-
雙擊要修改或添加文本的單元格;
-
使用鍵盤復制粘貼文本;如果我們的鍵盤支持輸入變音符號,則直接在列表視圖中輸入文本;
-
按 Tab 鍵或將光標移出字段。
要刪除文本,請執行以下操作:
-
雙擊要刪除的單元格;
-
在列表視圖中,選擇相應文本并按 Delete 鍵;
-
按 Tab 鍵或將光標移出字段。
2.4.2 Translation 字段
要修改或添加文本,請執行以下操作:
-
在列表視圖中,點擊要修改或添加文本的單元格;
-
在 Translation 字段中,使用鍵盤復制粘貼文本;如果我們的鍵盤支持輸入變音符號,則直接在 Translation 中輸入文本;
-
按 Tab 鍵或將光標移出字段。
要刪除文本,請執行以下操作:
-
點擊一下要刪除的單元格;
-
在 Translation 字段中,選擇相應文本并按 Delete 鍵。
2.5 配置不可翻譯的行
在 Translations Editor 中,我們可以選擇 Unstranslatable 以指示不想翻譯此行中的文本。我們不想翻譯的文本可能是特定于產品的文本(如商品名稱和商標),或者是沒有譯文的技術術語。
當我們選中 Untranslatable 后,默認 strings.xml 文件中的對應行會添加 translatable=“false”。在以下示例中,頂部行中的 FirstApp 未翻譯,因為它是產品名稱。
<resources>
<string name="app_name" translatable="false">FirstApp</string>
</resources>
3. 顯示預覽
要查看譯文在應用布局中的顯示效果,可以在 Design Editor 中切換默認版和翻譯版文本,如下所示:
-
在左側的 Project > Android 面板中,依次選擇 ModuleName > res > layout。
-
雙擊 activity_main.xml 以將其打開進行修改。
-
點擊左下角的 Design 標簽頁以顯示 Design Editor。
-
在 Design Editor 中,選擇 Language 下拉列表。
-
選擇要以何種語言查看應用。
4. 小結
本節課程我們主要學習了使用 Translations Editor 工具進行字符串多語言支持。本節課程的重點如下:
- 掌握 Android 如何支持多語言;
- 掌握 Translations Editor 編輯字符串多語言翻譯。