如何在控制器内生成symfony2翻译?

时间:2015-11-05 09:08:01

标签: symfony translation

Symfony2项目。我使用的是JMSTranslationsBundle。

以下是来自控制器内部功能的片段:

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

如何为' user.account.confirmed'生成翻译?在.xliff文件中?我的意思是,我应该为此函数添加哪些代码才能翻译它?

1 个答案:

答案 0 :(得分:4)

查看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。然后,提取器应再次看到对此服务的调用。 E.g:

/** @var $translator \Symfony\Component\Translation\TranslatorInterface */
$translator = $this->get('translator');

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