Php Symfony 4翻译组件按id翻译不工作

Php Symfony 4翻译组件按id翻译不工作,php,symfony,internationalization,translation,symfony4,Php,Symfony,Internationalization,Translation,Symfony4,当我调用函数$translator->trans($key)时,文档声明第一个参数是id。在我看来,id应该与.xlf文件中的id属性相关。实际上,它与.xlf文件的源元素有关 控制器内的方法调用: $translator->trans('KUNGFU.CODER') messages.en.xlf(en)不适用于上述方法调用: <?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xl

当我调用函数
$translator->trans($key)
时,文档声明第一个参数是id。在我看来,id应该与.xlf文件中的id属性相关。实际上,它与.xlf文件的源元素有关

控制器内的方法调用:

$translator->trans('KUNGFU.CODER')
messages.en.xlf(en)不适用于上述方法调用:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="nl" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="KUNGFU.CODER">
                <source>De code fu is sterk bij deze</source> // dutch source message
                <target>The code fu is strong inside this one</target>
            </trans-unit>
        </body>
    </file>
</xliff>
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="nl" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="KUNGFU.CODER">
                <source>KUNGFU.CODER</source> // id
                <target>The code fu is strong inside this one</target>
            </trans-unit>
        </body>
    </file>
</xliff>

De code fu是sterk bij deze//荷兰源代码消息
符码在这个里面很强
messages.en.xlf(en),它与上面的方法调用一起工作:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="nl" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="KUNGFU.CODER">
                <source>De code fu is sterk bij deze</source> // dutch source message
                <target>The code fu is strong inside this one</target>
            </trans-unit>
        </body>
    </file>
</xliff>
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="nl" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="KUNGFU.CODER">
                <source>KUNGFU.CODER</source> // id
                <target>The code fu is strong inside this one</target>
            </trans-unit>
        </body>
    </file>
</xliff>

KUNGFU.CODER//id
符码在这个里面很强

我当然可以在任何地方使用第二个选项,但它似乎是错误的。我在这里遗漏了什么?

你的第二个选择是对的。转换键使用源属性,而不是id属性

XLIFF规范要求id:

required id属性用于唯一标识所有中的和同一个元素中的元素。 [...] id属性在许多元素中用作对给定元素的原始对应代码数据或格式的引用。id元素的值由创建XLIFF文档的工具确定

当使用另一种格式(如YAML)时,您将没有此属性,因此,如果Symfony将其用作翻译键,则没有多大意义


编辑:作为旁注,如果使用Symfony命令将翻译转储为xliff文件,它将使用源字符串的md5哈希而不是翻译键填充
id
-属性。

您的第二个选项是正确的。转换键使用源属性,而不是id属性

XLIFF规范要求id:

required id属性用于唯一标识所有中的和同一个元素中的元素。 [...] id属性在许多元素中用作对给定元素的原始对应代码数据或格式的引用。id元素的值由创建XLIFF文档的工具确定

当使用另一种格式(如YAML)时,您将没有此属性,因此,如果Symfony将其用作翻译键,则没有多大意义


编辑:作为旁注,如果使用Symfony命令将翻译转储为xliff文件,它将使用源字符串的md5哈希而不是翻译键填充
id
-属性。

使用选项2的公平警告可能会使使用翻译编辑器变得棘手。因为当你去翻译它时,源代码会显示id而不是要翻译的单词

我使用的另一种选择是选项1,但不是将id放在id字段中,而是将其作为resname=”“。Symfony将使用这个resname,而翻译文件将更有意义,因为大多数程序都希望源代码是您想要的单词

如果您已经有一个没有resname的大型xlif文件,我会在第一项中添加一个resname,然后在表视图中使用“Easy XML Editor”将所有id复制到resname列,这需要一分钟左右的时间

我的两分钱


马特

使用选项2会使翻译编辑器的使用变得棘手。因为当你去翻译它时,源代码会显示id而不是要翻译的单词

我使用的另一种选择是选项1,但不是将id放在id字段中,而是将其作为resname=”“。Symfony将使用这个resname,而翻译文件将更有意义,因为大多数程序都希望源代码是您想要的单词

如果您已经有一个没有resname的大型xlif文件,我会在第一项中添加一个resname,然后在表视图中使用“Easy XML Editor”将所有id复制到resname列,这需要一分钟左右的时间

我的两分钱

马特

@progonkpa 不幸的是,你的例子是错误的。 如果希望在翻译文件中包含更多的翻译单位,则即使不使用id,也不必编写id。如果您让id属性为空,并且您有多个trans单元,这是99,99%的情况,那么您将得到一个错误

原因在“dbrumann”的答案中

这里是另一个在同一翻译文件中有两个或更多翻译的示例:

<trans-unit id="home" resname="home">...</trans-uni>

<trans-unit id="startseite" resname="startseite">...</trans-unit>
@progonkpa 不幸的是,你的例子是错误的。 如果希望在翻译文件中包含更多的翻译单位,则即使不使用id,也不必编写id。如果您让id属性为空,并且您有多个trans单元,这是99,99%的情况,那么您将得到一个错误

原因在“dbrumann”的答案中

这里是另一个在同一翻译文件中有两个或更多翻译的示例:

<trans-unit id="home" resname="home">...</trans-uni>

<trans-unit id="startseite" resname="startseite">...</trans-unit>

我认为这是使用XLF和翻译键的正确方法。为了向其他读者澄清,例如,结果可能如下所示,Symfony将解析resname属性并返回其中的翻译值。我认为这是将XLF与翻译键一起使用的正确方法。为了向其他读者澄清,例如,结果可能如下所示,其中Symfony将解析resname属性并返回其中的翻译值。