在freemarker模板中获取区域设置

时间:2013-11-04 10:24:17

标签: spring spring-mvc freemarker

如何获取freemarker模板中使用的当前区域设置?我见过<spring.message code />

的实现

我需要这个来做条件

<#if locale = DE >
.....
<#else>
....
</#if>

2 个答案:

答案 0 :(得分:5)

正如Freemarker documentation所说:

  

特殊变量是由FreeMarker引擎本身定义的变量。要访问它们,请使用.variable_name语法

     

.locale:返回语言环境设置的当前值。这是一个字符串,例如en_US。有关区域设置字符串的更多信息,请参阅设置指令。

因此,要访问Freemarker模板中的当前本地,您将使用

The current locale is: ${.locale}

要根据您的要求在条件语句中使用它,您可以这样做:

<#if .locale == "DE">
   ...
<#else>
   ...
</#if>

答案 1 :(得分:0)

@Rob Blake的回答在技术上是正确的,但我仍然想补充一些想法...

1。其他与语言环境相关的变量
不仅有.locale,还有.lang,而且由于FreeMarker 2.3.21也有.locale_object,它提供了实际的java.lang.Locale对象(不仅是字符串)。

有关更多信息,请参见Freemarker Special Variable Reference

2。请求的语言环境与RequestContext中的语言环境之间的区别
在某些情况下,Freemarker提供的Locale与您使用的Locale不同。

在我的情况下,我有一个带有LocaleChangeInterceptor的Freemarker Spring Boot应用程序,该应用程序允许您设置自己的语言环境(例如,在会话中),以便用户在使用{{1 }}以不同的语言呈现文本。

此代码段是受以下baeldung.com Spring Boot I18N tutorial启发的:

<@spring.message />

在这种情况下,更改语言环境后,由Freemarker提供的语言环境(即@Configuration public class McvConfiguration extends WebMvcConfigurerAdapter { @Bean public LocaleResolver localeResolver() { return new SessionLocaleResolver(); } @Bean public LocaleChangeInterceptor localeChangeInterceptor() { LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); lci.setParamName("lang"); return lci; } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(localeChangeInterceptor()); } } ${.locale}${.lang})和${.locale_object}中的语言环境(即(例如,用于RequestContext的语言环境)不同

在这种情况下,您应该改为从<@spring.message />中读取语言环境。

配置类

RequestContext

另请参阅SO - How to get the request context in a freemaker template in spring

Freemarker模板

  @Bean
  public ViewResolver viewResolver() {
    final UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); // or TilesViewResolver or whatever
    // make requestContext available for Freemarker templates as "${rc}"
    viewResolver.setRequestContextAttribute("rc");
    return viewResolver;
  }

因此,当您按下<#-- @ftlvariable name="rc" type="org.springframework.web.servlet.support.RequestContext" --> <!DOCTYPE html> <html lang="${rc.locale.language!"en"}"> <!-- ... --> </html> http://<serverName>:<serverPort>/<contextPath>/index?lang=enhttp://<serverName>:<serverPort>/<contextPath>/index?lang=de或应用程序支持的任何语言时,http://<serverName>:<serverPort>/<contextPath>/index?lang=fr标记的<html>属性将与lang本地化文本。