Musím se přiznat, že tohle je mé oblíbené téma. Existují totiž weby, které se neznámo proč neřídí doménou ale nějak se snaží uhodnout, v jakém jazyce ho vlastně chcete vidět. Přijdete pak na nějaký web s koncovkou .cz a místo češtiny dostanete třeba angličtinu. Nebo přijdete do nápovědy na Instagram.com a neznámo proč vám zobrazí švédštinu či dokonce ruštinu.
Nejhorší je, že na řadě takovýchto webů budete velmi obtížně hledat cestu, jak jazyk změnit. Nejsou tam žádné snadno dostupné vlaječky či přepínání jazyků. Pokud ho navíc dostanete v nějakém pro vás zcela neznámém jazyce, tak ono hledání bude ještě komplikovanější.
Jak weby poznávají jazyk, ve kterém mluvit na návštěvníka?
Ve většině případů se jazyk webu pro návštěvníka odvozuje z toho, jaký jazyk máte nastavený v prohlížeči. Pokud jste si například stáhli Chrome/Firefox v češtině, tak „cs-cz“ coby jazyk bude na prvním místě mezi jazyky. Pokud ale máte tentýž prohlížeč v angličtině, bude na první místě (například) „en-US“. Celé to ovlivní případně i volba jazyka v operačním systému (které se prohlížeč může přizpůsobit).
TIP: Výše popsané je definované v RFC 2616 a vychází to z tzv HTTP_ACCEPT_LANGUAGE (Accept-Language) vyskytujícího se v hlavičce http požadavku. V zásadě tím prohlížeč říká, v jakých jazycích je možné poslat obsah. Dá se tam určovat i priorita.
Jedna z dalších možnosti (a ještě méně vhodná než předchozí) je ta, že se web pokusí uhádnout odkud jste, podle vaší IP adresy. Jenže, geolokace je značně problematická v řadě ohledů – můžete být v Praze, ale vaše IP adresa se klidně může nacházet v Německu. Nebo můžete být cizinec co přijel do Prahy a o češtinu nejspíš zcela určitě zájem nemáte.
S ohledem na tohle je ono první řešení pravděpodobně schůdnější a možná vede k menšímu matení. Osobně ho ale dost nesnáším. Nějak tak očekávám, že pokud vlezu na něco s .cz doménou, tak by to mělo prioritně mluvit česky a ignorovat, že můj prohlížeč říká, že zvládám „en,cs“ (tedy angličtinu a češtinu). Ale stejně tak, že pokud vlezu na .nějaký .com web, tak očekávám že na mě nebude mluvit česky. Ale v tomhle jsem prostě trochu v rozporu s oním výše popsaným principem.
Je zajímavé vědět, že naši východní sousedé s tímhle mají ještě zábavnější potíže, protože dost častou přijdou na .cz web a místo češtiny (které nejspíš rozumí) se jim zobrazí angličtina. V jejich prohlížečích je totiž většinou uvedeno, že chtějí „sk-SK, en-US“. Web samotný slovenštinu neumí, takže jim rovnou hodí angličtinu. Řešitelné by to bylo, pokud by si Slováci v prohlížečích dávali „sk-SK, cs-CZ, en-US“. Nebo kdyby tvůrci webů pamatovali na to, že pokud někdo má „sk-SK“, tak je lepší mu dát češtinu, než angličtinu.
Není to jednoduché a snadné řešení to nemá
Ano, není to jednoduché, to je jediná věc, kterou si můžete z předchozího odnést. Co je ale v tomhle všem důležité je, že musíte umožnit snadno přepnout jazyk – tj. přepínání, nějaké ty vlaječky nebo něco podobného, musí být okamžitě a snadno nalezitelné. Ale také snadno identifikovatelné, protože tam právě možná máte někoho, komu jste dodali stránku ve špatném jazyce.
Druhá věc, také hodně důležitá – web si musí pro návštěvníka pamatovat v jakém jazyce ho chtěl dostat. Měl by si to pokud možno pamatovat i pro další návštěvy, takže vám nezbude nic jiného, než mu pořídit nějakou tu cookie. Ale ani tady nezapomeňte, že musí mít kdykoliv možnost snadné změny i bez toho, že by začal hledat vaši cookie a smazal ji.
Údaje z Acccept-Language neslouží jenom k určení jazyka, ale také dalších souvisejících věcí – formátu času, data, měny a dalších. W3C má na tohle téma dokument Is it a good idea to use the HTTP Accept-Language header to determine the locale of the user? a v zásadě tam varuje. že Accept-Language pro tenhle účel původně vůbec navrženo nebylo.
TIP: Dejte si pozor na častou záměnu Accept-Language s Content-Language – to první říká, v jakém jazyce by váš prohlížeč chtěl dostat obsah. To druhé říká, v jakém jazyce konkrétní obsah je.