如何在控制器内部生成symfony2翻译?
问题描述:
Symfony2项目。我正在使用JMSTranslationsBundle。如何在控制器内部生成symfony2翻译?
下面是从功能内部控制片段:
if ($user->isAccountConfirmed()) {
$this->toolbar->addInfo('user.account.confirmed');
}
如何生成翻译为.xliff文件 'user.account.confirmed'?我的意思是,我应该添加哪些代码以便能够翻译此功能?
答
看着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什么样的方式? – Safas
@Safas看看更新。 – Yoshi
我会检查它。谢谢。 – Safas