- 浏览: 98077 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
anybyb:
很详细,学习了
RSS从入门到精通(转载) -
hrsvici412:
浏览器的正中呢?布局中间放置的是iframe
Ext 中随着浏览器的变化window居中 -
Javakeith:
有点太长了!
RSS从入门到精通(转载)
资源文件的命名:basename_language_country.properties
JAVA国际化
如果系统同时存在资源文件、类文件,系统将以类文件为主,而不会调用资源文件。
对于简体中文的Locale,ResourceBundle搜索资源的顺序是:
(1)baseName_zh_CN.class
(2)baseName_zh_CN.properties
(3)baseName_zh.class
(4)baseName_zh.properties
(5)baseName.class
(6)baseName.properties
Struts2的国际化入门
Struts2国际化是建立在Java国际化的基础上的,一样是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle
加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息--整个过程与JAVA程序的国家化完全相同,只是
Struts2框架对JAVA程序国际化进行了进一步封装,从而简化了应用程序的国际化。
Struts2需要国际化的部分
类型转换:
数据校验:
验证框架xml配置文件的国际化:RegisterAction-validation.xml文件<message key="username.xml.invalid"/>
JSP页面的国际化:<s:text name="addUser"/>
Action的国际化:利用ActionSupport类提供的getText()方法.
Struts2中加载全局资源文件
struts.xml
<constant name="struts.custom.i18n.resources" value="baseName"/>
或
struts.properties
struts.custom.i18n.resources=baseName
访问国际化消息
Struts2访问国际化消息主要有如下三种方式:
(1)JSP页面:<s:text name="key"/>
(2)Action类中:使用ActionSupport类的getText方法。
(3)表单元素的Label里:为表单元素指定一个key属性
输出带占位符的国际化消息
Struts2中提供了如下两种方式来填充消息字符串中的占位符
(1)JSP页面,在<s:text.../>标签中使用多个<s:param.../>标签来填充消息中的占位符。
(2)Action中,在调用getText方法时使用getText(String aTextName,List args)或getText(String key, String[] args)方法来填充占位符。
除此之外,Struts2还提供了对占位符的一种替代方式,这种方式允许在国际化消息资源文件中使用表达式,对于这种方式,则可避免在使用国际化消息时还需要为占位符传入参数
值。
如下在消息资源中使用表达式
succTip=${username}, 欢迎, 您已经登录!
在上面的消息资源中,通过使用表达式,可以从ValueStack中取出该username属性值,自动填充到该消息资源中。
加载资源文件的方式
(1)加载全局资源文件: <constant name="struts.custom.i18n.resources" value="baseName"/>
(2)包范围资源文件 :为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_country.properties的文件,一旦建立了
这个系列的国际化资源文件,应用中处于该包下的所有Action都可以访问该资源文件。需要注意的是上面的包范围资源文件的baseName就是package,不是Action所在的包名。
(3)Action范围资源文件:在Action类文件所在的路径建立多个文件名为ActionName_language_country.properties的文件。
(4)临时指定资源文件:<s:i18n.../>标签的name属性指定临时的国际化资源文件
加载资源文件的顺序
Action中加载资源文件,假设我们在某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:
(1)优先加载系统中保存在ChildAction的类文件相同位置,且baseName为ChildAction的系列资源文件。
(2)如果在(1)中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在ParentAction的类文件相同位置,且
baseName为ParentAction的系列资源文件。
(3)如果在(2)中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在IChildAction的类文件相同位置,且
baseName为IChildAction的系列资源文件。
(4)如果在(3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即使用模型驱动模式),则对于getModel()方法返回的model对象,
重新执行第(1)步操作。
(5)如果在(4)中找不到指定key对应的消息,则查找当前包下baseName为package的系列资源文件。
(6)如果在(5)中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包来查找baseName为package的系列资源文件。
(7)如果在(6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
(8)如果经过上面的步骤一直找不到key对应的消息,将直接输出该key的字符串值。
对于在JSP中访问国际化消息,则简单的多,他们又可以分为两种形式:
(1)对于使用<s:i18n.../>标签作为父标签的<s:text.../>标签、表单标签的形式:
a、将从<s:i18n.../>标签指定的国际化资源文件中加载指定key对应的消息。
b、如果在a中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。
c、如果经过上面步骤一直找不到该key对应的消息,将直接输出该key的字符串值。
(2)如果<s:text.../>标签、表单标签没有使用<s:i18n.../>标签作为父标签:
直接加载struts.custom.i18n.resources常量指定baseName的系列资源文件。如果找不到该key对应的消息,将直接输出该key的字符串值。
允许用户自行选择程序语言
Struts2国际化的运行机制
在Struts2中,可以通过ActionContext.getContext().setLocale(Locale arg)设置用户的默认语言。
为了简化设置用户默认语言环境,Struts2提供了一个名为i18n的拦截器(Interceptor),并且将其注册在默认的拦截器中(defaultStack)。
i18n拦截器在执行Action方法前,自动查找请求中一个名为request_locale的参数。如果该参数存在,拦截器就将其作为参数,转换成Locale对象,
并将其设为用户默认的Locale(代表国家/语言环境)。
除此之外,i18n拦截器还会将上面生成的Locale对象保存在用户Session的名为WW_TRANS_I18N_LOCALE的属性中。一旦用户Session中存在一个名为
WW_TRANS_I18N_LOCALE的属性,则该属性指定的Locale将会作为浏览者的默认Locale。
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<script. type="text/javascript">
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<%-- 设置SESSION_LOCALE为用户session中的WW_TRANS_I18N_LOCALE属性值 --%>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<%-- 使用lee.Locales创建locales实例 --%>
<s:bean id="locales" name="lee.Locales">
<%-- 为locales实例传入current参数值,如果SESSION_LOCALE为空,则返回ValueStack中locale属性值(即用户浏览器设置的Locale) --%>
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<%-- 让用户选择语言的表单 --%>
<form. action="<s:url/>" id="langForm"
style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
<s:text name="languag"/>
<s:select label="Language" list="#locales.locales" listKey="value" listValue="key"
value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"
name="request_locale" id="langSelecter"
nchange="langSelecter_onChanged()" theme="simple"/>
</form>
在其他页面中包含该页面:
<s:include value="selectlanguage.jsp"/>
在struts.xml文件中增加Action通配符的配置:
<?xml version="1.0" encoding="GBK"?>
<!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="messageResource"/>
<constant name="struts.i18n.encoding" value="GBK"/>
<package name="lee" extends="struts-default">
<!-- 使用通配符定义Action的name -->
<action name="*">
<!-- 将请求转发给/WEB-INF/jsp/路径下同名的JSP页面 -->
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
</package>
</struts>
发表评论
-
Java中内置注释详解
2011-01-20 09:49 1700一、 Java 注释( Annotation ... -
BigDecimal的8种舍入方式
2010-11-05 16:17 1855在银行、帐户、计费等领域,BigDecimal提供了精确的数值 ... -
java取整和java四舍五入方法 BigDecimal.setScale()方法详解.
2010-11-05 16:09 2049import java.math.BigDecimal; im ... -
对BigDecimal常用方法的归类
2010-11-05 15:55 682package com.org.assistant.util; ... -
利用BeanUtils在对象间复制属性
2010-08-19 11:15 723commons-beanutils是jakarta commo ... -
前台用javaScript,后台用java裁剪图片
2010-07-21 23:17 1319总体思想: 1.前台网页用js得到裁剪图片的id及x,y,宽 ... -
面向对象程序设计的基本原则
2010-06-12 11:26 973面向对象设计根本的指 ... -
JSP、JAVA获取各种路径总结
2010-06-05 11:37 18913.1 JSP中获得当前应用的 ... -
XFire 入门
2010-05-26 09:48 678Java 社区一直试图将 POJO ... -
java基本数据类型
2010-05-10 16:16 1098java基本数据类型 3.1 java基 ... -
struts2 form get中文乱码
2010-05-04 16:44 802如果用 Tomcat 5.0.1.6 以上的版本是最好處理的, ... -
@SuppressWarnings 详解
2010-04-17 11:18 768@SuppressWarnings J2SE 提供的最后一 ... -
JSTL 格式化用法
2010-04-13 16:11 881jstl中的日期格式化 <%@ taglib pref ... -
JSP自定义标签学习(基础)
2010-04-01 11:00 679自定义标签的最大的特点:利用 自定义标签,软件开发人员和页面设 ... -
Java中各种修饰符与访问修饰符的说明
2010-03-05 11:56 1141类: 访问修饰符 修饰符 class 类名称 extend ... -
SimpleDateFormat函数使用的例子
2010-03-03 14:04 640public class SimpleDateFormat e ...
相关推荐
整理struts2国际化例子源码整理struts2国际化例子源码整理struts2国际化例子源码
Struts2国际化的实现原理;简单的struts2国际化实现过程的讲解
Struts2国际化
struts2国际化 标签 页面 处理类 实例,特殊注意点说明
struts2 国际化
导入相关的jar包,直接发布便可以运行 struts2国际化+简单的标签+用户注册和登录(不实用数据库)
struts2国际化MyEclipse开发struts2国际化MyEclipse开发童叟无欺
struts2国际化ppt和代码,这是上课老师给的课件和案例。可以参考一下适合初学者
struts2 国际化(internationalization,i18n)和本地化(localization,l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化。程序在不修改内部代码的情况下,能根据不同语言及地区显示...
http://blog.csdn.net/liuhongjavaen/article/details/7655385 具体操作事项请查阅博客 struts2国际化源码 eclipse国际化插件
struts2国际化测试小demo
Struts1 和 Struts 2 国际化全局资源,有文档说明、有图形加以说明,还有源代码。
struts国际化的描述,其中包括在配置文件中配置实现,以及在后台中或者是前台中处理实现国际化的过程。
另外,关于struts2国际化乱码问题: 解决方法: 找到jdk的安装目录--C:\Program Files\Java\jdk1.6.0_10\bin(我的安装目录) 在bin里面找到native2ascii.exe并运行 在命令窗口输入 native2ascii -encoding UTF-8 ...
相关的国际化的知识点,写了一个小demo
自己做的一个简单的国际化例子,Struts2框架,myEclipse.
励智教育,struts2国际化处理教程案例及幻灯片,网址:http://www.lizhi.cc
文件的国际化字符串中使用OGNL,格式为${表达式},例如: validation.required=${getText(fileName)} is required 2. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number |...
struts2 国际化 i18n struts2 国际化 i18n struts2 国际化 i18n