Jak mogę rozpoznać język i przekierować na stronę /en/ jeśli językiem systemu/… jest angielski. Jest jeden haczyk. Jeśli wybierzemy, że chcemy wrócić do języka polskiego czyli do strony głównej ma ona po raz kolejny nie rozpoznawać języka.
Tego typu informacje przeglądarka użytkownika dołącza do żądania HTTP. Np. w ASP .NET możesz skorzystać z następującej właściwości Click, żeby to odczytać. Co do tego haczyka … Możesz tworzyć cookie, w którym będziesz miał zmienną przechowującą nazwę języka, w którym użytkownik chce mieć zawsze wyświetlaną stronę (mimo tego, że język jego systemu jest zupełnie inny). W skrypcie swojej strony będziesz sprawdzał, czy zmienna w tym pliku cookie jest ustawiona. Jeśli tak, no to odczytujesz wartość tej zmiennej i przekierowujesz na stronę w takim języku. Jeśli nie, wówczas odczytujesz dane o języku z nagłówków HTTP i też przekierowujesz na odpowiednią stronę. W ASP .NET przekierowanie wykonujesz z użyciem następującej metody Click. Ja wprawdzie nigdy nie robiłem tego, no ale gdybym robił to zabrałbym się do tego w taki sposób w jaki opisałem.
Możesz ewentualnie zrobić to z wykorzystaniem PHP i wykrywać język po adresie IP, ale to może się średnio sprawdzić, w przypadku, gdy np. w Polsce będzie mieszkał jakiś Niemiec
$ip = gethostbyaddr($_SERVER['REMOTE_ADDR']);
// zapisze do $ip cos w stylu: 178-37-85-245.adsl.inetia.pl
$country = explode('.', $ip);
echo end($country);
// wyświetli samą końcówkę, czyli pl
Lepszym wyjściem będzie wykrycie języka przeglądarki
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
// lub
echo $_SERVER['HTTP_USER_AGENT'];
a moglibyście mi podac jakiś skrypt z tymi ciasteczkami?
No to akurat trudne nie jest, tym bardziej, że do dyspozycji masz google. Mógłbyś jeszcze napisać o jaki język chodzi.
PHP: http://php.net/manual/pl/features.cookies.php
ASP .NET: http://msdn.microsoft.com/en-us/library/ms178194.aspx
W każdym z tych linków masz przykłady.
a bez tych cookie żeby tylko wykrywał i przekierowywał?
A Ty właściwie patrzysz na strony jakie zapodajemy? -chyba nie :o
-zobacz jeszcze raz na pierwszego linka z mojego postu.
za 1 razem patrzyłem. Sorry. Dzięki za rozwiązanie problemu
– Dodane 06.09.2010 (Pn) 15:39 –
jednak jest błąd:
Warning: Cannot modify header information - headers already sent by (output started at /XXXXXXXXX/htdocs/index2.php:8) in /XXXXXXXXXXX/htdocs/index2.php on line 66
The Language detected is: pl
[64] // Redirect to the correct location.
[65]
[66] header(‘location: http://xxx.pl/’.lixlpixel_detect_lang(.’’);
[67] echo 'The Language detected is: '.lixlpixel_detect_lang();
Być może przed header() wysłałeś coś na ekran, wyświetliłeś coś, lub wyświetla się jakiś błąd.
Przenieś header() wyżej o ile można lub spróbuj jedną z poniższych metod.
header('location: http://xxx.pl/'.lixlpixel_detect_lang().'', true);
@header('location: http://xxx.pl/'.lixlpixel_detect_lang().'');
standardowy błąd związany z opóźnioną wysyłką nagłówków. Wystarczy wykorzystać bufor:
<?php
ob_start();
//tutaj wstawiasz skrypt
ob_end_flush();
?>