Django的国际化功能非常好(基于gettext,LocaleMiddleware),但是如何正确地翻译模型名称和管理页面的属性呢?我在文档中没有找到相关内容。
所以
现在更新的
我目前使用的是Django 1.1.1。 有人能指点我相关的文档吗?因为谷歌找不到。;-) 在此期间,我会更深入地研究Django源代码...
- http://docs.djangoproject.com/en/dev/topics/i18n/internationalization/
- http://www.djangobook.com/en/2.0/chapter19/
我希望将“Выберите заказ для изменения”替换为“Выберите order для изменения”。请注意,'order'未翻译。
首先,我定义了一个模型,在settings.py中激活USE_I18N = True
,然后运行django-admin makemessages -l ru
。默认情况下,模型名称和属性不会创建任何条目。
在Django源代码中使用Grep搜索我找到:
$ ack "Select %s to change"
contrib/admin/views/main.py
70: self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
所以
verbose_name
元属性似乎在这里起到了一些作用。尝试使用它:class Order(models.Model):
subject = models.CharField(max_length=150)
description = models.TextField()
class Meta:
verbose_name = _('order')
现在更新的
po
文件中包含可以翻译的msgid 'order'
。所以我把翻译放进去了。不幸的是,运行管理页面时显示相同的混合语言"Выберите order для изменения"。我目前使用的是Django 1.1.1。 有人能指点我相关的文档吗?因为谷歌找不到。;-) 在此期间,我会更深入地研究Django源代码...
makemessages
仅更新po文件。我想你的意思是django-admin compilemessages
-感谢你的提示!我认为,因为Python是一种动态语言,与C相反,翻译文件没有编译。不幸的是,我的解决方案仍然无法运行,提供了混合翻译(语言在一个句子中混合)。对于模型名称,项目的LANGUAGE_CODE设置被使用。其余消息的语言由用户代理('Accept-Languages')确定。我将尝试使用延迟翻译,并告诉您是否有效。 - geekQ