我正在尝试在Drupal网站上使用JavaScript进行翻译。我正在使用js函数Drupal.t()
。一切似乎都有效; Drupal被加载,函数被调用,占位符被替换,但翻译不会发生。单词保留为英文,单词不会添加到翻译数据库中。有谁知道为什么会这样,以及如何解决它?
答案 0 :(得分:2)
我知道你的帖子相当陈旧,但我的回答可能有助于其他人。
我注意到Drupal.locale.strings
没有填充JavaScript调用。
所以我通常只是创建一部分PHP代码,在服务器端执行此操作。您可以在PHP代码中的任何位置执行此操作。但最好的方法是在您编码的模块中执行此操作。然后使用 Potx 模块将其导出更容易,这样您就可以将字符串放在一些*.po
文件中,以便以后使用模块。
如果您赶时间,可以使用 PHP输入格式在虚拟节点的主体中进行操作(只需执行“预览”):
<?php
print t('Example : %variable', array('%variable' => 'test'));
?>
完成此操作后,您应该能够找到您的字符串并在管理页面中进行翻译。
要重新生成JavaScript文件,您必须清除所有缓存(使用Devel或访问模块页面)。
答案 1 :(得分:1)
不确定javascript部分,但我已经使用了很多功能。如果您希望字符串显示在翻译表中,您必须先用两种不同的语言加载相应的页面,然后才能翻译它们。希望有所帮助。
答案 2 :(得分: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
答案 3 :(得分:0)
¿你在压缩js吗?查看您网站的效果部分。
清除缓存现在应该使用正确的翻译重新生成js。