java 程序国际化是什么与实现举例
国际化程序实现:
1. 一套程序可以同时适应多个国家人的语言需求,这个程序称为国际化程序;
2.实现国际化程序,涉及到以下类或文件:
1.java.util.Locale,
2.java.util.ResourceBundle,
3.java.text.MessageFormat,
4.*.properties文件;
3. Locale类,表示一个地区,通过他的对象指定当前所在地区; 中国:zh_CN, 美国:en_US;
创建Local对象的两种方式:
1.直接取得本机的语言环境:
public static Locale getDefault();
- 直接指定一种显示的语言:
public Locale(String language, String country); // 使用构造器创建对象,
4. 指定了语言环境后,还需要一个属性文件,用来存储属性数据信息,一个地区的不同Locale实例对象需要不同的properties文件,
从properties文件中取得属性内容,由ResourceBundle类获取;
5. ResourceBundle类,可以使用其静态方法将属性文件和语言环境Locale对象绑定并返回;
有两种方式取出属性文件的内容:
1.根据本机的Locale对象,取得属性文件;
public static final ResourceBundle getBundle(String baseName); // baseName表示属性文件名;
2.根据指定的Locale对象,取得属性文件;
public static final ResourceBundle getBundle(String baseName, Locale locale);
后者更常用;
6. 属性文件:
名称:Message.properties, 内容: info = Hello
其中,info表示键值key,Hello表示value,可以由key取得value;
——- 显示本机语言环境下的属性文件数据;
import java.util.Locale;
import java.util.ResourceBundle;
public class Naitional
{
public static void main(String[] args)
{
Locale loc = Locale.getDefault(); // 获取本机语言
ResourceBundle rb = ResourceBundle.getBundle(“Message”, loc); // 绑定语言方式与数据文件,获取当前语言风格下的数据
String value = rb.getString(“info”); // 通过key获取对应的value
System.out.println(“info = ” + value);
}
}
/*
administrator@xu-desktop:~$ java Naitional
info = “ä½ å¥½”;
输出了乱码:说明需要转码:properties文件里的中文必须转码为UNICODE编码;
java提供了16进制转码工具:/usr/lib/jvm/java-6-sun-1.6.0.15/bin/native2ascii;
将转码的内容复制到properties文件中:
administrator@xu-desktop:~$ java Naitional
info = 你好
*/
———– 根据不同语言环境显示不同的语言数据;
import java.util.Locale;
import java.util.ResourceBundle;
public class Naitional
{
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 chValue = chRb.getString(“info”); // 通过key获取对应的value
String enValue = enRb.getString(“info”);
System.out.println(“info = ” + chValue);
System.out.println(“info = ” + enValue);
}
}
/*
administrator@xu-desktop:~$ java Naitional
info = 你好
info = Hello!
如果 Message_zh_CN.properties 文件存在,则优先找他;
否则找Message.properties默认文件;
Message_en_US.properties也是如此;
*/
————–动态文本处理:通过占位符动态显示属性信息;
import java.util.Locale;
import java.util.ResourceBundle;
import java.text.MessageFormat;
public class Naitional
{
public static void main(String[] args)
{
Locale chLoc = new Locale(“zh”, “CN”); // 获取中文语言环境
ResourceBundle chRb = ResourceBundle.getBundle(“Message”, chLoc); // 绑定中文环境与数据文件,获取当前语言风格下的数据
String chValue = chRb.getString(“info”); // 通过key获取对应的value
System.out.println(“info = ” + MessageFormat.format(chValue, “张三”, 80)); // 通过属性文件中占位符{0} {1} 预先为动态值设置,张三,80都是动态值;
}
}
/*
administrator@xu-desktop:~$ java Naitional
info = 你好 张三 80
Message_zh_CN.properties的内容:
info = \u4f60\u597d {0} {1}
*/
—–首先写一个资源绑定清单类代替资源文件;
import java.util.ListResourceBundle;
public class Message_zh_CN extends ListResourceBundle // ListResourceBundle类可以代替资源文件 ,必须是public的,否则无法访问
{
Object[][] data ={{“info”, “你好,{0},年龄:{1}!”}}; // 数组保存数据:
protected Object[][] getContents()
{
return this.data; // 返回数组;
}
}
—–访问资源类:发现和上面的过程完全相同
package com.mldn;
import java.util.Locale;
import java.util.ResourceBundle;
import java.text.MessageFormat;
public class ResourceClass
{
public static void main(String[] args)
{
Locale chLoc = new Locale(“zh”, “CN”); // 获取中文语言环境
ResourceBundle chRb = ResourceBundle.getBundle(“Message”, chLoc); // 绑定中文环境与数据文件,获取当前语言风格下的数据
String chValue = chRb.getString(“info”); // 通过key获取对应的value
System.out.println(“info = ” + MessageFormat.format(chValue, “张三”, 80)); // 通过属性文件中占位符{0} {1} 预先为动态值设置,张三,80都是动态值;
}
}
/*
administrator@xu-desktop:~$ java com.mldn.ResourceClass
info = 你好,张三,年龄:80!
MessageFormat.format(…)对以下文件的访问顺序;
当同一个目录同时存在如下文件:
1. Message_zh_CN.properties
2. Message.properties
3. Message.java
4. Message_zh_CN.java
— 以上程序首先方法的是: Message_zh_CN.java,其次是Message.java,Message_zh_CN.properties,Message.properties;
但通常不会使用类,而是使用属性文件properties;
*/
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java 程序国际化是什么与实现举例》
本文地址:http://www.xiupu.net/archives-184.html
关注公众号:
微信赞赏
支付宝赞赏