有没有办法在没有键的情况下将 Symfony 变量传递给翻译
Is there way to pass Symfony variables to translation without keys
我们现在在 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 也没有帮助。
我自己解决了这是代码(以防万一有人需要):
基本上,它获取所有 %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);
}
我们现在在 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 也没有帮助。
我自己解决了这是代码(以防万一有人需要):
基本上,它获取所有 %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);
}