struts2国际化相关问题

国际化资源文件的方式:

  Action范围的
  包范围的
  临时的
  全局的(推荐)

一、配置全局的国际化资源文件
  1.在类路径下,创建国际化资源文件
    baseName.properties
    baseName_zh_CN.properties
    baseName_en_US.properties
    注:baseName的取值随意
  2.在国际化资源文件中键入键值对
  (1)不带占位符
    name=用户名(baseName_zh_CN.properties)
    name=UserName(baseName_en_US.properties)
  (2)带占位符
    time=时间:${0}(baseName_zh_CN.properties)
    time=Time:${0}(baseName_en_US.properties)
  3.在struts.xml文件中配置国际化资源文件的基名
    <constant name="struts.custom.i18n.resources" value="baseName"></constant>

二、访问国际化资源文件
  1.在Action类中
    如果Action类implements TextProvider,使用getText方法
  (1)不带占位符
    getText("name");
  (2)带占位符
    getText("time",Arrays.asList(new Date()));
  2.在jsp页面
  (1)不带占位符
    <s:textfield name="username" key="name"></s:textfield>或
    <s:textfield name="username" label="%{getText('name')}"></s:textfield>
  (2)带占位符
    使用<s:text>的<s:param>子标签来填充占位符
    <s:text name="time">
      <s:param value="date"></s:param>
      <!-- 假设值栈中有一个date属性 -->
    </s:text>

三、使用超链接进行国际化切换
  <a href="languageConvert.action?request_locale=en_US">english</a><br>
  <a href="languageConvert.action?request_locale=zh_CN">中文</a><br>
  执行过程:
  i18n拦截器(默认拦截器栈的一员)会自动查找请求中是否包含一个名为request_locale的请求参数,若有,拦截器就将该请求参数的值转换为Locale对象并保存在session域对象中。
  所以,在请求的超链接中加上名为request_locale的请求参数即可。请求参数的值必须是“语言_国家”。

四、在国际化资源文件中访问值栈中的属性
  使用${}
  例如在baseName_zh_CN.properties中,假设值栈中有一名为date的属性
    time=时间:${date }

原文地址:https://www.cnblogs.com/duanjiapingjy/p/7747539.html