国际化程序:一套程序可以适用多个不同国家认的语言要求,那么这样的程序称为国际化程序。
如果要想实现国际化程序,则必须依靠Locale,ResourceBoundle,MessageFormat几个完成,并结合属性文件(*.properties)
Locale:表示的是一个地区,也就是说在国际化程序中通过Locale指定当前所在的地区,世界上各个国家都存在一个编号。
如果想创建Locale对象,可以有两种方法:
1,直接取出本地的语言;public static Locale getDefault();
2,指定一种语言,通过public Locale(String language,String country)指定语言和国家
实现国际化还需要一个属性文件配合,一个地区的Locale对象都应该对应一个不同的属性文件。找到属性文件之后,下一步就需要将内容读取出来,所有的内容需要依靠ResourceBundle类读取。
ResourceBundle类
此类首先是在java.util中定义的类,使用时会通过里面的静态方法取得实例,有两种方式:
1,根据本机的Locale取得属性文件:public static final ResourceBundle getBundle(String baseName)
2,根据指定的Locale取得属性文件:public static final ResourceBundle getBundle(String baseName,Locale locale)
在本地程序bin文件夹下新建属性文件,命名要求:属性名称_区域名称.properties
中文:Message_zh_CN.properties
英文:Message_en_US.properties
在其中写入“你好”的UNICODE编码,可以使用jdk/bin/目录下的,trimnative2ascii.exe
中文属性文件:info=\u4f60\u597d
英文属性文件:info=hello
其中info表示键值,\u4f60\u597d为属性的value,操作时使用键值取出value值。
Demo1以计算机本地的语言显示属性值
import java.util.Locale;
import java.util.ResourceBundle;
public class MyDemo {
public static void main(String args[])
{
Locale loc=Locale.getDefault();
ResourceBundle rb=ResourceBundle.getBundle("Message", loc);
String value=rb.getString("info");
System.out.print("内容为:"+value);
}
}
Demo2多语言国际化
import java.util.Locale;
import java.util.ResourceBundle;
public class MyDemo {
public static void main(String args[])
{
Locale chloc=new Locale("zh","CN");//指定中文环境
Locale enloc=new Locale("en","US");//指定英文环境
ResourceBundle chrb=ResourceBundle.getBundle("Message",chloc);
ResourceBundle enrb=ResourceBundle.getBundle("Message", enloc);
String zhvalue=chrb.getString("info");
String envalue=enrb.getString("info");
System.out.println(zhvalue);
System.out.println(envalue);
}
}
Demo3动态文本
在属性文件中加入占位符
中文属性:info=\u4f60\u597d,{0},{1},{2}
英文属性:info=hello,{0},{1},{2}
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class MyDemo {
public static void main(String args[])
{
Locale chloc=new Locale("zh","CN");//指定中文环境
Locale enloc=new Locale("en","US");//指定英文环境
ResourceBundle chrb=ResourceBundle.getBundle("Message",chloc);
ResourceBundle enrb=ResourceBundle.getBundle("Message", enloc);
String zhvalue=chrb.getString("info");
String envalue=enrb.getString("info");
System.out.println("中文内容为:"+MessageFormat.format(zhvalue, "123",22,"fds"));
System.out.println("英文内容为:"+MessageFormat.format(envalue, "123",22,"fds"));
}
}
输出内容:
中文内容为:你好,金政权,22,fds
英文内容为:hello,金政权,22,fds
public String MessageFormat.format(String str,Object ...value);