Lokalisierung in JSF, wie zu merken, ausgewählte Gebietsschema pro Sitzung und nicht pro Anfrage/view
faces-config.xml
:
<application>
<locale-config>
<default-locale>ru</default-locale>
<supported-locale>ua</supported-locale>
</locale-config>
</application>
In einer bean Methode Aktion, ich bin ändern der Ländereinstellungen in der aktuellen Ansicht wie folgt:
FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale("ua"));
Das problem ist, dass ua
Gebietsschema angewendet wird, aber nur pro Anfrage/Ansicht und nicht für eine Sitzung. Ein weiterer Antrag/in der gleichen Sitzung setzt die locale auf Standard zurück ru
Wert.
Wie kann ich das Gebietsschema für die session?
Ich bin gespannt, wie oft diese Technik ist für die Einstellung der Sprache? Ich habe alle meine Browser in Englisch, ist diese, die zuverlässig wie ein i18n-tech?
InformationsquelleAutor sergionni | 2011-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie zum speichern der Spracheinstellung in der session-scope und legen Sie es in die viewroot an zwei stellen: einmal durch
UIViewRoot#setLocale()
unmittelbar nach dem ändern der Gebietsschema (die änderungen, die das Gebietsschema des aktuellen viewroot und bekommen somit spiegelt sich in den postback; dieser Teil ist nicht notwendig, wenn Sie eine Umleitung durchzuführen danach) und einmal in derlocale
Attribut des<w:view>
(die Sätze/behält das Gebietsschema, in der die nachfolgenden Anforderungen/Ansichten).Hier ist ein Beispiel, wie eine solche
LocaleBean
Aussehen sollte:Und hier ist ein Beispiel für die Ansicht sollte wie folgt Aussehen:
Beachten Sie, dass
<html lang>
ist nicht erforderlich für die Arbeitsweise von JSF, sondern es ist zwingend erforderlich, wie die Suche bots interpretieren Ihre Seite. Sonst wäre es vielleicht so markiert werden, dass doppelte Inhalte, die schlecht für SEO.Verwandte:
Ihrer Wahl. Unter der Decke, Eigenschaften
<f:view>
gehen inUIViewRoot
was ist die root-Komponente.kannst du bitte fix-code in Ihrem Haupt-Artikel? Menschen, die wieder und wieder "ein Schritt auf einem Rechen" vor allem unerfahrene Programmierer. Danke.
Eine zusätzliche Frage. Ist es zwingend erforderlich, zu Bearbeiten faces-config.xml auf diese Weise pastebin.com/uEm9eYVg
das war bereits in der Frage.
InformationsquelleAutor BalusC
Sehe ich, dass das problem auch mit .Eigenschaften-Datei-Namen.
Java-Locale-uns-codes (Kleinbuchstaben) wie: de_de
Aber automatisch erstellt locale (per Netbeans) ist lowercase_uppercase d.h.: messages_en_GB.Eigenschaften
Name ändern in: messages_en_gb.Eigenschaften
und es sollte funktionieren - wenn du alles versucht
InformationsquelleAutor Sebastian
Diese Komponente f:view ist nicht da, JSF-Seite es funktioniert nicht und zeigt Es nur die Standard-englischen Sprache.Bieten die localae Wert für das f:view-Komponente, dann wird es funktionieren. Ich Stand vor dem gleichen problem, das jetzt seine Arbeit gut.
InformationsquelleAutor GIRI KUMAR PANEM
Eine kleine Bemerkung zu @BalusC gute Lösung. Wenn wir
<f:viewAction>
führt einige Methode in backing-bean. Gebietsschema verfügbar AufrufFacesContext.getCurrentInstance().getViewRoot().getLocale()
im inneren, die Methode wäre Gebietsschema festgelegt ist durch Benutzer-browser oder Standard-Anwendung Gebietsschema nicht das Gebietsschema, die auf session-bean durch den Benutzer Auswahl(natürlich können Sie entsprechen, wenn der browser das Gebietsschema entspricht das Gebietsschema, das der Benutzer ausgewählt).Kann ich stehe korrigiert, weil ich vielleicht etwas falsch gemacht beim implementieren der Lösung von @BalusC.
BEARBEITEN. Nach dem spielen mit JSF-lifecycle, dieses Verhalten mit dem Gebietsschema wird nicht mit
<f:viewAction>
, weil es ein ähnliches Verhalten auch mit@PostContruct
.<f:view locale="#{localeBean.locale}">
im Antrag(nach Benutzer ausgewählte Gebietsschema) ausgeführt wird, wird in der render-response-phase.<f:viewAction>
und@PostContruct
Methoden ausgeführt werden, in der invoke-application-phase. Deshalb ist die Logik, die ausgeführt wird bei dieser Methode nicht haben Zugriff auf Benutzer ausgewählte Gebietsschema.Lösung, die wir verwenden, wenn wir brauchen richtige Gebietsschema wird zu injizieren(CDI)
localeBean
in anderen backing-bean, enthält<f:viewAction>
und@PostContruct
Methoden, und dann set locale mitUIViewRoot#setLocale()
auslocaleBean
im Anfang dieser Methoden.wahrscheinlich hast du Recht, aber Wann und ob ich genug Ruf werde ich wohl vergessen zu diesem Thema. Von der anderen Seite und deine Erfahrung mit Jsf, Sie könnten überprüfen, gibt es ein Problem mit
f:viewAction
, die ich hier erwähnen.InformationsquelleAutor Znas Me
Wenn du CDI und deltaspike (JSF-Modul) in Ihrer Umgebung, Sie könnten fügen Sie den folgenden, um Ihre
LocaleBean
automatisch zurücksetzen des Gebietsschemas auf die aktuelle Ansicht:InformationsquelleAutor Xavier Dury