public class I18nAction extends ActionSupport { private static final long serialVersionUID = -6933309304624396640L; public String reg() { return "success"; } public String toRegView() { System.out.println("toRegView"); return "regView"; } }
struts.xml配置文件
<?xml version="1.0"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <package name="I18nPkg" namespace="/i18n" extends="struts-default"> <action name="I18nAction_*" class="struts2.i18n.I18nAction" method="{1}"> <result name="success">/i18n/reg.jsp</result> <result name="regView">/i18n/reg.jsp</result> </action> </package> </struts>
reg.jsp
<html> <head> <title>reg.jsp</title> </head> <body> <s:form namespace="/i18n" action="I18nAction_toRegView" method="post" theme="xhtml"> <s:textfield name="name" key="label.name" /> 标签中使用key 就会自动使用国际化功能 <s:submit /> </s:form> </body> </html>
默认的配置文件:
I18nAction.properties 内容如下:
label.name=userName
简体中文配置文件:
I18nAction_zh_CN.properties
label.name=用户名
美式英语的配置文件 I18nAction_en_US.properties
label.name=要显示的名称
以此命名规则:
英式英语的配置文件 I18nAction_en_UK.properties
完成上述的步骤即可实现国际化,可以通过修改浏览器选项中的语言,来修改语言测试、
有时候是想让用户手动的去选择国际化,那么如何让用户从给定的国际化中选择语言呢????????
使用ognl表达式来构建各种语言的map对象。
<html> <head> <title>reg.jsp</title> </head> <body> <s:form namespace="/i18n" action="I18nAction_toRegView" method="post" theme="xhtml"> <s:select name="request_locale" list="#{'zh-CN':'简体中文'
'zh-TW':'繁体中文',
'en-US':'美式英语',
'en-UL':'英式英语',
'ja-JP':'日语'}"
listKey="key" listValue="value" onchange="this.form.submit();" value="locale"> 一定要设置value。否则不会回显,每次选择其他的后,语言选择框又选择第一个了。
Struts2中有个i18n的拦截器,就把当前选择的语言存储到session的属性中,key为locale
</s:select> <s:textfield name="name" key="label.name" /> <s:submit /> </s:form> </body> </html>
可以在源码中有个Local.class文件,里面定义了各种国际化的语言。ognl表达式可以调用静态的方法。同样可以达到上面的效果。
<html> <head> <title>reg.jsp</title> </head> <body> <s:form namespace="/i18n" action="I18nAction_toRegView" method="post" theme="xhtml"> <s:select name="request_locale" list="#{@java.util.Locale@CHINA:@java.util.Locale@CHINA.getDisplayName(@java.util.Locale@CHINA), @java.util.Locale@*:@java.util.Locale@*.getDisplayName(@java.util.Locale@*), @java.util.Locale@US:@java.util.Locale@US.getDisplayName(@java.util.Locale@US), @java.util.Locale@UK:@java.util.Locale@UK.getDisplayName(@java.util.Locale@UK), @java.util.Locale@JAPAN:@java.util.Locale@JAPAN.getDisplayName(@java.util.Locale@JAPAN)}" listKey="key" listValue="value" onchange="this.form.submit();" value="locale"> </s:select> <s:textfield name="name" key="label.name" /> <s:submit /> </s:form> </body> </html>