2010-04-22 22 views
10

मैं रूपों है कि मैं अलग अलग भाषाओं में प्रदर्शित करने के लिए करना चाहते हैं: मैं एक पैरामीटर सेट करने के लिए लेबल पैरामीटर का उपयोग किया है, और लेबल पर ugettext() का प्रयोग किया:Django फार्म और i18n

agreed_tos = forms.BooleanField(label=ugettext('I agree to the terms of service and to the privacy policy.')) 

लेकिन जब मैं प्रतिपादन कर रहा हूँ मेरे टेम्पलेट में फॉर्म,

{{form.as_p}} 

लेबल का अनुवाद नहीं किया गया है। क्या किसी के पास इस समस्या का समाधान है?

उत्तर

19

आप ugettext_lazy() उपयोग करना चाहिए:

from django.utils.translation import ugettext_lazy 

# ... 
    agreed_tos = forms.BooleanField(label=ugettext_lazy('I agree to the terms of service and to the privacy policy.')) 

मॉडल और फार्म गुण प्रारंभ कर रहे हैं जब आपके Django आवेदन शुरू होता है। यदि आप ugettext() का उपयोग करते हैं, तो अनुवाद प्रारंभ में एक बार सेट किया जाएगा और कभी भी नहीं बदला जाएगा। ugettext_lazy() स्ट्रिंग का अनुवाद करके इस समस्या को हल करता है जब फ़ंक्शन कहलाए जाने के बजाए इसका मान एक्सेस किया जाता है।

+0

बहुत बढ़िया। धन्यवाद! – dfrankow

+0

स्पष्ट रूप से महत्वपूर्ण बात यह है कि ugettext_lazy में लॉग इन उपयोगकर्ता/सत्र का संदर्भ है। – BastiBen

संबंधित मुद्दे