The Android Developer Challenge is back! Submit your idea before December 2.

使用 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. 红色文本表示您必须修正的错误情况

要更正错误,请执行以下操作:

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

当您在 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) 的方向显示文本,并允许用户修改文本。该命令还提供了应用界面布局和所有视图微件的自动镜像。要查看文本方向更改和布局镜像,您还必须在布局编辑器中设置文本和布局方向属性

以下过程说明了如何针对 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 窗口中提供了用于文本微件的 textDirection 属性和用于布局微件的 layoutDirection 属性,分别用于更改文本和布局组件的方向。右侧的 Properties 窗口中列出了方向属性,并适用于 API 级别 17 或更高级别。

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

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

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

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

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

伪语言区域

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

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