С помощью gettext
вы можете либо использовать системный -каталог локали по умолчанию, либо указать его самостоятельно, используя bindtextdomain
. Это полезно при запуске программы непосредственно из исходного кода, когда скомпилированные файлы перевода.mo недоступны в расположении системы по умолчанию.
В Python вы бы сделали это :
import gettext
from gettext import gettext as _
gettext.bindtextdomain('nautilus-image-manipulator', '/path/to/mo/folder')
gettext.textdomain('nautilus-image-manipulator')
, где /path/to/mo/folder
содержит знакомую структуру fr/LC_MESSAGES/nautilus-image-manipulator.mo
. Подобные вызовы:
print _("Delete this profile")
возвращают правильно переведенную строку из локальных файлов.mo , большое спасибо.
В GTK+2/pygtk существовалgtk.glade.bindtextdomain
, но мне интересно, есть ли эквивалент в GTK+3/PyGObject.
Чтобы дать вам конкретный пример, вот как Пользовательский интерфейс Nautilus Image Manipulator создается из его файла Glade:
from gi.repository import Gtk
builder = Gtk.Builder()
builder.set_translation_domain('nautilus-image-manipulator')
builder.add_from_file(ui_filename)
return builder
Части пользовательского интерфейса, которые не созданы из файла Glade (, т.е. набор из кода )отображается правильно переведенным, но строки из файла Glade по-прежнему отображаются на английском языке.
Мне кажется, что я пропускаю вызов какого-то builder.bind_text_domain('nautilus-image-manipulator', '/path/to/mo/folder')
перед вызовом builder.set_translation_domain
... Есть идеи, как это сделать?