2009-08-04 31 views
9

Tengo el archivo locale/es/LC_MESSAGES/django.mo (y .po), ejecuté los mensajes de compilación y los mensajes. Definitivamente todos los mensajes son traducidosNo se puede cambiar el entorno de idioma en Django

en settings.py tienen:

USE_I18N = True 
LANGUAGE_CODE = 'es' 

Aún Django tenazmente toma cuerdas desde el archivo .po Inglés ... ¿Por qué puede ser?

Debe haber alguna gotcha ... Gracias.

EDIT este parece ser el caso solo cuando LocaleMiddleware está activo.

Respuesta

9

De acuerdo con la documentación de Django

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

LocaleMiddleware intenta determinar la preferencia de idioma del usuario por siguiendo este algoritmo:

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

Si sólo necesita un idioma, 'es', se puede desactivar el software intermedio. Si realmente necesita LocaleMiddleware activo, pruebe esta receta para anular las cabeceras desde el navegador del cliente 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

Para aquellos que utilizan Python 3.x, 'si request.META.has_key ('HTTP_ACCEPT_LANGUAGE'):' necesidades para cambiarse a 'if 'HTTP_ACCEPT_LANGUAGE' en request.META:'. – reinaldoluckman

0

yo uso esto en mi configuración:

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

por lo que debe usar algo como 'es-ES'

Cuestiones relacionadas