Opened 15 years ago
Last modified 15 years ago
#11384 closed
Django Internationalization override translation mechanisim not working as expected — at Initial Version
Reported by: | alfredo | Owned by: | nobody |
---|---|---|---|
Component: | Internationalization | Version: | 1.0 |
Severity: | Keywords: | internationalization translation overrride not-working | |
Cc: | alfredo@…, michal@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The internationalization override is not working as expected
The documentation says:
* you can write applications that include their own translations, and you can override base translations in your project path.* Or, you can just build a big project out of several apps and put all
translations into one big project message file. The choice is yours.
Which makes perfect sense to have distributable apps and be able to override such translations provided with the app
http://docs.djangoproject.com/en/dev/topics/i18n/#using-translations-in-your-own-projects
But having a distributable app with its translation, living outside the project path, lets say:
$VIRTUALENV/$APPPATH/locale/<language>/LC_MESSAGES/django.po
$VIRTUALENV/$APPPATH/locale/<language>/LC_MESSAGES/django.mo
And trying to override such translation with:
$PROJECTPATH/locale/<language>/LC_MESSAGES/django.po
$PROJECTPATH/locale/<language>/LC_MESSAGES/django.mo
It will pick up the translation from the app ignoring the one in the project path.
Looking at the code I can see that the translation on the project path gets to be called first
http://code.djangoproject.com/browser/django/trunk/django/utils/translation/trans_real.py#L176
and then the translations on the external apps which overrides the translations already picked up in the project path.
It looks like the answer would be to load first the translation of the apps and then the translations in the project path. I've tried switching them and it worked for me.
Thank you!