Класс Translator
Класс Translator отвечает за перевод текста
в приложении Symfony. Первым параметром конструктор
принимает локаль по умолчанию, вторым - загрузчик
переводов, третьим - кэш. Метод trans переводит
сообщение, метод getLocale возвращает текущую
локаль, а метод setLocale устанавливает её.
Синтаксис
use Symfony\Component\Translation\Translator;
$translator = new Translator(locale);
$translator->trans(id, parameters, domain, locale);
$translator->getLocale();
$translator->setLocale(locale);
Пример
Давайте создадим переводчик и переведём сообщение с английского на русский:
<?php
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\ArrayLoader;
$translator = new Translator('en');
$translator->addLoader('array', new ArrayLoader());
$translator->addResource('array', [
'hello' => 'привет',
], 'ru');
$translator->setLocale('ru');
echo $translator->trans('hello');
?>
Результат выполнения кода:
"привет"
Пример
Давайте переведём сообщение с подстановкой параметра
name:
<?php
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\ArrayLoader;
$translator = new Translator('en');
$translator->addLoader('array', new ArrayLoader());
$translator->addResource('array', [
'hello' => 'привет, %name%',
], 'ru');
$translator->setLocale('ru');
echo $translator->trans('hello', ['%name%' => 'user']);
?>
Результат выполнения кода:
"привет, user"
Пример
Давайте получим и изменим текущую локаль:
<?php
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\ArrayLoader;
$translator = new Translator('en');
$translator->addLoader('array', new ArrayLoader());
$translator->addResource('array', [
'hello' => 'привет',
], 'ru');
echo $translator->getLocale();
$translator->setLocale('ru');
echo "\n";
echo $translator->getLocale();
?>
Результат выполнения кода:
"en"
"ru"
Пример
Давайте используем класс Translator внутри
контроллера Symfony:
<?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');
return new Response($translator->trans('hello'));
}
}
?>
Результат выполнения кода для локали ru:
привет
Смотрите также
-
метод
trans,
который переводит сообщение -
метод
getLocale,
который возвращает текущую локаль -
метод
setLocale,
который устанавливает текущую локаль -
метод
setFallbackLocales,
который задаёт резервные локали