一、名詞解釋
國際化(Internationalization)是設計一個適用於多種語言和地區的應用程式的過程。適用於多種語言和地區的含義是當使用不同語言及處於不同的地區的使用者在使用這個應用程式時,應用程式必須使用他們能看懂的語言和符合他們文化習慣來顯示資訊。國際化有時候被簡稱為i18n,因為有18個字母在國際化的英文單詞的字母i和n之間。
二、國際化的程式特徵
- 有一個附加的本地化資料(localized data)及擁有在全世界各個地區執行的能力。
- 文本的元素,比如狀態資訊或GUI截面的lables,不是直接寫(hardcoded)在程式中,而是被儲存在本地化的資料中,並且能被程式正確的動態使用。
- 支援新的語言時,不需要修改程式,不需要重新編譯。
- 文化差異的資料,比如日期和貨幣,必鬚根據擁護的語言和習慣顯示不同的格式。
- 可以被迅速的本地化。
本地化(Localization)是指通過增加本地描述的構件(locale-specific components )和文字翻譯工作來使應用程式適應於不同的語言和地區的過程。本地化有時候被簡稱為l10n,應為有10個字母在本地化的英文單詞的字母l和n之間。通常本地化最耗時的工作應該是文字翻譯。本地化工作者們要根據地區的具體需求來為日期、數字和通貨等資料建立新的格式。其他類型的資料,象聲音,圖象等,也需要根據具體需要來決定是否本地化。
三、國際化步驟
我們可按如下步驟來實現一個程式的國際化:
1、建立properties檔案——本地化資料
properties檔案的名字需遵守固定格式,形如“basename_LL_CC.properties”或“basename_LL.properties”。其中,LL表示語言代碼(如“zh”),CC表示國家代碼(如“CN”)。例如,中文的本地化資料可儲存在檔案“message_zh.properties ”中。
2、建立Local對象——不同語言和國家的標識
java.util.Local是JDK提供的標準API。這個類用來標識國家和語言。
我們可以建立一個local對象:
Local locale = new Locale("en","US");
這個對象標誌了一個地方,這個地方是美國,並且這裡的語言是英語。
3、建立ResourceBundle對象----本例中實現國際化的主要角色
java.util.ResourceBundle是JDK提供的標準API。它實際上是個抽象類別,同時它提供了建立它的子類的靜態Factory 方法。在例子程式中我們實際上使用的是ResourceBundle的子類PropertyResourceBundle的對象。通過它,我們可以根據Local對象來讀取不同的properties檔案,從而取得不同的資訊。
可用如下語句建立這個對象:
ResourceBundle rb = ResourceBundle.getBundle("MessagesBundle", locale);
4、用ResourceBundle讀取資訊——本地化實現了
讀取了propeties檔案後,我們就可以用ResourceBundle的執行個體通過getString(String Key)方法來取得資訊了。
四、程式樣本
1、建立一個工程,並在應用程式根路徑下建立如下三個檔案:
- classMain.java
- message_zh.properties
- message_en.properties
簡單起見,每個檔案中唯寫入一行資料:
message_zh.properties:
msg0="Chinese locale"
message_en.properties:
msg0="English locale"
2、在classMain.java中填寫如下代碼:
import java.util.*;
public class classMain{
public static void main(String args[])
{
Locale local = new Locale("en","US");
ResourceBundle rb = ResourceBundle.getBundle("message",local);
System.out.println(rb.getString("msg0"));
local = new Locale("zh","CN");
rb = ResourceBundle.getBundle("message",local);
System.out.println(rb.getString("msg0"));
}
}
編譯運行便可得如下結果:
"English locale"
"Chinese locale"
參考: http://wenku.baidu.com/view/2ef69bc52cc58bd63186bda5.html