I have file locale/es/LC_MESSAGES/django.mo (and .po), ran makemessages and compilemessages. Definitely all messages are translated
in settings.py have:
USE_I18N = True
LANGUAGE_CODE = 'es'
Still django stubbornly takes strings from the english .po file... Why can that be?
There must be some gotcha... Thanks.
EDIT this appears to be the case only when LocaleMiddleware is active.
According to the django docs
http://docs.djangoproject.com/en/dev/topics/i18n/#id2
LocaleMiddleware tries to determine the user's language preference by following this algorithm:
* First, it looks for a django_language key in the current user's session. * Failing that, it looks for a cookie.
[...]
*Failing that, it looks at the Accept-Language HTTP header. This header is sent by your browser and tells the server which language(s) you prefer, in order by priority. Django > tries each language in the header until it finds one with available translations. * Failing that, it uses the global LANGUAGE_CODE setting.
If you only need one language, 'es', you can disable the middleware. If you really need LocaleMiddleware active, try this recipe to override the headers from the client's browser http://www.djangosnippets.org/snippets/218/:
enter code here
class ForceDefaultLanguageMiddleware(object):
"""
Ignore Accept-Language HTTP headers
This will force the I18N machinery to always choose settings.LANGUAGE_CODE
as the default initial language, unless another one is set via sessions or cookies
Should be installed *before* any middleware that checks request.META['HTTP_ACCEPT_LANGUAGE'],
namely django.middleware.locale.LocaleMiddleware
"""
def process_request(self, request):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
del request.META['HTTP_ACCEPT_LANGUAGE']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With