Метод runWithLocale
Метод runWithLocale класса LocaleSwitcher позволяет
выполнить переданную функцию в контексте заданной локали. Первым
параметром передаётся локаль (например, 'en' или 'ru'),
вторым - замыкание, которое нужно выполнить. После завершения
выполнения замыкания исходная локаль автоматически восстанавливается,
что делает метод удобным для временного переключения языка без
побочных эффектов.
Синтаксис
$res = $localeSwitcher->runWithLocale(string $locale, callable $callback);
Пример
Давайте выполним перевод в локали 'en', а затем вернёмся
к исходной локали:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Translation\LocaleSwitcher;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(LocaleSwitcher $localeSwitcher): Response
{
$localeSwitcher->setLocale('ru');
$res = $localeSwitcher->runWithLocale('en', function () use ($localeSwitcher) {
return $localeSwitcher->getLocale();
});
return new Response($res . ' / ' . $localeSwitcher->getLocale());
}
}
?>
Результат выполнения кода:
en / ru
Пример
Давайте переведём сообщение внутри замыкания и получим результат:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Translation\LocaleSwitcher;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/trans', name: 'article_trans')]
public function trans(LocaleSwitcher $localeSwitcher, TranslatorInterface $translator): Response
{
$res = $localeSwitcher->runWithLocale('en', function () use ($translator) {
return $translator->trans('hello');
});
return new Response($res);
}
}
?>
Результат выполнения кода:
"hello"
Смотрите также
-
класс
LocaleSwitcher,
который управляет текущей локалью приложения -
метод
setLocale,
который устанавливает текущую локаль -
метод
getLocale,
который возвращает текущую локаль -
метод
reset,
который сбрасывает локаль к значению по умолчанию