0

私は Symfony2 を使用しており、サイトに多言語サポートを追加したいと考えていました。バンドル symfony/symfony があります。ただし、ロケール変数の設定についてドキュメントに記載されているとおりにすると。次のエラーが表示されます。私のクラスは次のようになります

<?php
// 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;
    }

    if ($locale = $request->attributes->get('_locale')) {
        $request->getSession()->set('_locale', $locale);
    } else {
        $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
    }
}

static public function getSubscribedEvents()
{
    return array(
        // must be registered before the default Locale listener
        KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
    );
}
}

そしてservice.yml

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

これを解決する方法について提案がある場合は、喜んで聞いてください。

編集: 問題を修正しました。しばらくして、クラスがベンダー フォルダーの別の場所に既に存在していることに気付きました。そのクラスは機能し、私のものと同じように見えました。だから私は私のコードを挿入し、それを解決しました。

4

2 に答える 2

0

多言語を使用するためにリスナーを使用する必要はありません。翻訳があり、ルーティングでロケール変数を設定できます。そして、デフォルト値を設定します。

私の app/config/routing.yml の例:

blog_bundle:
    resource: "@BlogBundle/Resources/config/routing.yml"
    prefix:   /{_locale}/blog
    requirements:
        _locale: fr|en|it|es
    defaults: { _locale: fr}
于 2016-07-01T11:44:55.177 に答える