Spring整合FreeMarker本地化动态设置
Spring整合FreeMarker进行国际化的过程很简单,将spring-webmvc里的org/springframework/web/servlet/view/freemarker下的spring.ftl include到各个要国际化的ftl文件里就行了,比如将这个spring.ftl复制在ftl文件目录的common下,可以这样直接在ftl里include进来
<#import "/common/spring.ftl" as spring/>
当然也可以在spring配置文件里对freemarkerConfig配置的时候自动导入
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> ... <property name="freemarkerSettings"> <props> <prop key="defaultEncoding">UTF-8</prop> ... <prop key="auto_import">common/spring.ftl as spring</prop> </props> </property>
然后在spring的配置文件里声明下
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>MessageResources</value> </list> </property> </bean>
在源文件目录resource下有相应的MessageResources.zh_CN.properties和MessageResources.en_US.propertes等属性文件
在ftl文件里这样使用
<@spring.message "hello"/>
这样系统会根据用户当前环境下的locale进行国际化。但是如果要自己手动指定某个用户的locale要怎么办呢?
参考了下org.springframework.web.servlet.i18n.LocaleChangeInterceptor对locale的设置,首先要在spring的配置文件里声明一个LocaleResolver (比如 CookieLocaleResolver,不然的话后面的操作会出现异常),我这里对Locale的设置只要在session范围里就行了
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="zh" /> </bean>
接着在spring的controller里控制locale的方法里加入以下代码就可以了
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver == null) { throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?"); } LocaleEditor localeEditor = new LocaleEditor(); localeEditor.setAsText(lang); localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());
最后总结下我的方式
1.spring的配置里必须要有的
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/ftl/"/> <property name="freemarkerSettings"> <props> <prop key="defaultEncoding">UTF-8</prop> <!-- 在生产环境下更新模板的间隔要根据实际情况设置,这里为开发方便设置为5秒 --> <prop key="template_update_delay">5</prop> <!-- 我把spring.ftl里的内容和项目里要用到的公共的macro合在一起了 --> <prop key="auto_import">common/website.ftl as website</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="cache" value="true"/> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> <property name="contentType" value="text/html;charset=utf-8"></property> </bean> <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="zh" /> </bean> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>MessageResources</value> </list> </property> </bean>
2.在设置用户Locale的Controller里设置Locale
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver == null) { throw new IllegalStateException("No LocaleResolver found: not in a DispatcherServlet request?"); } LocaleEditor localeEditor = new LocaleEditor(); localeEditor.setAsText(lang); localeResolver.setLocale(request, response, (Locale) localeEditor.getValue());
3.在ftl里这样使用
<@website.message "hello"/>
来源:http://yvonxiao.iteye.com/blog/1005183
Spring整合FreeMarker本地化动态设置相关推荐
- java 定时任务插件_详解Spring整合Quartz实现动态定时任务
最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...
- Spring 整合Mybatis Mapper动态代理方法
先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...
- 使用Freemarker来页面静态化,与Spring整合使用
页面静态化介绍 页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为 通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页 ...
- Spring Boot 整合 FreeMarker 实例
前言 在之前的文章Spring Boot 整合 Thymeleaf中,我们学习了如何将模板 Thymeleaf 整合到 Spring Boot 中,那今天我们就来看看,另一个老牌的开源免费模板引擎 - ...
- Spring Boot 整合 Freemarker
这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页.电子邮件.配置文件以及源代码等.Freemarker 不是面向最终用户的,而是一个 Ja ...
- mybatis02映射动态sql关联查询spring整合mybatis
2019独角兽企业重金招聘Python工程师标准>>> 输入映射和输出映射: 动态sql: 关联查询_一对一: 关联查询_一对多: 一对一,一对多操作的区别: 一对一,resultM ...
- Quartz在Spring中动态设置cronExpression
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...
- Spring mvc整合freemarker详解
1.什么是FreeMarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模 ...
- freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...
最新文章
- jdbc获取mysql 列信息_JDBC获取数据库信息:获取表中各列的信息
- PHP serialize JSON 解析
- [C++调试笔记]初始化
- scala一些奇怪的操作符的效果(持续更新中)
- 交流电的有效值rms值_交流电路中的电源
- springsession分布式登录被覆盖_拉勾 分布式 学习小结
- 本地虚拟机上的docker安装mysql_linux下利用Docker安装mysql的步骤
- python真的那么火还是炒作_Python语言为什么会这么火?老男孩python
- BigDecimal与double
- Framework4.0 IIS7下urlrewriter设置问题
- 你知道吗?macOS Sierra修复漏洞超过60个
- 基于dubbo + maven 的项目搭建
- 语音识别实验报告.docx
- nlp基础—10.结巴分词的应用及底层原理剖析
- 数据库原理及应用总结
- 鼠标右键没有word、excel/右键不能新建word、ppt等office
- 记一次ARM-鲲鹏服务器读写parquet报错解决过程
- 塔勒布四部曲之《非对称风险》
- URLRewrite,地址重写.
- 软件-DiskSpeekUp:DiskSpeekUp(磁盘整理工具)
热门文章
- ShopWithMe安装RFID系统,建立新型智慧快闪店
- 求100以内的素数并输出(详细讲解)
- 【域泛化综述-2022 TPAMI】Domain Generalization: A Survey
- Mellanox Infiniband 架构设计快速实战指南 - A
- 移动互联网十大创新应用
- Google网上应用店的网址
- 修改unity代码编辑器
- x265-1.8版本-encoder/frameencoder.h注释
- 大数据实时监控mysql数据库binlog(一)
- python读取tiff影像_python+tifffile之tiff文件读写方式