Dynamická změna jazyka Translatoru
- Phalanx
- Člen | 310
Ahoj, chtěl bych se zeptat, jestli jste se už s tím někdo nesetkali – snažím se změnit za běhu několikrát jazyk. Chci generovat do přílohy emailu vícejazyčné dokumenty, ale překládá se mi pouze česká verze (z cs i en adres).
<?php
$options = array('cs', 'en');
foreach($options as $lang) {
$this->translator->setLocale($lang);
$template = $this->createTemplate();
// ... set template params
$pdf = new PdfResponse($template);
// ... save file as pdf
}
?>
Používám Kdyby/Translation.
Tohle řešení se mi ani tak moc nepozdává, raději bych použil jen něco jako překlad template bez přepínání jazyka. Další možnost je mít samostatně template_cs.latte a template_en.latte a načítat si jazyk jak budu chtít, ale už je to duplikace kódu…
Děkuji předem za Vaše názory
- ali
- Člen | 342
Zkusil bych to nejak takto:
$options = array('cs', 'en');
foreach($options as $lang) {
$template = $this->createTemplate();
$template->lang = $lang;
// ... set template params
$pdf = new PdfResponse($template);
// ... save file as pdf
}
{_nejaky.text.1, NULL, [], NULL, $lang}
{_nejaky.text.2, NULL, [], NULL, $lang}
- Jan Mikeš
- Člen | 771
To co pise @ali je asi nejrozumnejsi reseni, jinak by sis musel ukladat aktualni jazyk pred zahajenim operace a po vygenerovani pdf ho nastavit zase zpet, nehlede na to, ze tim prepinas jazyk v cele aplikaci a vsude, kde translator pouzivas. Vyse zminenim prepinas jazyk pouze pro vypis dat coz je idealni.
- Phalanx
- Člen | 310
Dobrý nápad, bohužel nepomohlo. Zdá se mi, jako by se vůbec nebral v potaz další jazyk.
Velmi zvláštní je, že pokud přehodím pořadí
<?php
$options = array('en', 'cs');
?>
se objeví chyba
Exception in Nette\Bridges\ApplicationLatte\Template::__toString(): Circular reference detected when adding a fallback catalogue for locale "en". in \vendor\symfony\translation\MessageCatalogue.php:172
Přišel jsem na nejjednodušší příklad v Presenteru co hází chybu:
<?php
// OK
echo $this->translator->translate('invoice.InvoiceNum', NULL, array(), NULL, $lang);
// CHYBA
echo $this->translator->translate('invoice.InvoiceNum', NULL, array(), NULL, 'en');
echo $this->translator->translate('invoice.InvoiceNum', NULL, array(), NULL, 'cs');
?>
Editoval Phalanx (5. 1. 2016 11:33)