`
yvonxiao
  • 浏览: 77844 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Spring整合FreeMarker动态设置Locale

阅读更多

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"/>
1
0
分享到:
评论
2 楼 yvonxiao 2011-07-07  
keer2345 写道
请问楼主,lang字段在哪里定义?是在xml里面增加这一个属性吗?

这个lang就是你要设置的locale,比如"zh_CN".
1 楼 keer2345 2011-06-12  
请问楼主,lang字段在哪里定义?是在xml里面增加这一个属性吗?

相关推荐

    两种freemarker模板路径设置方法.docx

    FreeMarkerConfigurer是Spring为Freemarker提供的一个配置类,通过它可以设置Freemarker的相关属性,包括模板路径。以下是一个典型的配置示例: ```xml &lt;bean id="freeMarkerConfigurer" class="org.spring...

    freemarker中文文档与包

    9. **与其他技术的集成**: Freemarker可以轻松与Spring、Struts等Java Web框架集成,也适用于非Java环境,如Python的Jython或Groovy。 10. **最佳实践**: 使用Freemarker时,应遵循最佳实践,如保持模板简洁,避免...

    freeMarker中文手册PDF

    FreeMarker 是一个强大的模板引擎,常用于Web应用中的动态页面生成。它是一个开源项目,遵循Apache Software Foundation的Apache License 2.0。本手册是官方提供的中文版文档,旨在帮助开发者更好地理解和使用...

    freemarker官方中文帮助文档

    Freemarker是一款强大的模板引擎,常用于Web...同时,文档还可能涵盖高级特性,如自定义指令和函数,以及与其他技术(如Spring MVC)的集成。对于Java Web开发者来说,掌握Freemarker是提升项目质量和效率的重要步骤。

    spring-boot-web.zip

    Spring MVC会自动处理这个头,并设置`LocaleContextHolder`中的`Locale`。 5. **视图层集成**:在Thymeleaf或FreeMarker这样的模板引擎中,你可以直接使用表达式语言(EL)来获取当前语言的文本。例如,在Thymeleaf...

    FreeMarker文档+jar资源

    FreeMarker是一款强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,尤其在Web应用开发中被广泛使用。它与Java语言紧密集成,但不包含任何的Java代码,使得视图层和业务逻辑层分离,提高了...

    freemarker-2.3.10.tar.gz

    10. **与其他技术的集成**:Freemarker可以与Spring、Struts、Hibernate等框架无缝集成,广泛应用于各种Java Web项目。 下载并解压"freemarker-2.3.10.tar.gz"后,用户通常会找到如下内容: - `lib/`目录:包含...

    Spring MVC学习框架

    Spring MVC 是一个强大且灵活的框架,它与 Spring 框架的其他模块(如 Spring JDBC、Spring ORM、Spring Security 等)紧密集成,可以为 web 应用提供全面的解决方案。通过学习和熟练使用 Spring MVC,开发者可以...

    Spring Web MVC入门教程

    同时,Spring Web MVC支持灵活的URL映射策略,能够非常方便地与其他视图技术(如Velocity、FreeMarker等)集成。此外,它还提供了一系列内置的功能,如数据类型转换器、数据格式化器、数据验证器等,极大地简化了...

    freemarker总结

    JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: &lt;#if condition&gt;... &lt;#elseif condition&gt;... &lt;#elseif condition&gt;......

    spring3mvc所需jar包

    Spring 3 MVC 是一个强大的Java Web开发框架...这个整合包包含的jar文件可能是Spring MVC框架本身、Spring核心库、相关依赖如Spring AOP、Spring JDBC、Spring ORM以及其他必要的库,确保了开发环境的完整性和兼容性。

    Spring MVC 详细入门教程(含jar包)

    Spring MVC可以无缝集成Spring的其他模块,如Spring Security(安全控制)、Spring Data(数据访问)、Spring Batch(批处理)等,构建完整的应用程序。 总的来说,Spring MVC 提供了一套完善的Web开发解决方案,...

    项目实战spring—mvc.zip

    同时,Spring MVC与Spring其他模块如Spring Data JPA、Spring Security等集成,可以实现数据库操作、权限控制等功能,进一步完善Web应用。 在本项目实战中,你将会学习到如何搭建Spring MVC环境,编写Controller,...

    spring-mvc-step-by-step

    了解如何在Spring MVC中实现多语言支持,使用locale resolver和message source来提供不同的翻译。 13. **安全性** 教程可能涵盖Spring Security的基本用法,如认证、授权和保护敏感端点,确保Web应用的安全性。 ...

    Spring中的mvc详解

    Spring MVC支持根据用户的locale设置提供不同的资源和服务,通过`LocaleResolver`和`MessageSource`实现。 8. **RESTful风格** Spring MVC支持创建RESTful服务,通过`@GetMapping`、`@PostMapping`等注解映射HTTP...

    spring mvc

    - Spring MVC通过消息源(MessageSource)支持国际化和本地化,提供不同语言的资源文件,可以根据用户请求的locale动态加载。 8. **RESTful风格**: - Spring MVC支持创建RESTful API,通过HTTP方法(GET、POST、...

    spring mvc 库

    14. **模板引擎集成**:Spring MVC可以与其他模板引擎(如FreeMarker、Thymeleaf)集成,提供动态HTML生成能力。 15. **Spring Boot集成**:在Spring Boot项目中,Spring MVC的配置可以极大简化,甚至默认就已经...

    freemarker:我们将使用freemarker作为模板引擎

    三、集成Freemarker到Java项目 1. 添加依赖:在Maven或Gradle项目中,需要添加Freemarker的依赖库。 2. 配置:配置Freemarker的设置,如模板目录、缓存策略等,通常在Spring框架中通过`FreemarkerConfig`类进行...

    spring_mvc

    10. **模板引擎集成**:Spring MVC可以与多种模板引擎(如Thymeleaf、FreeMarker、Velocity等)无缝集成,方便创建动态HTML页面。 通过以上讲解,你应该对Spring MVC有了一个全面的了解。这个框架强大而灵活,无论...

Global site tag (gtag.js) - Google Analytics