使用翻译编辑器本地化 UI

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

有关为不同语言翻译应用的介绍,请阅读支持不同的语言和文化

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

字符串资源

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

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

打开翻译编辑器

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

从 Android 视图打开

  1. 在左侧的Project > 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. 在左侧的Project > Android面板中,选择ModuleName > res > values
  2. 双击strings.xml以打开进行编辑。
  3. strings.xml中,单击右上角的打开编辑器链接。

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

从设计编辑器打开

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

  1. 在左侧的Project > 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. 在左侧的Project > 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. 在左侧的Project > 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 或更高,请选择将左/右属性替换为开始/结束属性。在这种情况下,您的属性应使用“开始”和“结束”而不是“左”和“右”。例如,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 和其他翻译问题的语言的特征。伪本地化提供所有可本地化消息的英语可读的即时和自动翻译。这使您可以捕获源代码中不可翻译的消息。

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