Додавання перекладу до кастомного модуля в Drupal 8/9
Сьогодні буде невелика стаття на тему, як додати файл перекладу до користувацького модуля в Drupal 8/9, щоб текстові значення модуля можна було перекладати в системі перекладу інтерфейсу самого движка Drupal. Це може бути одним із способів спростити запуск багатомовного веб-сайту.
Спочатку вам потрібно додати в файл info.yml нашого модуля в кінці рядка
project: module_name
'interface translation project': module_name
'interface translation server pattern': modules/custom/module_name/translations/module_name-uk.po
де
- module_name - назва нашого модуля
- module_name-uk.po - файл перекладу для української мови, де айді мови в drupal - uk
Після цього в папці нашого модуля створіть папку з назвою "translations", а всередині цієї папки створіть файл з ім'ям "module_name-uk.po".
Мені було занадто лінь шукати всі деталі щодо файлу перекладу, головне - це те, що там повинна бути лінія з оригіналом і лінія з перекладом, які починаються з "msgid" і "msgstr". Коментарі можуть бути додані з символом хеша на початку. Наприклад:
# Text for button
msgid "Call You?"
msgstr "Зателефонувати тобі?"
Тепер нам потрібно якось позначити, що ці конкретні рядки потрібно перекладати в шаблоні чи файлі модуля.
Якщо текст для перекладу задано в шаблоні модуля Twig, то в потрібному місці ми додаємо:
{{ 'Call You?'|t }}
Якщо ми встановлюємо значення тексту у файлі модуля чи PHP-файлі src, то запис буде виглядати приблизно так:
$button[] = [
'name' => $this->t('Call You?'),
]
Після цього ми очищаємо кеш і переходимо на сторінку admin/reports/translations, де клікаємо по посиланню для ручної перевірки перекладів. Після перевірки система повинна "побачити", що є новий переклад для нашого модуля, і нижче з'являться кнопки для оновлення перекладів. Після оновлення ми переходимо до перекладу на сторінці адміністрування admin/config/regional/translate та за допомогою фільтрів намагаємося знайти наші рядки для перекладу на потрібні мови. Тепер мову перекладу для цього доданого рядка можна редагувати з панелі адміністрування.
upd. Додаткова інформація: для роботи з мовами краще перемістити всі виконувані коди з файлу .module в файл src-plugin-block .php, оскільки в першому випадку дані кешуються і можуть відображатися некоректні результати.
upd2. Також, щоб відображати поточну мову інтерфейсу в модулі можна використати такий код
$langcode = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
для роботи цього коду потрібно додати цей рядок в верхній частині нашого php файлу
use Drupal\Core\Language\LanguageInterface;
upd3. Ця стаття писалась ще в ті давні часи, коли Drupal 8 тільки починав розповсюджуватись та не було так багато інформації, як зараз, в 2024 році. Тож зараз можливо набагато спростити собі життя, та для того, щоб де завгодно в шаблоні був текст, котрий можливо було перекласти за допомогою адмінки, потрібно лише вивести його таким чином
{{ 'Your text' | t }}