2016-10-20 1 views
5

Einige Artikel über Spring Internationalisierung sagen, wie Nachrichten tauschen das Gebietsschema und etc vorbei, aber ich fand nur Fälle, die ein paar Nachrichten enthält ..Wie behandelt man mehrere Dateien und Nachrichten für die Internationalisierung im Frühling?

  • Wie kann ich organisieren und pro Kontext Internationalisierung Dateien verwenden ? (Validierung, Anzeigen von Nachrichten, Standardnachrichten, Geschäftsnachrichten)

  • Ich weiß, dass Spring das Muster verwendet (Name der Nachrichtendatei definiert) + Gebietsschema. Beispiel: message_zh_CN. Wie kann ich Dateien pro Kontext mit über dieses Verhalten haben?

Was ich denke, es sein sollte:

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

Was Sie mit Ihrem bevorzugten Struktur stoppt. Ich sehe die Frage hier nicht um ehrlich zu sein. –

+0

In den Beispielen sah ich nur eine Datei und ich bin ein wenig verwirrt darüber, wie mehr Dateien verwenden – Lucas

Antwort

7

Sie entweder eine globale MessageSource für all die verschiedenen Nachrichtendateien definieren. Dieser Ansatz ist praktisch, die setBasenames Methode:

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

    return messageSource; 
} 

Dieser Ansatz macht Sinn, wenn Sie Ihre Nachricht Schlüssel eindeutig über alle Dateien, zum Beispiel business-12 Schlüssel gibt nur in geschäftsbezogenen Nachrichtenquellen aus. Andernfalls ist es besser, ein MessageSource pro Kontext zu definieren und injizieren sie entsprechend Ihrem Kontext:

@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

Schön .. es ist einfach, aber ich habe nicht, wie zu tun !! Vielen Dank! – Lucas

Verwandte Themen