java 程序国际化是什么与实现举例

国际化程序实现:

1. 一套程序可以同时适应多个国家人的语言需求,这个程序称为国际化程序;
2.实现国际化程序,涉及到以下类或文件:
        1..util.Locale,
        2..util.ResourceBundle,
        3..text.MessageFormat,
                4.*.properties文件;
3. Locale类,表示一个地区,通过他的对象指定当前所在地区; 中国:zh_CN, 美国:en_US;
创建Local对象的两种方式:
        1.直接取得本机的语言环境:

public static Locale getDefault();

  1. 直接指定一种显示的语言:

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 .util.Locale;

import .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 程序国际化是什么与实现举例
本文地址:https://www.zhiletu.com/archives-184.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微