S1.06.4Reorderable named placeholders设计
占位符需要可调换顺序
别名: 具名占位符 · 参数重排 · positional placeholder
概念解释
可重排具名占位符(reorderable named placeholders)让译者在消息模板中按目标语言需要移动动态参数,同时运行时仍按稳定名称提供对应值。它解决的是参数寻址:译文可以把 {actor}、{object}、{time} 换序或在消息格式允许时重复引用,而不会把某个值误认成“第一个字符串”。
机制
未编号 %s 把身份绑定到出现顺序,不能安全换位;显式索引 {0} 或 %2$s 可以重排,但语义不透明、同类型参数容易审错。具名参数把顺序与身份解耦。消息契约还需分开两层:caller input contract 规定调用者必须或可选提供哪些值及类型;translation occurrence policy 规定每个 locale/variant 可引用参数零次、一次或多次,并可对金额、对象等关键值设置最少出现次数。
边界
具名占位符只能移动完整语义值,不能自动改变值内部的姓名顺序、日期格式、格或冠词。参数若已包含源语言介词或词尾,换位仍无法生成自然目标句。自然语言可因省略主语或避免重复而合法地不引用某个已提供值,也可重复引用;这不必另建运行时分支,只要符合该参数的 occurrence policy。
怎么落地
- 用
{sender}、{fileName}、{count}等语义名称代替未编号%s;分别声明 caller 是否必须提供,以及各 locale pattern 允许的 0/1/multiple 引用次数。 - 将原始日期和数量交给支持的 locale formatter;结构化姓名只在平台与字段模型支持时格式化,否则保持完整。不要把关系词和标点包进参数值。
- 构建时拒绝未声明名称、调用侧缺少必需输入和类型错配;逐 locale/variant 按 occurrence policy 检查引用次数,而非强制参数集合与源文相同。
- 用两个以上同类型但可辨认的值测试顺序变化,检查输出中每个角色、对象与时间仍正确,并验证屏幕阅读顺序与视觉顺序一致。