Chỉ cần gặp vấn đề tương tự ngày hôm nay và nghiên cứu thêm một chút. Chris ở trên có một nhận xét tốt, nhưng cuối cùng nó không chính xác. Bạn không cần sử dụng Drupal.behaviors để nó hoạt động.
Như chính JonMcL đã lưu ý trong bình luận cuối cùng của mình, hàm _locale_parse_js_file trong locale.inc chịu trách nhiệm phân tích các mẫu Drupal.t ("somestring") bắt đầu từ hàng 1493 (trong 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);
Đây chỉ là một chức năng phân tích cú pháp "ngu ngốc" không quan tâm đến ngữ nghĩa và chỉ đơn giản là tìm thấy tất cả các phiên bản của Drupal.t ("một cái gì đó") trong bất kỳ tệp nào mà nó nhận được.
Điều có thể là một vấn đề phổ biến là bạn cần phải có toàn bộ chuỗi trong mã nguồn của mình ở dạng Drupal.t ("translHRe"), bởi vì (rõ ràng) không có javascript nào được thực thi khi tệp được mở thông qua file_get_contents trong php. Điều đó có nghĩa là bạn không bao giờ có thể làm Drupal.t (somevariable) và hy vọng Drupal sẽ nắm bắt tất cả các biến javascript chứa chuỗi mà bạn ném vào Drupal.t.
Nếu bạn muốn dịch "phụ nữ" cho biểu đồ và đặt chuỗi ngữ cảnh, cú pháp sẽ là:
Drupal.t("women", {}, {context: "charts"}
Ngoài ra, nếu bạn đã cài đặt drush, hãy xác minh tệp js của bạn được phân tích cú pháp bằng lệnh;
drush vget javascript_parsed
Sau đó, bạn có thể làm sạch bộ nhớ cache của bạn với
drush cc all
... và lặp lại lệnh vget ở trên để xác minh danh sách các tệp đã được phân tích cú pháp trống. Bằng cách này, tệp của bạn sẽ được sửa lại lần chạy tiếp theo (xác minh điều đó).