2011-09-29 28 views
10

मेरे पास 20 से अधिक फ़ील्ड के साथ बेसफॉर्म है। तब मेरे पास उस फॉर्म से विरासत में लगभग 15 अन्य रूप हैं, जो फ़ील्ड नामक पैरामीटर में गुजरते हैं जो बेसफॉर्म अन्य सभी क्षेत्रों को हटाने के लिए उपयोग करता है। उदाहरण के माध्यम से सबसे अच्छा व्याख्या करते हैं:Django फॉर्म फ़ील्ड लेबल अनुवाद

class BaseForm(forms.Form): 
    reportid = forms.HiddenInput() 
    fromdate = forms.DateField(label=_("From"), widget=widgets.AdminDateWidget()) 
    todate = forms.DateField(label=_("To"), widget=widgets.AdminDateWidget()) 
    sort_by = forms.ChoiceField(label=_("Sort by"), choices=[]) 
    ....... 

    def __init__(self, *args, **kwargs): 
     fields = kwargs.pop('fields') 
     #Pseudo: 
     ***del self.fields[field] for field not in fields*** 

class SubForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     fields = ['reportid', 'todate'] 
     super(SubForm, self).__init__(fields=fields, *args, **kwargs) 

जिसके परिणामस्वरूप प्रपत्र तो इस प्रकार दिखाई देगा:

class SubForm(forms.Form): 
    reportid = forms.HiddenInput() 
    todate = forms.DateField(label=_("To"), widget=widgets.AdminDateWidget()) 

मेरे समस्या यह है कि जब BaseForm पहली बार के लिए आरंभ नहीं हो जाता, लेबल के साथ क्षेत्रों के लिए बाध्य कर रहे हैं है सक्रिय भाषा, और जब कोई अन्य उपयोगकर्ता किसी अन्य भाषा सेटिंग (या वर्तमान उपयोगकर्ता भाषा बदलता है) के साथ लॉग इन करता है तो फ़ील्ड लेबल अपडेट नहीं होते हैं।

मैं इस तरह एक dict का उपयोग कर एक समाधान पर आए हैं:

labels = { 
    'todate': lambda: _("To"), 
    'fromdate': lambda: _("From"), 
    ..... 
} 

और फिर जब baseform आरंभ सभी क्षेत्रों के माध्यम से पाशन और सेटिंग

self.fields[field].widget.label = labels[field]() 

है कि मैं किसी भी अच्छे है (पढ़ : अधिक पाइथोनिक) इसे प्राप्त करने का तरीका?

+3

आप क्षेत्रों के अनुवाद के लिए ugettext_lazy का उपयोग करते हैं पर विवरण में दर्ज है? –

+1

@ क्रिजिज़टॉफ: बेशक! वह बहुत बेवकूफ था, मैं ugettext_lazy के बजाय ugettext आयात कर रहा था ... यदि आप अपनी टिप्पणी को उत्तर के रूप में पोस्ट करेंगे तो मैं इसे स्वीकार करूंगा;) –

उत्तर

12

Django अनुवाद कार्यों के _lazy प्रकार प्रदान करता है (उदाहरण के लिए ugettext_lazy) ताकि आप एक्सेस समय पर अनुवाद के लिए तारों को चिह्नित कर सकें (जैसा कि अनुवाद फ़ंक्शन कहा जाता है)।

यह https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#lazy-translation

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