zoukankan      html  css  js  c++  java
  • Struts2(十三)国际化-internationalization

    一、国际化是什么--I18N

     即internationalization

    首字母i-结束字母n之间有18个字母

    特征:在程序不做修改的情况下,可以根据不同的语言环境显示相应内容

    二、Java内置国际化

     

    message_en_US.properties

    demo = hello world!
    userName = user name
    password = password
    welcome = welcome!

    message_zh_CN.properties

    demo = u60A8u597Du4E16u754C!
    userName = u7528u6237u540D
    password = u5BC6u7801
    welcome = u6B22u8FCE!

    message.properties

    demo = u60A8u597Du4E16u754C!
    userName = u7528u6237u540D
    password = u5BC6u7801
    welcome = u6B22u8FCE!

    实现代码

    <%@page import="java.util.ResourceBundle"%>
    <%@page import="java.util.Locale"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试</title>
    </head>
    <body>
    <h1>测试页面</h1>
    <%
    //获取当前已经安装的语言数组
    Locale [] locals=Locale.getAvailableLocales();
    //遍历数组
    for(Locale local:locals){
        //国家+国家代码
        out.print("国家:    "+local.getDisplayCountry()+"     国家代码:"+local.getCountry()+"   ");
        //语言+语言代码
        out.println("语言:  "+local.getDisplayLanguage()+"   语言代码:"+local.getLanguage()+"<hr/>");
    }
    //引用语言            此处可以更改
    Locale ls=Locale.getDefault();
    //使用哪个资源文件
    ResourceBundle rb=ResourceBundle.getBundle("message",ls);
    //输出
    out.println(rb.getString("demo"));
    out.println(rb.getString("userName"));
    out.println(rb.getString("password"));
    out.println(rb.getString("welcome"));
    %>
    </body>
    </html>

    三、Struts2实现

     准备全局资源文件:通常至少三个文件

    命名规则:前缀名_语言_国家.properties

    内容格式:key=value

    指定资源文件(设置常量)

    1.struts.xml文件中:

        <constant name="struts.custom.i18n.resources" value="message" />

    2.struts.properties中:

    struts.custom.i18n.resources=message
    <s:text name="demo"></s:text>
    <s:text name="userName" />
    <s:text name="password" />
    <s:text name="welcome" />

    更改资源文件

    message.properites

    demo = 您好世界!
    userName = 用户名
    password = 密码
    welcome = 欢迎!
    submit =提交
    reset=重置

    message_zh_CN.properties

    demo = 您好世界!
    userName = 用户名
    password = 密码
    welcome = 欢迎!
    submit =提交
    reset=重置

    message_en_US.properties

    demo = hello world!
    userName = user name
    password = password
    welcome = welcome!
    submit =submit
    reset=reset
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试</title>
    </head>
    <body>
    <s:text name="demo"></s:text>
    <s:text name="userName" />
    <s:text name="password" />
    <s:text name="welcome" />
    <s:form action="" method="post">
    <s:textfield key="userName" />
    <s:password  key="password"/>
    <s:submit key="submit"/>
    <s:reset key="reset" />
    </s:form>
    </body>
    </html>

    四、Action类实现国际化

    message.properties

    demo = 您好世界!
    userName = 用户名
    password = 密码
    welcome = {0}欢迎!{1}
    submit =提交
    reset=重置
    fail=登录失败
    usermsg=用户名不能为空
    usermsglength=用户名的长度为2-16位
    pwdmsg=密码不能为空
    pwdmsglength=密码的长度为2-16位

    message_zh_CN.properties同上

    message_en_US.properties

    demo = hello world!
    userName = user name
    password = password
    welcome = {0}welcome!{1}
    submit =submit
    reset=reset
    fail=login failed
    usermsg=user name do not empty
    usermsglength=user name length is 2 to 16!
    pwdmsg=password do not empty
    pwdmsglength=password length is 2 to 16!

    struts.xml

    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
        <constant name="struts.custom.i18n.resources" value="message" />
        <package name="default" namespace="/" extends="struts-default">
        <action name="login" class="action.LoginAction" method="login">
        <result name="success">
        /demo.jsp
        </result>
        <result name="input">
        /demo.jsp
        </result>
        </action>
     </package>
    </struts>

    demo.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>测试</title>
    </head>
    <body>
    <%-- <s:text name="demo"></s:text>
    <s:text name="userName" />
    <s:text name="password" />
    <s:text name="welcome" /> --%>
    <s:form action="login.action" method="post">
    <s:textfield name="username" key="userName" />
    <s:password  name="password" key="password"/>
    <s:submit key="submit"/>
    <s:reset key="reset" />
    </s:form>
    <hr/><br/>
    <s:actionmessage />
    <s:debug/>
    </body>
    </html>

    LogionAction

    package action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport {
        private String username;
        private String password;
    
        public String login() {
            if ("admin".equalsIgnoreCase(username)
                    && "admin".equalsIgnoreCase(password)) {
    
                this.addActionMessage(this.getText("welcome", new String[] {
                        username,password}));
                return SUCCESS;
            }
            this.addActionMessage(this.getText("fail"));
            return INPUT;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
    }

    LogionAction.login()验证文件

    LogionAction-login-validation.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
            "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
    <validators>
    <field name="username">
    <field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>${getText("usermsg")}</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="trim">true</param>
    <param name="minLength">2</param>
    <param name="maxLength">16</param>
    <message>${getText("usermsglength")}</message>
    </field-validator>
    </field>
    <field name="password">
    <field-validator type="requiredstring">
    <param name="trim">true</param>
    <message>${getText("pwdmsg")}</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="trim">true</param>
    <param name="minLength">2</param>
    <param name="maxLength">16</param>
    <message>${getText("pwdmsglength")}</message>
    </field-validator>
    </field>
    
    </validators>

    五、Jsp页面国际化传参数 

    <!-- First Example -->
    <s:i18n name="struts.action.test.i18n.Shop">
        <s:text name="main.title"/>
    </s:i18n>
    
    <!-- Second Example -->
    <s:text name="main.title" />
    
    <!-- Third Examlpe -->
    <s:text name="i18n.label.greetings">
       <s:param >Mr Smith</s:param>
    </s:text>
    <s:text name="welcome">
    <s:param>admin</s:param>
    <s:param>ffff</s:param>
    </s:text>

     六、资源查找顺序

    七、在JSP中使用国际化

    使用UI表单标志时,getText可以用来设置label属性,例如: <s:textfield name="name" label="%{getText('UserName')}"/>

    八、资源文件里使用OGNL表达式

    许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们可以通过在资源文件的国际化字符串中使用OGNL做到这点: 格式为${表达式},例如:

    validation.require=${fileName} is required

    九、资源文件查找顺序

  • 相关阅读:
    Hadoop学习路线图
    windows命令——taskmgr 1
    windows命令——explorer
    windows命令——taskkill
    struts tags
    jsp的 javascript中 嵌套 html 注释
    netstat
    没有、不愿、不能足够交流、沟通的开发、测试,将是悲剧
    linux java so 历险
    linux java 版本
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4385233.html
Copyright © 2011-2022 走看看