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 编辑字符串多语言翻译。