Java程序的国际化

xiaoxiao2021-02-28  92

Java程序的国际化主要通过如下三个类完成: 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; } }

转载请注明原文地址: https://www.6miu.com/read-58347.html

最新回复(0)