SyMfonAK - vyvíjame databázy pomocou frameworku Symfony

Preklad (i18N)

Z SyMfonAK
Prejsť na: navigácia, hľadanie

Symfony dokumentácia → Preklad (i18N)


originál návod

Skratka i18n znamená proces internacionalizácie podľa hodnoty užívateľských locale (napríklad jazyk a krajina). Čo sa týka textu, ide o zobrazenie textu v správnom jazyku užívateľa alebo v prednastavenom jazyku. Pojem locale sa vzťahuje aj na iné špecifiká a formáty zobrazenia. Napríklad meny. Doporučovaný formát je skratka jazyka (podľa ISO 639-1 potom podčiarknik _ a skratka štátu (podľa ISO 3166-1 alpha-2. Napríklad fr_FR, sk_SK). Na tejto stránke sa dá dozvedieť a využití zložky pre preklad v Symfony. Zložka pre preklad je vysvetlená aj na inej stránke: Zložka pre preklad (The Translation Component) a ešte podrobnejšie o používaní translátora. Celý proces sa skladá z nasledujúcich krokov:

  1. Konfigurácia - aktivácia a nastavenie prekladacej služby
  2. Abstraktné reťazce (napríklad správy, odkazy) zabalené do volaní Translátora ( viď nižšie "základné nastavenie")
  3. Vytvorenie súborov obsahujúcich preklady oznamov
  4. Nastavenie a manažovanie užívateľských locale pre danú požiadavku (Request) alebo pre celú session.


Inštalácia

composer require symfony/translation


Konfigurácia

Inštalácia pripravila aj prednastavený konfiguračný súbor. V YAML formáte je to takto:

# config/packages/translation.yaml
framework:
    default_locale: 'en'
    translator:
        fallbacks: ['en']
        # ...

Definuje prednastavenú locale a rezervnú. Rezervná je použitá ak ak Symfony nenájde preklad.

Lokále sú v požiadavke (request).


Základy prekladu

Preklad zabezpečuje služba Translator. Prekladaný kúsok textu - správa (message) preložíme metódou trans().

Príklad v rámci kontroléra:

// ...
use Symfony\Contracts\Translation\TranslatorInterface;

public function index(TranslatorInterface $translator)
{
    $translated = $translator->trans('Symfony is great');

    // ...
}

Podľa hodnoty Locale bude prebiehať preklad. Symfony potrebuje k prekladu zdroj. Zdroj zvyčajne obsahuje zbierka preložených správ podľa Locale. Takéto slovníky možno vytvoriť viacerými formátmi. Doporučený formát je XLIF.

Tu je príklad francúzskeho slovníka:

# translations/messages.fr.yaml
Symfony is great: J'aime Symfony

Pre ďalšie informácie pozri sekciu Zdroje prekladov, názvy súborov a ich umiestnenie nižšie.

Teraz ak niekto s Locale Francúz (napr. fr_FR, fr_BE, uvidí J'aime Symfony.

Preklad možno rovno vo vzoroch (Templates).

Proces prekladu

Proces prekladu metódou trans() využíva nasledujúce:

  • Locale užívateľa ak bolo zistené v požiadavku (Request)
  • kolekcia prekladov správ podľa Locale a tiež rezervné správy sú načítané, v ostrom prostredí sú ošetrené vyrovnávacou pamäťou (cache)
  • ak je hľadaný reťazec správy nájdený, vráti preklad, ak nie je nájdený, vráti pôvodný hľadaný reťazec


Krátke správy (messages) a ich formát

Niekedy je súčasťou krátkej správy určenej na preklad aj premenná. To nie je možné preložiť tak jednoducho. Podobnú komplikáciu robia aj rôzne tvary množného čísla. Do verzie Symfony 4.2 sa používal na riešenie množného čísla pri preklade metóda transChoice(). Od verzie Symfony 4.2 využíva symfony ICU formát a triedu PHP MessageFormatter. Viac informácií .

Preklady vo vzoroch (in Templates)

Väčšina požiadaviek na preklad prebieha vo vzoroch. Symfony podporuje aj Twig aj PHP šablóny. Príklad:

 <h1>{% trans %}Symfony is great!{% endtrans %}</h1>

Viac sa dozviete v kapitole

Extrakcia prekladaného obsahu a automatické doplnenie katalógov

Najnáročnejšie je udržovať preklady a slovníkové súbory. Na pomoc prichádza príkaz symfony translation:update.


Zdroje prekladov, názvy súborov a ich umiestnenie

Ošetrenie užívateľkých Locale

Rezervné locales (Fallback Translation Locales)

Ak je užívateľské locale napríkald fr_FR a má preložiť určitú vetu ako Symfony is great tak preklad pnátra vo viacerých zdrojoch:

  1. najprv sa pozrie do súboru podľa fr_FR (napr. messages.fr_FR.xlf)
  2. ak nenašiel, pozrie na preklad čisto vo fr (napr. messages.fr.xlf)
  3. ak nenašiel ide do nastavenej ako rezervné locales (fallbacks).
nenájdený preklad zaznamená do logov

Preklad obsahu databázy

Ladenie prekladu (Debugging)

Súhrn

Naučte sa viac