Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: jsf internacjonalizacja

Witam,




import java.io.Serializable;
import java.util.Locale;

import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;

@Named("lang")
@SessionScoped

public class JezykBean implements Serializable {
public void choose(ActionEvent e)
{
FacesContext ctx = FacesContext.getCurrentInstance();
String lang = ctx.getExternalContext().
getRequestParameterMap().get("locale");
if(lang != null)
{
ctx.getViewRoot().setLocale(new Locale("en"));
}
}

}



<h:commandLink actionListener="#{lang.choose}">pl</h:graphicImage>
<f:param value="pl" name="locale" /></h:commandLink>
<h:commandLink actionListener="#{lang.choose}"><f:param value="en" name="locale" /></h:commandLink>



<locale-config>
<default-locale>pl</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
<resource-bundle>
<base-name>lang.lang</base-name>
<var>msg</var>
</resource-bundle>


Chcę zrobić wielojęzyczną aplikację, ustawiłem zakres sesyjny i mimo wszystko język działa tylko dla requestu, mam drugiego beana o zasięgu sesyjnym, który działa.

Proszę o radę.Krzysztof Z. edytował(a) ten post dnia 03.07.11 o godzinie 20:26

konto usunięte

Temat: jsf internacjonalizacja

Witam,

Tutaj:


String lang = ctx.getExternalContext().
getRequestParameterMap().get("locale");
if(lang != null)
{
ctx.getViewRoot().setLocale(new Locale("en"));
}


Zawsze ustawiasz locale na "en".
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: jsf internacjonalizacja

to akurat przykład nawet jak dam inny tak samo się zachowuje....
Jest ustawione en mimo tego po zapytaniu dalej wraca język domyślny, i nie wiem dlaczego tak się dzieje
w programie mam tak:

FacesContext ctx = FacesContext.getCurrentInstance();
String lang = ctx.getExternalContext().
getRequestParameterMap().get("locale");
if(lang != null)
{
ctx.getViewRoot().setLocale(new Locale(lang));
}
Krzysztof Z. edytował(a) ten post dnia 04.07.11 o godzinie 10:46
Piotr Wierzbowski

Piotr Wierzbowski IT Architect, Asseco
Poland S.A.

Temat: jsf internacjonalizacja

Błąd polega na tym, że ustawiasz sobie locale dla aktualnego widoku, a nie w sesji i w najlepszym wypadku tylko raz ten język będzie ustawiony tak jak chcesz.
Aby wymusić inny język musisz użyć w pliku strony

<f:view locale="#{lang.locale}">


w metodzie choose nie ustawiaj nic na viewRoot - to raczej służy do pobierania aktualnego języka użytkownika
zamiast tego zrób sobie property klasy (np. locale), ustaw go w choose i potem zbinduj z atrybutem locale w f:view
Krzysztof Z.

Krzysztof Z. Programista PHP/
Webdeveloper

Temat: jsf internacjonalizacja

Piotr Wierzbowski:
Błąd polega na tym, że ustawiasz sobie locale dla aktualnego widoku, a nie w sesji i w najlepszym wypadku tylko raz ten język będzie ustawiony tak jak chcesz.
Aby wymusić inny język musisz użyć w pliku strony

<f:view locale="#{lang.locale}">


w metodzie choose nie ustawiaj nic na viewRoot - to raczej służy do pobierania aktualnego języka użytkownika
zamiast tego zrób sobie property klasy (np. locale), ustaw go w choose i potem zbinduj z atrybutem locale w f:view

W wersji 1.2 to działało więc myślałem, że w dwójce też ale jak widać nie. Dzięki za radę.

Następna dyskusja:

Wykresy w JSF




Wyślij zaproszenie do