如何在symfony2翻译中使用配置值?

时间:2013-07-19 09:17:12

标签: php symfony translation

是否可以在symfony 2的翻译文件中使用config.yml中的全局变量? 如果是,请提供一些示例或有用的链接吗?

2 个答案:

答案 0 :(得分:3)

要将(或所有)twig globals注入您的翻译,您需要覆盖翻译服务。如果您需要详细说明,请查看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
{

}

最后覆盖transtransChoice

/**
 * {@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)

答案 1 :(得分:1)

您可以按照以下两个简单步骤进行操作:

  1. 使用树枝配置在所有模板中注入Global variable

    # app/config/parameters.yml
    parameters:
        my_favorite_website: www.stackoverflow.com
    

    # app/config/config.yml
    twig:
        globals:
            my_favorite_website: "%my_favorite_website%"
    
  2. 使用Message Placeholders可以将文字放入翻译中:

    # messages.en.yml
    I.love.website: "I love %website%!!"
    
    # messages.fr.yml
    I.love.website: "J'adore %website%!!"
    
  3. 现在,您可以在模板中使用以下twig语法来获得预期结果:

    {{ 'I.love.website'|trans({'%website%': my_favorite_website}) }}