Новое в Symfony 6.4: Улучшения локали

Источник: «New in Symfony 6.4: Locale Improvements»
В Symfony 6.4 реализованы некоторые улучшения, связанные с локалями, такие, как установка локали при отображении содержимого электронной почты и доступ к списку включённых локалей из шаблонов.

Формирование электронных писем в пользовательской локали

При создании писем с помощью класса TemplatedEmail можно настроить такие параметры, как тема, шаблоны, используемые для генерации текстового и/или HTML-содержимого, переменные, передаваемые в эти шаблоны, и т.д.

В Symfony 6.4 мы добавили новый метод locale(), с помощью которого можно также настроить локаль, используемую в контенте электронного письма. Это часто требуется при создании писем на разных языках, предпочитаемых вашими клиентами:

use Symfony\Bridge\Twig\Mime\TemplatedEmail;

$email = (new TemplatedEmail())
// ...
->locale($customer->getLocale())
;

Передача текущей локали в runWithLocale()

Переключатель локалей появился в Symfony 6.1 как способ единовременно изменить локаль, используемую во всех сервисах (помеченных меткой kernel.locale_aware) в вашем приложении. Он также включает в себя утилиту runWithLocale() для выполнения некоторого кода с заданной локалью без изменения локали приложения.

В Symfony 6.4 мы сделали небольшое усовершенствование, позволяющее передавать локаль в функцию обратного вызова, выполняющую код:

$notificationContent = $this->localeSwitcher->runWithLocale(
$contact->getLocale(),
// Аргумент $locale теперь передаётся Symfony автоматически
function (string $locale) use ($someEntity): string {
$title = $someEntity->getTitle($locale);

return $this->twig->render('template.html.twig', ['title' => $title]);
}
);

Получение разрешённых локалей в шаблонах

В Symfony 5.1 мы представили опцию конфигурации enabled_locales, чтобы вы могли настроить, какие локали доступны в вашем приложении. Это несколько повышает производительность, поскольку Symfony не генерирует файлы перевода для локалей, не поддерживаемых в приложении.

В Symfony 6.4 мы сделали это значение доступным во всех шаблонах Twig через глобальную переменную app. Это поможет вам, например, при создании выпадающего списка, позволяющего посетителям переключать язык приложения:

<ul class="locales">
{% for locale in app.enabledLocales %}
{% set is_active = app.request.locale == locale.code %}
<li class="{{ is_active ? 'active' }} translate="no">
<a lang="
{{ locale.code }}" hreflang="{{ locale.code }}"
href="
{{ path(app.current_route, app.current_route_parameters|merge({_locale: locale.code})) }}">
{{ locale.name|capitalize }}
</a>
</li>
{% endfor %}
</ul>

Дополнительные материалы

Предыдущая Статья

Как исправить ошибку 503 Service Temporarily Unavailable на Nginx

Следующая Статья

CSS медиа запрос prefers-reduced-transparency