Detekcja języka


(tweant) #1

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.


(Tomek Matz) #2

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.


(Sitemaster) #3

http://www.roscripts.com/snippets/show/71

http://www.phpclasses.org/package/3846- ... owser.html

...


(Tajgeer) #4

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 :stuck_out_tongue:

$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'];

(tweant) #5

a moglibyście mi podac jakiś skrypt z tymi ciasteczkami?


(Tomek Matz) #6

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.


(tweant) #7

a bez tych cookie żeby tylko wykrywał i przekierowywał?


(Sitemaster) #8

A Ty właściwie patrzysz na strony jakie zapodajemy? -chyba nie :o

-zobacz jeszcze raz na pierwszego linka z mojego postu.


(tweant) #9

za 1 razem patrzyłem. Sorry. Dzięki za rozwiązanie problemu :wink:

-- 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();


(ra-v) #10

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().'');

(Sitemaster) #11

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();

?>