2009-08-04 2 views
9

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

в settings.py есть:

USE_I18N = True 
LANGUAGE_CODE = 'es' 

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

Должно быть, некоторые из них получены ... Спасибо.

EDIT Это, по-видимому, имеет место только в том случае, если активна LocaleMiddleware.

ответ

9

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

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. 

Если вам нужен только один язык, 'эс', вы можете отключить ППО. Если вам действительно нужно 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

Для тех, кто использует Python 3.X, 'если request.META.has_key («HTTP_ACCEPT_LANGUAGE»):' потребности для изменения в 'if 'HTTP_ACCEPT_LANGUAGE' в request.META:'. – reinaldoluckman

0

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

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

Таким образом, вы должны использовать что-то вроде 'эс-эс'

Смежные вопросы