Starší komentáře ke článku: Vícejazyčná verze webových stránek

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

Avatar

Autor komentáře: Tomáš

Datum vložení: 31.12.2001 0:26:47

Díky moc za tento článek. Jen bych příště uvítal, kdyby na konci článku byla možnost stáhnout si nějakou zkrácenou funkční ukázku. Jinak super.

Avatar

Autor komentáře: Ondrej Jurecek

Datum vložení: 2.1.2002 18:57:29

Po precteni tohoto clanku mam vice chuti udelat vicejazycnou verzi svych stranek.
Libi se mi myslenka detekce hodnoty "lg", nasledovan detekci na hodnotu Accept-Language a nakonec i REMOTE_ADDR ci COOKIES. Takze to vypada docela profesionalne.
Ale u toho bych skoncil, protoze jinak mi pripada dalsi navod k nicemu. Reaguji na SQL databazi, kde bych volil daleko lepsi reseni.
Takze uvod dobry, avsak konec autor moc neresil. :(

Avatar

Autor komentáře: Pepa Kokes

Datum vložení: 31.12.2001 8:42:51

Taky se pripojuju k pochvale za peknej a hlavne uzitecnej clanek.

Jinak ja na svy strance pouzivam pro detekci uzivatelova jazyka krome parametru v GET a hlavicky Accept-Languages jeste top domenu, ze ktery uzivatel prisel; predpokladam pritom, ze kdyz nekdo prijde z .cz, tak asi spis bude preferovat ceskou verzi. Kod:

$domena = GetHostByAddr($REMOTE_ADDR);
if (eregI('([^\.]+)$',$domena,$x))
echo "Uzivatel prisel z domeny ".$x[1];

Samozrejme misto toho Echa by bylo otestovani domeny a prirazeni jazyka...

Avatar

Autor komentáře: Mike

Datum vložení: 31.12.2001 22:07:11

Ja mam ale zkusenosti, ze mam jaho refernt - header nulovou; nevim, jestli vsichni si odkaz oteviraji v novem okne nebo co k..va, ale na .cz bych nespolehal ;-)

M.

Avatar

Autor komentáře: Pepa Kokes

Datum vložení: 1.1.2002 1:26:34

Finty jsou dve:

1) Detekce top-domeny je navic k obema predchozim zpusobum, pokud neni jazyk zadan ani GET parametrem, ani hlavickou Accept-Languages. Proste dodatecny nastaveni

2) Netestuje to referera, ale REMOTE_ADDR - adresu uzivatele.

Avatar

Autor komentáře: Martin Kopta

Datum vložení: 2.1.2002 21:23:35

Nevím, proč musím vypadat jako rejpal zrovna já. Prostě jsem si zase přečetl jeden článek z Intervalu a mírně mě to vytočilo. Hned vysvětlím proč.

V současné době dokončuje můj chlebodárce panelovou studii o webovém publiku, jedním z parametrů, který jsme sledovali je i nastavení hlaviček Accept-Language. Z prozatimních výsledků vím, že opravdu většina nových browserů, které si lidé stahují z českých archivů, už obsahuje češtinu jako přednastavený jazyk, ale stáole existuje dost velké procento těch, kteří si stáhnou browser odjinud (třeba z originálního zdroje nebo z CD-ROMu, kde je anglická verze browseru) a o nastavování jazykových preferencí nic netuší. Pak jsou ovšem další uživatelé, a ti naopak si jazyky nastavují pečlivě. Autor tohoto článku nemyslí ani na jednoho z těch dvou.

Problém je především v tom, že Accept-Language obsahuje SEZNAM akceptovatelných jazyků s uvedenou vahou. Moje nastavení třeba vypadá následovně:

Accept-Language: cs,sk;q=0.9,en;q=0.7,de;q=0.6,ru;q=0.5,it;q=0.4,fr;q=0.3,es;q=0.2,pt;q=0.1

To znamená, že při čtení preferuji texty napsané česky (nevíce), slovensky, anglicky, německy, rusky, italsky, francouzsky, španělsky a portugalsky (nejméně -- neznamená to, že všechny umím, jen je preferuji v daném pořadí). Pokud byste nabízeli jazykové verze jen francouzské a španělské, tak přestože patří k mým preferovaným, podle postupu uvedeného ve článku byste mi nemohl správnou verzi nabídnout. Totéž se přihodí třeba Arabovi, který shodou okolností umí česky, ale před češtinou preferuje třeba ještě arabštinu a angličtinu.

Abyste mohli lépe nabízet vhodnou jazykovou verzi, museli byste obsah proměnné $HTTP_ACCEPT_LANGUAGE převést do pole:

$jazyky = split(",",$HTTP_ACCEPT_LANGUAGE);
Nasledne pak postupne porovnavat preferovane jazyky s jazyky nabizenymi:

for($i=0;$i<count($jazyky);i++) {
   $jazykova_verze = (substr($jazyky[$i],0,2) == "cs") ? "cs" : false;
   $jazykova_verze = (substr($jazyky[$i],0,2) == "cs") ? "en" : false;
   // ozkousite na vsechny jaz. verze
   if($jazykova_verze != false) $i = count($jazyky);
}

(Nezapomeňte na nastavení výchozího jazyka v případě neshody s preferovanými.)

Jak to vyřešit s rozpoznáním podle TLD, případně podle uživatelovy vůle, to už tu kdosi psal. Jen bych ještě pro lidi bez cookies použil v PHP4 sessions, pripadne predaval jazykovou promennou jako soucast URL.

Avatar

Autor komentáře: Martin Kopta

Datum vložení: 2.1.2002 21:28:20

Ještě připojím odkaz na stránku, kde se Vám zobrazí hlavičky prohlížeče:

   <a href='http://www.delorie.com:81/some/url.html' target='_blank'>http://www.delorie.com:81/some/url.html</a>

Můžete si tu ověřit, jak předává Accept-Language právě váš prohlížeč.

Avatar

Autor komentáře: lubos

Datum vložení: 11.1.2002 9:05:02

diky, mne vypisalo, ze Accept-Language: de, idem to zmenit, lebo nemecky neviem a google.com a dalsie stranky dokolecka v nemcine :(

Avatar

Autor komentáře: JersyWoo

Datum vložení: 7.8.2004 21:00:00

Sem se zase nasmál, můj prohlížeč akceptuje češtinu a japonštinu, hahá, hehe

Avatar

Autor komentáře: Jirka Kosek

Datum vložení: 2.1.2002 22:56:46

Upřímně lituji každého, kdo si překlady ručně ukládal jako proměnné do několika souborů nebo do databáze. PHP už hodně dlouho obsahuje knihovnu GNU GetText, která ze skriptů vytáhne všechny texty k překladu (musí se zapsat jako _("text") místo "text") člověk je přeloží a knihovna se postará při běhu skriptu o vložení správné jazykové verze textu. Databázi překladů přitom můžete sdílet mezi více skripty nebo celými aplikacemi a lokalizaci do dalších jazyků dost zrychlit.

Avatar

Autor komentáře: Pajax

Datum vložení: 23.11.2002 16:30:37

Zacal jsem se o tuto metodu zajimat. Jestli jsem to pochopil spravne mela by tato metoda být nejrychlejsi.(jde mi o to aby zmena jazyka stranky co nejmene zdrzovala).
Podarilo se mi gettext pridat do PHP jak ve Win2000 tak v Linuxu ale zatim jsem neprisel na to jak vytvaret soubory s preklady a kam je umistit.
Dekuji za odpoved. Pavel Trhlik

Avatar

Autor komentáře: funik

Datum vložení: 6.7.2006 21:58:12

Asi je trochu pozdě na radu po 4 letech... :-) ale je třeba použít xgettext na vygenerování šablony: xgettext -d NAZEV *.php -o NAZEV.pot Zkopírovat na cs.po a přeložit. Pak vygenerovat binárku překladů: msgfmt --check cs.po -o cs.mo a nakopírovat do LOCALE/cs/LC_MESSAGES. Pro aktualizaci cs.po novou šablonou NAZEV.pot slouží utilitka msgmerge.

