使用伪本地化测试您的应用

伪本地化是一种旨在模拟语言特征的语言环境,当应用被翻译时,这些特征会导致 UI、布局和其他与翻译相关的问题。伪本地化是通过即时和自动翻译创建的,对于所有可本地化的消息,这些翻译都是用英文可读的。未伪本地化的文本指向源代码中不可翻译的消息。

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

图 1. 英文 (XA) 伪本地化。

Android 伪本地化名称遵循标准语言环境命名约定,并且它们的语言环境 ID 可以被任何符合 BCP 47 的编程语言解析。从这个意义上说,伪本地化就像任何其他语言环境一样,例如法语、中文或俄语。

Android 平台提供以下两种伪本地化来表示从左到右 (LTR) 和从右到左 (RTL) 语言

图 2. 阿拉伯语 (XB) 伪本地化。

英文 (XA):在基本英文 UI 文本中添加拉丁字母重音符号,通过添加非重音文本扩展原始文本,并用括号括起每个消息单元以显示扩展文本的潜在问题。潜在问题可能是布局中断和格式错误的消息语法,例如将句子拆分为多个部分显示为多个带括号的消息。图 1 显示了英文 (XA) 伪本地化。

阿拉伯语 (XB):将原始从左到右消息的文本方向设置为从右到左方向,这会反转原始消息中字符的顺序。图 2 显示了阿拉伯语 (XB) 伪本地化。

即使您不编写或不会说任何 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 元素未向左移动,文本未反转并向左移动,或标点符号放置错误,例如“伪本地化规则!”更改为“elur selacoloduesp!”而不是“!elur selacoloduesp”。