帮助中心

伪本地化用于自动化国际化测试

伪本地化是一种强大的测试技术,它将源文本转换为一种虚假语言,以在实际翻译开始之前识别国际化(i18n)问题。本指南向您展示如何使用pseudo-l10n npm 包自动化伪本地化测试。

什么是伪本地化?

伪本地化是将应用程序的源文本转换为一种经过修改的虚假语言的过程,该语言模拟翻译后用户界面的行为。它帮助质量保证工程师和开发人员在开发周期的早期识别国际化问题。

Pseudo-localization example

使用伪本地化识别潜在国际化问题的示例。两侧的字体和大小相同,但支持其他脚本通常需要更多空间。

为什么伪本地化有用

伪本地化帮助您及早捕获国际化问题:

  • 暴露由于文本扩展而导致的布局破坏(德语和芬兰语通常比英语长30-40%)。
  • 通过添加重音字符来测试 UTF-8 支持,从而揭示编码问题。
  • 确保所有字符串都可以翻译 - 硬编码文本保持不变,易于识别。
  • 揭示占位符处理不当 - 动态内容如 {{name}} 必须被保留。
  • 帮助定义具有空间限制的用户界面组件的翻译长度限制。

质量保证的自动化策略

以下是使用伪本地化自动化国际化测试的有效策略:

重音和非拉丁字符

用重音形式或不同脚本替换拉丁字母,以测试字符编码和字体支持。

示例: "Save" → "Šàvē"

质量检查: 确保所有字符正确显示,并且没有因编码问题而导致的破损。

文本扩展模拟

自动将每个字符串扩展约30–40%,以模拟德语或芬兰语等长语言。用可视标记包裹,以便于剪切检测。

示例: "Save" → ⟦Šàvēēēēē⟧

质量检查: 使用自动化屏幕截图比较来发现用户界面溢出、剪切或对齐问题。

占位符压力测试

用可见标记替换插值变量(占位符),以验证它们在翻译过程中是否被保留。

示例: "您有 {{count}} 项" → "您有 <COUNT> 项"

质量检查: 运行回归测试;如果缺少标记或标记转义不正确(&lt;COUNT&gt;),则失败。

RTL 模拟

使用 Unicode 控制字符将文本包裹在从右到左(RTL)标记中,以模拟阿拉伯语或希伯来语。

质量检查: 验证对齐、文本方向和镜像是否正确,适用于 RTL 语言。

CI/CD 集成

将伪本地化添加到自动化测试管道中,以在问题到达生产之前捕获国际化问题。

质量检查: 如果测试检测到缺失的翻译、损坏的占位符或布局问题,则阻止部署。

使用 pseudo-l10n 包进行自动化

pseudo-l10n npm 包自动化您的 JSON 翻译文件的伪本地化,使您能够轻松将国际化测试集成到开发工作流程中。

主要特点

  • 文本扩展:模拟翻译文本通常比英语长30-40%。
  • 重音字符:使用重音等效字符测试 UTF-8 编码和字体支持。
  • 视觉标记:用⟦...⟧标记包裹字符串,以便轻松识别未翻译或截断的文本。
  • 占位符处理:保留占位符,如{{name}}、{count}、%key%等。
  • RTL模拟:使用Unicode控制字符模拟从右到左的语言。

安装

全局安装pseudo-l10n以便于命令行使用:

npm install -g pseudo-l10n

或将其作为开发依赖添加:

npm install --save-dev pseudo-l10n

基本用法

将您的源翻译文件转换为伪本地化版本:

pseudo-l10n input.json output.json

示例转换

输入(en.json):

{
  "welcome": "Welcome to our application",
  "greeting": "Hello, {{name}}!",
  "itemCount": "You have {{count}} items"
}

输出(pseudo-en.json):

{
  "welcome": "⟦Ŵëļçõɱë ţõ õür àƥƥļïçàţïõñēēēēēēēēēēēēēēēēēē⟧",
  "greeting": "⟦Ĥëļļõēēēēēē, {{name}}!ēēēēē⟧",
  "itemCount": "⟦Ŷõü ĥàṽë {{count}} ïţëɱšēēēēēēēēēēēēēēēē⟧"
}

高级功能

自定义扩展

pseudo-l10n en.json pseudo-en.json --expansion=30

