Translator preklady textov z DB, ktoré sú dynamické
- iNviNho
- Člen | 352
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.
- iNviNho
- Člen | 352
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
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
@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
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);