无法在Django中切换语言环境

时间:2009-08-04 22:57:33

标签: django internationalization

我有文件区域设置/ es / LC_MESSAGES / django.mo(和.po),运行makemessages和compilemessages。绝对是所有消息都被翻译了

settings.py中的

包含:

USE_I18N = True
LANGUAGE_CODE = 'es'

仍然django固执地从英文.po文件中取出字符串......为什么会这样?

必须有一些问题......谢谢。

编辑只有在LocaleMiddleware处于活动状态时才会出现这种情况。

2 个答案:

答案 0 :(得分:9)

根据django docs

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']

答案 1 :(得分:0)

我在我的设置中使用它:

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

所以你应该使用像'es-ES'这样的东西