午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

問題描述

我搜了搜資料,發(fā)現(xiàn)大多數(shù)是不同語言的js文件分開做,然后根據(jù)用戶語言環(huán)境去加載對(duì)應(yīng)的js文件。

但是我現(xiàn)在因?yàn)槭褂脠鼍跋拗疲詈檬窃谝粋€(gè)js文件里完成。我現(xiàn)在打算支持3種語言(中文、日文、英文),而且輸出文字的地方也比較多,可能有上百條,中間也經(jīng)常要拼接變量。

使用場景示例:

var result=10;document.body.innerHTML='一共有'+result+'個(gè)結(jié)果';

現(xiàn)在我的思路有兩種,一種是把語言文字保存到一個(gè)變量里;一種是把文字寫在原地,形式為數(shù)組,然后使用下標(biāo)調(diào)用。

思路1:

// 方式1:判斷語言后確定唯一的結(jié)果。有點(diǎn)割裂,而且在使用時(shí)只能看到屬性名,影響思路// {w1}是占位符,每個(gè)配置寫了多遍是為了模擬數(shù)量多的時(shí)候的情景var lang={};if () { // 判斷為中文 lang.tip1='一共有{w1}個(gè)結(jié)果'; // lang.tip2='一共有{w1}個(gè)結(jié)果'; // lang.tip3='一共有{w1}個(gè)結(jié)果'; // lang.tip4='一共有{w1}個(gè)結(jié)果'; // lang.tip5='一共有{w1}個(gè)結(jié)果';}else if(){ // 判斷為日文 lang.tip1='{w1}の結(jié)果の合計(jì)'; // lang.tip2='{w1}の結(jié)果の合計(jì)'; // lang.tip3='{w1}の結(jié)果の合計(jì)'; // lang.tip4='{w1}の結(jié)果の合計(jì)'; // lang.tip5='{w1}の結(jié)果の合計(jì)';}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:判斷語言后只做個(gè)下標(biāo),文字寫在原地方。這樣使用時(shí)可以知道這里寫的是什么,但似乎比較亂var lang;if () { // 判斷為中文 lang=0;}else if(){ // 判斷為日文 lang=1;}else if(){ // 判斷為英文 lang=2;}var result=10;document.body.innerHTML=['一共有{w1}個(gè)結(jié)果','{w1}の結(jié)果の合計(jì)','There is a total of {w1} result'][lang].replace('{w1}',result);

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

請(qǐng)問大家有其他思路或解決辦法嗎?

問題解答

回答1:

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

var language = { ’hello’: [’hello,{val}!’,’{val},コン!’ ]};var lang = 0; // 當(dāng)前英文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'};//在頁面初始化的時(shí)候判斷當(dāng)前的環(huán)境,然后直接設(shè)定key值就可以,比如說我現(xiàn)在是日語var lang = 'jp';console.log(hello[lang]);//拓展的話往對(duì)象里面加值就行了,比如說加韓文var hello = { 'cn' : '哈嘍', 'jp' : 'こんにちは', 'en' : 'f**k you', 'kr' : '為何不洗澡思密達(dá)'};lang = 'kr';console.log(hello[lang]);回答3:

您的問題算是i18n/L10n的範(fàn)圍,或許可以找到像

jQuery.i18n

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

其他基本的i18n/L10n內(nèi)容及庫,別錯(cuò)過

Unicode CLDR如簡中語言表

ICU library

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

標(biāo)簽: JavaScript
主站蜘蛛池模板: 色综合久久88 | 日韩三级视频在线 | 日韩三级一区二区三区 | 91狠狠干| 欧美午夜一区 | 黄色大片在线 | 69精品久久| 天天躁日日躁狠狠躁喷水 | 91成人福利 | 国产免费看黄 | 噼里啪啦在线观看 | 日韩在线一区二区三区 | 一级色视频 | 国产亚洲精品成人 | 久久在线观看视频 | 永久免费在线看片视频 | 色综合网站 | 在线观看视频中文字幕 | 波多野结衣视频一区二区 | 波多野结衣国产 | 日批网站在线观看 | 天堂а√在线中文在线鲁大师 | 色综合天天综合 | 成人免费在线观看 | 日韩美女一区二区三区 | 在线视频 中文字幕 | 成人激情免费视频 | 国产高清不卡 | 欧美又粗又深又猛又爽啪啪九色 | 精品久久免费 | 亚洲激情另类 | 日韩欧美在线看 | 亚洲精品综合在线 | 九色在线视频 | 久久久久久久久国产 | 中文精品在线 | 日韩一区二区三区四区五区六区 | 久久久综合久久久 | 天天摸夜夜添 | 男人天堂视频在线观看 | 最新av在线免费观看 |