Pokud chcete, aby vaše stránky přečetl i váš zahraniční partner, vaši vzdálení příbuzní nebo jen kdokoli, kdo neumí česky, budete potřebovat připravit vícejazyčnou podobu svých stránek. Poradím vám, co pro to můžete udělat v PHP, případně v SQL.

Obvyklou aplikaci v PHP tvoří hlavní skript, který obsahuje hlavičku s nabídkou a patičku. Do skriptu se pomocí  include vkládají jednotlivé stránky. Pro vícejazyčné rozšíření podle mého návodu musíte zajistit, aby hlavní skript "polknul" nastavení patřičné jazykové verze a také zvolil verzi do něj vkládané stránky. Pro tento účel si zaveďte proměnnou $lg, která bude obsahovat zvolenou jazykovou verzi. Ke správné funkci celé aplikace je pak nutné, aby byla tato proměnná předávána pomocí parametru URL v každém odkazu aplikace, případně je možné ji zaregistrovat do session (pokud aplikace sessions využívá).

V případě, že proměnná $lg ještě není nastavena (např. při vstupu na hlavní stránku) využijte autodetekci preferovaného jazyka klienta. V PHP je to proměnná $HTTP_ACCEPT_LANGUAGE. Pro určení verze použijte jen první dva znaky této proměnné. Musíte se také rozhodnout, zda jazyk požadovaný klientem je vaše aplikace vůbec schopná nabídnout. Pokud ne, změňte nastavení proměnné $lg na nějaký výchozí jazyk (např. angličtinu). Celou tuto část kódu je vhodné uložit do zvláštního souboru (např. config.php), který pak můžete snadno vložit nejen do hlavního skriptu, ale i do všech ostatních pomocných skriptů.

if (!isset($lg)) {  // není-li zvolena verze, zvolit automaticky
  $lg = explode(",",$HTTP_ACCEPT_LANGUAGE);
  $lg = StrToLower(Substr(chop($lg[0]),0,2)); // vybrat první dva znaky preferovaného jazyka
}
if ($lg=="sk") // pokud klient preferuje slovenštinu, kterou nemáte k dispozici, přenastavit jinou vhodnou verzi
  $lg="cs";
if (($lg<>"en") && ($lg<>"cs") && ($lg<>"de")) // ověřit, zda není požadována nedostupná verze
  $lg="en";
require("config$lg.php"); // zavést nastavení specifické pro každou verzi

Uvedená část kódu vyjme první dva znaky z preferovaného jazyka klienta v případě, že již není jazyk určen v proměnné $lg. Umožňuje nastavení české verze stránek pro případ, kdy je slovenština preferovaným jazykem klienta, ale vy slovenskou verzi stránek nemáte (obdobně můžete předurčit další verze). Následuje ověření, zda zvolený jazyk odpovídá některé z nabízených verzí (v našem příkladu jsou k dispozici angličtina, čeština a němčina – en, cs, de) – pokud ne, zvolí se anglická verze. Poslední řádek vkládá pokračování konfiguračního souboru s nastavením, které je již specifické pro každou jazykovou verzi.

Pro českou verzi si vytvořte ještě soubor configcs.php (název souboru vznikne jednoduše přidáním dvouznakového kódu verze za název souboru). Do tohoto souboru vložte např. proměnné zobrazovaných položek hlavního skriptu a typ kódování (pokud nechcete použít kódování UTF). Někdy je potřeba použít i rozdílný typ fontu pro různé verze (např. pro českou, japonskou a ruskou verzi je nastavení specifického fontu nutné). Podobně můžete v závislosti na verzi zařadit různé soubory stylů CSS, části JavaScriptů apod. Následují příklady souborů – configcs.php, configen.php a část souboru configjp.php:

$encoding="iso-8859-2";
$font="Arial, Tahoma";
$menu1="Produkty";
$menu2="O nás";

$encoding="iso-8859-1";
$font="Arial, Tahoma";
$menu1="Products";
$menu2="About us";

$encoding="iso-2022-jp";
$font="Osaka, MS Gothic";

„Vícejazyčná“ grafika

Pokud chcete v každé jazykové verzi použít různé obrázky (např. jako součást nabídky), jednoduše k základnímu názvu souboru obrázku přidejte (stejně jako u konfiguračního souboru) dvouznakový kód verze. Například soubor offer1.gif pro českou verzi pojmenujete jako offer1cs.gif, pro německou verzi jako offer1de.gif. Ideální je, pokud mají soubory obrázků pro všechny verze stejné rozměry. Pokud to nejde (např. z důvodu rozdílné délky textu pro různé verze), pak se snažte zachovat alespoň jeden z rozměrů. V kódu potom uveďte jen ten rozměr, který se shoduje ve všech verzích.

Následující hlavní skript (index.php) již bude "mluvit" více jazyky:

