Transloco能否在复数翻译规则中引用其他独立配置的翻译项?
Transloco 复数规则的低译员门槛适配方案
你设想的拆分独立翻译键的思路完全可以落地,是兼顾译员友好度、自动化流程效率的最优解法,只需要补一段极轻量的预处理逻辑,就能完全实现你想要的效果。
核心逻辑说明
Transloco 底层基于标准 ICU MessageFormat 完成翻译内容解析,原生语法本身不支持在消息块内直接引用其他翻译键,但我们完全可以通过前置的资源加载预处理,实现你设计的配置形式,且不会对运行时性能、解析稳定性造成额外影响。
具体实现路径
- 第一步:统一占位符规范
直接沿用你设计的@键名标记独立翻译片段,复数规则块按照你预期的结构编写即可:"myPluralRule": "{myCount, plural, =0 {@no_results} one {@one_result} other {@#_results}}", "@no_results": "No results", "@one_result": "1 result", "@#_results": "# results" - 第二步:增加递归替换的预处理中间层
在翻译资源加载完成、提交给Transloco解析之前,遍历所有翻译字符串做简单替换:
识别文本中大括号包裹的独立@开头占位符,自动读取对应@键名下的翻译值完成替换。
经过预处理后,myPluralRule会被自动还原为Transloco可直接解析的标准ICU格式:"myPluralRule": "{myCount, plural, =0 {No results} one {1 result} other {# results}}" - 第三步:打通全自动化流程
拆分后的每个@键值都是独立短文本,彻底消除译员的理解门槛:
译员不需要掌握ICU复数语法、不需要理解plural、=0、one这类分类规则的含义,只需要针对每个短条目翻译自然语言内容即可;你的翻译管理工具也可以直接基于这些独立条目做翻译记忆匹配、格式校验,不需要额外开发复杂的嵌套语法解析能力。
关键避坑点
- 给替换逻辑加严格的边界判断:只有当占位符是被大括号完全包裹、且键名符合统一命名规则(纯小写字母+下划线组合)时才触发替换,避免误处理译员翻译文本中正常出现的@符号内容
- 多语言适配不需要固定复数分类数量:不同语言的CLDR复数分类差异极大(比如日语只有1种分类,威尔士语有6种),你可以允许译员根据目标语言的语法要求补充、调整每个分类对应的
@键值,只要最终生成的ICU块符合CLDR标准,Transloco就能正常解析 - 预处理环节加缺失校验:如果发现复数块里引用的
@键在当前语言资源中不存在,直接抛出明确告警,避免线上渲染时出现占位符裸露的问题
内容的提问来源于stack exchange,提问作者Andrew Bateman
相关产品推荐
相关产品推荐

