Score:2

วิธีใช้เส้นทางที่สัมพันธ์กันของโมดูลกับการแปลใน .info.yml

ธง id

ฉันยังใหม่กับการใช้ 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';
}

รู้สึกดีขึ้นเล็กน้อย แต่ฉันก็ยังรู้สึกว่าควรเป็นไปได้โดยไม่ต้องใช้ตะขอสำหรับสิ่งนี้

leymannx avatar
ne flag
ลอง `drupal_get_path('module', 'MYMODULE') '/translations/%language.po'`.
rickdenhaan avatar
id flag
@leymannx ฉันสามารถทำสิ่งนั้นในไฟล์ yaml ของฉันได้ไหม หรือฉันยังคงต้องใช้ hook เพื่อใช้ฟังก์ชันนั้น
leymannx avatar
ne flag
ไม่จากตะขอ ฉันไม่คิดว่าคุณสามารถมีเส้นทางสัมพัทธ์ของโมดูลในไฟล์ข้อมูลได้ ญาติเว็บรูทเท่านั้น
rickdenhaan avatar
id flag
@leymannx ที่ใช้งานได้และให้ความรู้สึกดีกว่าการใช้ `__DIR__` แต่แน่นอนว่ามีวิธีทำเช่นนี้จากไฟล์ yaml โดยไม่ต้องติดตั้ง hook?
leymannx avatar
ne flag
ฉันไม่คิดอย่างนั้น มีอะไรผิดปกติกับเบ็ด?
rickdenhaan avatar
id flag
ตะขอไม่ควรจำเป็นสำหรับสิ่งเล็กน้อยนี้นอกจากนี้ยังไม่ทำงานเมื่อไม่ได้ติดตั้งโมดูล ดังนั้น Drupal จะไม่อ่านชื่อ/คำอธิบายโมดูลที่แปลแล้วสำหรับรายการโมดูลบนหน้า Extend ใน UI ของผู้ดูแลระบบ ซึ่งฉันสามารถเลือกและติดตั้งได้ (ที่จริงฉันยังไม่ได้ตรวจสอบ แต่ฉัน *ถือว่า* มันจะอ่านชื่อ/คำอธิบายที่แปลจากไฟล์โลแคลที่ระบุใน .info.yml สำหรับหน้านั้น...)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา