Jazykový překlad řetězců s HTML
- Milo
- Nette Core | 1283
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.
- Milo
- Nette Core | 1283
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.