Php 有没有方法在不使用键的情况下将Symfony变量传递给translation

Php 有没有方法在不使用键的情况下将Symfony变量传递给translation,php,symfony,translation,Php,Symfony,Translation,我们现在在PHP中为我们的项目使用自定义翻译,我想将它们迁移到Symfony。一切看起来都很好,但我唯一关心的是变量占位符需要密钥才能成功绑定,我是否可以通过某种方式更改代码以按顺序接受转换变量(没有密钥) 让我举个例子: 我们现在的代码: $translator->translate('For the period %date%, %data%', [$dateInterval, $additionalData]); 但Symfony就是这么想的: return $this->s

我们现在在PHP中为我们的项目使用自定义翻译,我想将它们迁移到Symfony。一切看起来都很好,但我唯一关心的是变量占位符需要密钥才能成功绑定,我是否可以通过某种方式更改代码以按顺序接受转换变量(没有密钥)

让我举个例子:
我们现在的代码:

$translator->translate('For the period %date%, %data%', [$dateInterval, $additionalData]);
但Symfony就是这么想的:

return $this->symfonyTranslator->trans('For the period %date%, %data%', ['%date%' => $dateInterval, '%data%' => $additionalData]);
这就是我想要的:

return $this->symfonyTranslator->trans('For the period %date%, %data%', [$dateInterval, $additionalData]);

这有可能吗?我没有在文档中找到它,谷歌也没有帮助。

我自己解决了它。这是代码(以防任何人需要它):

基本上,它获取所有%variables%,并将它们设置为数组键,带有$parameters变量中相应的数组值

public function translate(string $gettextString, array $parameters = []): string
{
    $gettextString = $this->newlinesNormalizer->normalize($gettextString);

    preg_match_all('~\%(\S+)\%~m', $gettextString, $matches);

    $variables = $matches[array_key_last($matches)];

    $finalParameters = [];
    foreach ($variables as $index => $variable) {
        if (substr($variable, 0, 1) === '%' && substr($variable, -1) === '%') {
            continue;
        }

        $finalParameters['%' . $variable . '%'] = $parameters[$index];
    }

    return $this->symfonyTranslator->trans($gettextString, $finalParameters);
}

如果您设法找到了解决方案,请将其作为答案发布(您可以回答自己的问题)并接受它,不要将其编辑到问题中。这样,您的问题就可以按回答进行过滤。