根据不同的国家配置不同的资源文件(资源文件有时也称为属性文件,后缀为.properties),所有的资源文件以键值对的形式出现。Java国际化程序_java

 

Locale类

Java国际化程序_java_02

 

ResourceBundle类

Java国际化程序_自动生成_03

 

//=================================================
// 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编码Java国际化程序_bundle_04

//=================================================
// 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