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 }
相关推荐
在Web应用中,国际化主要涉及以下几个类:DateFormat、NumberFormat、MessageFormat和ResourceBundle。 首先,DateFormat类是用于格式化和解析日期的抽象类。它可以用来将日期对象转换成各种语言环境下对应的日期...
3. 使用Java的internationalization支持:Java提供了国际化支持,例如ResourceBundle和MessageFormat等,可以用来解决中文编码问题。 四、结论 Java中文编码问题是Java程序中常见的问题,解决这个问题需要了解Java...
国际化(i18n)是软件开发中的一个重要概念,它指的是使软件能够适应不同语言和地区的能力。...通过正确使用Locale、ResourceBundle和MessageFormat,开发者可以构建出能够跨越全球的、具有广泛用户基础的软件产品。
Java平台提供了多种字符串翻译技术,例如ResourceBundle、MessageFormat等。 四、总结 Java平台提供了强大的国际化支持,允许开发者轻松地开发出能够满足全球用户需求的软件产品。Java国际化技术可以分为字符集...
这可以通过定义MessageSource Bean,并在控制器中使用ResourceBundle和MessageFormat进行消息的查找和格式化。 视图层通常使用JSP、Thymeleaf、FreeMarker等模板引擎来实现。SpringMVC中的视图解析器如...
在Java中,实现国际化的关键类主要包括`Locale`、`ResourceBundle`以及`MessageFormat`。 ### Locale类 `Locale`类用于表示一个具体的地理位置、语言环境或文化区域。例如,“zh_CN”代表简体中文(中国),而“en...
Java提供了ResourceBundle和MessageFormat类来实现这一功能。 7. **持久化存储**:为了保存用户数据或应用状态,开发者通常会使用数据库(如JDBC)或者序列化技术。此外,Java的Preferences API也是小型数据存储的...
10. SWT国际化与本地化:SWT支持应用程序的国际化,通过ResourceBundle和MessageFormat类,可以方便地实现文本的多语言支持。 综上所述,“swt 监控代码资料”可能涵盖了SWT的基本使用、组件交互、图形绘制、性能...
9. **国际化**:Java SE 6提供了强大的国际化支持,包括Locale类、ResourceBundle和MessageFormat,使得软件能适应多种语言和文化环境。 10. **反射和注解**:反射机制允许在运行时检查和修改类、接口、字段和方法...
- **案例4:国际化支持**:为应用添加多语言支持,了解如何使用ResourceBundle和MessageFormat类来实现国际化功能。 - **案例5:安全认证**:实现用户登录认证功能,包括用户名密码验证、会话管理等,确保应用的安全...
Java 语言本身对国际化提供了强大的支持,主要通过 `java.util.Locale`、`java.util.ResourceBundle` 和 `java.text.MessageFormat` 这三个关键类实现。 ##### 1. Locale 类 - **核心功能**:`Locale` 类是 Java ...
ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.getDefault()); String message = bundle.getString("welcome"); System.out.println(message); ``` ##### 3. 使用`java.text.MessageFormat...
在实际项目中,为了确保代码的可维护性和扩展性,通常会使用专门的国际化框架,如Spring Framework的`MessageSource`接口,或者Apache Commons Lang的`MessageFormat`类,它们提供更高级别的抽象和便利功能。...
ResourceBundle bundle = ResourceBundle.getBundle("messages", Locale.GERMANY); String greeting = bundle.getString("greeting"); ``` 在上述代码中,`getBundle`方法接收两个参数:资源包的基名和目标`Locale`...
核心类包括`Locale`、`ResourceBundle`和`MessageFormat`等。 1. `Locale`:代表一种特定的语言、国家和地区,如`Locale.CHINA`表示简体中文环境。程序可以使用`Locale`对象来获取特定地区的资源和格式。 2. `...
ResourceBundle Locale 3、日期时间格式化:类型转换 String--------->java.util.Date java.util.Date--------->String DateFormat 4、数字的格式化:货币 5、批量国际化MessageFormat 占位符:aaaa{索引...
3. **MessageFormat和ChoiceFormat**:`MessageFormat`用于格式化字符串,允许动态插入变量。`ChoiceFormat`则允许根据数字范围选择不同的消息。 4. **Formatter类**:例如`NumberFormat`和`DateFormat`,用于格式...
3. **MessageFormat**: MessageFormat 类用于格式化输出,尤其是包含变量的消息。它可以处理日期、数字、货币等场所敏感的条目,确保符合特定地区的格式。 4. **Java的国际化支持**: Java 语言本身的特性,如平台...
- 避免在代码中直接使用固定的语言文本,而是使用`MessageFormat`和`ResourceBundle`来获取和格式化文本。 - 考虑到区域差异,如日期和数字的格式,货币的表示方式等。 综上所述,Java的国际化是一个涉及多个层次和...