Translator – jak naložit s HTML?
- Klobás
- Člen | 113
Jak řešíte překlad s HTML? Sic jsem našel topic (https://forum.nette.org/…tezcu-s-html), ale ten neřeší zclea to samé co já.
Mám například v Latte
<?php
<p>Odesláním fomuláře souhlasíte s <a class="text-gray-600 underline hover:text-black" href="/podminky">obchodními podmínkami</a></p>
?>
A oč jde? Vím, že mohu translatoru předat parametry a pak je nahradit, takže například odkaz můžu mít dynamický. Ale jak vytvořit tag odkazu a ideálně i s dostupnými třídami?
Jediné co mě napadlo mít něco jako , ale do toho HTML elementu už nenacpu nijak odkaz, kdybych jej potřeboval dynamicky.
<?php
$translator->translate('Souhlas s podmínkami %odkaz%', ['odkaz' => Html::el('a') ...)
?>
Existuje nějaké normální, snadné řešení?
- dakur
- Člen | 493
My to používáme podobně, akorát nad tím máme napsanou vlastní vrstvu, která umožňuje používat tagy a vylučuje XSS ze strany překladových stringů.
$translator->translateHtml('Souhlas s <odkaz>podmínkami</odkaz>', [
'odkaz' => Nette\Utils\Html::el('a', ['class' => 'text-gray-600 underline hover:text-black'])->href($link),
]);
Editoval dakur (31. 3. 2023 14:50)
- Klobás
- Člen | 113
dakur napsal(a):
My to používáme podobně, akorát nad tím máme napsanou vlastní vrstvu, která umožňuje používat tagy a vylučuje XSS ze strany překladových stringů.
$translator->translateHtml('Souhlas s <odkaz>podmínkami</odkaz>', [ 'odkaz' => Nette\Utils\Html::el('a', ['class' => 'text-gray-600 underline hover:text-black'])->href($link), ]);
Ahoj, díky za ukázku.
Jak na to koukám, tak to bude chtít nějaký šikovný preg_replace_callback ;) případně, kdybych chtěl ještě, aby si klient mohl měnit i odkaz sám (tj. odkaz i text odkazu) a HTML se musí vygenerovat translator, bude to chtít trošku zapojit mozkové závity a vymyslet nějaký markup ve smyslu (což je v podstatě vlastní markdown :D)
<?php
Souhlasíte s <odkaz>obchodními podmínkami(http://seznam.cz)</odkaz>
?>
Editoval Klobás (1. 4. 2023 21:09)
- dakur
- Člen | 493
Spíš bych využil těch XML tagů, např.:
Souhlasíte s <odkaz cil="http://seznam.cz">obchodními podmínkami</odkaz>
XML je standard a pokud už bude klient kódovat (tj. zapisovat do plain textu nějakými značkami další informace), tak má smysl využívat standardní syntaxe a ne vymýšlet nové.
- Kamil Valenta
- Člen | 822
Pokud je vůbec dobrý nápad nechat překladatele sahat na obsah hrefu.
Používáme
$translator->translate('Souhlasíte s %sobchodními podmínkami%s', '<a href="">', '</a>');
Vevnitř to přehrká vsprintf. Jo, parametry nejsou pojmenované, ale to zatím nikdy nevadilo (drtivá většina překladů vystačí bez).