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来写我的毕业设计. ...作为一名新 ...
随机推荐
- word2016打开2007文档出错
不知从何时起,我电脑上的一部分office文件打开时频频报错!!! 有一段时间发现,通过iis发布的网站上下载excel文件的时候,通过localhost下载的文件能够正常打开,但是通过IP和端口下载 ...
- 【HTML5 WebSocket】WebSocket对象特性和方法
<HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接 ...
- SICP 1.23-1.26体会
1.23 代码修改非常easy, 关键是时间. 电脑上算了一下. 100000000下面全是0. 開始还以为代码写错了. 最后没办法, 用1e10 1e11来计算. 发现比 1e11 1e12快1.2 ...
- 0xffff0000颜色表示
0xffff0000表红色,意思是: A:ff=255 R:ff=255 G:00=0 B:00=0 可如下将(255,0,0,255)转成0xffff0000并输出: inline DWORD RG ...
- 用jquery制作一个简单的导航栏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Atitit.js获取上传文件全路径
Atitit.js获取上传文件全路径 1. 默认的value只能获取文件名..安全原因.. 1 2. Firefox浏览器的读取 1 3. Html5 的file api 2 4. 解决方法::使用a ...
- Atitit. WordPress 4.2.2新特性对比 attilax总结
Atitit. WordPress 4.2.2新特性对比 attilax总结 1. WordPress 2.9带来的新特性 1 2. WordPress3.0最为突出的五个新特征 2 3. WordP ...
- JS高程3:表单脚本
HTML和CSS对表单的操作还是比较乏力的,在表单操作中,JS势必会使用到. 基础知识 文本框 选择框 序列化 富文本编辑器 基础知识 HTMLFormElement接口可以创建或者修改<for ...
- Windows自带的端口转发工具netsh使用方法
微软Windows的netsh是一个命令行脚本实用工具.使用netsh工具 ,可以查看或更改本地计算机或远程计算机的网络配置.不仅可以在本地计算机上运行这些命令,而且可以在网络上的远程计算机上运行. ...
- Spring的核心机制——依赖注入(Dependency Inject)
Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...
- 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来写我的毕业设计. ...作为一名新 ...
不知从何时起,我电脑上的一部分office文件打开时频频报错!!! 有一段时间发现,通过iis发布的网站上下载excel文件的时候,通过localhost下载的文件能够正常打开,但是通过IP和端口下载 ...
<HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接 ...
1.23 代码修改非常easy, 关键是时间. 电脑上算了一下. 100000000下面全是0. 開始还以为代码写错了. 最后没办法, 用1e10 1e11来计算. 发现比 1e11 1e12快1.2 ...
0xffff0000表红色,意思是: A:ff=255 R:ff=255 G:00=0 B:00=0 可如下将(255,0,0,255)转成0xffff0000并输出: inline DWORD RG ...
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
Atitit.js获取上传文件全路径 1. 默认的value只能获取文件名..安全原因.. 1 2. Firefox浏览器的读取 1 3. Html5 的file api 2 4. 解决方法::使用a ...
Atitit. WordPress 4.2.2新特性对比 attilax总结 1. WordPress 2.9带来的新特性 1 2. WordPress3.0最为突出的五个新特征 2 3. WordP ...
HTML和CSS对表单的操作还是比较乏力的,在表单操作中,JS势必会使用到. 基础知识 文本框 选择框 序列化 富文本编辑器 基础知识 HTMLFormElement接口可以创建或者修改<for ...
微软Windows的netsh是一个命令行脚本实用工具.使用netsh工具 ,可以查看或更改本地计算机或远程计算机的网络配置.不仅可以在本地计算机上运行这些命令,而且可以在网络上的远程计算机上运行. ...
Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...