换行符在symfony2 XLIFF中

时间:2014-01-29 16:42:31

标签: php xml symfony internationalization xliff

我正在寻找一个有效的解决方案,在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属性   允许您指定占位符的属性类型   表示;

来源:XLIFF 1.2 specification

Line 1<x id='1' ctype='lb'/>line 2

编辑2:

<x/>元素已弃用 - 您现在可以在文档中找到此信息。

3 个答案:

答案 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>