Перевести название модуля (приложения) в django - PullRequest
0 голосов
/ 01 сентября 2011

Я пытаюсь перевести имена приложений в моем проекте django, я нашел этот код в Интернете:

init.py

from django.utils.translation import gettext_noop
gettext_noop("AppName")

шаблон

{% trans app.name %}

Однако в текущей версии django этот код присутствует, поэтому я думаю, что есть способ сделать это уже в django 1.3 (код выше взят из 2008 года) .. пожалуйста, посоветуйте, как получить имя в файлах перевода 1013 *

{% for app in app_list %}
{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}

Это также говорит мне, что это уже должно быть как-то возможно:

django / contrib / admin / sites.py строка 356 +

            if app_label in app_dict:
                app_dict[app_label]['models'].append(model_dict)
            else:
                app_dict[app_label] = {
                    'name': app_label.title(),
                    'app_url': app_label + '/',
                    'has_module_perms': has_module_perms,
                    'models': [model_dict],
                }

1 Ответ

0 голосов
/ 01 сентября 2011

Относительно blocktrans, вы не понимаете, как это работает с передаваемыми значениями. Если у вас есть что-то вроде этого:

{% blocktrans with foo=bar %}-- {{ foo }} --{% endblocktrans %}

Это примерно эквивалентно любому из следующего в Python:

gettext('-- %(foo)s --') % {'foo': bar}
gettext('-- {foo} --').format(foo=bar)

Здесь важно то, что app.name не будет переводиться. Передается дословно, после перевода. msgid в каталоге перевода будет "-- %(foo)s --" (потому что оно превращает его в формат Python для поиска перевода).

{% trans app.name %} будет работать, но не будет вводить имена приложений в каталог перевода с manage.py makemessages, потому что последний просто просматривает код, чтобы выяснить, что там, статически. Если вы сделаете что-то вроде gettext(app.name) в своем коде Python, он не сможет решить, что он должен поместить в каталог, потому что он не оценил код, а просто проанализировал его статически.

Окончательное резюме заключается в том, что использование gettext_noop является правильным способом отображения сообщений в каталоге переводов. makemessages не пытается быть слишком умным для своего блага и оставляет это вам.

Относительно билета 3591 - это билет 1668 , который, хотя и устарел, вероятно, стоит того, чтобы его прочесть, если вы этого еще не сделали (возможно, вы уже сделали, как натолкнулись на 3591) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...