我无法弄清楚为什么当我与Symfony进行交互时,它会返回密钥,而不是传达的信息。我正在使用symfony 2.7,这是我的配置: 我在config.yml文件中启用了翻译器:
translator: { fallback: ["%locale%"] }
这是我在控制器中的功能:
/**
* @Route("/consult", name="showConsult")
* @Template("AppBundle:Admin:consult.html.twig")
*/
public function showConsult(Request $request)
{
$request->setLocale('fr');
var_dump($this->get('translator')->trans("login.version"));
return array();
}
这是我在app / Resources / translations
中的翻译文件#messages.fr.yml
login.version: Version APP
我也尝试过枝条功能:
{{"login.version"|trans}}
{%trans%}'login.version'{%endtrans%}
编辑:我也清楚了 EDIT2:好的,我发现$ request-> setLocale()不起作用。如果我强制config.yml中的语言环境,它的工作原理。你知道我怎么解决这个问题吗?我看过this,但它们对我不起作用。我正在使用Windows 10 输出始终是关键。我得到" login.version"而不是"版本APP" 有谁能够帮我?提前致谢
答案 0 :(得分:0)
您的yaml文件应该像......
#messages.fr.yml
login:
version: Version APP
答案 1 :(得分:0)
我知道它已经很长时间了,但是我发布它作为参考,因为我今天遇到了类似的问题。
我必须实现一个Listener来设置语言环境值,如http://symfony.com/doc/current/session/locale_sticky_session.html
中所述基本上,你必须:
1)创建Listener
:
// src/AppBundle/EventListener/LocaleListener.php
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LocaleListener implements EventSubscriberInterface
{
private $defaultLocale;
public function __construct($defaultLocale = 'en')
{
$this->defaultLocale = $defaultLocale;
}
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}
// try to see if the locale has been set as a _locale routing parameter
if ($locale = $request->attributes->get('_locale')) {
$request->getSession()->set('_locale', $locale);
} else {
// if no explicit locale has been set on this request, use one from the session
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}
}
public static function getSubscribedEvents()
{
return array(
// must be registered after the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 15)),
);
}
}
2)在Listener
上注册src/AppBundle/Resources/config/config-yml
:
services:
app.locale_listener:
class: AppBundle\EventListener\LocaleListener
arguments: ['%kernel.default_locale%']
tags:
- { name: kernel.event_subscriber }
3)在您的任何请求中简单地添加_locale
参数,并且该区域设置对于所有用户的工作会话都是粘性的。