JavaScript国际化核心是分离语言内容与逻辑、按需加载语言包、动态切换渲染;通过JSON管理多语言文案,fetch加载,t()函数翻译,data-i18n声明式绑定,localStorage持久化语言选择。

JavaScript 实现国际化(i18n)多语言支持,核心是**分离语言内容与逻辑代码、按需加载对应语言包、动态切换并渲染文本**。不依赖框架时,用轻量方案就能满足多数场景。
把每种语言的文案存为独立 JSON 文件,结构扁平清晰,方便维护和翻译协作:
// locales/zh.json
{
"welcome": "欢迎使用",
"settings": "设置",
"save": "保存"
}// locales/en.json
{
"welcome": "Welcome",
"settings": "Settings",
"save": "Save"
}键名统一用英文小写+下划线,避免空格或特殊字符;值为对应语言的翻译文本。
用 fetch 动态加载当前语言的 JSON,缓存结果,提供一个简单函数调用翻译:
立即学习“Java免费学习笔记(深入)”;
navigator.language 或 localStorage 读取)t('welcome') 时自动加载对应语言包,后续直接查表"form.submit.label"),用点号分隔,增强可扩展性示例实现片段:
网奇Eshop是一个带有国际化语言支持的系统,可以同时在一个页面上显示全球任何一种语言而没有任何障碍、任何乱码。在本系统中您可以发现,后台可以用任意一种语言对前台进行管理、录入而没有阻碍。而任何一个国家的浏览者也可以用他们的本国语言在你的网站上下订单、留言。用户可以通过后台随意设定软件语言,也就是说你可以用本软件开设简体中文、繁体中文与英文或者其他语言的网上商店。网奇Eshop系统全部版本都使用模
0
let currentLocale = 'zh';
let messages = {};
async function loadLocale(lang) {
if (messages[lang]) return;
const res = await fetch(`/locales/${lang}.json`);
messages[lang] = await res.json();
}
function t(key, options = {}) {
const keys = key.split('.');
let val = messages[currentLocale];
for (const k of keys) {
if (val && typeof val === 'object') val = val[k];
else break;
}
return val || key;
}避免在 JS 里拼接 DOM 文本,改用声明式方式:
<h1 data-i18n="welcome"></h1> <button data-i18n="save"></button>
页面加载后遍历所有带 data-i18n 的元素,用 t() 替换其 textContent 或 placeholder 等属性:
data-i18n-attr 指定目标属性(如 placeholder、title)用户点击切换语言时,更新 currentLocale,重新加载语言包,再刷新界面文本:
localStorage,下次访问自动恢复/en/settings)时,可结合 History API 同步路由
简单触发示例:
document.getElementById('lang-en').onclick = () => {
currentLocale = 'en';
localStorage.setItem('lang', 'en');
loadLocale('en').then(() => renderI18n());
};基本上就这些。不需要引入大型库,几十行代码就能搭出可靠、易维护的多语言基础。关键在语言包结构清晰、加载时机合理、DOM 绑定方式简洁——其余都是围绕这三点的细节优化。
以上就是JavaScript如何实现国际化多语言支持?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号