【问题标题】:Django not picking up overridden translation for third-party applicationsDjango 没有为第三方应用程序获取覆盖的翻译
【发布时间】:2021-02-06 12:20:20
【问题描述】:

我安装了一个第三方应用程序,它的模板中有翻译标签,还提供多种语言的翻译,但我想只为一种语言更改一些翻译。

我运行了makemessages 命令,这些第三方应用程序的msgid 很好地显示在我自己用作LOCALE_PATHS 的文件夹中的.po 文件中。然后,我为他们添加了相应的msgstr,运行compilemessages,并希望我的翻译覆盖第三方应用程序提供的翻译,但我仍然看到应用程序提供的翻译,即使其他翻译来自我自己的.po/.mo 文件正确显示。

此过程确实适用于覆盖 Django 管理界面中的翻译(我为此使用完全相同的 .po 文件),所以我不确定应该做些什么不同在这种情况下。应用程序中是否有一些设置可以防止翻译被覆盖?

我尝试了一切,包括重新启动网络服务器、重建我正在使用的 Docker 映像等等,但我只有在删除应用程序的 .mo 文件后才能看到自己的翻译,确实表明我的compilemessages 按预期工作,即将我的应用程序翻译添加到我自己的.mo 文件中,但显然Django 优先使用应用程序的.mo 文件而不是我的文件,尽管@ 987654321@ 表示来自我的LOCALE_PATHS 的语言应该具有最高优先级。

我在这里错过了什么?

【问题讨论】:

    标签: django django-apps django-i18n


    【解决方案1】:

    在这种情况下,第三方应用程序提供的django.po 文件缺少Plural-Forms 行,而django.po 文件试图覆盖翻译确实有这一行,这显然使 Django 无法将它们匹配在一起。

    在创建第三方应用程序的一个分支后,我在其中创建了django.po/django.mo 文件with Plural-Forms 行,我能够覆盖默认翻译而无需任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2018-05-22
      • 2021-02-14
      • 2016-08-20
      • 2020-10-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多