Struts2 国际化(二十一)

国际化资源文件的搜索顺序 :action-->package--->parent package--->全局

先说,采用临时文件和 i18n 标签来访问多个范围内的资源文件
要在jsp页面同时应用多个范围的资源文件,就采用 i18n 标签来指定,而且还不需要在struts.xml中配置


1.properties属性配置文件 将下面 三种不同范围的资源文件,放在对应的目录下面
2.jsp页面
<body>
   ====访问全局资源文件
     <!--全局资源文件的 baseName-->
   <s:i18n name="globalMessages">
   	  <h3>
    		<s:text name="loginTitle"/>
    	</h3>
    	<s:form action="checkLogin" method="post">
    		<s:textfield name="loginName" key="loginName" />
    		<s:textfield name="loginPassword" key="loginPassword"/>    	
    		<s:submit key="loginBtn"/>
    		<s:token/>
    	</s:form>
    	<s:text name="loginName"></s:text>
   </s:i18n>
   
   ====访问package范围的资源文件
        <!--包资源文件的 完整路径->
    <s:i18n name="com.sh.action.package">
   	  <h3>
    		<s:text name="loginTitle"/>
    	</h3>
    	<s:form action="checkLogin" method="post">
    		<s:textfield name="loginName" key="loginName" />
    		<s:textfield name="loginPassword" key="loginPassword"/>    	
    		<s:submit key="loginBtn"/>
    		<s:token/>
    	</s:form>
   </s:i18n>
   
   ====访问Action范围的资源文件
       <!--Action范围资源文件的 完整路径->
    <s:i18n name="com.sh.action.LoginAction">
   	  <h3>
    		<s:text name="loginTitle"/>
    	</h3>
    	<s:form action="checkLogin" method="post">
    		<s:textfield name="loginName" key="loginName" />
    		<s:textfield name="loginPassword" key="loginPassword"/>    	
    		<s:submit key="loginBtn"/>
    		<s:token/>
    	</s:form>
   </s:i18n>
   
  </body>



再说全局资源文件 和 package 范围 和 action 范围的文件 有占位符的访问(需要配置)

1.Struts2框架将国际化信息定义在资源文件中,同时还需要在配置文件中对资源文明进行配置,告诉Struts2框架所有需要加载的资源文件。
baseName_language_country.properties

2.使用struts.xml文件
 
 <!--在struts.xml文件中配置国际化资源文件,一般是通过设置常量来实现。-->
  <constant name="struts.custom.i18n.resources" value="globaleMessages"/>

3.使用struts.properties文件
  如果在struts.properties文件中实现,则使用key-value的代码格式,配置代码如下:
   struts.custom.i18n.resources=globalMessages

4.使用web.xml文件
  如果在web.xml文件中实现,则使用<param-name> 和<param-value>元素,配置代码如下:
 
    <init-param>
      <param-name>struts.custom.i18n.resources</param-name>
      <param-value>globaleMessage</param-value>
    </init-param>


5.配置Struts2国际化资源信息需要两个值
  struts.custom.i18n.resources 和 globalMessages;
  struts.custom.i18n.resources 在struts2框架中 表示国际化的常量,是一个固定不变的值,
globalMessage
  表示全局国际化资源文件的basename值,所以对应的全局国际化资源文件,所以对应的全局国际化资源文件,可以是 globalMessage_zh_CN.properties,
globaleMessage_en_US.properties.等这些文件的命名格式符合
baseName_language_country的格式。

6.native2ascii 命令的使用
 
       //在 jdk bin 目录下 建一个记事本 temp.xml 
 userName=姓名
 userPassword=密码

   win+r cmd cd D:\ProgramFiles\Java\jdk1.6.0_17\bin 
   native2ascii temp.text globalMessages_zh_CN.properties
  


7.Struts2的国际化支持占位符,从而可以更加灵活的输出国际化信息,占位符鼻息使用参数来填充。
  A:在jsp中填充国际化资源信息是的占位符
   通过<s:text>标签中嵌套多个<s:param>标签来填充占位符。
B:在Action中填充国际化资源信息时的占位符
  这种情况在action中可以调用getTest()方法来填充占位符。

8.globalMessages_zh_CN.properties
loginBtn=登录
loginName=用户名
loginPassword=密码
loginTitle=用户登录
loginSuccess=欢迎 {0} 登录成功!


