把 gettext PO 或 POT 目录变成译者或外包能编辑的 Excel 表,再原样转回 PO —— 复数形式、上下文、文件头、占位符与 fuzzy 标记全部保留,每个条目都以其上下文为键。不是通用的文本转表格 —— 而是 gettext 交接真正需要的那一步。
这个转换的存在,是让 gettext 工具链与译者各用自己顺手的格式 —— 而中间不丢任何东西。
GNU gettext 工具链与编辑器(Poedit、Lokalize、Weblate、Crowdin 等)使用的双语目录格式:每条字符串一个条目,带 msgid 与 msgstr,可选 msgctxt 消歧,由文件头 Plural-Forms 支配的 复数形式(msgid_plural + msgstr[0]、msgstr[1] …),以及标记需复核的 fuzzy 标志。精确 —— 不是用来肉眼手改的。
译者、审校与外包最自然的界面:一行一条字符串,原文与译文并排,便于筛选、批量编辑与批注。问题在于:直接用 Excel 打开 .po,复数形式会散开,上下文会混淆,fuzzy 标记会丢失,而且无法再载回工具链。
这个工具守的正是那个「载不回去」:导出时把每个复数条目展开为每形一行(Type 列标 plural:0、plural:1 …),把每个上下文保在 Key 列,保留 fuzzy 标记让未复核的字符串仍被标记,并把文件头逐字符存进保留的 @@po.header 行 —— 于是表格能重建回有效的 PO 目录。少数无法在表格中存活的结构会被 报告,绝不静默丢弃:译者注释与提取注释、源引用、previous-msgid 提示、非 fuzzy 的格式标志(c-format 等)与废弃条目。已编译的 .mo 文件不支持(仅文本 PO/POT)。