要将一个(或所有)twig 全局变量注入到您的翻译中,您需要覆盖翻译服务。如果您需要详细说明,请查看this answer。这是我所做的:
覆盖translator.class 参数(例如在您的parameters.yml 中):
translator.class: Acme\YourBundle\Translation\Translator
创建新的Translator 服务:
use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;
class Translator extends BaseTranslator
{
}
最后同时覆盖trans 和transChoice:
/**
* {@inheritdoc}
*/
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
{
return parent::trans(
$id,
array_merge($this->container->get('twig')->getGlobals(), $parameters),
$domain,
$locale
);
}
/**
* {@inheritdoc}
*/
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
{
return parent::transChoice(
$id,
$number,
array_merge($this->container->get('twig')->getGlobals(), $parameters),
$domain,
$locale
);
}
在这个例子中,我注入了 all 树枝全局变量。你只能像这样注入一个:
array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters)