GNU gettext 目錄 I/O(.po / .mo)

本專案已有 i18n_test``(偽在地化、目錄佔位符檢查)與 ``message_format``(ICU 渲染),但沒有讀取*事實標準* 翻譯格式 GNU gettext ``.po / .mo 的工具。本功能解析 .po 文字(上下文、複數、多行字串、跳脫、 Plural-Forms 標頭)、編譯二進位 .mo``(與 Python 內建 ``gettext 讀取的小端格式相同),並提供 gettext / ngettext / pgettext 查詢。

純標準函式庫(re / struct / 以 gettext.c2py 處理複數運算式);不匯入 PySide6。解析與編譯皆為 純資料進/資料出,因此在 CI 中完全具決定性。

無頭 API

from je_auto_control import parse_po, read_mo, GettextCatalog

catalog = parse_po(po_text)
catalog.gettext("Hello")                 # 'Hola'
catalog.ngettext("file", "files", 3)     # 'archivos'
catalog.pgettext("menu", "Open")         # 'Abrir'

mo_bytes = catalog.compile_mo("out/messages.mo")   # 或 .to_mo_bytes()
same = read_mo(mo_bytes)                  # 可往返,含複數規則

# 以程式手動建立
cat = GettextCatalog()
cat.add("apple", ["pomme", "pommes"], plural_id="apples")

gettext 回傳翻譯(未翻譯時回傳原始 msgid);``ngettext`` 評估目錄的 Plural-Forms 運算式 (透過 gettext.c2py)以為 n 選擇正確形式;``pgettext`` 加入消歧上下文。to_mo_bytes / compile_mo 產生符合標準、可被 Python 內建 gettext.GNUTranslations 載入的 .mo,而 read_mo / read_mo_file 可反向解析(小端或大端)。

執行器命令

AC_gettext_translate 解析內嵌 .po 字串並回傳某 msgid``(可帶 ``context)的 {text}; AC_gettext_ngettext 回傳計數 n 的複數正確 {text}。兩者皆以 MCP 工具(ac_gettext_translate / ac_gettext_ngettext)以及 Script Builder 中 Data 分類下的命令提供。