Kdyby Translation – překlad placeholderu z DB

Newer
Člen | 47
+
0
-

Ahoj, tak nějak si tu lámu hlavu už půl dne s překladem…
krátký popis situace… Uživatel vkládá do systému přes formulář informace(list box), další uživatelé je mohou číst, a celé je to více jazyčné… tzn, čech vybere v listboxu něco, do db se něco přenese, a pak se to vypíše v jazyce uživatele který to čte.

moje naivní představa byla že do DB proste přenesu „placeholder“ a latte si ho pak vypíše podle jazyka uživatele bohužel vypisuje placeholder ve stavu ve kterém se do DB vložil … noescape filtr nepomáhá…

placeholder v db : {_messages.info.test}

vypsáno stylem:
**
<div class=„card mb-3“ n:foreach=„$tests as $test“>
<h4 class=„text-primary font-weight-bold“>{$test->placeholder|noescape}</h4>
</div>
**

výsledek:
{_messages.info.test}

nějaká rada jak to přeložit, obejít, ošálit, vykouzlit? :D díky moc.

Editoval Newer (12. 5. 2020 18:07)

MajklNajt
Člen | 502
+
+3
-

keby si si v db ukladal iba messages.info.test, potom by ti v šablóne malo fungovať

<div class="card mb-3" n:foreach="$tests as $test">
<h4 class="text-primary font-weight-bold">{_}{$test->placeholder}{/_}</h4>
</div>
Newer
Člen | 47
+
0
-

Super, funguje…

boží, dík za rychlou pomoc :-)

CZechBoY
Člen | 3608
+
-1
-

To neni moc pouzitelny ne? Moc jsem nepochopil co je otazkou a jaky je use case.
Pokud chces po uzivateli aby nekam psal nejaky pseudo string z prekladovy tabulky tak mi to prijde hrozne neintuitivni a deravy.

Newer
Člen | 47
+
0
-

pokud bude uživatel volit například sport a jiný uživatel z jiné země bude chtít vědět co je to za sport, tak mi to přijde nezbytné.

spíš by mě zajimala konstrukce výrazu níže, kde vznikl důvod k tomu delšímu zápisu a proč je právě takhle, případně nějaký zdroj kde si to nastuduji?
{_}{$test->placeholder}{/_}
vs
{_messages.info.test}

Editoval Newer (13. 5. 2020 10:35)

Keeehi
Člen | 36
+
0
-

Protože {$promenna} ti prostě vypíše obsah té proměnné. Pokud v té proměnné máš kus šablony, který chceš vlastně vykonat a ne jen vypsat musíš na to jinak. O něco podobného se snaží někdo třeba tady. A řešení je stejné jako dostal tam.

Pro překlad bych já určitě použil {_}{$promenna}{/_}, protože vytvářet si jen kvůli tomu dynamickou šablonu mi přijde jako zbytečnost. Osobně vůbec netuším, jak je to například s kešováním takových šablon.

Pokud bys chtěl ale opravdu generovat latte z uživatelského vstupu (i když mám pocit že je to jen výběr z nějakého seznamu který se na serveru validuje a v takovém případě to není úplně nutné) tak bych popřemýšlel nad novinkou v nette – sandboxem

MajklNajt
Člen | 502
+
0
-

@Newer ešte doplním, že zdroj toho riešenia je tu

Kamil Valenta
Člen | 822
+
+1
-

Newer napsal(a):

pokud bude uživatel volit například sport a jiný uživatel z jiné země bude chtít vědět co je to za sport, tak mi to přijde nezbytné.

Zrovna v tomto případě bych to řešil v DB číselníkem sportů (takže uživatel vlastně volí jen ID) a při zobrazení tomu JOINeš patřičný překlad z mutace…

Toanir
Člen | 57
+
0
-

Za předpokladu že $test->placeholder = 'messages.info.test';, myslím že by mělo fungovat i {_$test->placeholder} a pokud ne, mělo by zabrat alespoň použití filtru, tj {$test->placeholder|translate}.

Vychází to z rozložení, co vlastně chceš dělat a co skutečně děláš
 – řekl bych že chceš přeložit řetězec ‚messages.info.test‘. To typicky v kódu děláš pomocí $translator->translate('messages.info.test');
 – pak budeš chtít přeložit řetězec ze šablony, která má někde onen translator a ví, že makro {_}sexy.placeholder{/_}, resp {_sexy.placeholder} resp {_'sexy.placeholder'} si má vyložit jako $translator->translate(‚sexy.placeholder‘)

Když jsi měl v databázi {_messages.info.test}, to jsi předal translatoru a ten nevěděl, co si s tím počít (pravděpodobně budeš mít i v Tracy jakýsi panel pro translator, ve kterým by měla být zmínka o chybějícím překladu pro tenhle nerozpoznaný/nepochopený řetězec)

Editoval Toanir (13. 5. 2020 15:18)