`

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
	}
	

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics