Přepínání mezi jazykovými verzemi stránek pomocí ASP
Často potřebujete vytvořit webové stránky ve více jazykových verzích. Uživateli pak musíte umožnit snadno mezi nimi přepínat. Tento článek popisuje velmi jednoduché a univerzální řešení tohoto problému. Zdrojový kód je sice napsán pro ASP, ale princip řešení je natolik obecný a podrobně komentovaný, že si ho zájemci velmi snadno upraví i pro PHP a dokonce i pro klientský JavaScript.
Zadání
Když jsme byli ve firmě před několika lety poprvé postaveni před úkol vytvořit vícejazyčný web, hledali jsme mimo jiné snadný způsob přepínání mezi jednotlivými jazykovými verzemi stránek. Na řešení jsme si stanovili tyto požadavky:
- Přepínání musí fungovat transparentně 1:1. To znamená, že se uživatel po přepnutí dostane na stejnou stránku v jiné jazykové verzi, nikoli na stránku úvodní.
- Odkaz, který přepnutí do určité jazykové verze způsobí, musí být na všech stránkách stejný. Tím se velmi zjednoduší správa stránek a omezí riziko chybných odkazů, které přepnou na jinou stránku.
- Skript je primárně určen pro ASP, princip však musí jít využít i na jiných platformách, a to i pro stránky, které nedisponují možností skriptů na straně serveru.
Princip řešení
První, co je třeba vzít v úvahu, je způsob rozlišení jazykových verzí stránek. Nejčastěji se používají dva způsoby:
- Jazyková verze je identifikována parametrem v URL (tzv. querystringem) každé stránky. Např. v URL http://www.xyz.cz/stranka.asp?lang=cz je jazyková verze stránky stranka.asp určena parametrem lang.
- Pro jednotlivé jazykové verze je uzpůsobena adresářová struktura webu. Např. stránka s URL http://www.xyz.cz/cz/stranka.html je česky (adresář cz), zatímco URL http://www.xyz.cz/en/stranka.html patří odpovídající stránce anglické (adresář en).
Úkolem tedy je, vytvořit skript, který:
- zjistí URL volající stránky,
- vytvoří URL cílové stránky tím, že v původním URL zamění identifikaci jazykové verze,
- předá řízení (redirect) na stránku s novým URL.
Vstupním parametrem toho skriptu přitom musí být kód cílové jazykové verze. Odkaz na skript je pak možné umístit na vhodné místo každé stránky buď v podobě obrázku odpovídající vlaječky, nebo jako prostý textový odkaz, či ve formě rozbalovacího seznamu jazykových verzí.
Zdrojový kód
Zdrojový kód řešení je napsán v jazyce VBScript pro platformu ASP a pracuje s identifikací jazykové verze ve formě parametru lang připojeného k URL (querystring). Velmi snadno však jde upravit i pro jiné jazyky a pro druhý způsob přepínání využívající adresářovou strukturu. Jedna z takových možných úprav je naznačena v závěru článku.
Nyní však k samotnému skriptu. Jeho úvodní část je velmi jednoduchá:
|
Za klasickou hlavičkou ASP skriptu následuje volání procedury SwitchLang, která se postará o všechnu práci. Podstatné je, že proceduře musíte poslat kód cílového jazyka jako parametr. Ten zjistíme z proměnné lang uložené v QueryStringu.
Celý skript lze tedy volat dvěma způsoby — buď přímým odkazem (např. <a href="switchlang.asp?lang=en">English</a>
), nebo formulářem s rozbalovacím seznamem jazyků. V druhém případě musí být formulář odeslán metodou GET, tedy nějak takto:
|
Nyní se podívejme na vlastní výkonnou proceduru SwitchLang:
|
V první části procedury jsou deklarovány potřebné konstanty a proměnné. Kód cílového jazyka se předává (hodnotou) v parametru strLanguage. Konstanta strLangParamName udává název parametru pro jazykovou verzi v QueryStringu. Konstanta strDefaultDocName určuje název implicitní stránky, pro případ, že URL původní (volající) končí jen názvem adresáře. Konstanta strHomePageName určuje URL vstupní stránky, která se otevře v případě, že se volající stránku nepodaří zjistit.
Proměnné strCurrURL a strNewURL slouží pro uložení URL volající stránky a procedurou vytvořené URL cílové stránky. Ostatní proměnné mají jen pomocný charakter.
V prvním výkonném příkazu se naplní proměnná strCurrURL hodnotou HTTP_REFERER, která by měla obsahovat kompletní URL volající stránky. Ovšem pozor, HTTP_REFERER nemusí být vždy k dispozici a tento stav musíte náležitě ošetřit, jak ostatně uvidíte hned v následující části kódu.
|
Komentáře přímo v kódu vám určitě budou k pochopení algoritmu stačit. Je ostatně velmi jednoduchý:
- Pokud se nepodaří zjistit URL volající stránky (HTTP_REFERER), proběhne přesměrování na cílovou jazykovou verzi home page.
- Pokud je URL volající stránky ukončeno lomítkem, je třeba přidat jméno implicitní stránky a připojit parametr s cílovou jazykovou verzí.
- Neobsahuje-li URL volající stránky dosud žádné parametry (QueryString), stačí k němu připojit parametr s cílovou jazykovou verzí.
- Pokud URL volající stránku již nějaké parametry obsahuje, musí se všechny s výjimkou jazykové verze přepsat do nového URL a poté k němu parametr s cílovou jazykovou verzí připojit.
Závěr procedury je již jednoduchý — provede přesměrování na vytvořené cílové URL.
|
JavaScript
V úvodu článku jsem slíbil, že popsaný princip bude možné použít i na jiných platformách než ASP. Naznačím tedy ještě, jak využít klientský JavaScript v kombinaci s rozdělením jazykových verzí do samostatných adresářů.
V takovém případě můžete použít document.location.href jak ke zjištění URL volající stránky, tak k přesměrování na stránku novou. Je vhodné vytvořit si pro to funkci a odkaz na ni a tedy i na jinou jazykovou verzi uzavřít do tagu <script>. Zároveň je třeba do tagu <noscript> uvést odkaz na home page příslušné jazykové verze pro případ, že prohlížeč nedisponuje klientským JavaScriptem.
V samotné funkci pak již stačí nalézt to správné lomítko (zpravidla poslední) a zaměnit název adresáře před ním kódem cílového jazyka. Celý úkol si zjednodušíte tím, že budete používat kódy jazyků o stále stejné délce (např. 2 znaky).
Závěr
Kód, tak jak jsem ho zde uvedl, ve skutečnosti ve firmě nepoužíváme. Již dříve jsme si pro vícejazyčné stránky vytvořili mnohem komplexnější systém objektů, které se starají i o správné, národní zobrazování čísel a dat a částečně i o varianty textů v různých jazycích. Samotný princip přepínání jazyků v této podobě je však mnohem srozumitelnější a doufám, že alespoň některým z vás přijde vhod.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Lék na phishing a apatii ve světě e-mailového marketingu
18. března 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
Praktické rady na zabezpečení redakčního systému WordPress
27. února 2023 -
Proč je důležité tvořit obsah na váš web?
29. srpna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024