【发布时间】:2011-07-12 12:31:58
【问题描述】:
我正在尝试在 Drupal 网站上使用 JavaScript 进行翻译。我正在使用 js 函数Drupal.t()。一切似乎都有效; Drupal 被加载,函数被调用,占位符被替换,但是翻译没有发生。单词保留为英语,并且不会将单词添加到翻译数据库中。有人知道为什么会发生这种情况以及如何解决吗?
【问题讨论】:
标签: javascript jquery drupal drupal-6 translation
我正在尝试在 Drupal 网站上使用 JavaScript 进行翻译。我正在使用 js 函数Drupal.t()。一切似乎都有效; Drupal 被加载,函数被调用,占位符被替换,但是翻译没有发生。单词保留为英语,并且不会将单词添加到翻译数据库中。有人知道为什么会发生这种情况以及如何解决吗?
【问题讨论】:
标签: javascript jquery drupal drupal-6 translation
我知道你的帖子已经很老了,但我的回答可能对其他人有所帮助。
我注意到 Drupal.locale.strings 没有填充 JavaScript 调用。
所以我通常做的只是创建一部分 PHP 代码在服务器端完成这项工作。您可以在 PHP 代码中的任何位置执行此操作。但最好是在您正在编码的模块中进行。然后使用 Potx 模块将其导出会更容易,这样您就可以将字符串放在一些 *.po 文件中,以供以后使用您的模块。
如果你赶时间,你可以简单地在一个虚拟节点的主体中使用 PHP 输入格式:
<?php
print t('Example : %variable', array('%variable' => 'test'));
?>
完成此操作后,您应该能够在管理页面中找到您的字符串并翻译它们。
要重新生成 JavaScript 文件,您必须清除所有缓存(使用 Devel 或访问 modules 页面)。
【讨论】:
不确定 javascript 部分,但我经常使用 t 函数。如果您希望字符串显示在翻译表中,您必须先以两种不同的语言加载相应的页面,然后才能翻译它们。希望对您有所帮助。
【讨论】:
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
【讨论】:
¿你在压缩 js 吗?检查您网站的性能部分。
现在清除缓存应该使用正确的翻译重新生成 js。
【讨论】: