2013-05-13 89 views
-4

我正在使用FOSUserBundle在Symfony2中编写应用程序。然而,他们的所有模板都在Twig中,但我更愿意使用php模板。在php中使用翻译不twig,symfony 2

使用翻译文件,他们用这样的:

{{ 'security.login.username'|trans }} 

相当于本节

security: 
    login: 
     username: "Username:" 
     password: "Password:" 
     remember_me: Remember me 
     submit: Login 

在翻译文件。我怎么会写在PHP中?

+3

你甚至在询问之前尝试搜索吗?文档中有一个部分叫做[“使用php模板进行翻译”](http://symfony.com/doc/current/book/translation.html#php-templates) – 2013-05-13 16:02:30

+0

我实际上已经试过了,但它只是打印出我放在括号内的内容。例如: $ this-> get('translator') - > trans('username') 给我:用户名。不是“用户名:” 另外,我试着把:security.login:用户名建议,但也没有工作。所以这就是为什么我问什么是正确的语法。 – 2013-05-13 17:21:02

+0

如果您发布的yaml正确地反映了您的翻译文件,那么您应该使用的密钥是:login.username。 – 2013-05-13 18:03:31

回答

4

您是否认识到FOSUserBundle中翻译文件的特殊名称?例如,它是`FOSUserBundle.en.yml'。文件名遵循message domains惯例。进一步看在包模板和你看到的,使用消息域他们:

{{ 'security.login.username'|trans({}, 'FOSUserBundle') }} 

所以,你必须在PHP中使用相同的邮件域与翻译服务:

$this->get('translator')->trans('security.login.username', array(), 'FOSUserBundle'); 

在PHP模板它看起来很相似。

<?php echo $view['translator']->trans('security.login.username', array(), 'FOSUserBundle') ?> 

默认邮件域是messages,如果你从如messages.en.yml文件翻译,可以中省略。但是每一个其他领域都必须给译者。顺便说一下,验证器的翻译必须在例如validators.en.yml文件中。

+0

谢谢,完美的工作。 – 2013-05-14 07:19:19

+0

依赖注入标记是Symfony 2.6的'@ translator.default','@ translator'标记现在引用LoggingTranslator。所以'$ this-> get('translator') - > trans(...'是'$ this-> get('translator.default') - > trans(...)by Symfony 2.6 – Lashae 2014-12-01 15:39:15