From cbe66667fa129ccaca7737d0b950271c1b694159 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Mon, 8 Aug 2011 20:23:35 +0200 Subject: Preliminary support for internationalization, and fix a stupid bug related to toolbar. --- gui.py | 127 +++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 76 insertions(+), 51 deletions(-) diff --git a/gui.py b/gui.py index 162f3f0..5b5bf54 100644 --- a/gui.py +++ b/gui.py @@ -7,8 +7,9 @@ import gtk import gobject -import os +import gettext import logging +import os import xml.sax from lib import mat @@ -16,6 +17,9 @@ from lib import mat __version__ = '0.1' __author__ = 'jvoisin' +t = gettext.translation('gui', 'locale', fallback=True) +_ = t.ugettext + logging.basicConfig(level=mat.LOGGING_LEVEL) @@ -73,7 +77,7 @@ class ListStoreApp: content.add(treeview) self.statusbar = gtk.Statusbar() - self.statusbar.push(1, 'Ready') + self.statusbar.push(1, _('Ready')) vbox.pack_start(self.statusbar, False, False, 0) self.window.show_all() @@ -85,31 +89,32 @@ class ListStoreApp: toolbar = gtk.Toolbar() toolbutton = gtk.ToolButton(gtk.STOCK_ADD) - toolbutton.set_label('Add') + toolbutton.set_label(_('Add')) toolbutton.connect('clicked', self.add_files) - toolbutton.set_tooltip_text('Add files') + toolbutton.set_tooltip_text(_('Add files')) toolbar.add(toolbutton) toolbutton = gtk.ToolButton(gtk.STOCK_PRINT_REPORT) - toolbutton.set_label('Clean') + toolbutton.set_label(_('Clean')) toolbutton.connect('clicked', self.process_files, self.mat_clean) - toolbutton.set_tooltip_text('Clean selected files without data loss') + toolbutton.set_tooltip_text(_('Clean selected files without data loss')) toolbar.add(toolbutton) toolbutton = gtk.ToolButton(gtk.STOCK_PRINT_WARNING) - toolbutton.set_label('Brute Clean') + toolbutton.set_label(_('Brute Clean')) toolbutton.connect('clicked', self.mat_clean_dirty) - toolbutton.set_tooltip_text('Clean selected files with possible data \ -loss') + toolbutton.set_tooltip_text(_('Clean selected files with possible \ +data loss')) toolbar.add(toolbutton) toolbutton = gtk.ToolButton(gtk.STOCK_FIND) - toolbutton.set_label('Check') + toolbutton.set_label(_('Check')) toolbutton.connect('clicked', self.process_files, self.mat_check) - toolbutton.set_tooltip_text('Check selected files for harmful meta') + toolbutton.set_tooltip_text(_('Check selected files for harmful meta')) toolbar.add(toolbutton) toolbutton = gtk.ToolButton(stock_id=gtk.STOCK_QUIT) + toolbutton.set_label(_('Quit')) toolbutton.connect('clicked', gtk.main_quit) toolbar.add(toolbutton) @@ -121,7 +126,7 @@ loss') ''' Create the columns, and add them to the treeview ''' - colname = ['Filename', 'Mimetype', 'State'] + colname = [_('Filename'), _('Mimetype'), _('State')] for i, j in enumerate(colname): filename_column = gtk.CellRendererText() @@ -141,7 +146,7 @@ loss') picture.set_from_stock(pix, gtk.ICON_SIZE_MENU) item.set_image(picture) item.set_label(name) - item.connect('activate', self.process_files, func) + item.connect('activate', func) menu.append(item) def create_sub_menu(self, name, menubar): @@ -161,34 +166,52 @@ loss') ''' menubar = gtk.MenuBar() - file_menu = self.create_sub_menu('Files', menubar) - self.create_menu_item('Add files', self.add_files, file_menu, + file_menu = self.create_sub_menu(_('Files'), menubar) + self.create_menu_item(_('Add files'), self.add_files, file_menu, gtk.STOCK_ADD) - self.create_menu_item('Quit', gtk.main_quit, file_menu, + self.create_menu_item(_('Quit'), gtk.main_quit, file_menu, gtk.STOCK_QUIT) - edit_menu = self.create_sub_menu('Edit', menubar) - self.create_menu_item('Clear the filelist', + edit_menu = self.create_sub_menu(_('Edit'), menubar) + self.create_menu_item(_('Clear the filelist'), lambda x: self.liststore.clear(), edit_menu, gtk.STOCK_REMOVE) - self.create_menu_item('Preferences', self.preferences, edit_menu, + self.create_menu_item(_('Preferences'), self.preferences, edit_menu, gtk.STOCK_PREFERENCES) - clean_menu = self.create_sub_menu('Clean', menubar) - self.create_menu_item('Clean', self.mat_clean, clean_menu, - gtk.STOCK_PRINT_REPORT) - self.create_menu_item('Clean (lossy way)', self.mat_clean_dirty, - clean_menu, gtk.STOCK_PRINT_WARNING) - self.create_menu_item('Check', self.mat_check, clean_menu, - gtk.STOCK_FIND) + process_menu = self.create_sub_menu(_('Process'), menubar) + item = gtk.ImageMenuItem() + picture = gtk.Image() + picture.set_from_stock(gtk.STOCK_PRINT_REPORT, gtk.ICON_SIZE_MENU) + item.set_image(picture) + item.set_label(_('Clean')) + item.connect('activate', self.process_files, self.mat_clean) + process_menu.append(item) + + item = gtk.ImageMenuItem() + picture = gtk.Image() + picture.set_from_stock(gtk.STOCK_PRINT_WARNING, gtk.ICON_SIZE_MENU) + item.set_image(picture) + item.set_label(_('Clean (lossy way)')) + item.connect('activate', self.process_files, self.mat_clean_dirty) + process_menu.append(item) + + item = gtk.ImageMenuItem() + picture = gtk.Image() + picture.set_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_MENU) + item.set_image(picture) + item.set_label(_('Check')) + item.connect('activate', self.process_files, self.mat_check) + process_menu.append(item) + - help_menu = self.create_sub_menu('Help', menubar) - self.create_menu_item('Supported formats', self.supported, help_menu, + help_menu = self.create_sub_menu(_('Help'), menubar) + self.create_menu_item(_('Supported formats'), self.supported, help_menu, gtk.STOCK_INFO) self.create_menu_item('About', self.about, help_menu, gtk.STOCK_ABOUT) return menubar - def add_files(self, _): + def add_files(self, button): ''' Add the files chosed by the filechoser ("Add" button) ''' @@ -222,12 +245,12 @@ loss') Append selected files by add_file to the self.liststore ''' for filename in filenames: # filenames : all selected files/folders - if os.path.isdir(filename): # directory + if os.path.isdir(filename): # if "filename" is a directory for root, dirs, files in os.walk(filename): for item in files: path_to_file = os.path.join(root, item) self.add_file_to_treeview(path_to_file) - else: + else: # filename is a regular file self.add_file_to_treeview(filename) yield True yield False @@ -242,7 +265,7 @@ loss') cf.file.mime, 'unknow']) - def about(self, _): + def about(self, button): ''' About popup ''' @@ -258,7 +281,7 @@ loss') if click: w.destroy() - def supported(self, _): + def supported(self, button): ''' List the supported formats ''' @@ -281,7 +304,8 @@ loss') for item in handler.list: # list of dict : one dict per format #create one expander per format title = '%s (%s)' % (item['name'], item['extension']) - support = '\tsupport : ' + item['support'] + support = ('\t%s : %s' % (_('support'), item['support'])) + #support = '\tsupport : ' + item['support'] metadata = '\n\tmetadata : ' + item['metadata'] method = '\n\tmethod : ' + item['method'] content = support + metadata + method @@ -299,11 +323,11 @@ loss') if click is 0: # Close dialog.destroy() - def preferences(self, _): + def preferences(self, button): ''' Preferences popup ''' - dialog = gtk.Dialog('Preferences', self.window, 0, (gtk.STOCK_OK, 0)) + dialog = gtk.Dialog(_('Preferences'), self.window, 0, (gtk.STOCK_OK, 0)) hbox = gtk.HBox() dialog.get_content_area().pack_start(hbox, False, False, 0) @@ -314,24 +338,25 @@ loss') table = gtk.Table(3, 2, False) # nb rows, nb lines hbox.pack_start(table, True, True, 0) - force = gtk.CheckButton('Force Clean', False) + force = gtk.CheckButton(_('Force Clean'), False) force.set_active(self.force) force.connect('toggled', self.invert, 'force') - force.set_tooltip_text('Do not check if already clean before cleaning') + force.set_tooltip_text(_('Do not check if already clean before \ +cleaning')) table.attach(force, 0, 1, 0, 1) - backup = gtk.CheckButton('Backup', False) + backup = gtk.CheckButton(_('Backup'), False) backup.set_active(self.backup) backup.connect('toggled', self.invert, 'backup') - backup.set_tooltip_text('Keep a backup copy') + backup.set_tooltip_text(_('Keep a backup copy')) table.attach(backup, 0, 1, 1, 2) - add2archive = gtk.CheckButton('Add unsupported file to archives', + add2archive = gtk.CheckButton(_('Add unsupported file to archives'), False) add2archive.set_active(self.add2archive) add2archive.connect('toggled', self.invert, 'add2archive') - add2archive.set_tooltip_text('Add non-supported (and so \ -non-anonymised) file to outputed archive') + add2archive.set_tooltip_text(_('Add non-supported (and so \ +non-anonymised) file to outputed archive')) table.attach(add2archive, 0, 1, 2, 3) hbox.show_all() @@ -366,9 +391,9 @@ non-anonymised) file to outputed archive') ''' for line in iterator: # for each file in selection if self.liststore[line][0].file.is_clean(): - string = 'clean' + string = _('clean') else: - string = 'dirty' + string = _('dirty') logging.info('%s is %s' % (self.liststore[line][1], string)) self.liststore[line][3] = string yield True @@ -380,10 +405,10 @@ non-anonymised) file to outputed archive') ''' for line in iterator: # for each file in selection logging.info('Cleaning %s' % self.liststore[line][1]) - if self.liststore[line][3] is not 'clean': + if self.liststore[line][3] is not _('clean'): if self.force or not self.liststore[line][0].file.is_clean(): self.liststore[line][0].file.remove_all() - self.liststore[line][3] = 'clean' + self.liststore[line][3] = _('clean') yield True yield False @@ -393,10 +418,10 @@ non-anonymised) file to outputed archive') ''' for line in iterator: # for each file in selection logging.info('Cleaning (lossy way) %s' % self.liststore[line][1]) - if self.liststore[line][3] is not 'clean': + if self.liststore[line][3] is not _('clean'): if self.force or not self.liststore[line][0].file.is_clean(): self.liststore[line][0].file.remove_all_ugly() - self.liststore[line][3] = 'clean' + self.liststore[line][3] = _('clean') yield True yield False @@ -522,8 +547,8 @@ class TreeViewTooltips(object): ''' add a gtk.TreeView to the tooltip ''' - view.connect("motion-notify-event", self.__motion_handler) - view.connect("leave-notify-event", lambda i, j: self.__hide()) + view.connect('motion-notify-event', self.__motion_handler) + view.connect('leave-notify-event', lambda i, j: self.__hide()) def get_tooltip(self, view, column, path): ''' -- cgit v1.3