ฉันควรใช้ t () ในคำอธิบายของ hook_menu หรือไม่


11

ฉันมักจะใช้t ()สำหรับชื่อ hook_menus และคำอธิบายเช่นนี้:

$items['some-path'] = array(
    'title' => t('My Page Title'),
    'description' => t('This is a description about what my page is for'),
    'page callback' => 'profile_user_page',
);

สำหรับฉันแล้วผู้ใช้สามารถแปลชื่อและคำอธิบายเป็นภาษาต่างๆได้หากต้องการ

อย่างไรก็ตามความคิดเห็นนี้ในการตรวจสอบโมดูลใน DO พูดว่า:

ไม่ถูกต้องอย่าทำอย่างนั้น - คำอธิบายใน hook_menu () ไม่ควรใช้ t ()

อะไรคือเหตุผลสำหรับสิ่งนี้และนี่เป็นแนวทางปฏิบัติที่ดีที่สุดจริงหรือ

นอกจากนี้หากเป็นจริงแล้วเราไม่ควรใช้ t () สำหรับชื่อเช่นกัน?


เห็นได้ชัดว่าไม่ควรใช้สิ่งนี้ แต่ถ้าคุณค้นหาหน้าช่วยเหลือของhook_menuเพื่อหา "description" => t ("มี 6 เหตุการณ์เกิดขึ้นอย่างชัดเจนว่านี่เป็นข้อผิดพลาดทั่วไป!
Felix Eve

1
ธรรมดาหรือไม่ไม่ใช่ข้อแก้ตัว;) และเหตุการณ์เหล่านี้อยู่ในความคิดเห็น - ผู้คนมีอิสระที่จะถูกเข้าใจผิดที่นั่น
Mołot

1
@ Mołotพวกเขามีอิสระที่จะเข้าใจผิดที่นั่น แต่ผู้ใช้ใหม่จำนวนมากจะคัดลอกและวางรหัสนั้นดังนั้นนี่จะยังคงเป็นข้อผิดพลาดทั่วไป ฉันคิดว่าคนที่มีสิทธิ์ของผู้ดูแลระบบใน DO ควรแก้ไขความคิดเห็นเหล่านั้นเพื่อลบ t ()
เฟลิกซ์อีฟ

คุณสามารถยื่นเรื่องได้หากต้องการ
Mołot

1
คำแนะนำที่ดี เสร็จสิ้น
เฟลิกซ์อีฟ

คำตอบ:


17

ดูStrings ณ สถานที่ที่มีชื่อเสียง: เมนูในตัว, สิทธิ์, ข้อความบันทึกและเอกสารประกอบชุมชนไฟล์. info :

ระบบเมนู Drupal 6 และ 7 เก็บชื่อรายการเมนูและคำอธิบายเป็นภาษาอังกฤษ สิ่งนี้ทำให้ระบบสามารถแคชข้อมูล แต่แสดงต่อผู้ใช้ที่ใช้ภาษาต่างๆตามต้องการ เพื่อให้สามารถใช้งานได้คุณไม่ควรใช้ t () กับชื่อเรื่องหรือคำอธิบายของรายการเมนูในการใช้งาน hook_menu () นอกจากนี้คุณควรพยายามใช้สตริงตัวอักษร (แทนที่จะเป็นสตริงแบบไดนามิก) สำหรับสองคีย์เหล่านี้ดังนั้นตัวแยกเทมเพลตการแปลจะสามารถค้นหาสตริงที่คุณใช้

เน้นการขุด


ฉันจะเพิ่ม: ถ้าtitle callbackไม่ได้ตั้งค่าเพราะโดยค่าเริ่มต้นtitle callbackคือt()ฟังก์ชั่น
milkovsky

1
@milkovsky หากมีการตั้งค่าการโทรกลับชื่อควรระวังt()และคุณยังไม่ควรใช้มันในhook menu()- คุณรู้ว่าแคช
Mołot

11

หากคุณเห็นเอกสารของอาร์กิวเมนต์hook_menu ..

  • "title": ต้องระบุ หัวเรื่องที่ไม่แปลของรายการเมนู
  • "title callback": ฟังก์ชั่นเพื่อสร้างชื่อ; ค่าเริ่มต้นเป็น t () ถ้าคุณต้องการเฉพาะสายอักขระดิบที่จะส่งออกตั้งค่านี้เป็น FALSE
  • "อาร์กิวเมนต์ของหัวข้อ": อาร์กิวเมนต์ที่ส่งไปยัง t () หรือการโทรกลับที่กำหนดเองของคุณพร้อมการทดแทนส่วนประกอบเส้นทางตามที่อธิบายไว้ข้างต้น
  • "description": คำอธิบายที่ไม่แปลของรายการเมนู

โดยค่าเริ่มต้นชื่อเรื่องการโทรกลับคือฟังก์ชั่น t .. ดังนั้นจึงแปลอยู่เสมอ


7

เนื่องจาก Drupal 6 ไม่จำเป็นอีกต่อไป

โปรดอ่านhttps://drupal.org/node/140311 อ้างว่า:

ตั้งแต่ 6.x, Drupal จัดการการแปลภายในของชื่อเมนูและคำอธิบายเป็นภาษาท้องถิ่นของผู้ใช้ หากมีคำอธิบายจะแปลด้วย t () เสมอ ไม่มีวิธีการส่งผ่านข้อมูลเพิ่มเติมสำหรับการแทนที่ตัวยึดตำแหน่ง (ใน D5 และก่อนหน้าการแทนที่ด้วยการแทนที่เป็นวิธีปฏิบัติที่ท้อใจ - ด้วยการเปลี่ยนแปลงนี้ระบบเมนูบังคับใช้กฎนั้นโดยตรง) ชื่อถูกแปลด้วย t () โดยค่าเริ่มต้น แต่ t () - การแทนที่สตริงสไตล์สามารถทำได้ผ่านการใช้คุณสมบัติ 'อาร์กิวเมนต์ของชื่อเรื่อง' ใหม่ คุณสามารถเลือกที่จะแทนที่ t () ด้วยการโทรกลับที่กำหนดเองได้


6

คุณไม่ควรใช้t()ในhook_menu()การนำไปใช้เนื่องจากt()ถูกเรียกโดยอัตโนมัติในภายหลังและการทำเช่นนั้นจะทำให้เกิดการแปลซ้ำ


* โปรดทราบว่าหากคุณเพิ่ม a title callbackใน hook_menu และหากไม่ได้รับtการติดต่อกลับจะมีหน้าที่รับผิดชอบในการแปลสตริง
AyeshK

0

มีการระบุอย่างชัดเจนในหน้าเอกสารประกอบสำหรับ hook_menu () เช่น

https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

"title": ต้องระบุ หัวเรื่องที่ไม่แปลของรายการเมนู

"description": คำอธิบายที่ไม่แปลของรายการเมนู

ดังนั้นไม่จำเป็นต้องใช้ฟังก์ชั่น t () สำหรับทั้งสองข้างต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.