Java程序的国际化主要通过如下三个类完成:
java.util.RescourceBundle, java.util.Locale,java.text.MessageFormat
资源文件的命名可以有如下三种形式:
baseName_language_country.properties
baseName_language.properties
输出:你好,yeeku!今天是17-6-7 下午6:18。
java.util.RescourceBundle, java.util.Locale,java.text.MessageFormat
资源文件的命名可以有如下三种形式:
baseName_language_country.properties
baseName_language.properties
baseName.properties
public class LocaleList
{
public static void main(String[] args)
{
// 返回Java所支持的全部国家和语言的数组
Locale[] localeList = Locale.getAvailableLocales();
// 遍历数组的每个元素,依次获取所支持的国家和语言
for (int i = 0; i < localeList.length ; i++ )
{
// 输出出所支持的国家和语言
System.out.println(localeList[i].getDisplayCountry()
+ "=" + localeList[i].getCountry()+ " "
+ localeList[i].getDisplayLanguage()
+ "=" + localeList[i].getLanguage());
}
}
}
public class Hello
{
public static void main(String[] args)
{
// 取得系统默认的国家/语言环境
Locale myLocale = Locale.getDefault(Locale.Category.FORMAT);
// 根据指定国家/语言环境加载资源文件
ResourceBundle bundle = ResourceBundle
.getBundle("mess" , myLocale);
// 打印从资源文件中取得的消息
System.out.println(bundle.getString("hello"));
}
}
mess_zh_CN.properties文件内容:hello=\u4f60\u597d\uff01
使用MessageFormat处理包含占位符的字符串:
public class HelloArg
{
public static void main(String[] args)
{
// 定义一个Locale变量
Locale currentLocale = null;
// 如果运行程序的指定了两个参数
if (args.length == 2)
{
// 使用运行程序的两个参数构造Locale实例
currentLocale = new Locale(args[0] , args[1]);
}
else
{
// 否则直接使用系统默认的Locale
currentLocale = Locale.getDefault(Locale.Category.FORMAT);
}
// 根据Locale加载语言资源
ResourceBundle bundle = ResourceBundle
.getBundle("myMess" , currentLocale);
// 取得已加载的语言资源文件中msg对应消息
String msg = bundle.getString("msg");
// 使用MessageFormat为带占位符的字符串传入参数
System.out.println(MessageFormat.format(msg
, "yeeku" , new Date()));
}
}
myMess_zh_CN.properties文件内容:msg=\u4f60\u597d\uff0c{0}\uff01\u4eca\u5929\u662f{1}\u3002
输出:你好,yeeku!今天是17-6-7 下午6:18。
使用类文件代替资源文件:
该类的类名必须是baseName_language_country,这与属性文件的命名相似。
该类必须继承ListResourceBundle,并重写getContents()方法,该方法返回Object数组,该数组的每一项都是key-value对。
public class myMess_zh_CN extends ListResourceBundle
{
// 定义资源
private final Object myData[][]=
{
{"msg","{0},你好!今天的日期是{1}"}
};
// 重写方法getContents()
public Object[][] getContents()
{
// 该方法返回资源的key-value对
return myData;
}
}