Puncte:2

Cum să utilizați o cale relativă la modul către traduceri în .info.yml

drapel id

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.

leymannx avatar
drapel ne
Încercați `drupal_get_path('module', 'MYMODULE') . '/translations/%language.po'`.
rickdenhaan avatar
drapel id
@leymannx pot face asta în fișierul meu yaml? Sau mai trebuie să implementez cârligul pentru a folosi acea funcție?
leymannx avatar
drapel ne
Nu, din cârlig. Nu cred că puteți avea o cale relativă a modulului în fișierul info. Numai relativă web-root.
rickdenhaan avatar
drapel id
@leymannx care funcționează și se simte mai bine decât folosind `__DIR__`, dar cu siguranță există o modalitate de a face acest lucru din fișierul yaml fără a implementa cârligul?
leymannx avatar
drapel ne
Eu nu cred acest lucru. Ce e în neregulă cu cârligul?
rickdenhaan avatar
drapel id
Cârligul nu ar trebui să fie necesar pentru ceva atât de banal.De asemenea, nu se execută atunci când modulul nu este instalat, așa că Drupal nu va citi numele/descrierea modulului tradus pentru lista de module din pagina Extindere din interfața de utilizare de unde îl pot selecta și instala. (De fapt, nu am verificat, dar *presupun* că va citi numele/descrierea traduse din fișierul local specificat în .info.yml pentru pagina respectivă...)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.