Django i18n使用自己的翻译

时间:2014-08-24 07:05:27

标签: django internationalization

我已开始对我的应用进行国际化,并面临两个问题。

首先,我为pl语言环境创建了一个.po文件并翻译了所有字符串。除了“登录”字符串外,一切正常。我将“登录”翻译成“Zaloguj”,但在HTML中它显示为“Zalogujsię”,尽管这种翻译甚至不存在于.po文件中。我想“登录”是如此受欢迎,以至于Django提供开箱即用的翻译(如错误消息),但它是否记录在任何地方?另外,奇怪的是我无法使用我的翻译而不是它。

其次,我有国际化的错误消息(我使用自己的用户模型):

class UserForm(ModelForm):

    class Meta:
        model = get_user_model()
        fields = ['email', 'password', 'name']
        error_messages = {
            'email': {
                'required': _("Please enter e-mail"),
                'max_length': _("E-mail address can be %(limit_value)s characters long"),
                'invalid': _("E-mail address is invalid")
            },
            'password': {
                'required': _("Please enter password")
            },
            'name': {
                'required': _("Please enter full name"),
                'max_length': _("Full name can be %(limit_value)s characters long")
            }
        }

这里奇怪的是消息没有被翻译。当我用en locale设置我的应用程序设置它没关系时,我看到我的自定义错误消息,但当我将其更改为pl时,我看不到抛光等价物(认为它们存在于.po文件中)。为什么?

P.S。

我做过像“django-admin.py compilemessages”这样的东西,重新启动服务器,重启计算机并没有任何效果。它一定是Django中的东西。我使用1.6版本。

1 个答案:

答案 0 :(得分:0)

我解决了。我做错了导入:

from django.utils.translation import ugettext as _

应该是

from django.utils.translation import ugettext_lazy as _

在类字段声明中使用时,延迟版本是正确的。我希望将来能帮到某人