http://wenku.baidu.com/view/5a31ac1e650e52ea55189874.html
看你的servlet的request对象的AccectLanguage
使用request.getLocal()方法,可以返回客户机浏览器上的语言设定值
http://wenku.baidu.com/view/5a31ac1e650e52ea55189874.html
我想得到的浏览器语言信息能直接如CN、En、TW这样的形式显示出来,请问大家有什么简单的办法吗??
1 楼pleonheart(只睡六小时)回复于 2004-06-11 16:19:03 得分 20
试试这个
java.util.Enumeration enu = request.getHeaderNames();
while (enu.hasMoreElements()) {
String str = (String)enu.nextElement();
System.out.println(str + " : " + request.getHeader(str));
}
3 楼fanciex(http://BugOnline.net 在线的Bug管理系统)回复于 2004-06-16 21:41:26 得分 0
到http://jakarta.apache.org/taglibs/index.html 下载 taglibs-request.jar
----------
<req:parameters id="param">
<jsp:getProperty name="param" property="name"/> = <jsp:getProperty name="param" property="value"/>
</req:parameters>
----------
运行结果:
accept = */*
accept-language = zh
accept-encoding = gzip, deflate
user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
host = yf8:8080
connection = Keep-Alive
cookie = JSESSIONID=0EC55117EE3E9E45BA765FD4698FA9E2Top
时间:2009-11-16 10:48:21 点击:637
在很多应用中,我们需要提供允许用户自行选择语言的功能。Struts2中可以通过ActionContext.getContext().setLocale(Locale locale)设置用户的默认语言。Struts2还提供了一个名为i18n的拦截器(已经包含在默认拦截器栈中),i18n拦截器首先在请求中查找名为request_locale,如果存在,就将其转换成Locale对象,并设置成用户默认的Locale,此外i18n还会将其保存在Session的WW_TRANS_I18N_LOCALE属性中,如果存在此属性,则指定为用户浏览器的默认Locale。
我们在应用中,可以将我们系统所支持的语言放在一个下拉列表中,用户选择下拉列表中的某项时,将其值作为request_locale参数提交给Struts2就可以了。实现代码如下:
1,searchlanguage.jsp页面代码:此页面就是用户选择语言的页面,它也以嵌在任何页面下
<%@ 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里的WW_TRANS_I18N_LOCALE属性的值取出来,赋值给此页面的属性SESSION_LOCALE -->
<s:set name="SESSION_LOCALE" value="#session['WW_TRANS_I18N_LOCALE']"/>
<!-- 在此页面注册一个lee.Locales类型的Bean -->
<s:bean id="locales" name="lee.Locales">
<!-- 给lee.Locales的参数current注入值SESSION_LOCALE -->
<s:param name="current" value="#SESSION_LOCALE == null ? locale : #SESSION_LOCALE"/>
</s:bean>
<!-- 提交给当前目录名.action处理,这样做是为了在任何都可以嵌入此selectlanguage.jsp页面,如果用户不需要此功能,这里也可以指定action -->
<form action="<s:url/>" id="langForm"
style="background-color:#bbbbbb; padding-top: 4px; padding-bottom: 4px;">
<!-- 从资源文件中读出key为languag的信息 -->
<s:text name="languag"/>
<!-- 读出刚才注册的locales类实例的locales属性 -->
<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>
2,Locales类的代码如下:此类仅作数据装载,不做其它用途。
package lee;
import java.util.*;
public class Locales
{
//current属性,由于此属性只做赋值操作,不做取值操作,因此没有get方法
private Locale current;
public void setCurrent(Locale cur)
{
this.current = cur;
}
//locales属性,由于此属性只做取值操作,不做赋值操作,因此没有set方法
public Map<String, Locale> getLocales()
{
Map<String, Locale> locales = new Hashtable<String, Locale>();
//这里是根据当前用户选择的语言类型,获取指定资源文件,这一步非常重要
ResourceBundle bundle = ResourceBundle.getBundle("messageResource" , current);
//设置工程支持的语言类型,key里的值对应资源文件里的key的值
locales.put(bundle.getString("usen"), Locale.US);
locales.put(bundle.getString("zhcn"), Locale.CHINA);
return locales;
}
}
3,资源文件messageResource.properties中的内容如下:
languag=选择语言
usen=美式英语
zhcn=简体中文
4,struts.xml配置文件中的配置如下:
<action name="*">
<result>/WEB-INF/jsp/{1}.jsp</result>
</action>
这个action的配置意思就是返回你请求的那个JSP页面,因为所有的操作,在你选择语言的时候就已经完成了,所以无需其它的处理。
5,其它页面的调用方式:
其它JSP页面要调用此页面,只需要include就行了。如下例
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:include value="selectlanguage.jsp"/>
<s:form action="Login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>