Работа с локализацией в приложениях Symfony проста. Локаль хранится в атрибуте запроса под названием _locale и используется в остальной части приложения. Изменение локали (например, в многоязычных приложениях с помощью списка языков, выбираемых пользователями) требует изменения атрибута запроса в предыдущем слушателе событий (Event Listener).
Однако иногда необходимо динамически изменить локаль приложения только для того, чтобы выполнить некоторый код. Представьте себе приложение, которое отображает Twig-шаблоны писем на разных языках. Вам нужно изменить локаль только для того, чтобы отобразить эти шаблоны.
В Symfony 6.1 мы решаем подобные кейсы благодаря новому переключателю локали. Объект/сервис LocaleSwitcher позволяет вам сразу изменить локаль всех сервисов, которые помечены kernel.locale_aware.
use Symfony\Component\Translation\LocaleSwitcher;
class SomeClass
{
public function __construct(
private LocaleSwitcher $localeSwitcher,
) {}
public function someMethod()
{
// you can get the current application locale like this:
$currentLocale = $this->localeSwitcher->getLocale();
// you can set the locale for the entire application like this:
// (from now on, the application will use 'fr' (French) as the
// locale; including the default locale used to translate Twig templates)
$this->localeSwitcher->setLocale('fr');
// you can also run some code with a certain locale, without
// changing the locale for the rest of the application
$this->localeSwitcher->runWithLocale('es', function() {
// e.g. render here some Twig templates using 'es' (Spanish) locale
});
// ...
}
}
Обработка сигналов с помощью Symfony Command
15371
768
Symfony 6.2 - новые возможности
14470
753
Новое в Symfony 6.2: Компонент Clock
14663
733
Новое в Symfony 6.1: Более простое расширение и настройка бандлов
15687
784
Новое в Symfony 6.1: компонент HtmlSanitizer
13159
657
Для Symfony 6.1 потребуется PHP версии 8.1 из-за предзагрузки классов
8650
432
Внедрение поддержки Docker в Symfony
14415
720
Приложение на Symfony и Twitter Bootsrap 4 [видео]
10549
527