【问题标题】:Is there way to pass Symfony variables to translation without keys有没有办法在没有键的情况下将 Symfony 变量传递给翻译
【发布时间】:2021-04-23 02:36:47
【问题描述】:

我们现在在 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 也没有提供帮助。

【问题讨论】:

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

标签: php symfony translation


【解决方案1】:

我自己解决了这是代码(以防万一有人需要):

基本上,它获取所有 %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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2021-11-26
    • 2023-04-04
    • 2012-02-19
    相关资源
    最近更新 更多