你的位置:首页 > Java教程

[Java教程]Struts2(十三)国际化


一、国际化是什么--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.

  <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.

<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.

 

<??><!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

九、资源文件查找顺序