Bugün de aynı sorunla karşılaştık ve biraz daha araştırdık. Yukarıdaki Chris'in iyi bir yorumu var, ama sonuçta yanlış. Çalışması için Drupal.behaviors komutunu kullanmanız gerekmez.
JonMcL tarafından son yorumunda belirtildiği gibi, locale.inc'deki _locale_parse_js_file işlevi, 1493 satırından (Drupal 7.22'de) Drupal.t ("somestring") desenlerinin ayrıştırılmasından sorumludur:
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);
Anlambilimi umursamayan ve sadece aldığı herhangi bir dosyada Drupal.t ("bir şey") tüm örneklerini bulan "aptal" ayrıştırma işlevidir.
Ne ortak bir gotcha olabilir Drupal.t ("translateme") formunda kaynak kodunda tüm dize olması gerekir, çünkü (açıkçası) hiçbir dosya php dosya_get_contents aracılığıyla açıldığında herhangi bir javascript yürütülmez. Bu, Drupal.t'yi (çok değişken) asla yapamayacağınız ve Drupal'ın Drupal.t'ye attığınız tüm dize içeren javascript değişkenlerini yakalayacağını umduğunuz anlamına gelir.
Bir grafik için "kadınları" çevirmek ve dizeye bir bağlam vermek istiyorsanız, sözdizimi şöyle olur:
Drupal.t("women", {}, {context: "charts"}
Ayrıca, drush yüklediyseniz, js dosyanızın komutla ayrıştırıldığını doğrulayın;
drush vget javascript_parsed
Ardından önbelleğinizi
drush cc all
... ve önceden ayrıştırılmış dosyaların listesinin boş olduğunu doğrulamak için yukarıdaki vget komutunu tekrarlayın. Bu şekilde dosyanız bir sonraki çalıştırmada onarılır (bunu da doğrulayın).