天天看點

程式的國際化

程式的國際化:當一個程式或Web應用需要面對多個國家或區域的使用者時,由于不同國家或地區的使用者的文化習慣不同,具體表現在使用的文字、貨币、時間、數字等的表現格式不同。例中文和English,¥和$.此時就不可避免的需要實作程式的國際化來滿足使用者的需求。我們也可以把國際化簡稱為I18N,這是因為國家化單詞internationalization的首字母"i"和尾字母"n"之間有18個字母。是以,國際化是一個跨地區或國家的企業級應用必不可少的功能。Java提供了非常好的國際化支援。

 一、Java(J2SE)的國際化: 在Java中,Java是第一個設計成為全面支援國家化的語言,從一開始,Java就具有進行有效國際化的一個必須的重要特性:使用Unicode來處理所有的字元串。關于Java更多國際化的資訊可以檢視網站:http://www.joconner.com/javai18n和Sun的官方網站:http://java.sun.com/javase/technologies/core/basic/intl .

國際化主要涉及資訊有:數字格式、日期和時間、排序、文本檔案和字元集、本地語言和資源檔案。

   在Java語言中專門提供了用于解決國際化問題的API,這些API類主要位于java.text和java.util包中。 

1、Locale類:一個Locale執行個體對象代表了一個特定的地理、政治或文化上的區域。

Locale的構造方法:

java.util.Locale(java.lang.String)

java.util.Locale(java.lang.String, java.lang.String)

 java.util.Locale(java.lang.String, java.lang.String, java.lang.String)

 其中第一個String是language,表示有效的ISO語言代碼,一般用兩個小寫字母表示。第二個String表示國家或地區,一般使用兩個大寫字母表示。第三個string表示特定于供應商和浏覽器的代碼,WIN表示windows,MAC表示Macintosh,POSIX表示POSIX。

eg: Locale enLocale=new Locale("en");

        Locale enLocale=new Locale("es", "ES","Traditional_WIN")

Locale常量:雖然可以使用Locale類的構造方法建立Locale執行個體對象,但是需要指定語言代碼和國家代碼作為構造方法的參數,這比較麻煩。這裡Locale提供了一些常量,這些常量分别對應了一些提前建立好的表示不同語言和國家地區的Locale執行個體對象。例,Locale.CHINESE表示一個語言為漢語的Locale執行個體對象,而Locale.US表示一個國家或地區為美國的Locale執行個體對象。具體參見JDK文檔。

public static Locale getDefault()傳回作業系統的目前Locale執行個體對象。

public static Locale[] getAvailableLocales():傳回目前作業系統所有已安裝的語言環境數組。

還有相應的getCountry()、getLanguage()、getVariant()、getDisplayCountry等。

2、Format類:Format有一個抽象類。他的幾個子類:NumberFormat、MessageFormat、DateFormat分别處理數字、字元串、日期的格式化問題。具體看jdk文檔。

3、ResourceBundle類:用于描述一個資源包。資源檔案的擷取來實作國際化資訊顯示。同時,當涉及中文字元時,要求資源檔案中的中文字元轉換為Unicode編碼。可用JDK的native2ascii應用程式來進行編碼。同時,也可以一次性的轉換整個資源檔案。調用指令:

  native2ascii -encoding gb2312 temp.properties MyResources_zh.properties

 運作将在目前目錄下生成temp.properties資源檔案的Unicode編碼檔案MyResource_zh.properties。當出現占位符時可用MessageFormat類來處理。

二、Web應用的國家化

實作Web應用的國際化有兩種方式:

1、針對不同語言和地區的使用者開發不同的JSP網頁版本,當使用者請求資源時,根據請求消息中國攜帶的本地資訊為使用者提供合适的版本。

2、針對本地環境敏感的資源資料(如錯誤資訊提示、菜單、按鈕上的标題等文字資訊),從網頁中分離出來。放在.properties屬性資源檔案中。對于應用中的數字、貨币、日期和時間等本地敏感的資料,可以通過占位符的方式設定它們的格式類型和格式模式。

針對上面兩種方法:如果整個Web應用中有大量的資料需要根據使用者的本地資訊進行顯示,則采用第一種方式;否則,采用第二種方式。也可以将兩種方式結合使用。

下面以一個登入請求為例的操作流程:

程式的國際化

 附件中是一個簡單的I18nJava 項目的jar包,項目的開發工具Eclipse。