2011-07-12 87 views
3

我想在Drupal站點上用JavaScript進行翻譯。我正在使用js功能Drupal.t()。一切似乎都奏效; Drupal被加載,函數被調用,佔位符被替換,但翻譯不會發生。單詞保持英文,單詞不會添加到翻譯數據庫中。有誰知道爲什麼會發生這種情況,以及如何解決它?Drupal.t不會顯示在翻譯之間

回答

2

我知道你的帖子相當老,但我的回答可能會幫助其他人。

我注意到Drupal.locale.strings沒有被填充JavaScript調用。

所以我通常做的只是創建一部分在服務器端完成這項工作的PHP代碼。你可以在你的PHP代碼中的任何地方執行它。但最好的做法是在你正在編寫的模塊中進行。然後將它與Potx模塊一起導出,以便您可以在某些*.po文件中包含字符串,以便稍後用於模塊。

如果你趕時間,你可以簡單地做一個虛擬節點(只是做一個「預覽」)與PHP輸入格式的身體:

<?php 

print t('Example : %variable', array('%variable' => 'test')); 

?> 

一旦這已經完成後,您應該能夠找到您的字符串並在管理頁面中翻譯它們。

要重新生成JavaScript文件,您必須清除所有緩存(使用Devel或訪問模塊頁面)。

0

Drupal.t()函數非常小,所以我打賭我們可以在這裏解剖它。

function (str, args) { 
    // Fetch the localized version of the string. 
    if (Drupal.locale.strings && Drupal.locale.strings[str]) { 
    str = Drupal.locale.strings[str]; 
    } 

    if (args) { 
    // Transform arguments before inserting them 
    for (var key in args) { 
     switch (key.charAt(0)) { 
     // Escaped only 
     case '@': 
      args[key] = Drupal.checkPlain(args[key]); 
     break; 
     // Pass-through 
     case '!': 
      break; 
     // Escaped and placeholder 
     case '%': 
     default: 
      args[key] = Drupal.theme('placeholder', args[key]); 
      break; 
     } 
     str = str.replace(key, args[key]); 
    } 
    } 
    return str; 
} 

所以你可以看到,它會檢查Drupal.locale.strings找到當前區域的翻譯字符串。你可以在你的Drupal站點上打開一個控制檯,然後鍵入Drupal.locale,看看它吐出了什麼?

在Drupal中,要添加一種新語言,您必須先啓用Locale模塊。你做到了嗎?

接下來,您必須通過admin/build/translate中的翻譯界面導入您的語言。你做到了嗎?

在這裏,您可以看到我已經進口的法語和德語:http://grimhappy.com/i/ce75ca.png

1

不知道的JavaScript的一部分,但我用的T功能可按很多。如果您希望字符串顯示在翻譯表中,則必須先使用兩種不同的語言加載相應的頁面,然後才能翻譯它們。希望有所幫助。

0

¿你壓縮了js嗎?檢查您網站的效果部分。

清除緩存應該現在使用正確的翻譯重新生成js。