Додавання перекладу до кастомного модуля в 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 }}

 

 

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.
Код мови коментаря.