Форматирование меток (с помощью тегов) в 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">&lt;strong&gt;</bpt>bold text<ept id="1">&lt;/strong&gt;</ept> and then <bpt id="2">&lt;em&gt;</bpt>italic<ept id="2">&lt;/em&gt;</ept> and now <bpt id="3">&lt;span class=&quot;fancy&quot;&gt;</bpt>fancy styled<ept id="3">&lt;span&gt;</ept> stop</source>
</trans-unit>

Это выглядит грязно в коде, но имеет то преимущество, что редактор переводов с поддержкой XLIFF представит это вашим переводчикам так, чтобы им было легко работать, например:

Скриншот сегмента XLIFF,

Переводчик сможет перемещать эти теги, если необходимо изменить порядок текста на целевом языке, и он может полностью удалить эти фиолетовые теги, если они не имеют смысла на целевом языке: например, некоторые сложные китайские иероглифы выглядят ужасно жирным лицом. Они также не смогут удалять части тегов.

Одним из возможных решений может быть использование параметров в строках перевода. Эти параметры могут быть заполнены переведенными строками, которые обернуты в теги (с помощью TS или жидкости). Это может привести к очень сложной обработке перевода, поскольку строки разбиты на несколько строк (что может частично потерять контекст).

Другим решением может быть использование маркеров (например, ###B### за <b>а также ###_B### за </b>) для тегов, которые заменяются в конце (и которые могут отличаться для разных устройств). Это также сложно, требует хорошей конфигурации и придумывает что-то вроде дополнительной разметки.

Другие вопросы по тегам