首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

研磨Struts2 之 第10三章 国际化

2013-11-09 
研磨Struts2 之 第十三章 国际化视频配套PPT,视频地址【?研磨Struts2视频课程】国际化(Internationalization

研磨Struts2 之 第十三章 国际化
视频配套PPT,视频地址【?研磨Struts2视频课程】国际化(Internationalization),通俗点讲就是让软件实现对多种语言的支持,可以通过简单的设置让软件支持的语言从一种切换到另一种。当然,最直观的就是界面显示了,比如一个实现了国际化的软件,可以很容易的从英文界面切换成中文界面。在日常工作中也常见到国际化的软件,比如Eclipse就是多语言的,只要安装了相应的语言包,在启动的时候指定语言参数就可以实现软件界面的快速转换。在设计多语言实现的时候,要注意两点:不能给软件开发带来过多的额外负担。在改变语言或者添加一种语言的时候,不能修改已经写好的软件。Struts2作为一款成熟的web框架,自然也支持国际化,使用Struts2的时候,只要把对应的资源文件放在指定的地方,不用修改程序的主体,就可以对应新的语言要求。如下三个文件作为国际化信息的文件。(1)默认语言文件:message.propertieslabela = labelalabelb = labelb(2)中文语言文件:message_zh_CN.propertieslabela = labela in zh_CNlabelb = labelb in zh_CN(3)英文语言文件:message_en_US.propertieslabela = labela in en_USlabelb = labelb in en_US在引用多语言信息的时候,要考虑三件事情:引用哪种语言。引用哪组多语言文件。引用这种语言的这组文件里的哪条信息。?示例代码://选择中文Locale locale1 = Locale.SIMPLIFIED_CHINESE;//选择message这组文件ResourceBundle bundle1 = ResourceBundle.getBundle("message",locale1);//选择其中的labela这一项System.out.println("bundle1=="+bundle1.getString("labela"));java代码:

//选择中文Locale locale1 = Locale.SIMPLIFIED_CHINESE;//选择message这组文件ResourceBundle bundle1 = ResourceBundle.getBundle("message",locale1);//选择其中的labela这一项String message = bundle1.getString("labela");//将参数合成进读出的国际化信息String info = MessageFormat.format(message, "201009290001");System.out.println(info);
只需要在struts.xml中设置一个常量:
java代码:
<constant name="struts.custom.i18n.resources" value="message"/>
其中的值message,就是这组文件名中共同的前缀。只需要在struts.xml中设置一个常量: ?
java代码:
<constant name="struts.locale" value="zh_CN"/>
java代码:
<constant name="struts.custom.i18n.resources" value="message"/>
这里设置的message就是一组国际化资源文件名的前缀。如果有多组国际化资源文件,则以逗号分隔。如“message,dictionary”,就表示还另有一套以dictionary为前缀名的国际化资源文件,这些文件都放在classpath的根目录上。类级资源文件最为复杂,并不仅是一种,而是分为四种:ActionClass:资源文件名称的前缀必须与Action类名一致,在上面的示例中使用的就是这种。MyInterface:资源文件名称的前缀必须与Action实现的某一个接口名称一致,这个实现关系也并不一定是直接的实现关系,也有可能是当前类实现的接口的父接口,也有可能是当前类的父类实现的接口。nMySuperClass:资源文件名称的前缀必须与Action的父类名一致,这个实现关系也并不一定是直接的继承关系,也可能是当前类的父类。如果动作类实现了ModelDriven接口,那么也会查找getModel方法返回类型的资源文件。如果多种资源文件同时出现,将遵照上述类型出现的顺序进行覆盖,即ActionClass最优先,它会覆盖其他所有的资源文件,最常用的也是ActionClass这种方式。java代码:
<s:text name="labelb"><s:param>ok</s:param></s:text>
java代码:
<s:i18n name="message"><s:text name="labela"/></s:i18n>
解释一下如何引用国际化信息资源,仍然分为三种情况讨论:全局级国际化信息资源:直接用文件前缀名即可—message。包级国际化信息资源:用这个包的全限定名—cn.javass.i18n。类级国际化信息资源:用这个类的全限定名—cn.javass. i18n.I18NAction。java代码:
<%@ taglib prefix="s" uri="/struts-tags" %><s:form><s:textfield name="name1" key="labela"/></s:form>
访问没有参数的国际化信息。直接调用最简单的getText(String aTextName)即可,传入国际化信息的key,这个在前面讲ActionSupport的时候,就示例过这种情况。访问有参数的国际化信息。调用可以设置参数的getText(String aTextName,String defaultValue,String… args),其中,第一个参数为国际化信息的key,第二个参数为找不到此key时返回的默认值,第三个String[]参数传入需要传给国际化信息的参数。(2)??浏览器设置单击【外观】中的【语言】,得到浏览器的语言对话框。点击添加按钮,在弹出的语言列表里面,选择“英语(美国)[en-US]”这个选项。选择优先的语言信息。(3)??由用户选择语言Struts2提供了最灵活的、也是级别最高的方式,那就是由用户选择语言。用户只要在提交请求的时候加上request_locale这个参数,并提供对应的值就可以自由选择语言了。这得力于Struts2的i18n内建拦截器,defaultStack拦截器栈引用了i18n拦截器,因此,能很方便的由用户来选择语言。i18n拦截器在Action运行之前会检查请求中是否包含了一个叫做“request_locale”的参数,如果存在此参数,则会用它的值建立一个Locale对象,并用这个Locale对象去覆盖Struts2的常量设置和浏览器的语言设置。除此之外,i18n拦截器还会把这个Locale对象放到名为WW_TRANS_I18N_LOCALE的Session属性中去,而这个属性也会覆盖Struts2的常量设置和浏览器的语言设置。因此,只需要传入一次request_locale参数,session就会记住用户的选择,整个网站就会都变成用户选择的语言了。(4)??三种方式的覆盖关系对于这三种指定语言种类的方式,其优先级为:用户指定参数 > struts.xml中配置常量 > 浏览器设置而且,用户参数指定的方式,只需要设置一次就可以了,在整个session生命周期内,都不用再次设置。?视频配套PPT,视频地址【?研磨Struts2视频课程】

热点排行