Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wykryć kraj...
Forum PHP.pl > Forum > PHP
mihow
Szukałem na tym forum, ale nie znalazłem. Może źle szukam.

Jak sprawdzić z jakiego kraju oglądana jest dana strona? Chodzi mi o to, że chcę wyświetlić stronę w odpowiedniej wersji jezykowej...
hawk
Do tego nie jest ci potrzebny kraj, tylko język. A to jest już coś innego.
Generalnie: nagłówek Accept-Language. Opis np. pod http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html.
rogrog
  1. <?php
  2. echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  3. ?>
mike
Jeżeli koniecznie chcesz kraj, to polecam poczytać o tym projekcie : ip to country.
tiraeth
  1. <?php
  2. $Jezyki = array(&#092;"pl\" => \"polski\", \"us\" => \"angielski/amerykański\", \"jp\" => \"japoński\", \"net\" => \"nieznany\"); // I tak dalej
  3.  
  4. $Host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  5.  
  6. $Hoost = explode(&#092;".\", $Host);
  7. $Domenka = count($Hoost)--;
  8. $Jezyk = $Hoost['Domenka'];
  9.  
  10. echo &#092;"Twój jezyk to: <b>\".$Jezyki[$Jezyk].\"</b>\";
  11. ?>


nie wiem czy zadziala... pozdro, tiraeth!
rogrog
Cytat
  1. <?php
  2. $Jezyki = array(&#092;"pl\" => \"polski\", \"us\" => \"angielski/amerykański\", \"jp\" => \"japoński\", \"net\" => \"nieznany\"); // I tak dalej
  3.  
  4. $Host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  5.  
  6. $Hoost = explode(&#092;".\", $Host);
  7. $Domenka = count($Hoost)--;
  8. $Jezyk = $Hoost['Domenka'];
  9.  
  10. echo &#092;"Twój jezyk to: <b>\".$Jezyki[$Jezyk].\"</b>\";
  11. ?>


nie wiem czy zadziala... pozdro, tiraeth!


no tak, a co jak klient ma tylko IP a nie ma domeny??

niezbyt dobre rozwiazanie chyba
gkeb
Dodam jeszcze że klient moze miec domene ogolna a niekonieczne taka ktora okresla kraj.
W numerze 2 (marzec-kwiecien) "php solutions" jest opisany cały projekt IP-to-Country. Polecam lekturze.
Ogolnie polega to na pobraniu IP klienta wchodzacego na strone i porównaniu z baza danych. Plik w formacie CSV z danymi dla takiej bazy danych można pobrac z http://ip-to-country.directi.com
jono
Możesz jeszcze tak:

Kod
<script language="Javascript" src="http://map.geoup.com/geoup?template=CountryName"></script>


Ale nie wiem jak to np. zapisać do bazy. Bo ten skrypt potrafi nawet wskazać miasto:

Kod
<script language="Javascript" src="http://map.geoup.com/geoup?template=CityName"></script>


Czy ktoś ma pomysł, jak takie coś zapisać do bazy danych na serwerze?
hawk
Do licha, kraj ma się do wersji językowej jak pięśc do nosa.
W sumie autor tematu mógłby określić o co dokładnie mu chodziło...
mike
Cytat
Do licha, kraj ma się do wersji językowej jak pięśc do nosa.
W sumie autor tematu mógłby określić o co dokładnie mu chodziło...

A jak ma się temat topic'u do jego treści .... :?:

Autor pisze w temacie " jak wykryć kraj " a w treści "jak wykryć język ".
Więc nie dziw się , że dostaje dwojakie odpowiedzi.
Pozdrawiam. Mike.
gkeb
Cóż sądze że swoim krótkim postem naprowadziłem autora na własciwą droge, nie napisał że chce gotowca, a przecież nie o to chodzi. A projekt ip-to-country jest jak najlepszym rozwiazaniem tego typu (notabene o innym nie słyszałem)
mike
Cytat
Cóż sądze że swoim krótkim postem naprowadziłem autora na własciwą droge, nie napisał że chce gotowca, a przecież nie o to chodzi. A projekt ip-to-country jest jak najlepszym rozwiazaniem tego typu (notabene o innym nie słyszałem)

Fajnie że go naprowadziłeś na ip-to-country, po tym jak ja go naprowadziłem na to samo ip-to-cpuntry dwa posty przed tobą.
Pozdrawiam. Mike. :wink:

P.S. Też uważam że to najlepszy projekt.
gkeb
Ależ ja nie twierdze że byłem pierwszy :wink: Tylko chodziło mi o to że już został naprowadzony na własciwa scieżke a i tak krąży gdzies i szuka niewiadomo czego.
mihow
Cytat
  1. <?php
  2. echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  3. ?>


To jest super!
Gdzie mogę się dowiedzieć jakie wartości zwraca?
"pl" już zobaczyłem smile.gif
Ale co jeśli będą to Włochy? "it" ? smile.gif
rogrog
Cytat
Gdzie mogę się dowiedzieć jakie wartości zwraca?



zwraca taką wartość, jaką przesłała przeglądarka

myśle że to jest zgodne z ISO 3166, uwzględnij zarówno kody 2 jak i 3 literowy
http://userpage.chemie.fu-berlin.de/divers...c/ISO_3166.html
szukaj na google tej normy
hawk
Formalnie HTTP pozwala na do 8 znaków kodujących kraj. RFC 1766 mówi że zawsze mają być używane tylko 2. Apache w jednym chyba przypadku się wyłamuje i daje 3 literki zamiast dwóch.

Co do podanego standardu ISO, nie do końca tak jest. Pojedynczy "element" w nagłówku Accept-Language składa się z 2 części: kod języka i opcjonalnej informacji dodatkowej (np. kod kraju). Dla przykładu:
Kod
Accept-Language: pl, en-us, en-gb

Kody języków opisuje ISO 639. ISO 3166 opisuje kody krajów, a to nie to samo.

Tak więc naprawdę trzeba szukać w ISO 639.
Coondelboory
Cytat
[...]
Jak sprawdzić z jakiego kraju oglądana jest dana strona? Chodzi mi o to, że chcę wyświetlić stronę w odpowiedniej wersji jezykowej...


Sprawdzenie (pewne) jest dosc problematyczne. Sprawdzanie domen udaje sie w ~30% przypadkow, a bazy takie jak ip-to-country lub ip2nation maja niestety dziury.
Ale do wyswietlenia roznych stron w zaleznosci od kraju mozesz uzyc tego:

http://www.syriusz.civ.com.pl/country_switch

wersja mocno beta, ale jest dosc wiarygodna (ma kilka pieter sprawdzania ip). Zakladasz konto, logujesz sie i definiujesz grupy krajow i linki dla nich, a potem gosci do siebie kierujesz przez switch_link. Kazdy dostanie, co dla niego przeznaczone smile.gif .

C.
rogrog
Cytat
ISO 3166 opisuje kody <b>krajów</b>, a to nie to samo.

masz racje nie pomyslalem o tym tongue.gif

no tak, ale tak konkretnie, to ten dokument RFC, który podałeś stwierdza:
Kod
   Language-Tag = Primary-tag *( "-" Subtag )

   Primary-tag = 1*8ALPHA

   Subtag = 1*8ALPHA


czyli nie do 8 znaków biggrin.gif tylko w zasadzie na upartego 17 (8 dla primary, kreska i osiem dla sub



  1. <?php
  2.  
  3. //wycina pierwszy tag z naglowka
  4. $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
  5. $lang = substr($lang, 0, strpos('-', $lang));
  6.  
  7. ?>


myślę że i tak nie będziesz robił różnych wersji np. dla brytyjskiego i amerykańskiego angielskiego, więc teraz wystarczy tylko tablica z kodami głównymi odpowiadajacymi odpowiedniemu jezykowi.
hawk
Cytat
czyli nie do 8 znaków biggrin.gif tylko w zasadzie na upartego 17 (8 dla primary, kreska i osiem dla sub

Of course, 8 na język i 8 dodatkowych. No ale napisałem "8 znaków kodujących kraj" smile.gif.

Cytat
  1. <?php
  2.  
  3. //wycina pierwszy tag z naglowka
  4. $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];  
  5. $lang = substr($lang, 0, strpos('-', $lang));
  6.  
  7. ?>

Hmm, to nie będzie działać.

Po pierwsze, kreski nie musi być, co nawet widać na tym cytacie z RFC. Może być "Accept-Language: pl, en".

Po drugie, tak tylko wycinamy pierwszy z podanych języków. A teoretycznie nic nie każe podawać ich w kolejności malejącego quality. Teoretycznie może być "Accept-Language: pl;q=0.1, en;q=0.9". Chociaż nigdy chyba czegoś takiego nie widziałem...

Anyway, aż się prosi o jakiś uniwersalny kod który parsuje to i robi tablicę preferowanych języków, w odpowiedniej kolejności. Potem tylko sprawdzasz który z tego masz dostępny i zapodajesz odpowiednią stronę.

Swoją, drogą,
Cytat
Applications should always treat language tags as a single token; the division into main tag and subtags is an administrative mechanism, not a navigation aid.
[fisher]
Cytat(mihow @ 2004-06-05 16:59:42)
Jak sprawdzić z jakiego kraju oglądana jest dana strona? Chodzi mi o to, że chcę wyświetlić stronę w odpowiedniej wersji jezykowej...

Może uzyj PEAR a dokladniej I18N z pakietu INTERNATIONALIZATION
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.