Translator – jak naložit s HTML?

Klobás
Člen | 113
+
0
-

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í?

mystik
Člen | 292
+
+2
-

Pouzivam to reseni s Html

Klobás
Člen | 113
+
0
-

mystik napsal(a):

Pouzivam to reseni s Html

Bezva, nemáš tam nějakou komplexnejší ukázku, pokud to není tajné?

dakur
Člen | 493
+
+4
-

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
+
0
-

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
+
0
-

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 | 762
+
0
-

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).