Ahoj, zkouším poprvé Kdyby\Translation (a vůbec poprvé něco z Kdyby a Symfony).

Ve zprovozněném nette/sandbox v2.2.3 jsem do require v composer.json přidal “kdyby/translation”: “~2.0”, spustil composer update a úspěšně implementoval Installation, Setup, Usage, Placeholders i Pluralization z dokumentace . Překlady v Templates fungují.

Chtěl bych nyní vytvořit přepínač jazyků pro celou aplikaci.

Předpokládám, že přidám do @layout.latte

<a n:href="changeLocale!, cs">cs</a>
<a n:href="changeLocale!, en">en</a>

ale dále mi není jasné jak pokračovat. Je třeba instalovat i Kdyby\Autowired? Předem díky za pomoc.

Už jsem to psal jednou na Nette fórum, takže to sem jenom zkopíruji a upravím bez Kdyby/Autowired

example app/templates/Homepage/default.latte

{_front.homepage.hello}

<a n:href="changeLocale!, cs">cs</a>
<a n:href="changeLocale!, en">en</a>

example app/presenters/HomepagePresenter.php

class HomepagePresenter extends BasePresenter
{
    /** @var \Kdyby\Translation\LocaleResolver\SessionResolver @inject */
    public $translatorSession;

    public function handleChangeLocale($locale)
    {
        $this->translatorSession->setLocale($locale);
        $this->redirect('this');
    }
}

A ještě protože session resolver je by default vypnutý, tak ho zapnu

translation:
    resolvers:
        session: on

A mělo by to fungovat :)

SessionResolver má ale dost specifické použití, pokud tedy chceš prostě a jednoduše jenom přenout locale v adrese, což je obecně lepší, protože pak nemáš na jedné adrese dva (a víc) různé obsahy.

Pokud máš tedy v routeru parametr locale, který máš v BasePresenter jako persistentní

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

Tak stačí jednoduše

<a n:href="this, locale => cs">cs</a>
<a n:href="this, locale => en">en</a>

Translator na onRequest poslouchá jaký locale parametr do aplikace přišel a automaticky ho použije.

Jak prosté a já se s tím tak nepochopitelně mordoval… :) Super, fungují obě ukázky. A ta druhá je přesně to, co potřebuji. Díky moc.


You must first log in to participate in this discussion