translate.js:两行代码实现网页全自动多语言内容动态翻译

在全球化日益深入的今天,为网站提供多语言支持已成为提升用户体验和扩大受众范围的关键。传统多语言解决方案通常需要复杂的配置、大量的翻译文件以及繁琐的代码修改,而translate.js的出现彻底改变了这一现状。

寻找简单高效的网站翻译方案?translate.js 仅用两行JavaScript代码,即可为你的网站添加全自动多语言翻译功能,支持动态内容翻译,是WordPress插件和Google API的轻量级替代方案。

什么是translate.js?

translate.js是一款创新的开源JavaScript库,专注于网页多语言切换。它采用MIT开源协议,完全免费商用,只需两行核心代码即可实现HTML页面的全自动翻译,无需修改页面结构,无需语言配置文件,无需API Key,同时对SEO友好。

核心优势

  1. 极简接入:无需复杂配置,快速集成
  2. 全自动翻译:智能识别页面内容并自动翻译
  3. 无侵入设计:对现有代码几乎零影响
  4. SEO友好:保持搜索引擎优化效果
  5. 开源免费:MIT协议,商业应用无忧

translate.js是一个免费、开源的翻译工具库,支持多种语言之间的互译,如中英文、法文、日语、韩语、德语等。它避免了API调用次数的限制和费用问题,且使用方法简单,方便快捷。

普通网页快速测试示例

  1. 随便打开一个网页
  2. F12(审查元素)
  3. 在控制台页签下粘贴入以下代码: 
  var head= document.getElementsByTagName('head')[0];
 var script= document.createElement('script');
 script.type= 'text/javascript';
 script.src= 'https://res.zvo.cn/translate/inspector_v2.js';
 head.appendChild(script);

普通网页快速接入示例

<script src="https://cdn.staticfile.net/translate.js/3.18.66/translate.js"></script>
<script>
translate.service.use('client.edge'); //设置机器翻译服务通道,相关说明参考 http://translate.zvo.cn/545867.html
translate.listener.start(); //开启页面元素动态监控,js改变的内容也会被翻译,参考文档: http://translate.zvo.cn/4067.html
translate.execute();//完成翻译初始化,进行翻译
</script>

在网页最末尾, </html> 之前,加入以下代码,一般在页面的最底部,就会出现选择语言的 select 切换标签。添加上述代码后,页面底部将自动出现语言选择下拉框,用户可以轻松切换界面语言。    详细解说

工作原理

translate.js的工作原理十分巧妙:

  1. 内容扫描:对页面所有DOM元素进行扫描,识别可翻译文本
  2. 文本抽离:提取需要翻译的文本内容
  3. API翻译:通过配置的翻译服务通道进行翻译
  4. 结果渲染:将翻译结果重新赋予对应元素

整个过程自动完成,无需人工干预。

高级功能与微调

虽然基础使用极其简单,但translate.js提供了丰富的微调指令,满足各种复杂需求:

语言控制

translate.changeLanguage('english'); // 主动切换语言
translate.language.setLocal('chinese_simplified'); // 设置本地语种
translate.language.getCurrent(); // 获取当前显示语种

内容过滤

translate.ignore.text.push('你好'); // 忽略特定文本
translate.ignore.id.push('test'); // 忽略特定ID元素
translate.ignore.class.push('test'); // 忽略特定class元素

高级配置

translate.setAutoDiscriminateLocalLanguage(); // 自动识别用户语种
translate.language.setUrlParamControl(); // URL参数控制显示语种
translate.selectionTranslate.start(); // 启用划词翻译

除了基础翻译功能,translate.js还提供了一系列高级特性,例如自动识别并翻译图片中的文字内容,监控AJAX请求,实时翻译动态加载的内容,自定义翻译术语,确保专业词汇准确一致,且监控翻译性能,优化用户体验。

最佳实践建议

  1. 自托管JS文件:将translate.js下载到自己的服务器,确保稳定加载
  2. 合理配置缓存:根据业务特点设置合适的缓存策略
  3. 选择性翻译:对不需要翻译的内容进行排除,提升性能
  4. 渐进式实施:先在小范围测试,再全面推广

translate.js重新定义了网页多语言实现的范式,将复杂的技术难题简化为几行优雅的代码。无论是个人项目还是企业级应用,它都能提供高效、稳定、易用的多语言解决方案。其开源免费的特性更是降低了技术门槛,让更多开发者能够轻松实现产品的国际化。随着人工智能技术的不断发展,translate.js也在持续进化,集成更先进的翻译引擎,提供更精准的翻译结果。未来,它将继续致力于降低多语言实现的复杂度,助力更多产品走向全球市场。


