在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支持JDK的Java国际化(i18n)标准,包括资源包(Resource Bundle)和本地化(Localization)概念。资源包是一组键值对,用于存储特定语言环境下的字符串和其他资源。通过改变资源包,应用程序可以轻松地...
第二步:右击“我的电脑”属性,选择“高级”选项卡,单击“环境变量”, 第三步:假设JDK的安装路径:E:\jdk,tomcat的安装路径:E:\tomcat 在用户变量中添加下面的变量和属性值 Classpath E:\jdk\lib\tools.jar; ...
这一步通常在自定义JDK安装或升级时执行,以确保所有必要的组件都就绪。 **标签解析:** 1. **jdk**:Java Development Kit,是Oracle公司提供的用于开发和运行Java应用程序的软件开发工具包。它包含了Java运行...
6. **配置环境变量**:为了让系统全局识别新安装的JDK,需要在bash配置文件(~/.bash_profile或~/.zshrc)中设置JAVA_HOME路径。例如: ``` export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk...
例如,在JDK9及以后的版本中,为了模块化设计,一些工具被移到了单独的模块中,不再包含在tools.jar内。因此,如果你正在使用更高版本的JDK,遇到类似问题时,解决方案可能会有所不同。 总的来说,了解并掌握tools....
java8的tools包,在maven出现无法加载时可以将该包加入maven本地仓库即可解决问题
总的来说,JDK6是一个重要的Java开发工具包,其提供的新特性和服务极大地提升了Java程序员的生产力。无论是在桌面应用、服务器端开发还是移动应用领域,JDK6都扮演了至关重要的角色。而免费下载的JDK6则为开发者提供...
ArgoUML是一款开源的、基于UML(统一建模语言)的模型设计工具,它支持多种语言,而"i18n"代表“国际化”(Internationalization),"zh"则代表“中文”。这个jar包的zip格式是为了方便用户下载和管理。 在描述中...
Java JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用程序的软件工具包,而JDK6是Java的一个重要版本,发布于2006年。本篇将详细介绍Java JDK6的安装过程及其相关知识点。 一、Java JDK6概述...
【标题】"JDK6 Windows 64位" 指的是Java Development Kit的第六个主要版本,专为Windows操作系统64位架构设计。JDK是开发和运行Java应用程序所必需的核心工具集,包含了编译器、调试器、类库等组件。 【描述】"JDK...
5. **Web服务支持**:JDK6u45增强了对Java API for RESTful Web Services (JAX-RS)的支持,使得开发RESTful服务变得更加便捷。 6. **动态语言支持**:通过JSR 292(也称为 invokedynamic),JDK6u45引入了对动态...
在本场景中,我们讨论的是JDK的6版本,专为32位Windows操作系统设计,文件名为`jdk-6u43-windows-i586.exe`。这个版本发布于2012年,是Java SE(标准版)6的第43次更新,它包含了Java编译器、调试器、JVM(Java...
【压缩包子文件的文件名称列表】"jdk-6u29-linux-i586.bin"是JDK6更新29的安装程序二进制文件。"bin"扩展名表示这是一个可执行文件,通常在命令行下运行。"i586"表明这个版本是为32位(x86)架构的Linux系统设计的。...
1. **下载**:从Oracle官网或者第三方镜像站点获取`jdk-6u37-linux-i586.bin`文件,这是JDK的二进制安装包。 2. **赋予执行权限**:使用命令`chmod +x jdk-6u37-linux-i586.bin`,使文件具有执行权限。 3. **执行...
在Windows操作系统中,当一台计算机上安装了多个Java Development Kit (JDK) 版本时,可能需要为特定的应用程序,如Kettle(Pentaho Data Integration),指定一个特定的JDK版本。这是因为不同的应用程序可能对JDK的...
5. **Swing组件更新**:JDK6对Swing GUI库进行了升级,包括新的LookAndFeel和更好的国际化支持。 6. **NIO.2**:引入了新的文件系统API,提供了异步I/O操作,使得文件操作更为高效。 7. **改进的JDBC**:支持更多...
赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.68.pom; 包含翻译后的API文档...
JDK6,全称为 JDK 1.6,是 JDK 的一个重要版本,发布于2006年,提供了许多新的特性和改进,对于当时的开发者来说具有重要意义。** ### JDK6 的核心组件 1. **Java 运行时环境 (JRE)**:这是运行 Java 应用程序所需...
1. **设置JAVA_HOME**:将JDK6的解压路径设置为JAVA_HOME环境变量,例如:`C:\Program Files\Java\jdk1.6.0_45`。 2. **添加PATH**:将%JAVA_HOME%\bin添加到系统的PATH环境变量中,这样命令行就可以直接调用Java...
9. **改进的国际化**:JDK 6增强了对Unicode 4.0的支持,改进了日期和时间的处理,以及货币和数字格式化。 10. **脚本语言支持**:通过`ScriptEngine`接口,JDK 6支持JavaScript和其他脚本语言,使得Java应用可以...