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

Saf*_*fas 4 translation symfony

Symfony2项目。我正在使用JMSTranslationsBundle。

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

if ($user->isAccountConfirmed()) {
            $this->toolbar->addInfo('user.account.confirmed');
        }
Run Code Online (Sandbox Code Playgroud)

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

Yos*_*shi 6

查看可用的提取方法,它说明您的案件没有自动提取。

您将需要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')
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是直接使用翻译器服务。然后,对该服务的调用应该再次对提取器可见。例如:

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

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