如何翻译Django表单中的标签和验证信息
每次我运行:
$ ./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
你不需要自己再翻译一遍。
你的应用里应该已经有这些翻译了。