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

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

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

    Ryan's Java world!

    something about Java and opensource!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

    在JDK 6 中, 利用其提供的service provider interfaces (SPI) 可以做到很好的國際化處理, 以前你只能使用標準的時區和各種符號, 如果你所在的地區不幸不再這些標志時區中, 或者貨幣符號也不在其中, 那么你就無能為力了, 現在有了JDK 6 ,我們可以自定義這些服務的提供者了.

    為了實現該功能, 在JDK 6中的java.util.spi 包中有個LocaleServiceProvider 類( http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html ), 該類是提供該服務的基類.  在JDK 6中有幾個具體的服務實現 ,分布在java.text.spi, 和java.util.spi包中, 分布規則為, 如果類XXX在java.text包中, 則相應的XXXProvider類就在java.text.spi'包中. 對于java.util也一樣.,

    在java.text.spi 中有如下幾個類:
    BreakIteratorProvider  CollatorProvider  DateFormatProvider
    DateFormatSymbolsProvider
    DecimalFormatSymbolsProvider
    NumberFormatProvider

    在java.util.spi中有如下幾個類;

    CurrencyNameProvider LocaleNameProvider TimeZoneNameProvider

    下面來看一個自定義服務的例子:

    那自定義時區名來舉例, 實現類如下:

    package cn.hexiao.revealed;

    import java.util.*;
    import java.util.spi.*;

    public class MyTimeZoneNameProvider extends TimeZoneNameProvider {
      public String getDisplayName(String ID, boolean daylight,int style, Locale locale) {
        System.out.println("ID: " + ID);
        return ID;
      }
      public Locale[] getAvailableLocales() {
        return new Locale[] {Locale.US};
      }
    }

     

    只是在返回ID前,打印該ID. 繼承TimeZoneNameProvider 類, 你必須要實現 public Locale[] getAvailableLocales()  方法, 來指定可用的Locale.

    getDisplayName函數取決于你提供的服務.

    只是提供這么一個類,還不可以, 你還要把它打包為jar文件, 在該包的根目錄下面還要有一個META-INF目錄, 該目錄下面還要有個services目錄, 在services目錄下面有一個以java.util.spi.TimeZoneNameProvider 命名(所提供服務的全限定類名)的文件,該文件的內容為 cn.hexiao.revealed.MyTimeZoneNameProvider(服務提供者的全限定類名). 然后使用

    jar cvf Zones.jar META-INF/* cn/* 命令打包,

    把打包后的文件放到jre的 lib/ext 目錄下. (如果你使用JDK的jar允許程序,就要放到JDK目錄下的jre目錄中的lib/ext目錄下).

    下面來完成一個測試程序, 看看效果:

    import java.util.*;
    public class Zones {
      public static void main(String args[]) {
        TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
        System.out.println(tz.getDisplayName(Locale.US));
        System.out.println(tz.getDisplayName(Locale.UK));
      }
    }

    允許該程序, 可以看到如下結果,

    G:\JDK6>java Zones
    ID: America/Los_Angeles
    ID: America/Los_Angeles
    ID: America/Los_Angeles
    ID: America/Los_Angeles
    America/Los_Angeles
    Pacific Standard Time

    JSF中午論壇: http://www.hexiao.cn/jsf/index.php 

    我們提供的自定義服務生效了, ^_^, Enjoy It ! 

    posted on 2007-04-20 12:50 冰雨 閱讀(1389) 評論(0)  編輯  收藏 所屬分類: Java

    JSF中文技術文摘
    主站蜘蛛池模板: 免费一看一级毛片| 成年人在线免费观看| 日日噜噜噜噜夜夜爽亚洲精品 | 337P日本欧洲亚洲大胆艺术图| 在线a级毛片免费视频| 日韩亚洲人成在线| 日本免费的一级v一片| 美女裸体无遮挡免费视频网站| 四虎免费永久在线播放| 无码免费又爽又高潮喷水的视频 | 亚洲Av无码一区二区二三区| 国产日本一线在线观看免费| 精品亚洲成A人无码成A在线观看| 91情侣在线精品国产免费| 亚洲日本在线电影| 免费看大美女大黄大色| 免费在线观看亚洲| 激情综合色五月丁香六月亚洲| 国产无遮挡无码视频免费软件| 亚洲精品白色在线发布| 日韩中文无码有码免费视频 | 国产人成网在线播放VA免费| 亚洲精品你懂的在线观看| 99久久国产免费-99久久国产免费| 亚洲国产最大av| 亚洲无码高清在线观看| 日韩人妻无码精品久久免费一| 在线aⅴ亚洲中文字幕| 亚洲女同成人AⅤ人片在线观看| A片在线免费观看| 亚洲国产一区二区三区在线观看| 久久久久亚洲AV无码专区桃色| 人妻无码久久一区二区三区免费| 学生妹亚洲一区二区| 伊伊人成亚洲综合人网7777| 黄页网站在线看免费| a级毛片免费网站| 亚洲sss综合天堂久久久| 亚洲日韩中文在线精品第一 | 久久久WWW成人免费精品| 亚洲最大黄色网站|