Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/MYSQL] Pobieranie danych z bazy wg jezyka
xfighter
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 30.05.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Sephirus 23.05.2014, 07:05:33


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
KrzysiuFFF
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.05.2014

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 08:59