使Django首先搜索当前应用程序的消息文件(.mo)

时间:2012-11-23 12:07:15

标签: django translation

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

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

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

1 个答案:

答案 0 :(得分:0)

我担心这不是django因各种原因而起作用的方式:

  1. 单个短语应该只有一个翻译。除了Django,这也是gettext的问题(用于翻译消息的引擎)。此外,期望系统在所有页面中翻译一致的单个短语听起来是正常的。毕竟它仍然是原始语言中的相同短语。
  2. “当前申请”是什么意思?当前应用程序是生成当前视图的应用程序吗?翻译本身可能来自另一个应用程序的模块。如何确定这两个应用程序中的哪一个是合适的?翻译也可能是懒惰的,这会增加此类决策的复杂性。
  3. 我建议您在INSTALLED_APPS中重新排序应用以匹配您喜欢的翻译,或者使用LOCALE_PATHS设置定义新的翻译消息路径,以提供您自己的翻译。

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

    MyCustomTrans

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