อาร์กิวเมนต์แรกของt()
ความต้องการจะเป็นสตริงตัวอักษรซึ่งไม่รวม:
- ตัวแปรแม้แต่พารามิเตอร์ของฟังก์ชัน:
t($description)
- การรวมกันของสตริง:
t('If you want to add a link, click on' . '<a href="http://example.com">this link</a>.')
- ค่าที่ส่งคืนจากฟังก์ชัน:
t(get_menu_description())
- คงที่:
t(MYMODULE_MY_WIDGET_TITLE)
,t(MyClass::WIDGET_TITLE)
เหตุผลก็คือว่านอกเหนือกี่ตะขอที่เฉพาะเจาะจง (เช่นhook_menu()
, hook_perm()
, hook_permission()
) สตริงในการแปลที่พบจากสคริปต์ที่สแกนรหัสของโมดูลที่กำลังมองหารหัสเช่นt('This is an example.')
; เมื่อพบค่าที่ขึ้นอยู่กับรันไทม์เช่นค่าของตัวแปรสคริปต์จะไม่สามารถเข้าใจได้ว่าเป็นสตริงใดที่จำเป็นต้องแปลเนื่องจากตัวแปรอาจมีค่าแตกต่างกันในแต่ละครั้งที่โค้ดถูกเรียกใช้งาน อันที่จริงแล้วhttp://localize.drupal.orgรายงานคำเตือนที่คล้ายกับคำเตือนต่อไปนี้ในกรณีที่อาร์กิวเมนต์สำหรับt()
ไม่ใช่ตัวอักษร:
พารามิเตอร์แรกที่t()
ควรเป็นสตริงตัวอักษร ไม่ควรมีตัวแปรการต่อข้อมูลคงที่หรือสตริงอื่น ๆ ที่ไม่ใช่ตัวอักษร ที่t($filter['name'])
ใน customfilter / customfilter.module ที่บรรทัด 30
หากคุณส่งค่าไดนามิกไปt()
สคริปต์ที่แยกสตริงที่จะแปลจะไม่แยกค่าใด ๆ ในกรณีนั้น ผลคืออาร์กิวเมนต์ที่ส่งผ่านไปยังt()
จะไม่ถูกแปลซึ่งมีผลเหมือนกันกับการไม่ใช้t()
และการใช้เอาต์พุตแบบไดนามิกในส่วนติดต่อผู้ใช้โดยตรง t()
เป็นเพียงกรณีที่สายจะถูกแปลเป็นเมื่อสตริงแบบไดนามิกจะเท่ากับสตริงตัวอักษรฟังก์ชั่นผ่านไป ตัวอย่างเช่นสมมติว่าคุณมีห้องสมุดที่ไม่คิด Drupal ซึ่งมีฟังก์ชันที่ส่งคืนชื่อของเดือนปัจจุบัน ด้วยรหัสต่อไปนี้ค่าที่ส่งคืนจากฟังก์ชันนั้นจะถูกแปล
function mymodule_calendar_page_title() {
return t(Calendar::getCurrentMonth());
}
function mymodule_calendar_translations() {
$translations = array(
t('January'),
t('February'),
t('March'),
t('April'),
t('May'),
t('June'),
t('July'),
t('August'),
t('September'),
t('October'),
t('November'),
t('December'),
);
}
mymodule_calendar_translations()
ไม่จำเป็นต้องถูกเรียกหรือไม่ต้องคืนค่าใด ๆ เมื่อรหัสของโมดูลจะถูกแยก, การเรียกร้องให้จะพบได้จากรหัสที่รูปลักษณ์สำหรับสตริงตัวอักษรผ่านไปt()
t()
การแปลคำอธิบายที่กำหนดไว้สำหรับตารางฐานข้อมูลและเขตข้อมูลนั้นไม่ใช่สิ่งที่คุณควรทำเนื่องจากไม่มีโมดูลหลักของ Drupal ทำเช่นนั้น ตัวอย่างเช่นnode_schema ()มีรหัสต่อไปนี้:
function node_schema() {
$schema['node'] = array(
'description' => 'The base table for nodes.',
'fields' => array(
'nid' => array(
'description' => 'The primary identifier for a node.',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'vid' => array(
'description' => 'The current {node_revision}.vid version identifier.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
// …
);
// …
);
// …
return $schema;
}
รายงานที่ทำให้การลบการโทรออกt()
จากการใช้งานหลักของ Drupal hook_schema()
คือRemove t () จากคำอธิบายสคีมาทั้งหมดซึ่งเปิดโดยwebchick (ผู้ดูแลร่วมของ Drupal 7)
ในเซเกดเรามีการพูดคุยกันอย่างยาวนานเกี่ยวกับt()
คำอธิบายสคีมาและมันเป็นความเห็นพ้องของทุกคนที่โต๊ะ (ซึ่งรวมถึง Dries) ที่t()
ควรลบออกจากคำอธิบายเหล่านี้ พวกเขาเลอะสิ่งต่าง ๆ เพราะt()
ไม่พร้อมที่จะเริ่มต้นและผู้คนกล่าวว่าไม่มีใครจะใช้เวลาในการแปลคำอธิบายทางเทคนิคของสิ่งต่าง ๆ และมันก็ไม่สมเหตุสมผลเพราะเราไม่ได้แปลความคิดเห็นเกี่ยวกับโค้ดด้วย ตัวอย่าง.
บทความเกี่ยวกับการแปลง Drupal 6 โมดูล Drupal 7 มีวรรคทุ่มเท: รายละเอียด Schema มีการแปลไม่