使用 Translations Editor 本地化界面

Translations Editor 提供了一个合并的可修改视图,方便您查看所有默认和已翻译的字符串资源

有关将应用翻译成不同语言的说明,请参阅支持不同的语言和文化

图 1. 显示翻译前的应用文本的 Translations Editor

字符串资源

项目的字符串资源包含在 strings.xml 文件中。您的项目有一个默认的 strings.xml 文件,其中包含采用应用默认语言(即您预计大多数应用用户都会使用的语言)的字符串资源。您还可以拥有一些经过翻译的 strings.xml 文件,其中包含您希望应用支持的其他语言的字符串资源。

完成默认的 strings.xml 文件后,您可以自己添加译文,也可以付费请专业服务提供翻译。无论采用哪种方式,您都应该利用 Android Studio 功能帮助您管理和测试可本地化的文本。如需了解专业翻译服务,请参阅订购翻译服务

打开 Translations Editor

您可以从 Android Studio 中的以下位置访问 Translations Editor。

从 Android 视图打开

  1. 在左侧的 Project > Android 面板中,依次选择 ModuleName > res > values
  2. 右键点击 strings.xml 文件,然后选择 Open Translations Editor

    Translations Editor 会显示 strings.xml 文件中的键值对。

    注意:当您翻译完 strings.xml 文件后,项目会有多个对应的 values 文件夹,文件夹名称带有表示语言的后缀,例如 values-es 表示西班牙语。默认 strings.xml 文件始终位于 values(无后缀)文件夹中。

图 1 显示了在翻译工作完成之前一个简单应用在 Translations Editor 中的默认应用文本(在本示例中为英语)。翻译后的 strings.xml 文件的内容将显示在 Untranslatable 列的右侧,每种语言一列,如图 2 所示。

从 strings.xml 中打开

您可以从任一 strings.xml 文件中访问 Translations Editor

  1. 在左侧的 Project > Android 面板中,依次选择 ModuleName > res > values
  2. 双击 strings.xml 将其打开,以供修改。
  3. strings.xml 中,点击右上角的 Open editor 链接。

注意:如果您点击 Hide notification 链接,Open editor 链接将会消失。如要让其重新显示,请关闭然后重新打开项目。

从 Design Editor 中打开

您可以从 Layout Editor 的 Design Editor 中打开 Translations Editor,以修改默认译文,使其更好地匹配您的布局。如需了解如何在 Design Editor 中切换语言,请参阅在 Design Editor 中显示译文

  1. 在左侧的 Project > Android 面板中,依次选择 ModuleName > res > layout
  2. 双击 content_main.xml 将其打开,以供修改。
  3. 点击左下角的 Design 标签页以显示 Design Editor
  4. 在 Design Editor 中,选择 Language 下拉列表。
  5. 选择 Edit Translations 图标

配置不可翻译的行

Translations Editor 中,您可以选择 Unstranslatable 以指示您不想翻译此行中的文本。您不想翻译的文本可能是特定于产品的文本(如商品名称和商标),或者是没有译文的技术术语。

当您选中 Untranslatable 后,默认 strings.xml 文件中的对应行会添加 translatable="false"。在以下示例中,顶部行中的 EasyApp 未翻译,因为它是产品名称。

<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>

添加和删除语言

Translations Editor 支持 BCP 47,并会将语言区域和区域(国家/地区)代码合并到一个目标本地化选择中。语言区域不仅定义了语言,还包含日期和时间、货币和小数等内容的国家/地区相关格式。

如要添加语言,请执行以下操作:

  1. Translations Editor 中,点击地球图标
  2. 从下拉列表中选择要添加的语言。

    Translations Editor 中会显示新语言,并且包含 strings.xml 文件的 values-* 文件夹会添加到项目中。例如,values-es 表示西班牙语。

如要删除语言,请执行以下操作:

您可以在 Translations Editor 中删除相应列中的每个值来删除对应的语言(请参阅修改、添加或删除文本),也可以删除该语言对应的项目文件夹,如下所示:

  1. 在左侧的 Project > Android 面板中,依次选择 ModuleName > res
  2. 右键点击要删除的语言对应的 values-* 文件夹。例如,values-hi 表示印地语。
  3. 从下拉列表中,选择 Delete 以删除该文件夹及其 strings.xml 文件。

修改、添加和删除文本

