0
点赞
收藏
分享

微信扫一扫

国际化-配置全局资源与输出国际化信息及带占位符

小磊z 2023-04-27 阅读 55


知识点:

<1、国际化:

准备资源文件,资源文件的命名格式如下:
baseName_language_country.properties
baseName_language.properties
baseName.properties
其中baseName是资源文件的基本名,我们可以自定义,但language和country必须是java支持的语言和国家。如:
中国大陆: baseName_zh_CN.properties
美国: baseName_en_US.properties

现在为应用添加两个资源文件:
第一个存放中文:itcast_zh_CN.properties
内容为:welcome=欢迎来到传智播客
第二个存放英语(美国): itcast_en_US.properties
内容为: welcome=welcome to itcast

对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。命令的使用方式如下:
native2ascii 源文件.properties 目标文件.properties

<2、配置全局资源与输出国际化信息:

当准备好资源文件之后,我们可以在struts.xml中通过struts.custom.i18n.resources常量把资源文件定义为全局资源文件,如下:

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


itcast为资源文件的基本名。

后面我们就可以在页面或在action中访问国际化信息:
在JSP页面中使用<s:text name=“”/>标签输出国际化信息:
<s:text name=“user”/>,name为资源文件中的key
在Action类中,可以继承ActionSupport,使用getText()方法得到国际化信息,该方法的第一个参数用于指定资源文件中的key。
在表单标签中,通过key属性指定资源文件中的key,如:

<s:textfield name="realname" key="user"/>



<3、国际化—输出带占位符的国际化信息:


在jsp页面中输出带占位符的国际化信息

<s:text name="welcome"> 

 <s:param><s:property value="realname"/></s:param> 

 <s:param>学习</s:param> 

</s:text>



在Action类中获取带占位符的国际化信息,可以使用getText(String key, String[] args)或getText(String aTextName, List args)方法。




照样实现步骤如下:

第一步:按照上面知识点规则编写国际化配置文件(全局范围)
名字:myresource_en_US.properties、myresource_zh_CN.properties

注意:在包范围的国际化资源:

首先是文件的命名package_en_US.properties、package_zh_CN.properties
然后是将这些包范围的文件放在包下就可以了。他们的访问顺序是先从包范围中寻找资源如果没有资源就继续向上层包中寻找如果包中都没有就从全局资源文件中寻找


注意:在Action范围的国际化资源:


这里因为是Action范围中的所有这里指定了资源文件名为这个Action的名称同样放在这里Action所在的包中(globalResourceAction是Action的名字)
首先是文件的命名globalResourceAction_en_US.properties、package_zh_CN.properties
然后是将这些包范围的文件放在包下就可以了。他们的访问顺序是先从包范围中寻找资源如果没有资源就继续向上层包中寻找如果包中都没有就从全局资源文件中寻找



注意:国际化—JSP中直接访问某个资源文件


struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们可以在类路径下直接从某个资源文件中获取国际化数据,而无需任何配置:

<s:i18n name="itcast"> 

 <s:text name=“welcome”/> 

</s:i18n>


Itcast为类路径下资源文件的基本名。

如果要访问的资源文件在类路径的某个包下,可以这样访问:

//访问指定包范围的国际化资源 

<s:i18n name="com/liyong/globalResource/package"> 

 <s:text name="welcome"> 

 <s:param>小张</s:param> 

 </s:text> 

</s:i18n> 


//访问指定Action范围的国际化资源 

<s:i18n name="com/liyong/globalResource/globalResourceAction"> 

 <s:text name="welcome"> 

 <s:param>小张</s:param> 

 </s:text> 

</s:i18n>



上面访问cn.itcast.action包下基本名为package的资源文件。





内容:

welcome={0} welcome {1}、welcome={0} \u6B22\u8FCE {1}


注意:这是myeclipse7.1会自动转换为unicode 见知识点。

文件放在类路径下也就是src后着lib目录下

第二步:配置structs.xml文件

<?xml version="1.0" encoding="UTF-8" ?> 

<!DOCTYPE struts PUBLIC 

 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 

 "http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 

<!--下面常量指定资源文件基础名--> 

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

 <package name="itcast" namespace="/test" extends="struts-default"> 

 <action name="golbalResource" class="com.liyong.globalResource.globalResourceAction" > 

 <result name="message">/WEB-INF/page/message.jsp</result> 

 <!-- 访问路径 http://localhost:8080/Structs2/test/sevletScope --> 

 </action> 

 </package> 

</struts>



第三步:编写页面index.jsp文件


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 

<% 

String path = request.getContextPath(); 

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 

%> 

<%@ taglib uri="/struts-tags" prefix="s" %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 

 <head> 

 <base href="<%=basePath%>"> 


 <title>My JSP 'index.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache"> 

 <meta http-equiv="cache-control" content="no-cache"> 

 <meta http-equiv="expires" content="0"> 

 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 

 <meta http-equiv="description" content="This is my page"> 

 <!-- 

 <link rel="stylesheet" type="text/css" href="styles.css"> 

 --> 

 </head> 


 <body> 

<!--这里标签访问全局资源文件的key=welcome 其中传递两个参数 

为对应的占位符--> 

 <s:text name="welcome"> 

 <s:param>liyong</s:param> 

 <s:param>come here !</s:param> 

 </s:text> 

 </body> 

</html>





第四步:这里为了在Action中访问资源文件编写action 名称:globalResourceAction

public class globalResourceAction extends ActionSupport{ 


 private String message; 


 public String getMessage() { 

 return message; 

 } 


 public void setMessage(String message) { 

 this.message = message; 

 } 


 @Override 

 public String execute() throws Exception { 

//下面获得的资源中第二个参数是占位符中对应的值 

 message=this.getText("welcome",new String[]{"liyong","come here!"}); 

 return "message"; 

 } 



}


第五步:编写一个返回视图 messag.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 

<%@ taglib uri="/struts-tags" prefix="s"%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 

 <head> 


 <title>My JSP 'message.jsp' starting page</title> 


 <meta http-equiv="pragma" content="no-cache"> 

 <meta http-equiv="cache-control" content="no-cache"> 

 <meta http-equiv="expires" content="0"> 

 </head> 


 <body> 

 ${message }<br/> 


 <br/> 

 <s:debug></s:debug> 

 </body> 

</html>



第六步:部署

访问页面:http://localhost:080/Native/index.jsp
访问action:http://localhost8080/Native/test/golbalResource

注意:改变浏览器的语言设置环境可以看到在不同的语言环境中出现不同语言内容:welcome={0} welcome {1}、welcome={0} \u6B22\u8FCE {1}
注意:这是myeclipse7.1会自动转换为unicode 见知识点。


举报

相关推荐

0 条评论