Bei der Entwicklung einer Web-Applikation für ein britisches Unternehmen fiel auf, daß die Landeseinstellungen der XPage immer auf Deutsch eingestellt waren. Dies äußerte sich dahingehend, daß das Dojo Toolkit z.B. die Datumsauswahl des Datepickers immer im falschen Format angezeigt hat. Stellt man die Landeseinstellung des Browsers um, ändert sich auch die Clientseitige Darstellung der XPage.
Der Effekt ist darauf zurück zu führen, daß die Einstellung des Browsers herangezogen wird, um die XPage zu rendern. Welche Sprach- bzw. Landeseinstellung herangezogen wird, definiert der Client in seiner Anfrage: Beim Seitenaufruf sendet der Client eine Liste der bevorzugten Landeseinstellungen im HTTP-Request, die vom Domino-Server entsprechend interpretiert wird.
Hier ein Beispiel eines HTTP-Requests (weitere Details finden sich hier):
GET / HTTP/1.1 Host: www.google.de User-Agent: Mozilla/5.0 (X11; U; Linux i686; ... Accept: text/html,application/xhtml+xml,appl... Accept-Language: de-de,de;q=0.8,en-us;q=0.5 ... Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive
[Fett hervorgehoben: Liste der aktzeptierten Sprachen, nach Präferenz (gekürzt)]
Im generierten HTML-Codes findet man die Landeseinstellung für das Dojo-Toolkits in der Property „djConfig“, die beim Einbinden der JavaScript-Library ausgewertet wird:
<script type="text/javascript" src="/domjs/dojo-1.4.3/dojo/dojo.js" djConfig="locale: 'de', parseOnLoad: true"> </script>
[Fett markiert: „djConfig“-Variable mit Angabe der Landeseinstellung „de“]
Will man verhindern, daß die Locale-Einstellung des Browsers herangezogen wird, reicht es nicht aus, das „xsp.properties“-File zu bearbeiten, denn das „locale“-Attribut wird von der XPages-Engine falsch interpretiert:
Der Eintrag
xsp.client.script.dojo.djConfig=locale: 'en'
führt zu folgendem HTML-Code:
<script type="text/javascript" src="/domjs/dojo-1.4.3/dojo/dojo.js"
djConfig="locale:'de', parseOnLoad: true, locale:\'en\'">
</script>
[Fett: generierte Variable, in Rot: Doppelter Eintrag mit Escape-Zeichen]
Es gibt keinen Weg, die fehlerhafte Konvertierung des Anführungszeichen zu verhindern. Alle denkbaren Kombinationen und Wege werden nicht korrekt umgesetzt (z.B. die Angabe in Anführungszeichen, HTML-encodiert etc), so daß es auf diesem Weg nicht möglich ist, die Einstellung zu beeinflussen.
Um dennoch eine Vorgabe der Landesvorgabe zu erzwingen, muß in den Application Properties im Domino Designer die Landeseinstellung fest vorgegeben werden.
Dazu legt man in den „Localization Options“ auf dem Reiter „XPages Properties“ eine Einstellung an, die man als Standardeinstellung wie im folgenden Screenshot definiert:
Nach einem „Clean“ des Projektes ist dies die einzige Landeseinstellung der Applikation, egal welche „Wünsche“ der Browser vorgibt. Im HTML-Code wird die gewünschte Vorgabe eingefügt.
<script type="text/javascript" src="/domjs/dojo-1.4.3/dojo/dojo.js"
djConfig="locale:'en', parseOnLoad: true">
</script>
[Fett hervorgehoben: djConfig-Variable / In Rot: die erzwungene Landeseinstellung]
Nachtrag:
Tritt der Fehler „Can’t find resource for bundle javax.faces.Messages, key [ISOCODE]„, liegt dies daran, daß der entsprechende Languagepack nicht installiert ist.
Ist KEINE Locatlization-Einstellung vorhanden, gibt der Browser vor, welches Sprachbundle verwendet werden soll. Sobald eine Localization-Einstellung vorhanden ist, tritt der Fehler nicht mehr auf (das Bundle vorausgesetzt).