亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - 如何優雅的在一個js文件里配置多語言(i18n),求探討思路

瀏覽:73日期:2023-03-21 15:00:26

問題描述

我搜了搜資料,發現大多數是不同語言的js文件分開做,然后根據用戶語言環境去加載對應的js文件。

但是我現在因為使用場景限制,最好是在一個js文件里完成。我現在打算支持3種語言(中文、日文、英文),而且輸出文字的地方也比較多,可能有上百條,中間也經常要拼接變量。

使用場景示例:

var result=10;document.body.innerHTML='一共有'+result+'個結果';

現在我的思路有兩種,一種是把語言文字保存到一個變量里;一種是把文字寫在原地,形式為數組,然后使用下標調用。

思路1:

// 方式1:判斷語言后確定唯一的結果。有點割裂,而且在使用時只能看到屬性名,影響思路// {w1}是占位符,每個配置寫了多遍是為了模擬數量多的時候的情景var lang={};if () { // 判斷為中文 lang.tip1='一共有{w1}個結果'; // lang.tip2='一共有{w1}個結果'; // lang.tip3='一共有{w1}個結果'; // lang.tip4='一共有{w1}個結果'; // lang.tip5='一共有{w1}個結果';}else if(){ // 判斷為日文 lang.tip1='{w1}の結果の合計'; // lang.tip2='{w1}の結果の合計'; // lang.tip3='{w1}の結果の合計'; // lang.tip4='{w1}の結果の合計'; // lang.tip5='{w1}の結果の合計';}else if(){ // 判斷為英文 lang.tip1='There is a total of {w1} result'; // lang.tip2='There is a total of {w1} result'; // lang.tip3='There is a total of {w1} result'; // lang.tip4='There is a total of {w1} result'; // lang.tip5='There is a total of {w1} result';}var result=10;document.body.innerHTML=lang.tip1.replace('{w1}',result);思路2:

// 方式2:判斷語言后只做個下標,文字寫在原地方。這樣使用時可以知道這里寫的是什么,但似乎比較亂var lang;if () { // 判斷為中文 lang=0;}else if(){ // 判斷為日文 lang=1;}else if(){ // 判斷為英文 lang=2;}var result=10;document.body.innerHTML=['一共有{w1}個結果','{w1}の結果の合計','There is a total of {w1} result'][lang].replace('{w1}',result);

其實第一種方法形式上較為優雅,不過我個人傾向于第二種,主要是我看代碼的時候知道這里寫的是什么。如果通過變量名判斷內容的話則比較麻煩(主要是條數太多,雖然我實際使用的話要把變量名做語義化處理,但能簡短、準確描述出內容的情況也不多)。

請問大家有其他思路或解決辦法嗎?

問題解答

回答1:

你的意思大概是想把所有文字都翻譯,但由于語法結構問題變量的位置是未知的不知道怎么解決是吧?思路的話其實你可以參考模板渲染的思路.我打個比方

var language = { ’hello’: [’hello,{val}!’,’{val},コン!’ ]};var lang = 0; // 當前英文function translate (msgVariable, data, msg) { if (msg !== undefined) language[msgVariable].push(msg); return language[msgVariable][lang].replace(’{val}’, data);}var data = ’張三’;var msg = translate(’hello’, data, ’你好,{val}!’);回答2:

比如這樣?

var hello = { 'cn' : '哈嘍', 'jp' : 'こんにちは', 'en' : 'f**k you'};//在頁面初始化的時候判斷當前的環境,然后直接設定key值就可以,比如說我現在是日語var lang = 'jp';console.log(hello[lang]);//拓展的話往對象里面加值就行了,比如說加韓文var hello = { 'cn' : '哈嘍', 'jp' : 'こんにちは', 'en' : 'f**k you', 'kr' : '為何不洗澡思密達'};lang = 'kr';console.log(hello[lang]);回答3:

您的問題算是i18n/L10n的範圍,或許可以找到像

jQuery.i18n

JavaScript I18n And L10n等等的國際化和本地化的javascript 庫。第一個庫還是維基媒體搞出來的,很有參考價值。

其他基本的i18n/L10n內容及庫,別錯過

Unicode CLDR如簡中語言表

ICU library

本人對i18n/L10n的在中國的發展很感興趣,一起切磋成長。

標簽: JavaScript
主站蜘蛛池模板: jk足控福利国产在线播放 | 国产乱理伦片在线观看大陆 | 成人国产在线看不卡 | 亚洲视频一区二区 | 色综合久久久久久久久五月性色 | 国产成人综合亚洲欧美在 | 国产一区免费观看 | 香蕉乱码成人久久天堂爱免费 | 国产精品久久久久久久久久日本 | 成人片子| 婷婷久久综合九色综合九七 | 久久精品亚洲热综合一本奇米 | 麻豆19禁国产青草精品 | 一级日本强免费 | 日本成本人啪啪黄3d动漫 | 国产一区二区自拍视频 | 亚洲精品99久久一区二区三区 | 三上悠亚先锋影音xfplay | 成人在线观看视频网站 | 日韩精品亚洲专区在线影视 | 国产在线观看人成激情视频 | 好湿好紧好痛a级是免费视频 | 欧乱色国产精品兔费视频 | 日韩黄色在线视频 | 永久精品免费影院在线观看网站 | 1000部啪啪勿入十八免费 | 久久精品国产亚洲网站 | 亚洲 欧美 手机 在线观看 | 国产免费破外女真实出血视频 | 第一区免费在线观看 | 国产亚洲精品成人婷婷久久小说 | 欧美综合在线播放 | 美国大片黄色 | 亚洲国产欧美日韩精品一区二区三区 | 国产人妖在线观看一区二区 | 国产成人毛片视频不卡在线 | 精品无码三级在线观看视频 | 一级欧美日韩 | 免费在线观看一级片 | 亚洲一区区 | 国产羞羞的视频在线观看免费 |