Lokalizace šablon

Systém jNetPublish poskytuje mnohostrannou podporu pro tvorbu vícejazyčných prezentací. Hlavním prostředkem je využití překladových slovníků vydělujících lokalizované řetězce z šablon.

Lokalizační data šablony

Lokalizační data používaná jednorázově v šabloně se definují jako součást assetu šablony v samostatném editoru pojmenovaném „Překladové mapy“.

Každá mapa přísluší některému konkrétnímu locale. Název locale se řídí konvencí jazyka java; typicky se používá "cs_CZ" jako české a "en_US" jako anglické.

Obsah samotné mapy je zapsaný jako seznam dvojic klíč – hodnota. Každá dvojice je na samostatném řádku. Klíč se od hodnoty odděluje znakem ":" (dvojtečka).

Obsah překladové mapy pro cs_CZ
label_back: Zpět
label_more: Více
Obsah překladové mapy pro en_US
label_back: Back
label_more: More

První překladová mapa se bude používat v případě, že je aktuální jazyk čeština (“cz”), druhá pro angličtinu (“en”). Obě překladové mapy definují tytéž klíče: label_back a label_more.

Klíče v překladových mapách je vhodné volit nikoli nahodile, ale tak, aby při postupném přidávání dalších map a klíčů nedocházelo ke konfliktům. Užitečné je používat prefixy, které usnadní zpětné dohledání assetu obsahujícího překladovou mapu, nebo prefixy kategorizující řetězce podle způsobu využití.

Využití překladů v šabloně

Při nalezení lokalizace se automaticky používá aktuální jazyk a překladová mapa aktuální šablony. Je možné použít zápis %%klíč. Tento výraz se vyhodnotí jako řetězec; obyčejně ho budeme chtít hned vypsat.

Použití v šabloně
<a href="{link(_primary)}">{%%label_back}</a>

Jak používaný jazyk, tak asset, který je zdrojem lokalizačních údajů, lze změnit. Slouží k tomu příkaz options a po řadě jeho volby forceLanguage a localizationSource.

Oddělení definice do slovníků

Umístění překladů v assetu šablony je pohodlné pro správce prezentační logiky; obyčejně je ale užitečné, aby překlady mohl editovat správce obsahu prezentace. K tomu slouží assety typu Složka slovníků.

Každá složka slovníků sdružuje překladové slovníky překládající tutéž sadu klíčů do různých jazyků.

K šabloně se připojuje složka slovníků v editoru „Překladové mapy“ jako „Předchozí lokalizovaná položka“. Využití lokalizačních údajů v šabloně je pak zcela stejné, jako by překlady byly přímo v mapách šablony.

Jak složka slovníků, tak šablona nebo formátovač jsou pro systém jNetPublish zdroje lokalizačních údajů. Tyto zdroje je možné řetězit do libovolné hloubky (ale je třeba dát pozor na zacyklení!). U šablony k tomu slouží atribut „Předchozí lokalizovaná položka“, u složky slovníků „Nadřazený slovník“.

Použití proměnných parametrů v překladech

Místo operátoru %% je možné použít funkci xlat. Tato funkce přijímá jako první argument řetězec, který se použije jako lokalizační klíč. Pokud jde o konstantní řetězec, je třeba v tomto případě použít uvozovky: xlat("klíč").

Použití zápisu s voláním funkce je nepřehlednější, ale má širší možnosti:

  • Klíč může být hodnotou proměnné.
  • Lze zadat defaultní hodnotu.
  • Při lokalizaci je možné do překladu doplnit hodnoty parametrů, které jsou známé až v okamžiku výpočtu.

Skloňování výrazů vyjadřujících počet

Specifikem češtiny je, že pro podstatné jméno spojované s číslovkou nestačí rozlišovat jednotné a množné číslo.

  • V košíku je 0 položek.
  • V košíku je 1 položka.
  • V košíku jsou 2, 3, 4 položky.
  • V košíku je 5 položek

Je tedy třeba zvlášť definovat překlad pro číslo 1, zvlášť pro čísla 2, 3, 4 a zvlášť pro čísla 0, 5 a všechna další.

Pro usnadnění generování takových výpisů je v systému jNetPublish TFS funkce declineCnt, která na vstupu dostává jednak počet, jednak tři verze výstupu, ze kterých má vybírat.

Příklad: Skloňování ve frázi vyjadřující počet
Šablona
<p>
  Košík obsahuje {cart.count}
  {declineCnt(cart.count,
              "produkt",
              "produkty",
              "produktů")}.
</p>
Výstup
<p>
  Košík obsahuje 17
  produktů.
</p>

Předpokládáme, že ze strany aplikace je do šablony zveřejněná hodnota cart obsahující informace o obsahu nákupního košíku.

Jazykově specifická pravidla šablon

Použití funkce declineCnt ukazuje, že použití lokalizačních map má své meze: někdy jednoduché překládání slov a vět pro vytvoření vícejazyčné prezentace nestačí. Může být dokonce nutné, aby výstupní dokument měl pro každý jazyk zcela jinou strukturu.

Mohli bychom v šabloně použít proměnnou _language a její hodnotu testovat v příkazu if nebo switch a tak šablonu větvit.

Toto je ale stejně nepraktické jako větvení výstupu šablony podle typu assetu (kvůli kterému jsme začali používat formátovač). Také v tomto případě je lepší jednotlivé větve oddělit do samostatných pravidel, a to jak v šabloně, tak ve formátovači: podmínka každého pravidla šablony a formátovače dovoluje definovat omezení na konkrétní jazyk.

Tento postup by se ovšem měl používat s rozvahou, protože může komplikovat následnou údržbu šablony.

Cílový stav

Vydělení všech řetězců v přirozeném jazyce z těla TFS šablon je obecně žádoucí pro jejich další údržbu. Umožňuje také realizovat kolaborativním způsobem komplikovanější projekty typu přidání další jazykové verze prezentace.

Ve výsledku by proto mělo platit následující:

  • Jazykově nespecifická pravidla šablon a formátovačů neobsahují žádné řetězce v přirozeném jazyce.
  • Jazykově specifických pravidel je minimum.
  • Lokalizační údaje jsou sdružené v několika složkách slovníků, organizace složek i samotné slovníky jsou přehledné.
  • Lokalizační údaje může editovat správce obsahu (případně s omezením na pokročilejší uživatele).
Stránky tutoriálu:
Pro vložení příspěvku do diskuse se přihlašte.