轉自:http://xa-zbl.javaeye.com/blog/249385
國際化(Internationalization,又稱il8n),是越來越多的應用軟件必須面臨的問題,Java語言採用Unicode編碼,並且提供了強大的類庫支持國際化編程。採用Java語言編程,可以方便地實現應用軟件界面語言的國際化。
國際化編程常用類:使用Java語言進行國際化編程,經常要用到Locale類及ResourceBundl e類,它們都在包java.util中.
1.Locale類
Locale類包含對主要地理區域的地域化特徵的封裝。通過設定Locale,我們可以爲特定的國家或地區提供符合當地文化習慣的語言、表達格式等。一個Locale代碼 可由語言代碼和地區代碼組合而成。常用的兩種Locale代碼如下:
語言代碼 | 地區代碼 | Locale代碼 | 說明 |
en | US | en_US | 美國英語 |
zh | CN | zh_CN | 簡體中文 |
2.ResoureeBundle類
ResourceBundle類是一個抽象類,需要通過getBundle(String
baseName,Locale
locale)方法加載擴展名爲properties的資源文件。資源文件的名稱由一個基本名稱和Locale代碼組成,而基本名稱則可以在Java程序
中調用getBundle(StringbaseName,Locale
locale)方法時傳人蔘數指定。例如,我們在程序中指定基本名稱爲messages,Locale代碼爲zh_CN,
則對應的資源文件應爲messages_zh_CN.properties
3、接下來我們可以用下面的代碼來取得國際化配置:
Locale locale=new Locale("zh","CN");
ResourceBundle messages = ResourceBundle.getBundle("messages",locale);
String title = messages.getString("title");
上面的代碼就是加載了messages_zh_CN.properties 的資源文件,讀取了資源文件中的title的值。
I18N formatting 標籤庫就是用於在 JSP 頁面中做國際化的動作。在該標籤庫中的標籤一共有 12 個,被分爲了兩類,分別是:
國
際化核心標籤:
<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>、<fmt:param>、<fmt:requestEncoding>
格
式化標籤: <fmt:timeZone>、<fmt:setTimeZone>
、<fmt:formatNumber>
、<fmt:parseNumber>、<fmt:formatDate>、<fmt:parseDate>
1、<fmt:setLocale>標籤 :
<fmt:setLocale> 標籤用於設置 Locale 環境。有兩個屬性:
屬性 |
描述 |
value |
Locale 環境的指定,可以是 java.util.Locale 或 String 類型的實例 |
scope |
Locale 環境變量的作用範圍(可選) |
<fmt:setLocale value="zh_CN"/> 表示設置本地環境爲簡體中文。
2、<fmt:bundle> 、<fmt:setBundle> 標籤 :
這兩組標籤用於資源配置文件的綁定,唯一不同的是 <fmt:bundle> 標籤將資源配置文件綁定於它標籤體中的顯示, <fmt:setBundle> 標籤則允許將資源配置文件保存爲一個變量,在之後的工作
可以根據該變量來進行。有3個屬性:
屬性 |
描述 |
basename |
資源配置文件的指定,只需要指定文件名而無須擴展名,二組標籤共有的屬性 |
var |
<fmt:setBundle> 獨有的屬性,用於保存資源配置文件爲一個變量 |
scope |
變量的作用範圍 |
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
該示例將會查找一個名爲 applicationMessage_zh_CN.properties 的資源配置文件,來作爲顯示的 Resource 綁定。
3、<fmt:message> 標籤 :
用於信息顯示的標籤,將顯示資源配置文件中定義的信息。有四個屬性:
屬性 |
描述 |
key |
資源配置文件的“鍵”指定 |
bundle |
若使用 <fmt:setBundle> 保存了資源配置文件,該屬性就可以從保存的資源配置文件中進行查找 |
var |
將顯示信息保存爲一個變量 |
scope |
變量的作用範圍 |
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
<fmt:bundle basename="applicationAllMessage">
<fmt:message key="userName" />
<fmt:message key="passWord" bundle="${applicationBundle}"/>
</fmt:bundle>
該示例使用了兩種資源配置文件的綁定的做法,“ applicationMessage ”資源配置文件利用 <fmt:setBundle> 標籤被賦於了變量“ applicationBundle ”,而作爲 <fmt:bundle> 標籤定義的“
applicationAllMessage ”資源配置文件作用於其標籤體內的顯示。
第一個 <fmt:message> 標籤將使用“ applicationAllMessage ”資源配置文件中“鍵”爲“ userName ”的信息顯示。
第二個 <fmt:message> 標籤雖然被定義在 <fmt:bundle> 標籤體內,但是它使用了 bundle 屬性,因此將指定之前由 <fmt:setBundle> 標籤保存的“ applicationMessage ”資源配置文件,該“鍵”爲“ passWord ”的信息顯示。
4、<fmt:param> 標籤:
<fmt:param> 標籤應該位於 <fmt:message> 標籤內,將爲該消息標籤提供參數值。它只有一個屬性 value 。
<fmt:param> 標籤有兩種使用版本,一種是直接將參數值寫在 value 屬性中,另一種是將參數值寫在標籤體內。
5、<fmt:requestEncoding> 標籤:
用於爲請求設置字符編碼。它只有一個屬性 value ,在該屬性中可以定義字符編碼。 <fmt:timeZone>、<fmt:setTimeZone> 標籤 :
這
兩組標籤都用於設定一個時區。唯一不同的是 <fmt:timeZone> 標籤將使得在其標籤體內的工作可以使用該時區設置,
<fmt:setBundle> 標籤則允許將時區設置保存爲一個變量,在之後的工作可以根據該變量來進行。有3個屬性:
屬性 |
描述 |
value |
時區的設置 |
var |
<fmt:setTimeZone> 獨有的屬性,用於保存時區爲一個變量 |
scope |
變量的作用範圍 |
6 、<fmt:formatNumber>標籤 :用於格式化數字。
屬性 |
描述 |
value |
格式化的數字,該數值可以是 String 類型或 java.lang.Number 類型的實例 |
type |
格式化的類型 |
pattern |
格式化模式 |
var |
結果保存變量 |
scope |
變量的作用範圍 |
maxIntegerDigits |
指定格式化結果的最大值 |
minIntegerDigits |
指定格式化結果的最小值 |
maxFractionDigits |
指定格式化結果的最大值,帶小數 |
minFractionDigits |
指定格式化結果的最小值,帶小數 |
<fmt:formatNumber>標籤對應 java.util.NumberFormat 類, type 屬性的可能值包括 currency (貨幣)、 number (數字)和 percent (百分比)。
<fmt:formatNumber value="1000.888" type="currency" var="money"/>
該結果將被保存在“ money ”變量中,將根據 Locale 環境顯示當地的貨幣格式。
7、<fmt:parseNumber> 標籤 :
用於解析一個數字,並將結果作爲 java.lang.Number 類的實例返回。 <fmt:parseNumber> 標籤看起來和 <fmt:formatNumber> 標籤的作用正好相反。
屬性 |
描述 |
value |
將被解析的字符串 |
type |
解析格式化的類型 |
pattern |
解析格式化模式 |
var |
結果保存變量,類型爲 java.lang.Number |
scope |
變量的作用範圍 |
parseLocale |
以本地化的形式來解析字符串,該屬性的內容應爲 String 或 java.util.Locale 類型的實例 |
<fmt:parseNumber value="15%" type="percent" var="num"/> 解析之後的結果爲“ 0.15 ”。
8 、<fmt:formatDate> 標籤:用於格式化日期。
屬性 |
描述 |
value |
格式化的日期,該屬性的內容應該是 java.util.Date 類型的實例 |
type |
格式化的類型 |
pattern |
格式化模式 |
var |
結果保存變量 |
scope |
變量的作用範圍 |
timeZone |
指定格式化日期的時區 |
<fmt:formatDate> 標籤與 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標籤的關係密切。若沒有���定 timeZone屬性, 也可以通過 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標籤設定的時區來格式化最後的結果。
9、 <fmt:parseDate> 標籤
<fmt:parseDate> 標籤用於解析一個日期,並將結果作爲 java.lang.Date 類型的實例返回。 <fmt:parseDate> 標籤看起來和<fmt:formatDate> 標籤的作用正好相反。
屬性 |
描述 |
value |
將被解析的字符串 |
type |
解析格式化的類型 |
pattern |
解析格式化模式 |
var |
結果保存變量,類型爲 java.lang.Date |
scope |
變量的作用範圍 |
parseLocale |
以本地化的形式來解析字符串,該屬性的內容爲 String 或 java.util.Locale 類型的實例 |
timeZone |
指定解析格式化日期的時區 |
<fmt:parseNumber> 和 <fmt:parseDate> 兩組標籤都實現解析字符串爲一個具體對象實例的工作,因此,這兩組解析標籤對 var 屬性的字符串參數要求非常嚴格。就 JSP 頁面的表示層前段來說,處理這種解析本不屬於份內之事,因此 <fmt:parseNumber> 和 <fmt:parseDate> 兩組標籤應該儘量少用,替代工作的地方應該在服務器端表示層的後段,比如在 Servlet 中。
上面簡單的介紹了JAVA國際化配置,以及JSP的i18n標籤庫。這個章節,將展示如何在Spring 中配置國際化配置。
1、首先我們要準備資源文件,messages.properties ,作爲默認的資源文件,另外準備了3個版本的資源文件:messages_en_US.properties messages_zh_CN.properties messages_zh_TW.properties。放在class-path也就是/WEB-INF/classes裏 。
注意:中文的資源,需要將文字轉化爲下,可以使用native2ascii.exe 工具,在JDK的bin目錄下,帶有這個工具。
2、web.xml 加入代碼用來定義messages文件
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>messages</param-value>
</context-param>
3、建立個新的JSP頁面:
加入標籤庫:<%@ taglib uri="http://java.sun.com/jstl/fmt " prefix="fmt" %>
然後設置 國際化配置語言:<fmt:setLocale value="zh_CN"/> 這樣就會加載 messages_zh_CN.properties 的資源文件。
在用引用的國際化的屬性的時候 使用 <fmt:message key="title"/> 就可以了,其中的title 爲資源文件中定義的屬性
這樣就完成了一個最基本的國際化配置。