<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    成長中的記憶
    這是我的成長,這是我的天地,學(xué)習(xí)JAVA,只因快樂。
    posts - 4,comments - 16,trackbacks - 0

        在用Java解決國際化問題的過程中,可能利用到的主要的類都是由java.util包提供的。該類包中相關(guān)的類有Locale、ResourceBundle、ListResourceBundle、PropertyResourceBundle等。
        Locale:該類包含對(duì)主要地理區(qū)域的地域化特征的封裝。其特定對(duì)象表示某一特定的地理、政治或文化區(qū)域。通過設(shè)定Locale,我們可以為特定的國家或地區(qū)提供符合當(dāng)?shù)匚幕?xí)慣的字體、符號(hào)、圖標(biāo)和表達(dá)格式。例如,我們可以通過獲得特定Locale下的Calendar類的實(shí)例,顯示符合特定表達(dá)格式的日期。
        ResourceBundle:該類是一個(gè)抽象類,需要通過靜態(tài)方法ResourceBundle.getBundle()指定具體實(shí)現(xiàn)類或?qū)傩晕募幕久Q。基本名稱會(huì)協(xié)同指定的或默認(rèn)的Locale類,決定具體調(diào)用的類或?qū)傩晕募奈ㄒ幻Q。例如:指定基本類或?qū)傩晕募Q為TestBundle,而指定的Locale是CHINESE,那么最適合匹配的類名稱為TestBundle_zh_CN.class,而最佳匹配屬性文件名稱為TestBundle_zh_CN.properties。按照J(rèn)ava Doc和相關(guān)文檔的要求,如果該類或?qū)傩晕募]有找到,系統(tǒng)會(huì)查找近似匹配(主文件名依次為TestBundle_zh和TestBundle的類或?qū)傩晕募T擃愄峁┑膅etKeys()方法用于獲得所有成員的鍵名,并提供handleGetObject方法獲得指定鍵的對(duì)應(yīng)元素。
        ListResourceBundle:該類繼承ResourceBundle類,主要是增加了一些便于操作的成分,但還是抽象類。如果希望使用類的方式實(shí)現(xiàn)具體的ResourceBundle,一般情況下最好繼承這個(gè)類。
        PropertyResourceBundle:該類也繼承ResourceBundle類,可以實(shí)例化。該類的行為特征如同java.util.properties類,可以從輸入流中獲得具體屬性對(duì)。
        使用PropertyResourceBundle類獲得當(dāng)?shù)匕姹镜膰H化信息,部分代碼如下……
        public static final String BASE_PROP_FILE = “DISP”;
      public static final String SUFFIX = “.properties”;
      locale = Locale.getDefault();
      String propFile = BASE_PROP_FILE + “_” + locale.toString()+ SUFFIX;
      ResourceBundle rb;
      try {
       File file = new File(propFile);
       if (file.exists()) {
         is = new FileInputStream(file);
          rb = new PropertyResourceBundle(is);
          if (rb == null) System.out.println(“No Resource”);
       }
      } catch (IOException ioe) {
       System.out.println(“Error open file named ” + propFile);
      }
      Enumeration e = rb.getKeys();
      while (e.hasMoreElements()){
       key = (String)e.nextElement();
       value = (String)rb.handleGetObject(key);
       System.out.println(“KEY: ” + key +“ Value: ” + value);
      }
      ……
      DISP_zh_TW.properties文件的具體內(nèi)容如下:
      Key1=可以
      Key2=撤銷
        等號(hào)后面是利用native2ascii程序轉(zhuǎn)化后的繁體漢字,如果不進(jìn)行轉(zhuǎn)化,系統(tǒng)可能顯示亂碼。
        
        處理提示和幫助
        對(duì)于提示語言和幫助文件部分,可以把語言映射放在屬性文件或者ListResourceBundle類的子類中。下面程序是一個(gè)Servlet,它通過接受客戶端的選擇,把特定語言和字符版本的信息返回到客戶端。  public class ProcessServlet extends HttpServlet
      { //默認(rèn)語言為中文
       public static final String DEFAULT_LANGUAGE = “zh”;
       //默認(rèn)字符集為簡體中文
       public static final String DEFAULT_COUNTRY = “CN”;
       public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
       HttpSession session = req.getSession(true);
       // 從客戶端收到的指定語言和字符的參數(shù)應(yīng)當(dāng)與Sun公司相關(guān)規(guī)定一致
       String lang = req.getParameter(“l(fā)anguage”);
       String country = req.getParameter(“country”);
       if (lang == null) {
           //如果沒有收到參數(shù),就試圖從Session里獲得
         lang = (String) session.getAttribute(“l(fā)anguage”);
         country = (String) session.getAttribute(“country”);
       } else {
         session.setAttribute(“l(fā)anguage”, lang);
         session.setAttribute(“country”, country);
       }
       if (lang == null){
           //如果無法從上述手段得到語言和字符信息,就使用默認(rèn)值
         lang = DEFAULT_LANGUAGE;
         country = DEFAULT_COUNTRY
         session.setAttribute(“l(fā)anguage”, lang);
        session.setAttribute(“country”, country);
       }
       Locale locale = null;
       ResourceBundle bundle = null;
       try {
         locale = new Locale(lang, country);
        } catch (Exception e) {
          System.out.println(“No locale with” + country + “_” + lang);
         locale = Locale.getDefault();
        }
        try {
           bundle = ResourceBundle.getBundle(“DisplayList”, locale);
       } catch( MissingResourceException e) {
         System.out.println( “No resources available for locale ” + locale);
         bundle = ResourceBundle.getBundle(“DisplayList”, Locale.US);
       }
       res.setContentType(“text/html”);
       PrintWriter out = res.getWriter();
       out.println(“&lt;html&gt;”);
       out.println(“&lt;head&gt;”);
       String title = bundle.getString(“title”);
        String welcome =bundle.getString(“welcome”);
       String notice = bundle.getString(“notice”);
       out.println(“&lt;title&gt;”+ title +“&lt;/title&gt;”);
       out.println(“&lt;/head&gt;”);
       out.println(“&lt;body bgcolor=”white“&gt;”);
       out.println(“&lt;h3&gt;” + welcome + “&lt;/h3&gt;”);
       out.println(“&lt;br&gt;”);
       out.println(“&lt;b&gt;” + notice +“&lt;/b&gt;”);
       out.println(“&lt;/body&gt;”);
       out.println(“&lt;/html&gt;”);
      }
      }
    上述Servlet使用的屬性文件(DisplayList_zh_CN.properties)內(nèi)容如下:
    title=中文版
    welcome=這是簡體中文版面
    notice=簡體中文測(cè)試成功
    注意:該文件直接采用了中文,而不是經(jīng)過轉(zhuǎn)化的Unicode編碼,這是由于大多數(shù)Web服務(wù)器不需要上述轉(zhuǎn)化。
        在實(shí)際使用中,如果Web服務(wù)器支持Servlet 2.3規(guī)范(如jakarta-tomcate 4.0),那么上面提到的Servlet應(yīng)當(dāng)稍加改變,以作為其他Servlet的處理器使用。另外,如果把ResourceBundle的特定版本存放在無狀態(tài)會(huì)話Bean中,就可以在一定程度上提高程序效率。
        對(duì)于顯示字符出現(xiàn)亂碼的問題,如果是通過屬性文件實(shí)現(xiàn)國際化解決方案,那么可能是直接在屬性文件中寫入了非標(biāo)準(zhǔn)ASCII文字。解決方法是利用JDK提供的工具native2ascii.exe掃描所有屬性文件,用掃描結(jié)果覆蓋原有文件內(nèi)容。如果我們是利用類文件實(shí)現(xiàn)轉(zhuǎn)換方案,那么需要重新編譯相關(guān)類文件,并在編譯時(shí)指定編碼集。例如,編譯使用國標(biāo)碼的類文件,采用的編譯命令如下:
    javac -encoding GB2312 your_java_file

    posted on 2006-02-17 16:12 aiyoyoyo 閱讀(3547) 評(píng)論(0)  編輯  收藏 所屬分類: JSP

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文在线免费视频| 国产三级免费电影| 日韩毛片免费无码无毒视频观看| 毛片a级毛片免费观看品善网| 亚洲Av无码乱码在线播放| 亚洲四虎永久在线播放| 国产亚洲情侣久久精品| 在线免费观看国产| 亚洲最大av无码网址| 亚洲日韩国产精品乱-久| 中国国产高清免费av片| 亚洲五月综合缴情在线观看| 亚洲av无码偷拍在线观看| 91精品成人免费国产片| 亚洲精品无码久久久影院相关影片| 亚洲最大的成人网站| 91福利免费体验区观看区| 亚洲日本在线免费观看| 国产永久免费高清在线| 久久久久国产成人精品亚洲午夜 | 亚欧免费无码aⅴ在线观看| www.亚洲色图| 337p日本欧洲亚洲大胆人人| 无码日韩人妻av一区免费| 亚洲黄色免费在线观看| 野花香在线视频免费观看大全| 亚洲精品麻豆av| 深夜福利在线视频免费| 国产精品高清全国免费观看| 日本亚洲精品色婷婷在线影院| 2019中文字幕免费电影在线播放| 水蜜桃亚洲一二三四在线| 国产麻豆成人传媒免费观看| 亚洲精品国产啊女成拍色拍| 67194国产精品免费观看| 亚洲无码一区二区三区| 亚洲精品综合久久| 18禁止看的免费污网站| 瑟瑟网站免费网站入口| 免费a级毛片无码av| 无码免费又爽又高潮喷水的视频|