Форматирование меток (с помощью тегов) в locallang.xlf
Когда часть языкового ярлыка должна быть как-то выделена, что считается здесь лучшей практикой?
Обычно я стараюсь по возможности избегать тегов html в языковых метках, разбивая метки на части и добавляя соответствующие теги в Fluid.
В худшем случае этикетка оборачивается CDATA
:
<trans-unit id="my.label">
<source><![CDATA[Here comes a <strong>bold text</strong> and then <em>italic</em> and now <span class="fancy">fancy styled</span> stop]]></source>
</trans-unit>
Но это смешивает контент и презентацию, что впоследствии может причинить боль, когда CSS подвергается рефакторингу и некоторые классы переименовываются.
Другое решение, которое мне приходит в голову, - это переместить все тексты, которые могут содержать html-теги, из XLF либо в поле RTF плагина FlexForm, либо в некоторую запись конфигурации с полями RTE. Но это также выглядит скорее как взломать.
Как вы обычно решаете такую проблему?
3 ответа
Для меня есть несколько возможных вариантов, в зависимости от типа текста.
1.) Избегайте HTML как можно больше
2.) Если этот HTML обернут вокруг каких-либо аргументов, переместите HTML-код и используйте его в качестве аргумента для <f:translate />
ViewHelper.
3.) Иногда трудно использовать аргументы, так как перевод просто отличается, и тогда я использую разные партиалы / разделы для разных языков и не использую какой-либо языковой файл.
4.) Я использую подход CDATA.
Дополнение к ответу Георга Рингера (пункт 1 которого, безусловно, является подходящим вариантом, если это вообще возможно):
5.) Используйте то, что предлагает XLIFF. В XLIFF 1.2 есть элементы для маркировки тегов внутри переводимого контента - если быть точным, в нем слишком много таких элементов. Одним из возможных представлений вашего примера будет
<trans-unit id="my.label">
<source>Here comes a <bpt id="1"><strong></bpt>bold text<ept id="1"></strong></ept> and then <bpt id="2"><em></bpt>italic<ept id="2"></em></ept> and now <bpt id="3"><span class="fancy"></bpt>fancy styled<ept id="3"><span></ept> stop</source>
</trans-unit>
Это выглядит грязно в коде, но имеет то преимущество, что редактор переводов с поддержкой XLIFF представит это вашим переводчикам так, чтобы им было легко работать, например:
Переводчик сможет перемещать эти теги, если необходимо изменить порядок текста на целевом языке, и он может полностью удалить эти фиолетовые теги, если они не имеют смысла на целевом языке: например, некоторые сложные китайские иероглифы выглядят ужасно жирным лицом. Они также не смогут удалять части тегов.
Одним из возможных решений может быть использование параметров в строках перевода. Эти параметры могут быть заполнены переведенными строками, которые обернуты в теги (с помощью TS или жидкости). Это может привести к очень сложной обработке перевода, поскольку строки разбиты на несколько строк (что может частично потерять контекст).
Другим решением может быть использование маркеров (например, ###B###
за <b>
а также ###_B###
за </b>
) для тегов, которые заменяются в конце (и которые могут отличаться для разных устройств). Это также сложно, требует хорошей конфигурации и придумывает что-то вроде дополнительной разметки.