web-dev-qa-db-ja.com

SpringBoot-デフォルトのロケールを設定できません

現在、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をデフォルトのプロパティファイルとして設定するにはどうすればよいですか?

5
Patryk kowalski

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);
}
3
reconnect

以下を試すことができます:

/*
 * 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;
}
1
yuen26