如何将Python变量字符串传入gettext的_()函数?
问题解答:变量字符串传入gettext函数_()的问题修复
核心结论
不能直接将变量字符串传入_()让pygettext识别并提取,因为pygettext是静态代码扫描工具,仅能识别作为_()参数的字符串字面量,无法解析变量内部的动态内容。
修复方案
方案1:直接使用字符串字面量调用_()
将需要翻译的字符串直接写在_()的参数中,pygettext会直接提取该字符串:
print(_('Hello, World!'))
运行pygettext后,生成的.po文件中会自动包含:
msgid "Hello, World!" msgstr ""
方案2:先通过_()处理字面量,再赋值给变量
如果需要复用翻译后的字符串,可以先将字面量传入_(),再把返回结果赋值给变量,兼顾复用需求和提取需求:
my_str = _('Hello, World!') print(my_str)
方案3:处理动态占位符字符串
如果字符串包含动态内容(如占位符),同样需要将带占位符的字面量传入_(),后续再做格式化:
# 定义带占位符的可翻译字面量 greeting_template = _('Hello, %s!') # 使用时填充动态内容 print(greeting_template % 'World')
pygettext会提取'Hello, %s!'作为msgid,后续翻译时只需针对模板字符串处理即可。
原理说明
pygettext的工作方式是静态遍历代码文本,查找_()函数调用,并提取其中的字符串常量。它不会执行代码、也不会解析变量的运行时值,因此只有直接写在_()参数里的字符串字面量才能被识别并加入.po文件。
内容的提问来源于stack exchange,提问作者K.KLAI
相关产品推荐
相关产品推荐

