2007/01/26

配合動態載入,撰寫多國語言介面

我是還沒去了解 gmail 怎麼做的,自己想了個解決的方法,讓我們可以動態載入必要的語言檔,當然要搭配昨天的 loader.js, 因為這個 loader.js 需要用 new 產生,因此必須在網頁開始處先產生一個名為 JsLoader 的物件。


/*
author: wade.fs@gmail.com
version: 0.1.0 20070126
Code Licensed in GPL
Desc: for i18n, always using utf8
must: using loading.js + JsLoader in global variable space
*/
/*
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>WadeFS</TITLE>
<script type="text/javascript" src="js/yahoo.js"></script>
<script type="text/javascript" src="js/connection.js"></script>
<script type="text/javascript" src="js/loader.js"></script>
<script type="text/javascript" src="js/i18n.js"></script>

<script type="text/javascript">
var JsLoader;
function JsLoadHandler(file) {
if (file.substr(0,4) == "i18n") {
alert ("i18n.$('hdd') = " + i18n.$("hdd"));
}
}
function init() {
JsLoader = new YAHOO.Loader;
JsLoader.onFileLoad = JsLoadHandler;
i18n.load("zh_TW"); // 要在 JsLoader 之後使用
}
</script>
</HEAD>
<BODY onLoad="init()"></BODY></HTML>
*/
/* i18n/zh_TW.js, 請用 utf8 格式編輯
{
"mainboard": "主機",
"hdd": "硬碟",
"usb-disk": "隨身碟",
"cdrom": "光碟機",
"display": "顯示卡",
}
*/
var i18n = {
id: "en",
lang: {},
load: function(lang) {
if (typeof(lang) != "string") { this.id = "en"; }
else { this.id = lang; }
this.lang = {};
if (this.id !== "en") {
JsLoader.load("i18n/"+this.id+".js");
}
},
$: function(token) {
if (typeof(this.lang[""+token]) != "undefined") {
return this.lang[""+token];
}
else { return token; }
},
};

0 意見: