django国际化:翻译字符串未完全翻译

时间:2013-10-14 01:43:49

标签: python django internationalization translation django-i18n

我正在使用django制作中文博客。我用中文编写了我可以控制的所有内容,例如帖子文本,博客标题,博客导航以及评论和联系我表格的标签标签。我无法控制的唯一事情是表单提交错误,例如“此字段是必填项”,“输入有效的电子邮件地址”。因为我使用django评论框架和表格库来制作我的评论表格和联系我形式,我不知道如何将英文版本替换为中文版本。

所以我诉诸于django国际化。在django文档之后,我将一些翻译字符串添加到django提供给我的表单的原始html文件中,例如

{% for error in field.errors %}
    <li>{% trans error %}</li>
{% endfor %}

{% for error in form.sender.errors %}
    <li>{% trans error %}</li>
{% endfor %}

然后我在项目根目录中创建消息文件,并将“django.middleware.locale.LocaleMiddleware”添加到MIDDLEWARE_CLASSES设置中。

在.po文件中,常量字符串有记录,如{%trans'欢迎使用我的网站'%}有记录:

msgid "Welcome to my site."
msgstr ""

但像{%trans error%}这样的变量内容没有记录。

我仍然继续,并重新加载我的博客。我看到'这个字段是必需的'。在评论表和联系我表格中翻译成中文,但“输入有效的电子邮件地址”仍为英文。我尝试手动添加新记录,例如

msgid "Enter a valid email address."
msgstr "XXXXXXX"

到.po文件,但没有效果。

为什么django会翻译一些错误消息并忽略其他错误消息?

如果django无法自动翻译某些字符串或者我只是不喜欢django自动提供给我的翻译,我可以提供自己的翻译吗?如果是这样,我在哪里放置翻译的字符串,因为.po文件没有相应的记录?

1 个答案:

答案 0 :(得分:1)

我觉得你需要做的是自定义表单错误提示消息。 我给有一段示例代码,你感受下。

(我认为您只需要在Form中定义自定义错误消息。 像这样:)

class UserForm(forms.Form):
    username = forms.EmailField(required=True, error_messages={
        'required':'your message here', 'invalid':'your message here'})