程序国际化及动态处理文本
来源:互联网 发布:上海斑马公寓知乎 编辑:程序博客网 时间:2024/06/12 00:47
一:程序国际化
国际化程序的理解:
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
- 程序国际化及动态处理文本
- Java常用类库——国际化程序(Locale,ResourceBundle以及MessageFormat处理动态文本)
- Struts动态文本国际化
- struts 动态文本国际化
- 国际化动态文本(MessageFormat)
- 1.Strut国际化动态文本(编程式处理异常):界面
- 2.Strut国际化动态文本(编程式处理异常)::ActionForm
- 3.Strut国际化动态文本(编程式处理异常)::Action
- 1.Strut国际化动态文本(声明式处理异常):界面
- 2.Strut国际化动态文本(声明式处理异常):ActionForm
- 3.Strut国际化动态文本(声明式处理异常):Action
- java常用类库:国际化&处理动态文本示例
- 4.Strut国际化动态文本(编程式处理异常)::业务逻辑层
- 5.Strut国际化动态文本(编程式处理异常)::struts-config.xml web.xml
- 6.Strut国际化动态文本(编程式处理异常)::资源文件
- 4.Strut国际化动态文本(声明式处理异常):业务逻辑层
- 5.Strut国际化动态文本(声明式处理异常):struts-config.xml web.xml
- 6.Strut国际化动态文本(声明式处理异常):struts-config.xml(全局异常配置)
- 经典DP:固定钱能换多少次+硬币个数限制(2069)
- JAVA的File类详解之目录列表器
- 第十三章 字符串
- Linux系统调用
- iOS -- 处理推送消息
- 程序国际化及动态处理文本
- ListView 优化篇:从 BaseViewHolder 到面向 Holder 的思想
- 详解 CSS 属性 - 伪类和伪元素的区别
- network
- PB中对SQL SERVER 2K 数据库的创建、备份与恢复
- 数据库三大范式
- 单例设计模式
- zookeeper原理
- Linux学习5之查找文件中的某个字符串并返回所在行号