使用翻译编辑器本地化 UI

翻译编辑器提供所有默认和翻译的 字符串资源 的合并和可编辑视图。

有关将您的应用翻译成不同语言的入门信息,请阅读 支持不同的语言和文化

图 1. 翻译编辑器 显示应用文本在翻译前的状态

字符串资源

项目的字符串资源包含在 strings.xml 文件中。您的项目有一个默认的 strings.xml 文件,其中包含应用默认语言的字符串资源,这是您期望大多数应用用户使用的语言。您还可以拥有翻译后的 strings.xml 文件,其中包含您希望应用支持的其他语言的字符串资源。

完成默认的 strings.xml 文件后,您可以自己添加翻译,也可以付费请专业服务进行翻译。 无论哪种方式,您都应该利用 Android Studio 的功能来帮助您 管理和测试可本地化的文本。 有关专业翻译服务的更多信息,请参见 订购翻译服务

打开翻译编辑器

您可以从 Android Studio 中的以下位置访问翻译编辑器。

从 Android 视图中打开

  1. 在左侧的 项目 > Android 面板中,选择 ModuleName > res > values
  2. 右键单击 strings.xml 文件,然后选择 打开翻译编辑器

    翻译编辑器将显示 strings.xml 文件中的键值对。

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

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

从 strings.xml 内打开

您可以从任何 strings.xml 文件中访问 翻译编辑器

  1. 在左侧的 项目 > Android 面板中,选择 ModuleName > res > values
  2. 双击 strings.xml 以打开它进行编辑。
  3. strings.xml 中,单击右上角的 打开编辑器 链接。

注意:如果您单击 隐藏通知 链接,打开编辑器 链接将消失。 要恢复它,请关闭并重新打开项目。

从设计编辑器中打开

您可以从布局编辑器的设计编辑器中打开 翻译编辑器,以编辑默认文本和翻译文本,使其更好地适应您的布局。 有关在设计编辑器中切换语言的信息,请参见 在设计编辑器中显示翻译后的文本

  1. 在左侧的 项目 > Android 面板中,选择 ModuleName > res > layout
  2. 双击 content_main.xml 以打开它进行编辑。
  3. 单击左下角的 设计 选项卡以显示 设计 编辑器。
  4. 在设计编辑器中,选择 语言 下拉列表。
  5. 选择 编辑翻译

配置不可翻译的行

翻译编辑器 中,您可以选择 不可翻译 以指示您不希望翻译此行中的文本。 您可能不希望翻译的文本可能是特定于产品的文本,例如商品名称和商标,或者没有翻译的专业术语。

选中 不可翻译 时,默认 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>

添加和删除语言

翻译编辑器 支持 BCP 47,并将语言环境和区域(国家/地区)代码合并为一个选择,用于目标本地化。 语言环境定义的不仅仅是语言。 语言环境包括与国家/地区相关的格式,例如日期和时间、货币和小数。

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

  1. 翻译编辑器 中,单击地球图标
  2. 从下拉列表中,选择要添加的语言。

    新的语言将显示在 翻译编辑器 中,并且一个带有 strings.xml 文件的 values-* 文件夹将添加到项目中。 例如,values-es 代表西班牙语。

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

您可以在 翻译编辑器 中删除语言,方法是删除该列中的所有值(请参见 编辑、添加或删除文本),或者您可以删除该语言的项目文件夹,如下所示

  1. 在左侧的 项目 > Android 面板中,选择 ModuleName > res
  2. 右键单击要删除的语言的 values-* 文件夹。 例如,values-hi 代表印地语。
  3. 从下拉列表中,选择 删除 以删除文件夹及其 strings.xml 文件。

编辑、添加和删除文本

您可以直接在 strings.xml 文件中或通过 翻译编辑器 对文本设置进行操作。 本部分介绍 翻译编辑器 的方法。 在 翻译编辑器 中,您可以通过列表视图或通过 翻译编辑器 底部的 翻译 字段来编辑、添加或删除文本。

图 2. 顶部的列表视图和底部的 翻译 字段

列表视图

要编辑或添加文本,请执行以下操作

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

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

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

翻译字段

要编辑或添加文本,请执行以下操作

  1. 在列表视图中,单击要编辑或添加文本的单元格。
  2. 翻译 字段中,执行键盘复制粘贴,或者如果您使用的是支持变音符号的键盘,请直接在 翻译 字段中键入。
  3. Tab 键或将光标移出该字段。

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

  1. 单击要删除的单元格。
  2. 翻译 字段中,选择文本并按 Delete 键。

添加和删除键

