2016-05-24 5 views
3

Momentan implementiere ich einen Dienst zum Versenden von Benachrichtigungen (zB SMS) an Kunden. Der Service wird in Java basierend auf Spring Boot geschrieben.Wie man die spezifische Textnachricht in Spring Boot internationalisiert?

Ich möchte eine Nachricht in der Sprache des Empfängers senden.

Also im Grunde würde ich gerne eine Methode haben, eine ID der Nachricht mit der gewünschten Lokalisierung ("en", "fr", "es") nehmen und den richtigen String zurückgeben. Auch eine Standardsprache (wie "en") zu konfigurieren, wäre großartig - um darauf zurückzugreifen, wenn die gewünschte Sprache nicht unterstützt wird.

Irgendwelche Vorschläge, wie Sie dies mit Spring Boot erreichen können?

S.S .: Entschuldigung, ja, ich habe versucht "googeln". Ich habe mehrere Beispiele für die Internationalisierung gefunden, aber die meisten scheinen nicht nützlich zu sein, da sie für die gesamte Benutzeroberfläche gedacht sind, nicht für eine bestimmte Nachricht.

Antwort

4

Zuerst müssen Sie einige Ressourcendateien erstellen. Legen Sie eine Datei mit der Bezeichnung messages_en.properties und eine andere messages_fr.properties in src/main/resources.

In der en-Datei fügen Sie eine Zeile:

hello.world=Hello World! 

In der fr-Datei eine Zeile hinzu:

hello.world=Bonjour le monde! 

Dann, wo immer Sie brauchen diesen Text zu bekommen injizieren ein Message

@Autowired private MessageSource messageSource; 

Dann können Sie es verwenden, um den Text

zu erhalten
messageSource.getMessage("hello.world", null, locale); 

Sie müssen das Gebietsschema des Benutzers an diese Methode übergeben. Sie können einen LocaleResolver dafür einrichten, wenn Sie dies benötigen.

+0

Danke für die schnelle Antwort! Leider bin ich noch nicht erfolgreich. Gibt es bestimmte Abhängigkeiten und/oder Anmerkungen, die hinzugefügt werden können? – stepio

+0

In meinem Fall ist parentMessageSource null und sucht jetzt nach der richtigen Initialisierung. – stepio

0

Ab jetzt habe ich das Problem der Initialisierung Message manuell aufgelöst:

@PostConstruct 
public void initMessageSource() { 
    ReloadableResourceBundleMessageSource reloadableMessageSource = new ReloadableResourceBundleMessageSource(); 
    reloadableMessageSource.setDefaultEncoding("UTF-8"); 
    reloadableMessageSource.setBasename(config.getI18nBundleBase()); 
    reloadableMessageSource.setCacheSeconds(config.getI18nCacheSeconds()); 
    this.messageSource = reloadableMessageSource; 
} 

autowiring meine Message mit leeren DelegatingMessageSource initialisiert, so Internationalisierung hat nicht funktioniert.