Właśnie natknąłem się dziś na ten sam problem i przestudiowałem go nieco bardziej. Chris powyżej ma dobry komentarz, ale ostatecznie jest niepoprawny. Nie musisz używać Drupal.behaviors, aby działało.
Jak zauważył sam JonMcL w swoim ostatnim komentarzu, funkcja _locale_parse_js_file w locale.inc jest odpowiedzialna za analizowanie wzorców Drupal.t („somestring”) począwszy od wiersza 1493 (w 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);
Jest to po prostu „głupia” funkcja parsująca, która nie dba o semantykę i po prostu znajduje wszystkie wystąpienia Drupal.t („coś”) w każdym otrzymywanym pliku.
To, co może być powszechną gotcha, to to, że musisz mieć cały ciąg w kodzie źródłowym w formie Drupal.t („translateme”), ponieważ (oczywiście) żaden skrypt javascript nie jest wykonywany, gdy plik jest otwierany przez file_get_contents w php. Oznacza to, że nigdy nie możesz zrobić Drupal.t (gdziekolwiek) i mam nadzieję, że Drupal wyłapie wszystkie zmienne javascript zawierające łańcuchy, które rzucisz w Drupal.t.
Jeśli chcesz przetłumaczyć „kobiety” dla wykresu i nadać ciągowi kontekst, składnia wyglądałaby następująco:
Drupal.t("women", {}, {context: "charts"}
Ponadto, jeśli masz zainstalowany Drush, sprawdź, czy plik js jest analizowany za pomocą polecenia;
drush vget javascript_parsed
Następnie możesz wyczyścić pamięć podręczną
drush cc all
... i powtórz powyższe polecenie vget, aby sprawdzić, czy lista już przeanalizowanych plików jest pusta. W ten sposób twój plik zostanie ponownie przeanalizowany przy następnym uruchomieniu (to też sprawdź).