SuperAPI AI 工具集

i18n-localization

通用与其它

查看项目

更新于 10-16 11:37

技能介绍

本技能是一份构建全球化应用的国际化与本地化综合指南。

核心概念

区分 i18n(国际化,为多语言和地区做工程基础设施,开发期一次性完成)与 L10n(本地化,针对具体 locale 做翻译、格式化与内容适配,按 locale 持续进行)。Locale 是语言与地区的组合,格式为 language-REGION(如 en-US、pt-BR),决定格式化规则。

需要本地化的内容包括:文本(界面标签、消息、错误)、数字、日期、时间、货币、复数、方向、图像、颜色、姓名。

文本与消息

主张将所有面向用户的字符串外置,禁止硬编码与字符串拼接。推荐使用 ICU Message Format 处理变量、复数、select 与嵌套。不同语言复数规则差异大(英语、法语、俄语、阿拉伯语、中文各不相同),应使用 react-intl/formatjs、i18next、Intl.PluralRules 等库,切勿自行实现。

日期与时间

使用 JavaScript Intl API 进行日期格式化,示例覆盖 en-US、de-DE、ja-JP 等。建议始终以 UTC 存储,展示时按用户时区转换,并可通过 Intl.DateTimeFormat().resolvedOptions().timeZone 获取用户时区。相对时间可用 Intl.RelativeTimeFormat,或借助 date-fns 自动选择单位。

数字与货币

使用 Intl.NumberFormat 处理数字、百分比与货币格式化。货币最佳实践:以金额加 ISO 4217 货币代码存储(金额用最小单位如分),展示时格式化;汇率换算应在后端完成。

RTL 支持

列出阿拉伯语、希伯来语、波斯语、乌尔都语等 RTL 语言,建议使用逻辑属性(margin-inline-start、padding-inline-end、text-align: start、float: inline-start)替代物理属性,通过 dir 属性或 :dir() 伪类处理方向与图标镜像,并在文档层级设置 lang 与 dir,使用 bdi 隔离双向文本。

实现示例

React 部分演示 react-intl 的 createIntl/createIntlCache、按 locale 动态加载消息、IntlProvider,以及 FormattedMessage、useIntl、FormattedNumber、FormattedDate 的用法与翻译文件示例。Node.js 部分演示 i18next 配合 i18next-fs-backend 的初始化,以及 Express 中按查询参数、Cookie、Accept-Language、默认值优先级检测 locale 的中间件。

翻译工作流

给出 locales 目录结构(按语言与命名空间拆分文件,含 _source 作为源),键名命名规范,以及 Lokalise、Crowdin、Phrase、Weblate、POEditor、Transifex 等工具,并描述从字符串提取到集成测试的流程与自动化方向。

测试

介绍伪本地化(如将 Hello 转为带变音符号并加填充的字符串),用于发现硬编码字符串、截断、编码与布局问题,并给出逐 locale 的测试清单。

最佳实践

包括:外置所有用户可见字符串、使用 ICU 消息格式、支持无刷新切换语言、用伪本地化测试、UTC 存储本地展示、优先使用原生 Intl API、为文本膨胀(30%–50%)预留空间、从一开始支持 RTL;避免硬编码、拼接消息、假设日期数字格式、手工处理复数、忽略文化语境与双向文本问题。文末提供初始配置、按功能与发布三个阶段的自检清单(含 hreflang 等)。