EN | CS | Přihlásit | Registrovat

GettextTranslator

Gettextový překladač pro lokalizaci podporující parametrizované překlady a plurály.

Verze 0.4
Download GettextTransla­tor.php
Autor Roman Sklenář
Licence New BSD license

Instalace

Není potřeba žádných rozšíření v prostředí PHP, soubor překladu je čten a parsován binárně, je proto vhodný především pro vývojové prostředí, neboť odpodá nutnost při každé změně .mo souboru s překlady restartovat web server. Stačí pouze načíst třídu Nette\Object a rozhraní Nette\ITranslator ať už manuálně nebo za pomocí autoloadingu.

Jako formu plurálu pro češtinu ve vašich gettext souborech použijte následující tvar:
nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4 ? 1 : 2);

Příklad použití

Vytvoření instance:

$translator = new GettextTranslator('locale.mo');

K získání překladů on-the-fly:

$translator = new GettextTranslator('locale.cs.mo', 'cs'); // druhý parametr je volitelný
echo $translator->translate("Dog"); // Pes
echo $translator->translate("Dog", 2); // Psi
echo $translator->translate("There is %d unreaded comment in thread %s.", $number, 'Changelog');

// zjištění locale (volitelné)
echo $translator->locale;

Lokalizace formuláře:

$translator = new GettextTranslator('form.cs.mo', 'cs');
$form = new Form;
$form->setTranslator($translator);

Lokalizace řetězců v šabloně:

{? $template->setTranslator(new GettextTranslator('template.cs.mo'))}

{_'Hello! Welcome to our page!'}
{_'There is %d unreaded comment in thread %s.', $number, 'Changelog'}
{_'In thread %2$s is %1$d unreaded comment.', $number, 'Changelog'}

Díky tomu, že překladač nepoužívá nativní podporu Gettextu v PHP, není doporučen pro produkční nasazení. Pokud se ho přesto rozhodnete nasadit, doporučuji alespoň použít Nette\Caching a celý objekt kešovat.


Login to submit a comment