Starší komentáře ke článku: GNU Gettext - automatický výběr jazyka

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 12.4.2005 10:40:10

Mrzí mě, že i takové osobnosti jako Jiří Kosek navádí čtenáře k "nepravostem". Informaci o nastavené jazykové verzi je vyloženě nevhodné ukládat do cookie, protože přeložené verze jsou následkem toho prakticky nepoužitelné pro vyhledávače a podstatně ztěžují správnou práci cachím. O lidech s vypnutými cookies nemluvě. Lepší to je tedy takto: 1. Na základě Accept-Language návštěvníka přesměrovat např. do adresáře /cs/ . 2. Při změně jazykové verze přejít do adresáře /en/ . Pokud máte např. mod_rewrite, je to i mnohem jednodušší - celý kód pro přepínání jazyka se smrskne na jeden řádek. Pokud mod_rewrite nemáte, pořád je lepší jazyk předávat v URL např. jako ?lang=cs, na to je ale potřeba pamatovat při vytváření odkazů. Další informace jsou k dispozici na http://php.vrana.cz/uchovani-informace-o-jazykove-verzi-a-prihlasenost.php.

Avatar

Autor komentáře: Jirka Kosek

Datum vložení: 12.4.2005 10:53:39

Máte pravdu, ale snažil jsem se v článku seznámit čtenáře s knihovnou gettext a zbytečně do toho nemíchat další věci. Kdybych do toho zatáhl mod_rewrite, tak bude polovina článku o něm a polovina čtenářů si to nevyzkouší, protože nemají možnost měnit konfiguraci Apache na serveru, kde mají hosting. Ad vyhledávače a cache -- gettext se většinou používá pro lokalizaci aplikací, ne statických stránek. U aplikací většinou nechcete, aby se stránky ukládaly do cache a mnohdy nestojíte ani o jejich indexování, protože obsah stránek je proměnlivý.

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 12.4.2005 11:14:45

Chápu snahu zabývat se výkladem knihovny Gettext a nerozmělňovat text nesouvisejícími tématy, ale kód pro překlad $_GET["changelang"] na $_COOKIE["lang"] s tématem souvisí také jen velice volně a na jeho místě by myslím bylo lepší zmínit předávání nastaveného jazyka alespoň v GET proměnné. Možné použití Gettextu je velice široké a neváhal bych ho použít ani u stránek, které chci mít uložené ve vyhledávačích a u kterých chci využít výhod cachování. No nic, hlavně že nevhodnost ukládání jazykové verze do cookie zazněla alespoň v diskusi. Jinak se seriál myslím velice povedl.

Avatar

Autor komentáře: elixon

Datum vložení: 27.6.2005 20:29:22

Ja osobne doporucuji 1. Vybrat jazyk (vzit v potaz COOKIE/prametr LANG) 2. Ulozit jej do SESSSION 3. Ulozit kopii do cookie 1. Vyhoda, pri pristi navsteve podle COOKIE poznate preferred lang 2. SE friendly, nebot COOKIE je nepovinne a pouziva se pouze jako tip pro vracejiciho se navstevnika. O propagaci PHPSID se postara pro roboty PHP samo v parametrech a formularich. Kratka funkce pro vyber "nejlepsiho" jazyka. (Neni dokonala, ale je kratka ;-) function chooseLang($availableLangs) { $pref=array(); foreach( split(',', $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) as $lang) { if (preg_match( '/^([a-z]+).*?(?:;q=([0-9.]+))?/i', $lang.';q=1.0', $split)) { $pref[sprintf("%f%d", $split[2], rand(0,9999))]=strtolower($split[1]); } } krsort($pref); return array_shift( array_merge( array_intersect($pref, $availableLangs), $availableLangs)); } POUZITI:: echo 'BESTLANG: '.chooseLang(array('cs', 'sk', 'ru', 'en'));

Avatar

Autor komentáře: elixon

Datum vložení: 27.6.2005 21:20:01

Rád bych podotkl, že řazení jazyků v ACCEPT-LANGUAGE hlavičce není podle váhy. Předpoklad, že první jazyk je nejdůležitější není tedy správný. Uvádím to jen pro úplnost, protože chápu autora, že jednoduchý a srozumitelný úvod je mnohdy přínosnější než složitější správné řešení (nebo pochybný výtvor, jako má funkce chooseLang() ). elixon PS. Panu Málkovi se omlouvám za chybějící diakritiku v předchozím příspěvku. Nějak mi to vězí pod kůží hlouběji než jsem si myslel. ;-) Ale snažím se.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 28.6.2005 8:14:56

Děkuji za přínosný příspěvek. Forma je jistě důležitá, ale pokud neznehodnocuje obsah, není tím nejpodstatnějším a menší excesy se dají pominout ;-)

Avatar

Autor komentáře: Freezing

Datum vložení: 12.2.2006 12:39:32

Já po přečtení toho článku, trochu přestávám tušit, jestli je to nějaký můj imaginární problém, ale pokud nastavuji jakékoli locales pouze na hodnotu např. 'cs', kterou posílá prohlížeč pro četšinu, tak to rozhodně na skoro žádném linuxovém stroji češtinu používat nebude..to vám garantuji. a pokud do locales nastavíte en-US, tak to taky nepoužije nic, protože gettext používá en_US. Většinou je k tomu ještě nutné nastavit jazyk_ZEMĚ.KÓDOVÁNÍ - existují aliasy standardní pro Gettext (např. 'czech' atd.) a nebo rozšířené v rámci distribuce, ale na to sem moc spoléhat nedá. Navíc prohlížeč není limitovaný ISO kódy, ale je tam i pár dalších kódů (specifikované v nějakém IANA dokumentu nebo něčem podobném) atd. atd. Možná to tak funguje na Windows, ale kdo, s prominutím, chce mít apache2 a php na Windows?? To tak možná pro vývoj, ale ostrý provoz? A php hostingy běží snad všechny na linuxu na *BSD. Existují na to 'hacky', které používá např. WordPress, ale to rozhodně není případ vašich příkladů... Navíc to jsou takové dost nehezké řešení - pokud člověk ví, jak gettext funguje, i když to nesmírně zlehčuje situaci.

Avatar

Autor komentáře: Jirka Kosek

Datum vložení: 16.2.2006 17:27:33

Máte pravdu, že locales se na unixových systémech chovají hodně nedeterministicky. Vždycky si ale můžete do souboru locale.alias přidat vlastní mapování, která vám například cs namapují na cs_CZ.UTF-8 apod.

Avatar

Autor komentáře: Laco

Datum vložení: 16.2.2006 14:16:07

prosim Vas, vie mi niekto poradit ohladom gettextu pod win32? Nainstaloval som ho, pridal do %PATH%, zmenil som php.ini a nakopiroval prislusne dll subory do system32. Napriek vsetkemu stale dostavam chybovu hlasku typu: fatal error:call to undefined function: (niektora metoda gettextu) za radu dakujem

Zpět na článek | Úvodní stránka Interval.cz