`

ResourceBundle & MessageFormat

 
阅读更多

ResourceBundle 用于加载properties文件,并通过key获取文件中的值。

通过静态方法实例化ResourceBundle:

static ResourceBundle getBundle(String baseName, Locale locale)

baseName 由两部分组成:类路径+properties文件的基本名称

 

匹配的properties文件名依次为:

properties文件的基本名称+"_"+locale.getLanguage()+"_"+locale.getCountry+".properties"

properties文件的基本名称+"_"+locale.getLanguage()+".properties"

properties文件的基本名称+".properties"

 

ResourceBundle 在baseName指定的类路径下,按上面顺序依次查找并加载properites文件,直到成功加载某个properties文件或抛出未找到异常(MissingResourceException

 

举例:

baseName= com.app.message  Locale = Local.CHINA

则加载的properties文件为: 类路径com/app/下

message_zh_CN.properties 

message_zh.properties

message.properties

 

加载成功后就可以获取properties文件中的信息:

 boolean containsKey(String key)
          确定给定 key 是否包含在此 ResourceBundle 及其父包中。
abstract  Enumeration<String> getKeys()
          返回键的枚举。
 Locale getLocale()
          返回此资源包的语言环境。
 Object getObject(String key)
          从此资源包或它的某个父包中获取给定键的对象。
 String getString(String key)
          从此资源包或它的某个父包中获取给定键的字符串。
 String[] getStringArray(String key)
          从此资源包或它的某个父包中获取给定键的字符串数组。
protected abstract  Object handleGetObject(String key)
          从此资源包中获取给定键的对象。
protected  Set<String> handleKeySet()
          返回 包含在此 ResourceBundle 中的键的 Set
 Set<String> keySet()
          返回此 ResourceBundle 及其父包中包含的所有键的 Set
protected  void setParent(ResourceBundle parent)
          设置此包的父包。

 

ResourceBundle  一般用于提取国际化消息,根据Locale 的不同,而定位到不同的properties文件,这些properties文件的key都相同,值是用不同语言描述,因此可以获得不同的语言消息。

 为了支持不同国家的语言,properties文件的内容需要转换为unicode编码(\uxxxx)。

 eclipse 编辑properties 时,录入的中文会自动转换为unicode编码。 

也可以使用命令:native2ascii 

native2ascii -encoding 源编码格式 源文件 目标文件

native2ascii -encoding UTF-8 message_zh_CN_src.properties message_zh_CN.properties

 

也可以使用 ResourceBundle  来切换配置信息,

举例:new Local("jdbc","db1") 或new Local("jdbc","db2")

       用来切换jdbc连接

public void testResourceBundler(){
		//类路径 test下message.properties中配置:
		// city = \u4E2D\u56FD\u6C88\u9633
		ResourceBundle resultBundle = ResourceBundle.getBundle("test.message",Locale.CHINA);
		String city = resultBundle.getString("city");
		System.out.println(city);//中国沈阳
		
		//类路径 test下config_jdbc_db1.properties中配置:
		// jdbc.url=jdbc:oracle:thin:@192.168.14.14:1521:db01 
		resultBundle = ResourceBundle.getBundle("test.config",new Locale("jdbc","db1"));
		String jdbcUrl = resultBundle.getString("jdbc.url");
		System.out.println(jdbcUrl);//jdbc:oracle:thin:@192.168.14.14:1521:db01 
		
		//类路径 test下config_jdbc_db2.properties中配置:
		// jdbc.url=jdbc:oracle:thin:@192.168.14.15:1521:db02 
		resultBundle = ResourceBundle.getBundle("test.config",new Locale("jdbc","db2"));
		 jdbcUrl = resultBundle.getString("jdbc.url");
		System.out.println(jdbcUrl);//jdbc:oracle:thin:@192.168.14.15:1521:db02 
	}

 

 

MessageFormat 用于格式化字符串,如字符串中有{0},{1},等,使用参数代替。

 

public void testMessageFormat(){
		Object params = new Object []{"china"};
		
		MessageFormat messageFormat = new MessageFormat(" your city is  {0}");
		System.out.println(messageFormat.format(params));//your city is  china
		
		
		double num = 12345.123;
		 params = new Object []{num};

		 messageFormat = new MessageFormat("the number is {0,number}");
		System.out.println(messageFormat.format(params));//the number is 12,345.123 

		messageFormat = new MessageFormat("the number is {0,number,integer}");
		System.out.println(messageFormat.format(params));//the number is 12,345
		
		messageFormat = new MessageFormat("the number is {0,number,currency}");
		System.out.println(messageFormat.format(params));//the number is ¥12,345.12
		
		messageFormat = new MessageFormat("the number is {0,number,percent}");
		System.out.println(messageFormat.format(params));//the number is 1,234,512%
		
		messageFormat = new MessageFormat("the number is {0,number,#.#}");
		System.out.println(messageFormat.format(params));//the number is 12345.1
		
		messageFormat = new MessageFormat("the number is {0,number,#.##%}");
		System.out.println(messageFormat.format(params));//the number is 1234512.3%
		
		messageFormat = new MessageFormat("the number is {0,number,#,###.##}");
		System.out.println(messageFormat.format(params));//the number is 12,345.12
		
		
		params = new Object []{new Date()};
		messageFormat = new MessageFormat("current time is  {0,date}");
		System.out.println(messageFormat.format(params));//current time is  2014-4-3
		
		messageFormat = new MessageFormat("current time is  {0,date,short}");
		System.out.println(messageFormat.format(params));//current time is  14-4-3
		
		messageFormat = new MessageFormat("current time is  {0,date,medium}");
		System.out.println(messageFormat.format(params));//current time is  2014-4-3
		
		messageFormat = new MessageFormat("current time is  {0,date,long}");
		System.out.println(messageFormat.format(params));//current time is  2014年4月3日
		
		messageFormat = new MessageFormat("current time is  {0,date,full}");
		System.out.println(messageFormat.format(params));//current time is  2014年4月3日 星期四
		
		
		messageFormat = new MessageFormat("current time is  {0,date,yyyy-MM-dd hh:mm:ss}");
		System.out.println(messageFormat.format(params));//current time is  2014-04-03 11:41:24
	}
	

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    javaweb 国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    在Web应用中,国际化主要涉及以下几个类:DateFormat、NumberFormat、MessageFormat和ResourceBundle。 首先,DateFormat类是用于格式化和解析日期的抽象类。它可以用来将日期对象转换成各种语言环境下对应的日期...

    Java中文编码问题研究.pdf

    3. 使用Java的internationalization支持:Java提供了国际化支持,例如ResourceBundle和MessageFormat等,可以用来解决中文编码问题。 四、结论 Java中文编码问题是Java程序中常见的问题,解决这个问题需要了解Java...

    小知识点i18n,关于国际化处理

    国际化(i18n)是软件开发中的一个重要概念,它指的是使软件能够适应不同语言和地区的能力。...通过正确使用Locale、ResourceBundle和MessageFormat,开发者可以构建出能够跨越全球的、具有广泛用户基础的软件产品。

    JDK17-internationalization-guide.pdf

    Java平台提供了多种字符串翻译技术,例如ResourceBundle、MessageFormat等。 四、总结 Java平台提供了强大的国际化支持,允许开发者轻松地开发出能够满足全球用户需求的软件产品。Java国际化技术可以分为字符集...

    SpringMVC框架实例

    这可以通过定义MessageSource Bean,并在控制器中使用ResourceBundle和MessageFormat进行消息的查找和格式化。 视图层通常使用JSP、Thymeleaf、FreeMarker等模板引擎来实现。SpringMVC中的视图解析器如...

    java 国际化说明

    在Java中,实现国际化的关键类主要包括`Locale`、`ResourceBundle`以及`MessageFormat`。 ### Locale类 `Locale`类用于表示一个具体的地理位置、语言环境或文化区域。例如,“zh_CN”代表简体中文(中国),而“en...

    JAVA富客户端开发教程源代码

    Java提供了ResourceBundle和MessageFormat类来实现这一功能。 7. **持久化存储**:为了保存用户数据或应用状态,开发者通常会使用数据库(如JDBC)或者序列化技术。此外,Java的Preferences API也是小型数据存储的...

    swt 监控代码资料

    10. SWT国际化与本地化:SWT支持应用程序的国际化,通过ResourceBundle和MessageFormat类,可以方便地实现文本的多语言支持。 综上所述,“swt 监控代码资料”可能涵盖了SWT的基本使用、组件交互、图形绘制、性能...

    java2se6 (chm)帮助文档

    9. **国际化**:Java SE 6提供了强大的国际化支持,包括Locale类、ResourceBundle和MessageFormat,使得软件能适应多种语言和文化环境。 10. **反射和注解**:反射机制允许在运行时检查和修改类、接口、字段和方法...

    Apache Wicket Cookbook

    - **案例4:国际化支持**:为应用添加多语言支持,了解如何使用ResourceBundle和MessageFormat类来实现国际化功能。 - **案例5:安全认证**:实现用户登录认证功能,包括用户名密码验证、会话管理等,确保应用的安全...

    struts1.2 国际化

    Java 语言本身对国际化提供了强大的支持,主要通过 `java.util.Locale`、`java.util.ResourceBundle` 和 `java.text.MessageFormat` 这三个关键类实现。 ##### 1. Locale 类 - **核心功能**:`Locale` 类是 Java ...

    关于JAVA国际化的问题资料

    ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.getDefault()); String message = bundle.getString("welcome"); System.out.println(message); ``` ##### 3. 使用`java.text.MessageFormat...

    java实现国际化

    在实际项目中,为了确保代码的可维护性和扩展性,通常会使用专门的国际化框架,如Spring Framework的`MessageSource`接口,或者Apache Commons Lang的`MessageFormat`类,它们提供更高级别的抽象和便利功能。...

    关于国际化I18n的事例

    ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.GERMANY); String greeting = bundle.getString("greeting"); ``` 在上述代码中,`getBundle`方法接收两个参数:资源包的基名和目标`Locale`...

    5.3验证框架$国际化

    核心类包括`Locale`、`ResourceBundle`和`MessageFormat`等。 1. `Locale`:代表一种特定的语言、国家和地区,如`Locale.CHINA`表示简体中文环境。程序可以使用`Locale`对象来获取特定地区的资源和格式。 2. `...

    JavaWeb项目网上书店.rar

    ResourceBundle Locale 3、日期时间格式化:类型转换 String---------&gt;java.util.Date java.util.Date---------&gt;String DateFormat 4、数字的格式化:货币 5、批量国际化MessageFormat 占位符:aaaa{索引...

    JAVA-Internationalization-tutorial.rar_JAVA 国际化

    3. **MessageFormat和ChoiceFormat**:`MessageFormat`用于格式化字符串,允许动态插入变量。`ChoiceFormat`则允许根据数字范围选择不同的消息。 4. **Formatter类**:例如`NumberFormat`和`DateFormat`,用于格式...

    国际化编程

    3. **MessageFormat**: MessageFormat 类用于格式化输出,尤其是包含变量的消息。它可以处理日期、数字、货币等场所敏感的条目,确保符合特定地区的格式。 4. **Java的国际化支持**: Java 语言本身的特性,如平台...

    Java internationalization basics.zip_JAVA 国际化_doc_国际化 java

    - 避免在代码中直接使用固定的语言文本,而是使用`MessageFormat`和`ResourceBundle`来获取和格式化文本。 - 考虑到区域差异,如日期和数字的格式,货币的表示方式等。 综上所述,Java的国际化是一个涉及多个层次和...

Global site tag (gtag.js) - Google Analytics