November 22, 2009

PyGTK a preklad GUI pre Windows

PyGTK je výborné rozšírenie Pythonu, ktoré umožňuje pracovať s GTK GUI. Pekne to funguje aj pod Windows. Dôkazom je napríklad aplikácia Srobick.

No, všetko by bolo dobré, keby som si v jednej rozmarnej chvíli nebol zmyslel, že chcem preložené GUI. Zobral som GUI designér Glade. Prepísal som GUI do angličtiny. Vygeneroval som si prekladové súbory. Pomocou PoEditu som ich preložil. Podľa návodu som pridal set_translation_domain. Pod Linuxom to pekne chodilo. Spustím pod Windows a ajhľa. How do you jodlajdú. Všetko v angličtine.

Prebrázdil som celý internet. Od jedného konca, po druhý. Nič. Skúsil som dokonca nastavovanie systémových premenných pomocou kernel balíku a nič. Proste zúfalstvo.

Väčšina návodov je zastaralých a počíta s gtk.glade, ktorý sa už v nových verziách nenachádza. Tu je drobná finta, ako dostať preklad do chodu. Jednoducho preiterujete všetky objekty a spustíte na nich prekladovú funkciu.

Príklad na preklad tooltipov:

class GuiBuilder(gtk.Builder):
   """
   Fix for GTK builder and translation.
   Inspired by: http://old.nabble.com/gtk.Builder-and-translation-directory-td22351164.html
   """
   def translate(self):
     for obj in self.get_objects():
       # Translate tooltips
       try:
         if obj.get_has_tooltip():
          obj.set_tooltip_markup(_(obj.get_tooltip_markup()))
       except:
         pass

V kóde potom načítavanie GUI vyzerá nasledovne:

import GuiBuilder
wt = GuiBuilder()
#wt.set_translation_domain(domain = AppName)
wt.add_from_file(gui)
wt.connect_signals(self)
wt.translate()

A dôležitá informácia na záver. Na stránkach PyGTK nájdete len verziu 2.12 pre Windows, pričom pre Linux sa používa 2.16. Novší build pre Windows je tu: OptionExplicit.be