6

Trong Django, tôi vui vẻ sử dụng ugettext_lazy để đặt bản dịch của chuỗi chỉ khi biểu diễn của nó là cần thiết.Django: giữ bản dịch lười biếng khi soạn các chuỗi đã dịch

Vấn đề là khi tôi nối một chuỗi ký tự vào một chuỗi bình thường hoặc khi tôi sử dụng các phương thức của nó (ví dụ: viết hoa()), chuỗi được đánh giá và tôi dịch lỏng lẻo.

Ví dụ:

label = ugettext_lazy('my label') #This is lazy 
label_concat = label + ' some other string' #'label_concat' contains transalted 'label' 
label_cap = label.capitalize() #'label_cap' contains transalted 'label' 

#Set language 
... 

print label #Translated 
print label_cap #Not translated 

Tôi biết rằng đây là hành vi bình thường của Django nhưng tôi tự hỏi nếu ai đó đã giải quyết vấn đề này.

+1

Đối với django 1.11 và hơn thế nữa. https://stackoverflow.com/questions/29252312/how-can-i-join-lazy-translation-in-django/47263039#47263039 – Jay

Trả lời

6

Đối với concatenating, bạn có thể sử dụng string_concat (lên đến 1,10)/format_lazy (từ 1.11) mà tạo ra một đối tượng lười biếng

Nếu bạn muốn thực hiện lười biếng capitalize, sử dụng django.utils.functional.lazy trang trí. Xem string_concatimplementation.