zoukankan      html  css  js  c++  java
  • 【Struts2学习笔记(12)】Struts2国际化


    (1)准备资源文件,资源文件的命名格式例如以下:

    baseName_language_country.properties
    baseName_language.properties
    baseName.properties
    当中baseName是资源文件的基本名。我们能够自己定义,但language和country必须是java支持的语言和国家。如:
    中国大陆: baseName_zh_CN.properties
    美国: baseName_en_US.properties


    如今为应用加入两个资源文件:
    第一个存放中文:lc_zh_CN.properties
    内容为:welcome=欢迎来到乐程
    第二个存放英语(美国): lc_en_US.properties
    内容为: welcome=welcome to lc



    (注:对于中文的属性文件,我们编写好后,应该使用jdk提供的native2ascii命令把文件转换为unicode编码的文件。

    命令的使用方式例如以下:
    native2ascii  源文件.properties  目标文件.properties

    可是眼下的编译器都支持直接编辑了)

    (2)配置全局资源与输出国际化信息

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

    <constant name="struts.custom.i18n.resources" value="lc" />
    配置文件例如以下:

    <?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>
    	<!-- 定义所有范围的资源文件    value是 资源文件的基本名 -->
    	<constant name="struts.custom.i18n.resources" value="lc" />
    	
    	<package name="person" namespace="/person" extends="struts-default">
    		<action name="manage" class="cn.lc.action.PersonManageAction">
    			<result name="message">/WEB-INF/page/message.jsp</result>
    		</action>
    	</package>
    </struts>
    

    lc为资源文件的基本名。

    (3)訪问国际化资源

    1.在JSP页面中使用<s:text name=“”/>标签输出国际化信息:
    <s:text name=“welcome”/>。name为资源文件里的key

      <body>
        <s:text name="welcome" />
      </body>
    2.在Action类中,能够继承ActionSupport。使用getText()方法得到国际化信息。该方法的第一个參数用于指定资源文件里的key。
    在表单标签中,通过key属性指定资源文件里的key。如:

    public class PersonManageAction extends ActionSupport {
    
    	@Override
    	public String execute() throws Exception {
    		// TODO Auto-generated method stub
    		ActionContext.getContext().put("message", this.getText("welcome")); //存放在request域中
    		return "message";
    	}
    }
    
    message视图代码:

      <body>  
       ${message }  
      </body>

    (4)输出带占位符的国际化信息


    当资源文件里含有占位符时

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

    <s:text name="welcome">
      	 <s:param><s:property value="realname"/></s:param>
    	<s:param>学习</s:param>
    </s:text>
    2.在Action类中获取带占位符的国际化信息。能够使用getText(String key, String[] args)或getText(String aTextName, List args)方法。
    public class PersonManageAction extends ActionSupport {
    
    	@Override
    	public String execute() throws Exception {
    		ActionContext.getContext().put("message", this.getText("welcome",new String[]{"liming","study"})); //填充占位符
    		return "message";
    	}	
    }

    (5)包范围资源文件

    1.在一个大型应用中。整个应用有大量的内容须要实现国际化。假设我们把国际化的内容都放置在全局资源属性文件里,显然会导致资源文件变的过于庞大、臃肿,不便于维护。这个时候我们能够针对不同模块。使用包范围来组织国际化文件。

    2.方法例如以下:
    在java的包下放置package_language_country.properties资源文件,package为固定写法,处于该包及子包下的action都能够訪问该资源。当查找指定key的消息时。系统会先从package资源文件查找。当找不到相应的key时,才会从常量struts.custom.i18n.resources指定的资源文件里寻找。


    3.用法是一样的 知识系统查找的顺序不同。

    (6)Action范围资源文件

    1.我们也能够为某个action单独指定资源文件,方法例如以下:
    在Action类所在的路径,放置ActionClassName_language_country.properties资源文件,ActionClassName为action类的简单名称。


    2.当查找指定key的消息时。系统会先从ActionClassName_language_country.properties资源文件查找,假设没有找到相应的key,然后沿着当前包往上查找基本名为package 的资源文件,一直找到最顶层包。

    假设还没有找到相应的key。最后会从常量struts.custom.i18n.resources指定的资源文件里寻找。

    (7)JSP中直接訪问某个资源文件

    1.前边的使用我们都是先要配置之后才干够使用国际化资源的,那么可不能够不配置就能够使用?答案是肯定的。

    2.struts2为我们提供了<s:i18n>标签,使用<s:i18n>标签我们能够在类路径下直接从某个资源文件里获取国际化数据,而无需不论什么配置:
    <s:i18n name="lc">  <!-- lc为类路径下资源文件的基本名。 -->
        <s:text name=“welcome”/>
    </s:i18n>
    3.假设要訪问的资源文件在类路径的某个包下。能够这样訪问:
    <s:i18n name=“cn/lc/action/package">  
      <span style="white-space: pre;">	</span><s:text name="welcome">
      <span style="white-space: pre;">		</span><s:param>小张</s:param>
      <span style="white-space: pre;">	</span></s:text>
    </s:i18n>
    上面訪问cn.lc.action包下基本名为package的资源文件 也能够是PersonManageAction 博鳌是訪问的是该Action的PersonManageAction下边的资源文件。


    注:转载请注明出处!



  • 相关阅读:
    使用 ASP.NET Core MVC 创建 Web API(五)
    使用 ASP.NET Core MVC 创建 Web API(四)
    使用 ASP.NET Core MVC 创建 Web API(三)
    使用 ASP.NET Core MVC 创建 Web API(二)
    使用 ASP.NET Core MVC 创建 Web API(一)
    学习ASP.NET Core Razor 编程系列十九——分页
    学习ASP.NET Core Razor 编程系列十八——并发解决方案
    一个屌丝程序猿的人生(九十八)
    一个屌丝程序猿的人生(九十七)
    一个屌丝程序猿的人生(九十五)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7057676.html
Copyright © 2011-2022 走看看