e.append(".root"); } // Now append the basename to the fully qualified package. localizedBundle.append("." + baseName); return localizedBundle.toString(); } }
下面的代码演示了如何来调用上面子定义的 getBundle 方法:
String bundleName = "com.sun.demo.intl.res.Warnings"; SubdirControl control = new SubdirControl(); Locale locale = new Locale("fr", "FR"); ResourceBundle bundle = ResourceBundle.getBundle(bundleName, locale, control);
假如缺省的 locale 是 en_US ,那么 getBundle 方法就用 Control 类去搜索侯选项并返回 如下列出的那些包名 com.sun.demo.intl.res.fr_FR.Warnings com.sun.demo.intl.res.fr.Warnings com.sun.demo.intl.res.en_US.Warnings com.sun.demo.intl.res.en.Warnings com.sun.demo.intl.res.root.Warnings
缓存 Control 对象的实例 -------------------------- 装载资源绑定的时候,默认地就会对每个“绑定”检查,判断它是否已经被装载过。我们也可以对此方式作点改变。假如,想在加载一个绑定前,简单地清除掉缓存,可以调用 ResourceBundle类的 clearCache 方法来实现。
ResourceBundle.clearCache(); ResourceBundle myBundle = ResourceBundle.getBundle("com.sun.demo.intl.res.Warnings");
甚至能为缓存设置一个“过期”数值来控制缓存的“生存周期”。在 Control 的子类里覆盖方法getTimeToLive ,这个方法返回以毫秒值代表的“生命周期”。缺省情况下,这个方法返回的是预定义的两个值中的一个,这两个值是:TTL_DONT_CACHE 和 TTL_NO_EXPIRATION_CONTROL
Control 缺省情况时返回 TTL_NO_EXPIRATION_CONTROL,这个值表示:缓存永不过期。而 TTL_DONT_CACHE 表示:根本就不对绑定进行缓存。假如,想让“绑定”每过4个小时就要进行更新,而且不是重新启动程序的话,那么需要像如下代码那样来覆盖 getTimeToLive 方法: public long getTimeToLive() { return 4L*60*60*1000; // 14,400,000 milliseconds is four hours. }
Control 对象里有很多方法来为绑定的搜索和控制进行细致地设置。本文仅列举了其中的一些,其他的,如下所列的方法也可通过覆盖来实现定制: * getCandidateLocales * getFallbackLocale * newBundle * needsReload
请参阅详细的文档中对这些方法的说明(http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.Control.html)
上一页 [1] [2] [3] [4] 下一页
针对locale的服务 ---------------- 在 java.text 和 java.util 包里支持超过100个的 locale。这些locale 可以为世界上大多数地区的人所使用,然而对某些地区的支持仍然未被支持。为了让JAVA支持这些 locale,需要做很多调查工作,比如说研究和确定数字和日期的格式,国家名称的翻译,排列的次序。某些情形下,设置是政治上的冲突都会影响到locale的内容。事实上,JAVA平台上的locale做不到“与时具进”。
有一种解决办法就是提供新的编程接口(API)让编程人员使用任意的 locale 数据。Java SE 6 里提供给编程人员一个新的接口,可让定制的 locale 插到应用程序上或者是关联到服务。幸运的是,当前正在进行的一个项目 Common Locale Data Repository (CLDR通用区域数据仓库)正在努力地跟踪研究现今世界上所有的区域数据并且维护这些数据。Unicode 组织主持这个项目。借助新的“区域相关的服务提供接口”,就可让应用程序 使用任意的与区域相关的数据。
为了使用区域相关的数据和服务,先要确定应用程序需要什么样的功能。可以为以下列出的类应用与区域相关的数据: * java.text.BreakIterator * java.text.Collator * java.text.DateFormat * java.text.DateFormatSymbols * java.text.DecimalFormatSymbols * java.text.NumberFormat * java.util.Currency * java.util.Locale * java.util.TimeZone
 上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
|