Java的Struts框架中配置国际化的资源存储的要点解析_java

1、资源文件命名

国际化资源文件命名格式如下:

basename_language_country.properties
basename_language.properties
basename.properties

其中basename为资源文件的基本名称,language和country必须是java支持的语言和国家。获取java支持的语言和国家代码如下:

Locale[] locales = Locale.getAvailableLocales();
    for(Locale locale:locales){
      System.out.println("country:" + locale.getCountry() + ",language:" + locale.getLanguage());
    }

2、资源文件的配置和获取

新建资源文件,在中文环境下,资源文件中的value值需要进行ascii转换,可以通过运行后输入native2ascii进行转换,另外本文中使用了eclipse的属性文件插件,因此直接显示为中文。属性文件配置如下:
info_en_US.properties

username=zhangsan

info_zh_CN.properties

username=张三

info_zh.properties

username=李四
password=lisi

info.properties

username=王五
password=wangwu
email=邮箱

另外,如果需要读取到属性文件中的值,需要在struts-config.xml文件中配置常量。

<!-- 使用资源文件名称 ,其中value值代表资源文件的baseName-->
  <constant name="struts.custom.i18n.resources" value="info"></constant>

页面获取资源文件的方式为通过struts标签<s:text/>,如下所示:

  <!-- 资源文件获取key值 -->
  <s:text name="username"/>
  <s:text name="password"/>
  <s:text name="email"/>

另外,如果在form表单中获取key值,方式如下:

<!--其中key值为资源文件中的key值,作用是为输入框添加label名称,和label的属性值一样。但是在常量中会导致key值不能够从属性文件获取对应的value-->
<s:textfield name="login.username" key="username"></s:textfield>

另请注意在常量<constant name="struts.ui.theme" value="simple"/>使用时会导致<s:textfield/>中的key值不能够从属性文件获取对应的value。
最后页面显示结果如下:

从以上的配置文件中可以看出这三个值的取值来源,由此可以看出,资源文件的搜索顺序如下:
先从basename_language_country.properties中寻找相关的key值,没有则寻找basename_language.properties中寻找相关的key值,没有则到basename.properties中寻找相关的key值,没有则显示为name的值。

3、属性文件中占位符的使用

属性文件配置内容如下:

username=张三,{0},{1}

在jsp中使用标签<s:param>值</s:param>进行参数的传递。

<s:text name="username">
  <s:param>你好</s:param>
  <s:param>欢迎你!</s:param>
</s:text>

4、action中应用资源文件

在action中使用资源文件,需要继承ActionSupport类,ActionSupport类实现了TextProvider, LocaleProvider这两个接口,其中TextProvider提供了获取资源文件值的方法getText()方法,而LocaleProvider接口只有一个getLocale()方法,用来获取Locale。
修改配置文件info_zh_CN.properties:

username=张三,{0},{1}
usernameError=用户名称不能为空!请确认!

在action中,获取属性文件方法如下:

this.getText("usernameError");

在action中使用占位符进行操作,代码如下:

this.getText("username", new String[]{"你好","欢迎你"});

5、包范围的资源文件

处于该包以及子包下的action都能访问到该资源文件,放置位置为某个包下面,命名格式为:package_language_country.properties。其中package为固定格式。配置文件package_zh_CN.properties如下:

username=包范围下的username

在包下面的action中可以使用getText(“username”)的方式获取。

6、action范围的资源文件

可以为某个单独的action指定一个属性文件,放置位置为某个action同级目录下。命名格式为

ActionName_language_country.properties


配置action范围的属性文件:

username=action范围内的username

action中同样使用getText(“username”)方法进行获取值。

7、资源文件的加载顺序

对于action的使用getText(key)值来说,当同时存在action范围内的属性文件、包范围内的属性文件和全局属性文件时,加载顺序如下:
首先,在指定action内的属性文件是否存在key值,如果存在,则取值,如果不存在,则查找当前action上一级包中是否存在指定key值的包范围属性文件,不存在则继续上一级包中寻找,如果一直没有找到,则在全局的属性文件中寻找是否存在指定key值。如果存在指定的key值,则取出key值对应的value值,如果不存在,则默认为key值。
另外,当全局属性文件,有多个资源文件时,需要按照basename_language_country、basename_language、basename的顺序进行寻找。

8、页面获取资源文件

(1)使用<s:i18n/>访问某个资源文件。
代码如下:

  <!-- 使用i18n标签获取属性文件 -->
  <!-- 获取包范围下的资源文件 -->
  <s:i18n name="com/struts/package">
    <s:text name="username"></s:text>
  </s:i18n>
  <!-- 获取action范围下的资源文件 -->
  <s:i18n name="com/struts/service/LoginService">
    <s:text name="username"></s:text>
  </s:i18n>

(2)<fmt/>的使用
JSTL中包含了国际化和格式化标签,使用国际化标签可以让一个jsp页面可以根据访问者所在的区域输出不同语言的页面表述。在此需要使用Maven添加依赖jar包。配置文件如下:

 <!-- 引入jstl标签库 -->
  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>

在jsp页面使用fmt标签,应用代码如下:

