You are here

TranslatorListener.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/symfony/http-kernel/EventListener/TranslatorListener.php

File

vendor/symfony/http-kernel/EventListener/TranslatorListener.php
View source
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace Symfony\Component\HttpKernel\EventListener;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Translation\TranslatorInterface;

/**
 * Synchronizes the locale between the request and the translator.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class TranslatorListener implements EventSubscriberInterface {
  private $translator;
  private $requestStack;
  public function __construct(TranslatorInterface $translator, RequestStack $requestStack) {
    $this->translator = $translator;
    $this->requestStack = $requestStack;
  }
  public function onKernelRequest(GetResponseEvent $event) {
    $this
      ->setLocale($event
      ->getRequest());
  }
  public function onKernelFinishRequest(FinishRequestEvent $event) {
    if (null === ($parentRequest = $this->requestStack
      ->getParentRequest())) {
      return;
    }
    $this
      ->setLocale($parentRequest);
  }
  public static function getSubscribedEvents() {
    return array(
      // must be registered after the Locale listener
      KernelEvents::REQUEST => array(
        array(
          'onKernelRequest',
          10,
        ),
      ),
      KernelEvents::FINISH_REQUEST => array(
        array(
          'onKernelFinishRequest',
          0,
        ),
      ),
    );
  }
  private function setLocale(Request $request) {
    try {
      $this->translator
        ->setLocale($request
        ->getLocale());
    } catch (\InvalidArgumentException $e) {
      $this->translator
        ->setLocale($request
        ->getDefaultLocale());
    }
  }

}

Classes

Namesort descending Description
TranslatorListener Synchronizes the locale between the request and the translator.