Новое в Symfony 6.4: Улучшения локали
Формирование электронных писем в пользовательской локали
- Pull Request: [Mime] Add
TemplatedEmail::locale()
to set the locale for the email rendering #51690 Alexander Schranz
При создании писем с помощью класса TemplatedEmail
можно настроить такие параметры, как тема, шаблоны, используемые для генерации текстового и/или HTML-содержимого, переменные, передаваемые в эти шаблоны, и т.д.
В Symfony 6.4 мы добавили новый метод locale()
, с помощью которого можно также настроить локаль, используемую в контенте электронного письма. Это часто требуется при создании писем на разных языках, предпочитаемых вашими клиентами:
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
$email = (new TemplatedEmail())
// ...
->locale($customer->getLocale())
;
Передача текущей локали в runWithLocale()
- Pull Request: [Translation] Give current locale to
LocaleSwitcher::runWithLocale()
's callback #51684 Alexander Schranz
Переключатель локалей появился в 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>