在Python-Kivy多语言应用中,能否修改xgettext识别textKey=msgid?
让xgettext识别自定义textKey的解决方案
1. 扩展xgettext的提取规则(最直接)
xgettext支持通过--keyword(简写-k)参数自定义提取关键字,针对你的MyLabel(textKey="msgid")场景,直接给xgettext指定要识别textKey属性:
- 基础命令(只提取textKey中的字符串):
xgettext -ktextKey -o messages.pot 你的Python文件.py - 如果要同时保留原有的
_()提取规则,叠加参数即可:
这样xgettext会同时提取xgettext -k_ -ktextKey -o messages.pot 你的Python文件.py_("xxx")和textKey="xxx"里的字符串作为msgid。
2. 用标记函数辅助提取
如果不想修改xgettext命令,可以在代码里加一个专门用来标记msgid的空函数,让xgettext能识别:
# 定义一个空标记函数,只用于xgettext提取 def _t(s): return s class MyLabel(Label): def __init__(self, textKey, **kwargs): super().__init__(**kwargs) self.textKey = textKey self.update_text() def update_text(self): # 运行时用gettext的_()翻译原始msgid self.text = _(self.textKey) # 使用时用_t()包裹msgid,让xgettext识别 MyLabel(textKey=_t("hi"))
然后执行xgettext命令时指定提取_t:
xgettext -k_ -k_t -o messages.pot 你的Python文件.py
这种方式的好处是,运行时_t("hi")直接返回原始字符串作为textKey,不会提前翻译,完美适配你切换语言时的更新逻辑。
3. 用Python自带的pygettext工具
Python自带的pygettext对Python代码的兼容性更好,用法和xgettext类似,同样支持--keyword参数:
pygettext -ktextKey -o messages.pot 你的Python文件.py
如果需要同时提取_()的内容,同样叠加-k_参数即可。
内容的提问来源于stack exchange,提问作者Abel Gutiérrez
相关产品推荐
相关产品推荐

