Struts2 国际化

来源:互联网 发布:vscode extjs 编辑:程序博客网 时间:2024/05/22 07:00

总结自李刚的struts2.1权威指南



一、struts2访问国际化消息有3种方式

1、通过struts的标签<s:text name="xxxxx">

2、使用ActionSupport类的getText

3、为了在该表单元素的label元素里输出国际化资源可以为表单标签指定一个key值


二、输出带占位符的国际化消息

通俗的说就是动态显示国际化消息

1、jsp页面中可以使用<s:text>标签使用多个<s:param>标签来填充填充消息中的占位符,按顺序指定

2、action中填充时使用gettext(String textName,List args)或getText(String key,String arg[])也是按照顺序赋值


三、加载资源文件的不同方式

1、包范围资源文件

2、action范围资源文件

3、临时指定资源文件的在jsp中输出国际化资源的位置,<s:i18n >


注:当action范围的资源文件和包范围的资源文件同时存在时,系统将优先使用action范围的资源文件。


四、允许用户自行选择程序语言(项目中比较常用)

struts2提供一个i18n的拦截器,并将其注册在默认拦截器中,i18n在执行action之前,自动查找请求中的名为request_local的参数,将该参数转换为locale的对象,并将其设为用户默认local,i18n拦截器还会将上面生成的locale对象保存在session的名为"WW_TRANS_L18N_LOCALE"的属性中,一旦用户session中存在一个名为"WW_TRANS_L18N_LOCALE"的属性,则该属性指定的locale将会作为浏览者的默认locale。


public class Locales
{
private Locale current;
public void setCurrent(Locale cur)
{
this.current = cur;
}
public Map<String,Locale> getLocales()
{
Map<String,Locale> locales = new HashTable<String,Locale>();
locales.put(bundle.getString("enus"),Locale.US);
locales.put(bundle.getString("zhcn",Locale.CHINA);
return locales;
}
}

jsp代码
<script>
function langSelecter_onChanged()
{
document.getElementById("langForm").submit();
}
</script>
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<s:bean id="locales" name="lee.locales">
<s:param name="current" value="#SESSION_LOCALE == null?locales:#SESSION_LOCALE"/>
</s:bean>
<form action="<s:url>" id="langForm">
<s:text name="language"/>
<s:select label="language" list = "#locales.locales" listKey="value" listValue="key"
value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"name="request_locale" id="langSelecter"
onchange = "langSelecter_onChanged()" theme = "simple"
/>
</form>

language = 选择语言
enus = 美式英语
zhcn = 简体中文

language = select language
enus = american englist
zhcn = simplified chinese






















0 0
原创粉丝点击