用于自动化 i18n 测试的伪本地化
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
测试策略
- 在构建过程中生成伪语言环境。
- 将伪语言环境添加到您的应用程序中(例如,在语言选择器中)。
- 启用伪语言环境后测试您的应用程序。
- 检查 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 工作流
- 测试 您的 i18n 实现,使用伪‑l10n 以提前捕获问题。
- 修复 在测试期间发现的任何布局、编码或占位符问题。
- 翻译 i18n 文件,使用 l10n.dev 获取可用于生产的翻译。
感谢阅读!
