【问题标题】:Make Django first search message files (.mo) for current application让 Django 首先搜索当前应用程序的消息文件 (.mo)
【发布时间】:2012-11-23 12:07:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: django translation


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      相关资源
      最近更新 更多