Метод addLoader
Метод addLoader класса Translator
регистрирует новый загрузчик переводов. Первым
параметром передаётся объект загрузчика, который
реализует интерфейс LoaderInterface.
Вторым необязательным параметром можно передать
формат перевода. После регистрации Symfony
использует этот загрузчик при загрузке каталогов
переводов.
Синтаксис
public function addLoader(LoaderInterface $loader, string $format = null): void
Пример
Давайте создадим простой загрузчик переводов и зарегистрируем его в трансляторе:
<?php
namespace AppService;
use SymfonyComponentTranslationLoaderLoaderInterface;
use SymfonyComponentTranslationMessageCatalogue;
class ArrayLoader implements LoaderInterface
{
public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue
{
$messages = [
'hello' => 'привет',
'user' => 'пользователь',
];
$catalogue = new MessageCatalogue($locale);
$catalogue->add($messages, $domain);
return $catalogue;
}
}
?>
Теперь зарегистрируем этот загрузчик через метод
addLoader:
<?php
namespace AppController;
use AppServiceArrayLoader;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyContractsTranslationTranslatorInterface;
class TranslationController extends AbstractController
{
#[Route('/translate', name: 'translate_index')]
public function index(TranslatorInterface $translator): Response
{
$loader = new ArrayLoader();
$translator->addLoader($loader, 'array');
return new Response('loader added');
}
}
?>
Результат выполнения кода:
"loader added"
Пример
Давайте загрузим перевод с помощью
зарегистрированного загрузчика и проверим
работу метода trans:
<?php
namespace AppController;
use AppServiceArrayLoader;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyContractsTranslationTranslatorInterface;
class TranslationController extends AbstractController
{
#[Route('/translate/user', name: 'translate_user')]
public function user(TranslatorInterface $translator): Response
{
$loader = new ArrayLoader();
$translator->addLoader($loader, 'array');
$translator->addResource('array', 'dummy', 'ru', 'messages');
$translator->setLocale('ru');
$res = $translator->trans('hello');
return new Response($res);
}
}
?>
Результат выполнения кода для локали 'ru':
"привет"
Смотрите также
-
класс
Translator,
который управляет переводами в приложении -
метод
trans,
который возвращает перевод по ключу -
метод
setLocale,
который задаёт текущую локаль -
метод
getCatalogue,
который возвращает каталог переводов