เพิ่งพบปัญหาเดียวกันนี้วันนี้และค้นคว้าเพิ่มเติมอีกเล็กน้อย Chris ด้านบนมีความคิดเห็นดี แต่ในที่สุดก็ไม่ถูกต้อง คุณไม่จำเป็นต้องใช้ Drupal.behaviors เพื่อให้มันทำงานได้
ตามที่ระบุไว้โดย JonMcL ตัวเองในความคิดเห็นล่าสุดของเขาฟังก์ชั่น _locale_parse_js_file ใน locale.inc เป็นผู้รับผิดชอบในการแยกรูปแบบของ Drupal.t ("somestring") รูปแบบเริ่มต้นจากแถว 1493 (ใน Drupal 7.22):
preg_match_all('~
[^\w]Drupal\s*\.\s*t\s* # match "Drupal.t" with whitespace
\(\s* # match "(" argument list start
(' . LOCALE_JS_STRING . ')\s* # capture string argument
(?:,\s*' . LOCALE_JS_OBJECT . '\s* # optionally capture str args
(?:,\s*' . LOCALE_JS_OBJECT_CONTEXT . '\s*) # optionally capture context
?)? # close optional args
[,\)] # match ")" or "," to finish
~sx', $file, $t_matches);
เป็นเพียงฟังก์ชันการแยกวิเคราะห์ "โง่" ที่ไม่สนใจความหมายและเพียงค้นหาอินสแตนซ์ทั้งหมดของ Drupal.t ("บางอย่าง") ในไฟล์ใด ๆ ก็ตามที่ได้รับ
สิ่งที่อาจเป็น gotcha ทั่วไปก็คือคุณต้องมีทั้งสตริงในซอร์สโค้ดของคุณในรูปแบบ Drupal.t ("translateme") เพราะ (เห็นได้ชัดว่า) ไม่มีจาวาสคริปต์ที่จะดำเนินการเมื่อเปิดไฟล์ผ่าน file_get_contents ใน php นั่นหมายความว่าคุณจะไม่สามารถทำ Drupal.t (somevariable) และหวังว่า Drupal จะตรวจจับตัวแปรจาวาสคริปต์ที่มีสตริงทั้งหมดที่คุณส่งมาที่ Drupal.t
หากคุณต้องการแปล "women" สำหรับแผนภูมิและให้บริบทเป็นสตริงไวยากรณ์จะเป็น:
Drupal.t("women", {}, {context: "charts"}
นอกจากนี้หากคุณติดตั้ง drush แล้วให้ตรวจสอบไฟล์ js ของคุณแยกวิเคราะห์ด้วยคำสั่ง;
drush vget javascript_parsed
จากนั้นคุณสามารถล้างแคชด้วย
drush cc all
... และทำซ้ำคำสั่ง vget ด้านบนเพื่อตรวจสอบรายชื่อไฟล์ที่แจงแล้วว่างเปล่า วิธีนี้ไฟล์ของคุณจะถูกวิเคราะห์ใหม่ในครั้งถัดไป (ตรวจสอบด้วย)