java ResourceBundle介绍「建议收藏」

java ResourceBundle介绍「建议收藏」publicabstractclassResourceBundleextendsObject下列类的父类:ListResourceBundle,PropertyResourceBundle资源束包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,如String,程序可以从适合当前用户语言环境的资源束中装入它。以这种方式,可以写大部分独立于用户语言环境的程序

大家好,又见面了,我是你们的朋友全栈君。

public abstract class ResourceBundle

extends Object

下列类的父类:

ListResourceBundle, PropertyResourceBundle

资源束包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,如 String ,程序可以从适合当前用户语言环境的资源束中装入它。以这种方式,可以写大部分独立于用户语言环境的程序代码,它与大部分资源束中的特定于语言环境的信息相隔离。

这使得编程可以:

容易本地化或翻译成不同的语言

一次处理多种语言环境

以后容易更改以支持更多的语言环境

一个资源束从概念上讲是相关的类集合,这些类是从 ResourceBundle 继承而来的。 ResourceBundle 的每个相关的子类有同一基名并加上标识它的语言环境的附加成分。例如,假设您的资源束命名为 MyResources。您写的第一个类可能是缺省的资源束,它与它的家族有同一个名字–MyResources 。也可按需要提供许多特定于语言环境的类:例如,可能为它提供一个德文的名字 MyResources_de。

ResourceBundle 的每个相关的子类包含同样的项目,但是项目已经为那个 ResourceBundle 子类描述的语言环境所翻译。例如,MyResources 和 MyResources_de 可能都有一个用在确认操作按钮上的 String 。在 MyResources 中,String 可能包含 OK ,在 MyResources_de 中,它可能包含 Gut。

如果对不同的国家有不同的资源,可做出规定:例如, MyResources_de_CH 是 Switzerland 的资源。如果仅想更改规定中的一些资源,可以这样做。

当您的程序需要特定于语言环境的对象时,它使用 getBundle 方法装入 ResourceBundle 类:

ResourceBundle myResources = ResourceBundle.getBundle(“MyResources”, currentLocale);

第一个参数指定包含有疑问对象的资源束的家族名。第二个参数指定了期望的语言环境。getBundle 使用这两个参数来构造 ResourceBundle 子类的名字,它应按下面的方法装入。

资源束用不同的后缀查找类,根据(1) 期望的语言环境和 (2) 缺省的语言环境(基类), 以下面从更低级别(指定较多的)到父类级别(指定较少的)的顺序来查找:

baseclass + “_” + language1 + “_” + country1 + “_” + variant1

baseclass + “_” + language1 + “_” + country1

baseclass + “_” + language1

baseclass

baseclass + “_” + language2 + “_” + country2 + “_” + variant2

baseclass + “_” + language2 + “_” + country2

baseclass + “_” + language2

查找的结果是一个类,但是那个类可能由磁盘上的特性文件支持。如果查找失败,getBundle() 抛出 MissingResourceException 异常。

基类必须 完全合格(例如,myPackage.MyResources, 而不仅仅是 MyResources)。 它必须是您的代码可执行的;它不能是对调用 ResourceBundle.getBundle 的包私有的类。

注意:ResourceBundle 被内部用于访问 NumberFormats、Collation 等。查找策略是相同的。

资源束包含键/值对。键用于唯一地识别资源束中特定于语言环境的对象。下面是一个包含键/值对的 ListResourceBundle 的例子:

