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切换中英文功能相关推荐

  1. C# 切换中英文输入法

    本文经原作者授权以原创方式二次分享,欢迎转载.分享. 原文作者:唐宋元明清 原文地址:https://www.cnblogs.com/kybs0/p/10298697.html C# 切换中英文输入法 ...

  2. 苹果系统中英文输入法切换_Mac系统,如何优雅切换中英文?

    开篇 又是好久没有写博客了,今天就写一个工作中的软件小技巧,可以提高工作中的输入效率,极大提升幸福感! 背景 作为一个使用 Mac 系统的Java开发攻城狮,日常使用的软件非常之多,在频繁的软件切换, ...

  3. Win10默认输入法切换中英文标点

    在Win10中写代码注释时想要在默认的五笔输入法下使用英文标点,如果使用Shift键切换,在标点比较多的情况下实在是太过麻烦. win10默认输入法自带切换中英文标点的功能,开启方法是ctrl+. 但 ...

  4. 手机计算机快速切换功能,新功能!手势导航快速切换应用功能上线~

    原标题:新功能!手势导航快速切换应用功能上线~ 说到手势导航,相信大家一定不陌生 如今,这个家族又增加了一个新成员 "快速切换应用手势" 无需退出当前应用 只需在屏幕底部轻轻一滑 ...

  5. 使用 vue-i18n 切换中英文

    使用 vue-i18n 切换中英文 vue-i18n 仓库地址:https://github.com/kazupon/vue-i18n 兼容性: 支持 Vue.js 2.x 以上版本 安装方法:(此处 ...

  6. CI框架主题切换的功能

    CI框架主题切换的功能 本人接触到这个框架不就,属于菜鸟 , 公司现在用CI框架做项目 ,老大要做一个主题切换的功能,说明功能的要求我的脑子里瞬间有几个想法. 脑子里最简单的就是设置全局变量 如 : ...

  7. 谷歌拼音输入法快速切换中英文解决中英文混合打字问题

    谷歌拼音输入法快速切换中英文解决中英文混合打字问题 参考文章: (1)谷歌拼音输入法快速切换中英文解决中英文混合打字问题 (2)https://www.cnblogs.com/jpfss/p/9856 ...

  8. java输入验证码代码,JavaWeb 实现验证码功能(demo)

    验证码不用多说,在 WEB-APP 中一般应用于:登录.注册.买某票.秒杀等场景.大家都接触过~可以说是千奇百怪,各式各样. DEMO 目标功能 验证码页面输入. 页面更换验证码(异步实现). 后台验 ...

  9. VMware虚拟机Mac-OS-X系统如何切换中英文输入法

    VMware虚拟机Mac系统如何切换中英文输入法? 被这个问题难住了吧?来54yongf.com就对了!笔者也是菜鸟,同级别的人交流,还是蛮有共同语言的!我是直接安装的OS X 10.10.系统中自带 ...

最新文章

  1. python外星人入侵飞船上下移动_python外星人入侵游戏左移正常,右移屏幕上不显示,但实际上已经移动了?...
  2. mysql 同步更新_MySQL slave 不能同步更新
  3. .net快速入门方法,转csdn
  4. 锐浪报表 多条数据集合到一个二维码中_【小麦课堂】快速查询明细数据的操作...
  5. Objective-C 内存管理机制
  6. LeetCode 513. 找树左下角的值(按层遍历 queue)
  7. 前脚投简历,后脚就被精准裁员。这套监控系统让打工人颤抖:离职倾向、摸鱼通通都能被监测,争议出现后产品页面已404...
  8. 新 CEO 谈论GitHub 被微软接管后的未来
  9. 11 个问题,帮你彻底搞懂工业互联网
  10. 全网最全 Java 日志框架适配方案!还有谁不会?
  11. linux背光命令,在Linux下开启背光Led键盘的背光
  12. 012 外接功放喇叭模块
  13. Flutter type ‘_InternalLinkedHashMap<dynamic, dynamic>‘ is not a subtype of type ‘Map<String, dynami
  14. 360路由器WISP无线万能中继的应用
  15. CSS: 对background: url(“~assets/img/common/collect.svg“) 0 0/14px 14px 的理解
  16. 中国互联网迎来第二次电商盛世:谁淘汰了红极一时的淘品牌?
  17. 手把手教你U盘装Raid系统
  18. Unity Unlit ShaderGraph实现与PBR的自发光贴图类似的叠加效果
  19. jar包冲突java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException
  20. Linux发行版本及其区别

热门文章

  1. c语言 局域网聊天程序,局域网聊天的程序(C++版)
  2. 控制飞书客户端自动发邮件
  3. 日语外来语和微软日语输入法(片假名转成适当的英语)
  4. sdl 自动翻译服务器,在SDL Trados(2009,2011,2014) 里使用微软自动翻译注意事项
  5. 兆骑科创科创赛事举办,创业大赛活动路演
  6. 雅马哈摩托车左曲轴箱盖工艺及夹具设计(说明书+CAD图纸+工序+开题报告)
  7. Ubuntu上使用Codeblocks遇到的一些问题及解决方法
  8. Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
  9. Android 10.0 SystemUI下拉状态栏UI定制化开发系列(八)
  10. 六大案例、多维数据告诉你,为什么C端硬件创业领域会尸横遍野?