You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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 -k_ -ktextKey -o messages.pot 你的Python文件.py
    
    这样xgettext会同时提取_("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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:30:25