Opened 11 years ago
Closed 11 years ago
#21055 closed Bug (fixed)
Error when implementing unknown language
Reported by: | Doug Beck | Owned by: | nobody |
---|---|---|---|
Component: | Translations | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
When trying to implement a language unknown to django (say Inuktitut, ISO 639-1 lang code "iu") an error is encountered.
Discovered while trying to answer:
https://groups.google.com/forum/#!msg/django-users/tc0asF6iFBo/u3cBN0SlUl0J
https://code.djangoproject.com/ticket/18192
Tests to and patch in comments.
Change History (9)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
How can I reproduce the problem? I've tried with the example below, but that seems to be working allright.
from django.conf import settings settings.configure( CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } } ) from django.utils.translation.trans_real import activate, gettext activate('iu-ca') print(gettext('Hello, world.'))
comment:3 by , 11 years ago
I think it is not related to one unknown language, probably related to two unknown languages and the way django tries to avoid sharing the translation object? This script fails for me in the third activate, it basically replicates what I am trying to do for a language chooser, were in one template I try to show the language name in it's own language:
from django.conf import settings gettext = lambda s: s settings.configure( CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', } }, LANGUAGES = ( ('en', gettext('English')), ('zh-sg', gettext('Traditional Chinese (Singapore)')), ('zh-hk', gettext('Traditional Chinese (Hong Kong)')), ) ) from django.utils.translation.trans_real import activate, gettext activate('en') print(gettext('Hello, world.')) activate('zh-sg') print(gettext('Hello, world.')) activate('zh-hk') print(gettext('Hello, world.'))
Fails with:
$ python script.py Hello, world. Hello, world. Traceback (most recent call last): File "script.py", line 21, in <module> activate('zh-hk') File "/Users/***/.virtualenvs/cumutmp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 194, in activate _active.value = translation(language) File "/Users/***/.virtualenvs/cumutmp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 184, in translation current_translation = _fetch(language, fallback=default_translation) File "/Users/***/.virtualenvs/cumutmp/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 147, in _fetch res._info = res._info.copy() AttributeError: 'NoneType' object has no attribute '_info'
This is django 1.4.10 btw. (I've replaced my username with *)
follow-up: 5 comment:4 by , 11 years ago
Looks about right. The core issue is that an inappropriate IOError exception in trans_real.translation() that results in downstream failure.
This section of code is difficult to debug and write fixes for. I've closed my old pull in favor of a rewrite:
https://github.com/django/django/pull/2237
Some of this code hasn't been touched in ages.
I hope this pull is reviewed and merged so core django translations dev can happen without hours of trying to untangle what is happening.
comment:6 by , 11 years ago
Easy pickings: | unset |
---|
comment:9 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Tests and patch: https://github.com/django/django/pull/1562