您可以直接在 strings.xml 文件中或通过 Translations Editor 对文本设置执行操作。本部分介绍了 Translations Editor 方法。在 Translations Editor 中,您可以通过列表视图或通过 Translations Editor 底部的 Translation 字段来修改、添加或删除文本。

图 2. 顶部的列表视图以及底部的 Translation 字段

列表视图

如要修改或添加文本,请执行以下操作:

  1. 双击要修改或添加文本的单元格。
  2. 使用键盘复制粘贴文本;或者,如果您的键盘支持输入变音符号,可直接在列表视图中输入文本。
  3. Tab 键或将光标移出字段。

如要删除文本,请执行以下操作:

  1. 双击要删除的单元格。
  2. 在列表视图中,选择相应文本并按 Delete 键。
  3. Tab 键或将光标移出字段。

“Translation”字段

如要修改或添加文本,请执行以下操作:

  1. 在列表视图中,点击要修改或添加文本的单元格。
  2. Translation 字段中,使用键盘复制粘贴文本;或者,如果您的键盘支持输入变音符号,可直接在 Translation 中输入文本。
  3. Tab 键或将光标移出字段。

如要删除文本,请执行以下操作:

  1. 点击一下要删除的单元格。
  2. Translation 字段中,选择相应文本并按 Delete 键。

如添加和删除键

在 Translations Editor 中,Key 列列出了 strings.xml 文件中每个数据项的唯一标识符。您可以通过 Translations Editor 添加和删除键。当您删除键时,Translations Editor 会删除该键及其所有相关翻译。Translations Editor 会使用安全删除重构来删除键,以便您知晓该键文本是否用在别处,并且可以在删除该键之前进行必要的调整。安全删除重构可确保您在删除键后仍然可以编译代码。

如要添加键,请执行以下操作:

  1. Translations Editor 中,点击 Add Key 图标
  2. 在对话框中,输入键名称、默认值以及默认 strings.xml 文件的位置。

    图 3. 添加键

如要删除键,请执行以下操作:

  1. 在 Translations Editor 中,选择要删除的键。
  2. 点击 Remove Keys 图标
  3. Delete 对话框中,确定您是否要执行安全删除以及是否要在注释和字符串中进行搜索,然后点击 OK

    图 4. “Delete”对话框

    如果没有任何对已删除键的引用(使用),或者所有引用均能安全地解除,则删除该键。否则,Translations Editor 会显示 Usages Detected 对话框,其中包含检测到的问题的相关信息。

    图 5. “Delete”对话框

  4. 选择 View Usages,以查看将被删除的内容。Find Safe Delete Conflicts 对话框显示了无法安全删除的所有使用情况,以便您可以修改相应的代码。

    图 6. 不安全的使用情况

  5. 右键点击相应使用情况以显示上下文菜单,然后选择 Jump to Source 以进行所需的更改。
  6. Find Safe Delete Conflicts 面板中,选择 Rerun Safe Delete 以确保没有任何其他需要注意的使用情况。
  7. 清理相关使用情况后,点击 Do Refactor 以删除键。

更正错误

图 7 所示的 Translations Editor 显示了英语、西班牙语和法语 strings.xml 文件的内容。红色文本表示有错误的行。

图 7. 红色文本表示您必须修正的错误情况

如要更正错误,请将鼠标悬停在红色文本上,以显示问题的说明及其解决方法。

当您在 Translations Editor 中进行更改时,底层的 strings.xml 文件会根据您所做的更改而更新。当您在 strings.xml 文件中进行更改时,Translations Editor 中的相应列会根据您所做的更改而更新。

Translations Editor 更正示例:

  • 图 7 显示 app_name 行中的 Untranslatable 处于选中状态,但提供了西班牙语翻译。如要更正此错误,请删除西班牙语翻译。
  • 图 7 显示 next_page 行缺少法语翻译。如要更正此错误,请使用键盘将 Page Suivante 复制到相应单元格中。键盘复制粘贴操作会将带有变音符号的文本复制到该单元格中。

在 Design Editor 中显示译文

如要查看译文在应用布局中的显示效果,请在 Design Editor 中切换默认版和翻译版文本,如下所示:

  1. 在左侧的 Project > Android 面板中,依次选择 ModuleName > res > layout
  2. 双击 content_main.xml 将其打开,以供修改。
  3. 点击左下角的 Design 标签页以显示 Design Editor
  4. 在 Design Editor 中,选择 Language 下拉列表。
  5. 选择 Edit Translations 图标
  6. 选择要以何种语言查看应用。

    图 8. 选中西班牙语的语言下拉列表

