当我调用函数$translator->trans($key)时,doc声明第一个参数是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>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>KUNGFU.CODER</source> // id
<target>The code fu is strong inside this one</target>
</trans-unit>
</body>
</file>
</xliff>当然,我可以在任何地方使用第二种选择,但这似乎是错误的。我在这里错过了什么?
发布于 2018-02-25 00:59:55
与选项2一起使用的公平警告可能会使使用翻译编辑器变得棘手。因为当您去翻译它时,源将显示id,而不是要翻译的单词。
我使用的另一种方法是选项1,但不是将id放在id字段中,而是将其作为一个resname="“。Symfony将使用这个重新命名,翻译文件会更有意义,因为大多数程序都希望源代码是您想要的单词。
如果您已经有一个没有重新命名的大型xlif文件--我在第一项中添加了一个重新名称,然后在表视图中使用“Editor”将所有id复制到resname列,需要一分钟左右的时间。
我的两分钱。
哑光
发布于 2018-02-24 16:45:02
你的第二个选择是正确的。翻译键使用的是源,而不是id属性。
这个id是XLIFF规范所要求的:
所需的id属性用于唯一标识“所有”中的“所有”和“同一”中的元素。..。id属性在许多元素中用作对给定元素的原始对应代码数据或格式的引用。id元素的值由创建XLIFF文档的工具确定。
当使用另一种格式(如YAML )时,您将没有这个属性,因此,如果Symfony将其用作翻译键,就没有什么意义了。
编辑:附带注意,如果使用Symfony命令将翻译转储为xliff文件,它将使用源字符串的MD5-散列而不是翻译键填充id-attribute。
发布于 2018-06-23 11:11:23
@progonkpa不幸的是,您的例子是错误的。如果您想要在翻译文件中有更多的翻译单位,那么即使您不使用id,也必须编写一个id。如果您让id属性为空,并且您有多个跨单元,即99%,99%的情况下,您将得到一个错误。
原因在于"dbrumann“的答案。
这里还有另一个例子,在同一个翻译文件中有两个或两个以上的翻译:
<trans-unit id="home" resname="home">...</trans-uni>
<trans-unit id="startseite" resname="startseite">...</trans-unit>顺便说一句,我注意到有时如果翻译不起作用,只需清除缓存,然后再试一次.
php bin/console cache:clearhttps://stackoverflow.com/questions/48964727
复制相似问题