Django 1.2.3 - Интернационализация - makemessages не обнаруживает все строки - PullRequest
2 голосов
/ 07 октября 2010

Еще один вопрос о 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.uploadprogress для JQuery, а вторая часть - всего две функции для всплывающих окон подтверждения.

Обнаруженные строки находятся в первой части:

  • 'Загрузка% (имя файла) s ...'
  • 'Сохранение% (имя файла) s ...'

Я использовал команду "django-admin.py -d djangojs -l fr", и она сгенерировала файл djangojs.po с этими двумя строками. Я перевел их. К сожалению, они не переводятся во время выполнения. Кажется, у меня наконец две проблемы.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 26 октября 2010

Я только что решил проблему строк, не переведенных во время выполнения. Это произошло из-за того, что мой каталог «locale» находился в корневом каталоге проекта. Мне пришлось добавить «my_project_root_dir» в settings.INSTALLED_APPS, чтобы получить правильный каталог JavaScript.

Что касается проблемы не обнаруженных строк, я до сих пор не знаю, как заставить django makemessages найти все строки, но у меня есть временное решение. Я добавил строки в mo-файл вручную, и он работает. Тем не менее, django makemessages удаляет строки, поэтому их больше нельзя использовать.

1 голос
/ 12 апреля 2011

Разбор сообщений Django в Javascript довольно хрупок. Я записал детали почему это так. У меня также есть исправление для Django 1.3, прикрепленное к билету Django 7704 . Джанго может не принять патч, может быть, вы можете помочь им объяснить, почему они должны? :)

0 голосов
/ 07 октября 2010

Механизм отличается для файлов JavaScript. Переводы генерируются не в обычный po-файл, а в каталог javascript.

Посмотрите на это объяснение в книге Джанго .

Надеюсь, это поможет

...