Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
翻译symfony 2正在返回键,而不是翻译_Symfony_Twig_Translation - Fatal编程技术网

翻译symfony 2正在返回键,而不是翻译

翻译symfony 2正在返回键,而不是翻译,symfony,twig,translation,Symfony,Twig,Translation,我不明白为什么当我与Symfony交易时,它会返回给我钥匙,而不是交易信息。我使用的是symfony 2.7,这是我的配置: 我已在config.yml文件中启用转换器: translator: { fallback: ["%locale%"] } 这是我在控制器内的功能: /** * @Route("/consult", name="showConsult") * @Template("AppBundle:Admin:consult.html.twig") */ public

我不明白为什么当我与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中强制使用区域设置,它就会工作。你知道我怎样才能解决这个问题吗?我读过,但它们对我不起作用。我正在使用Windows 10 输出始终是关键。我得到的是“login.version”而不是“version-APP”
有人能帮我吗?提前感谢

您的yaml文件应该是

#messages.fr.yml
login:
    version: Version APP

我知道这已经有很长时间了,但我把它作为参考发布,因为我今天遇到了类似的问题

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

基本上,你必须:

1) 创建一个
侦听器

// 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) 在
src/AppBundle/Resources/config/config yml
上注册
Listener

services:
    app.locale_listener:
        class: AppBundle\EventListener\LocaleListener
        arguments: ['%kernel.default_locale%']
        tags:
            - { name: kernel.event_subscriber }

3) 在您的任何请求上同时添加一个
\u locale
参数,该区域设置将在用户的所有工作会话中保持不变。

文件位于何处?确保它与所需的结构相匹配;尝试删除yml的所有部分,并确保其中没有yml解析错误;还要尝试设置“translator:~”,这样它就可以使用默认值了。看起来很明显,但只是以防万一:您是否清理了缓存(
php应用程序/控制台缓存:clean--env=dev
)?什么文件?我已经编写了eh translations.yml文件的路径。我还尝试了mybundlefolder/Resources/translations。config.yml文件是app/Resources/config。我已尝试使用translator:~但不起作用。@AlainTiemblo我已多次清除缓存。我甚至尝试过直接删除文件夹中的内容,很抱歉我忘了对其进行注释。
{fallback:[%locale%]}
:如果您将
%locale%
替换为
fr
?顺便说一下,我无法在新安装中重现您的问题:,给我正确的
字符串(12)“版本应用程序”
实际上与login.Version或与您一样的子元素无关。实际上,您可以使用完整的字符串,如“登录版本”:“我的翻译”。这只是“更干净”的方式;)