热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:struts2国际化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了struts2国际化相关的知识,希望对你有一定的参考价值。1、概念  &n

篇首语:本文由编程笔记#小编为大家整理,主要介绍了struts2国际化相关的知识,希望对你有一定的参考价值。



1、概念

         软件的本地化:一个软件在某个国家或者地区使用时,采用该国家或者地区的语言,数字,货币,日期等习惯。

         软件的国际化:软件在开发时,让它能支持多个国家和地区的本地化应用。使得应用软件能够适应多个地区的语言和文化风俗习惯。

 


2、资源文件资源包

要用struts实现国际化和本地化,首先要定义资源文件的名称,这个文件会包含默认语言编写的会在程序中出现的信息。这些信息以“键值对”的形式存储,如下:

Error,validation,location=The entered location is invalid

当对一个应用程序进行国际化处理时,所有用的各种语言版本的’标签”信息应该存放在不同的属性文件中,每一个这样的文件对应一种语言版本。所有属性文件合在一起称为资源包(Resource Bundle)。

属性文件的命名格式可以分为下面两种:

         文件名前缀.properties

         文件名前缀_语言种类.properties,前缀可以自由书写,其中语言种类字段必须是有效的ISO语言代码。

文件名前缀.properties默认的形式,当其他属性文件找不到的时候,会默认的寻找此属性文件。

  例子:

  英文资源包:resouces_en_US.properties


items.username=username_en
items.psw
=password_en
items.login
=login_en
items.param
=firstName_en\:{0} lastName_en\:{1}

  中文资源包:resouces_zh_CN.properties

技术分享

默认资源包:resouces.properties

  


items.username=username
items.psw
=password
items.login
=login
items.param
=firstName\:{0} lastName\:{1}

 


3、针对不同的国家定义不同的资源文件

资源文件的命名:基名_国家代码_语言代码.properties

         默认名:基名.properties

定义不同的资源文件

         中文的资源文件

                   中文名:resources_zh_CN.properties

                   文件内容:item.username=用户名

         英文的资源文件

                   文件名:resources_en_US.properties

                   文件内容:item.username=username_en

默认的资源文件

                   文件名:resources.properties

                   文件内容:item.username=username

 

 4、实现国际化

两种方式:1、在struts.xml中加载所有资源文件,然后在jsp文件中可以直接使用struts的text标签达到效果。

在struts.xml中加载资源文件:



"struts.custom.i18n.resources"
value
="cn.itcast.converter.converter,
cn.itcast.i18n.resouces_en_US,
cn.itcast.i18n.resouces_zh_CN,
cn.itcast.i18n.resouces
"/>

使用struts标签实现国际化:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


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



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">






"loginForm" method="post" action="${pageContext.request.contextPath }/i18n/i18nAction_login.do">

"1">















"items.username"/> "text" name="username"/>
"items.psw"/> "password" name="psw"/>
  "submit" value=""items.login"/>"/>




 

方式2:

  不需要再struts.xml中记载资源文件。在jsp中使用标签实现

I18n标签:用来加载一个自定义的ResourceBundle.不用做任何配置

         Name:将被加载的资源集的java完全限定名

        

        

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

例子:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"-//W3C//DTD HTML 4.01 Transitional//EN">


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



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">






"cn.itcast.i18n.resouces">

"loginForm" method="post" action="${pageContext.request.contextPath }/i18n/i18nAction_login.do">

"1">












"items.username"/> "text" name="username"/>
"items.psw"/> "password" name="psw"/>
  "submit" value=""items.login"/>"/>






 

5、国际化资源文件中的配置信息使用通配符,参数。

  在properties文件中使用通配符,然后struts标签中拥有注入参数的方式,使用的类似MessageFormat方式

  资源文件中的value部分类似这种形式: 


items.param=firstName\:{0} lastName\:{1}

  例子:

    


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path
= request.getContextPath();
String basePath
= request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"-//W3C//DTD HTML 4.01 Transitional//EN">


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



"pragma" cOntent="no-cache">
"cache-control" cOntent="no-cache">
"expires" cOntent="0">
"keywords" cOntent="keyword1,keyword2,keyword3">
"description" cOntent="This is my page">




"items.param">
"firstName">郭
"lastName">大侠



 

6、在action中获取资源文件中的属性值。

ActionSupport类实现了TextProvider接口,该接口负责提供对各种资源包和他们的底层文本信息的访问机制

当调用getText()方法时,它将按照以下顺序搜索相关的属性文件

         Action类的属性文件:该文件的名字与相关动作类的名字一样,并且和那个动作类存放在同一个目录下。

动作类实现的各个接口的属性文件

动作类的各个父类的属性文件

动作类的各个父类所实现的各个接口的属性文件

如果动作类实现了ModelDriven接口,Struts将调用getModel()方法并从模型对象的类开始沿着类的继承关系并进行一次上溯搜索

默认的包的属性文件

继承关系中的下个父包里的资源包

 

代码:


package cn.itcast.i18n;
import com.opensymphony.xwork2.ActionSupport;
public class I18nAction extends ActionSupport {

/**
*
*/
private static final long serialVersiOnUID= 1L;
public String login(){
System.
out.println("I18nAction ******* login");

String username
=this.getText("items.username");
System.
out.println("username = "+username);

String psw
=this.getText("items.psw");
System.
out.println("psw = "+psw);


return "success";
}
}

 


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
书友48919914
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有