ResourceBundle是java开发中非常实用的一个类,主要用来处理应用程序多语言这样的国际化问题。
如果你的应用程序如果有国际化的需求,可以考虑使用ResourceBundle, 你要做的就是给出满足特定格式的Properties 文件,例如
resource.propreties
resource_zh_CN.properties
resource_ja_JP.properties.
然后应用程序使用ResourceBundle.getBundle(“resource”, locale) 就可以自动的搜索的相应Locale的Properties 文件。
虽然看起来很方便,但使用起来需要注意两个问题: 1 Properties 文件的搜索次序, 2. 决定是否能找到Properties 文件的ClassLoader , 这也是很多初学者遇到的问题
1. 搜索次序。
先来看个例子,假设你的系统只有两个Properties
(1) resource.zh_CN.properties : 中文的Properties
(2) resource.properties : 英文的Properties
假设你Java 的default locale是zh_CN, 如果你调用 ResourceBundle.getBundle(“resource”, Locale.US) , 你觉得系统会使用哪一个文件中的内容?
很多人会觉得会使用resource.properties 中的内容, 但实际上不是这样的,当你传入一个Locale.US 给ResourceBundle的时候 , ResourceBundle的搜索次序是这样:
(1) resource_en_US.properties --- 没找到
(2) resource_en.properties --- 还是没找到
(3) resource_zh_CN.properties ---- default locale, 找到了
(4) resource_zh_properties
(5) resource.properties
注意,ResourceBundle会自动的加上一个default locale 即 zh_CN 来搜索
系统没有找到xxxx__en_US.properties, 也没有找到xxx_en.properties, 而是找到了xxx_zh_CN.properties, 就会使用其中的内容, 所以你看的的是中文的结果。
实际上ResourceBundle 搜索结束以后,会建立一个ResourceBundle 对象的Chain, 对于上面的例子会是这样:
ResourceBundle_2 [locale=zh_CN , parent = ResourceBundle_1]
ResourceBundle_1 [locale = empty parent = null]
你可能要问,这个链表中问什么没有en_US,en 和zh相关的信息? 这是因为他们相关的Properties 不存在, 没有必要加入这个链表中。
如果你的应用程序访问resource文件的一个值得时候, 系统会先在ResourceBundle_2[Locale=zh_CN] 这个对象中找, 如果找到,直接返回相应的值
如果没有找到,顺着parent 即ResourceBundle_1继续寻找, 如果还没有找到,只好返回null 了, 因为没有parent 了
2. ClassLoader
这个也是经常出问题的地方, 很多时候当你准备好各种Locale 的Properties 文件, 调用ResourceBundle.getBundle(“resource”, Locale.US) 时,系统总是告诉你, 找不到resource_en_US的文件, 很是令人抓狂。
主要的原因就是ClassLoader 不对 ,有空接着写 :-)
相关推荐
本文将深入探讨Xml ResourceBundle的实现原理、优势以及如何在实际项目中使用。 首先,我们来理解什么是ResourceBundle。在Java中,ResourceBundle是一个接口,用于管理应用程序中的可配置资源,如字符串、图像或...
本文将深入探讨“信息绑定ResourceBundle”这一主题,并结合提供的`conndb.properties`文件,介绍如何使用ResourceBundle进行资源配置。 首先,让我们了解什么是ResourceBundle。ResourceBundle是Java API中用于...
在Java编程语言中,`ResourceBundle` 是一个关键的类,用于管理应用程序的...通过深入研究这个源码包,开发者可以更好地理解 `ResourceBundle` 的工作原理,提升自己在构建多语言、多文化支持的应用程序方面的技能。
首先,让我们深入了解`ResourceBundle`的概念。在Java中,`ResourceBundle`是处理国际化资源的标准方式,它存储了一组特定语言环境下的字符串和其他数据。通过使用`ResourceBundle`,开发者可以在不修改代码的情况下...
Swing支持多语言应用开发,通过ResourceBundle和Locale对象,开发者可以轻松实现应用的国际化和本地化,满足全球用户的需求。 总结,《深入学习JFC Swing》教材涵盖了Swing的各个方面,从基本组件的使用到高级特性...
10. **国际化(i18n)支持**:Swing内置了对多语言的支持,可以通过ResourceBundle加载不同语言的资源文件,使应用程序能够适应不同的地区和文化。 总的来说,“Swing深入”这份资料会带你全面了解Swing的各种特性...
在深入探讨Java语言如何处理properties资源文件之前,我们先来明确一下properties文件的基本概念和用途。Properties文件是一种常用的配置文件格式,在Java开发中被广泛应用于存储应用的各种配置信息,如数据库连接...
Swing支持多语言环境,通过ResourceBundle和Locale对象,开发者可以轻松实现应用程序的国际化和本地化,使其适应全球用户的需求。 八、Swing小工具(Utils) Swing还提供了一些实用工具类,如SwingUtilities、...
5. **国际化(i18n)**:FreeMarker支持多语言,你可以使用`<#t>`标签配合资源包(ResourceBundle)来实现国际化功能。 6. **安全编程**:FreeMarker允许输出用户提供的数据,因此需要关注XSS攻击。使用`?html`等...
《XSpanner汉化详解——深入理解源码与工具应用》 XSpanner,作为一个开源项目,其汉化过程涉及到软件本地化的重要概念和技术。在本文中,我们将深入探讨XSpanner的汉化过程,以及如何利用源码和工具进行有效的本地...
Swing支持多语言环境,提供了Locale对象和ResourceBundle类来实现应用程序的国际化。 9. **Swing小组件(Swing Utilities)**: Swing提供了一些实用工具类,如SwingUtilities,它们包含了诸如异步执行、线程同步...
解压并研究这些文件将有助于深入理解Struts2国际化的具体实现方式。 总结来说,"Struts2国际化demo"是一个教育性的实例,旨在教授开发者如何利用Struts2框架提供多语言支持。通过创建和配置资源文件,结合拦截器和...
通过分析和学习这些实例,开发者能更深入地理解Java国际化的工作原理,并能在自己的项目中有效地应用。 总的来说,Java的国际化特性使得开发者能够创建全球化的产品,满足不同地区用户的需求。熟练掌握这一技术对于...
通过查看这个文件,你可以更深入地理解如何在实践中运用Flex的国际化功能。 总的来说,了解和掌握Flex的国际化特性对于开发多语言应用至关重要。"flex_locale.zip"中的示例教程将帮助你理解和实践这一过程,提高你...
Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)...在阅读提供的博客链接(https://orientalpigeon.iteye.com/blog/910425)后,你将获得更深入的实践指导和示例代码,有助于你更好地掌握Flex的国际化实现。
下面我们将深入探讨Java中实现国际化程序的步骤和关键概念。 首先,我们需要理解`ResourceBundle`类,它是Java i18n的核心。`ResourceBundle`用于存储特定语言或区域的字符串和其他可本地化资源。这些资源通常保存...
下面我们将深入探讨Java国际化实现的原理,并结合`SearchZhUtil.java`源码进行分析。 1. **java.util.Locale** Locale对象代表了一个特定的语言环境,包括语言、国家和变体。例如,"zh_CN"表示简体中文,"en_US...
下面我们将深入探讨这个主题。 首先,`I18N.java` 文件可能是一个Java类,用于实现国际化的功能。在Java中,我们可以使用`java.util.ResourceBundle` 类来管理不同语言的资源文件。这些资源文件通常以`.properties`...
本文将深入探讨在SSM框架下加载properties配置文件的几种常见方法。 1. **使用Spring的PropertyPlaceholderConfigurer** Spring提供了`PropertyPlaceholderConfigurer`类,可以方便地从.properties文件中读取属性...
通过分析和运行这些示例,你可以更深入地理解Struts框架中的国际化实现。 总的来说,Struts的国际化功能使开发者能够轻松地为全球用户提供定制的用户体验,只需维护一套包含各种语言版本的资源文件即可。这个过程...