首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >翻译symfony 2是返回关键,而不是翻译

翻译symfony 2是返回关键,而不是翻译
EN

Stack Overflow用户
提问于 2015-11-08 17:45:41
回答 2查看 1.3K关注 0票数 0

我不明白为什么当我使用Symfony时,它会返回密钥,而不是消息。我正在使用symfony 2.7,这是我的配置:我已经在我的config.yml文件中启用了翻译程序:

代码语言:javascript
复制
translator:      { fallback: ["%locale%"] }

这是我在控制器内的功能:

代码语言:javascript
复制
/**
 * @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();
}

这是应用程序/参考资料/翻译中的翻译文件

代码语言:javascript
复制
#messages.fr.yml
login.version: Version APP

我也尝试过使用树枝功能:

代码语言:javascript
复制
{{"login.version"|trans}}
{%trans%}'login.version'{%endtrans%}

编辑:,我还清除了chache,EDIT2: Ok,我发现$request->setLocale()不起作用。如果我在config.yml中强制区域设置,它就能工作。你知道我怎么能解决这个问题吗?我读过this,但他们没有为我工作。我正在使用Windows 10,输出始终是关键。我得到了"login.version“而不是”版本应用“,有人能帮我吗?提前感谢

EN

回答 2

Stack Overflow用户

发布于 2015-11-08 18:31:54

你的yaml文件应该是..。

代码语言:javascript
复制
#messages.fr.yml
login:
    version: Version APP
票数 0
EN

Stack Overflow用户

发布于 2016-08-29 08:47:00

我知道这已经很长时间了,但我把它作为一个参考,因为我有一个类似的问题,就在今天。

我必须实现一个侦听器来设置区域设置值,如session.html中所述

基本上,你必须:

1)创建一个Listener

代码语言:javascript
复制
// 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

代码语言:javascript
复制
services:
    app.locale_listener:
        class: AppBundle\EventListener\LocaleListener
        arguments: ['%kernel.default_locale%']
        tags:
            - { name: kernel.event_subscriber }

3)在任何请求中添加一个_locale参数,该区域设置对于所有用户的工作会话都是粘性的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33597003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档