contributte/translation – překlad názvů položek z DB
- motorcb
- Člen | 552
Zdravím,
dělám multijazyčný web, kde mám v DB uložené menu. OK, z DB si vytáhnu názvy položek v menu a pošlu je do šablony, kde je chci přeložit přes contributte/translation (již ho mám zprovozněný a funguje).
Pro zjednodušení ukázky definuji položky menu hned do kódu:
$this->template->menus = ["{_menu.home}", "{_menu.news}", "{_menu.contact}"];
V šabloně pak zobrazím:
{foreach $menus as $menu}
<li>{$menu}</li>
{/foreach}
V šabloně se položky z menus nepřeloží ale zobrazí se tak jak jsou definované: {_menu.home}, {_menu.news}, {_menu.contact}
Jak donutit šablonu aby text z proměnné ({_menu.home})
přeložila?
Pokud dám {_menu.home} do šablony na tvrdo (není to z proměnné),
přeloží se
Díky. Za tipy
- Marek Bartoš
- Nette Blogger | 1280
Píšeš latte syntaxi do stringu, takže se při výpisu bere jako string. Můžeš sice jednotlivé stringy renderovat jako latte (https://latte.nette.org/en/guide#…), ale jednodušší budeš mít makro pro překlad volat až v šabloně.
- motorcb
- Člen | 552
@Mabar díky za nasměrování:
Jak tam dodám translator?
<?php
$latte = new Latte\Engine();
$latte->setLoader( new Latte\Loaders\StringLoader );
$content = $latte->renderToString( "{_front.profil}");
$this->template->menu = $latte->renderToString( "{_menu.home}");
?>
Vrací chybu: Filter ‚translate‘ is not defined, did you mean ‚truncate‘?
- David Matějka
- Moderator | 6445
překládej to až v šabloně a nekomplikuj si život (nebo si to přelož
pomocí ITranslator
služby)
- David Matějka
- Moderator | 6445
priklady, jak pouzivat translator v presenteru, modelu nebo v latte (vcetne dynamicke promenne) najdes v dokumentaci contributte/translation
- Marek Bartoš
- Nette Blogger | 1280
Třeba takto
$this->template->menus = ["menu.home", "menu.news", "menu.contact"];
{foreach $menus as $menu}
<li>{_ $menu}</li>
{/foreach}
Editoval Mabar (24. 3. 2020 18:06)