一、认识国际化资源文件
这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:
轻松地本地化或翻译成不同的语言
一次处理多个语言环境
以后可以轻松地进行修改,支持更多的语言环境
说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。
使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties,
如果是默认的,直接写为:自定义名.properties
比如:
myres_en_US.properties
myres_zh_CN.properties
myres_zh_CN.properties
myres.properties
当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。
没有提供语言和地区的资源文件是系统默认的资源文件。
资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.
二、实例
定义三个资源文件,放到src的根目录下面(必须这样,或者你放到自己配置的calsspath下面。
myres.properties
aaa=good
bbb=thanks
bbb=thanks
myres_en_US.properties
aaa=good
bbb=thanks
bbb=thanks
myres_zh_CN.properties
aaa=\u597d
bbb=\u591a\u8c22
bbb=\u591a\u8c22
import java.util.Locale;
import java.util.ResourceBundle;
/**
* 国际化资源绑定测试
*
* @author leizhimin 2009-7-29 21:17:42
*/
public class TestResourceBundle {
public static void main(String[] args) {
Locale locale1 = new Locale("zh", "CN");
ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);
System.out.println(resb1.getString("aaa"));
ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());
System.out.println(resb1.getString("aaa"));
Locale locale3 = new Locale("en", "US");
ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);
System.out.println(resb3.getString("aaa"));
}
}
import java.util.ResourceBundle;
/**
* 国际化资源绑定测试
*
* @author leizhimin 2009-7-29 21:17:42
*/
public class TestResourceBundle {
public static void main(String[] args) {
Locale locale1 = new Locale("zh", "CN");
ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1);
System.out.println(resb1.getString("aaa"));
ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault());
System.out.println(resb1.getString("aaa"));
Locale locale3 = new Locale("en", "US");
ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3);
System.out.println(resb3.getString("aaa"));
}
}
运行结果:
好
好
good
Process finished with exit code 0
好
good
Process finished with exit code 0
如果使用默认的Locale,那么在英文操作系统上,会选择myres_en_US.properties或myres.properties资源文件。
三、认识Locale
Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。
使用此类中的构造方法来创建 Locale:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
Locale(String language, String country)
Locale(String language, String country, String variant)
创建完 Locale 后,就可以查询有关其自身的信息。使用 getCountry 可获取 ISO 国家代码,使用 getLanguage 则获取 ISO 语言代码。可用使用 getDisplayCountry 来获取适合向用户显示的国家名。同样,可用使用 getDisplayLanguage 来获取适合向用户显示的语言名。有趣的是,getDisplayXXX 方法本身是语言环境敏感的,它有两个版本:一个使用默认的语言环境作为参数,另一个则使用指定的语言环境作为参数。
语言参数是一个有效的 ISO 语言代码。这些代码是由 ISO-639 定义的小写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:
http://www.loc.gov/standards/iso639-2/englangn.html。
国家参数是一个有效的 ISO 国家代码。这些代码是由 ISO-3166 定义的大写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:
http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。
http://www.loc.gov/standards/iso639-2/englangn.html。
国家参数是一个有效的 ISO 国家代码。这些代码是由 ISO-3166 定义的大写两字母代码。在许多网站上都可以找到这些代码的完整列表,如:
http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html。
四、中文资源文件的转码 native2ascii
这个工具用法如下:
如果觉得麻烦,可以直接将中文粘贴到里面,回车就可以看到转码后的结果了。
看明白这个了,就不在为struts等web框架的国际化而感到稀奇了。
相关推荐
java.util.ResourceBundle使用详解
Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强...通过熟练掌握和使用java.util包中的类和接口,开发者能够更加高效地处理数据和实现复杂逻辑。
### Java的.awt包和.java.util包的区别 #### Java.util包详解 Java.util包是一个非常重要的标准库之一,其中包含了大量有用的类和接口,为开发者提供了丰富的功能。此包中的类和接口可以分为以下几大类别: 1. **...
在Java中,`java.util.MissingResourceException`是当尝试从`ResourceBundle`中获取一个不存在的资源时抛出的异常。`ResourceBundle`用于管理应用的多语言支持,例如,通过加载.properties文件来提供不同的字符串...
Java util包使用详解 Java util包是Java语言中一个实用的工具类库,提供了许多有用的方法和数据结构。下面将逐一介绍其中几个重要的类。 日期类Date Java中的日期类封装了有关日期和时间的信息,用户可以通过调用...
private static ResourceBundle bundle = ResourceBundle.getBundle("cardBin"); private static Map, String> bankName = new HashMap(); static{ bankName.put("ABC", "中国农业银行"); bankName.put(...
使用`java.util.ResourceBundle.getBundle()` `ResourceBundle`是Java中用于资源绑定的类,它可以用来获取国际化资源。这里我们使用它来加载`Properties`文件。 **代码示例:** ```java import java.util.Locale...
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); // 示例:获取某个键的值 String value = rb.getString("key"); System.out.println(value); } } ``` #### 三、使用 `java.util...
ResourceBundle rb = ResourceBundle.getBundle("path/to/your/file"); String value = rb.getString("key"); System.out.println(value); } } ``` ### 方法三:使用`java.util.PropertyResourceBundle`类 与...
3. 加载XML文件:在代码中使用`ResourceBundle.getBundle()`方法,传入自定义的ResourceBundle类名和XML文件路径,系统会自动调用自定义的ResourceBundle子类来加载资源。 相比于传统的.properties文件,Xml ...
ResourceBundle bundle = ResourceBundle.getBundle("config"); String value = bundle.getString("key"); System.out.println("Value: " + value); } } ``` 在这里,配置文件名(不包括扩展名)作为`...
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); // 示例:获取资源文件中的属性 String greeting = rb.getString("greeting"); System.out.println("Greeting: " + greeting); } ...
- `java.util.ResourceBundle`是Java内置的国际化(i18n)支持,可以用来加载不同语言的资源文件,实现多语种替换。 - `org.springframework.context.MessageSource`是Spring框架提供的,它可以更加灵活地管理多...
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); // 获取属性值 System.out.println(rb.getString("welcome")); } } ``` **注意事项:** - 属性文件通常需要放在特定目录下,且遵循...
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); ``` 这个方法通常用于处理不同语言环境下的资源配置。 3. **使用java.util.PropertyResourceBundle类的构造函数** 如果你直接需要...
10. **国际化与本地化**:`java.text`和`java.util.locale`包提供了支持不同地区和语言的工具,如NumberFormat、DateFormat和ResourceBundle,帮助开发者创建全球化应用。 尽管这个压缩包可能并不完整,但它提供的...
9. **国际化和本地化**:Java.util.Locale和ResourceBundle类支持不同地区的语言和文化习惯。 10. **数据库连接**:JDBC(Java Database Connectivity)提供了一套接口和类,如Connection、Statement、ResultSet,...
- java.util.ResourceBundle#getBundle(),加载资源束。 ***.URL#openConnection(),创建一个URL连接实例。 - java.sql.DriverManager#getConnection(),通过驱动管理器获取数据库连接。 b) 建造者模式(Builder...