javascript多语言占位符替换核心是安全准确地将{name}等占位符替换为格式化后的值,需统一用{key}语法、类型感知处理(intl api格式化数字/日期)、支持{key, modifier}轻量修饰符,并做好html转义与空值兜底。

JavaScript 中处理多语言翻译包里的占位符替换,核心是把字符串中的占位符(如 {name}、%s、${count})安全、准确地替换成对应的数据值,同时兼顾数据类型、格式和国际化规则(比如数字分组、日期本地化、复数形式等)。
占位符语法要统一且可解析
翻译包(如 JSON 文件)里建议用标准、无歧义的占位符格式,推荐 {key}(类似 ICU MessageFormat 但简化版),避免直接用模板字符串语法 ${key} —— 因为 JSON 不支持执行表达式,且容易和 JS 模板字面量混淆。
- ✅ 推荐:
"hello_user": "你好,{name}!你有 {count} 条新消息。" - ❌ 避免:
"hello_user": "你好,${name}!"(JSON 中非法)或"%d 条消息"(类型不明确,难扩展)
替换时需识别并转换数据类型
占位符本身是字符串,但传入的值可能是数字、布尔、日期、数组等。直接 toString() 可能丢失格式(如 1000 → "1000",但中文应显示为 "1,000"),所以替换前应做类型感知处理:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 数字:用
Intl.NumberFormat格式化(自动适配千分位、小数位、货币符号) - 日期/时间:用
Intl.DateTimeFormat或toLocaleString(),按用户语言区域渲染 - 布尔值:一般不直译,而是转成上下文语义词(如
true→"已启用",需查表映射) - 数组或对象:通常不应直接插入文案,应提前转成自然语言短语(如
["苹果", "香蕉"]→"苹果和香蕉")
支持基础格式修饰符(轻量版)
纯占位符不够灵活,可在键后加简单修饰符提升表达力,例如:
-
{count, number}→ 触发数字本地化格式 -
{updatedAt, date}→ 自动转成本地日期格式 -
{status, message}→ 查状态码映射表(如active → "活跃")
这类语法可自行用正则提取:/\{(\w+)(?:,\s*(\w+))?\}/g,再根据修饰符调用对应处理器,无需引入完整 ICU 库。
防注入与边界处理不能少
用户输入内容(如用户名、搜索词)若直接进占位符替换,可能引发 XSS(尤其在 innerHTML 场景)或格式错乱:
- 默认对所有替换值做 HTML 转义(
textContent方式渲染最安全) - 如需富文本,限定白名单标签(如仅允许
<strong></strong>),并用 DOMPurify 等库清洗 - 空值、undefined、null 应有兜底(如显示
"未知"或跳过占位符,避免出现"你好,undefined!")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










