JS如何在不同平臺(tái)實(shí)現(xiàn)多語言方式
應(yīng)用場景:
在不同移動(dòng)平臺(tái)(IOS,Android)上,建立一套與HTML頁面通訊框架;主要業(yè)務(wù)邏輯使用HTML開發(fā);想支持多語言開發(fā)。
動(dòng)機(jī):
通過主動(dòng)發(fā)消息的方式,在頁面完成初始化前,獲取當(dāng)前語言選項(xiàng),并且根據(jù)該語言選項(xiàng),調(diào)用對(duì)應(yīng)的JS文件(每種語言對(duì)應(yīng)一個(gè)JS文件)解析頁面。
實(shí)現(xiàn)細(xì)節(jié):
向本地語言框架發(fā)請(qǐng)求獲取語言種類;
$(document).on("pageinit",function(){
/*Kaiwii 向本地代碼發(fā)請(qǐng)求獲取當(dāng)前語言種類*/
});
本地語言框架觸發(fā)回調(diào)函數(shù)(JS方法):根據(jù)語言選項(xiàng),動(dòng)態(tài)將對(duì)應(yīng)語言的JS文件嵌入HTML并且觸發(fā)其執(zhí)行;
/*Kaiwii 本地語言框架回調(diào)本方法*/
function GetLanguageCodeCallBack(Jstring,ERROR){
var i18File = $("script[name='i18']");
if(i18File.length==0){//沒有成功加載js文件
var i18FileLink = "<script name='i18' src='../../js/i18.js'></script>";
switch (Jstring){
case "EN":
i18FileLink = "<script name='i18' src='../../js/i18.js'></script>";
break;
case "CN":
i18FileLink = "<script name='i18' src='../../js/i18_CN.js'></script>";
break;
}
$("head").append(i18FileLink);
}else{//成功加載js文件
switch (Jstring){
case "EN":
$(i18File).attr("src","../../js/i18.js");
break;
case "CN":
$(i18File).attr("src","../../js/i18_CN.js");
break;
}
/*主動(dòng)觸發(fā)更新HTML*/
updatei18Spans();
}
}
不同語言對(duì)應(yīng)的JS文件(如i18.js):
1、使用JSON對(duì)象存儲(chǔ)KEY-VALUE[不同語言版本的JS文件僅僅是VALUE不同(VALUE為對(duì)應(yīng)語言版本中的值)];
2、HTML中的靜態(tài)部分需要調(diào)用JS方法修改DOM對(duì)象的屬性方式完成多語言動(dòng)態(tài)化(通過調(diào)用updatei18spans()觸發(fā));動(dòng)態(tài)部分直接調(diào)用即可;
/*用于國際化*/
<pre name="code" class="javascript">/*Kaiwii*/
/*對(duì)應(yīng)關(guān)系表(key為元素的ID,value為國際化下的顯示內(nèi)容*//*span 部分*/var spans = {"DemandDepositAccountTitle":"CCB Current Account"};//本地代碼交互的部分var locale_vars = {"enquiryTitle":"Account Info Inquiry"};var i18placeholder = {"請(qǐng)輸入單位名稱或賬號(hào)":"Organization's Name/Account"," 開始日期":"Start Date"," 截止日期":"End Date"};function updatei18Spans(){ for(index in spans){ $("span[i18Id='"+index+"']").html(spans[index]); } for(index in i18placeholder){ $("input[placeholder='"+index+"']").attr("placeholder",i18placeholder[index]); }}$(function(){//加載顯示內(nèi)容方法 updatei18Spans(); });
調(diào)用多語言動(dòng)態(tài)框架修改:
1、靜態(tài)部分:
HTML上:
<span i18Id="DemandDepositAccountTitle"></span>
2、動(dòng)態(tài)部分:
JS代碼中:
liElement += "<span ACC_NO='"+ACC_NO+"' CshEx_Cd='"+CshEx_Cd+"' CcyCd='"+CcyCd+"' onclick='renderBAL(this)' class='font14' style='color:#306ed2'>"+locale_vars.enquiryTitle+"</span>";
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WebGIS開發(fā)中不同坐標(biāo)系坐標(biāo)轉(zhuǎn)換問題解決基本步驟
這篇文章主要介紹了如何在JavaScript中使用proj4庫進(jìn)行坐標(biāo)系轉(zhuǎn)換的基本步驟,包括安裝、示例、自定義坐標(biāo)系定義、擴(kuò)展以及一些常見EPSG代碼對(duì)照表,需要的朋友可以參考下2025-01-01
JavaScript 中定義函數(shù)用 var foo = function () {} 和 function foo()區(qū)
這篇文章主要介紹了JavaScript 中定義函數(shù)用 var foo = function () {} 和 function foo()區(qū)別介紹,需要的朋友可以參考下2018-03-03
js復(fù)制文本到粘貼板(Clipboard.writeText())
這篇文章主要介紹了js復(fù)制文本到粘貼板(Clipboard.writeText()),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
基于bootstrap實(shí)現(xiàn)廣告輪播帶圖片和文字效果
這篇文章主要介紹了基于bootstrap實(shí)現(xiàn)廣告輪播帶圖片和文字效果,效果非常棒,需要的朋友可以參考下2016-07-07
js使用Canvas將多張圖片合并成一張的實(shí)現(xiàn)代碼
這篇文章主要介紹了js使用Canvas將多張圖片合并成一張的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
基于JavaScript實(shí)現(xiàn)手機(jī)短信按鈕倒計(jì)時(shí)(超簡單)
在淘寶等購物網(wǎng)站,我們都會(huì)看到一個(gè)發(fā)送短信倒計(jì)時(shí)的按鈕,究竟是如何實(shí)現(xiàn)的呢?下面小編通過本篇文章給大家分享一段代碼關(guān)于js實(shí)現(xiàn)手機(jī)短信按鈕倒計(jì)時(shí),需要的朋友參考下2015-12-12
JS常見問題之為什么點(diǎn)擊彈出的i總是最后一個(gè)
最近有很多朋友問我,為什么點(diǎn)擊彈出的i總是最后一個(gè),于是抽時(shí)間寫了這篇文章,特此分享到腳本之家平臺(tái),供大家參考2016-01-01
關(guān)于javascript document.createDocumentFragment()
documentFragment 是一個(gè)無父對(duì)象的document對(duì)象.2009-04-04

