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。任何想法如何使其工作?
谢谢!
答
我刚刚发现,在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! :)
希望可以帮助任何人面临同样的问题。 :)
@Touki它只是输出翻译密钥。没有错误。 – ihsan
尝试在您的config.yml中添加'framework.translator:{fallback:“%locale%”}'和'framework.default_locale:“%locale%”'然后清除缓存 – Touki
@Touki谢谢,但我已经有两个条目在config.yml中。清除缓存没有任何区别。我在app/cache/dev/translations目录中看到,仅运行此控制台命令时,不会生成默认语言环境的目录。 – ihsan