class MyResource extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { // LOCALIZE THIS {“OkKey”, “OK”}, {“CancelKey”, “Cancel”}, // END OF MATERIAL TO LOCALIZE }; }

键总是 String。 在这个例子中,键是 OkKey 和 CancelKey。 在上面的例子中,值也是 String–OK 和 Cancel–但是它们不是一定如此。值可以是任何类型的对象。

使用适当的获取方法从资源束中获取一个对象。因为 OkKey 和 CancelKey 都是字符串,可用 getString 方法检索它们:

button1 = new Button(myResourceBundle.getString(“OkKey”)); button2 = new Button(myResourceBundle.getString(“CancelKey”));

获取方法都要求把键作为一个参数,并且如果找到的话就返回这个对象。如果对象未找到,获取方法抛出 MissingResourceException 异常。

除了 getString,资源束支持获取不同类型对象的其它方法,例如 getStringArray。如果没有任何对象匹配这些方法,可以使用 getObject,并把结果映射成适当的类型。例如:

int[] myIntegers = (int[]) myResources.getObject(“intList”);

注意:应该一直提供没有后缀的基类。 如果要求的语言环境不存在,这将是类的 “最后选择”。例如,下面一个类 MyResources。它碰巧包含 US 字符串,所以我们不必用显式的 MyResource_en 或 MyResource_en_US。

JDK 提供了 ResourceBundle 的两个子类: ListResourceBundle 和 PropertyResourceBundle , 它们提供了非常简单的创建资源的方法。 (一旦序列化完全被集成,将提供另一个方法。) 如在先前的例子中所见到的,ListResourceBundle 把它的资源作为键/值对管理。 PropertyResourceBundle 使用特性文件管理它的资源。

如果 ListResourceBundle 或 PropertyResourceBundle 不符合您的需求,您可写自己的 ResourceBundle 子类。您写的子类必须覆盖两个方法:handleGetObject 和 getKeys()。

下面是 ResourceBundle 子类管理少数资源的例子(对于更大的资源,应使用 Hashtable)。注意,如果未找到键,handleGetObject 必须返回 null。注意,如果一个“父类级别的”ResourceBundle 处理有同一值( 见下面的 uk ) 的同一键,您不必提供任何值。

例子:

abstract class MyResources extends ResourceBundle { public Object handleGetObject(String key) { if (key.equals(“okKey”)) return “Ok”; if (key.equals(“cancelKey”)) return “Cancel”; return null; } } abstract class MyResources_de extends MyResources { public Object handleGetObject(String key) { if (key.equals(“okKey”)) return “Gut”; if (key.equals(“cancelKey”)) return “Vernichten”; return null; } } abstract class MyResources_uk extends MyResources { public Object handleGetObject(String key) { // don’t need okKey, since parent level handles it. if (key.equals(“cancelKey”)) return “Dispose”; return null; } }

不必限制自己使用单个系列的 ResourceBundle。例如,可以有一个用于出错信息的束集合,ExceptionResources (ExceptionResources_fr, ExceptionResources_de, …) , 以及一个用于小工具的束集合, WidgetResource (WidgetResources_fr, WidgetResources_de, …); 按您的需要断开资源。

 

参见:

ListResourceBundle, PropertyResourceBundle, MissingResourceException

变量索引

parent

当父类束不包含特定资源时,可通过 getObject 查阅它。

构造子索引

ResourceBundle()

方法索引

getBundle(String)

获取恰当的资源束子类。

getBundle(String, Locale)

获取恰当的资源束子类。

getKeys()

返回键的枚举。

getObject(String)

从资源束获取一个对象。

getString(String)

从资源束获取一个对象。

getStringArray(String)

从资源束获取一个对象。

handleGetObject(String)

从资源束获取一个对象。

setParent(ResourceBundle)

设置该束的父类束。

变量

parent

protected ResourceBundle parent

当父类束不包含特定的资源时,可通过 getObject 查阅它。

 

构造子

ResourceBundle

public ResourceBundle()

方法

getString

public final String getString(String key) throws MissingResourceException

从资源束获取一个对象。

保存映射的便捷方法。

 

参数:

key – 参见类描述。

getStringArray

public final String[] getStringArray(String key) throws MissingResourceException

从资源束获取一个对象。

保存映射的便捷方法。

 

参数:

key – 参见类描述。

getObject

public final Object getObject(String key) throws MissingResourceException

从资源束获取一个对象。

 

参数:

key – 参见类描述。

getBundle

public static final ResourceBundle getBundle(String baseName) throws MissingResourceException

获取适当的资源束子类。

 

参数:

baseName – 参见类描述。

getBundle

public static final ResourceBundle getBundle(String baseName, Locale locale)

获取适当的资源束子类。

 

参数:

baseName – 参见类描述。

locale – 参见类描述。

setParent

protected void setParent(ResourceBundle parent)

设置该束的父类束。当父类束不包含特定的资源时,可通过 getObject 搜索它。

 

参数:

parent – 该束的父类束。

handleGetObject

protected abstract Object handleGetObject(String key) throws MissingResourceException

从资源束获取一个对象。 注意:子类必须覆盖。

 

参数:

key – 参见类描述。

getKeys

public abstract Enumeration getKeys()

返回键的枚举。 注意:子类必须覆盖。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158108.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何将word转为html_word转html工具

    如何将word转为html_word转html工具推荐可以试用FreeSpire.DocforJava免费控件哦,它支持将htmlstring和htmlfile转word,代码操作简单,转换效果也很好。Htmlfile转wordimportcom.spire.doc.*;importcom.spire.doc.documents.XHTMLValidationType;publicclasshtmlFileToWord{pu…

    2022年10月12日
    0
  • QXDM操作应用_飞机QDM

    QXDM操作应用_飞机QDMQXDM(TheQUALCOMMExtensibleDiagnosticMonitor)是高通公司(Qualcomm)公司发布的可以对手机终端所发数据进行跟踪有效工具,通过对数据的分析可以诊断信令流程、分析数据包的正确与否等。在测试中有重要作用,正确合理的使用可以为我们测试提供便捷的定位手段。QXDM是利用QPSTServer(Section3.3.1.1),通过USB延长线或…

    2022年10月2日
    0
  • poweroff 命令_powercfg -h off 函数出了问题

    poweroff 命令_powercfg -h off 函数出了问题2019-02-17基础命令学习目录首页原文链接:https://www.cnblogs.com/Baron-Lu/p/6951297.html基础命令学习目录首页原文链接:https://w

    2022年8月1日
    4
  • 51单片机按键控制步进电机加减速及正反转

    51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图注意:上图为共阳极接法,实际连接参考总体线路连接。 驱动器信号端定义:PUL+:脉冲信号输入正。(C…

    2022年6月1日
    44
  • Linux文件rwx属性「建议收藏」

    Linux文件rwx属性「建议收藏」Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls-a除了显示一般文件名外,连隐藏文件也会显示出来。  ls-l(这个参数是字母L的小写,不是数字1)  这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到ls-l这个指令。例如我在某个目录下键入ls-l可能会显示如下信息(一共7个栏位):  文件属性文件数拥有者

    2022年5月25日
    34
  • 数据库隔离级别理解「建议收藏」

    数据库隔离级别理解「建议收藏」1.为什么要选择隔离级别?通过例子说明隔离级别的必要性:假设一个场景,一对夫妻共用一个账户,妻子喜欢网上支付,丈夫喜欢刷卡支付。第一类丢失情况:整个过程中只有老公消费1000元,而最后时刻,老婆回滚事务,恢复到了原来的10000元,这不符合实际。这样的两个事务并发,一个提交,一个回滚导致的不一致成为第一类丢失更新,不过大部分数据库(mysql,o…

    2022年5月9日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号