`
icess
  • 浏览: 252707 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDK 6 探秘之二: 自定义国际化(I18N)服务

阅读更多

在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 ! 

分享到:
评论

相关推荐

    Oracle ADF框架下实现应用国际化(i18n)示例

    Oracle ADF支持JDK的Java国际化(i18n)标准,包括资源包(Resource Bundle)和本地化(Localization)概念。资源包是一组键值对,用于存储特定语言环境下的字符串和其他资源。通过改变资源包,应用程序可以轻松地...

    jdk-6u21-windows-i586

    第二步:右击“我的电脑”属性,选择“高级”选项卡,单击“环境变量”, 第三步:假设JDK的安装路径:E:\jdk,tomcat的安装路径:E:\tomcat 在用户变量中添加下面的变量和属性值 Classpath E:\jdk\lib\tools.jar; ...

    苹果系统JDK安装包下载(版本:jdk-8u321-macosx-x64)

    6. **配置环境变量**:为了让系统全局识别新安装的JDK,需要在bash配置文件(~/.bash_profile或~/.zshrc)中设置JAVA_HOME路径。例如: ``` export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk...

    jdk1.6 tools.jar

    例如,在JDK9及以后的版本中,为了模块化设计,一些工具被移到了单独的模块中,不再包含在tools.jar内。因此,如果你正在使用更高版本的JDK,遇到类似问题时,解决方案可能会有所不同。 总的来说,了解并掌握tools....

    jdk.tools-1.7.jar

    这一步通常在自定义JDK安装或升级时执行,以确保所有必要的组件都就绪。 **标签解析:** 1. **jdk**:Java Development Kit,是Oracle公司提供的用于开发和运行Java应用程序的软件开发工具包。它包含了Java运行...

    jdk:tools:1.8

    java8的tools包,在maven出现无法加载时可以将该包加入maven本地仓库即可解决问题

    jdk6免安装下载 免费下载

    总的来说,JDK6是一个重要的Java开发工具包,其提供的新特性和服务极大地提升了Java程序员的生产力。无论是在桌面应用、服务器端开发还是移动应用领域,JDK6都扮演了至关重要的角色。而免费下载的JDK6则为开发者提供...

    argouml-i18n-zh.jar.zip

    ArgoUML是一款开源的、基于UML(统一建模语言)的模型设计工具,它支持多种语言,而"i18n"代表“国际化”(Internationalization),"zh"则代表“中文”。这个jar包的zip格式是为了方便用户下载和管理。 在描述中...

    java的jdk6安装包

    Java JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的软件工具包,而JDK6是Java的一个重要版本,发布于2006年。本篇将详细介绍Java JDK6的安装过程及其相关知识点。 一、Java JDK6概述...

    jdk6u45JDK6u45

    5. **Web服务支持**:JDK6u45增强了对Java API for RESTful Web Services (JAX-RS)的支持,使得开发RESTful服务变得更加便捷。 6. **动态语言支持**:通过JSR 292(也称为 invokedynamic),JDK6u45引入了对动态...

    java jdk6 32位

    在本场景中,我们讨论的是JDK的6版本,专为32位Windows操作系统设计,文件名为`jdk-6u43-windows-i586.exe`。这个版本发布于2012年,是Java SE(标准版)6的第43次更新,它包含了Java编译器、调试器、JVM(Java...

    jdk6-linux

    【压缩包子文件的文件名称列表】"jdk-6u29-linux-i586.bin"是JDK6更新29的安装程序二进制文件。"bin"扩展名表示这是一个可执行文件,通常在命令行下运行。"i586"表明这个版本是为32位(x86)架构的Linux系统设计的。...

    ubuntu的JDK1.6.0_37

    1. **下载**:从Oracle官网或者第三方镜像站点获取`jdk-6u37-linux-i586.bin`文件,这是JDK的二进制安装包。 2. **赋予执行权限**:使用命令`chmod +x jdk-6u37-linux-i586.bin`,使文件具有执行权限。 3. **执行...

    jdk6 windows 64位

    【标题】"JDK6 Windows 64位" 指的是Java Development Kit的第六个主要版本,专为Windows操作系统64位架构设计。JDK是开发和运行Java应用程序所必需的核心工具集,包含了编译器、调试器、类库等组件。 【描述】"JDK...

    JDK6 免安装版

    5. **Swing组件更新**:JDK6对Swing GUI库进行了升级,包括新的LookAndFeel和更好的国际化支持。 6. **NIO.2**:引入了新的文件系统API,提供了异步I/O操作,使得文件操作更为高效。 7. **改进的JDBC**:支持更多...

    jdk6 64位安装包资源.

    JDK6,全称为 JDK 1.6,是 JDK 的一个重要版本,发布于2006年,提供了许多新的特性和改进,对于当时的开发者来说具有重要意义。** ### JDK6 的核心组件 1. **Java 运行时环境 (JRE)**:这是运行 Java 应用程序所需...

    jdk6绿色免安装版

    1. **设置JAVA_HOME**:将JDK6的解压路径设置为JAVA_HOME环境变量,例如:`C:\Program Files\Java\jdk1.6.0_45`。 2. **添加PATH**:将%JAVA_HOME%\bin添加到系统的PATH环境变量中,这样命令行就可以直接调用Java...

    Jdk6解压打包版本

    9. **改进的国际化**:JDK 6增强了对Unicode 4.0的支持,改进了日期和时间的处理,以及货币和数字格式化。 10. **脚本语言支持**:通过`ScriptEngine`接口,JDK 6支持JavaScript和其他脚本语言,使得Java应用可以...

    Java帮助文档 JDK全系列 官方中英下载地址.docx

    下载链接:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe - JDK 1.7(也称为Java 7):引入了Try-with-resources语句、多版本兼容的JAR文件...

    message_i18

    标题中的“message_i18”通常与软件的国际化(i18n)和本地化(l10n)有关,这是为了让软件能够适应不同国家和地区的语言习惯。在IT行业中,"i18n"是"internationalization"的缩写,因为单词中从'i'到'n'有18个字母...

Global site tag (gtag.js) - Google Analytics