Opened 8 years ago

Closed 8 years ago

Last modified 8 years ago

#25915 closed Bug (fixed)

Error when using a language that Django doesn't ship translations for

Reported by: Gavin Wahl Owned by: Claude Paroz
Component: Internationalization Version: 1.8
Severity: Release blocker Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I am trying to add translations for a new language (that Django doesn't support) to my project. Let's say it has the language code xxx for example.

I make the .po file with

./manage.py makemessages -l xxx

Then I translate the po file and compile it. When I set LANGUAGE_CODE = 'xxx' and run runserver, Django fails with:

Traceback (most recent call last):
  File "./manage.py", line 13, in <module>
    execute_from_command_line(sys.argv)
  File "django/core/management/__init__.py", line 350, in execute_from_command_line
    utility.execute()
  File "django/core/management/__init__.py", line 324, in execute
    django.setup()
  File "django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "django/apps/config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "it__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "foo/models.py", line 381, in <module>
    MinLengthValidator(22, _("This value must be at least 22 digits.")),
  File "django/core/validators.py", line 297, in __init__
    if message:
  File "django/utils/functional.py", line 109, in __wrapper__
    res = func(*self.__args, **self.__kw)
  File "django/utils/translation/__init__.py", line 85, in ugettext
    return _trans.ugettext(message)
  File "django/utils/translation/trans_real.py", line 313, in gettext
    return do_translate(message, 'gettext')
  File "django/utils/translation/trans_real.py", line 296, in do_translate
    _default = _default or translation(settings.LANGUAGE_CODE)
  File "django/utils/translation/trans_real.py", line 203, in translation
    _translations[language] = DjangoTranslation(language)
  File "django/utils/translation/trans_real.py", line 112, in __init__
    self._init_translation_catalog()
  File "django/utils/translation/trans_real.py", line 150, in _init_translation_catalog
    translation = self._new_gnu_trans(localedir, use_null_fallback)
  File "django/utils/translation/trans_real.py", line 133, in _new_gnu_trans
    fallback=use_null_fallback)
  File "/usr/lib/python3.4/gettext.py", line 419, in translation
    raise OSError(ENOENT, 'No translation file found for domain', domain)
FileNotFoundError: [Errno 2] No translation file found for domain: 'django'

It seems that this errors happens whenever you try to use a language that doesn't have a django.po shipped with django (in django/conf/locale/). Shouldn't I be able to provide the translations just in my project?

Change History (11)

comment:1 by Tim Graham, 8 years ago

Maybe you need to add it to settings.LANGUAGES too?

comment:2 by Gavin Wahl, 8 years ago

It happens whether or not the language is in LANGUAGES.

comment:3 by Tim Graham, 8 years ago

Could you provide a minimal project to reproduce or a test case for the Django test suite?

comment:5 by Tim Graham, 8 years ago

Severity: NormalRelease blocker
Triage Stage: UnreviewedAccepted
Type: UncategorizedBug
Version: 1.91.8

Bisected to a5f6cbce07b5f3ab48d931e3fd1883c757fb9b45 (previously no error when running manage.py check with the sample project before that commit)

comment:6 by Claude Paroz, 8 years ago

Owner: changed from nobody to Claude Paroz
Status: newassigned

comment:7 by Claude Paroz, 8 years ago

Has patch: set

comment:8 by Tim Graham, 8 years ago

Triage Stage: AcceptedReady for checkin

comment:9 by Claude Paroz <claude@…>, 8 years ago

Resolution: fixed
Status: assignedclosed

In cd3c042:

Fixed #25915 -- Allowed language not in Django's default LANGUAGES

This fixes a regression introduced by a5f6cbce07.
Thanks Gavin Wahl for the report and Tim Graham for the review.

comment:10 by Claude Paroz <claude@…>, 8 years ago

In f0a4ff2:

[1.9.x] Fixed #25915 -- Allowed language not in Django's default LANGUAGES

This fixes a regression introduced by a5f6cbce07.
Thanks Gavin Wahl for the report and Tim Graham for the review.
Backport of cd3c042b0 from master.

comment:11 by Claude Paroz <claude@…>, 8 years ago

In 67a62703:

[1.8.x] Fixed #25915 -- Allowed language not in Django's default LANGUAGES

This fixes a regression introduced by a5f6cbce07.
Thanks Gavin Wahl for the report and Tim Graham for the review.
Backport of cd3c042b0 from master.

Note: See TracTickets for help on using tickets.
Back to Top