为什么 gettext (Python) 在没有 .mo 文件的情况下不起作用?

Why gettext (Python) does not work without .mo files?

当 .mo 文件从 .../LC_MESSAGES 中删除但 .po 文件存在时,我的应用程序中的 Gettext 出现以下错误:

No translation file found for domain', domain)
FileNotFoundError: [Errno 2] No translation file found for domain: 'bot'

可能是什么原因?我看到一些没有 .mo 文件的项目并且它们工作正常。例如,.mo 文件在 Python gitignore 文件(https://github.com/github/gitignore/blob/master/Python.gitignore; 第 55 行)中说明,因此应将其删除存储库。

.po文件是源文件,.mo文件是运行时使用的编译编译目录。因此,简短的回答是 gettext 仅搜索 .mo 文件而不搜索 .po 文件,这是设计使然。

确实有些框架在运行时直接使用 .po 文件,但 Python gettetxt 显然不会,并且有充分的理由做出该设计决定。请参阅 Benefits of compiling po files to mo 我已经详细阐述了该主题。