生产时无法本地化modelform字段名称

时间:2011-02-25 02:54:49

标签: django localization django-forms

我有一个模特:

class Server(models.Model):
     serverId = models.IntegerField(verbose_name=_("serverId"))
     name = models.CharField(max_length=200, verbose_name=_("server_name"))
     ip = models.CharField(max_length=200, verbose_name=_("ip"))
     cport = models.IntegerField(default=5000, verbose_name=_("cport"))
     aport = models.IntegerField(default=1000, verbose_name=_("aport"))
     hport = models.IntegerField(default=2000, verbose_name=_("hport"))
     version = models.CharField(max_length=100, verbose_name=_("version"))
     serverGroup = models.ForeignKey(Group, null=True, blank=True,
             verbose_name=_('server_group'))
     class Meta:
         db_table = u'server'

     def __unicode__(self):
         return self.name

和模型形式:

class ServerForm(ModelForm):
    class Meta:
        model = Server

从这个app目录中我做了

$ mkdir locale
$ django-admin.py makemessages -l zh_CN

然后我在locale / zh_CN / LC_MESSAGES / django.po中提供了翻译 然后我做了

$ django-admin.py compilemessages

然后我运行了开发服务器:

$ python manage.py runserver

然后去看看firefox中的网址http://127.0.0.1:8000并显示翻译。所以我认为我做对了,我使用nginx + fastcgi在同一台机器上部署了项目,整个项目没有任何改变。然后我转到网址http://127.0.0.1,然后模型在那里显示英文。它没有本地化为中文。

我已经google了很多,并从docs.djangoproject.com上阅读了很多文档,但仍然不知道如何解决问题。所以我在这里问。

我只在settings.py中设置了LANGUAGE_CODE ='zh_CN'并将所有内容都置之不理。我的django版本是1.2.4

感谢您的任何评论。

3 个答案:

答案 0 :(得分:8)

确保您使用的是lazy_translation。您要导入ugettext_lazy还是ugettext

from django.utils.translation import ugettext_lazy as _

http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/#lazy-translation

答案 1 :(得分:2)

有关信息,django将第一个参数作为字段的详细名称。

所以你也可以用更短的方式编写你的模型,如下所示:

version = models.CharField(_("version"), max_length=100)
serverGroup = models.ForeignKey(_('server_group'), Group, null=True, blank=True)

答案 2 :(得分:0)

在版本1.4上,它仅适用于(对我来说)ugettext而不是ugettext_lazy