Django渲染多语言manytomany字段

时间:2013-05-08 03:02:55

标签: django multilingual

我在使用Django方面很新,我在将特定的许多项目作为其语言的表单呈现时遇到了一些麻烦。我试图做的是以下几点。

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 个答案:

答案 0 :(得分: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