Automatické přepínání jazyka stránky podle nastavení prohlížeče

O možnosti využítí standardně zasílané hlavičky Accept-Language pro volbu preferovaného jazyka stránky jsem já osobně psal před čtyřmi lety (skoro). Dnešní živou diskusi na jistém fóru, týkající se magie způsobující že se moje osobní stránky někomu ukazují česky, někomu anglicky, jsem si zdůvodnil tím, že fórum je o psech a ne o počítačích. Když mi ovšem večer v mailboxu přistál dotaz jak z ASP.NET provést reverzní DNS lookup, kvůli volbě patřičné jazykové verze, došlo mi že je třeba jednat.

Internetové prohlížeče umožňují nastavit jazyk, ve kterém si uživatel přeje dostávat stránky, je-li to možné. Tuto preferenci pak posílají s každým požadavkem jako hlavičku Accept-Language. Bližší podrobnosti jest nalézti ve shora linkovaném článku, případně přímo v RFC 2616, sekce 14.4.

Využití v ASP.NET

ASP.NET umožňuje přistupovat k jazykovým preferencím pomocí vlastnosti Request.UserLanguages. Želbohu, nepříliš inteligentně, prostě rozparsuje hlavičku Accept-Header podle čárek a dál se o nic nestará. Ačkoliv RFC umožňuje nastavit každému jazyku prioritu (váhu), ASP.NET ji ignoruje, a řídí se pouze pořadím jazyků v hlavičce. V praxi to naštěstí nepředstavuje problém, protože klienti kódy jazyků posílají v patřičném pořadí.

Nastavení v MSIE

Internet Explorer přebírá nastavení požadovaného jazyka při instalaci, podle nastavených "regional settings". Je tedy pravděpodobné, že máte správně nastavenou češtinu. Pokud toto nastavení chcete změnit, jděte v menu na Tools -> Internet Options a na záložce General klepněte na tlačítko Languages:

Mozilla Firefox samozřejmě v duchu svých nejlepších tradic příslušná nastavení operačního systému zcela ignoruje, na natvrdo má (alespoň v anglické verzi) nastavenou angličtinu. Náprava je naštěstí snadná a kupodivu zcela stejná jako v MSIE:

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET