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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无刷电机的驱动

    无刷电机的驱动原文地址:http://www.dzkf.cn/html/zonghejishu/2009/0319/3706.html前言:   有关本文所谈论的无刷电机内容,只涉及低速飞行类航模电调的小功率无传感器应用,讲解的理论比较浅显易懂,旨在让初学者(象笔者本人)能够对无刷电机有一个比较快的认识,掌握基本原理和控制方法,可以在短时间内达到应用目的。理论性的内容涉及模拟电路知识、基础电子线路

    2022年8月30日
    3
  • MFC的UDP编程实现[通俗易懂]

    MFC的UDP编程实现[通俗易懂]1、编程原理UDP是面向非连接的通信协议,比TCP协议简单很多。无论是服务器端还是客户端,其通信过程概括为:创建套接字(socket)–>绑定(bind)–>发送send(或接收recv)–>关闭套接字(closesocket) 2、特殊地址:在实际通信网络中,我们几乎不会用到“0.0.0.0″和“127.0.0.1”这样的IP地址。但是在一台计算机上,特别用于某些测试用

    2022年9月7日
    0
  • DNS 全局负载均衡(GSLB)基本原理[通俗易懂]

    DNS 全局负载均衡(GSLB)基本原理[通俗易懂]采用全局负载均衡(GSLB)的前提是在不同地区设立多个数据中心,业务已经做了分布式部署的规划,无论用户从哪个IDC访问都能得到相同的结果,或者用户基本不会出现跨区域流动访问的情况,只会访问就近IDC。解析步骤1.用户向本地DNS服务器发出查询请求,如果本地DNS服务器有该域名的缓存记录,如果本地DNS服务器有该域名的缓存记录,则返回给用户,否则进行第2步2.本地DNS服务器进行递归查询,最终会查询到域名注册商处的授权DNS服务器3.授权DNS服务器其返回一条NS记录给本地DNS服务器。.

    2022年5月16日
    49
  • 微信公众号网页开发-Vue项目坑点分析

    微信公众号网页开发-Vue项目坑点分析项目背景该系统为商品推广系统,微信交互涉及网页授权和网页分享,年前使用django框架做了基础版,节后项目升级,功能更加丰富,使用vue框架做前后端分离开发,前后端分离开发提升了开发效率,也埋藏了很多坑点。。。坑点分析及解决开发前需要进入公众号后台配置”JS接口安全域名”及“授权回调页面域名”,如果服务端要获取token,还需要配置”IP白名单”,详细信息可以查阅官网。微信公众号官方文档:微信公众平台开发概述|微信开放文档微信开发者平台文档https://developers.weixi

    2022年6月5日
    28
  • Android 完全退出app程序

    Android 完全退出app程序Android完全退出app程序(不保留历史打开app记录)finishAndRemoveTask();//该方法在APIlevel21之后添加。System.exit(0);android.os.Process.killProcess(android.os.Process.myPid());

    2022年7月17日
    14
  • C# StreamReader/StreamWriter与FileStream用法详解

    C# StreamReader/StreamWriter与FileStream用法详解一、StreamReader类共有10个构造函数StreamReader(Stream)   // 为指定的流初始化StreamReader类的新实例。FileStreamfs=newFileStream(@”D:\Readme.txt”,FileMode.Open);StreamReadersr=newStreamRea

    2022年7月23日
    5

发表回复

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

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