MVC фреймворк Symfony має потужний вбудований механізм перекладів, який можна легко інтегрувати в будь-який міні-сервіс або велику систему. У цьому блозі ми розглянемо, як додати підтримку української мови до міні-додатку на Symfony 6.4, де за замовчуванням використовується англійська.
🔧 Крок 1: Налаштування системи перекладів
У файлі
config/packages/translation.yaml
вказуємо англійську як мову за замовчуванням і вказуємо шлях до файлів перекладів:
# config/packages/translation.yaml framework: default_locale: en translator: default_path: '%kernel.project_dir%/translations'
📁 Створюємо папку
translations/
, якщо вона ще не існує.
📂 Крок 2: Файли перекладів
У папці
translations/
створюємо два файли:
- messages.en.yaml
"tr_your_ip_address_is": "Your IP Address is" "tr_country": "Country" "tr_city": "City" "tr_isp": "ISP" "tr_browser": "Browser"
- messages.uk.yaml
"tr_your_ip_address_is": "Ваша IP адреса" "tr_country": "Країна" "tr_city": "Місто" "tr_isp": "Провайдер" "tr_browser": "Браузер"
🧠 Крок 3: Використання перекладів у Twig шаблонах
Ось приклад шаблону
index.html.twig
, де ми використовуємо фільтр
trans
:
{% extends 'base.html.twig' %}
{% block title %}{{ 'tr_your_ip_address_is' |trans }}: {{ ip_address }}{% endblock %}
{% block body %}
<div class="ip-address-wrapper"><h1>{{ 'tr_your_ip_address_is' |trans }}: {{ ip_address }}</h1></div>
<ul class="ip-info">
<li>{{ 'tr_country' |trans }}: {{ country }}</li>
<li>{{ 'tr_city' |trans }}: {{ city }}</li>
<li>{{ 'tr_isp' |trans }}: {{ isp }}</li>
<li>{{ 'tr_browser' |trans }}: {{ user_agent }}</li>
</ul>
{% endblock %}
🧬 Крок 4: Додавання логіки перемикання мови
Створюємо
LocaleSubscriber
, який буде змінювати мову в залежності від параметру
?lang=uk
:
// src/EventSubscriber/LocaleSubscriber.php namespace App\EventSubscriber; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; class LocaleSubscriber implements EventSubscriberInterface { private string $defaultLocale; public function __construct(string $defaultLocale = 'en') { $this->defaultLocale = $defaultLocale; } public function onKernelRequest(RequestEvent $event): void { $request = $event->getRequest(); $locale = $request->query->get('lang', $this->defaultLocale); $request->setLocale($locale); } public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => [['onKernelRequest', 20]], ]; } }
🛠 Крок 5: Реєстрація сервісу
У
config/services.yaml
переконаймося, що
App\
автозавантажується:
services: App\: resource: '../src/' exclude: - '../src/DependencyInjection/' - '../src/Entity/' - '../src/Kernel.php'
Symfony автоматично знайде та зареєструє
LocaleSubscriber
як підписника подій.
📱 Крок 6: Як це працює
Коли ви переходите на сторінку:
https://example.com/?lang=uk
Symfony автоматично переключає локаль на
uk
і використовує
messages.uk.yaml
для перекладу всіх ключів.
✅ Підсумок
Ось що потрібно, щоб додати мультимовність у Symfony 6.4:
- Увімкнути переклади в
translation.yaml
- Створити файли перекладів
messages.en.yaml
і
messages.uk.yaml
- Використовувати
|trans
у Twig
- Написати
LocaleSubscriber
, який читає
?lang=uk
- Додати підписника до сервісів
📣 Готово! Тепер ваш Symfony-застосунок підтримує багатомовність та зручно перемикає мову за параметром у URL. Якщо цікаво — можу показати, як зробити перемикач мов у навігації або підтримку cookie/сесії для збереження мови.
Хочеш продовження? Пиши в коментарях або надсилай запит на наступну тему 😉