← MessageFormat 2 · 给人看的消息怎么写 / 一条消息长什么样 待审核 2 / 8
message · 消息的构成

一条消息长什么样

MF2 的输入是一段消息源文本,输出是给某个 locale 的人看的成品字符串。最朴素的一条消息只是文本 夹着若干占位符(placeholder)。占位符用 {…} 包起来,里面可以是变量($name)、字面量(|literal|)或带函数的表达式。本页先把这套最小语法看清楚,后续各页再往里填函数、选择与标记。

1 · 占位符:文本之间的「洞」

一条 simple message 不含任何声明,直接写文本即可,变量处用 {$var} 留洞。格式化时把洞填上传入的值:

2 · 动手试:实时格式化

改消息源、改传入的值(JSON)、换 locale,实时看 format() 的成品。勾上显示 parts 还能看 formatToParts() 把成品拆成的零件序列。

成品里 $name 这类插值默认会被一对不可见的方向隔离符(bidi isolation,U+2068/U+2069)括住,以免变量内容(比如阿拉伯语名字)打乱整句的排版方向。显示成字符串时它们不可见;勾「显示 bidi 隔离符」或看 parts 即可现形。详见 错误与回退 页。

3 · 文本与转义

文本里 {}| 是语法字符,要按字面输出需用反斜杠转义:\{\}\|,反斜杠本身写 \\

4 · 字面量:引号内外两种写法

占位符里除了变量,也能直接放字面量。带引号的字面量用竖线包起来 {|any text|},可含空格与特殊字符;不带引号的字面量只能是「数字样」({42}{-1.5})或「名字样」({ABC})的简单词。字面量常作为函数的操作数或选项值出现。

5 · 变量与点路径

{$var} 引用 format() 传入对象上的键。要取嵌套属性,用 . 作分隔:{$user.name}values.user.name(实现按「最长前缀优先」匹配键)。

simple 何时变 complex? 只要消息里出现声明(.input / .local)或选择(.match),它就是 complex message,此时正文模式必须用双花括号 quoted pattern 包起来:{{…}}。simple message 则不写这层括号。