Struts2实现国际化

时间:2021-06-13 11:44:06
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>