This is what worked for me:
create a file in your app folder which will hold django messages for which translations need to be overridden, e.g. django_standard_messages.py
in django lib folder or in django.po
files find the message (string) that needs to be overridden, e.g. django.forms/fields.py
has message _(u"This field is required.")
which we want to translate to german differently
in django_standard_messages.py
add all such messages like this:
# coding: utf-8
_ = lambda s: s
django_standard_messages_to_override = [
_("This field is required."),
...
]
- Translate the file (
makemessages
, compilemessages
) - makemessages will add added django standard messages in your application .po file, find them and translate, run compilemessages to update .mo file
- tryout
The logic behind: (I think ;) ) - when ugettext
function searches translation for one message (string), there are several .po
/.mo
files that needs to be searched through. The first match is used. So, if our local app .po
/.mo
is first in that order, our translations will override all other (e.g. django default).
Alternative
When you need to translate all or most of django default messages, the other possibility (which I didn't tried) is to copy default django .po
file in our locale or some other special folder, and fix translations and register the folder (if new) in LOCALE_PATHS
django settings
file as first entry in the list.
The logic behind: is the very similar as noted in previous section.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…