跳转至主要内容
徽章

标题

副标题

标题

段落1

第2段

段落3

标题

段落1

第2段

段落3

标题

副标题

区域标识符(BCP 47)

BCP 47 标签(如 en-US 或 zh-Hans-CN)用于编码语言、字符集和地区。它们是所有国际化(i18n)系统的基石,决定了应应用哪些翻译、格式和规则。

Unicode 和 UTF-8

Unicode 为每种文字体系中的每个字符分配了一个唯一的码点。UTF-8 是网络上最主流的编码格式,它能确保文本无论使用何种语言都能正确显示。

翻译键

翻译键是稳定的标识符,用于映射到特定语言环境的字符串。它们将源代码与可翻译内容解耦,从而支持开发与翻译的并行进行。

复数形式(ICU)

不同语言的复数规则各不相同——英语有两种形式,阿拉伯语则有六种。ICU MessageFormat 通过单一语法即可处理复数、性别和选择表达式。

RTL 支持

阿拉伯语、希伯来语及其他从右向左书写的文字。要支持从右向左(RTL)布局,需要镜像布局、翻转图标,并使用 CSS 逻辑属性代替 left/right。

日期 / 编号 / 货币

日期、数字和货币的格式因地区而异。Intl API 以及 date-fns 等库提供了支持地区设置的格式化功能,因此 1,000.50 在德语中会显示为 1.000,50。

标签

标题

副标题

JSON

在 Web 应用(React、Vue、Angular)中最为流行。易于人类阅读,支持嵌套以构建有序的键值结构。没有内置的复数形式生成标准,因此 ICU MessageFormat 等库填补了这一空白。

XLIFF

基于 XML 的行业标准,用于不同工具之间的翻译数据交换。所有专业翻译管理系统 (TMS) 平台均支持该标准。虽然格式较为冗长,但功能丰富,内置了对备注、状态跟踪和元数据的支持。

PO/POT(Gettext)

Python、PHP 和 Ruby 生态系统中常用的经典开源格式。内置复数支持,并采用专用的复数形式语法。受到翻译人员和翻译工具的广泛支持。

ARB

Application Resource Bundle 是 Flutter 和 Dart 的标准格式。该格式基于 JSON,并支持 ICU 消息语法,原生支持复数形式和下拉菜单。Flutter 的 gen-l10n 工具集即采用此格式。

.strings / .stringsdict

适用于 iOS 和 macOS 开发的 Apple 平台原生格式。.strings 处理简单的键值对,而 .stringsdict 则采用 XML plist 结构来处理复数形式规则。

.resx

.NET 资源文件格式,用于 C# 和 VB.NET 应用程序。基于 XML,并与 Visual Studio 工具集深度集成。支持字符串、图像及其他资源的类型化资源。

标题

副标题

1

审核您的代码库

找出所有硬编码的字符串、日期格式和与区域设置相关的模式。确定哪些组件和页面包含需要提取的面向用户的文本。

2

将字符串外部化

将所有面向用户的文本移至结构化资源文件(JSON、XLIFF 或 PO)中。用调用翻译函数并引用键的方式替换内联字符串。

3

选择您的工具

为您的框架选择一个国际化(i18n)库,选择一个用于协作的翻译管理系统(TMS),并决定采用人工翻译、AI翻译还是混合翻译工作流。

4

集成与发货

将您的 i18n 库集成到路由和渲染中,将 TMS 连接到 CI/CD 系统以实现自动同步,并通过 CDN 部署语言包以实现快速交付。

徽章

标题

副标题

开发者集成

评估命令行工具、SDK 支持、基于 Git 的工作流以及 CI/CD 集成点。优秀的 TMS 平台能够直接集成到您的开发流程中,从而确保翻译内容能与代码变更自动保持同步。

翻译记忆库

翻译记忆库会存储已获批准的译文,并在遇到相似或相同的字符串时提供翻译建议。这有助于降低翻译成本、加快交付速度,并确保产品整体的一致性。

