Kdyby Translation – překlad placeholderu z DB
- Newer
- Člen | 47
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)
- Newer
- Člen | 47
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
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
- Kamil Valenta
- Člen | 822
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
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)