小菜毛毛技術(shù)分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

          1.UTF-8

          原來用慣了GBK,被大家一再慫恿,才下定決心整個項目換用UTF-8編碼。

          編碼問題幾乎與所有國內(nèi)Java項目相伴而生,不同內(nèi)核的Linux、英文版日文版的WindowsXP總是讓GBK很頭痛,而改用UTF-8后,忽然就輕爽了,UTF-8,全世界語系連馬爾代夫語都有自己的座位,實在找不到理由為什么還要用只支持大中華的GBK。

          而且Springside也成了一個帶有大量UTF-8中文注釋的項目。

          原GBK項目的轉(zhuǎn)換方法

            把自己當(dāng)成車衣廠女工,機械的使用UltraEdit和EditPlus的轉(zhuǎn)換功能,忙活一兩個小時,怎么都可以轉(zhuǎn)完所有文件了。

            其中UltraEdit的轉(zhuǎn)換方法是文件--〉轉(zhuǎn)換--〉A(chǔ)SCII to UTF-8(Unicode編輯)。最好在Advanced-〉本地代碼頁那里也設(shè)一下UTF-8。

            然后就可以用設(shè)了UTF-8選項的IDE如IDEA,Eclipse直接編輯了。

          2.國際化 I18N

                后臺的menu.jsp 和 editBook.jsp 還有業(yè)務(wù)異常類,演示了i18N的應(yīng)用。

          2.1 i18N基礎(chǔ)      

            1.編寫messages.zh_CN.properties

               用中文寫完后,用java帶的native2ascii.exe或者ant的native任務(wù)把它轉(zhuǎn)成非人類的Unicode編碼。

            2.在純Java API里,國際化是這樣做的:

          ResourceBundle rb = ResourceBundle.getBundle("messages");
          String welcome = rb.getString("welcome");
          String welcomeCalvin = MessageFormat.format(welcome,new String[]{"calvin"});

            第一二句從classpath里找到messages_zh_CN.properties,讀出"歡迎你,{0}"字樣。

            第三局把上文格式化成"歡迎你,calvin" 

           3.在Servlet環(huán)境下,國際化是這樣做的   

          51.la 專業(yè)、免費、強健的訪問統(tǒng)計 則靠<fmt:message>tag

           

          <%@ taglib uri="
          <fmt:message key="welcome"/>

                可以用context-param來定義默認的properties文件

              <context-param>
                      <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
                      <param-value>messages</param-value>
              </context-param>

               不過這樣定義的缺點是只能定義一個文件,如果所有信息都集中在一個文件會好長,而如果有多個properties,就惟有在頁面用<fmt:bundle>綁定了。

          2.2 Spring的messageSource增強

          Spring增加了MessageSource的概念

            一是ApplicationContext將充當(dāng)一個單例的角色,不再需要每次使用i18時都初始化一次ResourceBundle

            二是可以代表多個Resource Bundle.

            在ApplicationContext的定義文件中,增加如下節(jié)點: 

          <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
          
              <property name="basename" value= "messages"/>
          </bean>

          在pure Java中

          context.getMessage("welcome", null, LocaleContextHolder.getLocale())

          而經(jīng)Spring MVC JSTL ViewResolver調(diào)用的JSP,<fmt:message>將繼續(xù)發(fā)揮它的功效。

          不過這里挺麻煩的,第一如果不是從MVC JSTL轉(zhuǎn)的,messageSource的定義就會失效。而如果定義了<context-param>,則messageSource的定義又會失效.......

           還有,<spring:message> 雞肋一塊,因為它如果找不到key對應(yīng)的就會拋異常,好恐怖。

          還還有,spring還有有趣的theme機制,和i18n一樣的原理,解決了"做成圖片的文字"的國際化,讓不同語言的美術(shù)字圖片的路徑分別定義在theme_zh_CN.properties和theme_en_US.properties里面。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          相關(guān)文章:
           
          主站蜘蛛池模板: 镇安县| 连州市| 连山| 丹东市| 长乐市| 泽普县| 团风县| 海口市| 朝阳县| 长泰县| 安康市| 辽宁省| 汝南县| 临潭县| 阿坝| 邢台市| 镶黄旗| 满城县| 湟中县| 南溪县| 柞水县| 华容县| 青阳县| 锡林浩特市| 蕉岭县| 衡东县| 卢湾区| 六盘水市| 江北区| 阳曲县| 宕昌县| 邵武市| 额敏县| 上高县| 阜康市| 关岭| 延庆县| 廊坊市| 夏津县| 浦县| 彰化县|