我们现在在 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]);
这有可能吗?我没有在文档中的任何地方找到它,Google 也没有提供帮助。
答案 0 :(得分:0)
我自己解决了这是代码(以防有人需要它):
基本上,它获取所有 %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);
}