RTL模拟

模拟阿拉伯语或希伯来语等从右到左的语言:

pseudo-l10n en.json pseudo-ar.json --rtl

替换占位符以进行视觉测试

用大写标记替换占位符,以便于视觉检测:

pseudo-l10n en.json pseudo-en.json --replace-placeholders

# Input:  { "greeting": "Hello, {{name}}!" }
# Output: { "greeting": "⟦Ĥëļļõēēēēēē, <NAME>!ēēēēē⟧" }

支持不同的占位符格式

该包支持不同i18n库使用的各种占位符格式:

# For i18next (default)
pseudo-l10n en.json pseudo-en.json --placeholder-format="{{key}}"

# For Angular/React Intl
pseudo-l10n en.json pseudo-en.json --placeholder-format="{key}"

# For sprintf style
pseudo-l10n en.json pseudo-en.json --placeholder-format="%key%"

编程用法

在您的Node.js脚本或构建过程中以编程方式使用pseudo-l10n:

const { generatePseudoLocaleSync, pseudoLocalize } = require('pseudo-l10n');

// Generate a pseudo-localized JSON file
generatePseudoLocaleSync('en.json', 'pseudo-en.json', {
  expansion: 40,
  rtl: false
});

// Pseudo-localize a single string
const result = pseudoLocalize('Hello, {{name}}!');
console.log(result);
// Output: ⟦Ĥëļļõēēēēēēēēēēēēēē, {{name}}!ēēēēē⟧

集成到您的工作流程中

npm脚本

将伪本地化生成添加到您的package.json脚本中:

{
  "scripts": {
    "pseudo": "pseudo-l10n src/locales/en.json src/locales/pseudo-en.json",
    "pseudo:rtl": "pseudo-l10n src/locales/en.json src/locales/pseudo-ar.json --rtl"
  }
}

构建过程集成

作为构建过程的一部分生成伪区域:

// build.js
const { generatePseudoLocaleSync } = require('pseudo-l10n');

// Generate pseudo-locales as part of build
generatePseudoLocaleSync(
  './src/locales/en.json',
  './src/locales/pseudo-en.json',
  { expansion: 40 }
);

generatePseudoLocaleSync(
  './src/locales/en.json',
  './src/locales/pseudo-ar.json',
  { rtl: true }
);

CI/CD管道集成

将伪本地化集成到您的持续集成管道中:

# .github/workflows/test.yml
- name: Generate pseudo-locales
  run: |
    npm install -g pseudo-l10n
    pseudo-l10n src/locales/en.json src/locales/pseudo-en.json

- name: Run i18n tests
  run: npm run test:i18n

测试策略

  1. 在构建过程中生成伪区域。
  2. 将伪区域添加到您的应用程序中(例如,在语言选择器中)。
  3. 测试启用伪区域的应用程序。
  4. 检查应用程序以发现常见的i18n问题。

查找内容

  • 缺少⟦⟧标记=未翻译的字符串(硬编码文本)。
  • 截断的标记=文本截断或UI溢出。
  • 布局破损=文本扩展空间不足。
  • 乱码文本=编码问题或缺少字体支持。
  • 错误的文本方向=RTL问题(针对RTL伪区域)。

从测试到真实翻译

一旦您通过伪本地化验证了您的i18n实现,就该为真实用户翻译您的应用程序了。这就是像l10n.dev这样的AI驱动翻译服务的用武之地。

为什么选择l10n.dev进行生产翻译

在确保您的应用程序正确处理国际化后,使用l10n.dev进行专业的AI驱动翻译:

  • 保留占位符、格式和结构——就像伪本地化在测试期间保护一样。
  • 支持165种语言,具备上下文感知的AI翻译。
  • 自动处理复数形式、插值和特殊字符。
  • 通过API或npm包(ai-l10n)提供CI/CD集成,以实现自动化工作流程。
  • 提供VS Code扩展和Web UI以进行手动翻译和审查。

完整的i18n工作流程

  1. 使用伪本地化测试您的i18n实现,以便早期捕捉问题。
  2. 修复测试中发现的布局、编码或占位符问题。
  3. 使用l10n.dev翻译经过验证的源文件,以获得生产就绪的翻译。

准备好及早捕捉i18n问题并简化您的本地化工作流程了吗?