Jak na multijazyčný web s Nette Framework a Kdyby\Translation

Na Nette fóru se objevila otázka Ako jednoducho spravit viacjazycny portal?. Také jsem měl před časem podobnou otázku a řekl si, že už to nebudu pytlíkovat „tak nějak podle sebe“, ale použiji řešení od Filipa Procházky Kdyby\Translation a musím říci, že jsem udělal dobře. Bylo to po Filipově přednášce ve které mě nalákal na spoustu super drobností.

Rozhodl jsem se tedy, že natočím video, ve kterém Kdyby\Translation použiji a zkusím se vejít do 4 minut ať je vidět, že začít je opravdu snadné.

Instalace

instalace Nette web project $ composer create-project nette/web-project

instalace Kdyby/Translation $ composer require kdyby/translation

Konfigurace

do config.neon přidáme extension

extensions:
    translation: Kdyby\Translation\DI\TranslationExtension

Presenter

Do BasePresenteru přidáme proměnou $locale a necháme si injectnout službu Translator, která nám vše bude překládat (v ukázce nemám BasePresenter, ale pouze jeden presenter HomepagePresenter)

Proměnná $locale je persistentní, proto aby se „neztratila“ během procházení webem.

{
    /** @persistent */
    public $locale;

    /** @var \Kdyby\Translation\Translator @inject */
    public $translator;

}

Router

Nahradíme původní definici defaultního routeru

$router[] = new Route('[<locale=cs cs|en>/]<presenter>/<action>', "Homepage:default");

Slovníky

Do adresáře app/lang přidáme dva soubory ui.cs_CZ.neonui.en_US.neon

kde ui je pojmenování našeho slovníku a cs_CZ je kombinace jazyka a státu (ISO639-1 a ISO 3166–1)

takže pokud bych chtěl třeba ruštinu tak použiji koncovku ru_RU

Keeping both the language and the country in the culture is necessary because you may have a different French translation for users from France, Belgium, or Canada, and a different Spanish content for users from Spain or Mexico. The language is coded in two lowercase characters, according to the ISO 639–1 standard (for instance, en for English). The country is coded in two uppercase characters, according to the ISO 3166–1 standard (for instance, GB for Great Britain).

http://symfony.com/…18n-and-L10n

Obsah slovníku

Používáme formát neon

ui.cs_CZ.neon

title: Vitejte

ui.en_US.neon

title: Hello

Šablona

V šabloně použijeme makro {_ ui.title} pro vypsání překladu.

Profit

Začít je opravdu snadné. Více najdete v dokumentaci na https://github.com/…/en/index.md


PS: chcete více video ukázek jak dále pracovat s Kdyby/Translation?


nette kdyby/translation mutation