一尘不染

覆盖默认的Django翻译

django

我有一个模板与此:

{% trans "Log out" %}

Django自动将此翻译为Terminarsesión西班牙语。但是,我想将其翻译为Cerrarsesión。

我试图将此文字添加到.po文件中,但是在编译消息时出现错误,指出该文字重复。

有没有一种方法可以更改/覆盖默认的Django翻译?

谢谢。


阅读 460

收藏
2020-03-31

共2个答案

一尘不染

最简单的方法是收集在django.contrib.admin语言环境文件夹中找到的.po文件,然后重新编译(可以使用POEdit这样做)。

你还可以通过将django.contrib.admin模板放入项目模板文件夹(例如:yourproject / templates / admin / change_form.html),然后从项目根目录运行makemessages来覆盖django.contrib.admin模板(尽管django 1.4不再支持该消息) Alpha,如果我是正确的)

编辑:罗伯特·卢霍的答案是干净的方法

2020-03-31
一尘不染

这对我有用:

  • 在你的应用程序文件夹中创建一个文件,该文件将包含需要覆盖翻译的Django消息,例如 django_standard_messages.py

  • 在Django lib文件夹中或django.po文件中,找到需要覆盖的消息(字符串),例如,django.forms/fields.py_(u"This field is required.")我们想要以不同方式翻译成德语的消息

  • 在django_standard_messages.py添加所有这样的消息:

# coding: utf-8
_ = lambda s: s
django_standard_messages_to_override = [
_("This field is required."),
...
]
  • 翻译文件(makemessagescompilemessages)-makemessages将在应用程序.po文件中添加已添加的django标准消息,查找它们并进行翻译,运行compilemessages以更新.mo文件
  • 试用
    背后的逻辑:(我认为;))-当ugettext函数在翻译中搜索一条消息(字符串)时,需要搜索多个.po/ .mo文件。使用第一个匹配项。因此,如果我们的本地应用程序.po/.mo在第一位,那么我们的翻译将覆盖所有其他应用程序(例如django默认值)。

另类
当你需要翻译全部或大多数django默认消息时,另一种可能性(我没有尝试过)是在我们的语言环境或其他一些特殊文件夹中复制默认django.po文件,并修复翻译并注册该文件夹(如果是新文件夹)在LOCALE_PATHSDjango settings文件中作为列表中的第一项。

2020-03-31