Um die Locale-Einstellung einer XPage programmatisch zu beeinflussen, kann die Methode setLocaleString bzw. setLocale des context-Objektes verwendet werden. Damit die Änderungen übernommen wird, muss die Einstellung im BeforePageLoad gesetzt werden.
So ändert ein…
context.setLocaleString("zh-tw")
… bzw. ein …
context.setLocale(java.util.Locale.TAIWAN)
…die Spracheinstellungen der generierten XPage. Sowohl das lang-Attribute der HTML-Seite als die Dojo-Konfiguration wird dabei gesetzt:
<!DOCTYPE html> <html lang="zh-tw">
<script type="text/javascript" src="/xsp/.ibmxspres/dojoroot-1.6.1/dojo/dojo.js" djConfig="locale: 'zh-tw', parseOnLoad: true"></script>
Durch diese Änderung wird z.B. der Datepicker-Dialog des DojoToolkit auf Taiwanisch gerendert.
Eine Liste der möglichen Einstellungen findet sich in der Beschreibung des java.util.Locale-Objektes.
Alternativ kann die Änderung auch mit SSJS in einer Aktion o.ä. durchgeführt werden. Allerdings muss darauf die XPage neu geladen werden. Dies kann dann wie folgt aussehen:
context.setLocale(java.util.Locale.TAIWAN); context.reloadPage()
Can it be set globally or do you need to set it for every page loaded?
Yes, with a phase listener (just an idea – currently working with them):
package ch.hasselba.xsp.debug;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.faces.component.UIViewRoot;
public class LocalizationSetter implements PhaseListener {
public void afterPhase(PhaseEvent arg0) {
// TODO Auto-generated method stub
}
public void beforePhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
UIViewRoot view = facesContext.getViewRoot();
view.setLocale(java.util.Locale.CANADA_FRENCH);
}
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
}
This would work globally.
Pingback: Quick-n-Dirty: Locale setzen (2) | blog@hasselba.ch