2013-05-08 67 views
1

我很新的使用Django,並且我有一些麻煩來呈現特定manytomany項目作爲他們的語言形式。我試圖做的是以下幾點。Django呈現多語言manytomany領域

from django.utils.translation import ugettext_lazy as _ 

class failure_example_manytomany(models.Model): 
    name = models.Charfield(...) 
    chinese_name = models.Charfield(...) 
    def __unicode__(self): 
     return self.name  #problem is on this return value 

class attaching_model(models.Model): 
    (...) 
    normal_field = models.Charfield(_('translatable_name_here'), max_length=128) 
    manytomany_field = models.ManyToManyField(failure_example_manytomany, blank=True, verbose_name=_('translatable_name_here')) 
    (...) 

我把il8n打開,它成功地將表格的名稱翻譯成中文。然而,我沒有根據所選語言改變我的許多模型的回報價值。我能做什麼。我不想將表單硬編碼到我的模板中,因爲它會很乏味。


既然有人說這是不可能的,結果是另一個問題。 如何根據用戶定義的語言將我的attachment_model呈現爲表單,並根據用戶定義的語言呈現多個選項的顯示名稱更改?

這是我目前得到的。 (Gah!爲什麼?不要讓我發佈圖片)請假設[]爲複選框。以下是django呈現的內容。 (或圖片鏈接here

上課地點: 
[] Yuen Long District 
[] Tuen Mun District 
[] Tsuen Wan District 
[] Kwai Tsing District 
[] North District 
[] Tai Po District 

與冗長的名字,它成功地翻譯成「上課地點」,但它無法的平移,選擇它給如「葵青區」之稱。我希望能找到一種方法來翻譯它們。

摘要問題:找到一種方法來翻譯ManyToManyField選項

回答

1

多星期後,我終於找到了這是一個完美的解決方案。我兼容靜態i18n翻譯。我的代碼看起來相對乾淨,它完成了這項工作!它根據所選語言改變語言LANGUAGE_CODE

#models.py 
class manytomany(models.Model): 
    name_zh = models.CharField(max_length=128) 
    name_en = models.CharField(max_length=128) 

class attaching_model(models.Model): 
    normal_field = models.Charfield(_('translatable_name_here'), max_length=128) 
    manytomany_field = models.ManyToManyField(manytomany, blank=True, verbose_name=_('translatable_name_here')) 

#forms.py 
class attaching_modelForm(forms.ModelForm): 
    class Meta: 
     model=attaching_model 

    def __init__(self, *args, **kwargs): 
     lang_code = kwargs.pop('lang_code') 
     if lang_code == 'zh-tw': #since model name doesn't accept hyphens 
      lang_code = 'zh' 
     super(attaching_modelForm, self).__init__(*args, **kwargs) 
     self.fields['manytomany_field'].choices = manytomany.objects.values_list('id','name_%s' % lang_code) 

#views.py 
form = attaching_modelForm(request.POST or None, request.FILES or None, lang_code = translation.get_language()) #calling the bound/unbound form