Leider gab es bei mir ein Problem: Ich habe eine Grails-Anwendung mit einem deutschen und einem Default-Bundle, das englische Texte enthält und immer dann zum Zuge kommen soll, wenn die Sprache des Browser-Clients eben nicht Deutsch ist. Also:
- messages_de.properties für Deutsch
- messages.properties für alle anderen Sprachen
Ich stellte meinen Browser auf Deutsch ein – alles wunderbar, die deutschen Texte kamen einwandfrei. Ich stellte den Browser auf Englisch ein – Enttäuschung: es kamen immer noch deutsche Texte!
Nach einigem Suchen im Quellcode von Grails (ValidationTagLib.groovy) fand ich heraus, dass für die Übersetzung ein Objekt vom Typ ReloadableResourceBundleMessageSource aus dem Spring-Framework verantwortlich ist. Dieses hat eine Property fallbackToSystemLocale, die auf true oder false stehen kann. Sie steht standardmäßig auf true, das heißt, wenn kein Text für das eingestellte Locale gefunden wird, wird nicht etwa der Text aus dem Default-Bundle genommen, sondern noch einmal in demjenigen Message-Bundle gesucht, das dem “system locale” entspricht. Meine Servermaschine läuft auch auf Deutsch, so dass nochmals auf die Texte in message_de.properties zugegriffen wurde.
Abhilfe:
Jetzt war klar, dass diese Property während der Initialisierung auf false gesetzt werden muss. Mit folgenden Zeilen in Boostrap.groovy war der Fehler behoben:
import org.codehaus.groovy.grails.commons.ApplicationAttributes
def init = { servletContext ->
def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
def messageSource = ctx.getBean("messageSource")
messageSource.fallbackToSystemLocale = false
}
Wenn jetzt ein Request mit englischem Locale eintrifft, wird auf messages.properties zugegriffen, das ergibt das gewünschte Verhalten.
Diese Beiträge könnten Sie noch interessieren:
- VHS auf bilinguale DVD
- Vorstellung auf Javanisch
- Tafel an der Wand – psychologisch gesund!
- MBCalendar
- Transparente Arbeit
Berater, Coach und Trainer für effektive Produktentwicklung
Danke für den Tipp!
Bitte, gern geschehen!