使用伪语言区域测试您的应用

伪语言区域是一种旨在模拟可能导致应用翻译时出现 UI、布局和其他翻译相关问题的语言特征的语言区域。伪语言区域是通过即时自动翻译创建的,所有可本地化消息均以英文显示。未经伪本地化的文本指向源代码中不可翻译的消息。

伪语言区域可以节省时间和金钱,因为您可以在将消息提交到源存储库进行后续翻译之前,对 UI 文本及其布局进行调整。有关潜在翻译问题的列表,请参阅发现本地化问题部分。

图 1. 英语 (XA) 伪语言区域。

Android 伪语言区域名称遵循标准语言区域命名约定,其语言区域 ID 可由任何符合 BCP 47 标准的编程语言解析。从这个意义上讲,伪语言区域与其他任何语言区域(例如法语、中文或俄语)一样。

Android 平台提供以下两种伪语言区域,用于表示从左到右 (LTR) 和从右到左 (RTL) 的语言

图 2. AR (XB) 伪语言区域。

英语 (XA):在基础英文 UI 文本中添加拉丁重音,通过添加无重音文本扩展原始文本,并用括号括起每个消息单元,以暴露扩展文本可能导致的问题。潜在问题包括布局损坏和格式错误的消息语法,例如一个句子被分成多个部分,显示为多个括号括起来的消息。英语 (XA) 伪语言区域如图 1 所示。

AR (XB):将原始从左到右的消息的文本方向设置为从右到左的方向,这会反转原始消息中字符的顺序。AR (XB) 伪语言区域如图 2 所示。

伪语言区域可以帮助您制作应用的 RTL 版本,即使您不编写或说任何 RTL 语言。

启用伪语言区域

伪语言区域通常添加到面向开发人员的版本中。当您在设备上选择伪语言区域时,所有支持伪语言区域的应用都会采用所选伪语言区域的特性,包括所有系统应用,例如“设置”应用和“快速设置”面板。

要使用 Android 伪语言区域,您的设备必须运行 Android 4.3 (API 级别 18) 或更高版本,并且已启用开发者选项。启用开发者选项后,您还必须重新启动设备。

以下步骤说明如何启用伪语言区域

  1. 在 Android Studio 中,通过将以下配置添加到您的 build.gradle 文件中,为特定应用启用伪语言区域

    Groovy

    android {
       ...
       buildTypes {
           debug {
               pseudoLocalesEnabled true
           }
       }
    }

    Kotlin

    android {
       ...
       buildTypes.getByName("debug") {
           isPseudoLocalesEnabled = true
       }
    }
  2. 构建并运行您的应用.

    图 3. 选择伪语言区域。

  3. 使用“设置”应用选择伪语言区域。此步骤因您的 Android 版本而异,具体如下

    Android 5.0 (API 级别 21) 或更高版本

    1. 在设备上,打开“设置”应用,然后依次点按语言和输入法 > 语言偏好设置
    2. 语言偏好设置列表中,拖动标签将伪语言区域移到列表顶部,并使其成为活动语言。请参阅图 3。

    Android 4.4.4 (API 级别 19) 或更低版本

    1. 在设备上,打开“设置”应用,然后依次点按语言和输入法 > 语言偏好设置 > 添加语言
    2. 点按伪语言区域以将其添加到语言偏好设置列表。
    3. 语言偏好设置列表中,拖动标签将伪语言区域移到列表顶部,并使其成为活动语言。请参阅图 3。

发现本地化问题

伪语言区域提供了一种省时有效的方法,可帮助您识别以下方面的 UI 中潜在的本地化问题

  • 硬编码字符串无法发送进行翻译,在伪语言区域中会显示为无重音文本,以便您能注意到它们。
  • 文本扩展导致的 UI 布局问题,显示 UI 可能因文本长度而损坏的位置。
  • 字符串连接,其显示为一个消息被分成两个或更多括号。这可能导致正确翻译变得困难,因为翻译人员必须独立翻译每个部分,而不知道这些部分是相互关联的。字符串连接还可能导致无法进行正确翻译,因为不同的语言可能需要不同的部分顺序或完全不同的句子结构。例如,日语、韩语和泰米尔语等语言将动词置于句末。当一个句子被连接时,翻译人员无法根据需要更改词序。

  • 双向 (BIDI) 文本问题,例如当一个文本方向的内容包含相反文本方向的内联短语时,使字符串难以阅读。

  • 从右到左 (RTL) 问题,例如元素未镜像。一些示例包括 UI 元素未向左移动、文本未反转并向左移动,或者标点符号错位,例如“pseudolocales rule!”变为“elur selacoloduesp!”而不是“!elur selacoloduesp”。