如何翻译Django表单中的标签和验证信息

3 投票
3 回答
10070 浏览
提问于 2025-04-17 15:31

每次我运行:

$ ./manage.py makemessages -a -l es -e .py

它只会把我在我自己的应用里标记的字符串包含进 locale/es/LC_MESSAGES/django.po 文件中,但我想翻译的是 Django 表单里标记为可翻译的字符串,比如这个:https://github.com/django/django/blob/master/django/contrib/auth/forms.py#L64-L84

有没有办法让 makemessages 也能翻译 Django 表单里的标签和验证错误信息,而不需要去重写这些表单呢?

提前感谢任何帮助!:)

3 个回答

2

如上所述,Django自带了一些翻译功能。不过,如果你发现某种语言的翻译不完整,或者翻译的内容不符合你的需求,你可以把需要翻译的字符串复制到你的项目中,这样你自己的翻译就会优先于Django自带的翻译。

要做到这一点,你只需要创建一个文件,把这些需要翻译的字符串放进去。例如,可以创建一个叫 app/i18n.py 的文件:

'''
Fake file to translate messages from django.contrib.auth.
'''

def _(text):
    return text

def fake():
    _(u'This username is already taken. Please choose another.')

现在,使用 makemessages 命令就能找到这些字符串,你就可以对它们进行翻译了。

3

如果你在使用ModelForm,可以看看这个回答,里面讲了如何自定义标签和错误信息:

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        labels = {
            'name': _('Writer'),
        }
        help_texts = {
            'name': _('Some useful help text.'),
        }
        error_messages = {
            'name': {
                'max_length': _("This writer's name is too long."),
            },
        }
5

这些字符串的翻译已经由Django项目完成了:https://github.com/django/django/blob/master/django/contrib/auth/locale/es_MX/LC_MESSAGES/django.po#L42

你不需要自己再翻译一遍。

你的应用里应该已经有这些翻译了。

撰写回答