您的位置:首页 > 其它

程序国际化及动态处理文本

2016-03-17 19:28 253 查看
一:程序国际化

国际化程序的理解:

I18N :国际化程序

同一套程序代码可以在各个语言环境下进行使用。

各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,国际化就是完成这样一个功能。

Locale类:

Locale对象表示了特定的地理,政治和文化区域,需要Locale类来执行其任务的操作称为语言环境敏感的操作,使用Locale为用户量身定制信息。

使用Locale 类中的构造方法来创建、Locale

Locale (String language)

Locale(String language , String country )

通过静态方法创建Locale

getDefault ();

ResourceBundle 类

国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件,(文件后缀是 .properties)属性文件中的格式采用”key=value”的格式进行操作。

ResourceBundle类表示的是对一个资源文件的读取操作,所有的资源文件都需要ResourceBundle进行读取,读取的时候不需要加上文件的后缀。

国际化资源文件的命名规则如下:

<资源名>_<语言代码>_<国家/地区代码>.properties

如下:

Info_zh_CN.properties

定义两个资源文件如下:

(配置文件中的资源是按照键值对的形式存储的)

(关于下面的编码可以参考:http://blog.csdn.net/wannerwang/article/details/50876595)

Info_zh_CN.properties

username=\u7528\u6237\u540d

password=\u5bc6\u7801

input=\u8bf7\u8f93\u5165

info.success=\u6b22\u8fce\u4f7f\u7528\u5feb\u64ad

info.error=\u767b\u5f55\u5931\u8d25

Info_en_US.properties:

username=userName

password=passWord

input=please input

info.success=Welcome come to log in QVOD

info.error=Login fail

可以使用 java.util.ResourceBoundle.

ResourceBundle res = ResourceBundle.getBundle("com.xiyou.i18n.info",locale2);

下实例是通过一个用户登录程序,学习java的国际化。

测试类:

public class I18NDemo {

public static void main(String[] args) {

// 创建一个本地语言环境对象(简体中文)

Locale locale = new Locale("zh","US");

Locale locale2 = Locale.US;//方法二

// 模拟用户登录的功能

// 根据locale 的属性选择使用那个配置文件

ResourceBundle res = ResourceBundle.getBundle("com.xiyou.i18n.info",locale2);

Scanner in = new Scanner(System.in);

// 从绑定的资源文件中根据key 获取对应的value值。

String inputKey = res.getString("input");

String username = res.getString("username");

String passWord = res.getString("password");

String Success = res.getString("info.success");

String failure = res.getString("info.error");

System.out.println(inputKey+username);

String usname = in.next();

System.out.println(passWord);

String pass = in.next();

if ("admine".equals(usname) && "123".equals(pass)){

System.out.println(Success);

}else{

System.out.println(failure);

}

}

}

特别注意:自定义的配置文件必须和该类生成的.class文件一个目录下,否则会抛出如下异常:

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name com.xiyou.i18n.info, locale en_US

运行如下(选择的是英文):

please inputuserName

anmine

passWord

1234

Login fail

选择中文如下:

请输入用户名

andmine

密码

345

登录失败

二:处理动态文本

对于前面实例读取的内容都是固定的,如果现在假设想要打印Welcome XXX 具体的内容是不固定的,那么久要使用动态文本进行程序处理,进行动态文本处理就要使用 java.text.MessageFormat 类完成,此类是java.text.Format的子类。

MessageFormat 提供了以与语言无关方式生成连接消息的方式。使用此方法构造向终端用户显示的消息。

MessageFormat 获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置。

实现方法如下:

static String

format(String pattern, Object... arguments)

创建具有给定模式的 MessageFormat,并用它来格式化给定的参数

在配置文件中添加占位符{0} ,如下:

info.success=\u6b22\u8fce\u4f7f\u7528\u5feb\u64ad\uff0c{0}

测试类中添加代码:

// 处理动态文本 (第一个参数为模式(配置文件中修改信息), 第二个参数为真正替换的值)

String suinfo = MessageFormat.format(Success, usname);

System.out.println(suinfo);

运行效果如下:

请输入用户名

admine

密码

123

欢迎使用优酷,admine
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: