jQuery國際化插件可以讓你在javascript代碼中輕松地處理不同文化之間的數字、貨幣和日期格式。例如,你可以使用這個插件正確地顯示一個國家的貨幣符號
今天,我們發布了一個新的jQuery國際化插件的原型,你可以在你的javascript程序中引用這個插件添加國際化功能。插件涵蓋了超過350種文化的國際化信息,從蘇格蘭蓋爾語、佛裡斯蘭語、匈牙利語、日語到加拿大英語等。插件將以開源的形式發布。
你可以從我們的Github代碼庫下載插件的原型版本:
http://github.com/nje/jquery-glob
另外也可以在這裡下載一些示例了解簡單的用法。
理解國際化
jQuery國際化插件可以讓你在javascript代碼中輕松地處理不同文化之間的數字、貨幣和日期格式。例如,你可以使用這個插件正確地顯示一個國家的貨幣符號:
你也可以用這個插件編排日期格式,這樣日期和月份會以正確的順序顯示,而日期和月份的名稱也能夠得到正確的翻譯:
請注意上圖阿拉伯的日期格式中,年份顯示成了1431。這是因為年份已經按照回歷的方式轉換過了。
一些文化差異比較明顯,例如使用不同的貨幣或者不同的月份名稱等。但另外一些差異卻細微而又出人意料。例如,在有一些文化裡,數字不是以均衡的方式分組的。在語言標記為“te-IN”的文化中(印度東部的泰盧固語),數字先按3位數字分組,然後再每2位數字分組。因此象數字一百萬(1000000)就會被寫成“10,00,000”。而有些文化就根本不對數字進行分組。所有這些細微的差異都能夠被jQuery國際化插件自動處理。
要得到正確的日期可能非常需要技巧。不同的文化采用不同的歷法,比如公歷和回歷。同一種文化也可能會采用多個歷法,比如日本就同時采用公歷和以天皇年號推算的紀年歷。插件提供了函數將日期在所有這些歷法中相互轉換。
使用語言標記
jQuery國際化插件依據RFC 4646和RFC 5646標准裡定義的語言標記來識別文化(參見 http://tools.ietf.org/html/rfc5646),語言標記通常由連字符將多個輔標簽組合而成,比如:
語言標記 語言名稱 (中文)
en-AU 英文(澳大利亞)
en-BZ 英文(伯利茲)
en-CA 英文(加拿大)
Id 印度尼西亞文
zh-CHS 中文(簡體) — 標記不再使用
Zu 祖魯文
請注意單一語言例如英語可以同時有多個語言標記。同是英語國家,加拿大采用的數字、貨幣和日期格式就不同於澳大利亞或者美國。你可以使用下面的語言輔標簽查找工具來獲取某個文化的語言標記:
http://rishida.net/utils/subtags/
jQuery國際化插件裡一個叫做globinfo的文件夾包含了這350種文化的信息。實際上,這個文件夾裡有700多個文件,因為它包括了每個文件的最小化(minify)和原始版本。
比如說,在globinfo文件夾,文件jQuery.glob.en-AU.js對應英文(澳大利亞),jQuery.glob.id.js對應印度尼西亞文,而jQuery.glob.zh-CHS對應簡體中文。
示例:指定某種文化
假如你要創建一個德文的網站,並且希望在客戶端的javascript腳本裡使用德語習慣顯示所有的日期、貨幣符號和數字。那頁面的源代碼也許與下面的HTML類似:
注意上面的span標簽,它們標識了所有需要用國際化插件進行格式化的區域:商品的價格、上架的日期以及庫存量。
要在網頁裡使用jQuery國際化插件,需要添加三個javascript文件:jQuery庫,jQuery國際化插件和指定的文化習慣信息:
在上例中,我將包含了德語文化習慣的jQuery.glob.de-DE.js文件靜態地加入到網頁中,”de-DE”是語言標記,表示在德國使用的德語。
既然已經引入了必要的腳本文件,就可以使用下面的客戶端javascript代碼調用插件來顯示價格、上架的日期以及庫存量等值:
jQuery國際化插件為jQuery函數庫添加了一些新的函數—包括preferCulture()和format()等新函數。你可以通過preferCulture()函數設置插件其他函數調用時使用的默認文化。preferCulture()函數接受一個語言標記作為參數,這個函數會使用最接近這個語言標記的文化。
$.format()函數才是真正用來編排貨幣、日期和數字格式的。$.format()函數的第二個參數是格式分類符。例如,傳入“c”表示按貨幣的樣式編排參數值。在githum的ReadMe文件裡詳細描述了所有格式分類符代表的意思:http://github.com/nje/jquery-glob
當我們在浏覽器打開這個頁面的時候,所有的東西都是按照德語習慣正確顯示。貨幣符號采用的是歐元符號,日期采用德語的日期和月份名稱,並且,數字分隔符用的是點號(.),而不是逗號(,)。