Design Editor 会以所选语言(在本示例中为西班牙语)显示应用布局。

图 9. 显示西班牙语译文的 Design Editor

将 Design Editor 的语言设置为默认语言

如要将语言恢复为默认值,请依次选择 es > Language 图标

图 10. 设置为默认语言

管理和测试可本地化的文本

Android 平台和 Android Studio 提供了多种功能来帮助您管理和测试可本地化的应用文本。这些功能提供了一些选项来帮助您确定从右到左 (RTL) 显示的文本(如阿拉伯语或希伯来语)中的问题。通过测试可本地化的文本,您可以在将消息提交到源代码库以便之后送交翻译之前,对界面文本及其布局进行调整。

针对 RTL 支持重构项目

Android Studio 包含一个重构命令,该命令实现了对 TextViewConstraintLayoutLinearLayout 元素中的双向文本的支持,因此应用可以按从左到右 (LTR) 和从右到左 (RTL) 的方向显示文本,并允许用户修改文本。该命令还提供了应用界面布局和所有视图微件的自动镜像功能。如要查看文本方向更改和布局镜像,您还必须在 Layout Editor 中设置文本和布局方向属性

以下过程说明了如何通过重构项目来支持 RTL:

  1. 依次选择 Refactor > Add RTL support where possible,以显示如图 11 所示的对话框。

    图 11. 添加 RTL 支持

    • 如果 AndroidManifest.xml 文件中的 <application> 元素没有 android:supportsRTL="true" 属性,请选中 Update AndroidManifest.xml 复选框。
    • 如果应用的 targetSdkVersion 为 17 或更高,请选中 Replace Left/Right Properties with Start/End Properties 复选框。在本示例中,您的属性应使用“start”和“end”,而不是“left”和“right”。例如,android:paddingLeft 会变为 android:paddingStart
    • 如果应用的 targetSdkVersion 为 16 或更低,请选中 Generate -v17 Versions 复选框。在本示例中,XML 应同时使用这两组属性。例如,XML 应同时使用 android:paddingLeftandroid:paddingStart
  2. 如要显示 Find Refactoring Preview 窗口,请点击 Run

    图 12. 检查预览

  3. 点击 Do Refactor

如需详细了解如何通过重构项目来支持 RTL,请参阅 Android 4.2 中的原生 RTL 支持

文本和布局方向属性

右侧的 Properties 窗口中提供了与文本 widget 搭配使用的 textDirection 属性和与布局 widget 搭配使用的 layoutDirection 属性,分别用于更改文本和布局组件的方向。右侧的 Properties 窗口中列出的方向属性适用于 API 级别 17 或更高级别。

如需查看文本方向更改和布局镜像,您还必须通过重构项目来支持 RTL。在英语中,文本方向更改仅会将标点符号从文本右侧移到左侧;例如,“Hello World!”会变为“!Hello World”。如要查看 LTR 文本切换成 RTL 文本的效果,您必须在应用中使用 RTL 语言。如果您想使用英语来查看文本切换成 RTL 后的测试效果,请使用伪语言区域。伪语言区域独立于重构命令和方向属性。

如需访问和使用方向属性,请执行以下操作:

  1. Layout Editor 中,选择文本微件。
  2. 打开 Properties 窗口,然后搜索要使用的 RTL 属性。

    如要设置属性值,请选择以下选项之一:

    • firstStrong:根视图的默认值。第一个强方向字符决定了段落方向。如果没有强方向字符,段落方向将为视图的已解析布局方向。
    • anyRtl:如果段落中包含任何强 RTL 字符,则段落方向为 RTL;如果段落中包含任何强 LTR 字符,则段落方向为 LTR。如果这两种情况都不是,段落方向将为视图的已解析布局方向。
    • ltr:段落方向是 LTR。
    • rtl:段落方向是 RTL。
    • locale:段落方向由系统语言区域确定。
    • inherit:默认值。使用父级中设置的方向。
  3. 如要查看反方向的文本和布局,请运行应用。

伪语言区域

伪语言区域是一种模拟语言区域,旨在呈现在翻译应用时会导致出现界面、布局、RTL 和其他翻译问题的语言特征。伪语言区域为所有可本地化的消息提供可用英语表达的即时自动翻译。这样,您就可以捕获源代码中无法翻译的消息。

如需了解如何使用伪语言区域,请参阅使用伪语言区域测试应用