为什么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()
不知道你这个问题是否已经解决, 如果还没有解决的话:问题分析
根据问题描述,出现这个问题的原因可能是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文件,使用_()
函数时应该将变量的值直接写在函数中,或者将变量的值作为参数传递给_()
函数。