Erzwungene „Locale“-Einstellung

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).

Dieser Beitrag wurde unter Allgemein, Dojo Toolkit, Java Script, XPages abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert