<meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
<p id='prepend'>V tΘto Φßsti naÜeho seznßmenφ s lokalizaΦnφ knihovnou gettext se podφvßme na to, jak u₧ivatel∙m jednoduÜe umo₧nit v²b∞r jazyka, ve kterΘm cht∞jφ s aplikacφ komunikovat.</p>
<p>Mßme-li aplikaci lokalizovanou do vφce jazyk∙, musφme n∞jak²m zp∙sobem zajistit, aby u₧ivatel vid∞l verzi v jazyce, kterΘmu rozumφ. U₧ivatelsky nejpohodln∞jÜφ je asi zaslat strßnku v jazyce, kter² mß u₧ivatel nastaven jako preferovan². Tato informace se p°enßÜφ v HTTP hlaviΦce <code>Accept-Language</code>:</p>
<div class='sample'>
Accept-Language: cs;q=1.0,en;q=0.9
</div>
<p>Obsah hlaviΦky se sklßdß ze seznamu k≤d∙ preferovan²ch jazyk∙ (viz tabulka). Za jazykov²m k≤dem m∙₧e b²t jeÜt∞ uvedena priorita tohoto jazyka. Ka₧d² u₧ivatel si m∙₧e svΘ preferovanΘ jazyky nastavit podle libosti ve svΘm prohlφ₧eΦi. Nap°φklad v MSIE pomocφ <kbd class='mouse'>| Nßstroje | Mo₧nosti Internetu... | Jazyky |</kbd>.</p>
<div class='table'>
<table cellspacing='0'>
<caption>VybranΘ jazykovΘ k≤dy podle ISO 639</caption>
<img src='podklady/kosek/1127/gettext-jazyky.png' alt='Nastavenφ preferovan²ch jazyk∙ v Microsoft Internet Exploreru' title='Nastavenφ preferovan²ch jazyk∙ v Microsoft Internet Exploreru' />
<br /><span class='comment'>Nastavenφ preferovan²ch jazyk∙ v Microsoft Internet Exploreru</span>
</div>
<p>Aplikace by vÜak na automatick² v²b∞r nem∞la spolΘhat a m∞la by nabφzet i mo₧nost ruΦnφ zm∞ny preferovanΘho jazyka. Je mnoho situacφ, kdy si u₧ivatel nem∙₧e zm∞nit nastavenφ prohlφ₧eΦe - prßce, internetovß kavßrna a podobn∞. Asi by nßs moc nepot∞Üilo, kdybychom si b∞hem dovolenΘ v ╚φn∞ mohli Φφst jen strßnky v ΦφnÜtin∞, proto₧e ta by byla nastavena jako v²chozφ jazyk na vÜech poΦφtaΦφch v internetov²ch kavßrnßch. U₧ivatelskΘ nastavenφ jazyka, kterΘ je nezßvislΘ na nastavenφ jazyka v prohlφ₧eΦi, si m∙₧e webovß aplikace uchovßvat nap°φklad v podob∞ cookie. UkßzkovΘ °eÜenφ ilustruje nßsledujφcφ p°φklad <em>l10n.php</em>:</p>
<div class='sample'>
<?php
<br />
<br />// v²b∞r jazyka pro texty aplikace
<br />$lang = "en"; // implicitnφ jazyk
<br />
<br />// zm∞na preferovanΘho jazyka podle parametru v URL
<p>Skript nejprve testuje, zda je v URL po₧adavku zadßn parametr <code>changelang</code>. Pokud mß hodnotu <samp>auto</samp>, nastavφ aktußlnφ jazyk podle obsahu HTTP hlaviΦky Accept-Language. Vezme si p°itom prvnφ jazyk, kter² je v seznamu uveden². Pokud je v <code>changelang</code> uvedena jinß hodnota, pova₧uje se za k≤d jazyka a tento k≤d se ulo₧φ do cookie s nßzvem <code>lang</code>. Platnost tΘto cookie se p°itom nastavφ na jeden rok.</p>
<p>V p°φpad∞, ₧e je skript volßn bez parametru, urΦφ se jazyk podle obsahu d°φve nastavenΘ cookie. Nenφ-li cookie <code>lang</code> nastavena, provede se op∞t automatickß detekce jazyka na zßklad∞ hlaviΦky Accept-Language. Skript pak na zßv∞r nastavφ knihovnu <em>gettext</em> do u₧ivatelem zvolenΘho jazyka. Skript <code>l10n.php</code> je dφky svΘmu chovßnφ urΦen k tomu, aby se naΦetl na zaΦßtek ka₧dΘho skriptu v lokalizovanΘ aplikaci.</p>
<p>Vyu₧itφ skriptu v praxi ukazuje jednoduchß aplikace <em>nlsdemo.php</em>. Ta od u₧ivatele zφskß Φφslo a vygeneruje matici obsahujφcφ souΦiny vÜech Φφsel menÜφch nebo rovn²ch zadanΘmu Φφslu. Aplikace je to tedy v podstat∞ k niΦemu, ale demonstruje vyu₧itφ skriptu <em>l10n.php</em> pro detekci a p°epφnßnφ jazyka.</p>
<div class='sample'>
<br /><?php
<br />
<br />// zßkaz uklßdßnφ strßnky do vyrovnßvacφ pam∞ti
<br />header("Cache-Control: no-cache");
<br />
<br />// detekce jazyka a inicializace lokalizaΦnφho mechanismu
<br />require_once "l10n.php";
<br />
<br />?>
<br /><!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>
<p>Jako domßcφ cviΦenφ si m∙₧ete zkusit skript <em>l10n.php</em> vylepÜit tak, aby z preferovan²ch jazyk∙ vybral ten s nejvyÜÜφ vahou, do kterΘho je zßrove≥ aplikace p°elo₧ena. Nechce-li se vßm do toho, m∙₧ete se nechat inspirovat k≤dy jin²ch v²vojß°∙, kterΘ jsou voln∞ k dispozici:</p>
<ul>
<li><a href='http://pear.php.net/manual/en/package.http.http.negotiatelanguage.php'>HTTP::negotiateLanguage</a> - knihovna projektu PEAR</li>
<br /><span class='comment'>Ukßzka lokalizovanΘ aplikace (<a href='podklady/kosek/1127/gettext-ukazka.png'>plnß velikost, cca 45 kB</a>)</span>
</div>
<p>Ukßzali jsme si tedy pou₧itφ knihovny <strong>GNU Gettext</strong>, kterß v souΦasnosti pat°φ mezi nejlepÜφ dostupnΘ nßstroje pro lokalizaci aplikacφ. Gettext lze pou₧φvat pro lokalizaci aplikacφ napsan²ch v r∙zn²ch programovacφch jazycφch vΦetn∞ PHP. PφÜete-li vÜak webovΘ aplikace v PHP, t∞₧ko naleznete pro jejich lokalizaci lepÜφ nßstroj, ne₧ je <em>gettext</em>.</p>