Создание апплета GNOME


Многоязычное окружение


Для "апплета на коленке" допустимо, чтобы он работал только на языке создателя. Если же есть желание показать апплет хотя бы одному другу, то резонно задуматься о работе в многоязычном окружении. Стандартный инструмент для таких вещей - GNU gettext. В Python есть его поддержка. Во время разработки программы особо ничего не меняется, лишь у каждой строки, которую нужно перевести, появляется "обертка" _().

В нашем случае, нужно переводить: всплывающие подсказки (в методе set_visual_state) и название программы, ее описание (в методе on_ppm_about). Делаем: import gettext gettext.install('proxyswitcher', unicode=True)

[...] def set_visual_state(self, state, is_on): """Set overall visual state for corresponding proxy's state""" msg_on_state = _(u"Proxy is on") msg_off_state = _(u"Proxy is off") mode = _(u"mode: %s") % state variant = (is_on and msg_on_state) or msg_off_state self.info = u"%s (%s)" % (variant, mode) self._set_image(is_on)

def on_ppm_about(self, event, data=None): """Callback for pop-up menu item 'About', show About dialog"""

pixbuf_logo = self.theme.load_icon('proxy', 80, gtk.ICON_LOOKUP_FORCE_SVG) msg_applet_name = _("Proxy switcher") msg_applet_description = _("Applet for turning proxy on/off") gnome.ui.About(msg_applet_name, __version__, __license__, msg_applet_description, [__author__,], # programming None, # documentation None, # translating pixbuf_logo, ).show()

Первым параметром в gettext.install идет название домена переводов - обычно совпадает с именем программы.

Отмечу один момент: в случае использования подстановок в строки стоит избегать конструкций _(u"some string %s with subst" % value) по той причине, что при извлечении строк для перевода, будет извлечена строка u"some string %s with subst", а во время работы программы будет искаться перевод для строки с уже подставленным значением value, поэтому лучше вынести операцию подстановки значения "за скобки", т.е. _(u"some string %s with subs") % value.




- Начало -  - Назад -  - Вперед -