先选一条实际模板
粘贴传统 ICU MessageFormat 1 模板,或试用 plural、select、嵌套示例。错误示例专门展示缺少 other 分支时的诊断;MF2 的 {$name} 与 .match 不属于本页语法。
国际化工具
输入一条传统 ICU 消息模板与参数 JSON,比较正常结果和不同数值触发的分支。
添加 plural 或 selectordinal 参数后会显示边界值。
消息和参数只在当前浏览器标签页处理,不会上传。
复数类别来自当前浏览器的 Intl 数据;CLDR 版本随浏览器变化,可能与应用运行时不同。
结果已过期;重新测试后才能导出。
译文在 count=1 时正确,不代表 11 或 21 也正确。ICU 消息格式测试器用同一模板逐个运行七个边界值,直接显示选中的复数类别与最终句子。
在提交翻译前,用 ICU 消息格式测试器检查占位符名称、嵌套 select 和 Locale。这里使用 FormatJS 与当前浏览器的 Intl 数据;如果线上应用依赖另一套 ICU 或 CLDR 版本,还应在生产运行时复核。
同一条消息在不同语言和数字下可能走不同分支。
ICU 消息格式测试器依次运行 0、1、2、5、11、21、101,保留原始参数 JSON 不动。精确的 =0 分支优先于复数类别;俄语等语言的 11 与 21 也可能选择不同词形。表格把类别和真实输出并排展示。
模板里的 {name} 必须有同名 JSON 键,大小写也要一致。ICU 消息格式测试器会报告缺失值、语法位置和无效参数,而不是把未替换的占位符当作成功输出。嵌套 select 和 plural 由同一个解析器执行。
粘贴传统 ICU MessageFormat 1 模板,或试用 plural、select、嵌套示例。错误示例专门展示缺少 other 分支时的诊断;MF2 的 {$name} 与 .match 不属于本页语法。
输入一个 JSON 对象,键名必须与模板完全一致。修改 BCP 47 Locale 后,再看同一个数字选中的类别是否改变。复数规则取自浏览器,无法保证与服务端版本相同。
选中一个复数或序数变量,重点比较 0、1、11、21。边界运行仅临时覆盖所选参数,不修改输入 JSON;结果过期时复制和下载都会禁用。
ICU 消息格式测试器使用 FormatJS 解析和运行传统 MF1,支持 plural、select、selectordinal、offset、嵌套结构与基本 number 格式;MessageFormat 变量替换和语法检查使用同一引擎。
复数规则测试不能只列 one、few、many 名称。边界表展示每个数字的类别和完整句子,适合排查 11 与 21、精确 =0 和 offset 的区别。
ICU 语法检查会在解析器给出位置时标出行列;缺失变量、无效 JSON、无效 Locale 分别显示。输入一改,旧结果立即失效,避免误复制。
ICU 消息格式测试器默认自动运行。点击示例或清空会先显示替换预览与字符数量,确认后可撤销一次,并同时恢复旧输入与旧结果。
在 plural 选项里,# 代表当前数值减去 offset 后格式化的结果。它不等同于普通的 {count} 占位符;把默认示例的 count 从 1 改成 2,就能在结果中看到差异。
可以把 plural 放在 select 的分支里,或反过来。确保当前分支需要的变量都在 JSON 中。ICU 消息格式测试器会用同一套 FormatJS 语法处理嵌套内容,边界表只临时替换一个数值参数。
本页支持 FormatJS 运行时的基本 number 格式;复杂 skeleton 和自定义格式器请在项目运行时再次核对。复数分支中的 # 使用当前 Locale 格式化数字,可能带有不同的分组符号。
先看语法错误的行列,再检查每个 plural/select 是否有 other 分支;随后核对 JSON 是否为对象、键名大小写、数值变量类型与 Locale。错误信息会留在面板中,方便逐项修正。
通常把模板放在翻译资源中,由应用提供参数并在目标 Locale 下格式化。这里适合单条消息的开发预览;上线前仍应在应用实际采用的 FormatJS、ICU4J 或 ICU4C 环境里回归。
遇到与线上应用不同的格式化结果?