淺談struts2的國際化----i18n

可能大家在使用struts框架的時候,偶爾會看到這個詞: i18n。也就是 Internationalization    i 開頭,n 結尾, 總共18個字母,今天的主要內容就是圍繞這 四個字母。

struts2國際化是建立在 java 國際化的基礎上的,通過提供不同國家、語言環境的消息資源,然後通過 ResourceBundle 加載指定Locale 對應的資源文件,取得文件中指定的 key 對應的信息。

Locale 對象表示了特定的地理、政治和文化地區。需要 Locale 來執行其任務的操作稱爲語言環境敏感的 操作,它使用 Locale 爲用戶量身定製信息。例如,顯示一個數值就是語言環境敏感的操作,應該根據用戶的國家、地區或文化的風俗/傳統來格式化該數值。

ResourceBundle : public abstract class ResourceBundle extends Object  
 資源包包含特定於語言環境的對象。當程序需要一個特定於語言環境的資源時(如 String),程序可以從適合當前用戶語言環境的資源包中加載它。使用這種方式,可以編寫很大程度上獨立於用戶語言環境的程序代碼,它將資源包中大部分(即便不是全部)特定於語言環境的信息隔離開來。

可能大家對於 ResourceBundle 不太熟悉,但是它的子類,我們可是用的不能再熟悉的。

public class PropertyResourceBundle extends ResourceBundle
讀取 xxx.properties 的內容    類加載器 以流的形式讀取資源文件
    PropertyResourceBundle.class.getClassLoader().getResourceAsStream(   "db.properties")

連接數據庫、log4j的配置,我們都用到了  xxx.properties 的配置文件  ,注意,這些配置文件要放在 類路徑之下。


struts2的國際化分爲三類:類級別的、包級別的和全局的。 優先級從左至右依次降低。

1、全局的配置方式爲: a、在struts.xml中的<constant name="struts.custom.i18n.resources"value="message"></constant>指定baseName 國際化文件名爲:baseName_語言名_國家名.properties(如:message_zh_CN.properties)
           b、全局的國際化資源文件放在src下面

2、包級別的: a、包級別的國際化資源文件放在該包下面

                           b、命名規則爲:package_語言名_國名.properties(如:package_zh_CN.properties)    其中package不變,不是指的是包名,每個包的國際化文件命名都這樣

3、類級別的:  a、與該類放在同一目錄中

                             b、命名規則爲:類名_語言名_國家名.properties(如:RegisterAction_zh_CN.properties) 


訪問國際化消息的三種方式:

                              1、JSP頁面輸出國際化消息:使用struts 的標籤<s:text.../> name 屬性指定了國際化資源文件的 key
                               2、Action 類中訪問國際化消息,該 Action 繼承 ActionSupport 實現 getText( ) ,接收一個 String 類型的參數,參數指定了國際化資源文件的 key

                               3、表單元素 Label 中輸出國際化消息,爲表單標籤指定一個 key屬性,指定了國際化資源文件的 key


知道大家覺得理論很枯燥,下面來結合實例講解: 配置步驟(以全局配置JSP輸出國際化消息爲例)

1、在 src 目錄下添加資源文件,命名方式:baseName_language_country.properties,資源文件的編寫: 以鍵值對的形式,注意名稱一定要匹配


2、在struts.xml文件中進行國際化配置,配置常量:<constant name="struts.custom.i18n.resources" value="baseName" /> 注意不要寫錯,要是你來質問我爲什麼沒有效果,。。。。
Struts 2提供了一個名i18n的攔截器(Interceptor),並且將其住註冊在默認的攔截器棧中(defaultStack)
<interceptor-ref name="i18n"/>
所以我們不需要再次配置一次國際化的攔截器

3、jsp頁面表單元素記得添加一個 key 的屬性 ,key的值就是資源文件中配置好的 name


4、大家可以看到頁面上有兩個超鏈接,傳遞的參數爲 request_locale ,參數值與我們寫好的資源文件命名的 language_country 相匹配。在這裏起到的作用就是切換語言環境。struts2 的 I18nInterceptor攔截器會攔截所有的Action,它主要做的事情爲從客戶端發送過來的請求參數中尋找是否存在名爲 request_locale 的參數。若有,則將request_locale 的 value 轉化爲 locale 保存起來,該locale是保存在以WW_TRANS_I18N_LOCALE所命名的session裏面的。如果我們不做任何配置的話,客戶端是不會發送request_locale參數的。它默認會用request的getLocale()方法得到默認locale,將其存放在session中。下面我們來看一看效果

這個就是今天的內容了。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章