symfony2:如何在console命令中使用翻译器

时间:2013-08-21 05:10:14

标签: php symfony

我正在尝试在symfony2(2.3.0)控制台命令中使用翻译器,但我无法使其工作。 这是我到目前为止所做的:

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
    }
}
messages.yml中存在

my.translation.key。知道如何让它发挥作用吗?

谢谢!

1 个答案:

答案 0 :(得分:8)

我刚刚在symfony2 console命令中发现,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! :)

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