2011-07-12 33 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。