python - Django 表单字段标签翻译

标签 python django internationalization django-forms

我有一个包含 20 多个字段的基本表单。然后我有大约 15 个其他表单继承自该表单,传入一个名为字段的参数,基本表单使用该参数删除所有其他字段。最好通过例子解释:

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 时,标签绑定(bind)到具有事件语言的字段,而当另一个用户使用另一种语言设置登录(或当前用户更改语言)时,字段标签不要更新。

我已经使用这样的字典找到了解决方案:

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

然后在初始化基本表单时循环遍历所有字段并设置

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

我是否有更好的(阅读:更多 pythonic)方法来实现这一目标?

最佳答案

Django 提供翻译函数的 _lazy 变体(例如 ugettext_lazy),因此您可以在访问时(而不是调用翻译函数时)为翻译标记字符串。

详细记录在 https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#lazy-translation

关于python - Django 表单字段标签翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7595965/

相关文章:

python - 对 Pandas Dataframe 的行求和

python - MagicMock 对象可以迭代吗?

javascript - Play framework 2 - javascript 文件中的 i18n

python - 如何有效地检查数据库中是否存在名称

python - 如何合并这两列? Pandas

python - python-从youtube下载mp3

python - 在测试中修改 Django 设置

python - 如何使用上下文变量在 djangoviews.py 文件中指定页面标题?

javascript - 多种 AngularJS 货币格式,使用 i18n(欧元、德国)

java - Spring消息不显示