科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道J2SE 6 在国际化方面的增强

J2SE 6 在国际化方面的增强

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对国际化和本地化的支持是Java 标准版一个长处。 Java SE 6 一如既往地为那些注重本地化资源访问和操作的应用程序开发者提供支持。

作者:中国IT实验室 来源:中国IT实验室 2007年9月30日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)



    看看示例代码是怎样通过定制 Control 子类来指定 locale 包名

class SubdirControl extends Control {

  //仅搜索 properties 格式的文件
  public List<String> getFormats() {
    return Control.FORMAT_PROPERTIES;
  }
  
  public String toBundleName(String bundleName, Locale locale) {
    StringBuffer localizedBundle = new StringBuffer();
    // Find the base bundle name.
    int nBaseName = bundleName.lastIndexOf('.');
    String baseName = bundleName;
    // Create a new name starting with the package name.
    if (nBaseName >= 0) {
      localizedBundle.append(bundleName.substring(0, nBaseName));
      baseName = bundleName.substring(nBaseName+1);
    }
    String strLocale = locale.toString();
    // Now append the locale identification to the package name.
    if (strLocale.length() > 0 ) {
      localizedBundle.append("." + strLocale);
    } else {
      localizedBundle.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)

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章