Můj web

Přepínač jazyků na Django webu

Publikováno 2.1.2013

O překladech v Django frameworku jsem již psal. Když už tedy umíme aplikaci lokalizovat, zkusme si udělat přepínač jazyků, ať přeložené texty využijeme. Pěkný návod je zde, přesto ho zrekapituluji a doplním.

1. inicializace LocaleMiddleware

Django samotné obsahuje middleware, který přepínání jazyků umožňuje. Přidáme tedy potřebný middleware do souboru settings.py:

MIDDLEWARE_CLASSES = [
  ...
  django.middleware.locale.LocaleMiddleware,
]

2. zpracování požadavků na změnu jazyka

Přepnutí jazyka je realizováno POST requestem na specifickou URL. Musíme tedy URL zpracovat. Do souboru urls.py přidáme toto:

urlpatterns = patterns(
  ...
  url(r'^i18n/', include('django.conf.urls.i18n')),
)

3. Konfigurace požadovaných jazyků

V souboru settings.py založíme konstantu, která obsahuje seznam volitelných jazyků. Jedním z nich by měl být defaultní jazyk určený konstantou LANGUAGE_CODE v témže souboru. Jazyky jsou definovány dvoupísmenným kódem podle normy i18n.

LANGUAGE_CHOICE = [
  "cs",
  "en",
]

4. Zpřístupnění konstanty v šablonách

Vlastní konstantu dostaneme do šablony kontextovým procesorem. Do souboru context_processors.py vložíme toto:

from django.conf import settings
def langs(request):
  ctx = {
    "LANGUAGE_CHOICE": settings.LANGUAGE_CHOICE,
  }
  return ctx

Zkontrolujeme, zda se tento procesor nachází v nastavení settings.py v seznamu TEMPLATE_CONTEXT_PROCESSORS.

5. Vložení přepínače do šablony

Do šablony vložíme vlastní HTML kód (částečně generovaný), který zobrazí přepínač jazyků, např. takto:

{% load i18n %}
{% get_current_language as LCR %}
<ul class="nav pull-right">
 <li>
 <form action="/i18n/setlang/" name="setLang" method="post">{% csrf_token %}
 <input name="next" type="hidden" value="{{ request.path }}" />
 <select name="language" onchange="document.setLang.submit();return false;">
 {% for lang in LANGUAGE_CHOICE %}
 <option value="{{ lang }}"{% if LCR == lang %} selected{% endif %}>{{ lang|language_name_local|capfirst }}</option>
 {% endfor %}
 </select>
 </form>
 </li>
</ul>

Tato varianta přepínače jazyků využívá select box. Dokáže předvybrat aktuálně nastavený jazyk. V hidden proměnné next je nastaveno aktuální URL, kde se právě na webu nacházíme.  Na toto URL je web přesměrován, když dojde k přepnutí jazyka. Předpokládáme tedy, že jsou přeložené všechny stránky webu a URL pro různé jazyky se neliší. Zobrazení názvu jazyka necháváme na systému, nemusíme se tedy zabývat jeho překladáním. V select boxu se název každého jazyka objeví přeložený v daném jazyku, což je pro uživatele žádoucí. K tomu je využit filtr language_name_local. Další filtr nám zajistí, že je první písmeno názvu velké.

 

Komentáře

Komentáře jsou vypnuty.