2011-04-28 42 views
7

Tôi có một trang web được viết bằng tiếng Hà Lan. Bây giờ tôi phải cung cấp một ngôn ngữ thứ hai cho trang web đó là tiếng Pháp.Django: ngôn ngữ mặc định i18n

Vì vậy, tôi đã bao quanh tất cả văn bản cần được dịch bằng hàm gettext, tạo tệp po và biên dịch chúng thành tệp mo. Tôi cũng đã tạo một khung nhìn đặt phiên django_language thành mã ngôn ngữ thích hợp. Vì vậy, bây giờ phiên bản tiếng Pháp đang làm việc nhưng tôi không thể chuyển về phiên bản dutch.

Vì vậy, tôi đã tự hỏi tôi có cần tạo một tệp po/mo cho phiên bản tiếng Hà Lan không? Văn bản đang được chuyển sang gettext đã có sẵn bằng tiếng Hà Lan. Có cách nào để nói sử dụng 'văn bản mặc định' không?

Đây là quan điểm tôi sử dụng để thêm mã ngôn ngữ để phiên của tôi:

class LanguagePickerView(RedirectView): 
    url = '/' 

    def get(self,request,*args, **kwargs): 
     request.session['django_language'] = self.kwargs.get('language') 
     return super(LanguagePickerView, self).get(request, args, kwargs) 

Trong mẫu của tôi, tôi sử dụng các url sau: chuỗi ngôn ngữ

<a href='{% url web-language 'nl-nl' %}'>NL</a> 
<a href='{% url web-language 'fr' %}'>fr</a> 
+0

Tôi nghĩ rằng bạn không thể chuyển sang Hà Lan trở lại không có gì để làm với các tập tin địa phương của bạn, nhưng với cách bạn thay đổi ngôn ngữ (xem, middleware)? Bạn có thể cung cấp thêm một số chi tiết về điều đó không? Và về câu hỏi của bạn: không, bạn không cần cung cấp các tệp địa phương cho ngôn ngữ bạn đã viết các chuỗi có thể dịch được. –

+0

Tôi đang sử dụng django.middleware.locale.LocaleMiddleware. Tôi sẽ thêm chế độ xem thay đổi phiên cho câu hỏi của tôi. – Pickels

Trả lời

13

Mặc định không được lưu trữ trong po/mo tập tin, họ đi trực tiếp trong mã và các mẫu - có vẻ như bạn có quyền này.

Bạn có thể chuyển về nó bằng cách đặt biến phiên django_language quay lại dutch.

Đảm bảo rằng bạn có các cài đặt của bạn thiết lập đúng cách:

LANGUAGE_CODE = 'nl' #default language 

LANGUAGES = (
    ('nl', _('Dutch')), 
    ('fr', _('French')), 
) 

Đừng quên, mà bạn không cần phải viết mã để chuyển đổi giữa các ngôn ngữ bằng cách tự của bạn. Tốt hơn để sử dụng chế độ xem django đặc biệt (trích dẫn từ django book):

Để thuận tiện, Django có chế độ xem, django.views.i18n.set_language, đặt tùy chọn ngôn ngữ của người dùng và chuyển hướng trở lại trang trước.

Activate quan điểm này bằng cách thêm dòng sau vào URLconf của bạn:

(r'^i18n/', include('django.conf.urls.i18n')), 
+0

Điều này làm cho nó làm việc cho tôi, cảm ơn rất nhiều. Tôi đã thiếu phần URLconf. – DrKaoliN

2

câu hỏi này và câu trả lời có thể là hữu ích - set language within a django view

Đừng quên sử dụng translation.activate(lang_code), điều này thực sự quan trọng.

Bạn có thể sử dụng cách tiêu chuẩn để thay đổi ngôn ngữ bằng phương pháp bài hoặc viết phần mềm trung gian của riêng bạn và thay đổi nó như ví dụ trong url sau đó.

Chúc mừng, Ignas

1

Nếu bạn sử dụng {% url web-language 'nl-nl' %} như 'nl-nl' này là ở bạn args (args[0]), không phải trong kwargs của bạn. Đối với kwargs, bạn nên sử dụng cú pháp như {% url web-language language='nl-nl' %}. Sau đó, chế độ xem của bạn sẽ hoạt động. Hy vọng rằng urlconf của bạn phù hợp với cách mà khung nhìn xử lý nó.

+0

Cảm ơn bạn đã đánh bắt lỗi đó. – Pickels

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