1. 程式人生 > >JavaWeb框架_Struts2_(八)----->Struts2的國際化

JavaWeb框架_Struts2_(八)----->Struts2的國際化

ora under per 其中 分享 世界 prop 用戶 real

  

  這一篇博文拖了蠻久了,現在先把它完成,結束struts2這個版塊,當然這只是最基礎的部分,做項目還需要更深的理解。下一個web後端的版塊準備做Spring框架的學習~嗯,加油!

目錄:

  1. 程序國際化概述
    • 國際化思想
  2. 國際化步驟
    • Struts2中加載全局資源文件
    • 國際化信息輸出
    • properties文件配置

1. 具體內容

1.1 程序國際化概述

  程序國際化已成為Web應用的基本要求。也就是為了方便來自世界各地的瀏覽者。Struts2國際化主要有JSP頁面國際化、校驗信息國際化以及Action信息國際化等。

1.1.1 java國際化的思想

  Java國際化的思想是將程序中的信息放在資源文件中,程序根據支持的國家以及語言環境,讀取相應的資源文件。資源文件是key-value對,每個資源文件中的key是不變的,但是value則隨不同的國家/語言變化。

  Java程序國際化主要通過兩個類來完成:

  • java.util.Locale:用於提供本地信息,通常稱它為語言環境。不同的語言,不同的國家和地區采用不同的Locale對象來表示;
  • java.util.ResourceBundle:該類稱為資源包,包含特定的語言環境的資源對象

  為了實現java程序國際化,必須事先提供程序所需要的資源文件。其中key是程序使用的部分,而value是程序界面的顯示

  資源文件的命名可以有以下3種方式:

  1. baseName.properties;
  2. baseName_language.properties;
  3. baseName_language_country.properties(一般用這種);

  baseName是資源文件的基本名稱,有用戶自由定義。但是language和country就必須為java語言所支持的語言和國家/地區代碼。例如:中國大陸為:baseName_zh_CN.properties,美國為baseName_en_US.properties。

1.2 國際化步驟

1.2.1 Struts2中加載全局資源文件

  

  加載全局的資源文件的方式是通過在struts.xml文件中配置常量struts.custom.il8n.resources實現,該常量值為全局資源文件的baseName。

  一旦指定了全局資源文件,既可實現程序國際化。假設baseName為messageResource,則在struts.xml文件中配置如下一個常量:

  <constant name="struts.custom.i18n.resources" value="messageResouce"/>

  通過這種方式加載全局資源文件後,struts2應用就可以在所有地方取得這些資源文件了,包括JSP頁面、Action和校驗文件

1.2.2 國際化信息輸出

(1) 輸出方式

  國際化信息輸出主要有以下幾種方式:

  • 在JSP頁面中輸出

  在JSP頁面中為了輸出國際化信息,可以使用Struts2的<s:text.../>標簽,該標簽可以指定一個name屬性,用以指定國際化資源文件中的key。

  • 在表單標簽中輸出

  通過key屬性指定資源文件中的key,如:

<s:textfield name="realname" key="username"/>
    
<!--或者如下方法-->
<s:textfield name="realname" label="%{getText(‘username‘)}"/>
  • 在Action類中輸出

  Action類可以繼承ActionSupport,使用getText()方法取得國際化信息,該方法的第一個參數用於指定資源文件中的key。

  • 在校驗文件中輸出

  在校驗文件中,可以通過message的key屬性指定資源文件中的key,如:

<message key="login.error.username"/>

1.2.3 properties文件配置

  

  properties文件的配置,直接在src文件夾下面新建配置即可,註意是key-value形式存在的,

技術分享圖片

  歸根到底,sturts2框架的最大特點還是在攔截器這一塊,把攔截器配置和原理弄明白是很重要的。

JavaWeb框架_Struts2_(八)----->Struts2的國際化