【问题标题】:gettext: FileNotFoundError: [Errno 2] No translation file found for domain: 'base'gettext:FileNotFoundError:[Errno 2] 未找到域的翻译文件:\'base\'
【发布时间】:2023-01-04 23:13:33
【问题描述】:

尽管密切关注文档和在线资源,但我似乎无法让我的 GNU gettext 实用程序正常工作。

我的文件夹结构如下:

/
|- src
|    |- __init__.py
|    |- main.py
|- locales
     |- ru
          |- LC_MESSAGES
               |- base.mo
               |- base.po

我的 main.py 的顶部是这样的(Windows 机器):

import argparse
import gettext
from gettext import gettext as _

argparser = argparse.ArgumentParser()
argparser.add_argument("--language", required=False, default="en")
arguments = argparser.parse_args()
gettext.translation(
    "base", localedir=r".\locales", languages=[arguments.language[:2]]
).install()

然而,当我尝试以英语或俄语运行脚本时,我仍然收到错误消息:

FileNotFoundError: [Errno 2] No translation file found for domain: 'base'

我究竟做错了什么?

我尝试将 locales 目录放入 src 文件夹并删除点前缀 (gettext.translation("base", localedir=r"locales", ...),但它似乎没有任何改变。

编辑:添加 fallback=True 似乎有效,但翻译似乎没有进行。可以找细节转载here

【问题讨论】:

    标签: python gnu gettext


    【解决方案1】:

    我已经设法通过结合执行以下操作来解决我的问题,但不确定哪件事有帮助:

    1. 使用 pathlib.Path(__file__).resolve().parents[1] / "locale" 指定绝对路径,而不是带点的简单字符串。

    2. 安装后不覆盖下划线 - from gettext import gettext as _ 必须删除,为了使 PyCharm linter 静音,我使用了这个技巧:

      from gettext import gettext as _
      
      def main() -> None:
          gettext.translation(...).install()
          del globals()["_"]  # Keep PyCharm happy
      
      1. Lo​​cale 必须是一个列表 - [ru],而不是 ru

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多