首页 > 解决方案 > Django 没有为第三方应用程序获取覆盖的翻译

问题描述

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

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

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

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

我在这里想念什么?

标签: djangodjango-appsdjango-i18n

解决方案


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

在创建第三方应用程序的分支后,我在其中创建了/django.po文件django.moPlural-Forms能够毫无问题地覆盖默认翻译。


推荐阅读