TemplateTranslator
Gettextový překladač pro šablony a formuláře.
| Download | Nette 2.0: https://github.com/…hives/master |
|---|---|
| Nette 0.9.x: https://github.com/…chives/0.9.x | |
| Github | https://github.com/…p-translator |
| Forum thread | http://forum.nette.org/…-a-formulare?… |
| Autor | Ondřej Vodáček |
| Licence | New BSD License |
Instalace
Při použití GettextTranslatoru je potřeba přidat projekt php-gettext. Ten je možné získat na originálních stránkách http://launchpad.net/php-gettext nebo jsem vytvořil git verzi umístěnou na https://github.com/…/php-gettext (vhodné například pokud používate git a submoduly). Pokud vám GettextTranslator nevyhovuje můžete si napsat vlastní a pak není potřeba žádná externí knihovna.
Přehled tříd
| \Antee\i18n\ITranslator.php | základní rozhraní |
| \Antee\i18n\GettextTranslator.php | gettextová implementace ITranslatoru (php-gettext) |
| \Antee\i18n\NetteTranslator.php | implementace Nette\ITranslator pro použití ve formulářích, … |
| \Antee\i18n\TranslateMacros.php | makra (a helpery) pro překlady v šablonách |
Příklad použití
Přidání služby v configu:
services:
translator:
class: Antee\i18n\GettextTranslator
arguments:
- "%appDir%/locale/cs.mo" # cesta k souboru s překlady
Jedná se jen o ukázku, příklad neřeší nastavení jazyka.
Překlady ve formulářích:
class BasePresenter extends \Nette\Application\Presenter {
public function createComponentForm() {
$form = new Form();
$translator = $this->getContext()->getService('translator');
$form->setTranslator(new \Antee\i18n\NetteTranslator($translator));
...
return $form;
}
}
Překlady v šablonách: BasePresenter.php
class BasePresenter extends \Nette\Application\Presenter {
public function templatePrepareFilters($template) {
$latte = new Nette\Latte\Engine;
\Antee\i18n\TranslateMacros::install($latte->parser);
$template->registerFilter($latte);
}
protected function createTemplate($class = NULL) {
$template = parent::createTemplate($class);
$translator = $this->getContext()->getService('translator');
\Antee\i18n\TranslateMacros::registerHelpers($template, $translator);
$template->registerHelper('printf', 'sprintf');
return $template;
}
}
default.phtml
{_'Hello World!'}
{_n'%d comment', '%d comments', 1 |printf:1}
TemplateTranslator nevolá automaticky printf, takže je potřeba jej zavolat explicitně.
Přehled maker:
| makro | význam | pořadí parametrů |
|---|---|---|
{_'Hello World!'} |
jednoduchý překlad | zpráva |
{_n'%d comment', '%d comments', 1} |
překlad množného čísla | jednotné č., množné č., počet |
{_p'context', 'Hello World!'} |
překlad s kontextem | kontext, zpráva |
{_np'context', '%d comment', '%d comments', 1} |
překlad množného čísla s kontextem | kontext, jednotné č., množné č., počet |
Všechna makra mají i neescapovanou variantu s ‚!‘.