DEMO:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多语言网站示例</title>
    <!-- 引入本地的 translate.js -->
    <script src="./translate.js"></script>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        .language-switcher {
            margin: 20px 0;
            padding: 10px;
            background: #f5f5f5;
            border-radius: 5px;
        }
        .language-btn {
            padding: 8px 16px;
            margin: 0 5px;
            border: 1px solid #ddd;
            background: white;
            cursor: pointer;
            border-radius: 3px;
        }
        .language-btn.active {
            background: #007bff;
            color: white;
            border-color: #007bff;
        }
        .content {
            margin-top: 20px;
            padding: 20px;
            border: 1px solid #eee;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div class="language-switcher">
        <h3>选择语言 / Select Language:</h3>
        <button class="language-btn active" onclick="switchLanguage('chinese_simplified')">中文</button>
        <button class="language-btn" onclick="switchLanguage('english')">English</button>
        <button class="language-btn" onclick="switchLanguage('japanese')">日本語</button>
        <button class="language-btn" onclick="switchLanguage('korean')">한국어</button>
        <button class="language-btn" onclick="switchLanguage('french')">Français</button>
        <button class="language-btn" onclick="switchLanguage('german')">Deutsch</button>
    </div>

    <div class="content" id="translatable-content">
        <h1>欢迎来到我的多语言网站</h1>
        <p>这是一个演示如何使用 translate.js 实现多语言切换的示例。</p>
        
        <h2>功能特点</h2>
        <ul>
            <li>支持多种语言实时切换</li>
            <li>无需刷新页面</li>
            <li>自动翻译页面内容</li>
            <li>简单易用的API</li>
        </ul>
        
        <h2>联系我们</h2>
        <p>电子邮件:contact@example.com</p>
        <p>电话:+86 123-4567-8900</p>
        
        <div class="no-translate">
            <p><em>这个区域的内容不会被翻译(class="no-translate")</em></p>
        </div>
    </div>

    <script>
        // 页面加载完成后初始化翻译功能
        document.addEventListener('DOMContentLoaded', function() {
            // 初始化翻译配置
            translate.service.use('client.edge'); // 使用浏览器内置翻译(免费)
            // 或者使用自有翻译服务:translate.service.use('translate.service');
            
            // 设置页面默认语言
            translate.language.setLocal('chinese_simplified');
            
            // 设置忽略翻译的元素(可选)
            translate.ignore.class.push('no-translate');
            
            // 启动监听器,自动检测页面变化
            translate.listener.start();
            
            // 根据浏览器语言自动切换(可选)
            autoDetectLanguage();
            
            console.log('translate.js 初始化完成!');
        });

        // 语言切换函数
        function switchLanguage(lang) {
            // 更新按钮状态
            document.querySelectorAll('.language-btn').forEach(btn => {
                btn.classList.remove('active');
            });
            event.target.classList.add('active');
            
            // 切换语言并执行翻译
            translate.changeLanguage(lang);
            translate.execute();
            
            // 保存语言偏好到本地存储
            localStorage.setItem('preferred-language', lang);
            
            console.log('切换到语言:', lang);
        }

        // 自动检测浏览器语言
        function autoDetectLanguage() {
            const savedLang = localStorage.getItem('preferred-language');
            if (savedLang) {
                // 使用用户之前选择的语言
                setActiveButton(savedLang);
                return;
            }
            
            // 检测浏览器语言
            const browserLang = navigator.language.toLowerCase();
            let detectedLang = 'chinese_simplified'; // 默认中文
            
            if (browserLang.includes('en')) {
                detectedLang = 'english';
            } else if (browserLang.includes('ja')) {
                detectedLang = 'japanese';
            } else if (browserLang.includes('ko')) {
                detectedLang = 'korean';
            } else if (browserLang.includes('fr')) {
                detectedLang = 'french';
            } else if (browserLang.includes('de')) {
                detectedLang = 'german';
            }
            
            // 如果检测到的语言不是中文,自动切换
            if (detectedLang !== 'chinese_simplified') {
                setTimeout(() => {
                    switchLanguage(detectedLang);
                }, 1000);
            }
        }

        // 设置活动按钮样式
        function setActiveButton(lang) {
            document.querySelectorAll('.language-btn').forEach(btn => {
                btn.classList.remove('active');
                if (btn.textContent.toLowerCase().includes(getLanguageText(lang).toLowerCase())) {
                    btn.classList.add('active');
                }
            });
        }

        // 获取语言显示文本
        function getLanguageText(lang) {
            const langMap = {
                'chinese_simplified': '中文',
                'english': 'English',
                'japanese': '日本語',
                'korean': '한국어',
                'french': 'Français',
                'german': 'Deutsch'
            };
            return langMap[lang] || lang;
        }

        // 手动触发翻译函数(如果需要)
        function manualTranslate() {
            translate.execute();
        }

        // 重置翻译(恢复原始语言)
        function resetTranslation() {
            translate.reset();
        }
    </script>
</body>
</html>

[members_only]

<div style="text-align: center;">
    <span id="timeDate"></span><span id="times"></span> 
</div>

<script language="javascript"> 
var now = new Date();
function createtime(){
    var grt= new Date("01/01/2024 00:00:00");
    now.setTime(now.getTime()+250);
    days = (now - grt ) / 1000 / 60 / 60 / 24;
    dnum = Math.floor(days);
    hours = (now - grt ) / 1000 / 60 / 60 - (24 * dnum);
    hnum = Math.floor(hours);
    if(String(hnum).length ==1 ){hnum = "0" + hnum;}
    minutes = (now - grt ) / 1000 /60 - (24 * 60 * dnum) - (60 * hnum);
    mnum = Math.floor(minutes);
    if(String(mnum).length ==1 ){mnum = "0" + mnum;}
    seconds = (now - grt ) / 1000 - (24 * 60 * 60 * dnum) - (60 * 60 * hnum) - (60 * mnum);
    snum = Math.round(seconds);
    if(String(snum).length ==1 ){snum = "0" + snum;}
    document.getElementById("timeDate").innerHTML = "本网站己运行"+dnum+"天";
    document.getElementById("times").innerHTML = hnum + "小时" + mnum + "分" + snum + "秒";
}
setInterval("createtime()",250); 
</script>

<div style="text-align: center;"><strong>
	切换语言:</strong>
	<a class="ignore" href="javascript:translate.changeLanguage('english');">English</a> | 
	<a class="ignore" href="javascript:translate.changeLanguage('chinese_simplified');">简体中文</a>
</div>
<script src="https://nav.19901117.xyz/translate.js/translate.js"></script>

<script>
translate.selectLanguageTag.languages = 'english,chinese_simplified,japanese,spanish,deutsch,french,korean';
translate.request.listener.delayExecuteTime = 500;
translate.service.use('client.edge'); //设置机器翻译服务通道
translate.listener.start(); //开启页面元素动态监控
translate.selectLanguageTag.show = false;//false隐藏选择框,true打开
translate.execute();//完成翻译初始化,进行翻译
</script>

支持的语种表 – translate.service通道

corsican:科西嘉语
guarani:瓜拉尼语
kinyarwanda:卢旺达语
hausa:豪萨语
norwegian:挪威语
dutch:荷兰语
yoruba:约鲁巴语
english:英语
gongen:贡根语
latin:拉丁语
nepali:尼泊尔语
french:法语
czech:捷克语
hawaiian:夏威夷语
georgian:格鲁吉亚语
russian:俄语
chinese_simplified:简体中文
persian:波斯语
bhojpuri:博杰普尔语
hindi:印地语
belarusian:白俄罗斯语
swahili:斯瓦希里语
icelandic:冰岛语
yiddish:意第绪语
twi:契维语
irish:爱尔兰语
gujarati:古吉拉特语
khmer:高棉语
slovak:斯洛伐克语
hebrew:希伯来语
kannada:卡纳达语
hungarian:匈牙利语
tamil:泰米尔语
arabic:阿拉伯语
bengali:孟加拉语
azerbaijani:阿塞拜疆语
samoan:萨摩亚语
afrikaans:南非荷兰语
indonesian:印尼语
danish:丹麦语
shona:修纳语
bambara:班巴拉语
lithuanian:立陶宛语
vietnamese:越南语
maltese:马耳他语
turkmen:土库曼语
assamese:阿萨姆语
catalan:加泰罗尼亚语
singapore:僧伽罗语
cebuano:宿务语
scottish_gaelic:苏格兰盖尔语
sanskrit:梵语
polish:波兰语
galician:加利西亚语
latvian:拉脱维亚语
ukrainian:乌克兰语
tatar:鞑靼语
welsh:威尔士语
japanese:日语
filipino:菲律宾语
aymara:艾马拉语
lao:老挝语
telugu:泰卢固语
romanian:罗马尼亚语
haitian_creole:海地克里奥尔语
dogrid:多格来语
swedish:瑞典语
maithili:迈蒂利语
thai:泰语
armenian:亚美尼亚语
burmese:缅甸语
pashto:普什图语
hmong:苗语
dhivehi:迪维希语
chinese_traditional:繁體中文
luxembourgish:卢森堡语
sindhi:信德语
kurdish:库尔德语(库尔曼吉语)
turkish:土耳其语
macedonian:马其顿语
bulgarian:保加利亚语
malay:马来语
luganda:卢干达语
marathi:马拉地语
estonian:爱沙尼亚语
malayalam:马拉雅拉姆语
deutsch:德语
slovene:斯洛文尼亚语
urdu:乌尔都语
portuguese:葡萄牙语
igbo:伊博语
kurdish_sorani:库尔德语(索拉尼)
oromo:奥罗莫语
greek:希腊语
spanish:西班牙语
frisian:弗里西语
somali:索马里语
amharic:阿姆哈拉语
nyanja:齐切瓦语
punjabi:旁遮普语
basque:巴斯克语
italian:意大利语
albanian:阿尔巴尼亚语
korean:韩语
tajik:塔吉克语
finnish:芬兰语
kyrgyz:吉尔吉斯语
ewe:埃维语
croatian:克罗地亚语
creole:克里奥尔语
quechua:克丘亚语
bosnian:波斯尼亚语
maori:毛利语

[/members_only]

相关文章:立省万元!李哥教你如何使用translate.js实现WP菜单的JavaScript翻译