【问题标题】:How to generate symfony2 translations inside controller?如何在控制器内生成 symfony2 翻译?
【发布时间】:2015-11-05 09:08:01
【问题描述】:

Symfony2 项目。我正在使用 JMSTranslationsBundle。

这是控制器内部函数的片段:

if ($user->isAccountConfirmed()) {
            $this->toolbar->addInfo('user.account.confirmed');
        }

如何为 .xliff 文件中的“user.account.confirmed”生成翻译?我的意思是,我应该在这个函数中添加什么代码才能翻译它?

【问题讨论】:

    标签: symfony translation


    【解决方案1】:

    查看available extraction methods,它解释说没有针对您的案例的自动提取可用。

    您需要在模板或控制器中使用trans(或任何其他解释的方法)。如果没有此提示,提取器将无法找到您的消息。我个人在我的一个项目中使用了TranslationContainerInterface

    您只需在控制器中定义一个新方法,该方法返回“待翻译”字符串:

    <?php
    // ...
    use JMS\TranslationBundle\Translation\TranslationContainerInterface;
    use JMS\TranslationBundle\Model\Message;
    
    class AcmeController extends Controller implements TranslationContainerInterface
    {
        /**
         * {@inheritdoc}
         */
        static function getTranslationMessages()
        {
            return [
                Message::create('user.account.confirmed')
            ];
        }
    }
    

    另一种解决方案是直接使用translater service。然后,提取器应该再次看到对该服务的调用。例如:

    /** @var $translator \Symfony\Component\Translation\TranslatorInterface */
    $translator = $this->get('translator');
    
    if ($user->isAccountConfirmed()) {
        $this->toolbar->addInfo(
            $translator->trans('user.account.confirmed')
        );
    }
    

    【讨论】:

    • 感谢您的回答。那太棒了。但我想以另一种方式来做(也许不是那么好)。我的问题是如何在这一行中正确添加“trans”。我的意思是我不能这样使用它: $this->toolbar->addInfo('user.account.confirmed')->trans('user.account.confirmed'); :D 正确的方法是什么?
    • 我会检查的。谢谢。
    • 我是这样做的: if ($user->isAccountConfirmed()) { $this->toolbar ->addInfo($this->toolbar->trans('user.account.confirmed' ));你觉得@Yoshi 怎么样?
    • 我不确定,您似乎在工具栏服务 (?) 中添加了一个 trans-method。如果是这样的话,我认为它不是一个好的 api,因为翻译是翻译服务的职责,而不是你的工具栏。
    猜你喜欢
    • 2011-02-15
    • 2013-04-14
    • 1970-01-01
    • 2014-12-21
    • 2013-03-07
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多