アプリケーション用にSpringブートを使用しています。 ApplicationConfig.javaでは、私は以下のコードSpringブートローカリゼーションの問題 - Accept-Languageヘッダー
@Bean
public LocaleResolver localeResolver() {
return new SmartLocaleResolver();
}
を持っているとSmartLocaleResolver.javaは
public class SmartLocaleResolver extends SessionLocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
final String acceptLanguage = request.getHeader("Accept-Language");
if (acceptLanguage.contains(",")) {
String[] aheader = acceptLanguage.split(",[ ]*");
for (String locale : aheader) {
if (ApplicationConstants.LOCALE.contains(locale)) {
locale.trim();
return Locale.forLanguageTag(locale);
}
}
} else if (!acceptLanguage.contains(",") && !acceptLanguage.isEmpty()) {
if (ApplicationConstants.LOCALE.contains(acceptLanguage)) {
return Locale.forLanguageTag(acceptLanguage);
}
}
return request.getLocale();
}
}
を下回っていると私は言語をAcceptヘッダーの値を比較するには、以下の私の定数クラスを持っています。
public static final List LOCALE =コレクション .unmodifiableList(Arrays.asList( "en"、 "es"));
実際のシナリオでは、ヘッダは のようになります。Accept-Language:fr、es; q = 0.8、en-us; q = 0.6しかし、テスト目的のために、私は以下のように渡します。
は受け入れ言語を:FRは、ES、
エンコードはまだ完了していないですが、私はただのコードがロケールとして「ES」をピックアップし、私にローカライズさを与えるかどうかを確認するために郵便配達員からテストしています結果。
私はmessages_fr.propertiesファイルを持っていませんが、messages_es.propertiesを持っていますので、アプリケーションがロケールを下のコードから設定すると、ロケールが「es」として選択され、スペイン語で必要な値が与えられます。コードを動作させるためにここで何を変更する必要がありますか?
なぜcすべての 'request.getLocale()'は直接ですか? –
私は単にrequest.getLocale()を直接呼び出すと、プロジェクトで 'fr'をサポートしていないことをどのように確認するのですか?私は私のプロジェクトにmessages_fr.properiesを持っていません。したがって、frを無視する必要があり、 'es'をサポートし、messages_es.propertiesを持っているため、Localeを 'es'として設定する必要があります。私はそれを論理的に書かなければ自動的にそれを行うことができますか? – Arun