Spring で国際化のために複数のファイルとメッセージを処理するにはどうすればよいでしょうか? 質問する

Spring で国際化のために複数のファイルとメッセージを処理するにはどうすればよいでしょうか? 質問する

Springの国際化に関するいくつかの記事では、ロケールを渡してメッセージを交換する方法などが説明されています。しかし、いくつかのメッセージを含むユースケースしか見つかりませんでした..

  • コンテキストごとに国際化ファイルを整理して使用するにはどうすればよいですか? (検証、メッセージの表示、既定のメッセージ、ビジネス メッセージ)

  • Spring ではパターン (定義されたメッセージ ファイルの名前) + ロケールが使用されることがわかっています。例: message_zh_CNこの動作を認識して、コンテキストごとにファイルを作成するにはどうすればよいでしょうか?

私が思うに、こうあるべきだと思います:

resources
`-- messages
    |-- validation
    |   |-- message_locale.properties
    |   `-- message_locale2.properties
    |-- business
    |   |-- message_locale.properties
    |   `-- message_locale2.properties
    `-- view
        |-- message_locale.properties
        `-- message_locale2.properties

または:

resources
`-- messages
    |-- validation
    |   |-- validation_locale.properties
    |   `-- validation_locale2.properties
    |-- business
    |   |-- business_locale.properties
    |   `-- business_locale2.properties
    `-- view
        |-- view_locale.properties
        `-- view_locale2.properties

ベストアンサー1

MessageSourceこれらすべての異なるメッセージ ファイルに対してグローバルを定義することもできます。このアプローチは、次のsetBasenamesメソッドを使用すると実用的です。

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = 
                                               new ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("classpath:/messages/business/message", 
                               "classpath:/messages/validation/message",
                               "classpath:/messages/view/message");

    return messageSource;
}

このアプローチは、メッセージ キーがすべてのファイルで一意である場合 (たとえば、キーがビジネス関連のメッセージ ソースにのみ存在する場合) に意味を持ちます。それ以外の場合は、コンテキストごとに 1 つ定義し、コンテキストに応じて挿入する方business-12が適切です。MessageSource

@Bean
public MessageSource businessMessageSource() {
    ReloadableResourceBundleMessageSource messageSource = 
                                               new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/messages/business/message");

    return messageSource;
}

@Bean
public MessageSource validationMessageSource() {
    ReloadableResourceBundleMessageSource messageSource = 
                                               new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/messages/validation/message");

    return messageSource;
}

@Bean
public MessageSource viewMessageSource() {
    ReloadableResourceBundleMessageSource messageSource = 
                                               new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/messages/view/message");

    return messageSource;
}

おすすめ記事