5

freemarker テンプレートで使用されている現在のロケールを取得するにはどうすればよいですか? の実装を見てきました<spring.message code />

条件を実行するにはこれが必要です

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

2 に答える 2

7

Freemarker のドキュメントに記載されているとおり:

特殊変数は、FreeMarker エンジン自体によって定義される変数です。それらにアクセスするには、.variable_name 構文を使用します

.locale: ロケール設定の現在の値を返します。これは、en_US などの文字列です。ロケール文字列の詳細については、設定ディレクティブを参照してください。

したがって、Freemarker テンプレート内の現在のローカルにアクセスするには、使用します

The current locale is: ${.locale}

要件に従って条件ステートメントで使用するには、次のようにします。

<#if .locale == "DE">
   ...
<#else>
   ...
</#if>
于 2013-11-04T10:43:12.227 に答える
0

@Rob Blakeの答えは技術的には正しいですが、それでもいくつかの考えを追加したいと思います...

1. その他のロケール関連
の変数 だけ.localeでなく.lang、FreeMarker 2.3.21 以降.locale_objectでは、実際のjava.lang.Localeオブジェクト (文字列だけでなく) を提供する もあります。

詳細については、 Freemarker 特殊変数リファレンスを参照してください。

2. リクエストのロケールと RequestContext のロケールの違い
場合によってはLocale、Freemarker によって提供される が、使用するものと同じではないLocaleことがあります。

私の場合、Freemarker Spring Boot ApplicationLocaleChangeInterceptor<@spring.message />.

このコード スニペットは、このbaeldung.com Spring Boot I18N チュートリアルに触発されています。

@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());
  }

}

この場合、ロケールが変更された後、Freemarker によって提供されるロケール (つまり${.locale}${.lang}および${.locale_object}) と のロケールRequestContext(つまり、<@spring.message />たとえば使用されるロケール)が異なります

この場合、RequestContext代わりに から Locale を読み取る必要があります。

構成クラス

  @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;
  }

SO - 春にフリーメーカーテンプレートでリクエストコンテキストを取得する方法も参照してください

フリーマーカー テンプレート

<#-- @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=enまたはhttp://<serverName>:<serverPort>/<contextPath>/index?lang=deまたはhttp://<serverName>:<serverPort>/<contextPath>/index?lang=fr、またはアプリケーションがサポートする言語を押すと、<html>タグのlang属性は<@spring.message/>ローカライズされたテキストの言語と一致します。

于 2020-01-16T11:12:16.200 に答える