國際化可以輕鬆地本地化或將目標應用翻譯成不同的語言 ,並可以實現一次處理多個語言環境,使得應用程序支持更多的語言環境,跨國際應用時使於維護。在應用程序中,實現方式主要是採取讀取資源屬性文件(properties)的方式實現,然後根據.properties文件的名稱信息(本地化信息),匹配當前系統的國別語言信息(也可以程序指定),然後獲取相應的properties文件的內容。
properties文件的命名規範是: 自定義名_語言代碼_國別代碼.properties,
默認文件名直接寫爲:自定義名.properties
如ZMC_zh_CN.properties,ZMC_en_US.properties,ZMC.properties等,國際化文件根據自己應用程序決定採取一個或多個……
當在中文操作系統下,如果ZMC_zh_CN.properties、ZMC.properties兩個文件都存在,則優先會使用ZMC_zh_CN.properties,當ZMC_zh_CN.properties不存在時候,會使用默認的ZMC.properties。
沒有提供語言和地區的資源文件是系統默認的資源文件。
資源文件都必須是ISO-8859-1編碼,因此,對於所有非西方語系的處理,都必須先將之轉換爲Java Unicode Escape格式。轉換方法是通過JDK自帶的工具native2ascii.
下面進行實踐說明,由於時間關係且只爲學習入門瞭解,寫一十分簡單的程序加以說明。
1.創建一個Web Project應用。
2.在src目錄下創建國際化資源文件:
ApplicationResources_zh_CN.properties文件內容:
msg.hello=\u4F60\u597D\u4E16\u754C
ApplicationResources_en_US.properties文件內容:
msg.hello=Hello World
ApplicationResources_zh_CN.properties文件內容:
msg.hello=Hello World
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>ApplicationResources</param-value>
</context-param>
該文件只是指明國際化文件的基本名稱,解析類由jstl包提供,若對ZMC*.properties文件進行配置,則<param-value />的值爲ZMC。所以該web.xml文件的信息最後爲:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Define the basename for a resource bundle for I18N -->
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>ApplicationResources</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4.創建實例Class:
package i18n;
import java.util.ResourceBundle;
public class I18nTest {
* 國際化Demo
*
* @author liuchunhe
*/
public static void main(String[] args) {
try {
//獲取中問環境
Locale locale1 = new Locale("zh", "CN");
//通過web.xml中的基名信息取得ResourceBundle對象
ResourceBundle resourceBundle1 = ResourceBundle.getBundle("ApplicationResources", locale1);
//從文件中取得信息
System.out.println("中國大陸環境:"+resourceBundle1.getString("msg.hello"));
//美國
Locale locale2 = new Locale("en", "US");
ResourceBundle resourceBundle2 = ResourceBundle.getBundle("ApplicationResources", locale2);
System.out.println("美國環境:"+resourceBundle2.getString("msg.hello"));
//系統默認
ResourceBundle resourceBundle3 = ResourceBundle.getBundle("ApplicationResources", Locale.getDefault());
System.out.println("系統默認環境:"+resourceBundle3.getString("msg.hello"));
} catch (Exception e) {
System.out.println("運行出現異常……");
}
}
}
使用此類中的構造方法來創建 Locale:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
創建完 Locale 後,就可以查詢有關其自身的信息。使用 getCountry 可獲取 ISO 國家代碼,使用 getLanguage 則獲取 ISO 語言代碼。
6.import java.util.ResourceBundle說明