java , WEB项目如何通过配置让其语言国际化可以使用用一些流行框架来解决国际化问题 。
在Struts2中,有两种进行国际化操作方式:
在Struts.properties文件中设置处理各种字符编码或者语言的属性文件 。并由此扩展这些属性文件,
让Web系统使用形成各种语言或信息格式化的配置信息 。
直接装载Struts2提供的自带信息资源包也可以实现 。
java 多语言国际化国际化的英文为Internationalization,这个也太长了,所以它又称为I18n(英文单词 internationalization的首末字符i和n,18为中间的字符数) 。
除了i18n还有L10n(localization),g11n(globalization),还有m17n(multilingualization),它们的区别是:
i18n支持多种语言,但是同一时间只能是英文和一种选定的语言,例如英文+中文、英文+德文、英文+韩文等等;
L10n(localization),支持2种语言,英文和另外一种语言(例如中文);
g11n(globalization),简单的理解可以认为g11n = i18n + L10n 。
m17n(multilingualization)可以在同一时间支持多种语言,例如你可以在一个页面里看到中文、英文、德文和韩文 。
为了使不同国家地区的人使用到适应他们环境和语言的软件或网站 , 国际化成为了Java的必要因素之一 。
国际化机制在软件开发过程中,使得软件与特定的语言或地区脱钩 。当我们做的软件被移植到其他国家时,不必更改软件本身的代码就可以适应当地区的使用了 , 所以,国际化是必须的 。
那么在Java中如何实现国际化呢?
通过学习后 , 我也了解了一些必要的入门知识 。
首先 , 我们可以通过测试代码获得本机操作系统的默认语言和区域 。
查看默认语言和区域:
测试代码:
1/**
2* @author 巨亚红
3* @date 2014-3-18 下午2:47:06
4* @版本 V1.0作者: 时间:修改:
5* @param args
6*/
7public static void main(String[] args) {
8Locale defaultLocale=Locale.getDefault();
9System.out.println("country="+defaultLocale.getCountry());
10System.out.println("language="+defaultLocale.getLanguage());
11}
测试结果:
如果将默认地区修改为美国的话 , 测试结果为:
我们需要将硬编码文本转移到外部的资源文件里,建立两个国际化资源文件:
名称=基本名称+Locale
1、设置资源文件 。
MessgesBundle_en_US.properties:
k1=hello
k2=good bye
MessgesBundle_zh_CN.properties:
k1=\u4F60\u597D
k2=\u518D\u89C1
2、利用ResourceBundle.getBundle(baseName, locale)来找到MessgesBundle_en_US.properties文件 。
ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", defaultLocale);
3、拿到k1和k2的value值 。
System.out.println("k1="+rb.getString("k1"));
System.out.println("k2="+rb.getString("k2"));
结果是:
当前的地区设置成为英语(美国):
当前的地区设置成为中文(简体 , 中国):
4、占位符的使用 。
设置当前Locale
//Locale currentLocale=new Locale("zh", "CN");
Locale currentLocale=new Locale("en", "US");
添加占位符:
利用类MessageFormat
1Locale currentLocale=new Locale("en", "US");
2ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", currentLocale);
3MessageFormat mf=new MessageFormat(rb.getString("k1"));
4System.out.println("k1="+mf.format(new Object[]{"Jessica"}));
结果为:
如果改成中文:
1Locale currentLocale=new Locale("zh", "CN"); //中文
2ResourceBundle rb=ResourceBundle.getBundle("MessgesBundle", currentLocale);
3MessageFormat mf=new MessageFormat(rb.getString("k1"));
推荐阅读
- 故宫淘宝直播男主播叫什么,故宫淘宝东西值不值
- 网络百科如何实现营销目的,网络如何进行营销
- 华为cie服务器,华为服务器介绍
- ps4服务器发生错误,ps4游戏显示服务器列表加载失败
- go语言break Go语言Web框架对比
- sap84软件,sap84软件介绍
- 石家庄游戏app开发搭建,石家庄游戏app开发搭建公司
- 直播虚假广告的定义是什么,直播间虚假宣传
- 宽带怎么和路由器连接,怎么将宽带和路由器连接