С помощью 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; s пользовательский интерфейс создается из файла 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
... Любая идея, как это сделать?