Я новичок в использовании Drupal и создаю собственный модуль, чтобы узнать, как все это работает.
Я создаю свой модуль в модули/пользовательские/мой_модуль
. У меня есть файл голландской локали в модули/обычай/мой_модуль/переводы/мой_модуль-0.1.nl.po
.
Если я укажу это так в моем .info.yml
файл, он отлично работает:
Название: Мой модуль
Описание: Просто тестирование
версия: 0.1
пакет: Пользовательский
тип: модуль
core_version_requirement: ^8.8 || ^9
'проект перевода интерфейса': my_module
'шаблон сервера перевода интерфейса: modules/custom/my_module/translations/%project-%version.%language.po
Но теперь мой .info.yml
файл заставит пользователей установить этот модуль в модули/пользовательские/мой_модуль
. Я не хочу этого. Мне все равно, где они это поставят. Они могут поставить этот модуль в модули/вклад/мой_модуль
или же сайты/все/модули/мой_модуль
мне все равно. Может быть, кто-то включит его как упакованную зависимость, и он окажется в модули/пользовательские/некоторые_модули/модули/мой_модуль
. Это не имеет значения, и я не хочу жестко кодировать путь к модулю в моем .info.yml
.
Что я хочу должен иметь мой .info.yml
укажите шаблон сервера, используя относительный путь к модулю (относительно того, где находится мой модуль). .info.yml
файл живет) следующим образом:
'шаблон сервера перевода интерфейса': translations/%project-%version.%language.po
# или, возможно, как: ./translations/%project-%version.%language.po
Но Drupal это не нравится, и проверка обновлений переводов покажет, что файл не найден.
я знаю о переводы://
и общедоступный://
потоковые обертки, но, насколько я могу судить, это либо требует, чтобы файл перевода был размещен в другом месте, скопирован в сайты/по умолчанию/файлы
папка (что я, вероятно, мог бы сделать в мой_модуль_установить()
но это неудобно во время разработки, когда я постоянно добавляю строки) или (опять же) жестко прописываю путь к модулю.
На данный момент я реализовал hook_locale_translation_projects_alter()
крючок в моем мой_модуль.модуль
файл, чтобы установить абсолютный путь следующим образом:
функция my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['шаблон сервера перевода интерфейса'] =
__КАТАЛОГ__ . '/translations/%project-%version.%language.po';
}
Это работает, но похоже на неприятный обходной путь, а не на то, как должен работать Drupal.
Каков обычный способ заставить пути, относящиеся к модулю, работать для переводов?
Редактировать: как предложил @leymannx, вместо использования __КАТАЛОГ__
в моем крючке я могу использовать:
функция my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['шаблон сервера перевода интерфейса'] =
drupal_get_path('модуль', 'мой_модуль'). '/translations/%project-%version.%language.po';
}
Это выглядит немного лучше, но я все еще чувствую, что это должно быть возможно без реализации хука для этого.