开发者社区 问答 正文

Django格式和ModelForm错误的翻译

我知道我可以为每个单独的表单/ ModelForm (Django自定义错误消息)创建自定义错误消息。 我知道我可以在模板中创建翻译文件(Django国际化最小示例)。 问题是,我如何创建文件,使我自己的翻译的形式/ ModelForm错误,如LANGUAGE_CODE = 'pt-br'做但我自己的翻译。 问题来源StackOverflow 地址:/questions/59383252/django-form-and-modelform-errors-translation

展开
收起
kun坤 2019-12-27 10:31:15 417 分享 版权
阿里云 AI 助理回答

在Django中为表单或ModelForm的错误消息创建自定义翻译,您需要遵循Django的国际化和本地化(i18n和l10n)流程。以下步骤将指导您完成此过程:

1. 在settings.py中启用国际化

确保您的settings.py文件中已经启用了语言设置,并且包含了您想要支持的语言。对于葡萄牙语(巴西),您应该有如下设置:

# settings.py
LANGUAGES = [
    ('pt-br', _('Portuguese (Brazil)')),
]
LANGUAGE_CODE = 'pt-br'
LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]  # 指定翻译文件存放路径

2. 创建翻译文件

使用Django的makemessages命令来创建和更新翻译文件(.po文件)。这会扫描您的项目中的所有源代码,查找带有gettext标记的字符串。

首先,导航到您的项目根目录,然后运行以下命令来为葡萄牙语(巴西)创建翻译模板文件:

django-admin makemessages -l pt_BR

这将在locale/pt_BR/LC_MESSAGES/目录下创建一个名为django.po的文件,如果该目录不存在,Django会自动创建。

3. 翻译错误消息

打开生成的django.po文件,您会看到许多条目,每条目代表一个可翻译的字符串及其默认英文版本。要翻译表单错误消息,您需要找到与您的表单字段错误消息相对应的条目。如果这些错误消息没有自动被提取,可能是因为它们没有被正确地标记为可翻译字符串。在您的表单或ModelForm中,确保错误消息是通过gettext函数(通常用作gettext_lazy或简单的_())包裹的,例如:

from django.utils.translation import gettext_lazy as _

class MyModelForm(forms.ModelForm):
    my_field = forms.CharField(
        error_messages={'required': _("Este campo é obrigatório.")}
    )

然后,在django.po文件中,找到相应的条目并提供葡萄牙语翻译。每个条目看起来像这样:

#: path/to/your/forms.py:123
msgid "This field is required."
msgstr "Este campo é obrigatório."

在这里,您只需修改msgstr部分。

4. 编译翻译文件

完成翻译后,您需要编译.po文件为二进制.mo文件,这是Django在运行时使用的格式。在项目根目录下执行:

django-admin compilemessages

5. 测试

现在,当您的站点以pt-br语言运行时,Django应该使用您提供的葡萄牙语错误消息。可以通过设置浏览器的首选语言或在视图中强制设置语言环境来测试这一点。

确保您的视图支持语言切换,并且在模板中使用了{% load i18n %}标签以及{% trans %}{{ _("Your text") }}来处理文本翻译。

按照以上步骤操作,您就可以成功地为Django表单和ModelForm的错误消息创建自定义翻译了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: