根据不同的国家配置不同的资源文件(资源文件有时也称为属性文件,后缀为.properties),所有的资源文件以键值对的形式出现。
Locale类
ResourceBundle类
//================================================= // File Name : Locale_demo //------------------------------------------------------------------------------ // Author : Common import java.util.ResourceBundle;; //主类 //Function : Locale_demo public class Locale_demo { public static void main(String[] args) { // TODO 自动生成的方法存根 ResourceBundle rb = ResourceBundle.getBundle("Message"); //找到资源文件 System.out.println("内容:"+rb.getString("info")); //从资源文件中取得内容 } }
根据Locale所选择的国家不同,输出不同国家的“你好”。
在属性文件中不能直接写入中文,读出来也是乱码,因此要变成Unicode编码
//================================================= // File Name : Locale_demo //------------------------------------------------------------------------------ // Author : Common import java.util.Locale; import java.util.ResourceBundle; //主类 //Function : Locale_demo public class Locale_demo { public static void main(String[] args) { // TODO 自动生成的方法存根 Locale zhLoc = new Locale("zh","CN"); //表示中国地区 Locale enLoc = new Locale("en","US"); //表示美国地区 Locale frLoc = new Locale("fr","FR"); //表示法国地区 ResourceBundle zhrb = ResourceBundle.getBundle("Message", zhLoc); //找到中文的属性文件 ResourceBundle enrb = ResourceBundle.getBundle("Message",enLoc); //找到英文的属性文件 ResourceBundle frrb = ResourceBundle.getBundle("Message",frLoc); //找到法语的属性文件 System.out.println("中文:"+zhrb.getString("info")); System.out.println("英文:"+enrb.getString("info")); System.out.println("法语:"+frrb.getString("info")); } }
使用MessageFormat格式化动态文本
所有资源内容都是个固定的,但是输出的消息中如果包含一些动态文本,则必须使用占位符清楚地表示出动态文本的位置,占位符使用“{编号}”的格式出现。
//================================================= // File Name : Locale_demo //------------------------------------------------------------------------------ // Author : Common import java.text.MessageFormat; import java.util.Locale; import java.util.ResourceBundle; //类名:A //属性: //方法: //主类 //Function : Locale_demo public class Locale_demo { public static void main(String[] args) { // TODO 自动生成的方法存根 // ResourceBundle rb = ResourceBundle.getBundle("Message"); //找到资源文件 // System.out.println("内容:"+rb.getString("info")); //从资源文件中取得内容 Locale zhLoc = new Locale("zh","CN"); //表示中国地区 Locale enLoc = new Locale("en","US"); //表示美国地区 Locale frLoc = new Locale("fr","FR"); //表示法国地区 ResourceBundle zhrb = ResourceBundle.getBundle("Message", zhLoc); //找到中文的属性文件 ResourceBundle enrb = ResourceBundle.getBundle("Message",enLoc); //找到英文的属性文件 ResourceBundle frrb = ResourceBundle.getBundle("Message",frLoc); //找到法语的属性文件 System.out.println("中文:"+zhrb.getString("info")); System.out.println("英文:"+enrb.getString("info")); System.out.println("法语:"+frrb.getString("info")); //依次读取各个属性文件的内容,通过键值读取,此时的键值名称为“info_1” String str1 = zhrb.getString("info_1"); String str2 = enrb.getString("info_1"); String str3 = frrb.getString("info_1"); System.out.println("中文:"+MessageFormat.format(str1,"张三")); System.out.println("英文:"+MessageFormat.format(str2,"zhangsan")); System.out.println("法语:"+MessageFormat.format(str3,"zhangsan")); } }
properties文件,文件名Message_zh_CN.properties
info = \u4F60\u597D info_1 = \u4F60\u597D\uFF0C{0}\uFF01