溫故知新:struts2_07其他功能:國際化

          說起國際化,第一次接觸的時候感到這個功能很神奇,起初很天真的以為是什么國際通訊之類的功能,其實不是的。。。這個功能用中文叫國際化,英文里就有一個很高大上的稱呼,叫i18n,其實i18n就是internationalization的偷懶寫法,聽起來很有逼格。除了i18n,L10n(localization),g11n(globalization),還有m17n(multilingualization),這些解決方案都是為了能讓站點的頁面能夠適應(yīng)多國語言,當(dāng)然,如果有必要的話。

          其實多語言問題,Java本身就提供了解決方案,util工具包中ResourceBundle就可以解決該問題,ResourceBundle的說明如下寫道
          ......
          This allows you to write programs that can:
          • be easily localized, or translated, into different languages 
          • handle multiple locales at once 
          • be easily modified later to support even more locales
          ......
          顯然,為了能使用國家化,我們需要為每一個需要使用的語言單獨配置他們的語言內(nèi)容。分別新建中文和英文的語言配置文件置于src下
          Message_zh.properties
          1 username=\u7528\u6237\u540D(用戶名)
          2 password=\u5BC6\u7801(密碼)
          Message_en.properties
          1 username=username
          2 password=password
          由于properties只支持iso-8859格式的編碼,所以在輸入中文的時候會有些問題,只是Eclipse自帶的properties編輯器可以進行可視化的文本輸入,不需要關(guān)注編碼。另外我們可以通過Java自帶的轉(zhuǎn)碼工具native2ascii進行轉(zhuǎn)碼。
          測試類如下,getBundle方法接收兩個參數(shù),第一個是BaseName,可以理解為資源的基礎(chǔ)名,第二個是語言碼,中文是zh,英文是en等等,測試類運行完畢之后會給出英文資源文件中username所對應(yīng)的值,同理Locale設(shè)置為中文則輸出中文的值。所以資源文件我們以Message_en.properties這種格式來命名,其中en之后還可以添加下劃線跟第三個值區(qū)域碼,但是一般可以省略。
           1 package demo.i18n;
           2 
           3 import java.util.Locale;
           4 import java.util.ResourceBundle;
           5 
           6 public class I18nTest {
           7 
           8     public static void main(String[] args) {
           9         ResourceBundle rb = ResourceBundle.getBundle("Message", Locale.ENGLISH);
          10         System.out.println(rb.getString("username"));
          11     }
          12     
          13 }
          14 

          基于上面的內(nèi)容,struts2使用它們配置全局國際化資源,在struts.xml中添加國家化的配置,其中value就是資源的基礎(chǔ)名
          1 <constant name="struts.custom.i18n.resources" value="Message" />
          之后,在頁面上使用struts2的標(biāo)簽進行對應(yīng)語言內(nèi)容的顯示,當(dāng)然,顯示哪種語言需要顯式的將語言碼作為參數(shù)傳入,請求地址需要寫作/XXX.action?request_locale=en
          1 全局國際化<br/>
          2 <s:text name="username"/><br/>
          除了全局國際化的配置,struts2還提供了包范圍和action范圍的國際化,其中包范圍的國際化,需要將資源文件命名為“package_語言碼.properties”的形式,然后置于需要的包下,struts2會優(yōu)先取得較小范圍的國際化資源文件,同時定義全局國際化資源和包國際化資源,那么包范圍的資源會優(yōu)先生效。至于action范圍的國際化,因為國際化在日常的開發(fā)中本來用的就不是很多,就算真的碰到需要雙語開發(fā)的情況,或許也是做兩套頁面,或者直接做兩套網(wǎng)站,除非是那種跨國性質(zhì)的“因特噗啦一吇”,否則不要說struts2的全局國際化的使用,針對包范圍和action范圍的國際化,都是少有問津。







          posted on 2014-11-02 15:13 都較瘦 閱讀(135) 評論(0)  編輯  收藏 所屬分類: MVCFramework

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學(xué)習(xí)心得和隨手的練習(xí)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 犍为县| 饶阳县| 留坝县| 苏尼特左旗| 杨浦区| 铁岭县| 资源县| 嘉黎县| 天长市| 佛山市| 昌吉市| 鄂州市| 南乐县| 获嘉县| 淅川县| 安庆市| 缙云县| 通化市| 屯门区| 乌鲁木齐县| 永年县| 石家庄市| 双江| 井研县| 临沭县| 山西省| 香港 | 来安县| 广水市| 大同县| 山阳县| 淮北市| 乐亭县| 来安县| 安西县| 新巴尔虎右旗| 天津市| 青冈县| 章丘市| 揭西县| 洛扎县|