协作功能

请关注审核工作流程、内嵌评论、共享词汇表和审批链。这些功能使译者、审核人员和开发者能够协作,不会产生瓶颈或沟通误解。

AI 与自动化

现代 TMS 平台提供机器翻译建议、自动化质量检查、批量操作和智能路由。AI 辅助工作流程在保持翻译质量的同时减少了人工工作量。

标题

副标题

字符串连接

在词序不同的语言中,通过拼接片段来构建句子会导致语法不通顺。请改用 ICU MessageFormat 并配合占位符。

硬编码字符串

如果将面向用户的文本直接嵌入源代码中,就无法在不修改代码的情况下进行翻译。请从一开始就将所有字符串提取出来。

忽略复数形式

仅针对单数/复数的简单 if/else 语句仅适用于英语。许多语言拥有多种复数形式,需要遵循正确的 ICU 复数规则。

事后才想到的翻译

在产品发布后才仓促添加国际化功能,意味着需要进行耗费巨大的重构。从一开始就为国际化进行设计,既能节省时间,又能避免架构债务。

徽章

标题

副标题

  • 所有面向用户的字符串均已移至资源文件中
  • 已实现区域检测(浏览器、URL、用户偏好设置)
  • 所有目标语言的复数形式均通过 ICU MessageFormat 处理
  • 日期、时间、数字和货币的格式化使用 Intl API 或其等效功能
  • 已测试使用 CSS 逻辑属性支持 RTL 布局
  • 为缺失的翻译配置了备用区域设置
  • 翻译键遵循一致的命名规范
  • CI 管道会验证是否存在缺失或未使用的翻译键

标题

副标题

  • 伪本地化
  • 视觉测试
  • 自动化
  • 语言测试
  • 扩展
徽章

标题

副标题

i18n 和 L10n 有什么区别?

国际化(i18n)是一种软件设计工程过程,旨在使软件能够支持多种语言和地区。本地化(L10n)是针对特定区域适配软件的内容过程,包括翻译文本、调整格式并确保文化适宜性。i18n 在代码库中只需进行一次;L10n 则针对您支持的每个区域各进行一次。

我应该使用哪个 i18n 库?

最佳库取决于您的框架。对于 React,react-intl(FormatJS)和 react-i18next 是使用最广泛的。Vue 开发者通常使用 vue-i18n。Angular 除了社区选项(如 Transloco)外,还内置了 i18n 支持。Svelte 项目使用 svelte-i18n。请根据包大小、ICU 支持以及与您的渲染模型的集成程度来评估各个选项。

我应该上线多少种语言?

根据现有用户数据或目标市场调研,从两到三种高影响力语言开始。这样可以在可控规模下验证您的 i18n 架构、翻译工作流程和质量保障流程。一旦拥有可靠的流程,再扩展到其他语言,并利用数据分析确定下一步添加哪些语言版本的优先级。

我可以在应用中使用机器翻译吗?

混合方法效果很好:将机器翻译用于初稿和高容量、低关键性内容,然后让人工审校完善营销文案、错误消息和法律文本等质量关键字符串。现代神经机器翻译已有显著改进,但人工审查对于细微差别、品牌基调和文化准确性仍然必不可少。

什么是伪本地化?

伪本地化是一种测试技术,它将文本替换为带重音或扩展字符(例如,将 'Hello' 转换为 '[~Hellllo~]'),但不改变含义。它帮助开发者在真实翻译可用之前发现硬编码字符串、文本截断和布局问题。大多数 i18n 库和 TMS 工具都支持自动生成伪本地化输出。

如何处理动态内容的本地化?

使用 ICU MessageFormat 占位符进行插值(例如,'Hello, {name}'),而不是拼接字符串。对于复数形式,使用能适应各语言规则的 ICU 复数语法。避免由片段构建句子,因为不同语言的词序各有不同。对于富文本,使用带标签的占位符,使译者能够重新排列 HTML 元素而不破坏标记结构。