2009-08-04 33 views
9

Tôi có tập tin locale/es/LC_MESSAGES/django.mo (và .po), chạy các phần mềm và tập hợp. Chắc chắn tất cả các thư được dịchKhông thể chuyển đổi môi trường ngôn ngữ ở Django

trong settings.py có:

USE_I18N = True 
LANGUAGE_CODE = 'es' 

Tuy django bướng bỉnh mất chuỗi từ tập tin .po tiếng anh ... Tại sao có thể có được?

Phải có một số hình ảnh xác thực ... Cảm ơn.

CHỈNH SỬA trường hợp này chỉ xuất hiện khi LocaleMiddleware đang hoạt động.

Trả lời

9

Theo các tài liệu django

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

LocaleMiddleware cố gắng xác định tùy chọn ngôn ngữ của người dùng theo sau thuật toán này:

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

Nếu bạn chỉ cần một ngôn ngữ, 'es', bạn có thể vô hiệu hóa các middleware. Nếu bạn thực sự cần tích cực LocaleMiddleware, hãy thử công thức này để ghi đè các tiêu đề từ trình duyệt của khách hàng 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

Đối với những người sử dụng Python 3.x, 'nếu request.META.has_key ('HTTP_ACCEPT_LANGUAGE'):' nhu cầu được thay đổi thành 'if 'HTTP_ACCEPT_LANGUAGE' trong request.META:'. – reinaldoluckman

0

tôi sử dụng này trong cài đặt của tôi:

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

Vì vậy, bạn nên sử dụng một cái gì đó như 'es-ES'

Các vấn đề liên quan