freemarker テンプレートで使用されている現在のロケールを取得するにはどうすればよいですか? の実装を見てきました<spring.message code />
条件を実行するにはこれが必要です
<#if locale = DE >
.....
<#else>
....
</#if>
freemarker テンプレートで使用されている現在のロケールを取得するにはどうすればよいですか? の実装を見てきました<spring.message code />
条件を実行するにはこれが必要です
<#if locale = DE >
.....
<#else>
....
</#if>
Freemarker のドキュメントに記載されているとおり:
特殊変数は、FreeMarker エンジン自体によって定義される変数です。それらにアクセスするには、.variable_name 構文を使用します
.locale: ロケール設定の現在の値を返します。これは、en_US などの文字列です。ロケール文字列の詳細については、設定ディレクティブを参照してください。
したがって、Freemarker テンプレート内の現在のローカルにアクセスするには、使用します
The current locale is: ${.locale}
要件に従って条件ステートメントで使用するには、次のようにします。
<#if .locale == "DE">
...
<#else>
...
</#if>
@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/>ローカライズされたテキストの言語と一致します。