是否有一个既定的方法嵌入的gettext locale/xy/LC_MESSAGES/*在PYZ捆绑?特别是让Gtks自动小部件翻译从 ZIP存档中获取它们.
对于其他嵌入式资源pkgutil.get_deta或inspect/ get_source工作得足够好.但系统和 Python gettext API依赖于bindtextdomain提供一个简单的旧localedir; 没有资源或字符串等
所以我无法设计一个可行的甚至是远程实用的解决方法:
虚拟gvfs/ gio路径
现在使用archive://file%3A%2F%2Fmypkg.pyz%2Fmessages%2FIRI可以直接从zip读取其他文件.但是glibs g_dgettext仍然只是系统库的一个薄包装器.因此,任何此类URL都不能用作localedir.
部分提取拉链
这就是我认为PyInstaller的工作方式.但是将.pyz应用程序捆绑在一起当然有点荒谬,只是在每次调用时都预先提取.
Userland gettext .mo/ .poextraction
现在手动读取消息目录或者只是使用普通的dicts来代替它.但仅适用于应用程序中的字符串.再也没办法让Gtk/GtkBuilder暗中接他们了.
因此,我不得不手动遍历整个小部件树,标签,文本,内部小部件,markup_text等.可能,但是meh.
FUSE安装
这将是超薄的.但是当然,拉链内容可以被访问gvfs-mount等等.就好像是某种记忆力.而且我怀疑它会保持可靠性,例如两个应用程序实例正在运行,或者之前的不正确终止.(就像dunno一样,由于系统库,比如gettext,在一个脆弱的拉链保险丝点上磕磕绊绊......)
用于翻译的Gtk信号/事件(?)
我发现蹲下了,所以我有点确定在Gtk/PyGtk/GI中没有替代机制来进行小部件翻译.Gtk/Builder期望并与 gettext相关联.
是否有更可靠的方法?