HelloWorld 里填写变量,其实就是告诉系统“这里会替换成真实内容”。关键步骤:确认平台支持的占位符类型(命名占位符如 {name}、位置占位符如 %s、Mustache/Handlebars 的 {{key}},或更强的 ICU MessageFormat),统一变量命名(短且有语义)、按语言处理顺序与复数/性别规则,并在接口里以键值对传入实际值。最后用真实样例测试转义、编码、方向性与安全性,确保所有语言里语义不被破坏。

先把概念讲清楚:什么是“变量格式”
变量格式就是在模板或翻译文本里预留“空位”的写法,等运行时由系统把真实内容填进去。想象信封上的收件人名字:模板是信封,变量是写名字的空格,实际内容是寄件人后来填写的名字。不同系统支持不同的占位符语法,理解这些规则是填写变量的第一步。
常见占位符类型(你会经常遇到的)
- 位置占位符(printf 风格):%s、%d。优点是短,缺点是不利于不同语言调整词序。
- 命名占位符:{name}、{count}。清晰、可读,便于重排序。
- Mustache/Handlebars:{{user}},常见于前端模板。
- ICU MessageFormat:支持复数(plural)、选择(select)等复杂语法,适合国际化。
- JSON 键值方式:在 API 里把变量作为字段传入,例如 {“name”: “小明”, “count”: 3}。
按步骤教你怎么填写(从最简单到复杂)
1. 确认平台支持的语法
在 HelloWorld 或 LookWorldPro 的模板/翻译界面里先看说明:它支持哪几类占位符?一些平台会同时支持多种,但内部替换机制不同。没有说明时,先用命名占位符测试一两个示例,看是否被正确替换。
2. 统一变量命名规范(非常重要)
- 用小写字母+下划线或驼峰(如 user_name 或 userName)。
- 变量名要有语义:不要用 a、b,改用 user_name、order_count。
- 避免特殊字符、空格或语言特定符号。
- 变量名应独一无二,避免同一文本里重复不同含义的同名变量。
3. 选择命名占位符还是位置占位符
如果目标语言需要变换词序,优先用命名占位符或 ICU。位置占位符便于快速替换但对语序不友好;命名占位符便于翻译人员理解与重组句子。
4. 处理复数和性别(用 ICU 或提供变体)
例如英文 “You have {count} new message(s)” 在多数语言里需要复数规则。ICU MessageFormat 提供了标准写法:
{count, plural, =0{You have no messages} one{You have one message} other{You have # messages}}
如果平台不支持 ICU,你可以在后台预生成多个字符串键(message_zero、message_one、message_other)并按规则选择。
现实示例:几种常用写法及对应说明
| 写法 | 含义 | 适用场景 |
| %s / %d | 位置占位符,按顺序替换 | 简单日志或内部工具,不涉及多语言重排 |
| {name}, {count} | 命名占位符,按键替换 | 常见于翻译平台和后端模板 |
| {{user}} | Mustache/Handlebars 风格 | 前端渲染、静态站点或客户端模板 |
| ICU MessageFormat | 支持复数、选择、数字/日期格式化 | 专业国际化、多语种产品 |
变量与翻译的那些坑(千万别踩)
- 顺序错误:英语和日语语序可能不同,位置占位符会导致翻译错误。
- 未转义字符:含大括号、百分号或 HTML 的文本要正确转义,避免被误解析或 XSS。
- 丢失变量:翻译时不要删除占位符;在校对环节检查是否漏掉键名。
- 编码问题:确保接口与数据库均使用 UTF-8,避免中文乱码或表情截断。
- 数词/单位:不同语言中单位位置会变化,最好把单位作为独立变量处理。
测试清单(上线前逐条检查)
- 用真实数据替换所有变量,看文本是否通顺。
- 对极值(0、1、大数)进行测试,验证复数分支。
- 对 RTL(阿拉伯语、希伯来语)做方向性测试,查看占位符位置是否影响布局。
- 测试含特殊字符(引号、<、>、&)的变量,确认转义正确。
- 对不同平台(iOS、Android、Web)验证变量替换一致性。
对接 API 与变量传参建议
后端把模板和变量分开是常见模式。接口通常接收模板 id + variables(JSON 对象)。示例:
POST /render { “template_id”: “welcome”, “variables”: { “name”: “小红”, “count”: 3 } }
建议:
- 变量值尽量为原始类型(字符串、数字、布尔),不要在值里拼 HTML 或复杂标记。
- 若需要格式化(日期、货币),优先在模板端或使用 ICU 指定格式,避免后端在不同语言重复实现。
- 记录模板版本号,修改变量名时同时更新版本,以免旧客户端仍发送旧键。
给 HelloWorld 用户的具体操作示例(一步步来)
- 在翻译管理界面新建条目,正文中用命名占位符:欢迎,{userName}!您有 {unreadCount} 条新消息。
- 在后台或调用 API 时传入 variables:{“userName”:”李雷”,”unreadCount”:5}。
- 如果目标语需变序,翻译条目改为:{unreadCount} 条新消息,{userName},请注意查看。这样翻译员能自由重排。
- 对于复数处理,优先采用 ICU:{unreadCount, plural, =0{您没有新消息} one{您有一条新消息} other{您有 # 条新消息}}。
常见问题速查(Q&A)
Q:变量里能放 HTML 吗?
A:不建议直接放 HTML。若必须插入富文本,使用明确的占位符并在渲染端进行安全的白名单过滤或用 DOM 方法插入,避免 XSS。
Q:翻译时发现占位符被翻译成别的语言了怎么办?
A:应该在翻译流程中加上占位符保护规则(如在 CAT 工具中把 {name} 标记为不可编辑),并在校对时重点核查。
Q:如何处理带变量的日期和数字本地化?
A:使用 ICU 的 date/number 格式化功能,或在前端使用本地化库(Intl)格式化后再传入模板。但优先考虑让模板控制格式,这样翻译员可以根据语言特点调整描述。
小结(很随意地想几句)
写变量就像准备一个包裹:把重要信息分门别类地放好,写上清晰的标签,然后告诉邮差(渲染引擎)按说明把东西送到正确的位置。多用命名占位符和 ICU,测试覆盖边界场景,变量命名和转义别马虎。用着用着你会发现,越早规范化模板,越少后面修补翻译错误的麻烦。就先写到这儿,边用边改——有时候把东西放进真实环境里测试,才会发现最实际的问题。