我已开始对我的应用进行国际化,并面临两个问题。
首先,我为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版本。
答案 0 :(得分:0)
我解决了。我做错了导入:
from django.utils.translation import ugettext as _
应该是
from django.utils.translation import ugettext_lazy as _
在类字段声明中使用时,延迟版本是正确的。我希望将来能帮到某人