Hello world
This is a translated text!
About Us Contact本教程详细介绍了如何通过javascript、json文件和自定义html属性实现静态html页面的多语言翻译功能。文章将引导读者从创建翻译数据、构建翻译引擎、实现语言切换逻辑到最终集成到html页面,提供完整的代码示例和实践指导,帮助开发者轻松为网站添加多语言支持。
在构建多语言网站时,对于静态HTML内容,一种高效且易于维护的方法是利用JavaScript动态加载翻译文本。本教程将采用一种客户端翻译方案,其核心思想包括:
这种方法避免了在HTML中直接嵌入JavaScript调用,使得HTML结构更加清晰,并有助于分离内容与逻辑。
首先,我们需要为每种支持的语言创建对应的JSON文件,这些文件应存放在一个专门的目录下,例如lng/。每个JSON文件都包含键值对,其中键对应HTML元素上的自定义属性值,值则是该键对应的翻译文本。
文件结构示例:
/
├── index.html
├── js/
│ ├── translate.js
│ └── index.js
└── lng/
├── en.json
└── kh.jsonlng/en.json (英文翻译示例):
{
"page_title": "Welcome to Our Website",
"paragraph_1": "Hello world",
"paragraph_2": "This is a translated text!",
"about_page": "About Us",
"contact_page": "Contact"
}lng/kh.json (高棉语翻译示例):
{
"page_title": "សូមស្វាគមន៍មកកាន់គេហទំព័ររបស់យើង",
"paragraph_1": "សួស្តីពិភពលោក",
"paragraph_2": "នេះគឺជាអត្ថបទបកប្រែ!",
"about_page": "អំពីពួកយើង",
"contact_page": "ទំនាក់ទំនង"
}translate.js文件将包含核心的翻译逻辑。它定义了一个Translate构造函数,负责加载指定语言的JSON文件,并遍历DOM以替换文本。
// js/translate.js
function Translate() {
// 初始化方法,设置自定义属性名和目标语言
this.init = func
tion(attribute, lng) {
this.attribute = attribute; // HTML元素上用于标识翻译键的属性名
this.lng = lng; // 当前选定的语言
};
// 执行翻译过程
this.process = function() {
var _self = this; // 缓存当前对象实例
var xrhFile = new XMLHttpRequest();
// 异步加载语言文件
xrhFile.open("GET", "lng/" + this.lng + ".json", false); // 同步请求,确保翻译完成后再渲染
xrhFile.onreadystatechange = function() {
if (xrhFile.readyState === 4) { // 请求完成
if (xrhFile.status === 200 || xrhFile.status == 0) { // 请求成功
var LngObject = JSON.parse(xrhFile.responseText); // 解析JSON数据
var allDom = document.getElementsByTagName("*"); // 获取页面所有元素
// 遍历所有元素,查找带有指定翻译属性的元素
for (var i = 0; i < allDom.length; i++) {
var elem = allDom[i];
var key = elem.getAttribute(_self.attribute); // 获取元素的翻译键
if (key != null && LngObject[key] !== undefined) {
elem.innerHTML = LngObject[key]; // 使用翻译文本替换元素内容
}
}
}
}
};
xrhFile.send(); // 发送请求
};
}注意事项:
index.js文件将处理用户界面的交互,例如点击语言切换按钮。它会实例化Translate对象并调用其process方法。
// js/index.js
// 这是一个假设的jQuery库已引入的情况,如果未引入,请使用原生JS实现事件监听和DOM操作。
// 例如:document.getElementById("enTranslator").addEventListener('click', function(){...});
// 当用户点击切换语言时调用的函数
function translate(lng, tagAttr) {
var translateInstance = new Translate();
translateInstance.init(tagAttr, lng);
translateInstance.process();
// 更新语言选择按钮的样式(假设使用jQuery)
if (lng === 'en') {
$("#enTranslator").css('color', '#f4623a');
$("#khTranslator").css('color', '#212529');
}
if (lng === 'kh') {
$("#khTranslator").css('color', '#f4623a');
$("#enTranslator").css('color', '#212529');
}
}
// 页面加载完成后执行
$(document).ready(function() {
// 绑定英文语言切换按钮的点击事件
$("#enTranslator").click(function() {
translate('en', 'lng-tag');
});
// 绑定高棉语语言切换按钮的点击事件
$("#khTranslator").click(function() {
translate('kh', 'lng-tag');
});
});注意事项:
最后一步是将上述JavaScript文件引入HTML,并在需要翻译的元素上添加自定义属性。
index.html示例:
Welcome to Our Website
Welcome to Our Website
Hello world
This is a translated text!
About Us
Contact
关键点:
通过上述步骤,我们构建了一个基于JavaScript和JSON的客户端多语言翻译系统。这种方法对于静态网站或对SEO要求不高的部分非常适用。
优点:
局限性与进阶考虑:
通过理解这些原理和注意事项,开发者可以根据项目需求选择最适合的国际化方案。
# css
# javascript
# java
# jquery
# html
# js
# 前端
# json
# ajax
# go
# html5
# seo
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
c++的mutex和lock_guard如何使用 互斥锁保护共享资源【多线程】
Windows 10自带杀毒软件在哪_Windows 10打开和使用Windows安全中心
Win11资源管理器卡顿怎么办 Win11文件资源管理器重启技巧【优化】
windows系统找不到无线网络怎么办_windows WLAN适配器故障排查
如何高效删除 NumPy 二维数组中所有元素相同的列
php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】
Win10怎样清理C盘Steam游戏缓存_Win10清理Steam游戏缓存步骤【步骤】
如何使用Golang读取日志文件_Golang bufio Scanner日志处理示例
Mac怎么设置鼠标滚动速度_Mac鼠标设置详细参数
Python对象比较排序规则_集合使用说明【指导】
Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程
Win11怎么硬盘分区 Win11新建磁盘分区详细教程【步骤】
如何使用 Python 合并文件夹内多个 Excel 文件并避免权限错误
Win11如何更改用户账户文件夹名称 Win11修改C:Users用户名【终极教程】
如何在 Go 开发中正确处理本地包导入与远程模块路径的一致性问题
Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南
Win10怎么设置开机密码_Windows10账户登录密码设置与取消
Mac如何调整Dock栏大小和位置_Mac程序坞个性化设置
Windows笔记本无法进入睡眠模式怎么办?(电源疑难解答)
Mac如何开启夜览模式_Mac护眼模式设置与定时
php订单日志权限怎么设_php订单日志文件权限设置技巧【技巧】
如何开启Windows的远程服务器管理工具(RSAT)?(管理服务器)
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Python与Docker容器化部署实战_镜像构建与CI/CD流程
Windows10如何查看保存的WiFi密码_Win10命令行netsh wlan查询
php在Linux怎么部署_LNMP环境搭建PHP服务的详细指南【指南】
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
php下载安装后memory_limit怎么设置_内存限制调整【技巧】
Windows10如何更改盘符名称_Win10重命名硬盘分区卷标
Win10电脑怎么设置休眠快捷键_Windows10电源按钮功能定义
php内存溢出怎么排查_php内存限制调试与优化方法【说明】
Mac如何查看电池健康百分比_Mac系统信息电源检测
PyTorch DDP 多进程训练在 Kaggle 笔记本中的正确启动方式
如何使用Golang sort排序切片_Golang sort排序方法示例
Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】
如何用正则与预处理结合精准拦截拼接式垃圾域名
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)
Win10怎么创建桌面快捷方式 Win10为应用创建快捷方式【步骤】
Windows10系统怎么查看设备管理器_Win10快捷键Win+X菜单使用
Win11怎么关闭贴靠布局_Win11禁用窗口最大化时的布局菜单
C++中引用和指针有什么区别?(代码说明)
如何使用Golang开发基础文件下载功能_Golang HTTP文件响应与缓存实现
Win11怎么关闭系统透明度_Windows11个性化颜色透明效果
Windows10系统怎么查看系统版本_Win10运行winver命令查询
Python 模块的 __name__ 属性如何由导入方式决定?
如何使用Golang搭建本地API测试环境_快速验证接口功能
Python对象比较与排序_魔术方法解析【教程】
PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】
如何使用正则表达式批量替换重复的星号-短横模式为固定字符串
2025-11-04
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。