我已经创建了一个我想通过Ubuntu应用程序开发人员流程提交的应用程序。该过程的要求之一是,安装后,所有文件都进入该/opt/extras.ubuntu.com/<appname>
目录。
通过更改包装并在其他人的帮助下,我已经实现了这一点,但是现在我面临着一个新问题:/opt
从应用程序运行时,我的翻译未加载。
将会发生以下情况:除非另有说明,否则包含应用程序翻译的二进制文件(MO文件)是从/usr/share/locale
(或在Ubuntu的情况下是从/usr/share/locale-langpack
)加载的,但是由于/opt
需要,在我的应用程序中将它们安装在/opt/extras.ubuntu.com/qreator/locale
。
从理论上讲,这很好,因为gettext允许指定替代位置来加载翻译,因此我添加了bindtextdomain
调用以实现这一点:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')
在某种程度上可以很好地工作:在命令行上输出的所有消息随后都按预期显示。但这并不能解决主要问题:从UI Glade加载翻译需要再次指定翻译域(与gettext.textdomain('qreator')
上面的调用等效),但是它不允许指定从何处加载翻译(即Glade等于bindtextdomain
,遗憾的是不存在)。这是我正在使用的代码的一部分:
builder = Gtk.Builder()
builder.set_translation_domain('qreator')
# There isn't a way to tell glade to load translations from
# somewhere else than /usr/share/locale here
builder.add_from_file(ui_filename)
从本质上讲,这意味着如果您的应用安装在中,则无法加载UI的翻译/opt
。
在这一点上,我几乎陷入了困境。关于如何从Glade /opt/extras.ubuntu.com/qreator/share/locale/
而不是Glade加载翻译的任何想法/usr/share/locale
?