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

伪语言区域是一种语言区域,其目的是模拟在翻译应用时可导致出现界面、布局和其他翻译相关问题的语言特征。伪语言区域是由所有可本地化消息的即时自动翻译(可用英语表示)创建的。非伪本地化的文本指向源代码中不可翻译的消息。

使用伪语言区域,可以帮助您节省时间和成本,因为您可以先对界面文本及其布局进行调整,然后再将消息提交到之后要送交翻译的源代码库。有关潜在翻译问题的列表,请参阅发现本地化问题部分。

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

Android 伪语言区域名称遵循标准的语言区域命名惯例,其语言区域 ID 可以由任何符合 BCP 47 规范的编程语言解析。从这个意义上讲,伪语言区域和任何其他语言区域(如法语、中文或俄语)没什么两样。

Android 平台提供了以下两种伪语言区域,分别表示从左到右 (LTR) 和从右到左 (RTL) 显示的语言:

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

英语 (XA):在基本英文界面文本中添加拉丁语重音符号,通过添加不带重音符号的文本扩展原始文本,并用方括号将每个消息单元括起来,以使扩展文本中的潜在问题暴露出来。潜在的问题可能是布局损坏和消息语法错误,例如句子被分成多个部分,显示为多条由括号括住的消息。英语 (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)。

发现本地化问题

伪语言区域可帮助您识别以下方面的问题,让您既省时又有效地发现界面中可能存在的本地化问题:

  • 硬编码字符串不能送交翻译,这些字符串会以不带重音符号的文本的形式显示在伪语言区域中,以便于识别。
  • 由文本扩展导致的界面布局问题,显示了可由文本长度导致界面断开的位置。
  • 字符串串联,表现为一条消息被拆分成由方括号括住的两个或更多个部分。这可能会增加翻译的难度,因为翻译人员必须独立地翻译每个部分,而不知道这些部分是相关的。字符串串联还可能让翻译人员无法做出正确的翻译,因为不同的语言可能会要求以不同的顺序组织各个部分或采用完全不同的句子结构。例如,日语、韩语和泰米尔语等语言会将动词放在句末。当句子被串联时,翻译人员将无法根据需要更改词序。

  • 双向 (BIDI) 文本问题,例如当一种文本方向的内容中包含了相反文本方向的内嵌语句时,会导致字符串难以阅读。

  • 从右到左 (RTL) 的问题,比如元素未被镜像。例如,界面元素没有向左移动、文本没有反转并向左移动,或者标点符号放错位置,例如“pseudolocales rule!”变成了“elur selacoloduesp!”,而不是“!elur selacoloduesp”。