2016-10-20 75 views
5

關於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 

OR:

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

什麼阻止您使用您的首選結構。這裏我沒有看到這個問題是誠實的。 –

+0

在示例中,我只看到一個文件,我對如何使用更多文件有點困惑 – Lucas

回答

7

您可以定義一個全局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; 
} 

這種做法是有道理的,如果您的留言鍵在所有文件中唯一的,例如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; 
} 
+1

尼斯..這很簡單,但我沒有得到如何做!謝謝! – Lucas