管理页面的 Django 国际化 - 翻译模型名称和属性
Django 的国际化非常好(基于 gettext,LocaleMiddleware),但是翻译管理页面的模型名称和属性的正确方法是什么?我在文档中没有找到任何有关此内容的内容:
- http://docs。 djangoproject.com/en/dev/topics/i18n/internationalization/
- http:// /www.djangobook.com/en/2.0/chapter19/
我想要“Выберите заказ для изменения”而不是“Выберите order для изменения”。请注意,“订单”未翻译。
首先,我定义了一个模型,在settings.py中激活USE_I18N = True
,运行django-admin makemessages -l ru
。默认情况下不会为模型名称和属性创建任何条目。
我在 Django 源代码中进行 Grepping 发现:
$ 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 源代码...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Django 文档中未提及的重要事项:
django-admincompilemessages
,例如作为构建的一部分过程。谢谢史蒂夫贾林!
Meta
类和verbose_name
)verbose_name
)名称可以也可以使用ugettext_lazy()
进行翻译加载模型类和用户设置时发生,
特别是浏览器设置,不会被考虑在内
和带有管道的属性名称。相同的约定用于
ruby-gettext。背景:翻译后的“标题”或“名称”等属性名称
根据上下文,大多数语言都有所不同。例子
'书|标题' ->德语中的“Titel”或“Buchtitel”。但
“章节|标题”将被翻译为“Überschrift”。
使用上述原则的示例:
或者是否有更好的方法来翻译模型和管理页面?
无论哪种方式,我们都应该增强 Django 文档并填补空白!
Important things not mentioned in the Django documentation:
django-admin compilemessages
, e.g. as a part of your buildprocess. Thanks stevejalim!
ugettext_lazy()
to model names (Meta
class andverbose_name
)verbose_name
) names can also be translated withugettext_lazy()
happens while loading the model classes and the settings of your users,
especially the browser settings, will not be taken into account
and attribute names with a pipe. The same convention is used in
ruby-gettext. Background: attribute names like 'title' or 'name' translated
differently in the most languages depending on context. Example
'Book|title' -> 'Titel' or 'Buchtitel' in German. But
'Chapter|title' would be translated as 'Überschrift'.
Example using above principles:
Or is there a better way to translate the model and admin pages?
Either way we should enhance the Django documentation and fill the gap!
请参阅 https://automationpanda.com/2018/04/21/django-管理翻译/
它的作者在展示如何逐步掌握所有 django 翻译功能方面做出了出色的工作。对我来说这比官方文档好得多。
See https://automationpanda.com/2018/04/21/django-admin-translations/
It's author made an excellent work in showing how to master all django translation features step by step. It's much better than oficial documentation to me.
我也无法在 Django Admin 中翻译模型标签,因为
django.po
中有#, fuzzy
如下所示:所以,我删除了
#, fuzzy
来自django.po
,如下所示,然后我可以在 Django Admin 中翻译模型标签。 *您可以查看我的问题和我的答案详细解释:另外,模糊进行了解释在文档中,如下所示:
I also couldn't translate a model label in Django Admin because there are
#, fuzzy
indjango.po
as shown below:So, I removed
#, fuzzy
fromdjango.po
as shown below, then I could translate the model label in Django Admin. *You can see my question and my answer explaining it in detail:In addition, fuzzy is explained in the doc as shown below:
我将 ugettext 与
_
一起使用,并将 ugettext_lazy 与双__
一起使用。因此,makemessages
管理命令仅收集第一个消息。要同时收集
_
和__
,我们可以要求gettext
工具收集除_( ).为此,我们重写 makemessages 命令:https://docs.djangoproject.com/en/dev/topics/i18n/translation/#customizing-the-makemessages-command
我在管理中的模型现在终于完全翻译了。
I use both ugettext with
_
and ugettext_lazy with a double__
. Consequently, themakemessages
management command was only collecting the first ones.To collect both
_
and__
we can ask thegettext
tool to collect more than the default strings enclosed in_( )
. To do this, we override themakemessages
command: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#customizing-the-makemessages-commandMy models in Admin are now finally fully translated.