首页 > 学院 > 开发设计 > 正文

Struts2(十三)国际化-internationalization

2019-11-14 23:34:54
字体:
来源:转载
供稿:网友
Struts2(十三)国际化-internationalization一、国际化是什么--I18N

即internationalization

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

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

二、java内置国际化

message_en_US.PRoperties

demo = hello world!userName = user namepassWord = passwordwelcome = welcome!

message_zh_CN.properties

demo = /u60A8/u597D/u4E16/u754C!userName = /u7528/u6237/u540Dpassword = /u5BC6/u7801welcome = /u6B22/u8FCE!

message.properties

demo = /u60A8/u597D/u4E16/u754C!userName = /u7528/u6237/u540Dpassword = /u5BC6/u7801welcome = /u6B22/u8FCE!

实现代码

<%@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 namepassword = passwordwelcome = welcome!submit =submitreset=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 namepassword = passwordwelcome = {0}welcome!{1}submit =submitreset=resetfail=login failedusermsg=user name do not emptyusermsglength=user name length is 2 to 16!pwdmsg=password do not emptypwdmsglength=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
九、资源文件查找顺序


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表