java国际化主要涉及2个类,Locale和ResourceBundle
一、类介绍
1、Locale
Locale对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。
使用此类中的构造方法来创建 Locale:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
语言参数是一个有效的 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。
另外该类有多个静态实例,可直接使用,如Locale.US
注:以上的网址已经失效,请在google中搜索ISO-639 ,ISO-3166 的定义文档
2、ResourceBundle
实例化方法:
static ResourceBundle getBundle(String baseName)
使用指定的基本名称、默认的语言环境和调用者的类加载器获取资源包。
static ResourceBundle getBundle(String baseName, Locale locale)
使用指定的基本名称、语言环境和调用者的类加载器获取资源包。
baseName是文件前缀名
二、例子
首先需要将资源文件放入classpath路径下,资源文件格式如下
文件名_语言_.国家_.properties,如下面的
res_zh_CN.properties 中文
res_en_US.properties 英文
res.properties(不带语言_.国家则是默认资源文件)
代码:
Locale locale1 = new Locale("zh", "CN");
ResourceBundle resb1 = ResourceBundle.getBundle("res", locale1);
System.out.println(resb1.getString("title"));
ResourceBundle resb2 = ResourceBundle.getBundle("res", Locale.getDefault());
System.out.println(resb2.getString("title"));
Locale locale3 = new Locale("en", "US");
ResourceBundle resb3 = ResourceBundle.getBundle("res", locale3);
System.out.println(resb3.getString("title"));
其中title是资源文件中的key,一个资源文件内容大概是这样的,
title=title