canon-i18n 是一份国际化(i18n)实现指南:i18n 指让代码库在新增语言时无需重写 UI,l10n 则是实际添加一种语言。
用途:设计或实现国际化功能,包括字符串外置、区域化格式化、复数处理、文本膨胀与字符串拼接问题。
主要能力与要点:
- 字符串外置:所有用户可见字符串都走翻译函数,键采用结构化命名(如 actions.save_changes),而非顺序编号。
- 文本膨胀:德语比英语长 30–40%,法语 +15–25%,俄语 +20–30%,阿拉伯语 +20–30%,日语 -20–30%。建议按 40% 膨胀设计,并用伪本地化(如 [Ŝàvé çhàñgéŝ!!!!])提前发现溢出。
- 禁止拼接句子:改用 ICU 消息格式,通过具名变量让译者重排语序。
- 复数:英语 2 种形式,阿拉伯语 6 种,波兰语 4 种;使用 ICU {count, plural, ...},库可选 intl-messageformat、i18next(ICU 插件)、FormatJS。
- 日期/时间/数字:使用 Intl API,如 Intl.DateTimeFormat('de-DE', { dateStyle: 'long' })、Intl.NumberFormat('en-IN'),货币、相对时间也各有对应 API。
- 字体:按文字体系定义字体栈;CJK 正文行高 1.6–1.8;阿拉伯语等连写文字不可加字距。
- 布局:按钮容纳 40% 膨胀,表格列宽灵活,用 min-width 而非 width。
限制与反模式:硬编码字符串、拼接句子、用 count === 1 判断复数、手动格式化日期、固定宽度按钮、对阿拉伯语加字距、全脚本共用一套字体栈、用国旗做语言切换器均不可取。资料未提供具体安装命令、价格或平台信息。