Dav*_*lla 9 python application-development glade gettext localization
我创建了一个应用程序,希望通过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')
Run Code Online (Sandbox Code Playgroud)
这在一定程度上很有效:在命令行上输出的所有消息都按预期翻译。但这并没有解决主要问题:从 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)
Run Code Online (Sandbox Code Playgroud)
这实质上意味着如果您的应用程序安装在/opt
.
我几乎被困在这一点上。关于如何使 Glade 从而/opt/extras.ubuntu.com/qreator/share/locale/
不是加载翻译的任何想法/usr/share/locale
?
Dav*_*lla 10
我找到了一个解决方案:使用语言环境Python 模块而不是gettext
import locale
from locale import gettext as _
locale.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
locale.textdomain('qreator')
Run Code Online (Sandbox Code Playgroud)
感谢 #gtk+ IRC 频道上的 Juha Sahakangas 提供解释:
对于这种特殊情况,需要使用locale模块而不是gettext。Python 的gettext模块是纯 Python,它实际上并没有以 C 库可以读取的方式设置文本域,但是locale可以(通过调用 libc)。只要完成了,GtkBuilder 就已经按照您要求的方式工作了。
归档时间: |
|
查看次数: |
1278 次 |
最近记录: |