JavaScript国际化依赖Intl对象进行数字、日期、货币等格式化,不处理文本翻译;需结合ICU消息格式资源包、语言检测与动态切换逻辑实现完整本地化。

JavaScript 中的国际化 API 主要是 Intl 对象及其配套接口(如 Intl.Locale、Intl.NumberFormat、Intl.DateTimeFormat、Intl.PluralRules 和 Intl.DisplayNames),它提供标准化的多语言、多区域格式化能力。但要注意:Intl 本身不负责翻译文本内容,它只处理“如何按语言/地区规则显示数字、日期、货币、复数、单位等”。真正的多语言支持(即界面文案切换)需要结合资源包(message bundles)+ Intl 格式化 + 语言检测/切换逻辑来实现。
用 Intl 接口做本地化格式化
这是国际化最基础也最可靠的一步,避免手动拼接字符串导致语言错乱:
-
Intl.DateTimeFormat('zh-CN').format(new Date())→ "2024年6月12日" -
Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(1234.56)→ "1.234,56 €" -
new Intl.PluralRules('ru').select(0)→ "zero"(俄语中 0 属于 zero 类别,影响 “0 个商品” 的文案结构) -
new Intl.DisplayNames(['en'], { type: 'language' }).of('zh')→ "Chinese"
关键点:传入的 locale 字符串(如 'zh-Hans-CN')会自动降级(fallback),比如浏览器不支持 zh-Hans-CN 就尝试 zh-Hans,再试 zh,最后到默认语言。
管理翻译资源(message bundles)
你需要为每种语言准备结构一致的键值对数据,例如:
立即学习“Java免费学习笔记(深入)”;
// i18n/en.json
{
"welcome": "Welcome, {name}!",
"items_count": "{count, plural, one {# item} other {# items}}"
}登录后复制
// i18n/zh.json
{
"welcome": "欢迎,{name}!",
"items_count": "{count, plural, one {# 个商品} other {# 个商品}}"
}登录后复制
推荐使用 ICU Message Format(通过 intl-messageformat 库解析),它支持占位符、复数、选择、嵌套等,比简单替换更健壮。不要用 replace() 手动插值,尤其在 RTL 或复杂语法语言中容易出错。
标签: css vue react javascript java html js json 浏览器 多语言 搜索引擎 本地化
还木有评论哦,快来抢沙发吧~