使用翻译编辑器本地化界面

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

如需了解如何将您的应用翻译成不同语言,请阅读支持不同语言和文化

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

字符串资源

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

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

打开翻译编辑器

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

从 Android 视图中打开

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

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

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

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

从 strings.xml 内部打开

您可以从任何strings.xml文件中访问 Translations Editor(翻译编辑器)。

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

注意:如果您点击 Hide notification(隐藏通知)链接,Open editor(打开编辑器)链接将消失。要将其恢复,请关闭并重新打开项目。

从设计编辑器中打开

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

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

配置不可翻译的行

翻译编辑器中,您可以选择 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>

添加和删除语言

翻译编辑器支持 BCP 47,并将区域设置和区域(国家/地区)代码组合成单个选择,以进行有针对性的本地化。区域设置不仅定义语言。区域设置还包括日期和时间、货币以及小数等依赖于国家/地区的格式。

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

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

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

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

您可以通过删除列中的每个值来删除翻译编辑器中的语言(请参阅编辑、添加或删除文本),或者,您可以按如下方式删除该语言的项目文件夹:

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

编辑、添加和删除文本

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

图 2. 顶部为列表视图,底部为翻译字段

列表视图

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

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

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

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

翻译字段

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

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

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

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

添加和删除键

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

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

  1. 翻译编辑器中,点击 Add Key(添加键)
  2. 在对话框中,输入键名、默认值以及默认 strings.xml 文件的位置。

    图 3. 添加键

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

  1. 在翻译编辑器中,选择您要删除的键。
  2. 点击 Remove Keys(移除键)
  3. 删除对话框中,决定是否要安全删除以及是否要在注释和字符串中搜索,然后点击 OK(确定)。

    图 4. 删除对话框

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

    图 5. 删除对话框

  4. 选择 View Usages(查看用法)以查看将被删除的内容。查找安全删除冲突对话框会显示所有不安全删除的用法,以便您可以编辑相应的代码。

    图 6. 不安全的用法

  5. 右键点击用法以显示上下文菜单并选择 Jump to Source(跳转到源),以便您可以进行所需的更改。
  6. 查找安全删除冲突面板中,选择 Rerun Safe Delete(重新运行安全删除)以确保没有其他需要注意的用法。
  7. 清理完用法后,点击 Do Refactor(执行重构)以删除键。

纠正错误

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

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

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

当您在翻译编辑器中进行更改时,底层的strings.xml文件会随您的更改而更新。当您在strings.xml文件中进行更改时,翻译编辑器中对应的列会随您的更改而更新。

翻译编辑器修正示例

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

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

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

  1. 在左侧的项目 > Android 面板中,选择 ModuleName > res > layout
  2. 双击 content_main.xml 以打开进行编辑。
  3. 点击左下角的 Design(设计)标签页以显示设计编辑器。
  4. 在设计编辑器中,选择语言 下拉列表。
  5. 选择 Edit Translations(编辑翻译)
  6. 选择您要用于查看应用的语言。

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

设计编辑器以所选语言显示您的应用布局,本例中为西班牙语。

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

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

要将语言设置回默认值,请选择 es > Language

图 10. 设置为默认语言

管理和测试可本地化文本

Android 平台和 Android Studio 提供了多项功能,可帮助您管理和测试可本地化的应用文本。这些功能包含可帮助您解决从右到左 (RTL) 脚本(例如阿拉伯语或希伯来语)问题的选项。测试您的可本地化文本可让您在将消息提交到源存储库进行后续翻译之前,对界面文本及其布局进行调整。

重构您的项目以支持 RTL

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

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

  1. 选择 Refactor > Add RTL support where possible(重构 > 在可能的情况下添加 RTL 支持)以显示图 11 所示的对话框。

    图 11. 添加 RTL 支持

    • 如果您的AndroidManifest.xml文件中的<application>元素没有android:supportsRTL="true"属性,则勾选 Update AndroidManifest.xml(更新 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(生成 -v17 版本)。在这种情况下,您的 XML 应同时使用两组属性。例如,您的 XML 应同时使用android:paddingLeftandroid:paddingStart
  2. 要显示 Find Refactoring Preview(查找重构预览)窗口,请点击 Run(运行)。

    图 12. 检查预览

  3. 点击 Do Refactor(执行重构)。

有关重构您的项目以支持 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. 要查看反转的文本和布局,请运行应用。

伪区域设置

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

有关如何使用伪区域设置的信息,请参阅使用伪区域设置测试您的应用