symfony2:如何在控制台命令中使用翻译器

问题描述:

我试图在symfony2(2.3.0)控制台命令中使用翻译器,但是我无法使其工作。 以下是我迄今所做的:symfony2:如何在控制台命令中使用翻译器

use Symfony\Component\Translation\IdentityTranslator; 
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 

class SendMessageCommand extends ContainerAwareCommand 
{ 
    protected function configure() { 
     $this->setName('mycommand:sendmessage')->setDescription('send message.'); 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) { 
     $translator = $this->getContainer()->get('translator'); 

     echo $translator->trans('my.translation.key'); // not working 
    } 
} 

my.translation.key是存在于messages.yml。任何想法如何使其工作?

谢谢!

+0

@Touki它只是输出翻译密钥。没有错误。 – ihsan

+0

尝试在您的config.yml中添加'framework.translator:{fallback:“%locale%”}'和'framework.default_locale:“%locale%”'然后清除缓存 – Touki

+0

@Touki谢谢,但我已经有两个条目在config.yml中。清除缓存没有任何区别。我在app/cache/dev/translations目录中看到,仅运行此控制台命令时,不会生成默认语言环境的目录。 – ihsan

我刚刚发现,在symfony2控制台命令中,在config.yml中定义的默认语言环境从不使用,因此语言环境为NULL。所以翻译者将永远不会使用任何可用的翻译语言环境。这就是为什么翻译密钥完整地返回而不是翻译。

当我只运行试图转换某些内容的控制台命令时,我得到了这个提示,但未生成app/cache/dev/translations文件夹中的目录。

所以,这是我要怎么做才能使控制台命令作品的翻译(在我的情况,我将其设置为id_ID):

$translator = $this->getContainer()->get('translator'); 
$translator->setLocale("id_ID"); 

echo $translator->trans('my.translation.key'); // works fine! :) 

希望可以帮助任何人面临同样的问题。 :)