Avatar

Autor komentáře: Martin Kopta

Datum vložení: 2.1.2002 23:24:57

Krom toho mě ještě napadlo, že Apache umí rozpoznávat jazyk sám a pak naložit s touto informací podle přání (konfigurace), třeba tak, že jazykový kód připojí k názvu souboru...

Avatar

Autor komentáře: lida007

Datum vložení: 11.4.2006 15:31:26

Ahojky, mám problém. Ačkoliv je tohle dobrý způsob, jak napsat kvalitní stránky, jde mi o tohle :,,jsem v tomhle začátečník, a nevím jak bych tenhle kód do stránky vložila. Byl by někdo tak hodný a poslal mi základní shrnutí a kód, který by začínal [b]<HTML>[/b]? Předem mnohokrát děkuji. Pište prosím na výše uvedený mail.

Avatar

Autor komentáře: Lolik

Datum vložení: 28.4.2006 11:25:46

proč mi to nejde?Nechtěl by mi někdo na lola92@seznam.cz poslat už hotovou věc?

Avatar

Autor komentáře: Rady

Datum vložení: 1.11.2006 20:13:19

Mne sa to zda prilis zlozite .... Na mojej stranke to mam vyriesene pomcou cookies a to tak že do hlavneho suboru vložim lang.php kde mam definovane a berie to potom premannnu lang ... ak si chcem zmenit jazyk tak kliknem na ikonku a ptotom uz nic nemusim pridavat do adresy .. vid http://pala.tym.sk aj tak mam 99% uzivatelov cookie zapnute. a potom si mozem ja uz nastavit ci chcem brat z sql databaze alebo suborov(zatial to mam pomocou suborou, sql sa este len chystam naucit).

Avatar

Autor komentáře: BzabA

Datum vložení: 27.2.2007 0:40:34

Tento script Ti ale přeci nebrání v používání cookies ani v manuálním měnění jazyku. Já svojí vylepšenou podobu používám k nastavení jazyku při prvním načtení stránky, poté už pomocí $_session (popř. přes $_get či cookies) ponechávám jazyk, v kterém uživatel pracoval předtím.

Avatar

Autor komentáře: Mr.DeaD

Datum vložení: 8.5.2007 1:09:25

Nechci zpochybňovat takhle "propracované" udělaní vícejazyčného webu ,ale nedá mi to sem připsat jednoduché klikání na vlaječky ,je to prosté a jednoduše se řeší i stejná grafika stránek-různý text. Ve stránce (index.php) je na místě textu <?php include ("a$lang/soubor_textu"); ?> Potom je soustava složek každá začíná "a" a pak vaše označení daného jazyka. Např. acze,aeng,ahr. Pak záleží jestli chcete zobrazit vlaječky jen při výběru ,nebo stále. Pokud jne při výběru ,tak vložíte do složky "a" soubor se zdrojovým kódem vlaječek např. <a href=!?lang=cze">vlaječka</a> Pokud je tam chcete mít stále tak tento kod vložíte do indexu. Možná špatně vysvětleno.Z PHP tam je pouze include ,ale je to taky řešení ne?

Avatar

Autor komentáře: Miro

Datum vložení: 17.5.2007 17:17:03

[i]případně lze doplnit další parametry, aby se při změně verze ocitl čtenář na[/i] [b]téže stránce[/b] [i]jiné jazykové verze a ne na výchozí, jako je tomu v tomto příkladě[/i] - presne to by som potreboval, ako na to? Aby sa no nevracalo na prvu stranku ale ostalo na tej istej len vymena jazyka...

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