locallang.xlf 中的标签格式(通过标签)
Labels formatting (via tags) in locallang.xlf
每当语言标签的一部分需要以某种方式突出显示时,这里的最佳做法是什么?
我通常试图通过将标签拆分成一个部分并包装到 Fluid 中的相应标签中来尽可能避免语言标签中的 html 标签。
在最坏的情况下,标签被包裹在 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 移到插件的 FlexForm RTE 字段或一些带有 RTE 字段的配置记录。但它看起来也很像 hack。
你一般是怎么解决这样的问题的?
对我来说,有一些可能的选择,具体取决于文本的种类。
1.) 尽量避免HTML
2.) 如果此 HTML 包含任何参数,请将 HTML 移出并将其用作 <f:translate />
ViewHelper 的参数。
3.) 有时很难使用参数,因为翻译只是不同,然后我对不同的语言使用不同的 partials/sections 并且不使用任何语言文件。
4.) 我使用 CDATA 方法。
对 Georg Ringer 的回答的补充(如果可能的话,第 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>
)用于最后替换的标签(和这可能因不同的设备而异)。这也很复杂,需要良好的配置并发明一些类似进一步标记的东西。
每当语言标签的一部分需要以某种方式突出显示时,这里的最佳做法是什么?
我通常试图通过将标签拆分成一个部分并包装到 Fluid 中的相应标签中来尽可能避免语言标签中的 html 标签。
在最坏的情况下,标签被包裹在 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 移到插件的 FlexForm RTE 字段或一些带有 RTE 字段的配置记录。但它看起来也很像 hack。
你一般是怎么解决这样的问题的?
对我来说,有一些可能的选择,具体取决于文本的种类。
1.) 尽量避免HTML
2.) 如果此 HTML 包含任何参数,请将 HTML 移出并将其用作 <f:translate />
ViewHelper 的参数。
3.) 有时很难使用参数,因为翻译只是不同,然后我对不同的语言使用不同的 partials/sections 并且不使用任何语言文件。
4.) 我使用 CDATA 方法。
对 Georg Ringer 的回答的补充(如果可能的话,第 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>
)用于最后替换的标签(和这可能因不同的设备而异)。这也很复杂,需要良好的配置并发明一些类似进一步标记的东西。