我正在寻找一个有效的解决方案,在symfony的XLIFF i18n文件中使用换行符(<br />
)。
不幸的是,默认标记<x id='1' ctype='lb'/>
似乎被Twig和/或symfony的XLIFF实现剥离了。 XLIFF格式是symfony2的推荐格式,所以我想知道symfony的cookbook中没有关于换行的单行吗?
<!-- messages.fr.xliff -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>Je suis Joe Schmoe</source>
<target>I am<x id="1" ctype="lb"/>Joe Schmoe</target>
</trans-unit>
</body>
</file>
</xliff>
<x/>
<x/>
元素用于替换任何代码 原始文件。必需的id属性用于引用 骨架文件中替换的代码。可选的ctype
属性 允许您指定占位符的属性类型 表示;
Line 1<x id='1' ctype='lb'/>line 2
<x/>
元素已弃用 - 您现在可以在文档中找到此信息。
答案 0 :(得分:7)
您必须使用a CDATA section确保您的html标记不会被误解为xliff:
<!-- messages.fr.xliff -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>Je suis Joe Schmoe</source>
<target><![CDATA[I am<br />Joe Schmoe]]></target>
</trans-unit>
</body>
</file>
</xliff>
之后,在您的模板中,确保未转义html,请使用the raw tag:
{{'Je suis Joe Schmoe' | trans | raw }}
顺便说一下,这到底是怎么回事? <x id='1' ctype='lb'/>
答案 1 :(得分:5)
如果您只想使用BR标签
<br />
然后就这样使用:
{{ 'Je suis Joe Schmoe' | trans | nl2br }}
所以你可以不用html编写你的翻译。
<!-- messages.fr.xliff -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="file.ext">
<body>
<trans-unit id="1">
<source>Je suis Joe Schmoe</source>
<target>
I am
Joe Schmoe
</target>
</trans-unit>
</body>
</file>
</xliff>
答案 2 :(得分:1)
我不熟悉symfony中的XLIFF支持,一般只有XLIFF。但是,许多处理XLIFF的翻译工具都不能很好地处理CDATA中嵌入的HTML标记。 &lt; x&gt;也可能是&lt; x&gt;。标签被剥离,因为它不在&lt; source&gt;中内容。 (许多XLIFF工具强制执行内联标记的源/目标对齐。)
使用文字换行符可能有效,但有些工具要求你添加xml:space =“preserve”才能使用,例如:
<trans-unit id="1">
<source>Je suis Joe Schmoe</source>
<target xml:space="preserve">
I am
Joe Schmoe
</target>
</trans-unit>