Blog programisty o C/C++ i PHP

Programowanie w C/C++ i PHP. Blog pełen wskazówek, porad, analiz i opisów.

Czy użytkownicy z różnych krajów mogliby widzieć Twoją witrynę w swoich językach ?

listopad 5th, 2006 in Programowanie w PHP

Czy zwróciłeś uwagę, że w internecie jest pewna grupa bardzo dopracowanych serwisów, które po wpisaniu http://www.xxx.com (tutaj nie będę nikogo reklamował) wyświetlają zawartość w twoim ojczystym języku ? Czy nie uważasz, że jest to ciekawe i niezwykle praktyczne rozwiązanie ? Niestety z taką funkcjonalnością spotykamy się tylko w przypadku poważnych firm. Są to przeważnie duże korporacje posiadające swoje własne serwery, a całość bazuje na serwerach aplikacji.

Czy nie chciałbyś dowiedzieć się o możliwościach realizacji takiej funkcjonalności w PHP ?

Skąd dowiedzieć się jaki język preferuje użytkownik, który właśnie połączył się z Twoją witryną ? Okazuje się, że przeglądarki mogą (ale nie muszą) wysyłać takie informacje w żądaniu. Serwer kiedy je otrzyma umieszcza te dane w zmienej $_SERVER[’HTTP_ACCEPT_LANGUAGE’]. Przeglądarka jednak może wysłać informację o kilku językach, podając przy tym ich ważność. Całą funkcjonalność związaną z analizą wspomnianej zmiennej wstawiamy do jednej klasy.

Co powiesz na nazwę “ClientLanguageDetector” ?

Ok. Ale to nie wszystko. Jak zapewne wiesz oprócz języka równie ważny jest standard kodowania znaków.

Czy zdarzyło Ci się, żebyś podczas przeglądania oferty w jakimś e-sklepie musiał co chwila pomijać irytujące dziwne znaczki ? Masz rację to jest bardzo irytujące. W dodatku trudno jest wtedy skupić się nad tym co się czyta. Masz ochotę od razu wyłączyć tę stronę. I właśnie taka jest reakcja sporej części odwiedzających ?

Być może zaskoczę Cię stwierdzeniem, że takie błędy wciąż można spotkać i nie są w cale odosobnionym przypadkiem, (aczkolwiek coraz rzadszym). A wszystko z powodu niedopatrzenia webmasterów czy nawet programistów (szczególnie tych domorosłych tworzących indywidualne rozwiązania). Wiele pomniejszych firm korzysta właśnie z usług takich osób.

Przeglądarka może (choć nie musi) wysyłać w rządaniu do serwera nie tylko preferowane języki, ale także preferowane standardy kodowania. Tak jak w przypadku języków, kodowań również może być kilka i każdy mieć wskaźnik ważności.

Ok. Nazwijmy więc klasę realizującą funkcjonalność wykrywania standardu kodowania “ClientCharsetDetector“. Jej zadaniem będzie analiza zmiennej $_SERVER[’HTTP_ACCEPT_LANGUAGE’].
No to masz już niezbędne klasy, ale czy czegoś tu przypadkiem nie brakuje ?

No tak oczywiście, że jeszcze brakuje komunikatów w różnych językach i zapisanych w różnym standardzie. W języku Polskim możemy spotkać 3 standardy: ISO-8859-2, WINDOWS-1250 oraz UTF-8.

Jak powinien funkcjonować nasz skrypt:

[1] określamy wszystkie języki zgłoszone przez klienta (posortowane malejąco w/g ważności)
[2a] jeśli nasza witryna obsługuje, któryś z języków to wybieramy pierwszy wspólny, ale o najwyższym znaczeniu
[2b] w przeciwnym razie wybieramy język domyślny i domyślne kodowanie dla niego
[3] określamy zestaw kodowań zgłoszonych przez klienta (posortowane malejąco w/g ważności)
[3] jeśli dany język obsługuje, któryś ze standardów to wybieramy pierwsze wspólne, ale o najwyższym znaczeniu
[4] wysyłamy do klienta odpowiedź, np.: echo $page[$lang] [$charset];

Gdzie można sterować wspomnianymi preferencjami w przeglądarce ?

W MS IE wybieramy opcje:

Wybieramy opcje z menu MSIE
Teraz możesz zmieniać ważność języków przesuwając je w górę (wyższy priorytet) lub w dół (niższy priorytet)
Opcje w MSIE
W FireFox’ie możesz dodatkowo wybierać domyślne kodowanie.

Wybieramy opcje z menu FireFox'a
Opcje w FireFox'ie

A teraz na koniec pewnie chciałbyś zobaczyć jak to działa. Abyś nie myślał, że to wszystko co napisałem jest teorią zabacz prosty PRZYKŁAD. Komunikat o nawiązywaniu połączenia z bazą danych odświeża się automatycznie co 5 s. Zmieniaj ustawienia języka i kodowania i odśwież poprzez F5 (niestety taka jest konfiguracja serwera). Zauważ, że komunikat zawsze wyświetlany jest poprawnie, nawet jeśli dany język nie obsługuje wybranego kodowania. System dobierze kodowanie tak, aby umożliwić poprawne wyświetlanie w danym języku.

Tags: ,

Leave a Reply