我有一个依赖于某些库的点击应用程序,
并且我已将该库打包在点击包中。
该库加载良好。但未找到翻译文件(.mo)。
我的点击文件免费看起来像这样:
/
/share
/share/locale/<LANG>/LC_MESSAGES/somlib.mo
/lib/i386-linux-gnu/somelib.so
当然,还有更多文件,但我认为这与问题相关。
我也试着穿上它/usr/share/locale/<LANG>/LC_MESSAGES/somlib.mo
但我发现,该库尝试在真实的 /usr/share/locale/...
我无法访问它,请单击包将文件放在那里...
(我用 将文件复制到此路径mv
,并且可以工作)
我试图使用strace
它来知道该库在哪里查找他的文件,但我不知道如何在手机上执行此操作(使用模拟器)。尝试时strace qmlscene
出现错误,我必须连接到 mir 服务器,或类似的东西。
谢谢。
答案1
gettext 搜索特定翻译域的翻译的目录由bindtextdomain
函数。库很可能在其初始化例程的某个地方调用此函数。因此,您可以尝试以下两个选项:
修改库,以便
bindtextdomain
调用根据指定目录$APP_DIR
。因此库可能运行的位置:bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
您可以将其更改为类似以下内容:
const char *app_dir = getenv("APP_DIR"); if (app_dir) { char *localedir = NULL; asprintf(&localedir, "%s/share/locale", app_dir); bindtextdomain(PACKAGE, localedir); free(localedir); } else { /* Not running as a click package: use compiled in default */ bindtextdomain(PACKAGE, PACKAGE_LOCALE_DIR); }
bindtextdomain
在库初始化之后运行第二次调用,为库的翻译域设置正确的目录(可能使用与上述类似的代码)。
如果不知道更多具体情况,很难提供更多建议。