РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
865 of 1361 menu

Класс LocaleSwitcher

Класс LocaleSwitcher из компонента symfony/translation позволяет временно изменить локаль приложения. Он принимает новую локаль и callback-функцию, выполняет её в контексте указанной локали, а после завершения автоматически возвращает прежнее значение локали. Это удобно, когда нужно перевести один фрагмент текста или выполнить группу операций на другом языке, не меняя глобальные настройки приложения.

Класс реализует паттерн "контекстный менеджер". Метод runWithLocale принимает локаль и callback, метод setLocale - только локаль, метод getLocale возвращает текущую локаль, а метод reset сбрасывает локаль к исходной.

Синтаксис

<?php use Symfony\Component\Translation\LocaleSwitcher; $switcher = new LocaleSwitcher($defaultLocale, $translator); $res = $switcher->runWithLocale($locale, $callback); $switcher->setLocale($locale); $locale = $switcher->getLocale(); $switcher->reset(); ?>

Пример

Давайте временно переключим локаль на 'fr' и выполним callback, который вернёт текущую локаль:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Translation\LocaleSwitcher; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(LocaleSwitcher $switcher): Response { $res = $switcher->runWithLocale('fr', function (): string { return 'locale is fr'; }); return new Response($res); } } ?>

Результат выполнения кода:

"locale is fr"

Пример

Давайте переведём строку с помощью транслятора внутри callback на локали 'de':

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Translation\LocaleSwitcher; use Symfony\Contracts\Translation\TranslatorInterface; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index( LocaleSwitcher $switcher, TranslatorInterface $translator ): Response { $res = $switcher->runWithLocale('de', function () use ($translator): string { return $translator->trans('hello'); }); return new Response($res); } } ?>

Результат выполнения кода:

"Hallo"

Пример

Давайте переключим локаль через setLocale и проверим текущее значение через getLocale:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Translation\LocaleSwitcher; class ArticleController extends AbstractController { #[Route('/', name: 'article_index')] public function index(LocaleSwitcher $switcher): Response { $switcher->setLocale('es'); $res = $switcher->getLocale(); return new Response($res); } } ?>

Результат выполнения кода:

"es"

Смотрите также

  • класс Translator,
    который выполняет перевод сообщений
  • метод runWithLocale,
    который временно переключает локаль для callback
  • метод setLocale,
    который устанавливает текущую локаль
  • метод reset,
    который сбрасывает локаль к исходной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить