【问题标题】:How to use config value in symfony2 translation?如何在 symfony2 翻译中使用配置值?
【发布时间】:2013-07-18 12:29:16
【问题描述】:

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

【问题讨论】:

  • 你到底是什么意思?
  • 我想在更多翻译文件中使用一些文本(例如:www.stackoverflow.com)。我不想每次都从 twig 或 php 在翻译中传递这个值。只是想以某种方式进行翻译。
  • stackoverflow.com/a/15566695/1847340 查看此解决方案。为我工作:)

标签: php symfony translation


【解决方案1】:

要将一个(或所有)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
{

}

最后同时覆盖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
    );
}

在这个例子中,我注入了 all 树枝全局变量。你只能像这样注入一个:

array_merge(['%your_global%' => $this->container->get('twig')->getGlobals()['your_global']], $parameters)

【讨论】:

  • 在 symfony 4.2 中似乎更喜欢使用$this->container->get('twig')->mergeGlobals($parameters)
【解决方案2】:

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

  1. 使用 twig 配置在所有模板中注入 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%!!"
    

您现在可以在模板中使用以下 twig 语法来获得预期的结果:

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

【讨论】:

  • 谢谢,但我想避免在 twig 中执行此步骤。在此示例中,我想直接在翻译中使用 my_favorite_website 并在 twig 中调用它而不传递任何值:{{ 'I.love.website'|trans() }}
  • Mmmmh 恐怕没有简单的解决方案可以做到这一点。翻译服务要求您在调用时将array() 中的占位符作为第二个参数传递,因此它更像是翻译服务的“限制”而不是树枝。如果占位符始终相同,您可能会编写一个树枝扩展,但这将是一个肮脏的把戏......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多