隨筆 - 170  文章 - 536  trackbacks - 0
          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          我參與的團(tuán)隊(duì)

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 415127
          • 排名 - 135

          最新評(píng)論

          閱讀排行榜

                 對(duì)于各種不同的Java應(yīng)用,國(guó)際化的問(wèn)題總會(huì)給我們非英文用戶帶來(lái)一些麻煩,在JSF中也一樣,在實(shí)踐中碰到了一系列不容易解決的問(wèn)題,最終解決的大部分的問(wèn)題,也完成了一個(gè)可以運(yùn)行的小項(xiàng)目,我把我的一些經(jīng)驗(yàn)?zāi)贸鰜?lái)和大家分享一下,希望能讓大家在這些地方少走一些彎路。

                   Java中的國(guó)際化是由 java.util.Locale 類支持的,中文對(duì)應(yīng)的代碼是“zh”,所以我們要在JSF中使用中文的話,需要在我們的 faces-config.xml 中做一些簡(jiǎn)單的配置了,加入對(duì)中文的支持,當(dāng)然如果需要支持更多的語(yǔ)言的話,多加幾個(gè)<supported-locale>就可以了。

           

          <faces-config>
              
          <application>
                  
          <message-bundle>resource</message-bundle>
                  
          <locale-config>
                      
          <default-locale>zh</default-locale>
                      
          <supported-locale>en</supported-locale>
                  
          </locale-config>
              
          </application>
          </faces-config>


           

          這里定義了一個(gè)<message-bundle>resource</message-bundle>指的是資源文件所在的位置和文件名,這里我們把資源文件放在source根目錄下名稱為resource.properties,這個(gè)是英文的資源文件,另外一個(gè)存放中文信息的資源文件名為resource_zh.properties

          接下來(lái),我們可以在這些資源文件中加入我們需要的資源信息。推薦大家一個(gè)Eclipse的插件來(lái)寫我們的資源文件,這個(gè)插件叫做Eclipse ResourceBundle Editor Plugin,我們可以很方便的在里面寫中文信息,它會(huì)自動(dòng)的轉(zhuǎn)換為UTF-8編碼的信息,大家可以到這個(gè)地方去下載這個(gè)插件http://resourcebundleeditor.com/ess/rbe/home.do。使用起來(lái)很簡(jiǎn)單,這里就不再多說(shuō)了。

          JSP文件中使用這些資源之前,需要加入一下這些東西:

          <%@ page contentType="text/html;charset=utf-8"%>

          HTMLhead中加入:

          <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

          下面,我們就可以在我們的頁(yè)面中綁定并使用這些資源信息:

          使用之前要加載一下資源文件,使用這個(gè)Tag

          <f:loadBundle basename="resource" var="messages"/>

          我在這里給消息起了個(gè)別名messages,以后就可以通過(guò)這個(gè)別名來(lái)使用資源文件。

          比如我使用 <h:outputText> 來(lái)引用資源信息schedule.label.starttime可以這么用。

          <h:outputText value="#{messages['schedule.label.starttime']}"/>

          是不是可以用了呢?不過(guò)別急,用是能用,如果你在 JSF 中使用了 Tiles 的話,就會(huì)出現(xiàn)一些問(wèn)題了,我們?nèi)绻褂昧?/SPAN> <h:inputText> 這樣的輸入框的話,當(dāng)你輸入中文并提交,你就會(huì)發(fā)現(xiàn),你輸入的文字變成這樣的了“\u5DF2\u5B8C\u6210”,曾經(jīng)為了這個(gè)問(wèn)題,找解決方案花了我三周的時(shí)間。首先把問(wèn)題定位到 Tiles 上,因?yàn)槿绻皇褂?/SPAN> Tiles 的話,是沒有這個(gè)問(wèn)題的,但是 Tiles 又不能不用的,最后發(fā)現(xiàn)其實(shí)很容易的,只要在 <f:view> 中加上 locale=”zh” 就可以了,如果需要的話,可以把這個(gè)屬性動(dòng)態(tài)化,滿足國(guó)際化的需要,就像這樣<f:view locale="#{userProfile.locale}">

          這樣的話,一切都正常了,使用 Tiles 也沒有問(wèn)題的。

          今天有朋友問(wèn)了我關(guān)于 JavaScript 中的中文亂碼問(wèn)題,我在我的JSP中找了一段代碼拿出來(lái)看看:

          <h:commandLink id="delete" action=".." onclick="if (!confirm('#{messages['system.msg.confirmdel']}')) return false;">

          這樣的話,里面的中文是可以正常顯示的,下面我給大家一些建議吧,希望對(duì)大家有一些幫助。

          1.        所有文字信息全部寫在資源文件中,通過(guò)引用其別名來(lái)使用這些信息;

          2.        所有的中文要轉(zhuǎn)換成 UTF-8 編碼,可以使用Eclipse ResourceBundle Editor Plugin來(lái)解決;

          3.        頁(yè)面編碼方式定義成 UTF-8 ,不要使用其默認(rèn)值。

          當(dāng)然,這只是我在使用中積累的一點(diǎn)小小的經(jīng)驗(yàn)了,希望能對(duì)大家有一點(diǎn)幫助,如果大家發(fā)現(xiàn)有什么不正確就請(qǐng)賜教,如果更好的解決方案,也拿出來(lái)和大家分享吧,因?yàn)槲覀兊姆窒砜赡軙?huì)給大家節(jié)省更多的時(shí)間。

          posted on 2006-01-20 20:39 steady 閱讀(2212) 評(píng)論(1)  編輯  收藏 所屬分類: JSF & Myfaces

          FeedBack:
          # re: JSF的中文化與國(guó)際化 2006-01-21 02:34 一滴水
          謝謝,我們項(xiàng)目中也是用jsf,借鑒了:)  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 湖南省| 南澳县| 鹤峰县| 闽侯县| 五莲县| 高雄市| 花垣县| 锡林郭勒盟| 靖西县| 大厂| 勃利县| 九江市| 台东市| 凤城市| 大庆市| 海盐县| 双牌县| 施甸县| 滦南县| 沙河市| 哈密市| 江北区| 扶沟县| 江源县| 漾濞| 江口县| 玉山县| 彰武县| 林芝县| 且末县| 怀宁县| 扬中市| 兴义市| 朝阳市| 洛宁县| 马龙县| 墨江| 秦皇岛市| 城口县| 蓬溪县| 甘德县|