翻译symfony 2返回的密钥不是翻译

时间:2015-11-08 17:45:42

标签: symfony twig translation

我无法弄清楚为什么当我与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" 有谁能够帮我?提前致谢

2 个答案:

答案 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参数,并且该区域设置对于所有用户的工作会话都是粘性的。