Не могу переключить языковую среду в Django - PullRequest
9 голосов
/ 05 августа 2009

У меня есть файл locale / es / LC_MESSAGES / django.mo (и .po), запускал makemessages и compilemessages. Определенно все сообщения переведены

в settings.py есть:

USE_I18N = True
LANGUAGE_CODE = 'es'

Тем не менее, Джанго упрямо берет строки из английского .po файла ... Почему это может быть?

Должно быть, есть кое-что ... Спасибо.

РЕДАКТИРОВАТЬ похоже, что это имеет место, только когда LocaleMiddleware активен.

Ответы [ 2 ]

9 голосов
/ 26 октября 2009

Согласно документации Django

http://docs.djangoproject.com/en/dev/topics/i18n/#id2

LocaleMiddleware пытается определить языковые предпочтения пользователя следуя этому алгоритму:

* 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.

Если вам нужен только один язык, «es», вы можете отключить промежуточное программное обеспечение. Если вам действительно нужен LocaleMiddleware, попробуйте этот рецепт, чтобы переопределить заголовки из браузера клиента 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']
0 голосов
/ 16 сентября 2009

Я использую это в моих настройках:

TIME_ZONE = 'Europe/Paris'
LANGUAGE_CODE = 'fr-FR'
SITE_ID = 1
USE_I18N = True

Так что вы должны использовать что-то вроде 'es-ES'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...