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
1
extensions:
2
translation: Kdyby\Translation\DI\TranslationExtension
Copied!

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.
1
{
2
/** @persistent */
3
public $locale;
4
5
/** @var \Kdyby\Translation\Translator @inject */
6
public $translator;
7
8
}
Copied!

Router

Nahradíme původní definici defaultního routeru
1
$router[] = new Route('[<locale=cs cs|en>/]<presenter>/<action>', "Homepage:default");
Copied!

Slovníky

Do adresáře app/lang přidáme dva soubory ui.cs_CZ.neon a ui.en_US.neon
kde ui je pojmenování našeho slovníku a cs_CZ je kombinace jazyka a státu (ISO_639-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).

Obsah slovníku

Používám formát neon
ui.cs_CZ.neon
1
title: Vitejte
Copied!
ui.en_US.neon
1
title: Hello
Copied!

Š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/Kdyby/Translation/blob/master/docs/en/index.md
Last modified 1yr ago