Autor | Zpráva | ||
---|---|---|---|
devilkin Profil |
#1 · Zasláno: 20. 8. 2005, 17:03:04 · Upravil/a: devilkin
Dobre odpoledne,
nějak nemůžu přijít na to, jak dostat do proměné XY Accept-Language prohlížeče. V článku na Intervelu jsem našel tento postup : if (!isset($lg)) { $lg = explode(",",$HTTP_ACCEPT_LANGUAGE); $lg = StrToLower(Substr(chop($lg[0]),0,2)); } Měl by zajistit načtení prvních dvou znaků (to je to o co mi jde), ale bohužel echo $lg; nevypíše nic. Jako by ta proměnná vůbec neexistovala. Ten článek je už poměrně starý, tak si říkám, jestli se to nedělá nějak jinak. Pokužívám PHP 4. Možná je i potřeba něco nastavit v php.ini, ale nic na první pohled relevantního jsem tam nenašel. Můžete mi prosím někdo poradit. Předem Dík. |
||
Leo Profil |
#2 · Zasláno: 20. 8. 2005, 18:03:33
$_SERVER['HTTP_ACCEPT_LANGUAGE']
Ovsem pokud prohlizec takovou hlavicku neposle, tak bude prazdna. Mimochodem, pocitate s tim, ze accept language nemusi mit jenom jednu hodnotu? Leo |
||
devilkin Profil |
#3 · Zasláno: 20. 8. 2005, 18:20:48
2Leo
Moc díky, vyřešil jsem to takto (úplně jednoduše ;-)) <?php if (!isset($lg)) { $lg = explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']); $lg = StrToLower(Substr(chop($lg[0]),0,2)); } if ($lg == 'en' || $lg == 'cs' || $lg == 'it' || $lg == 'de') { if ($lg == 'en') $jazyk = "EN"; if ($lg == 'cs') $jazyk = "CS"; if ($lg == 'it') $jazyk = "IT"; if ($lg == 'de') $jazyk = "DE"; } else $jazyk = "CS"; ?> Myslím, že je to dostatečné. Ještě jednou děkuji. |
||
halogan Profil |
#4 · Zasláno: 20. 8. 2005, 18:38:02
$jazyky = Array("en", "cs", "it", "de");
if (!in_array($jazyk, $jazyky)) { $jazyk = "CS"; // jako default doporucuju anglicky } else $jazyk = strtoupper($jazyk); |
||
devilkin Profil |
#5 · Zasláno: 20. 8. 2005, 19:22:05
Hmm hezké,
na první pohled trochu nepřehledné, ale opravdu "programátorské" řešení. Díky. PS: Ano EN je logičtější volba, ale co když prohlížeč pošle nějaký nesmysl, nebo nic a zrovna majiteli se to zobrazí anglicky. Pak bych poslouchal, že se to čechům zobrazuje anglicky a to nestojí za to. Ono to stejně hrozí protože spousta lidí ani netuší, že se to nastavuje v prohlížeči a některé alternativní prohlížeče (nic proti nim nemám, naopak) jsou po instalaci nastavené na angličtinu. Pokud se pletu nebo pokud jsou mé obavy zbytečné, tak mě prosím opravte. |
||
Leo Profil |
#6 · Zasláno: 20. 8. 2005, 20:13:41
"$jazyky = Array("en", "cs", "it", "de");
if (!in_array($jazyk, $jazyky)) { $jazyk = "CS"; // jako default doporucuju anglicky } else $jazyk = strtoupper($jazyk);" Asi nebude od veci sem napsat, jak je hlavicka definovana v HTTP. Prohlizec muze poslat toto (a casto posila neco podobneho): Accept-language: en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0 Coz znamena, ze klient nejradeji nizozemskou verzi stranek, pak anglickou, a francouzskou a tureckou nechce za zadnych okolnosti. Na poradi jazyku nezalezi, podstatne jsou je relativni preference q (v intervalu 0-1). Kontrolni otazka - jak si s tim poradi haloganuv kod? Leo |
||
devilkin Profil |
#7 · Zasláno: 20. 8. 2005, 20:33:24
A co navhujete ? ;-)
|
||
Leo Profil |
#8 · Zasláno: 20. 8. 2005, 20:38:27
Specifikaci mate, takze podle ni to musite parsovat, pro kazdy jazyk se musi nacist i hodnota q, podle ni to setridit, a pak to brat podle klesajiciho q / mam nl, poslu ji, nemam, testuju en, nemam, testuju dalsi, az vycerpam vsechny moznosti, tak poslu vychozi variantu. Napriklad. Leo
|
||
devilkin Profil |
#9 · Zasláno: 20. 8. 2005, 21:35:35 · Upravil/a: devilkin
Tak jsem zvažoval, nakolik se takové zdokonalení vyplatí.
Testl jsem několik prohlížeců které mám po ruce (Mozilla 1.7.8, Firefox1.0, Opera 8,IE6) a ani u jednoho se nestalo že by se základní jazyk ocitl někde vzadu a to jsem si hrál s nastavením jak to šlo. Myslím, že nám to vývojáři ulehčují :-) . A navic se dost často vyskytuje tato možnost . Accept-Language: cs,it;q=0.9,az;q=0.8,am;q=0.7,en;q=0.6 Takže hlavní jazyk je cs, druhá možnost it. To znamená, že by se muselo ošetřit i tohle. ........ Snažím se nějak opravedlnit svoji lenost :-), ale možná se to toho někdy pustím. |
||
Leo Profil |
#10 · Zasláno: 20. 8. 2005, 21:47:26
V tom pripade je lepsi jazyk automaticky nemenit a nechat to na uzivateli :-) Leo
|
||
halogan Profil |
#11 · Zasláno: 20. 8. 2005, 22:44:17
Leo: Muj kod neni muj kod, je to jen zjednodusena prasarna devilkina.
|
||
devilkin Profil |
#12 · Zasláno: 20. 8. 2005, 23:14:47
2Leo : V tom pripade je lepsi jazyk automaticky nemenit a nechat to na uzivateli.
To si nemyslím. Možná jsem to špatně napsal. Jazyk který zvolím v prohlížečí jaho hlavní je IMHO ve většině případů na prvním místě. Samozřejmě nespoléham jen na to, ale myslím, že když se to většíně uživatelů zobrazí hned ve spravném jazyce, tak je to potěší. Aby bylo jasné o čem je řeč, tak zde je odkaz na ty stránky které dodělávám (ještě není vše přeložené). 2halogan zjednodusena prasarna devilkina Souhlasím, ale řešil jsem něco jiného než hezký kód. |
||
Kajman Profil * |
#13 · Zasláno: 21. 8. 2005, 00:17:45
To q jsem ignoroval. Leo, díky za upozornění.
Asi časem předělám to moje odfláknuté testování pomocí strpos na koukání na to q. |
||
halogan Profil |
#14 · Zasláno: 21. 8. 2005, 00:30:06
Tak ted to tu mate i s q, serazene podle chuti:
$str = "en;q=0.5, fr;q=0.0, nl;q=1.0, tr;q=0.0"; preg_match_all("/([a-z]{2});q=(\d\.\d)/", $str, $s); $jazyky = array_combine($s[1], $s[2]); arsort($jazyky); print_r($jazyky); |
||
Časová prodleva: 1 rok
|
|||
dgx Profil |
#15 · Zasláno: 26. 8. 2006, 20:09:01
Jazyk může obsahovat pomlčku a velká písmena (en-US), není však na velikost citlivý. Kvalita nemusí být desetinné číslo (q=1, q=0), může mít až tři desetinná místa nebo nemusí být uvedena vůbec (výchozí je 1).
Kód bych upravil asi takto: $s = "en;q=0.50, fr;q=0.0, nl, tr;q=0.0"; preg_match_all('#([a-z-]+) *(?:; *q=([0-9.]+))?#', strtolower($s), $matches); $accept = array_combine($matches[1], $matches[2]); // doplni vychozi hodnoty, zaroven prevede na typ float foreach ($accept as $key => $val) $accept[$key] = $val == '' ? 1.0 : (float) $val; arsort($accept); print_r($accept); |
||
Časová prodleva: 1 měsíc
|
|||
Ján Koštial Profil * |
#16 · Zasláno: 4. 10. 2006, 20:25:42
array_combine() funguje len v php5.
v php4 som to riešil takto: foreach ( $matches[1] as $index => $value ) { $accept[$value] = $matches[2][$index]; }; |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0