將國際化(i18n)導入 javascript
更新: 已釋出 1.0 版本使用
Google Code: javascript-i18n-core
Live Demo: http://app.essoduke.org/i18n/
以往進行 javascript 多國語言的開發總是比較麻煩,所以就著手進行了這方面的嘗試;因為 Javascript 判別 HTTP_ACCEPT_LANGUAGE 會有失誤的問題,所以偵測語系交由後端程式負責,並將此參數以 inline 方式傳入 js。
安裝
使用
///以正體中文語系為例
//無參數字串
i18n._('Current Datetime: '); //輸出「目前時間:」
//傳入單一參數
i18n._('I have %1 books', 10); //輸出「我有 10 本書」
//傳入多個參數
i18n._('I have %1 books and %2 pens', 10, 20); //輸出「我有 10 本書和 20 支筆」
///若在字串表內找不到所傳入的值,將會回傳原始字串*/
i18n._('This line isn\'t listing in the language file.') //輸出「This line isn't listing in the language file.」
語系設置
var localize = {
//正體中文
'zh-tw': {
//欄位:[GMT 時區, 日期時間格式, 上午符號, 下午符號]
//日期格式可參照 PHP date() 函式
'setting': [8, 'Y 年 m 月 d 日 (D) H:i:s', '上午', '下午'],
//System Translate 必要字串
'shortMonths': ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],
'longMonths': ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
'shortDays': ['日', '一', '二', '三', '四', '五', '六'],
'longDays': ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
//User Translate 自訂字串
'Go': '衝',
'Current Datetime: ': '現在時間:',
'This is a book': '這是一本書',
'I have %1 books': '我有 %1 本書',
'I have %1 books and %2 pens': '我有 %1 本書和 %1 支筆'
}
}
這次的實做也包括了日期格式、時區等自動轉換,預計之後再導入數字、貨幣、小數點等設置。
//依照語系設定的日期格式輸出目前時間(Y 年 m 月 d 日 (D) H:i:s)
i18n.datatime(); //輸出「2009 年 10 月 26 日 (一) 00:00:00 」
//依照語系設定的日期格式輸出自訂時間(Y 年 m 月 d 日 (D) H:i:s)
i18n.datatime('2009/10/26 00:01:02') //輸出「2009 年 10 月 26 日 (一) 00:01:02」
附上 PHP 取得 HTTP_ACCEPT_LANGUAGE 的函數
//因為 IE 和 Firefox 所取得的值不同,所以需要再處理成相同的字串
function get_client_language(){
preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang);
$result = strtolower($lang[1]);
switch(TRUE){
case ($result == 'en' || $result == 'en-us' || $result == 'en-uk'): $result = 'en-is'; break;
case ($result == 'zh'): $result = 'zh-tw'; break;
}
return $result;
}
更新: 已釋出 1.0 版本使用
Google Code: javascript-i18n-core
Live Demo: http://app.essoduke.org/i18n/
以往進行 javascript 多國語言的開發總是比較麻煩,所以就著手進行了這方面的嘗試;因為 Javascript 判別 HTTP_ACCEPT_LANGUAGE 會有失誤的問題,所以偵測語系交由後端程式負責,並將此參數以 inline 方式傳入 js。
安裝
使用
///以正體中文語系為例
//無參數字串
i18n._('Current Datetime: '); //輸出「目前時間:」
//傳入單一參數
i18n._('I have %1 books', 10); //輸出「我有 10 本書」
//傳入多個參數
i18n._('I have %1 books and %2 pens', 10, 20); //輸出「我有 10 本書和 20 支筆」
///若在字串表內找不到所傳入的值,將會回傳原始字串*/
i18n._('This line isn\'t listing in the language file.') //輸出「This line isn't listing in the language file.」
語系設置
var localize = {
//正體中文
'zh-tw': {
//欄位:[GMT 時區, 日期時間格式, 上午符號, 下午符號]
//日期格式可參照 PHP date() 函式
'setting': [8, 'Y 年 m 月 d 日 (D) H:i:s', '上午', '下午'],
//System Translate 必要字串
'shortMonths': ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],
'longMonths': ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
'shortDays': ['日', '一', '二', '三', '四', '五', '六'],
'longDays': ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
//User Translate 自訂字串
'Go': '衝',
'Current Datetime: ': '現在時間:',
'This is a book': '這是一本書',
'I have %1 books': '我有 %1 本書',
'I have %1 books and %2 pens': '我有 %1 本書和 %1 支筆'
}
}
這次的實做也包括了日期格式、時區等自動轉換,預計之後再導入數字、貨幣、小數點等設置。
//依照語系設定的日期格式輸出目前時間(Y 年 m 月 d 日 (D) H:i:s)
i18n.datatime(); //輸出「2009 年 10 月 26 日 (一) 00:00:00 」
//依照語系設定的日期格式輸出自訂時間(Y 年 m 月 d 日 (D) H:i:s)
i18n.datatime('2009/10/26 00:01:02') //輸出「2009 年 10 月 26 日 (一) 00:01:02」
附上 PHP 取得 HTTP_ACCEPT_LANGUAGE 的函數
//因為 IE 和 Firefox 所取得的值不同,所以需要再處理成相同的字串
function get_client_language(){
preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang);
$result = strtolower($lang[1]);
switch(TRUE){
case ($result == 'en' || $result == 'en-us' || $result == 'en-uk'): $result = 'en-is'; break;
case ($result == 'zh'): $result = 'zh-tw'; break;
}
return $result;
}