Từ Django Tài liệu:Sử dụng settings.LANGUAGES với tên dịch đúng bằng gettext()
Nếu bạn định nghĩa một tùy chỉnh
LANGUAGES
thiết lập, đó là OK để đánh dấu các ngôn ngữ như chuỗi dịch (như trong mặc định giá trị được hiển thị ở trên) - nhưng sử dụng chức năng "giả"gettext()
, không phải chức năng trongdjango.utils.translation
. Bạn không bao giờ nên nhậpdjango.utils.translation
từ trong vòng tệp cài đặt của bạn, bởi vì tự động mô-đun này phụ thuộc vào cài đặt và điều này sẽ gây ra nhập khẩu vòng . Giải pháp là để sử dụng chức năng "giả"gettext()
. Đây là một tập tin cài đặt mẫu:
gettext = lambda s: s LANGUAGES = (
('de', gettext('German')),
('en', gettext('English')),
)
Với sự sắp xếp này,
django-admin.py makemessages
vẫn sẽ tìm và đánh dấu những chuỗi để dịch, nhưng bản dịch sẽ không xảy ra tại runtime - - vì vậy bạn sẽ phải nhớ để bọc các ngôn ngữ tronggettext()
thực trong bất kỳ mã nào sử dụngLANGUAGES
trong thời gian chạy.
Ý nghĩa chính xác của việc bao bọc ngôn ngữ trong thực tế gettext()
là gì? Làm thế nào nó nên được gọi trong mã?
Phương pháp này là stright khá về phía trước và dễ hiểu. Nhưng trong trường hợp này, whats điểm của việc sử dụng một wrapper giả trong settings.LANGUAGES? Kể từ khi bạn phải quấn trên mỗi dòng trong mã anyway, whats điểm của hàm wrapper được đề xuất bởi các hướng dẫn. –
Vì khi bạn chạy công cụ dòng lệnh gettext trên cây nguồn của bạn (có thể thông qua ./manage.py makemessages), bạn muốn nó nhận ra những chuỗi đó là "cần dịch" để nó sẽ thêm chúng vào tệp PO của bạn. –