symfony_translation-1.0.0-alpha1/src/Controller/TranslationsController.php

src/Controller/TranslationsController.php
<?php

namespace Drupal\symfony_translation\Controller;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\symfony_translation\Translator\Translator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

/**
 * Serves translations for a certain domain and locale.
 */
class TranslationsController implements ContainerInjectionInterface {

  protected Translator $translator;
  protected string $lastModified;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    $instance = new static();
    $instance->translator = $container->get('symfony_translation.symfony_translator');
    $instance->lastModified = $container->getParameter('symfony_translation.last_modified');

    return $instance;
  }

  /**
   * Serves translations for a certain domain and locale.
   */
  public function __invoke(Request $request, string $domain, ?string $locale = NULL): JsonResponse {
    $response = new JsonResponse();
    $response->setPublic();
    $response->setLastModified(\DateTimeImmutable::createFromFormat('U', $this->lastModified));

    if ($response->isNotModified($request)) {
      return new JsonResponse(NULL, Response::HTTP_NOT_MODIFIED);
    }

    try {
      $catalogue = $this->translator->getCatalogue($locale);
    }
    catch (\InvalidArgumentException $e) {
      throw new BadRequestHttpException($e->getMessage(), $e);
    }

    while (!in_array($domain, $catalogue->getDomains()) && $fallback = $catalogue->getFallbackCatalogue()) {
      $catalogue = $fallback;
    }

    if (!in_array($domain, $catalogue->getDomains())) {
      throw new BadRequestHttpException(sprintf('Invalid "%s" domain.', $domain));
    }

    return $response->setData($catalogue->all($domain));
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc