Рейтинг:2

Как использовать путь относительно модуля к переводам в .info.yml

флаг id

Я новичок в использовании 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';
}

Это выглядит немного лучше, но я все еще чувствую, что это должно быть возможно без реализации хука для этого.

leymannx avatar
флаг ne
Попробуйте `drupal_get_path('module', 'MYMODULE') . '/translations/%language.po'`.
rickdenhaan avatar
флаг id
@leymannx, могу ли я сделать это в своем файле yaml? Или мне все равно нужно будет реализовать хук, чтобы использовать эту функцию?
leymannx avatar
флаг ne
Нет, с крючка. Я не думаю, что у вас может быть относительный путь модуля в информационном файле. Только родственник веб-корня.
rickdenhaan avatar
флаг id
@leymannx, который работает и чувствует себя лучше, чем использование `__DIR__`, но наверняка есть способ сделать это из файла yaml без реализации хука?
leymannx avatar
флаг ne
Я так не думаю. Что не так с крючком?
rickdenhaan avatar
флаг id
Крюк не должен быть необходим для чего-то такого тривиального.Он также не выполняется, когда модуль не установлен, поэтому Drupal не будет читать переведенное имя/описание модуля для списка модулей на странице расширения в пользовательском интерфейсе администратора, где я могу выбрать его и установить. (На самом деле я не проверял, но *предполагаю*, что он прочитает переведенное имя/описание из файла локали, указанного в .info.yml для этой страницы...)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.