|
近日微軟發(fā)布了一款新的jQuery國(guó)際化插件,該插件涵蓋了超過(guò)350種文化的國(guó)際化信息,你可以在JavaScript程序中引用這個(gè)插件添加國(guó)際化功能。同時(shí)可以在Github代碼庫(kù)下載插件的原型版本:http://github.com/nje/jquery-glob。
理解國(guó)際化
jQuery國(guó)際化插件可以讓你在JavaScript代碼中輕松地處理不同文化之間的數(shù)字、貨幣和日期格式。例如,你可以使用這個(gè)插件正確地顯示一個(gè)國(guó)家的貨幣符號(hào):
你也可以用這個(gè)插件編排日期格式,這樣日期和月份會(huì)以正確的順序顯示,而日期和月份的名稱也能夠得到正確的翻譯:
請(qǐng)注意上圖阿拉伯的日期格式中,年份顯示成了1431。這是因?yàn)槟攴菀呀?jīng)按照回歷的方式轉(zhuǎn)換過(guò)了。
一些文化差異比較明顯,例如使用不同的貨幣或者不同的月份名稱等。但另外一些差異卻細(xì)微而又出人意料。例如,在有一些文化里,數(shù)字不是以均衡的方式分組的。在語(yǔ)言標(biāo)記為“te-IN”的文化中(印度東部的泰盧固語(yǔ)),數(shù)字先按3位數(shù)字分組,然后再每2位數(shù)字分組。因此象數(shù)字一百萬(wàn)(1000000)就會(huì)被寫成“10,00,000”。而有些文化就根本不對(duì)數(shù)字進(jìn)行分組。所有這些細(xì)微的差異都能夠被jQuery國(guó)際化插件自動(dòng)處理。
要得到正確的日期可能非常需要技巧。不同的文化采用不同的歷法,比如公歷和回歷。同一種文化也可能會(huì)采用多個(gè)歷法,比如日本就同時(shí)采用公歷和以天皇年號(hào)推算的紀(jì)年歷。插件提供了函數(shù)將日期在所有這些歷法中相互轉(zhuǎn)換。
使用語(yǔ)言標(biāo)記
jQuery國(guó)際化插件依據(jù)RFC 4646和RFC 5646標(biāo)準(zhǔn)里定義的語(yǔ)言標(biāo)記來(lái)識(shí)別文化,語(yǔ)言標(biāo)記通常由連字符將多個(gè)輔標(biāo)簽組合而成,比如:
en-AU | 英文(澳大利亞) |
en-BZ | 英文(伯利茲) |
en-CA | 英文(加拿大) |
Id | 印度尼西亞文 |
zh-CHS | 中文(簡(jiǎn)體) |
Zu | 祖魯文 |
請(qǐng)注意單一語(yǔ)言例如英語(yǔ)可以同時(shí)有多個(gè)語(yǔ)言標(biāo)記。同是英語(yǔ)國(guó)家,加拿大采用的數(shù)字、貨幣和日期格式就不同于澳大利亞或者美國(guó)。你可以使用下面的語(yǔ)言輔標(biāo)簽查找工具來(lái)獲取某個(gè)文化的語(yǔ)言標(biāo)記:http://rishida.NET/utils/subtags/。
jQuery國(guó)際化插件里一個(gè)叫做globinfo的文件夾包含了這350種文化的信息。實(shí)際上,這個(gè)文件夾里有700多個(gè)文件,因?yàn)樗嗣總€(gè)文件的最小化(minify)和原始版本。比如說(shuō),在globinfo文件夾,文件jQuery.glob.en-AU.js對(duì)應(yīng)英文(澳大利亞),jQuery.glob.id.js對(duì)應(yīng)印度尼西亞文,而jQuery.glob.zh-CHS對(duì)應(yīng)簡(jiǎn)體中文。
示例:指定某種文化
假如你要?jiǎng)?chuàng)建一個(gè)德文的網(wǎng)站,并且希望在客戶端的JavaScript腳本里使用德語(yǔ)習(xí)慣顯示所有的日期、貨幣符號(hào)和數(shù)字。那頁(yè)面的源代碼也許與下面的HTML類似:
注意上面的span標(biāo)簽,它們標(biāo)識(shí)了所有需要用國(guó)際化插件進(jìn)行格式化的區(qū)域:商品的價(jià)格、上架的日期以及庫(kù)存量。要在網(wǎng)頁(yè)里使用jQuery國(guó)際化插件,需要添加三個(gè)JavaScript文件:jQuery庫(kù),jQuery國(guó)際化插件和指定的文化習(xí)慣信息:
在上例中,我將包含了德語(yǔ)文化習(xí)慣的jQuery.glob.de-DE.js文件靜態(tài)地加入到網(wǎng)頁(yè)中,”de-DE”是語(yǔ)言標(biāo)記,表示在德國(guó)使用的德語(yǔ)。既然已經(jīng)引入了必要的腳本文件,就可以使用下面的客戶端JavaScript代碼調(diào)用插件來(lái)顯示價(jià)格、上架的日期以及庫(kù)存量等值:
jQuery國(guó)際化插件為jQuery函數(shù)庫(kù)添加了一些新的函數(shù)—包括preferCulture()和format()等新函數(shù)。你可以通過(guò)preferCulture()函數(shù)設(shè)置插件其他函數(shù)調(diào)用時(shí)使用的默認(rèn)文化。preferCulture()函數(shù)接受一個(gè)語(yǔ)言標(biāo)記作為參數(shù),這個(gè)函數(shù)會(huì)使用最接近這個(gè)語(yǔ)言標(biāo)記的文化。
$.format()函數(shù)才是真正用來(lái)編排貨幣、日期和數(shù)字格式的。$.format()函數(shù)的第二個(gè)參數(shù)是格式分類符。例如,傳入“c”表示按貨幣的樣式編排參數(shù)值。在githum的ReadMe文件里詳細(xì)描述了所有格式分類符代表的意思:http://github.com/nje/jquery-glob。
當(dāng)我們?cè)跒g覽器打開這個(gè)頁(yè)面的時(shí)候,所有的東西都是按照德語(yǔ)習(xí)慣正確顯示。貨幣符號(hào)采用的是歐元符號(hào),日期采用德語(yǔ)的日期和月份名稱,并且,數(shù)字分隔符用的是點(diǎn)號(hào)(.),而不是逗號(hào)(,)。
你可以通過(guò)運(yùn)行示例下載中的3_GermanSite.htm文件來(lái)了解上述方法。
示例:用戶動(dòng)態(tài)選擇一個(gè)區(qū)域設(shè)置
在前面的例子中,我們顯式指定使用德語(yǔ)文化習(xí)慣(通過(guò)引用jQuery.glob.de-DE.js文件)。我們現(xiàn)在來(lái)看看動(dòng)態(tài)設(shè)置文化習(xí)慣的幾個(gè)例子。比如說(shuō)我們打算在頁(yè)面上加一個(gè)包含所有350種文化的下拉框,當(dāng)用戶在下拉框里選擇了一個(gè)文化,頁(yè)面上所有的日期都按照這個(gè)文化的習(xí)慣顯示。
這是網(wǎng)頁(yè)的HTML源代碼:
請(qǐng)留意所有包含了日期的<span>標(biāo)簽都有一個(gè)data-date屬性(data-*屬性是HTML5里的新功能,同時(shí)在老的瀏覽器上也可以使用)。當(dāng)用戶在下拉框里選擇了一個(gè)文化信息后,我們的代碼將會(huì)格式化data-date屬性里保存的日期。為了顯示所有可能的文化信息,我們要象下面這樣添加一個(gè)叫jQuery.glob.all.js 的文件。
jQuery國(guó)際化插件里有一個(gè)叫做jQuery.glob.all.js的文件,這個(gè)文件包含了所有插件支持的350多種文化的國(guó)際化信息。即使經(jīng)過(guò)最小化處理,還是有367k字節(jié)。由于文件很大,除非你的確需要一次性使用所有這些文化信息,我們建議你只添加所使用到的文化信息對(duì)應(yīng)的JavaScript文件。下一個(gè)例子中,我會(huì)演示如何在網(wǎng)頁(yè)中動(dòng)態(tài)地加載某個(gè)語(yǔ)言對(duì)應(yīng)的JavaScript文件。
下一步,把所有支持的文化名稱添加到下拉框的列表里。可以用$.cultures這個(gè)屬性獲取它們:
最后,再寫幾行代碼把每個(gè)span標(biāo)簽里的data-date屬性的日期都抓出來(lái)并編排格式:
jQuery國(guó)際化插件里面的parseDate()函數(shù)將一個(gè)字符串的日期轉(zhuǎn)換成JavaScript日期,而format()函數(shù)則用來(lái)編排這些日期的格式。“D”這個(gè)格式分類符說(shuō)明使用長(zhǎng)日期格式編排日期。現(xiàn)在,只要頁(yè)面瀏覽者選擇這350種語(yǔ)言其中之一,內(nèi)容都會(huì)被正確的國(guó)際化。你可以通過(guò)運(yùn)行示例下載中的4_SelectCulture.htm文件來(lái)了解上述方法。
示例:動(dòng)態(tài)加載國(guó)際化文件
在上一節(jié)說(shuō)過(guò),你應(yīng)該盡量避免在頁(yè)面中引用jQuery.glob.all.js文件, 因?yàn)樗鼘?shí)在是太大了。相反,你可以動(dòng)態(tài)地加載你所需要的國(guó)際化信息。比如說(shuō),你要?jiǎng)?chuàng)建一個(gè)下拉列表顯示下面這些語(yǔ)言:
下面的代碼會(huì)在用戶從下拉框中選擇一個(gè)新的語(yǔ)言后執(zhí)行。這段代碼會(huì)先判斷選中的語(yǔ)言對(duì)應(yīng)的國(guó)際化腳本文件是否已經(jīng)加載了。如果還沒有加載,則使用jQuery的$.getScript()函數(shù)動(dòng)態(tài)加載國(guó)際化腳本文件。
當(dāng)國(guó)際化腳本文件被瀏覽器加載以后,就會(huì)調(diào)用globalizePage()函數(shù),繼而執(zhí)行客戶端的代碼完成國(guó)際化。這個(gè)方法的優(yōu)點(diǎn)是可以讓你避免加載整個(gè)jQuery.glob.all.js文件—只要加載使用到的文件,而且只加載一次。示例下載中的5_Dynamic.htm文件演示了這個(gè)方法。
示例:自動(dòng)檢測(cè)用戶的常用語(yǔ)言設(shè)置
大多數(shù)網(wǎng)站通過(guò)檢測(cè)用戶的瀏覽器設(shè)置來(lái)得到其常用語(yǔ)言,然后根據(jù)這種語(yǔ)言文化習(xí)慣來(lái)國(guó)際化網(wǎng)站內(nèi)容。用戶可以在瀏覽器中設(shè)置一個(gè)常用語(yǔ)言。這樣,用戶在請(qǐng)求頁(yè)面時(shí),常用語(yǔ)言設(shè)置會(huì)包含在請(qǐng)求Http消息頭的Accept-Language字段中。如果使用的是微軟的IE瀏覽器,可以通過(guò)以下步驟設(shè)置你常用的語(yǔ)言:
1. 在菜單欄里選擇工具,InterNET 選項(xiàng)。
2. 選擇常規(guī)標(biāo)簽。
3. 在外觀里點(diǎn)擊語(yǔ)言按鈕。
4. 點(diǎn)擊添加在語(yǔ)言列表里增加新的語(yǔ)言。
5. 然后把你最常用的語(yǔ)言放在列表的最頂端。
你可以在這個(gè)對(duì)話框中設(shè)置多門常用語(yǔ)言。所設(shè)置語(yǔ)言的順序關(guān)系將會(huì)體現(xiàn)在HTTP請(qǐng)求的Accept-Language字段中,如:
- Accept-Language:fr-FR,id-ID;q=0.7,en-US;q=0.3
比較奇怪的是,用戶不能夠通過(guò)客戶端的JavaScript腳本得到Accept-Language的內(nèi)容。微軟的IE和Firefox瀏覽器都支持一系列語(yǔ)言相關(guān)的屬性,這些屬性可以通過(guò)Window.navigator進(jìn)行訪問,例如windows.navigator.browserLanguage和window.navigator.language,不過(guò)這些屬性中的語(yǔ)言一般指的是操作系統(tǒng)中設(shè)置的語(yǔ)言或者是瀏覽器的語(yǔ)言版本。你不能通過(guò)這些屬性來(lái)得到用戶設(shè)置的常用語(yǔ)言。
得到用戶語(yǔ)言偏好(也就是Accept-Language字段中的內(nèi)容)的唯一可靠方法就是編寫服務(wù)器代碼。例如,下面的ASP.NET頁(yè)面就利用了服務(wù)器的Request.UserLanguages屬性把用戶的語(yǔ)言偏好設(shè)置賦給了客戶端JavaScript的acceptLanguage變量(然后就可以通過(guò)客戶端JavaScipt訪問這些值了):
為了使這段代碼能夠正常工作,頁(yè)面中必須包含與acceptLanguage對(duì)應(yīng)的文化信息。例如如果你的常用語(yǔ)言是fr-FR(法語(yǔ)-法國(guó)),那就必須在這個(gè)頁(yè)面中引用jQuery.glob.fr-FR.js或者jQuery.glob.all.js這兩個(gè)JavaScript腳本之一,否則沒辦法得到文化信息。關(guān)于這個(gè)方法的應(yīng)用可以示例下載中的”6_AcceptLanguages.ASPx”。
如果對(duì)于頁(yè)面中用戶的常用語(yǔ)言沒有對(duì)應(yīng)的腳本包含其文化信息,那么$.preferCulture()方法就會(huì)引用中立(neutral)的文化信息(例如,使用jQuery.glob.fr.js,而不是jQuery.glob.fr-FR.js)。如果中立文化信息也不可用,那么$.preferCulture()方法就會(huì)回滾到使用默認(rèn)文化(英語(yǔ))。
示例:利用國(guó)際化插件使JQuery UI DatePicker實(shí)現(xiàn)國(guó)際化
國(guó)際化插件的目的之一就是使開發(fā)能適應(yīng)各種不同文化的jQuery小工具的變得更為簡(jiǎn)單。我們希望確保jQuery國(guó)際化插件能夠與現(xiàn)有的jQuery的UI插件如DatePicker共存并正常工作。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們創(chuàng)建了DatePicker插件的一個(gè)整合版本,使它可以在渲染日歷的時(shí)候利用我們的插件來(lái)提供國(guó)際化支持。下圖演示了把jQuery國(guó)際化插件和整合后的DatePicker插件一起加入到頁(yè)面并選擇印度尼西亞語(yǔ)的效果。
注意:一周中每一天的名稱都以印度尼西亞語(yǔ)的縮寫形式顯示。 此外,月份的名字也以印度尼西亞語(yǔ)顯示。你可以從我們的github網(wǎng)站下載整合版的JQuery UI DatePicker。你也可以使用示例下載中文件7_DatePicker.htm所使用的版本。
原文地址:http://weblogs.ASP.NET/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.ASPx
原文名:jQuery Globalization Plugin from Microsoft
it知識(shí)庫(kù):微軟發(fā)布最新jQuery國(guó)際化插件 諸多實(shí)例用法解析,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。