9.globalMessages_en_US.properties
loginBtn=Login
loginTitle=UserLogin
loginName=LoginName
loginPassword=LoginPassword
loginSuccess=welcome {0} login Success!


11.在action 中给占位符赋值 使用 getTest()
	public String  checkLogin(){
		this.message=this.getText("loginSuccess",new String[]{this.loginName});
		return SUCCESS;
	}


12.struts.xml
<struts> 
     <!-- 定义国际化资源文件的基本名称 -->
	<constant name="struts.custom.i18n.resources" value="globalMessages"/>
    <constant name="struts.i18n.encoding" value="utf-8"/>
    <package name="/user" extends="struts-default">
    	<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
			<result name="success">/index.jsp</result>    	
    	</action>
    </package>
</struts>


13.login.jsp  有占位符的访问
<body>
      <center>
         <h3>第一种方式,在jsp页面里面填充带占位符的国际化信息<h3>
      <s:text name="loginSuccess">
      	<s:param>
      		<s:property value="loginName"/>
      	</s:param>
      </s:text>
      <h3>第二种方式,在Action中填充带占位符的国际化信息</h3>
       <s:property value="message"/>
      </center>
 </body>


14.没有占位符的访问
<body>
    <center>
    	<h3>
    		<s:text name="loginTitle"/>
    	</h3>
    	<s:form action="checkLogin" method="post">
    		<s:textfield name="loginName" key="loginName"/>
    		<s:textfield name="loginPassword" key="loginPassword"/>    	
    		<s:submit key="loginBtn"/>
    		<s:token/>
    	</s:form>
    </center>
  </body>


package范围的资源文件 (在struts.xml中配置)
放在对应的包下面 命名:package_language_country.properties(固定格式)
com.ah.action/LoginAction.java
package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
	private String loginName;
	private String loginPassword;
	private String message;
	
	public String  checkLogin(){
		this.message=this.getText("loginSuccess",new String[]{this.loginName});
		return SUCCESS;
	}
}

properties
//中文 com.sh.action/package_zh_CN.properties
loginBtn=package:登录
loginName=package:用户名
loginPassword=package:密码
loginTitle=package:用户登录
loginSuccess=package:欢迎 {0} 登录成功!
// 英文 com.sh.action/package_en_US.properties
loginBtn=package:Login
loginTitle=package:UserLogin
loginName=package:LoginName
loginPassword=package:LoginPassword
loginSuccess=package:welcome {0} login Success!

struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts> 
     <!-- 定义包范围的 国际化资源文件的基本名称 package -->
	<constant name="struts.custom.i18n.resources" value="com.sh.action.package"/>

    <constant name="struts.i18n.encoding" value="utf-8"/>
    <package name="/user" extends="struts-default">
    	<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
			<result name="success">/index.jsp</result>    	
    	</action>
    </package>
</struts>



jsp
<body>
    <center>
    	<h3>
    		<s:text name="loginTitle"/>
    	</h3>
    	<s:form action="checkLogin" method="post">
    		<s:textfield name="loginName" key="loginName" />
    		<s:textfield name="loginPassword" key="loginPassword"/>    	
    		<s:submit key="loginBtn"/>
    		<s:token/>
    	</s:form>
    	<s:text name="loginName"></s:text>
    </center>
  </body>

Action范围的资源文件(在struts.xml中配置)
命名格式为:ActionName_language_country.properties 放action同一级目录下面

//英文 LoginAction_en_US.properties
loginBtn=Action:Login
loginTitle=Action:UserLogin
loginName=Action:LoginName
loginPassword=Action:LoginPassword
loginSuccess=Action:welcome {0} login Success!
//中文 LoginAction_zh_CN.properties
loginBtn=Action:登录
loginName=Action:用户名
loginPassword=Action:密码
loginTitle=Action:用户登录
loginSuccess=Action:欢迎 {0} 登录成功!


struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts> 
     <!-- 定义 Action 范围的国际化资源文件的基本名称 -->
	<constant name="struts.custom.i18n.resources" value="com.sh.action.LoginAction"/>
	
    <constant name="struts.i18n.encoding" value="utf-8"/>
    <package name="/user" extends="struts-default">
    	<action name="checkLogin" class="com.sh.action.LoginAction" method="checkLogin">
			<result name="success">/index.jsp</result>    	
    	</action>
    </package>
</struts>

action , jsp 和上面的一样

你可能感兴趣的:(s:i18n,占位符资源文件,全局资源文件,package资源文件,action资源文件)