Translator preklady textov z DB, ktoré sú dynamické

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

Ahojte,

Narazil som na problém. Prekladáme v systéme Logy, ktoré sa ukladajú do DB do pola „description“. Všetko fungovalo, až kým sme do tohto pola nechceli začať nejakým spôsobom pchať dynamické premenné.

Uvediem príklad.
Chcem preložiť slovenčinu

$log->setDescription("Vytvoril faktúru s ID #" . $invoice->getId()");

na

$log->setDescription("is.log.newInvoice, ['id' => 1]");

Čiže preklady v neone sa zmenili

log:
    newInvoice: "Vytvoril faktúru s ID #%id%"

A v šablóne dostávam error, pretože sa celý tento string vopchá ako prvý parameter do translate metódy a nie ako kľúč a za ním array jeho hodnot…

Neviem si už s tým pomôcť a napadlo ma, či sa nedá nejako PHPčku podstrčiť tento string ako normálny kód, alebo či idem na to jednoducho zle a treba zmeniť tabuľku a logiku logov.

David Matějka
Moderator | 6445
+
0
-

co pouzivas za translator?

hitzoR
Člen | 51
+
0
-

Pokud používáš Kdyby/Translation, tak to musí vypadat takhle:

$log->setDescription($translator->translate('is.log.newInvoice', ['id' => 1]));
iNviNho
Člen | 352
+
0
-

Používam kdyby/translation…

@hitzoR samozrejme, to viem, ale takýmto spôsobom vložím log v aktuálnom jazyku napr. slovenčine a ked si to zobrazí angličan, tak to uvidí po slovensky… o to mi nejde

Potrebujem tam vopchať ako keby kľúč toho logu a každému užívateľovi to zobraziť vo svojom jazyku

hitzoR
Člen | 51
+
+1
-

iNviNho napsal(a):

Používam kdyby/translation…

@hitzoR samozrejme, to viem, ale takýmto spôsobom vložím log v aktuálnom jazyku napr. slovenčine a ked si to zobrazí angličan, tak to uvidí po slovensky… o to mi nejde

Potrebujem tam vopchať ako keby kľúč toho logu a každému užívateľovi to zobraziť vo svojom jazyku

Jo takhle, z toho popisu nebylo úplně jasné o co se snažíš.. Napadá mě snad jedině ukládat do DB samostatně kód překladu do jednoho sloupce a ID faktury do druhého. Případně si to ukládat jako enkódovaný JSON objekt a pak si to při vytažení z DB dekódovat. Jinak bys nejspíš musel nějak parsovat ten výstup z databáze a to by bylo peklo. Ale třeba se najde někdo, kdo bude mít nějaké lepší řešení.

newPOPE
Člen | 648
+
+1
-

@iNviNho kedze to je log tal riesenie ktore spomina @hitzoR je v pohode. Na log-och sa nic nemeni, zapise sa a je.

My encode a decode do JSON-u do db. Ukladame si kluc a pole hodnot ktore sa pri preklade posle translatoru a je.

Potom uz len moze byt problem neskor ked napr. zrazu budes logovat 2 dynamicke parametre namiesto jedneho a kluc prekladu zmenis na 2. Proste tam jeden kluc bude chybat…

hitzoR
Člen | 51
+
+2
-

Jako vzhledem k povaze logů bych se fakt přikláněl asi k tomu JSONu, tam si můžeš strčit kolik parametrů chceš, což se ti někdy v budoucnu, když ne rovnou teď, bude určitě hodit.

$log = [
	'code' => 'is.log.newInvoice',
	'params' => [
		'id' => 1,
		'foo' => 'bar'
	]
];
$insert = json_encode($log);
// uložíš si insert do db

A pak, když to potřebuješ, tak jen:

/** @var stdClass */
$log = json_decode($selected);
$translator->translate($log->code, $log->params);
iNviNho
Člen | 352
+
0
-

Ty brdo, ja som vuul. To ma nenapadlo. Supe, hned zajtra tomu dam test, davam palec hore, dakujem!!!