是否可以在 symfony 2 的翻译文件中使用来自 config.yml 的全局变量?如果是,请您提供一些示例或有用的链接吗?
问问题
1793 次
2 回答
3
要将一个(或所有)twig 全局变量注入到您的翻译中,您需要覆盖翻译服务。如果您需要详细说明,请查看此答案。这是我所做的:
覆盖translator.class
参数(例如在你的parameters.yml
):
translator.class: Acme\YourBundle\Translation\Translator
创建新Translator
服务:
use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator;
class Translator extends BaseTranslator
{
}
最后同时覆盖trans
and 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
);
}
在此示例中,我将注入所有twig 全局变量。你只能像这样注入一个:
array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters)
于 2016-01-22T15:42:04.757 回答
1
您可以按照以下两个简单步骤进行操作:
使用 twig 配置在所有模板中注入一个全局变量:
# app/config/parameters.yml parameters: my_favorite_website: www.stackoverflow.com
和
# app/config/config.yml twig: globals: my_favorite_website: "%my_favorite_website%"
使用消息占位符可以在翻译中放置文本:
# messages.en.yml I.love.website: "I love %website%!!" # messages.fr.yml I.love.website: "J'adore %website%!!"
您现在可以在模板中使用以下 twig 语法来获得预期的结果:
{{ 'I.love.website'|trans({'%website%': my_favorite_website}) }}
于 2013-07-22T15:24:30.197 回答