2016-09-19 19 views
13

Tôi muốn có một vài phiên bản khác nhau của cùng một ngôn ngữ ở Django, được tùy chỉnh cho các quốc gia khác nhau (ví dụ: locale/en, locale/en_CA, locale/en_US, v.v.). Nếu không có ngôn ngữ cho quốc gia cụ thể, tôi sẽ sử dụng phiên bản ngôn ngữ mặc định (locale/en)).Làm thế nào để duy trì các phiên bản quốc gia khác nhau của cùng một ngôn ngữ trong Django?

Sau đó, trong tệp cài đặt cho từng trang web tôi chỉ định LANGUAGE_CODELANGUAGES.

Đối với một số lý do, ngay cả khi tôi chỉ định các cài đặt sau, các locale/en_US dịch vẫn đang được sử dụng:

LANGUAGE_CODE = 'en' 
LANGUAGES = (
    ('en', ugettext('English')), 
) 

Mặc dù tôi chỉ định rõ ràng rằng mã ngôn ngữ nên en (không en-us).

Tôi có thiếu gì đó không? Đã cố gắng tìm câu trả lời ở nhiều nơi, bao gồm cả tài liệu Django.

+0

Thực ra, nếu Django hỗ trợ nó, bạn muốn duy trì các mục nhập tối thiểu trong en_CA, en_US vv và dự phòng từng trường hợp trên main * en * phần lớn thời gian, bởi vì hầu hết các từ đều giống nhau trên tất cả các hương vị. I E. chọn từ cụ thể nếu bạn tìm thấy một từ trong đó * hàng xóm * vs * hàng xóm * nhưng để lại * nhà * chỉ ở chính. –

+0

Đó là chính xác, nhưng vấn đề là Django vì một số lý do sử dụng "en_", ngay cả khi tôi chỉ đơn giản là chỉ định "vi". Bất kì manh mối nào? Chỉnh sửa: nếu tôi chỉ định "en-ca", nó sử dụng đúng cách "en_CA". –

+0

Không, tiếc là lời khuyên này đến từ kinh nghiệm của tôi trên một hệ thống khác và chỉ là một con trỏ để giữ cho chi phí dịch thuật của bạn giảm xuống. Chưa sử dụng hỗ trợ dịch Django. –

Trả lời

0

Giải pháp cho vấn đề sẽ là thêm đoạn mã sau vào tệp settings.py của bạn.

import locale 
locale.locale_alias.pop('en', None) 

Tín dụng đặc biệt cho Venelin Stoykov người có thể điều tra hành vi của mô-đun Python locale.

0

tôi có thể đề xuất bạn đặt điểm ngắt vào Lớp học LocaleMiddleware không?

Bằng cách này, bạn có thể phát hiện ra một đầu mối mà mọi thứ đã thực sự nhận được cách của bạn để nhận đúng ngôn ngữ.

Becaue theo source code của lớp LocaleMiddleware và How Django discovers language preference , có thể có quá nhiều thứ có thể ảnh hưởng đến kết quả.

+0

Phải, tôi biết về điều đó, nhưng nó không phải là trường hợp, vì tôi đang sử dụng 'i18n_patterns' và đó là điều đầu tiên' LocaleMiddleware' đang tìm kiếm. –

+0

Ok, tôi vừa thử thêm các điểm ngắt trong phương thức 'process_request' và' process_response' của 'LocaleMiddleware', và ngôn ngữ được đặt chính xác thành' en'. Mặc dù, miền địa phương 'en_US' được sử dụng. –

3

Đây là một thuật ngữ của Python (không cụ thể là Django) và mô đun gettext.

8626 được nêu trên trình theo dõi vấn đề Django trong khoảng thời gian phát hành 1.0 và sau một số đề xuất và tranh luận, nhà phát triển Django coi đó là "không khắc phục".

Có đề xuất trong chuỗi vé để sử dụng 'en-en' làm mặc định. Bộ nhớ của tôi hơi thô nhưng nếu tôi nhớ chính xác cách tiếp cận này không phù hợp với các phần khác của công cụ i18n của tôi (ví dụ: thư viện pox). Tôi đã từ bỏ và quyết định sử dụng en-US làm mặc định cho dự án và liệt kê các biến thể khác (ví dụ: en-au) làm phương án thay thế.

+1

Cảm ơn bạn đã đưa ra một hướng - tiền thưởng được trao cho bạn! Vấn đề là tôi đang sử dụng i18n_patterns để có URL tùy chỉnh ngôn ngữ. Bí quyết với "en-us" hoặc "en-en" có thể hoạt động, nhưng sẽ thay đổi cấu trúc URL của ứng dụng. Bất kỳ đề xuất cho điều đó? –

+0

Bạn có thể giải quyết việc có bản dịch tiếng Anh ở cả các URL tiếng Anh chung (.../en /) và Hoa Kỳ (.../en-us /) của bạn không? Thành thật mà nói, ưu tiên của tôi là giữ ngôn ngữ/địa phương ra khỏi các URL nhưng có lẽ bạn có thể chia sẻ lược đồ URL của mình trong một câu hỏi khác và tôi có thể suy nghĩ một chút. –

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