vue-i18n 消息语法避坑指南(v9+)
这篇整理了 vue-i18n 常见消息语法,重点是那些“看起来像普通字符,实际是语法”的坑点。
一、最常用的 10 种写法
1) 普通文本
json
"hello": "Hello world"最安全,几乎不会踩语法坑。
2) 命名插值(Named interpolation)
json
"greet": "Hello {name}"ts
t('greet', { name: 'Alice' });3) 列表插值(List interpolation)
json
"order": "Item {0}, Qty {1}"ts
t('order', ['Apple', 3]);4) 字面量插值(Literal interpolation)
json
"special": "Use {'@'} and {'{'} and {'}'}"用于把原本会被当语法的字符,强制按普通字符输出。
5) Linked message(引用其他 key)
json
"pwd": "Password",
"label": "Enter @:pwd"@: 表示引用另一个翻译 key。
6) Linked + Modifier(修饰符)
json
"word": "hello",
"up": "@.upper:word",
"low": "@.lower:word",
"cap": "@.capitalize:word"@.xxx:key 会对被引用内容做转换。
7) 复数消息(Plural message)
json
"car": "no cars | one car | {count} cars"ts
t('car', 0); // no cars
t('car', 1); // one car
t('car', 5); // 5 cars(结合参数)不同语言复数规则差异很大,国际化项目里要特别小心。
8) 复数 + 插值
json
"apple": "no apples | one apple | {count} apples"ts
t('apple', 3, { count: 3 });9) HTML 文本(不推荐放复杂 HTML)
json
"msg": "Click <b>here</b>"若直接渲染 HTML,要注意 XSS 风险。
10) 组件插值(<i18n-t>)
链接、强调等内容建议作为组件插槽传入,通常比拼接 HTML 字符串更安全。
二、最容易出错的 5 个“超直觉点”
@不是普通字符,可能会被当成 linked 语法。{}不是普通括号,可能会被当成插值占位符。|不只是分隔符,在复数语法里是分支分隔。- 同一条文案混用
@:、{}、|时,报错往往不直观。 - 需要输出保留字符时,优先用字面量写法,如
{'@'}、{'{'}。
三、实战建议
- 文案里出现
@、{}、|时,先判断它是内容还是语法。 - 有“符号展示”需求时,直接用字面量插值,不要硬转义。
- 涉及 HTML 的翻译文本,优先使用
<i18n-t>。