Sunt nou în utilizarea Drupal și construiesc un modul personalizat pentru a afla cum funcționează totul.
Îmi construiesc modulul în modules/custom/my_module
. Am un fișier local olandez în modules/custom/my_module/translations/my_module-0.1.nl.po
.
Dacă o precizez așa în mine .info.yml
fișier, funcționează grozav:
nume: Modulul meu
descriere: Doar testare
versiunea: 0.1
pachet: Personalizat
tip: modul
cerinta_versiune_core: ^8.8 || ^9
„proiect de traducere a interfeței”: my_module
„Model de server de traducere de interfață: modules/custom/my_module/translations/%project-%version.%language.po
Dar, acum al meu .info.yml
fișierul ar forța utilizatorii să instaleze acest modul în modules/custom/my_module
. Nu vreau asta. Nu-mi pasă unde l-au pus. Ei pot introduce acest modul modules/contrib/my_module
sau site-uri/toate/modulele/modul_meu
pentru tot ce-mi pasă. Poate că cineva îl va include ca o dependență pachet și va ajunge în modules/custom/some_module/modules/my_module
. Nu ar trebui să conteze și nu vreau să codific calea modulului în mine .info.yml
.
Ce eu vrei este să am a mea .info.yml
specificați modelul serverului folosind o cale relativă la modul (față de locul unde este modulul meu .info.yml
fișierul trăiește) astfel:
„Model de server de traducere de interfață”: translations/%project-%version.%language.po
# sau poate ca: ./translations/%project-%version.%language.po
Dar Drupal nu-i place acest lucru și verificarea actualizărilor traducerilor va indica că fișierul nu a putut fi găsit.
Sunt conștient de traduceri://
și public://
stream wrapper-uri, dar din câte îmi pot da seama, fie este nevoie ca fișierul de traducere să fie găzduit în altă parte, copiat în site-uri/implicit/fișiere
folder (ceea ce probabil l-aș putea face în my_module_install()
dar este nepotrivit în timpul dezvoltării când adaug în mod constant șiruri) sau (din nou) codifică calea către modul.
Deocamdată am implementat hook_locale_translation_projects_alter()
cârlig în mine modulul_meu.modul
fișier pentru a seta o cale absolută ca aceasta:
function my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['interface translation server pattern'] =
__DIR__ . '/translations/%project-%version.%language.po';
}
Acest lucru funcționează, dar se simte ca o soluție neplăcută și nu cum ar trebui să funcționeze Drupal.
Care este metoda obișnuită de a face ca căile legate de modul să funcționeze pentru traduceri?
Editați | ×: După cum sugerează @leymannx, în loc să utilizați __DIR__
în cârligul meu, pot folosi:
function my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['interface translation server pattern'] =
drupal_get_path('modulul', 'modulul_meu') . '/translations/%project-%version.%language.po';
}
Se simte puțin mai bine, dar încă simt că acest lucru ar trebui să fie posibil fără a implementa un cârlig pentru asta.