在翻译编辑器中, 列列出了 strings.xml 文件中每个数据项的唯一标识符。 您可以在翻译编辑器中添加和删除键。 当您删除键时,翻译编辑器会删除它及其所有关联的翻译。 翻译编辑器使用安全删除重构来删除键,因此您可以了解键文本是否在其他地方使用,并在删除键之前有机会进行必要的调整。 安全删除重构可确保您的代码在删除键后仍然可以编译。

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

  1. 翻译编辑器 中,单击 添加键
  2. 在对话框中,输入键名、默认值和默认 strings.xml 文件的位置。

    图 3. 添加键

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

  1. 在翻译编辑器中,选择要删除的键。
  2. 单击 删除键
  3. 删除 对话框中,确定是否要进行安全删除,以及是否要在注释和字符串中搜索,然后单击 确定

    图 4. 删除对话框

    如果没有对已删除键的引用(使用),或者所有引用都可以安全地折叠,则将删除该键。 否则,翻译编辑器将显示 检测到使用情况 对话框,其中包含有关检测到的问题的信息。

    图 5. 删除对话框

  4. 选择 查看使用情况 以查看将要删除的内容。 查找安全删除冲突 对话框将显示所有无法安全删除的使用情况,以便您可以编辑相应的代码。

    图 6. 不安全的用法

  5. 右键单击使用情况以显示上下文菜单,然后选择 跳转到源 以便您可以进行必要的更改。
  6. 查找安全删除冲突 面板中,选择 重新运行安全删除 以确保没有其他使用情况需要关注。
  7. 当使用情况清理完毕后,单击 执行重构 以删除该键。

更正错误

图 7 显示了 翻译编辑器 显示英语、西班牙语和法语 strings.xml 文件的内容。 红色文本表示有错误的行。

图 7. 红色文本表示必须修复的错误条件

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

当您在 翻译编辑器 中进行更改时,底层的 strings.xml 文件将根据您的更改进行更新。 当您在 strings.xml 文件中进行更改时,翻译编辑器 中的相应列将根据您的更改进行更新。

示例 翻译编辑器 更正

  • 图 7 显示 app_name 行已选中 不可翻译,但已提供西班牙语翻译。 删除西班牙语翻译以更正错误。
  • 图 7 显示 next_page 行缺少法语翻译。 使用键盘将 Page Suivante 复制到单元格中以更正错误。 键盘复制粘贴操作会将带有变音符号的文本复制到单元格中。

在设计编辑器中显示翻译后的文本

要查看翻译后的文本如何在应用程序布局中显示,请在设计编辑器中在默认版本和翻译版本之间切换文本,方法如下

  1. 在左侧的 项目 > Android 面板中,选择 ModuleName > res > layout
  2. 双击 content_main.xml 以打开它进行编辑。
  3. 单击左下角的 设计 选项卡以显示 设计 编辑器。
  4. 在设计编辑器中,选择 语言 下拉列表。
  5. 选择 编辑翻译
  6. 选择要用于查看应用程序的语言。

    图 8. 带有已选择西班牙语的语言下拉列表

设计编辑器将以所选语言(在本例中为西班牙语)显示应用程序布局。

图 9. 设计编辑器以西班牙语显示翻译后的文本

将设计编辑器设置为默认语言

要将语言恢复为默认语言,请选择 es > 语言

图 10. 设置为默认语言

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

Android 平台和 Android Studio 提供了一些功能来帮助您管理和测试可本地化的应用程序文本。 这些功能提供了选项来帮助您解决与从右到左 (RTL) 脚本(例如阿拉伯语或希伯来语)相关的问题。 测试可本地化的文本使您能够在将消息提交到源代码库以供以后翻译之前,对 UI 文本及其布局进行调整。

重构您的项目以支持 RTL

Android Studio 具有一个重构命令,它可以在 TextView ConstraintLayoutLinearLayout 元素中启用双向文本支持,以便您的应用程序可以显示从左到右 (LTR) 和从右到左 (RTL) 脚本中的文本,并允许用户编辑这些文本。 该命令还提供应用程序 UI 布局和所有视图小部件的自动镜像。 要查看文本方向更改和布局镜像,您还必须在 布局编辑器 中设置 文本和布局方向属性

以下步骤显示了如何重构您的项目以支持 RTL

  1. 选择 重构 > 在可能的情况下添加 RTL 支持 以显示图 11 中所示的对话框。

    图 11. 添加 RTL 支持

    • 如果 AndroidManifest.xml 文件中的 <application> 元素没有 android:supportsRTL="true" 属性,则选中 更新 AndroidManifest.xml 复选框。
    • 如果您的应用的 targetSdkVersion 为 17 或更高,请选择用开始/结束属性替换左/右属性。在这种情况下,您的属性应使用“start”和“end”而不是“left”和“right”。例如,android:paddingLeft 变为 android:paddingStart
    • 如果您的应用的 targetSdkVersion 为 16 或更低,请选择生成 -v17 版本。在这种情况下,您的 XML 应使用两组属性。例如,您的 XML 应同时使用 android:paddingLeftandroid:paddingStart
  2. 要显示查找重构预览窗口,请单击运行

    图 12. 检查预览

  3. 单击执行重构

有关为 RTL 支持重构项目的更多信息,请参阅 Android 4.2 中的原生 RTL 支持

文本和布局方向属性

右侧的属性窗口提供用于文本小部件的textDirection属性和用于布局小部件的layoutDirection属性,以更改文本和布局组件的方向。方向属性列在右侧的属性窗口中,适用于 API 级别 17 或更高。

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

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

  1. 布局编辑器中,选择一个文本小部件。
  2. 打开属性窗口并搜索要使用的 RTL 属性。

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

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

伪本地化

伪本地化是一种模拟的区域设置,旨在假定会对应用进行翻译时导致 UI、布局、RTL 和其他翻译问题的语言的特征。伪本地化为所有可本地化消息提供即时且自动的翻译,这些翻译以英文形式可读。这使您能够在源代码中捕获不可翻译的消息。

有关如何使用伪本地化的信息,请参阅 使用伪本地化测试您的应用