国际化程序:一套程序可以适用多个不同国家认的语言要求,那么这样的程序称为国际化程序。

如果要想实现国际化程序,则必须依靠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);

posted on 2011-01-21 21:37  魔战  阅读(322)  评论(0编辑  收藏  举报