Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MYSQL] Pobieranie danych z bazy wg jezyka
Forum PHP.pl > Forum > PHP
xfighter
Witam.

W systemie CMS mam wykaz stron, czyli np:

1. O nas
2. Produkty
3. KOntakt.

To widać po zalogowaniu na panel admina. Strony te mam w 3 wersjach jezykowych.
Na dashboardzie panelu mam odnośniki do wersji językowych.
Jak zrobić aby po kliknięciu na link do strony angielskiej, strona by się przeladowała z zapamiętanym wybranym językiem i zwróciła zawartość po angielsku?

Pozdrawiam
Sephirus
Musisz sobie zrobić klasę obsługi języka.

Ogólnie algorytm wygląda w takich przypadkach tak:

(wersja A)

1. ktoś wchodzi pierwszy raz na stronę - sprawdzane jest jaki ma ustawiony język w przeglądarce (nagłówek: Accept-Language). Tam wystąpić mogą frazy typu pl-PL, en itp. Na tej podstawie określasz język klienta i ustawiasz mu język strony na jego. Jeśli nie obsługujesz jego jezyka to ustawiasz na swój domyślny - przykładowo angielski. Na tym etapie nie musisz zapisywać nigdzie żadnej informacji o języku użyszkodnika. Taka klasa odpalana zawsze na początku sama będzie zawsze określała ten język.

2. userowi nie spodobał się wybrany język więc klika na inną wersję językową. W tym momencie zapisujesz mu w ciasteczku język który wybrał. Dodajesz funkcjonalność do klasy by najpierw (zanim sprawdza nagłówek accept-language) sprawdzała czy istnieje ciastko z ustawieniem jezyka - jeśli tak włącza ten język.

I teraz przy każdym odwołaniu do strony klasa wybiera język i zapisuje go do jakiejś zmiennej ogólnie dostępnej lub dostępnej z poziomu tej klasy itp. na jej podstawie wyświetlasz strony w wybranym języku.

(wersja cool.gif

Różni się od A tym, że olewasz nagłówek accept-language i jeśli gość nie ma ustawionego ciastka zawsze ustawiasz jeden domyślne wybrany język.

Tyle smile.gif

EDIT: przy wejściu na stronę w danym języku możesz dodatkowo wykrywać taki język i wrzucać go do ciastka.
KrzysiuFFF
Jeśli chodzi o odczytywanie z nagłówka accept-language, to polecam gotowe klasy. Pełno tego na necie. Ten nagłówek nie jest łatwy do parsowania, łatwo zrobić błędy przez dziką specyfikację RFC: http://www.w3.org/Protocols/rfc2616/rfc261...14.html#sec14.4

One mogą mieć ustawione priorytety, nie muszą być w kolejności od najważniejszego, a nawet jeśli często tak jest, to przy najprostszym sprawdzeniu, tj. dwie pierwsze litery ciągu /zakładając, że są jezyki ang i pol, przy innym języku domyślnie włącza się ang/, może być tak:
de_DE, pl_PL;q=1, fr_FR;q=0.7
Z tego wynika, że użytkownik preferuje na równi niemiecki i polski, potem francuski, a angielskiego w ogóle. Strona przeczyta dwa pierwsze znaki - "de", a że nie ma takiego języka to zaoferuje angielski, zamiast polskiego. Rozwiązanie podane wyżej jest uniwersalne, bo skrypt zgaduje język /lub nie w wersji B/, ale nie przywiązuje na siłę do niego.

Piszę o tym, bo w wielu miejscach spotykam się właśnie ze sposobem "na dwa pierwsze znaki", a jak widać to nie zadziała nie tylko przy przemieszanej kolejności, ale też w dobrej. No i jakbyś na coś takiego trafił, to lepiej nie korzystać.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.