Проблемы i18n в шаблоне в Django 1.9.1

В настоящее время пытаюсь обновить Django 187 --> 191, но столкнулся с неожиданной проблемой с переводами в моих файлах шаблонов. При первом появлении транс-тега в шаблоне я получаю сообщение об ошибке ниже. Мне кажется, что ugettext не возвращается по умолчанию правильно, когда файл mo/po не найден или не соответствует этой строке (в настоящее время файлы переводов для no/norwegian не используются, поэтому следует просто придерживаться существующего имени).

Все переводы работали корректно долгое время, так что это было неожиданно...

Любые идеи?

NoneType' object has no attribute 'get'
Request Method: GET
Request URL:    http://shootnscoreit.com/dashboard/
Django Version: 1.9.1
Exception Type: AttributeError
Exception Value:    
'NoneType' object has no attribute 'get'
Exception Location: /usr/local/lib/python2.7/gettext.py in ugettext, line 400

...

    usr/local/lib/python2.7/gettext.py in ugettext
    400.     tmsg = self._catalog.get(message, missing)

Local Vars

    Variable    Value
    message     u'Armoury'
    self        <DjangoTranslation lang:no>
    missing     <object object at 0x7f0e72c00740>

...

   File "/home/tss/webapps/shoot_django/lib/python2.7/django/templatetags/i18n.py", line 89, in render
     value = render_value_in_context(output, context)
   File "/home/tss/webapps/shoot_django/lib/python2.7/django/template/base.py", line 1022, in render_value_in_context
     value = force_text(value)
  File "/home/tss/webapps/shoot_django/lib/python2.7/django/utils/encoding.py", line 78, in force_text
     s = six.text_type(s)
   File "/home/tss/webapps/shoot_django/lib/python2.7/django/utils/functional.py", line 114, in __text_cast
    return func(*self.__args, **self.__kw)
   File "/home/tss/webapps/shoot_django/lib/python2.7/django/utils/translation/__init__.py", line 85, in ugettext
    return _trans.ugettext(message)
   File "/home/tss/webapps/shoot_django/lib/python2.7/django/utils/translation/trans_real.py", line 318, in ugettext
     return do_translate(message, 'ugettext')
   File "/home/tss/webapps/shoot_django/lib/python2.7/django/utils/translation/trans_real.py", line 298, in do_translate
    result = getattr(translation_object, translation_function)(eol_message)
   File "/usr/local/lib/python2.7/gettext.py", line 400, in ugettext
     tmsg = self._catalog.get(message, missing)
 AttributeError: 'NoneType' object has no attribute 'get'

person Jens Lundstrom    schedule 04.01.2016    source источник
comment
проверил журналы и обнаружил эту проблему относительно i18n: 2015-12-14 13:53:46,856 - py.warnings - ПРЕДУПРЕЖДЕНИЕ - /home/tss/webapps/shoot_django/lib/python2.7/django/utils/translation/__init__.py :146: RemovedInDjango19Warning: использование языкового кода 'zh-cn' устарело. Пожалуйста, используйте вместо этого перевод «zh-hans». вернуть _trans.activate(язык)   -  person Jens Lundstrom    schedule 04.01.2016
comment
смог воссоздать это, кажется, когда код нераспознанного языка (в данном случае no = norwegian generic (также может быть nn и nb - ny norsk и norsk bokmal)) это происходит в django 191, но не в 187... странно...   -  person Jens Lundstrom    schedule 06.01.2016
comment
закончилось миграцией языковых файлов cookie для всех из «нет» --- › «nb», это был только языковой код, которого не было в языках по умолчанию Django. Кажется, Django 1.9.1 был более чувствителен в этом вопросе, чем 1.8.7.   -  person Jens Lundstrom    schedule 06.01.2016
comment
Я вижу это после обновления с 1.9 до 1.9.1, единственная связанная фиксация, кажется, github .com/django/django/commit/   -  person Michal Čihař    schedule 07.01.2016


Ответы (1)


Это происходит, когда вы пытаетесь установить язык, который не указан в настройках ЯЗЫКИ. Для меня это было вызвано неверными пользовательскими настройками (которые, вероятно, были действительны в какой-то момент в прошлом), и translation.activate просто работал без каких-либо ошибок.

Это было вызвано https://github.com/django/django/commit/f0a4ff2b118cbc3b7f9ac28a7d9e3546280

PS: я сообщил об этом, так как считаю, что это регресс, которого не должно происходить: https://code.djangoproject.com/ticket/26050

PS2: Это просто показало мою неспособность выполнять поиск в существующих отчетах, поскольку они дублируют https://code.djangoproject.com/ticket/26046, который уже исправлен.

person Michal Čihař    schedule 07.01.2016