Typo3 8.7 Locallang翻译中的多个参数



我最近发现可以将参数传递给流体中的翻译

<f:translate key="something.test" arguments="{0: 'something'}" />

或php

TYPO3CMSExtbaseUtilityLocalizationUtility::translate('something.test', $extKey, $arguments);

和后者,我意识到我不明白这是如何工作的,我找不到这些论点的文档。我被卡住了尝试通过多个参数。

带有参数的翻译看起来如下:

<trans-unit id="something.test">
    <source>this is the argument: %1$s</source>
</trans-unit>

我不明白的是,为什么占位符给出以下格式:%1 $ s?数字" 1"是否必须使用参数的索引做任何事情?如果是,如果我通过键0传递参数,为什么它以1开头?

我知道可以通过数组传递多个参数,但是我不知道如何将正确的占位符放在相应的位置。

我想做的是以下内容:

Controller:
$arguments = array('something1', 'something2', 'something3');
TYPO3CMSExtbaseUtilityLocalizationUtility::translate('something.test', $extKey, $arguments);
locallang.xlf:
<trans-unit id="something.test">
    <source>Test: [placeholder for something1]  [placeholder for something2] [placeholder for something3]</source>
</trans-unit>

有人可以向我解释这是如何工作的吗?事先感谢: - )

您在格式字符串(%1$s)中看到的是所谓的参数交换(请参阅示例1-4,请参阅详细理解)。

如果您的占位符的顺序与参数的顺序不同,则使用它。一个例子:

您有字符串

$str = "%s had a %s %s";

和数组

$args = [
  'Mary',
  'little',
  'lamb',
];

您的格式结果将是"玛丽有一点羔羊"。但是,如果论点按不同的顺序进行,会发生什么:

$args = [
  'lamb',
  'Mary',
  'little',
];

然后,您会得到"羔羊有玛丽的小"。通过使用参数交换(我知道混淆的名称),您可以告诉格式化器确切地寻找给定的参数。这些占位符的位置不是索引的配置,因此它们从1开始,而不是从0。

开始。

因此,要获得上述,无序的参数的正确输出,您将需要格式字符串为:

$str = "%2$s had a %3$s %1$s";

请注意,如果您可以保证数组中的参数顺序总是相同的,则参数交换是有意义的。另外,如果您无法控制论点的顺序(但可以保证它是相同的),那么您很可能也需要使用它。

正如伯恩德·威尔克πφ指出的那样,在处理本地化时,参数交换非常有用,例如在您的情况下。

不同的语言具有不同的语言类型,即主题,动词和对象都放在句子中,甚至是写日期的写作方式。

标准英语日期格式为month-day-year。在德国,它的格式为day.month.year,日语格式为year-month-date。现在,当您从任何地方获取参数数组,包含年度,月和日的值,以此顺序

$arguments = [
  "2019",
  "03",
  "20",
];

您不会使用参数交换以正确顺序放置元素。

在英语中,您的格式字符串将为%2$s-%3$s-%1$s,对于德语%3$.%2$.%1$,对于日语%1$s-%2$s-%3$s甚至%s-%s-%s(恰恰是,这些论点已经处于正确的顺序,但是要避免混淆并保持一致,您应该使用该位置与其他语言一样格式化)。

当您可以控制参数顺序时,通常更容易使用非定位格式,但是如上所述,这对于本地化而言并不能很好地工作。

相关内容

  • 没有找到相关文章

最新更新