2009-08-04 33 views
9

我有file locale/es/LC_MESSAGES/django.mo(和.po),運行makemessages和compilemessages。當然所有的消息都翻譯無法在Django中切換語言環境

settings.py中有:

USE_I18N = True 
LANGUAGE_CODE = 'es' 

仍然固執地Django的字符串需要從英文.po文件......那爲什麼會這樣呢?

必須有一些疑難解答...謝謝。

編輯只有當LocaleMiddleware處於活動狀態時,纔會出現這種情況。

回答

9

根據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

對於那些使用Python 3.X'如果request.META.has_key(「HTTP_ACCEPT_LANGUAGE」):`需求在request.META:`中更改爲`if'HTTP_ACCEPT_LANGUAGE'。 – reinaldoluckman 2016-03-30 19:41:21

0

我在我的設置使用此:

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

所以,你應該使用類似 'ES-ES'