码界索隆 2023-07-26 17:04 采纳率: 0%
浏览 12

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()
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-26 21:15
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答由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文件,使用_()函数时应该将变量的值直接写在函数中,或者将变量的值作为参数传递给_()函数。


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

报告相同问题?

问题事件

  • 创建了问题 7月26日