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