LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

如何解決前端多語言選型和實現難題?

maoxiaoming
2025年8月18日 9:38 本文熱度 431

多語言(i18n)支持 是企業項目走向國際化的必經之路,也是前端工程師最佳實踐的內容之一。不過,多語言框架眾多,會帶來一系列選型問題,相信大家在平時對項目進行多語言支持時,也往往會遇到如下幾個問題:

  • 針對不同的技術棧,我該如何選擇多語言方案?

  • 如果不借助第三方庫,如何獨立實現對項目的多語言支持?

  • 在實踐多語言方案的過程中,我因該考慮那些問題? 如何更高效的實現多語言?

其實,多語言框架雖多,但是從傳統的 jquery 時代到目前流行的 MVVM 框架,多語言方案一直在演進和優化,最終目的是將其普適化和最簡化。理解了這一點,學習多語言技術就容易多了。

我在設計和實踐低代碼/零代碼搭建平臺 Dooring 的過程中,也遇到了多語言方案的技術選型,目前方案基本完成,接下來我將帶大家一步步分析多語言在不同技術棧中的實現方案,并以實際的項目讓大家掌握多言語技術,在文章最后我也會提出對多語言未來演進的一些方向,供大家研究和探索。

按照我一向的寫作風格,我會在下面列出文章的大綱,以便大家有選擇且高效率的閱讀和學習:

  • 目前常用的多語言方案介紹和實踐

  • ?        原生js/jquery方案實現多語言

  •         vue項目中的多語言方案

  •         react項目中的多語言方案

  • 使用 @umijs/plugin-locale 落地國際化項目

  • 智能國際化方案暢想

目前常用的多語言方案介紹和實踐

目前常用的多語言方案基本都是人工翻譯,然后通過動態替換來實現語言的切換,但是不同的技術框架模式稍有不同, 接下來我們就逐個分析一下。

1. 原生js/jquery方案實現多語言

在傳統方案中最容易想到的就是dom替換。我們通過提前定義好多語言文件(或文案Map),并在html標簽中做語言映射,最后通過切換函數來動態的切換網站語言。其基本的模式如下:

js 體驗AI代碼助手 代碼解讀復制代碼// 語言庫,我們有兩種方式來定義

// 1. 單文件Map模式, lang.js

const lang = {

  zh: {

        'title': 'H5編輯器',

        'userLogin': '用戶登錄',

        'usernameError': '請輸入用戶名'

    },

  en: {

        'title': 'H5 editor',

        'userLogin': 'The user logs on',

        'usernameError': 'Please enter your username'

    },

}


// 2. 多語言包模式

lang/cn.json 

lang/en.json

html標簽結構如下:


<select id="langControl">

  <option value="cn">中文</option>

  <option value="en">English</option>

</select>


<div lang="title">H5編輯器</div>

<div lang="userLogin">用戶登錄</div>

最后我們通過 javascript 遍歷 [lang] 屬性并通過映射關系來替換語言。當然我們還可以通過 template.js 這樣的模版引擎來優化我們dom的渲染替換方式,但是以上方案在落地過程中仍然需要考慮很多問題。如下:

  • 語言持久化需要單獨處理

  • 無法動態添加語言文本

  • 無法引入變量以及讀取語言文本

  • 缺乏靈活性和配置化

在傳統方案中我們為了解決以上問題并支持更復雜系統,我們不得不考慮插件化,當然 Jquery-I18n 就是一個非常不錯的解決方案。它可以幫助我們輕松地國際化 Web 應用程序,并且支持鏈式調用, 且可以無刷新切換語言。接下來我就帶大家使用 Jquery-I18n 實現一個簡單的demo,讓大家更好的掌握該方案。

1.引入資源


<script src="https://cdn.bootcss.com/jquery/3.10.2/jquery.min.js"></script> 

<script src="https://cdn.bootcss.com/js-cookie/latest/js.cookie.min.js"></script> 

<script src="./js/jquery.i18n.js"></script>

2.創建并配置多語言文件

3.編寫頁面內容

<select id="langControl">

  <option value="cn">中文</option>

  <option value="en">English</option>

</select>


<div lang="title">H5編輯器</div>

<div lang="userLogin">用戶登錄</div>

4.初始化 i18n 配置并實現語言切換邏輯


