python i18N国际化

为什么gettext用_()其中的值是变量,变量赋值了字符串,使用pygettext生成.pot文件的时候字符串没写进去,报错:*** mark_string.py:14: Seen unexpected token "i"?

from gettext import gettext as _


def main():
    i = "hello"
    print(type(_(i)))


if __name__ == "__main__":
    main()


报错:*** mark_string.py:14: Seen unexpected token "i"

以下代码可以把需要翻译的文本正常写入到.pot文件,上面的代码不行

from gettext import gettext as _


def main():
    print(type(_("hello")))


if __name__ == "__main__":
    main()
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析

    根据问题描述,出现这个问题的原因可能是gettext模块在生成.pot文件时不能识别以变量形式传入的字符串,并且只能识别直接写在_()函数中的字符串。

    解决方案

    解决这个问题的方法是将变量值直接写在_()函数中,而不是以变量形式传递。

    from gettext import gettext as _
    
    def main():
        i = "hello"
        print(type(_("hello")))
    
    if __name__ == "__main__":
        main()
    

    这样做可以确保字符串的值被正确写入.pot文件。注意,这并不是gettext模块的限制,而是由于pygettext在解析代码时的规则导致的。

    如果你使用了很多变量来表示需要翻译的文本,可以通过将这些变量的值传递给_()函数来处理。

    from gettext import gettext as _
    
    def main():
        i = "hello"
        # 将变量i的值传递给_()函数
        print(type(_(i)))
    
    if __name__ == "__main__":
        main()
    

    这样做可以在可以在将需要翻译的文本写入.pot文件前将其正确地解析为字符串。

    总结起来,为了确保变量的字符串值被正确写入.pot文件,使用_()函数时应该将变量的值直接写在函数中,或者将变量的值作为参数传递给_()函数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^