Ext 的国际化
2008-06-23 15:49:31| 分类: 默认分类转载:http://hi.baidu.com/comasp/blog/item/1bd36f3e620d293970cf6ca9.html
这几天,一直为在ext下的国际化烦恼,ext本身提供了国际化的功能,国际化文件在ext/source/locale、目录下,但是你要使用它,就必须在<head>进行引入,例如
<script type="text/javascript" src="ext/source/locale/ext-lang-cn_ZH.js"></script>
但是这样做就意味着固定了语言的种类,现在要求在改变IE浏览器中的语言选项的时候也要改变网页语言,这就得重新编写网页文件,这肯定不合理,如何解决呢?
我尝试了各种方法:
1、在javascript中能否得到浏览器设置的语言?
在网上找了很长时间,有如下语句
window.navigator.userLanguage
window.navigator.systemLanguage
navigator.browserLanguage
三个得到是系统浏览器语言,根本就不是浏览器设语言改变后的语言。
这个企图没有成功。
2、在设计过程中我用到一个字符编码过滤器EncodingFilter.java,主要是在web.xml中加入过滤,从而解决字符集编码问题,我想能否在web一运行就得到当前浏览器设置
的语言,然后将语言保存到session或request中,这样每个页面就可以从sesson或request中取得当前的浏览器语言,想法可以,能解决吗?
在struts 2 中得到request和session的方法如下:
http://tmsoft.lsxy.com/index.php?load=read&id=582
没成功啊。。。。!!!原因在于运行过滤器前,根本没有加载struts 2的配置文件,那么你采用上面得到session或request的方法根本不起作用,提示无指针异常。
3、在听了一堂课后,想到只能写一个action来实现
- public class Register extends ActionSupport implements ServletRequestAware{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private HttpServletRequest request;
- @Override
- public String execute() throws Exception {
- request.setAttribute("browserLang", request.getLocale().toString());
- return SUCCESS;
- }
- @Override
- public void setServletRequest(HttpServletRequest request) {
- this.request=request;
- }
public class Register extends ActionSupport implements ServletRequestAware{ /** * */ private static final long serialVersionUID = 1L; private HttpServletRequest request; @Override public String execute() throws Exception { request.setAttribute("browserLang", request.getLocale().toString()); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request=request; }
通过ServletRequestAware接口得到request,然后request.setAttribute("browserLang", request.getLocale().toString());
将浏览器语言放入request
最后在页面用${browserLang }得到
<script type="text/javascript" src="ext/source/locale/ext-lang-${browserLang }.js"></script>
<script type="text/javascript" src="ext/source/locale/ext-lang-${browserLang }.js"></script>
struts 2 有这点好处${browserLang }切入任何地方多能得到