5、struts2_国际化

1.     国际化概念:                                                                                   

国际化就是根据不同国家的用户在访问Web或其他类型的程序时,将各种信息以本地的常用形式显示出来,如用户在中国使用我们的程序,就会显示中文信息,在以英文为主的国家里,就会显示英文信息。还有就是一些信息的格式,如日期格式等。

2.     Struts2国际化                                                                                  

2.1属性文件(.properties   Property)

Struts2的国际化是建立在Java国际化的基础上,通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再获取得该资源文件中指定key对应的消息。

比如:

        英文的资源文件:username=username  html=page

        中文的资源文件:username=用户名 html=网页

在界面有一个文本框使用了国际化标签获取了username对应的值,那么如果使用英文的浏览器获取到的username的值就是username,中文的话就是用户名,可以实现一个应用同时部署到不同的国家,并且页面使用当地的语言。

【注意】每一种语言应该至少对应一个属性文件。

从属性文件中获得字符串信息是国际化的基本应用。在Struts2中使用的属性文件就是Java属性文件,扩展名为properties。

Struts2中的国际化标签默认是到action的同一级目录去找与action类名相同的属性文件,比如 MyAction.java 对应的属性文件是MyAction.properties属性文件。但这样的话每一个action都会产生一个属性文件,不方便管理与维护。为了统一管理一般情况下都会把资源文件放在应用的classes目录下。就是项目的src目录下,与struts.xml同一个目录。这样的话每一个国家都只需要一个属性文件即可。

属性文件名

Struts2在struts.xml中设置一个常量可以指定属性文件的前缀比如:

struts.custom.i18n.resources=message

该常量表示指定属性文件的默认前缀,在src目录下有个message_zh_CN.properties那么这个文件会被struts2读取。还一种情况就是如果在界面取属性文件的文本时指定了文件名,那么会优先读取指定文件,如果struts找不到指定的文件,也会去使用默认的属性文件。

 

2.2国际化标签

Struts2通过struts2的标签来提供国际化的支持,就是说我们只必要编写好不同国家

的对应的属性文件,然后在界面使用struts2标签就可以实现在不同的国家显示不同的界面元素。

Struts2国际化相应的标签。

<s:textvalue=”userName”/>text 标签用于从属性文件中读出文本

<s:i18n/>    i18N 标签用于指定资源文件

例如: 使用<s:il8n>标签。这个标签可以直接定位属性文件,如abc.properties在WEB-INF\classes\test目录下,则可以使用如下的代码读取abc.properties的内容:

<%@ taglib prefix="s" uri="/struts-tags" %>
<s:i18n name="test.abc ">
    <s:text name="save" />
     <s:text name="delete" />
</s:i18n>

3.     ResourceBundle使用详解                                                               

3.1 ResourceBundle类:

这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:

     l  轻松地本地化或翻译成不同的语言

     l  一次处理多个语言环境

     l  以后可以轻松地进行修改,支持更多的语言环境

这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties,如果是默认的,直接写为:自定义名.properties www.google.com.cn  www.google.com.hkwww.google.com.tw

比如:

message_en_US.properties         message_英文_美国.properties
message_zh_CN.properties         message_中文_中国.properties

message.properties                        默认文件

【注意】当在中文操作系统下,如果message_zh_CN.properties、message.properties两个文件都存在,则优先会使用message_zh_CN.properties,当message_zh_CN.properties不存在时候,会使用默认的message.properties。

没有提供语言和地区的资源文件是系统默认的资源文件。

代码示例:

本例中使用了两个属性文件,并且都在src目录下

3.2.1文件清单:


3.2.2代码清单:
public static void main(String[] args) {
		//表示一个语言环境 中国,简体中文 参数表示 语言,国家
		Locale locale1 = new Locale("zh", "CN"); 
		//通过ResourceBundle对象获取当前语言环境的属性文件,,
		//此处得到前缀为message_zh_CN.propertes文件
        ResourceBundle resb1 = ResourceBundle.getBundle("message", locale1);
        //得到属性文件的username属性
        System.out.println(resb1.getString("username")); 
        //获取系统默认的语言环境
        ResourceBundle resb2 = ResourceBundle.getBundle("message", Locale.getDefault()); 
        System.out.println(resb1.getString("username")); 
        //构造一个美式英文的语言环境 
        Locale locale3 = new Locale("en", "US"); 
        ResourceBundle resb3 = ResourceBundle.getBundle("message", locale3); 
        System.out.println(resb3.getString("username")); 
	}

【注意】资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.

3.4通过HttpServletRequest获取客户端的语言环境

HttpServletRequest req = (HttpServletRequest)request;
Locale locale = req.getLocale();


如上的代码将在控制台打印出  zh_CN  中文环境

3.4.1设置浏览器的语言环境

当然可以通过浏览器的设置修改语言环境

点击IE浏览器的internet选项


在弹出窗口中点击常规选项卡的语言按钮

在弹出窗口中点击添加可切换语言环境

在弹出窗口中可以看到大部分国家的语言标识和国家编码:

【注意】需要在弹出窗口中选择语言,并点击上移:


这样配置之后浏览器的语言环境就是美国英语环境了。

4.     Native2ascii命令的用法                                                                 

4.1只转换特定字符

native2ascii


在控制台中可以输入汉字回车后,就可以看到转移后的字符了。
Ctrl+C退出。

4.2转换properties文件

native2ascii message_zh_CN.input.propertiesmessage_zh_CN.properties

将文件message _zh_CN.input.properties编码后输出为message_zh_CN.properties。

4.3反向properties文件

native2ascii-reverse message_zh_CN.properties allMessages_zh_CN.txt

注意-reverse参数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未名胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值