現在、Spring Bootアプリケーションを開発しています(レストコントローラーのみ)。サーバーへの各リクエストには言語タグが含まれています。このタグに従って特定の言語で応答を送信したいと思います。コントローラーはこれらのタグをリクエストから抽出し、ロケールインスタンスとしてサービスレイヤーに提供します。 src/main/resourcesの下に次のようなプロパティファイルを作成しました: https://i.stack.imgur.com/fsXPG.jpg 。
私の問題はデフォルトの言語にあります。提供されたロケールに関係なく、プロパティファイルから返されるメッセージは常にAppResources_pl.propertiesからのものです。問題はデフォルトのロケールにあると思います。今のところ、私は2つの異なる方法を試しましたが、デフォルトのプロパティファイルを英語に設定する方法がまだわかりません。
最初:
ResourceBundle myResources = ResourceBundle.getBundle("AppResources", currentLocale);
String message = myResources.getString("label.error");
2番目:
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.forLanguageTag("en-US"));
return slr;
}
@Bean
public MessageSource messageSource(){
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("AppResources");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
および稼働中:
messageSource.getMessage("label.error", null, locale)
双方向でメッセージを返しますが、常にAppResources_pl.propertiesから返します。提供されたロケールが* .propertiesファイルの下に見つからない場合、AppResources.propertiesをデフォルトのプロパティファイルとして設定するにはどうすればよいですか?
MessageSourceAccessor
ではデフォルトのロケールがnullであることがわかったため、システムロケールを使用しました。この問題は前回のバージョンで発生しました。約6か月前に、元のコメント構成で提供されたLocaleResolver
を使用し、正常に機能したためです。
次の行の問題を解決しましたreturn new MessageSourceAccessor(messageSource, Locale.US);
(直接渡されたLocale
)
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource getMessageSource() {
final ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
res.setDefaultEncoding("UTF-8");
res.addBasenames("classpath:messages/validation", "classpath:messages/messages", "classpath:messages/titles");
return res;
}
@Bean
public MessageSourceAccessor getMessageSourceAccessor(final MessageSource messageSource) {
return new MessageSourceAccessor(messageSource, Locale.US);
}
以下を試すことができます:
/*
* Create MessageSource bean
*/
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new
ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:AppResources");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
/*
* Create LocaleResolver Bean
*/
@Bean
public LocaleResolver localeResolver(){
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(new Locale("en")); // your default locale
return resolver;
}