Dynamická změna jazyka Translatoru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Phalanx
Člen | 310
+
0
-

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
+
+3
-

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
+
0
-

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
+
0
-

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)

Jan Mikeš
Člen | 771
+
+3
-

@Phalanx jestli spravne chapu chybu, tak mas fallback na EN, jenze EN ti neexistuje, tim padem ti tam vznikne loop jak je popsano v chybe, over to, pripadne zkus vypnout fallback v configu na zkousku.

Phalanx
Člen | 310
+
+1
-

@Lexi Bingo, díky! Měl jsem v default fallback nastavený na [en_EN, en], přičemž jazykové soubory jsem pojmenovával en_US.

Edit: ani změna na [en_US, en] nakonec nepomohla, fallback jsem úplně zakomentoval a už překládá dle představ.

Editoval Phalanx (6. 1. 2016 9:09)