用于自动化 i18n 测试的伪本地化

发布: (2025年12月23日 GMT+8 18:02)
9 min read
原文: Dev.to

Source: Dev.to

什么是伪本地化?

伪本地化是将应用程序的源文本转换为一种改造的、假的语言的过程,以模拟翻译后 UI 的行为。它帮助 QA 工程师和开发人员在开发周期的早期识别 i18n(国际化)问题。

使用伪本地化的示例

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

为什么伪本地化很有用

Pseudo‑localization helps you catch i18n issues early:

  • 布局破坏 – 文本扩展(德语、芬兰语等)可能比英文长 30 %–40 %。
  • 编码问题 – 带重音的字符会暴露 UTF‑8 问题。
  • 可翻译性 – 硬编码的字符串保持不变,易于发现。
  • 占位符处理 – 动态内容如 {{name}} 必须保留。
  • 长度限制 – 为需要更多空间的语言定义安全的 UI 组件限制。

自动化策略用于 QA

1. 带重音和非拉丁字符

将拉丁字母替换为带重音的形式或其他文字体系,以测试字符编码和字体支持。

示例: “Save” → “Šàvē”

QA 检查: 确保所有字符均能正确显示,且不会因编码问题导致功能异常。


2. 文本扩展模拟

自动将每个字符串扩展约 30 %–40 %,模拟长文本语言。使用可视化标记包裹,以便轻松检测截断。

示例: “Save” → ⟦Šàvēēēēē⟧

QA 检查: 使用自动化截图对比,发现 UI 溢出、截断或错位等问题。


3. 占位符压力测试

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

示例: “You have {{count}} items” → “You have items”

QA 检查: 运行回归测试;若标记缺失或转义错误则判定为失败。


4. RTL 模拟

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

QA 检查: 验证对齐方式、文字方向以及镜像是否符合 RTL 语言的要求。


5. CI/CD 集成

在自动化测试流水线中加入伪本地化,以在代码进入生产前捕获 i18n 问题。

QA 检查: 若测试检测到缺失翻译、占位符破损或布局问题,则阻止部署。

使用 pseudo‑l10n 包进行自动化

pseudo‑l10n npm 包可以为你的 JSON 翻译文件自动进行伪本地化,使得在开发工作流中集成 i18n 测试变得轻而易举。

关键特性

  • 文本扩展 – 模拟翻译文本长度增加 30 %–40 %。
  • 带重音字符 – 测试 UTF‑8 编码和字体支持。
  • 可视标记 – 用 ⟦…⟧ 包裹字符串,以便发现未翻译或被截断的文本。
  • 占位符处理 – 保留 {{name}}{count}%key% 等占位符。
  • RTL 模拟 – 使用 Unicode 控制字符模拟从右到左的语言。

安装

# Global installation (CLI usage)
npm install -g pseudo-l10n
# As a development dependency
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-en.json --rtl

示例:

{
  "greeting": "⟦Ĥëļļõēēēēēē, !ēēēēē⟧"
}

占位符格式

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

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

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

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

摘要

通过将 pseudo‑l10n 集成到开发和 CI/CD 流程中,您可以自动检测:

  • 文本扩展导致的布局破坏
  • 非拉丁字符的编码问题
  • 缺失或格式错误的占位符
  • RTL(从右到左)特定的 UI 问题

这种主动的方法可确保本地化过程更顺畅,应用更稳健、具备全球化准备。祝测试愉快!

程序化使用

在 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');

// 将伪本地化作为构建的一部分生成
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. 检查 UI 是否存在常见的 i18n 问题。

需要关注的点

  • Missing ⟦⟧ markers – 未翻译的字符串(硬编码文本)。
  • Cut‑off markers – 文本截断或 UI 溢出。
  • Broken layout – 文本扩展空间不足导致布局破坏。
  • Garbled text – 编码问题或缺少字体支持。
  • Wrong text direction – RTL 问题(针对 RTL 伪语言环境)。

伪本地化是一种重要的测试技术,可帮助您在问题进入生产环境前捕获国际化问题。通过使用 pseudo‑l10n 包自动化伪本地化测试,您可以确保您的应用程序真正准备好面向全球受众。

从测试到真实翻译

一旦使用伪本地化验证了 i18n 实现,就可以为真实用户翻译你的应用程序了。这时 l10n.dev 等 AI 驱动的翻译服务就派上用场了。

为什么在生产环境使用 l10n.dev 进行翻译

  • 保持占位符、格式和结构——就像伪本地化在测试期间所做的保护一样。
  • 支持 165 种语言,提供上下文感知的 AI 翻译。
  • 自动处理复数形式、插值和特殊字符。
  • 通过 API、npm 包 ai‑l10n,或 GitHub Action 用于自动本地化 实现 CI/CD 集成。
  • 提供 VS Code 扩展 和用于手动 i18n 翻译 的网页 UI。

完整的 i18n 工作流

  1. 测试 您的 i18n 实现,使用伪‑l10n 以提前捕获问题。
  2. 修复 在测试期间发现的任何布局、编码或占位符问题。
  3. 翻译 i18n 文件,使用 l10n.dev 获取可用于生产的翻译。

感谢阅读!

Back to Blog

相关文章

阅读更多 »

Microsoft Agent 框架

请提供您希望翻译的具体摘录或摘要文本,我才能为您进行简体中文翻译。