You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站添加匈牙利语转英语切换按钮的最佳实现方案咨询

多语言切换的高效实现方案(JS/Node.js方向)

嘿,Patrik!针对你的网站多语言切换需求,我给你梳理两个快速上手、比维护多份HTML文件高效N倍的方案,完全符合你偏好的JS/Node.js方向:

一、纯前端JS方案(适合静态站点,零后端依赖)

这个方案核心是用JSON存储语言包,通过JS动态替换页面文本,不用修改大量现有代码,上手极快:

步骤1:准备语言包文件

在项目根目录创建两个JSON文件,分别存匈牙利语和英语的文本映射:

// lang.hu.json
{
  "welcome": "Üdvözöljük!",
  "about": "Rólunk",
  "contact": "Kapcsolat",
  "switch_lang": "English"
}

// lang.en.json
{
  "welcome": "Welcome!",
  "about": "About Us",
  "contact": "Contact",
  "switch_lang": "Magyar"
}

步骤2:给页面元素加标识

给所有需要切换的文本元素添加data-lang-key属性,对应语言包中的键:

<h1 data-lang-key="welcome"></h1>
<nav>
  <a href="#about" data-lang-key="about"></a>
  <a href="#contact" data-lang-key="contact"></a>
</nav>
<button id="lang-switch" data-lang-key="switch_lang"></button>

步骤3:编写切换逻辑

用简单的JS实现加载语言包、更新文本、记住用户偏好:

// 初始化当前语言,优先读取本地存储的用户偏好
let currentLang = localStorage.getItem('preferredLang') || 'hu';

// 加载指定语言的JSON文件
async function loadLangData(lang) {
  const res = await fetch(`./lang.${lang}.json`);
  return await res.json();
}

// 更新页面所有带标识的文本
async function updatePageContent(lang) {
  const langData = await loadLangData(lang);
  document.querySelectorAll('[data-lang-key]').forEach(el => {
    const key = el.getAttribute('data-lang-key');
    el.textContent = langData[key] || el.textContent;
  });
  currentLang = lang;
  localStorage.setItem('preferredLang', lang); // 保存用户偏好
}

// 页面加载时初始化文本
document.addEventListener('DOMContentLoaded', () => {
  updatePageContent(currentLang);
  
  // 绑定切换按钮事件
  document.getElementById('lang-switch').addEventListener('click', () => {
    const targetLang = currentLang === 'hu' ? 'en' : 'hu';
    updatePageContent(targetLang);
  });
});

这个方案的优势:不用动后端,只需要维护两个JSON文件,现有HTML结构几乎不用改,新手也能快速搞定。

二、Node.js + i18n模块方案(适合动态站点)

如果你的网站是用Express等Node.js框架搭建的动态站点,用专业的i18n工具会更规范,扩展也方便:

步骤1:安装依赖

npm install i18n express cookie-parser

步骤2:配置i18n和Express

在项目入口文件(比如app.js)中配置多语言支持:

const express = require('express');
const i18n = require('i18n');
const cookieParser = require('cookie-parser');
const app = express();

// 配置i18n
i18n.configure({
  locales: ['hu', 'en'], // 支持的语言
  directory: __dirname + '/locales', // 语言包存放目录
  defaultLocale: 'hu', // 默认语言
  cookie: 'user-lang' // 用cookie存储用户语言偏好
});

// 注册中间件
app.use(cookieParser());
app.use(i18n.init);

// 设置模板引擎(以EJS为例)
app.set('view engine', 'ejs');

// 主页路由,渲染对应语言的页面
app.get('/', (req, res) => {
  res.render('index', {
    welcome: req.__('welcome'),
    about: req.__('about'),
    contact: req.__('contact'),
    switchText: req.__('switch_lang')
  });
});

// 语言切换路由
app.get('/switch-lang/:lang', (req, res) => {
  const targetLang = ['hu', 'en'].includes(req.params.lang) ? req.params.lang : 'hu';
  res.cookie('user-lang', targetLang, { maxAge: 30 * 24 * 60 * 60 * 1000 }); // 保存30天
  res.redirect('back'); // 切完返回原页面
});

app.listen(3000, () => console.log('Server running on port 3000'));

步骤3:创建语言包文件

在项目根目录新建locales文件夹,里面放两个JSON文件:

// locales/hu.json
{
  "welcome": "Üdvözöljük!",
  "about": "Rólunk",
  "contact": "Kapcsolat",
  "switch_lang": "English"
}

// locales/en.json
{
  "welcome": "Welcome!",
  "about": "About Us",
  "contact": "Contact",
  "switch_lang": "Magyar"
}

步骤4:模板中使用(EJS示例)

<!-- views/index.ejs -->
<h1><%= welcome %></h1>
<nav>
  <a href="/about"><%= about %></a>
  <a href="/contact"><%= contact %></a>
</nav>
<a href="/switch-lang/<%= req.getLocale() === 'hu' ? 'en' : 'hu' %>">
  <%= switchText %>
</a>

这个方案适合动态站点,后端直接渲染对应语言的内容,SEO更友好,也方便后续扩展更多语言。

总结

  • 静态站点选纯前端JS+JSON方案:最快上手,零后端成本,维护简单;
  • Node.js动态站点选i18n模块方案:规范专业,支持cookie记住偏好,SEO友好;
  • 绝对不要维护多份HTML文件——重复代码太多,后期改结构会疯掉!

内容的提问来源于stack exchange,提问作者Patrik Mulató

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:01:33