function toggleLang(lang){

   $("[lang]").i18n({

       defaultLang: lang,  // 默認語言

       filePath: "/lang/", // 語言文件所在的目錄

       filePrefix: "",   // 語言文件前綴

       fileSuffix: "",   // 語言文件后綴

       forever: true,

       callback: function(res) {}  // 初始化后的回調

   });

}


// 語言切換

$('#langControl').change(val => {

   toggleLang(val)

}


當然 Jquery-I18n 有更多強大的配置,大家可以參考文檔進行配置,相關庫 github 地址如下:

  • Jquery-I18n

  • jquery-i18n-properties

當然以上方案還只是手動切換語言,更多的需求場景是要我們基于用戶當前的瀏覽器環境或者網站鏈接地址的參數不同來自動切換對應的語言。對于通過鏈接參數來改變系統語言,這個我們只需要通過解析參數并進行對應的處理即可,比如解析 http://xxx.xxx?lan=cn 或 http://xxx.xxx?lan=en。當然瀏覽器也提供了對應的 api 可以獲取當前用戶瀏覽的環境:navigator.language ,我們在瀏覽器控制臺輸入該腳本的結果如下:

所以我們可以根據這個信息來自動匹配用戶當前的語言模式。

2. vue項目中的多語言方案

基于 Vue 的多語言方案網上也有很多,畢竟國內大部分企業都在使用 Vue 開發項目,所以我簡單列舉幾個成熟的方案給大家,并對其中一個方案給出具體的實踐:

  • vuex-i18n

  • vue-i18n

當然大家如果做的不是很復雜的項目,也可以直接采用 simplest-i18n,因為其更簡單輕量。

接下來我會以一個完整的例子來說明如何使用 vue-i18n 來做 Vue 項目的國際化。


1.定義語言文件

2.引入依賴并注冊語言包

import Vue from "vue";

import VueI18n from "vue-i18n";


Vue.use(VueI18n);


// 加載所有語言環境并記住上下文

function loadMessages() {

  const context = require.context("./lang", true, /[a-z0-9-_]+.json$/i);


  const messages = context

    .keys()

    .map((key) => ({ key, locale: key.match(/[a-z0-9-_]+/i)[0] }))

    .reduce(

      (messages, { key, locale }) => ({

        ...messages,

        [locale]: context(key),

      }),

      {}

    );


  return { context, messages };

}


const { context, messages } = loadMessages();


// VueI18n 實例

const i18n = new VueI18n({

  locale: navigator.language, // 根據瀏覽器環境設置網站語言

  messages,

});


// 運行程序

const app = new Vue({

  i18n,

  // ...

}).$mount('#app');


// 切換語言(在組件內也可以使用$i18n.locale來切換語言環境)

i18n.locale = 'en-US'


// 熱更新支持

if (module.hot) {

  module.hot.accept(context.id, () => {

    const { messages: newMessages } = loadMessages();


    Object.keys(newMessages)

      .filter((locale) => messages[locale] !== newMessages[locale])

      .forEach((locale) => {

        messages[locale] = newMessages[locale];

        i18n.setLocaleMessage(locale, messages[locale]);

      });

  });

}

當然在項目中我們還可以延遲加載翻譯,原理類似 webpack 的異步加載文件,參考如下:

export function loadLangAsync(lang) {

  // 如果語言相同

  if (i18n.locale === lang) {

    return Promise.resolve(...)

  }


  // 如果語言已經加載

  if (loadedLanguages.includes(lang)) {

    return Promise.resolve(...)

  }


  // 如果尚未加載語言

  return import(/* webpackChunkName: "lang-[request]" */ `@/lang/${lang}.json`).then(

    messages => {

      // ... 處理邏輯

    }

  )

}

同時 vue-cli 還提供了對應的插件 vue-cli-plugin-i18n 來支持通過配置化的方式開啟多語言。

轉載:如何解決前端多語言選型和實現難題?多語言(i18n)支持 是企業項目走向國際化的必經之路,也是前端工程師最佳實踐的內容之 - 掘金



該文章在 2025/8/18 9:46:28 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
最新精品国偷自产在线婷婷 | 亚洲va一区动漫 | 亚洲成aV人片在线观看m | 在线精品自在视频观看 | 综合日韩天天久久一本 | 在线观看人成视频色9 |