Django 1.2.3 - 国际化 - makemessages没有检测到所有字符串

时间:2010-10-07 06:24:05

标签: javascript python django internationalization gettext

关于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模块​​的标准用法,第二部分是确认弹出窗口的两个函数。

检测到的字符串都在第一部分:

  • '正在上传%(文件名)s ...'
  • '保存%(文件名)s ...'

我使用了命令“django-admin.py -d djangojs -l fr”,并使用这两个字符串生成了一个djangojs.po文件。我翻译了他们。不幸的是,它们不是在运行时翻译的。看来我最后有两个问题。

有什么想法吗?

3 个答案:

答案 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)

javascript文件的机制不同。翻译不会生成到常规po文件中,而是生成到javascript目录中。

the Django book中查看此解释。

我希望它有所帮助