关于Django关于javascript文件本地化的另一个问题。
Django提供了一个小而方便的javascript库,它像gettext一样用于国际化javascript文件中的字符串。
我成功设置了(至少插值函数有效),我可以为法语生成po文件。但是,并非所有字符串都被检测到。我真的不知道为什么,因为它们看起来都一样。我在Django Trac和官方文档上找不到任何东西。
javascript代码位于模板中包含的外部文件中,Django显然发现了它,因为它在po文件中放了两个字符串。
包含在HTML模板中:
<script src="{{MEDIA_URL|default:'/media/'}}js/list.js" type="text/javascript"></script>
javascript代码:
/* ---------------
* Upload progress
* --------------- */
$(document).ready(function() {
$(function() {
$('#upload_form').uploadProgress({
//...
/* function called just before starting the upload */
start: function() {
$("#upload_form").hide();
filename = $("#id_file").val().split(/[\/\\]/).pop();
fmts = gettext('Uploading %(filename)s...');
dat = {
filename: filename
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
$("#progress_container").show();
},
/* function called each time bar is updated */
uploading: function(upload) {
if (upload.percents >= 100) {
window.clearTimeout(this.timer);
fmts = gettext("Saving %(filename)s...");
dat = {
filename: filename
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
} else {
fmts = gettext('Uploading %(filename)s : %(percents)s%...');
dat = {
filename: filename,
percents: upload.percents
};
s = interpolate(fmts,dat,true);
$("#progress_filename").html(s);
}
},
//...
});
});
});
/* --------------------
* Confirmation dialogs
* -------------------- */
function delVid(title) {
fmts = gettext('Do you really want to delete the video "%(title)s"?');
dat = {
title: title
};
s = interpolate(fmts,dat,true);
return confirm(s)
}
function abortVid(title) {
fmts = gettext('Do you really want to abort the processing of the video "%(title)s"?');
dat = {
title: title
};
s = interpolate(fmts,dat,true);
return confirm(s)
}
第一部分是jQuery的jquery.uploadprogress模块的标准用法,第二部分是确认弹出窗口的两个函数。
检测到的字符串都在第一部分:
我使用了命令“django-admin.py -d djangojs -l fr”,并使用这两个字符串生成了一个djangojs.po文件。我翻译了他们。不幸的是,它们不是在运行时翻译的。看来我最后有两个问题。
有什么想法吗?
答案 0 :(得分:1)
我刚刚解决了在运行时未翻译的字符串问题。它来自我的“locale”目录位于项目根目录下的事实。我必须将“my_project_root_dir”添加到settings.INSTALLED_APPS以接收正确的javascript目录。
对于未检测到字符串的问题,我仍然不知道如何让django makemessages找到所有字符串,但我有一个临时解决方案。我手动将字符串添加到mo文件中,它可以正常工作。但是,django makemessages删除了字符串,因此不能再使用了。
答案 1 :(得分:1)
Django的Javascript消息解析非常脆弱。我written up the details为什么会这样。我还修复了附加到Django ticket 7704的Django 1.3。 Django可能不接受补丁,也许你可以帮他们解释他们为什么要这样做? :)
答案 2 :(得分:0)