0

Django 按此处记录的顺序搜索消息文件 (.mo): https ://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

是否可以让 Django 首先在 locale 目录中搜索当前正在使用的应用程序的消息文件?

我最近在一个项目中发现了一个错误,这是由两个应用程序具有相同的 message-id 但不同的翻译引起的。所有应用程序都有自己的语言环境目录。

4

1 回答 1

0

由于各种原因,恐怕这不是 django 的工作方式:

  1. 一个短语应该有一个翻译。除了 Django,这也是 gettext 的问题(用于翻译消息的引擎)。此外,期望系统翻译所有页面中的单个短语并保持一致,这听起来很正常。毕竟它仍然是原始语言中的同一个短语。
  2. “当前应用程序”是什么意思?当前应用程序是生成当前视图的应用程序吗?翻译本身可能来自另一个应用程序的模块。如何决定这两种应用中的哪一种是合适的?翻译也可能是惰性的,这为此类决策增加了额外的复杂性。

我建议您重新排序您的应用程序INSTALLED_APPS以匹配您喜欢的翻译,或者使用该设置定义新的翻译消息路径LOCALE_PATHS以提供您自己的翻译。

注意:从技术上讲,可以通过提供此模块的自定义实现来覆盖 django.utils.translation.trans_real 中的默认行为,以根据需要更改行为(这是translation()此模块中实现选择算法的方法)。然后,您还应该覆盖Trans最初在django.utils.translation.__init__module 中定义的类以返回您的自定义 trans_real 模块(MyCustomTrans例如,命名这个新类)并将其明确设置为项目 init 模块中某处的翻译类,以便它在代码的早期加载:

from django.utils import translation
translation._trans = MyCustomTrans()

现在将使用您的自定义算法,但这需要大量工作,而且我认为不值得麻烦。

于 2012-11-23T16:15:30.447 回答