Javaweb切换中英文功能
来源:互联网 发布:1962年中印战争知乎 编辑:程序博客网 时间:2024/06/07 15:05
Javaweb 切换中英文功能实现——国际化
小博也是小白,自己参与了一个javaweb项目,项目要求加入一个中英文转换的功能,自己也是断断续续弄了一个星期,这里分享下自己的心路历程。由于这个项目中有些页面使用Spring mvc的框架写的,有些则是jsp+servlet的架构。所以这里把这两种架构下的解决方式都进行说明。
这里也说明一下项目中关于国际化的基本情况。项目中本来就有很多资源文件.properties,有中英两种语言。以admin.properties为例,admin.properties是英文的资源文件,那么admin_zh.properties就为中文的资源文件。
- Spring mvc
- jsp+servlet
jsp页面的修改
不论哪种架构下,在页面上都需要添加中英文切换的链接。除此之外还需要用js来为URL加上对应的语言参数,如点击id=”change_language_zh”则会在本页的URL后面加上一个参数“?choiceLanguage=zh”,这些参数传入后端进行处理。
<li> <a href="#" id="change_language_zh" style="padding-right: 1px">中文</a> </li> <li style="margin-top: 10px"> | </li> <li> <a href="#" id="change_language_en" style="padding-left: 1px">Engilsh</a> </li> <script type="text/javascript"> var url = window.location.search; var dom_zh = document.getElementById("change_language_zh"); var dom_en = document.getElementById("change_language_en"); if(url.length > 0) { var theinx = url.indexOf("choiceLanguage="); if(theinx > 0) { var temp = url.substring(theinx, theinx+17); dom_zh.href = window.location.href.replace(temp, "choiceLanguage=zh"); dom_en.href = window.location.href.replace(temp,"choiceLanguage=en"); } else { dom_zh.href = window.location.href+"?choiceLanguage=zh"; dom_en.href = window.location.href+"?choiceLanguage=en"; } } else { dom_zh.href = window.location.href+"?choiceLanguage=zh"; dom_en.href = window.location.href+"?choiceLanguage=en"; } </script>
Spring mvc框架
小博查过很多资料,Spring mvc有很多国际化的一些功能,参考到博文“Spring MVC之LocaleResolver(解析用户区域)”中的方法。在Spring的配置文件中设置localeChangeInterceptor来进行语言的切换,这个方法非常的简单方便,但只适用于项目中的部分页面(用Spring mvc的页面)。设置如下:
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/><bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="choiceLanguage"/></bean>
这样这些页面就可以根据参数choiceLanguage的值来改变语言。
jsp+servlet
从上文Spring的配置文件中可以看出,Spring框架下的localeResolver直接使用的Springmvc框架里提供的关于国际化的SessionLocaleResolver,jsp+servlet架构下可以自行写一个localeResolver类然后重写getLocale方法。
public final static Locale getLocale(HttpServletRequest request) { String lang = request.getParameter("choiceLanguage"); Locale locale = null; if(lang != null) { if (lang.equals("zh")) { locale = new Locale("zh", "CN"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale); return locale; } else if (lang.equals("en")) { locale = new Locale("en"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale); return locale; } }else { locale = getLocaleInSession(request.getSession(false)); } if(locale == null) { return resolveLocale(request); } return locale; }
这个方法的主要思想如下:首先如果URL的choiceLanguage参数不为空则根据参数值来设置session中locale的值并返回locale。其次,若参数值为空,就调用resolveLocale方法(这个方法是根据request.getLocales()的顺序来取locale值的)
注意:这里改完之后如果还是不能成功,可以考虑是不是localeFilter里面又重新根据浏览器的语言顺序来取locale值,要在这个页面进行修改。
此次修改经历是在前人已经写过一部分localeResolver类的基础上进行的修改,还是致敬前人!每个人遇到的问题可能不一样,但是理清逻辑结构后再进行问题的定位是非常有必要的!
- Javaweb切换中英文功能
- ECShop实现中英文切换功能
- 中英文切换
- 中英文切换
- 中英文输入方法切换
- 页面中英文切换
- Flash builder 中英文切换
- .net 网站中英文切换
- ArcGIS 10 中英文 切换
- ubuntu 中英文切换
- 网站如何中英文切换?
- 极点五笔中英文切换
- ubuntu中英文环境切换
- QT动态切换中英文
- CentOS系统中英文切换
- QT中英文切换
- Android应用 中英文切换
- SVN中英文切换
- 【技术重温】html之重点(四)
- Tensorflow , MNIST 识别你自己手写的数字
- 关于“The constructor ArrayAdapter(new View.OnClickListener(){}, int, String[]) is undefined”错误提示的解决办法
- Necklace (状态dp)
- HDU2045 不容易系列之(3)—— LELE的RPG难题【递推】
- Javaweb切换中英文功能
- 猜数字
- 日记:opencv python借口函数2.X版本和3.X版本变化
- 2017-12-10 python笔记3 Flask笔记1
- Python基础-高级-迭代器Iterable与迭代器对象Iterator
- 1004. Counting Leaves (30)
- Oracle RAC One Node 和 Oracle Data Guard 配置 DBA 指南
- Unity事件函数的执行顺序 例如:Awake()/OnEnable()/Start()/FixedUpdate()/Update()/等
- 使用JS--->2048游戏项目(二)