i18n特殊字符转义
自动处理 i18n 翻译文件中的特殊字符转义,支持 JSON 和纯文本两种格式,解决花括号、@符号等引起的解析错误
i18n特殊字符转义规则
1. 花括号 { }
原因:{key} 是占位符语法
转义方式:{'{'} 和 {'}'}
2. @ 符号
原因:@:path.to.key 是链接语法
转义方式:{'@'}
3. 美元符号 $
原因:$ 可能被用作特殊变量或列表语法
转义方式:{'$'}
4. 管道符 |
原因:| 是复数形式的分隔符
转义方式:{'|'}
技术背景
i18n 库通常会将 JSON 字符串编译成函数以支持参数注入和复数形式。任何具有特殊语法的字符(如 {}、@、|)如果需要作为普通字符显示,都必须进行转义,否则会被编译器误认为是控制指令,导致解析错误或应用崩溃。
安全建议
为避免所有问题,建议对任何括号都进行转义,这样可以避免未来可能的解析错误。
Vue I18n 两种模式特殊字符转义对照表(仅需转义字符)
| 想要显示的字符 | legacy: true (v8 兼容) | legacy: false (v9+ 现代) | 渲染结果 |
|---|---|---|---|
| { | {'{'} | { '{' } | { |
| } | {'}'} | { '}' } | } |
| @ | {'@'} | { '@' } | @ |
| | | {'|'} | { '|' } | | |
| $ | {'$'} | { '$' } | $ |
| {name} | {'{'}name{'}'} | { '{' }name{ '}' } | {name} |
| @user | {'@'}user | { '@' }user | @user |
| a|b | a{'|'}b | a{ '|' }b | a|b |
总结
- 核心格式区别:Legacy Mode (legacy: true) → 字符 (无空格);Modern Mode (legacy: false) → 字符 (有空格)。
- 关键避坑:两种模式的格式不可混用(如 legacy: true 用空格格式会报错)。