ฉันยังใหม่กับการใช้ Drupal และกำลังสร้างโมดูลแบบกำหนดเองเพื่อเรียนรู้วิธีการทำงานทั้งหมด
ฉันกำลังสร้างโมดูลของฉันใน โมดูล/กำหนดเอง/my_module
. ฉันมีไฟล์ภาษาดัตช์ใน โมดูล/กำหนดเอง/my_module/translations/my_module-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
ไฟล์จะบังคับให้ผู้ใช้ติดตั้งโมดูลนี้ใน โมดูล/กำหนดเอง/my_module
. ฉันไม่ต้องการสิ่งนั้น ฉันไม่สนใจว่าพวกเขาวางไว้ที่ไหน พวกเขาสามารถใส่โมดูลนี้เข้าไปได้ โมดูล/contrib/my_module
หรือ ไซต์/ทั้งหมด/โมดูล/my_module
สำหรับทุกสิ่งที่ฉันห่วงใย อาจมีบางคนรวมไว้เป็นการพึ่งพาแบบแพ็คเกจและจะจบลงด้วย โมดูล/กำหนดเอง/some_module/modules/my_module
. มันไม่สำคัญและฉันไม่ต้องการฮาร์ดโค้ดเส้นทางโมดูลในไฟล์ของฉัน .info.yml
.
สิ่งที่ฉัน ต้องการ คือการมีของฉัน .info.yml
ไฟล์ระบุรูปแบบเซิร์ฟเวอร์โดยใช้เส้นทางที่สัมพันธ์กันของโมดูล (เทียบกับตำแหน่งที่โมดูลของฉัน .info.yml
ไฟล์มีชีวิต) เช่นนี้:
'รูปแบบเซิร์ฟเวอร์การแปลอินเตอร์เฟส': translations/%project-%version.%language.po
# หรืออาจเป็น: ./translations/%project-%version.%language.po
แต่ Drupal ไม่ชอบสิ่งนี้และการตรวจสอบการอัปเดตการแปลจะระบุว่าไม่พบไฟล์
ฉันตระหนักถึง คำแปล://
และ สาธารณะ://
stream wrappers แต่เท่าที่ฉันสามารถบอกได้ว่าไฟล์การแปลจะต้องโฮสต์ที่อื่น คัดลอกไปที่ ไซต์/ค่าเริ่มต้น/ไฟล์
โฟลเดอร์ (ซึ่งฉันอาจทำได้ใน my_module_install()
แต่ไม่มีประโยชน์ในระหว่างการพัฒนาเมื่อฉันเพิ่มสตริงอย่างต่อเนื่อง) หรือ (อีกครั้ง) ฮาร์ดโค้ดพา ธ ไปยังโมดูล
สำหรับตอนนี้ฉันได้ติดตั้ง hook_locale_translation_projects_alter()
ขอในของฉัน my_module.module
ไฟล์เพื่อกำหนดเส้นทางที่แน่นอนดังนี้:
ฟังก์ชัน my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['รูปแบบเซิร์ฟเวอร์การแปลอินเตอร์เฟส'] =
__DIR__ . '/translations/%project-%version.%language.po';
}
ใช้งานได้ แต่รู้สึกเหมือนเป็นวิธีแก้ปัญหาที่น่ารังเกียจและไม่ใช่วิธีที่ Drupal ตั้งใจทำงาน
วิธีปกติในการรับพาธโมดูลสัมพันธ์เพื่อทำงานแปลคืออะไร
แก้ไข: ตามที่แนะนำโดย @leymannx แทนที่จะใช้ __DIR__
ในเบ็ดของฉันฉันสามารถใช้:
ฟังก์ชัน my_module_locale_translation_projects_alter(&$projects) {
$projects['my_module']['info']['รูปแบบเซิร์ฟเวอร์การแปลอินเตอร์เฟส'] =
drupal_get_path('โมดูล', 'my_module') '/translations/%project-%version.%language.po';
}
รู้สึกดีขึ้นเล็กน้อย แต่ฉันก็ยังรู้สึกว่าควรเป็นไปได้โดยไม่ต้องใช้ตะขอสำหรับสิ่งนี้