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本地化动态设置相关推荐

  1. java 定时任务插件_详解Spring整合Quartz实现动态定时任务

    最近项目中需要用到定时任务的功能,虽然spring 也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 普通定时任务 首先 ...

  2. Spring 整合Mybatis Mapper动态代理方法

    先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...

  3. 使用Freemarker来页面静态化,与Spring整合使用

    页面静态化介绍 页面静态化其实就是将原来的动态网页(例如通过ajax请求动态获取数据库中的数据并展示的网页)改为 通过静态化技术生成的静态网页,这样用户在访问网页时,服务器直接给用户响应静态html页 ...

  4. Spring Boot 整合 FreeMarker 实例

    前言 在之前的文章Spring Boot 整合 Thymeleaf中,我们学习了如何将模板 Thymeleaf 整合到 Spring Boot 中,那今天我们就来看看,另一个老牌的开源免费模板引擎 - ...

  5. Spring Boot 整合 Freemarker

    这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页.电子邮件.配置文件以及源代码等.Freemarker 不是面向最终用户的,而是一个 Ja ...

  6. mybatis02映射动态sql关联查询spring整合mybatis

    2019独角兽企业重金招聘Python工程师标准>>> 输入映射和输出映射: 动态sql: 关联查询_一对一: 关联查询_一对多: 一对一,一对多操作的区别: 一对一,resultM ...

  7. Quartz在Spring中动态设置cronExpression

    什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

  8. Spring mvc整合freemarker详解

    1.什么是FreeMarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写  FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模 ...

  9. freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker

    今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...

最新文章

  1. jdbc获取mysql 列信息_JDBC获取数据库信息:获取表中各列的信息
  2. PHP serialize JSON 解析
  3. [C++调试笔记]初始化
  4. scala一些奇怪的操作符的效果(持续更新中)
  5. 交流电的有效值rms值_交流电路中的电源
  6. springsession分布式登录被覆盖_拉勾 分布式 学习小结
  7. 本地虚拟机上的docker安装mysql_linux下利用Docker安装mysql的步骤
  8. python真的那么火还是炒作_Python语言为什么会这么火?老男孩python
  9. BigDecimal与double
  10. Framework4.0 IIS7下urlrewriter设置问题
  11. 你知道吗?macOS Sierra修复漏洞超过60个
  12. 基于dubbo + maven 的项目搭建
  13. 语音识别实验报告.docx
  14. nlp基础—10.结巴分词的应用及底层原理剖析
  15. 数据库原理及应用总结
  16. 鼠标右键没有word、excel/右键不能新建word、ppt等office
  17. 记一次ARM-鲲鹏服务器读写parquet报错解决过程
  18. 塔勒布四部曲之《非对称风险》
  19. URLRewrite,地址重写.
  20. 软件-DiskSpeekUp:DiskSpeekUp(磁盘整理工具)

热门文章

  1. ShopWithMe安装RFID系统,建立新型智慧快闪店
  2. 求100以内的素数并输出(详细讲解)
  3. 【域泛化综述-2022 TPAMI】Domain Generalization: A Survey
  4. Mellanox Infiniband 架构设计快速实战指南 - A
  5. 移动互联网十大创新应用
  6. Google网上应用店的网址
  7. 修改unity代码编辑器
  8. x265-1.8版本-encoder/frameencoder.h注释
  9. 大数据实时监控mysql数据库binlog(一)
  10. python读取tiff影像_python+tifffile之tiff文件读写方式