<?PHP require("config.php") ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?PHP echo $encoding ?>">
</head>
<body>
<font face="<?PHP echo $font ?>">
<a href="?pg=product&lg=<?PHP echo $lg ?>"><?PHP echo $menu1 ?></a><br>
<a href="?pg=about&lg=<?PHP echo $lg ?>"><?PHP echo $menu2 ?></a>
<p>
<img src="offer1<?PHP echo $lg ?>.gif" height="40"><img src="offer2<?PHP echo $lg ?>.gif" height="40">
<p>
<a href="?lg=cs">&#268;esky</a> | <a href="?lg=en">English</a>
</font>
</body>
</html>

V hlavičce je vidět nastavení správného kódování, dále je vidět ukázka odkazů s parametrem $lg v URL a názvy položek odkazů vypsané z proměnných z konfiguračního souboru dané verze. V dalším odstavci je příklad použití obrázků specifických pro danou verzi s uvedením jen jednoho rozměru. Na konci souboru jsou pak odkazy, kterými lze kdykoli přepnout jazykovou verzi (případně lze doplnit další parametry, aby se při změně verze ocitl čtenář na téže stránce jiné jazykové verze a ne na výchozí, jako je tomu v tomto příkladě). Písmeno Č v textu odkazu pro přepnutí české verze je napsáno pomocí entity, aby se tento znak s diakritikou zobrazil korektně ve všech verzích nezávisle na nastaveném kódování.

Příprava stránek

Nakonec zbývá připravit vícejazyčné verze stránek, které se budou vkládat do hlavního skriptu. Existuje několik možností. Můžete vytvořit adresáře, které mají názvy shodné s kódem jazyka (např. tedy cs, en, ru atd.). Lze také každý soubor jazykové verze pojmenovat tak, že k názvu připojíte kód jazyka – obdobně jako u obrázků, např. název souboru product.php upravíte pro německou verzi na productde.php, pro polskou productpl.php.
Důležité je rozhodnout, zda je vhodnější připravit pro danou verzi kompletně celý soubor nebo připravit jen zvláštní soubor s proměnnými a do něj vložit soubor, který bude pro všechny verze stejný. První způsob zvolíte, je-li obsahem souboru spíš více textu než HTML kódu, druhý způsob platí pro opačný případ – obsahem je jen pár kousků textu, např. texty jako: adresa, telefon, mapka nebo třeba záhlaví tabulky jinak popisující údaje, které jsou ve všech verzích stejné. Oba způsoby lze samozřejmě kombinovat. Podle svého výběru pak upravíte část, která vkládá  patřičný soubor do hlavního skriptu – vzhledem k množství variant již příklad neuvádím, použití je analogické jako použití již uvedeného konfiguračního souboru.

Spolupracuje-li vaše aplikace s databází, je velmi jednoduché rozšířit názvy sloupců tabulky, které mají být pro různé verze odlišné o kód jazyka. V SQL dotazu potom za název sloupce přidáte proměnnou $lg, čímž se z databáze vytáhnou data patřičné jazykové verze. V tabulce databáze pak samozřejmě musí být pro každou verzi patřičný sloupec – pokud jste měli sloupec comment v původní tabulce, pak změníte jeho název na commentcs a vytvoříte další sloupce s názvy commenten, commentde atd. Někdy se hodí použít pro jiné verze novou tabulku – pak doplníte za název každé tabulky opět kód jazyka a upravíte SQL dotaz. Základem je vždy vhodně doplnit kód jazykové verze.

Kód jazykové verze

Kód jazyka požadované verze zjistíte ve vlastnostech svého prohlížeče, kde najděte nastavení jazyka. V nabídce nalistujte požadovaný jazyk, za názvem jazyka je obvykle hranatá závorka: Italština (Švýcarsko) [it-ch]. Z této hranaté závorky si poznamenejte první dva znaky (někdy je jich více) – to je kód jazyka, který bude řádně spolupracovat s autodetekcí zmíněnou na začátku článku.

Nakonec můžete ještě zajistit uložení volby verze do cookie – ten, kdo raději používá jinou verzi stránek, než jakou nabídne autodetekce (např. z důvodu nevhodné konfigurace systému klienta), pak bude mít při opětovném vstupu na stránky verzi, kterou si zvolil.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

2 Příspěvků v diskuzi

  1. mam problem s jazykovou mutaciou na svojom webe, ktory neviem riesit, mozno mi niekto bude vediet pomoct.

    linky v menu mam postavene takto:
    http://www.mojadomena.sk/index.php?id=podstranka

    ked si ale kliknem na jazyk v menu mutacii tak link sa mi zmeni na:
    http://www.mojadomena.sk/index.php?lang=eng

    problem je v tom, ze vsetko funguje dobre, ale ked som na nejakej podstranke a kliknem na iny jazyk tak ma to hodi na index v inom jazyku a nie na podstranku

    potreboval by som poradit ako dosiahnem to, ze ked kliknem na iny jazyk aby som ostal na aktualnej podstranke, len by sa zmenil jazyk, teda:
    http://www.mojadomena.sk/index.php?id=podstranka&lang=eng

    ak mi niekto viete poradit, kontaktujte ma majlom patrik@horgos.sk

    dakujem
    patrik

Odpovědět