Spring MVC 多语言化的实践和学习
一、主要参考:
SpringMVC简单实现国际化/多语言 - CSDN博客
https://blog.csdn.net/u013360850/article/details/70860144/
二、总结:
实际操作和原文有出入,以自己的实操为主。实操主要内容都可以参考对应的GtHub的提交记录: https://github.com/NullTommy/hello/commit/13cbaa23f61d5a83845c4030e1bfe877d06864b4
- 对于项目的整体构建不做过多描述,只说多语言部分;
- 配置Spring MVC 相关的多语言配置:
- messageSource主要用于配置多语言资源化文件的路径
- localeResolver好像是必须的,不然会出错
- interceptors,拦截器,用于拦截请求中的语言相关信息,
<!-- 配置国际化资源文件路径 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n/messages" />
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
<!-- 本地化资源处理器 -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
</bean>
<!-- 国际化拦截器 -->
<mvc:interceptors>
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"/>
</bean>
</mvc:interceptors>
3.项目中构建多语言相关文件,并保存不同语言的信息;
4.页面中使用多语言,页面中的文字部分,全部使用多语言文件中的资源代码 key,而不是写死。
5.页面切换多语言:在请求中携带对应的语言字段即可,和拦截器中的配置保持一致。
三、实操中的问题及注意事项:
- 多语言文件的路径问题:实际路径是文件路径+文件名前面的公共部分(除后面的语言信息)
- useCodeAsDefaultMessage 的配置是当页面无法加载多语言信息时,使用页面上配置的Code。
- id="messageSource" 的具体类,原教程中是:ReloadableResourceBundleMessageSource 但我使用有问题,后来改为ResourceBundleMessageSource,问题解决;
- interceptors中的配置和请求中的语言字段key需要对应
- JSP页面中需要引入spring标签,然后才能在JSP页面中使用多语言的标签,页面才可以自动切换。
- 实操中遇到如下报错:
Cannot change HTTP accept header - use a different locale resolution strategy
主要原因是多语言化配置的beanId名称有问题,具体解决可以参考如下两文:
6.1 java - Cannot change HTTP accept header - use a different locale resolution strategy - Stack Overflow https://stackoverflow.com/questions/23766446/cannot-change-http-accept-header-use-a-different-locale-resolution-strategy
6.2 Spring 的MVC I18N-国际化相关配置出现的问题 - CSDN博客 https://blog.csdn.net/shenzhen_mydream/article/details/2514405
四、扩展:
Cannot change HTTP accept header - use a different locale resolution strategy
主要原因是多语言化配置的beanId名称有问题,具体解决可以参考如下两文:
6.1 java - Cannot change HTTP accept header - use a different locale resolution strategy - Stack Overflow https://stackoverflow.com/questions/23766446/cannot-change-http-accept-header-use-a-different-locale-resolution-strategy
6.2 Spring 的MVC I18N-国际化相关配置出现的问题 - CSDN博客 https://blog.csdn.net/shenzhen_mydream/article/details/2514405
自行测试的原因是因为项目中需要多语言化,这只是一个小 Demo ,项目实际中遇到如下问题,做对应记录;
- 该Demo是基于请求中的语言信息来实现语言切换,而实际项目中大多是基于Cookie来保存语言信息。所以在后台,需要从Cookie中获取语言信息,同时注意实现获取不到的情况。
主要实现就是自行继承拦截器,然后拦截器中做自己需要的逻辑处理即可。 - 实际项目使用的 FreeMaker ,页面是ftl后缀文件。在FreeMaker中使用多语言的化需要额外的一个配置,即将对应的宏进行配置
可参考教程: spring+freemarker 国际化i18n - CSDN博客 https://blog.csdn.net/rongku/article/details/12844473
同时页面使用多语言标签Demo如下:
<@spring.message "common.problem" />
五、附录:
- SpringMVC简单实现国际化/多语言 - CSDN博客
https://blog.csdn.net/u013360850/article/details/70860144/
注:本文参考的主要教程,所有一切都始于这篇教程。
- SpringMVC 资源国际化实现以及常见问题 - LionheartCGJ - 博客园 https://www.cnblogs.com/LionheartCGJ/p/7819688.html
注:这也是一个很重要的文件,对于配置中的内容以及使用做了很详细的解释说明。上面的教程只是如何做,这篇是告诉你为什么要这么做,以及这么做有什么用。
- 其他不做详细描述了,可参考原文。
Spring MVC 多语言化的实践和学习的更多相关文章
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
- 搭建Spring4+Spring MVC web工程的最佳实践
Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...
- 看透Spring MVC:源代码分析与实践 (Web开发技术丛书)
第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...
- Spring MVC 中急速集成 Shiro 实践
相信有很多的程序员,不愿意进行用户管理这块代码实现. 原因之一,不同的JavaEE 系统,用户管理都会有个性化的实现,逻辑很繁琐. 而且是系统门面,以后背锅的几率非常大,可谓是低收益高风险. 最近在系 ...
- Spring mvc,uploadifive 文件上传实践(转自:https://segmentfault.com/a/1190000004503262)
1.前台页面: 引入js和css 全选复制放进笔记 <link type="text/css" rel="stylesheet" href=&quo ...
- 从原理层面掌握HandlerMethod、InvocableHandlerMethod、ServletInvocableHandlerMethod的使用【一起学Spring MVC】
每篇一句 想当火影的人没有近道可寻,当上火影的人同样无路可退 前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏 ...
- spring mvc(2) spring mvc初体验
前面讲到随着前端技术的发展,web的开发已经实现了前后分离,并且spring mvc经过多个版本的更新,使用上也变得不一样,并且提供了很多便捷的功能.但是为了便于理解,我们使用比较原始的方式搭建spr ...
- Spring企业级程序设计 • 【第5章 Spring MVC快速入门】
全部章节 >>>> 本章目录 5.1 Spring MVC设计概述及其框架结构 5.1.1 Spring MVC介绍 5.1.1 Spring MVC优势 5.1.2 S ...
- maven配置spring mvc+hibernate+spring框架
作为一名刚出茅草屋的新手小白写的框架,仅适合新手小白借鉴,大神勿喷,谢谢...... 前天刚知道spring mvc这个框架现在也很流行,决定用它代替struts2来写我的毕业设计. ...作为一名新 ...
随机推荐
- Android 4.4KitKat AudioFlinger 流程分析
AudioFlinger(AF)是一个服务,具体的启动代码在av\media\mediaserver\Main_mediaserver.cpp中: int main(int argc, char** ...
- javascript开源大全
javascript开源大全 Ajax框架-jQuery 可视化HTML编辑器-CKEditor 国产jQuery-UI框架-(jUI)-DWZ 网页开发FireFox插件-Firebug 服务器端的 ...
- STM32关总中断的语句
__set_PRIMASK();//关总中断 /************ **********/ __set_PRIMASK();//开总中断
- JS事件类型详解
一般事件 onclick IE3.N2 鼠标点击时触发 此事件 ondblclick IE4.N4 鼠标双击时触发 此事件 onmousedown IE4.N4 按下鼠标时触发 此事件 onmouse ...
- C# 执行多条SQL更新语句,实现数据库事务
class Program { class Result<T> { public T data; public string Message; public bool Success; p ...
- HDOJ 4884 & BestCoder#2 1002
TIANKENG’s rice shop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 无需序列号安装Photoshop CS6
在百度下载Photoshop CS6破解版,解压后,如图所示 进入Photoshop_CS6.3510481888\Adobe CS6目录,双击Set-up.exe开始安装 点击接受协议,进入 ...
- JVM Specification 9th Edition (4) Chapter 4. The class File Format
Chapter 4. The class File Format Table of Contents 4.1. The ClassFile Structure 4.2. Names 4.2.1. Bi ...
- Unity3D 5中增加WebGL 播放插件
http://www.csdn.net/article/2014-03-18/2818822-Unity-5-game-engine 其实我是搞3d的,这篇文章里所有的术语看了都有很强的亲切感. Un ...
- hdu6058 Kanade's sum 区间第k大
/** 题目:Kanade's sum 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l ...
- SpringMVC简单实现国际化/多语言 - CSDN博客
https://blog.csdn.net/u013360850/article/details/70860144/
注:本文参考的主要教程,所有一切都始于这篇教程。 - SpringMVC 资源国际化实现以及常见问题 - LionheartCGJ - 博客园 https://www.cnblogs.com/LionheartCGJ/p/7819688.html
注:这也是一个很重要的文件,对于配置中的内容以及使用做了很详细的解释说明。上面的教程只是如何做,这篇是告诉你为什么要这么做,以及这么做有什么用。 - 其他不做详细描述了,可参考原文。
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...
第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 1.2 基础的结构并不简单3 1.3 架构演变的起点5 1.4 海量数据的解决方案5 1.4.1 缓存和页面静态化5 1 ...
相信有很多的程序员,不愿意进行用户管理这块代码实现. 原因之一,不同的JavaEE 系统,用户管理都会有个性化的实现,逻辑很繁琐. 而且是系统门面,以后背锅的几率非常大,可谓是低收益高风险. 最近在系 ...
1.前台页面: 引入js和css 全选复制放进笔记 <link type="text/css" rel="stylesheet" href=&quo ...
每篇一句 想当火影的人没有近道可寻,当上火影的人同样无路可退 前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏 ...
前面讲到随着前端技术的发展,web的开发已经实现了前后分离,并且spring mvc经过多个版本的更新,使用上也变得不一样,并且提供了很多便捷的功能.但是为了便于理解,我们使用比较原始的方式搭建spr ...
全部章节 >>>> 本章目录 5.1 Spring MVC设计概述及其框架结构 5.1.1 Spring MVC介绍 5.1.1 Spring MVC优势 5.1.2 S ...
作为一名刚出茅草屋的新手小白写的框架,仅适合新手小白借鉴,大神勿喷,谢谢...... 前天刚知道spring mvc这个框架现在也很流行,决定用它代替struts2来写我的毕业设计. ...作为一名新 ...
AudioFlinger(AF)是一个服务,具体的启动代码在av\media\mediaserver\Main_mediaserver.cpp中: int main(int argc, char** ...
javascript开源大全 Ajax框架-jQuery 可视化HTML编辑器-CKEditor 国产jQuery-UI框架-(jUI)-DWZ 网页开发FireFox插件-Firebug 服务器端的 ...
__set_PRIMASK();//关总中断 /************ **********/ __set_PRIMASK();//开总中断
一般事件 onclick IE3.N2 鼠标点击时触发 此事件 ondblclick IE4.N4 鼠标双击时触发 此事件 onmousedown IE4.N4 按下鼠标时触发 此事件 onmouse ...
class Program { class Result<T> { public T data; public string Message; public bool Success; p ...
TIANKENG’s rice shop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
在百度下载Photoshop CS6破解版,解压后,如图所示 进入Photoshop_CS6.3510481888\Adobe CS6目录,双击Set-up.exe开始安装 点击接受协议,进入 ...
Chapter 4. The class File Format Table of Contents 4.1. The ClassFile Structure 4.2. Names 4.2.1. Bi ...
http://www.csdn.net/article/2014-03-18/2818822-Unity-5-game-engine 其实我是搞3d的,这篇文章里所有的术语看了都有很强的亲切感. Un ...
/** 题目:Kanade's sum 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6058 题意:给定[1,n]的排列,定义f(l,r,k)表示区间[l ...