Jazykový překlad řetězců s HTML

Milo
Nette Core | 1283
+
0
-

Jak řešíte překlady vět, které obsahují HTML? Například mám v šabloně:

Pro přístup k aplikaci <b>{$title}</b> se prosím přihlaste.

Řeším to vlastním filtrem, který vrací Utils\Html a jakýmisi modifikátory asi takhle…

{='Pro přístup k aplikaci %b se prosím přihlaste.'|htmlTranslate: $title}

ale říkám si, jestli není něco šikovnějšího.

Pro šablony, kde je HTML spousta už mám samostatné jazykové mutace šablony, ale pro takhle kraťoučké věty se mi to nechce udržovat.

Polki
Člen | 553
+
0
-

Používám Kdyby/Translation a tam pak mám něco jako:

texts.neon:

...
foo:
    bar: 'Mezisoučet <span class="item-price" data-price="%price%">%price%<span>Kč</span></span>'
...

a pak:

default.latte

...
{_texts.foo.bar, ['price' => $subtotal]|noescape}
...
Felix
Nette Core | 1190
+
0
-

Milo napsal(a):

Zkousim v posledni aplikovat markdown do prekladu. Nemusis tam davat HTML, ale presto je potreba na to myslet.

Milo
Nette Core | 1283
+
0
-

Snoubí se tu tři věci. Překlad, zvýraznění části přeloženého textu a dosazení proměnné do textu. K vlastním placeholderům jsem došel po zkušenosti. Texty mi překládají externě a syntaxe je potřeba extra jednoduchá. Ikdyž mně je to jedno, pro překladatele je rozdíl mezi:

Pro přístup k aplikaci <b>%1</b> se prosím přihlaste.
Pro přístup k aplikaci **%1** se prosím přihlaste.
Pro přístup k aplikaci %b se prosím přihlaste.

Navíc jsem po delší době došel k tomu, že potřebuju jen 4 placeholdery:

  • %t – plain text
  • %b – tučně
  • %i – kurziva
  • %m – muted

V signatuře metody Nette\Localization\ITranslator::translate() dojde ke změně na (string $message, ...$args). Chvilku jsem zkoušel:

{_'Pro přístup k aplikaci %b se prosím přihlaste.', [html => true, $title]}

ale moc mi nesedí, že by tu expanzi modifikátorů měl dělat translátor. Nevím přesně proč. Tak jsem zkusil:

{='Pro přístup k aplikaci %b se prosím přihlaste.'|translate|hprint:$title}

Jenže tam se zase narazí, když se pro překlad používá pseudo text, aby překládané texty byly pohromadě pro všechny jazyky.

{_'oauth.welcome-message'}  {* <-- chybí tam hprint filtr, nebo ne? *}

Nic jiného mě zatím nenapadlo.