2011-09-01 2 views
0

Я пытаюсь перевести имена приложений в моем Джанго проекте, я нашел этот код в Интернете:Перевести имя модуля (приложение) в Джанго

init.py

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

шаблон

{% trans app.name %} 

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

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

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

Джанго /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], 
       } 
+0

Я много нашел об этом на https://code.djangoproject.com/ticket/3591, но почему в этом случае блокбаны будут вокруг него, если это еще не возможно? – AKjsd89

ответ

0

Относительно 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 - ticket 1668, который, несмотря на устаревшие данные, вероятно, стоит вашего чтения, если вы еще этого не сделали (вы, возможно, сделали так, как вы натолкнулись на 3591).

+0

да, я читал оба .. кажется, его ждет, когда django 1.4 сможет передать app_dict установленным установкам приложений. До тех пор мой подход, заменяющий blocktrans, будет, я полагаю, спасибо! – AKjsd89

Смежные вопросы