Ustawianie bieżącego języka

Aby mechanizm tłumaczeń mógł wybrać odpowiednie tłumaczenie musi wiedzieć jaki jest ustawiony bieżący język. Wybieranie bieżącego języka jest realizowane wg następującej kolejności:

  1. Wartość zmiennej globalnej o nazwie lang.languageCode.

  2. Wartość ciasteczka o nazwie [nazwa instancji].lang.languageCode.

  3. W celu zapewnienia kompatybilności wstecznej, jeżeli istnieje sesja to język określany jest na podstawie wartości zmiennej sesyjnej o nazwie: "LANGUAGE_DEFAULT".

  4. Jeżeli użytkownik jest zalogowany (istnieje sesja) to język określany jest na podstawie wpisu w tabelce p_users, kolumna language.

  5. Jeżeli dla danego użytkownika nie ma ustawionej kolumny p_users.language to język jest określany na podstawie języka domyślnego dla instancji (konfiguracja instancji)

  6. Jeżeli nie ma sesji oraz nie ma ustawionej zmiennej globalnej lang.languageCode język jest określany na podstawie języka domyślnego dla instancji (konfiguracja instancji)

Poniżej przedstawione zostały zalety i wady poszczególnych wariantów:

Ad. 1

Jest to dobre rozwiązanie gdy w systemie nie ma logowania dla każdego użytkownika (np. cały system ma dostęp publiczny). Wtedy ustawienie zmiennej lang.languageCode spowoduje wybranie bieżącego języka na jej podstawie. Ma to taką wadę, że aby w całym systemie mieć ustawioną zmienną lang.languageCode=”pl” należało by to robić na wszystkich stronach systemu. Można to ominąć przez wykorzystanie mechanizmu sticky param. W konfiguracji instancji robimy:

<url stickyParams="lang.languageCode=pl"/>

Spowoduje to zdefiniowanie lepkiego parametru, który będzie doczepiany do każdego urla wygenerowanego w systemie. Późniejsze przypisanie do zmiennej lang.languageCode innego kodu języka np.:

$=("lang.languageCode", 'en')

spowoduje zmianę języka. Powyższy przykład ze sticky param powoduje ustawienie języka globalnie dla całego systemu i wszystkich użytkowników wchodzących na jego strony.

Ad. 2

Jest to podobne rozwiązanie jak z punktu pierwszego i również zalecane jest jego stosowanie w systemach bez logowania per użytkownik. Różnica jest taka że zamiast ustawiania zmiennej globalnej musi zostać ustawione http cookie o nazwie [nazwa instancji].lang.languageCode:

$page.addCookie("instancjaAlfa.lang.languageCode", "pl")

Drugą różnica jest taka, że zmiana języka będzie miała zasięg tylko dla przeglądarki danego użytkownika, a nie globalnie dla całego systemu jak w poprzednim rozwiązaniu.

Ad. 3

Jest to tylko opcja tylko dla zachowania kompatybilności wstecznej. Zaleca się jednak używanie opcji z punktu nr 4.

Ad. 4
Jest to rozwiązanie zalecane dla systemów z logowaniem dla każdego użytkownika. Przy tworzeniu użytkownika można mu od razu przypisać język za pomocą wywołania:

$user.setLocale("pl")

Po zalogowaniu danego użytkownika ustawiony wcześniej język będzie wybrany przez mechanizm tłumaczeń.

Ad. 5

W przypadku braku ustawionego języka dla zalogowanego użytkownika, jako bieżący język zostanie ustawiona wartość z konfiguracji instancji. Ustawienie to ma zasięg globalny dla całego systemu.

Ad. 6

W przypadku braku zalogowanego użytkownika i braku ustawionej zmiennej lang.languageCode zostanie ustawiona wartość z konfiguracji instancji.