<!-- 使用jstl标签fmt -->
  <!-- 设置语言环境,会覆盖客户端传递的怨言 -->
  <fmt:setLocale value="zh_CN" scope="request"/>
  <!-- 装载一个资源集,并保存在EL变量中 ,basename为基本名称,如果为包范围下则为com.struts.package,action范围下为com.struts.service.LoginService-->
  <fmt:setBundle basename="info" scope="request" var="baseName"/>
  <fmt:message key="username" bundle="${baseName }">
    <!-- 占位符的传递参数 -->
    <fmt:param value="您好"/>
    <fmt:param value="欢迎"/>
  </fmt:message><br/>
  <!--fmt:bundle 设置一个只在标签体内的访问的资源集 -->
  <!-- package范围下的资源文件 -->
  <fmt:bundle basename="com.struts.package">
    <fmt:message key="username"/>
  </fmt:bundle>
  <!-- action范围下的资源文件 -->
  <fmt:bundle basename="com.struts.service.LoginService">
    <fmt:message key="username"/>
  </fmt:bundle>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, struts
国际化
struts2国际化配置、struts2 国际化、struts国际化、struts2国际化切换、struts国际化配置,以便于您获取更多的相关知识。

时间: 2024-10-21 20:28:01

Java的Struts框架中配置国际化的资源存储的要点解析_java的相关文章

Java的Struts框架中的主题模板和国际化设置_Mysql

主题模板 如果不指定一个主题,然后Struts2中会使用默认的XHTML主题.例如Struts 2中选择标签: <s:textfield name="name" label="Name" /> 生成HTML标记: <tr> <td class="tdLabel"> <label for="empinfo_name" class="label">Name:<

详解在Java的Struts2框架中配置Action的方法_java

在Struts2中Action部分,也就是Controller层采用了低侵入的方式.为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合.它通常更像一个普通的POJO(通常应该包含一个无参数的execute方法),而且可以在内容定义一系列的方法(无参方法),并可以通过配置的方式,把每一个方法都当作一个独立的action来使用,从而实现代码复用. 例如: package example; public class U

在Java的Struts框架中ONGL表达式的基础使用入门_java

首先了解下OGNL的概念:OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能. 此外,还得先需弄懂OGNL的一些知识: 1.OGNL表达式的计算是围绕OGNL上下文进行的. OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示.它里面可以存放很多个JavaBean对象.它

Java的Struts框架中&amp;lt;results&amp;gt;标签的使用方法_java

<results>标签在Struts2的MVC框架的视图中所扮演的角色.动作是负责执行业务逻辑.执行业务逻辑后,接下来的步骤是使用<results>标签显示的视图. 经常有一些附带导航规则的结果.例如,如果在操作方法是对用户进行验证,有三种可能的结果. (一)成功登录:(二)不成功的登录,用户名或密码错误:(三)帐户锁定. 在这种情况下的动作方法将被配置呈现的结果有三种可能的结果字符串和三个不同的看法.我们已经看到在前面的例子. 但是,Struts2 不配合使用JSP作为视图技术.

Java的Struts框架中Action的编写与拦截器的使用方法_java

Struts2 Action/动作动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架.每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑. 但动作也提供其他两个重要的能力.首先,操作从请求数据的传输中起着重要的作用,通过向视图,无论是一个JSP或其它类型的结果.二,动作必须协助的框架,在确定结果应该渲染视图,在响应该请求将被退回. 创建动作:在Struts2的动作,唯一的要求是必须有一个无参数的方法返回String或结果的对象,必

深入解析Java的Struts框架中的控制器DispatchAction_java

Struts中的表单处理器为ActionForm,而struts中的控制器主要是Action,以及DispatchAction控制器等. Action 在struts中,所有的用户都会经过ActionServlet的处理,而实际的工作是交给Action对象来处理的,ActionServlet可以从配置文件中创建ActionMapping对象,从ActionMapping对象中找到对应使用的Action,然后将用户请求转交给Action. 对Struts一个ActionMapping只能生成一个A

Java的Struts框架中的if/else标签使用详解_java

这些标签执行可在每一种语言找到的一种基本条件流程. 'If'标签可用于本身或与"Else If''标签和/或单/多'Else'标签,如下图所示: <s:if test="%{false}"> <div>Will Not Be Executed</div> </s:if> <s:elseif test="%{true}"> <div>Will Be Executed</div>

详解Java的Struts框架中栈值和OGNL的使用_java

值栈:值栈是一个集合中的几个对象保持下列对象提供的顺序: 值栈可以通过JSP,Velocity或者Freemarker的标签.有各种不同的标签在单独的章节中,我们将学习,用于获取和设置Struts 2.0 的值栈. ValueStack的对象里面可以得到动作如下: ActionContext.getContext().getValueStack() 一旦拥有了值对象,就可以用下面的方法来操纵该对象: OGNL:对象图形导航语言(OGNL)是一个功能强大的表达式语言是用来参考值栈上的数据和操纵.

简单说明Java的Struts框架中merge标签的使用方法_java

merge标签合并标记需要两个或两个以上的列表作为参数,并把它们合并在一起,如下所示: <s:merge var="myMergedIterator"> <s:param value="%{myList1}" /> <s:param value="%{myList2}" /> <s:param value="%{myList3}" /> </s:merge> <