2013-05-08 65 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