#19811 closed Bug (fixed)
KeyError: u"Unknown language code 'en-us'."
| Reported by: | Max Arnold | Owned by: | nobody |
|---|---|---|---|
| Component: | Internationalization | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Default LANGUAGE_CODE='en-us' is not present in django.conf.locale.LANG_INFO and can trigger KeyError exception. It can be easily reproduced by using get_language_info in templates. Example project is attached.
Command to reproduce an exception:
curl -v -L http://localhost:8000
Traceback is below:
Internal Server Error: /en-us/
Traceback (most recent call last):
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/core/handlers/base.py", line 140, in get_response
response = response.render()
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/response.py", line 82, in rendered_content
content = template.render(context)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/base.py", line 140, in render
return self._render(context)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/base.py", line 830, in render
bit = self.render_node(node, context)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/template/debug.py", line 74, in render_node
return node.render(context)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/templatetags/i18n.py", line 32, in render
context[self.variable] = translation.get_language_info(lang_code)
File "/Users/lwarx/.virtualenvs/locale/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 150, in get_language_info
raise KeyError("Unknown language code %r." % lang_code)
KeyError: u"Unknown language code 'en-us'."
Django version was installed from GitHub 1.5.x branch (77f6eb2a6099).
Attachments (1)
Change History (14)
by , 13 years ago
| Attachment: | example.zip added |
|---|
follow-up: 3 comment:1 by , 13 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|---|
| Version: | 1.5-rc-1 → master |
I also think that we should fallback to the language code stripped from the country code in this case.
comment:3 by , 13 years ago
Replying to claudep:
I also think that we should fallback to the language code stripped from the country code in this case.
So in this case we should check for 'en' entry in django.conf.locale.LANG_INFO? If yes, I can provide patch with tests.
comment:4 by , 13 years ago
I added fallback in this pull request https://github.com/django/django/pull/777
comment:5 by , 13 years ago
| Has patch: | set |
|---|
comment:6 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
comment:8 by , 13 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → new |
The ticket has been marked as fixed, but the patch has not been applied to the 1.5.x branch. Is there any chance this can be backported to 1.5?
comment:9 by , 13 years ago
I hoped it would be included into 1.5 release... Is it possible to backport this fix to 1.5.x branch for next minor release?
comment:10 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
It looks like patch was superseded by 8c8f94fe9dcdd4983ebeb59951e6f7399bc287a2 in ticket #19763
comment:11 by , 13 years ago
language problem in some browsers
u"Unknown language code 'es-co'."
django = 1.5.1
comment:12 by , 12 years ago
u"Unknown language code 'en-us'."
django = 1.5.1
Works, when 'en-us' is replaced by just 'en'.
settings.py:
LANGUAGES = (
('en-us', ugettext('English')),
('uk', ugettext('Ukrainian')),
)
comment:13 by , 12 years ago
Am still getting this in 1.5.3, too:
LANGUAGES = (
# See http://www.i18nguy.com/unicode/language-identifiers.html, but all lower case
('en-gb', _fake_gettext('UK English')),
('en-us', _fake_gettext('US English')),
)
LANGUAGE_CODE = 'en-gb'
example project to reproduce the problem