将 gettext 翻译 (po) 数据嵌入二进制

问题描述 投票:0回答:1

有没有办法嵌入 po 文件的内容并将文本域 (~

bindtextdomain(GETTEXT_PACKAGE,...)
) 绑定到嵌入的数据?

背景是我正在使用 gtkmm 构建 GTK 应用程序,并且我将大部分资源作为资源嵌入到应用程序中。目的是使应用程序尽可能可移植,因为这不会是安装或打包的东西 - 因此单个二进制/可执行文件是理想的。目前,翻译 po 文件是我唯一无法嵌入的内容。

注意:我不需要 GTK/Glib/gresource 特定的解决方案。

gtk gettext glib gtkmm
1个回答
0
投票

您声明您不需要 GTK/Glib/gresource 特定的解决方案。对于使用 C/C++ 以外的其他语言实现的许多 gettext,您通常可以对

.mo
加载功能进行猴子修补。但对于 Gtk/GLib/GResource 你可能就不那么幸运了。我认为覆盖 GLib I/O 功能甚至还不够,但您必须从目标系统的 libc(不是 GLib)覆盖
fopen()
甚至
open()

但是在您的评论中,您说您动态下载“它们”(

.mo
文件?)“如果它们不在应有的位置”。这表明您的应用程序有一个可写的目录,并且您的应用程序知道该目录的位置。

假设这个假设是有效的,添加一些初始化代码来检查

.mo
文件是否位于“它们应该在的位置”,并且只有当它们丢失时,才从
GResource
中提取数据并写出
.mo
文件。使用
bindtextdomain()
,您可以强制使用此目录来加载
.mo
文件。

替代解决方案:向

GResource
提出问题。如果可以捆绑
.ui
文件而不是
.mo
文件,则
GResource
的概念似乎缺少一个重要的用例。

© www.soinside.com 2019 - 2024. All rights reserved.