# HG changeset patch # User Erik Grinaker # Date 1153581764 0 # Node ID f7e311e828af5468809a20d3ea41b96a50d5b299 # Parent 86a195045ce4a7339217a7abfbb92a3441cf9334 initial translation infrastructure diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 Makefile.am --- a/Makefile.am Sat Jul 22 12:56:21 2006 +0000 +++ b/Makefile.am Sat Jul 22 15:22:44 2006 +0000 @@ -6,7 +6,7 @@ # AUTOMAKE_OPTIONS = dist-bzip2 no-dist-gzip -SUBDIRS = data src +SUBDIRS = data po src dist-hook: svn2cl.sh\ diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 NEWS --- a/NEWS Sat Jul 22 12:56:21 2006 +0000 +++ b/NEWS Sat Jul 22 15:22:44 2006 +0000 @@ -2,29 +2,26 @@ ============================ New features: +- translation support - ported to gtk+ 2.8 and gnome 2.10 +- use mlock() to ensure memory is never swapped to disk - cleaned up preferences dialog +- only show Revelation files by default in open and save dialogs Bugfixes: - improved error detection during file saving -- ensure memory is never swapped out to disk - handle errors while loading icons [Wade Berrier] - password generator now always avoids ambiguous characters - password checker and generator follow "show passwords" preference +- don't use passwords in default goto commands - HIG fixes -- don't use passwords in default goto commands -- only show Revelation files by default in open and save dialogs -- added note to lock dialog when quit disabled due to unsaved changes -- removed the Help > Homepage menu item Code changes: - depend on pygtk 2.8 and gnome-python 2.10 - improved build scripts - generate ChangeLog from subversion log during make dist -- added mman module - removed gnomemisc module - don't use deprecated gnome-python modules -- moved preference dialog from dialog module to main script 2006-02-06: Revelation 0.4.7 diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 TODO --- a/TODO Sat Jul 22 12:56:21 2006 +0000 +++ b/TODO Sat Jul 22 15:22:44 2006 +0000 @@ -7,6 +7,7 @@ - check errors when opening files from dav:// urls - port HIG-improvements from sputnik - detect XDG prefix and install mime/icons to correct dir +- restructure the configuration layout 0.6.x: - ensure complete UTF-8 support @@ -28,10 +29,7 @@ - file merging (union - this *really* need unique entry ids) - sorting of the tree - add a dropdown widget for list fields (like email protocol etc) -- restructure the configuration layout - recent docs -- string cleanups -- translations - add import/export of GPasMan files - add import/export of zsafe files - add import/export of gnukeyring files diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 acinclude.m4 --- a/acinclude.m4 Sat Jul 22 12:56:21 2006 +0000 +++ b/acinclude.m4 Sat Jul 22 15:22:44 2006 +0000 @@ -67,6 +67,15 @@ AM_GCONF_SOURCE_2 ]) +AC_DEFUN([RVL_GETTEXT], [ + GETTEXT_PACKAGE="revelation" + IT_PROG_INTLTOOL([0.35.0]) + + AC_SUBST(GETTEXT_PACKAGE) + AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The gettext package]) + AM_GLIB_GNU_GETTEXT +]) + AC_DEFUN([RVL_MMAN], [ AC_CHECK_FUNCS(mlockall munlockall) ]) diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 configure.ac --- a/configure.ac Sat Jul 22 12:56:21 2006 +0000 +++ b/configure.ac Sat Jul 22 15:22:44 2006 +0000 @@ -8,13 +8,14 @@ AC_PREREQ(2.53) AC_INIT(src/revelation.in) AM_INIT_AUTOMAKE(revelation, 0.4.7) - +ALL_LINGUAS="nb" dnl check for dependencies AC_PROG_CC() RVL_PYTHON_PATH(2.3) RVL_PYGTK() +RVL_GETTEXT() RVL_CRACKLIB() RVL_MMAN() RVL_GCONF() @@ -46,6 +47,7 @@ data/icons/scalable/Makefile data/mime/Makefile data/ui/Makefile + po/Makefile.in src/Makefile src/lib/Makefile src/lib/datahandler/Makefile diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 po/POTFILES.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/POTFILES.in Sat Jul 22 15:22:44 2006 +0000 @@ -0,0 +1,1 @@ +src/revelation.in diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 po/nb.po --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/po/nb.po Sat Jul 22 15:22:44 2006 +0000 @@ -0,0 +1,584 @@ +# Norwegian translation of Revelation. +# Copyright (C) 2006 Erik Grinaker +# This file is distributed under the same license as the Revelation package. +# Erik Grinaker , 2006. +# , fuzzy +# +# +msgid "" +msgstr "" +"Project-Id-Version: Revelation 0.4.7\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2006-07-22 16:10+0200\n" +"PO-Revision-Date: 2006-07-22 17:15+0200\n" +"Last-Translator: Erik Grinaker \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit" + +#: src/revelation.in:62 +msgid "Missing data files" +msgstr "Manglende datafiler" + +#: src/revelation.in:62 +msgid "" +"Some of Revelations system files could not be found, please reinstall " +"Revelation." +msgstr "Noen av Revelations system-files ble ikke funnet - prøv å installere programmet på nytt." + +#: src/revelation.in:66 +msgid "Missing configuration data" +msgstr "Manglende innstillinger" + +#: src/revelation.in:66 +msgid "" +"Revelation could not find its configuration data, please reinstall " +"Revelation." +msgstr "Revelation fant ikke innstillingene sine - prøv å innstallere på nytt." + +#: src/revelation.in:70 +msgid "Invalid data files" +msgstr "Ugyldige data-filer" + +#: src/revelation.in:70 +msgid "" +"Some of Revelations system files contain invalid data, please reinstall " +"Revelation." +msgstr "Noen av systemfilene til Revelation inneholder ugyldige data - installer programmet på nytt." + +#: src/revelation.in:347 +msgid "New file" +msgstr "Ny fil" + +#: src/revelation.in:360 +msgid "_Undo" +msgstr "_Angre" + +#: src/revelation.in:363 +#, python-format +msgid "_Undo %s" +msgstr "_Angre %s" + +#: src/revelation.in:371 +msgid "_Redo" +msgstr "" + +#: src/revelation.in:374 +#, python-format +msgid "_Redo %s" +msgstr "" + +#: src/revelation.in:464 src/revelation.in:1341 +msgid "Open cancelled" +msgstr "Åpning avbrutt" + +#: src/revelation.in:823 +#, python-format +msgid "Match found for '%s'" +msgstr "Fant treff for '%s'" + +#: src/revelation.in:826 +#, python-format +msgid "No match found for '%s'" +msgstr "Ingen treff funnet for '%s'" + +#: src/revelation.in:827 +msgid "No match found" +msgstr "Ingen treff funnet" + +#: src/revelation.in:827 +#, python-format +msgid "" +"The string '%s' does not match any entries. Try searching for a different " +"phrase." +msgstr "Ingen oppføringer inneholdt teksten '%s'. Prøv å søke med en annen tekst." + +#: src/revelation.in:859 +msgid "Incorrect password" +msgstr "Galt passord" + +#: src/revelation.in:859 +#, python-format +msgid "The password you entered for the file '%s' was not correct." +msgstr "Passordet du ga for filen '%s' var ikke riktig." + +#: src/revelation.in:862 src/revelation.in:866 src/revelation.in:870 +#: src/revelation.in:874 src/revelation.in:878 +msgid "Open failed" +msgstr "Åpning feilet" + +#: src/revelation.in:863 +msgid "Invalid file format" +msgstr "Ugyldig filformat" + +#: src/revelation.in:863 +#, python-format +msgid "The file '%s' contains invalid data." +msgstr "Filen '%s' inneholder ugyldige data." + +#: src/revelation.in:867 +msgid "Unknown data" +msgstr "Ukjente data" + +#: src/revelation.in:867 +#, python-format +msgid "" +"The file '%s' contains unknown data. It may have been created by a newer " +"version of Revelation." +msgstr "Filen '%s' inneholder ukjente data - den kan ha blitt lagret av en nyere versjon av Revelation." + +#: src/revelation.in:871 +msgid "Unknown data version" +msgstr "Ukjent data-versjon" + +#: src/revelation.in:871 +#, python-format +msgid "" +"The file '%s' has a future version number, please upgrade Revelation to open " +"it." +msgstr "Filen '%s' har et nyere versjonsnummer - oppgrader programmet for å åpne den." + +#: src/revelation.in:875 +msgid "Unable to detect filetype" +msgstr "Kunne ikke gjenkjenne filtype" + +#: src/revelation.in:875 +#, python-format +msgid "" +"The file type of the file '%s' could not be automatically detected. Try " +"specifying the file type manually." +msgstr "Filtypen for filen '%s' ble ikke gjenkjent. Prøv å velge en filtype manuelt." + +#: src/revelation.in:879 +msgid "Unable to open file" +msgstr "Kunne ikke åpne filen" + +#: src/revelation.in:879 +#, python-format +msgid "" +"The file '%s' could not be opened. Make sure that the file exists, and that " +"you have permissions to open it." +msgstr "Filen '%s' kunne ikke åpnes. Sjekk at filen finnes, og at du har tilstrekkelige rettigheter til å lese den." + +#: src/revelation.in:920 +msgid "Entry has no password to copy" +msgstr "Oppføringen har ikke noe passord å kopiere" + +#: src/revelation.in:924 +msgid "Password copied to clipboard" +msgstr "Passord kopiert til utklippstavlen" + +#: src/revelation.in:931 +msgid "Entries copied" +msgstr "Oppføringer kopiert" + +#: src/revelation.in:953 +msgid "Cut entries" +msgstr "" + +#: src/revelation.in:960 +msgid "Entries cut" +msgstr "Oppføringer klippet" + +#: src/revelation.in:975 +msgid "Paste entries" +msgstr "" + +#: src/revelation.in:982 +msgid "Entries pasted" +msgstr "" + +#: src/revelation.in:990 +msgid "Add Entry" +msgstr "" + +#: src/revelation.in:997 +msgid "Add entry" +msgstr "" + +#: src/revelation.in:1003 +msgid "Entry added" +msgstr "" + +#: src/revelation.in:1006 +msgid "Add entry cancelled" +msgstr "" + +#: src/revelation.in:1019 +msgid "Edit Folder" +msgstr "" + +#: src/revelation.in:1022 +msgid "Edit Entry" +msgstr "" + +#: src/revelation.in:1031 +msgid "Update entry" +msgstr "" + +#: src/revelation.in:1036 +msgid "Entry updated" +msgstr "" + +#: src/revelation.in:1039 +msgid "Edit entry cancelled" +msgstr "" + +#: src/revelation.in:1055 +msgid "Add Folder" +msgstr "" + +#: src/revelation.in:1060 +msgid "Add folder" +msgstr "" + +#: src/revelation.in:1066 +msgid "Folder added" +msgstr "" + +#: src/revelation.in:1069 +msgid "Add folder cancelled" +msgstr "" + +#: src/revelation.in:1083 +#, python-format +msgid "No goto command found for %s entries" +msgstr "" + +#: src/revelation.in:1106 +msgid "Entry opened" +msgstr "" + +#: src/revelation.in:1109 +msgid "Invalid goto command format" +msgstr "" + +#: src/revelation.in:1109 +#, python-format +msgid "" +"The goto command for '%s' entries is invalid, please correct it in the " +"preferences." +msgstr "" + +#: src/revelation.in:1112 +msgid "Missing entry data" +msgstr "" + +#: src/revelation.in:1112 +#, python-format +msgid "The entry '%s' does not have all the data required to open it." +msgstr "" + +#: src/revelation.in:1133 +msgid "Move entry" +msgstr "" + +#: src/revelation.in:1141 +msgid "Entries moved" +msgstr "" + +#: src/revelation.in:1168 +msgid "Remove entry" +msgstr "" + +#: src/revelation.in:1174 +msgid "Entries removed" +msgstr "" + +#: src/revelation.in:1177 +msgid "Entry removal cancelled" +msgstr "" + +#: src/revelation.in:1191 +msgid "Password changed" +msgstr "" + +#: src/revelation.in:1194 +msgid "Password change cancelled" +msgstr "" + +#: src/revelation.in:1212 +#, python-format +msgid "Data exported to %s" +msgstr "" + +#: src/revelation.in:1215 +msgid "Export cancelled" +msgstr "" + +#: src/revelation.in:1218 +msgid "Unable to write to file" +msgstr "" + +#: src/revelation.in:1218 src/revelation.in:1365 +#, python-format +msgid "" +"The file '%s' could not be opened for writing. Make sure that you have the " +"proper permissions to write to it." +msgstr "" + +#: src/revelation.in:1219 +msgid "Export failed" +msgstr "" + +#: src/revelation.in:1235 +msgid "Import data" +msgstr "" + +#: src/revelation.in:1239 +#, python-format +msgid "Data imported from %s" +msgstr "" + +#: src/revelation.in:1244 +msgid "Import cancelled" +msgstr "" + +#: src/revelation.in:1267 +msgid "Locked" +msgstr "Låst" + +#: src/revelation.in:1268 +msgid "File locked" +msgstr "Filen er låst" + +#: src/revelation.in:1279 +msgid "Quit disabled due to unsaved changes" +msgstr "" + +#: src/revelation.in:1292 +msgid "File unlocked" +msgstr "" + +#: src/revelation.in:1311 +msgid "New file created" +msgstr "" + +#: src/revelation.in:1314 +msgid "New file cancelled" +msgstr "" + +#: src/revelation.in:1338 +#, python-format +msgid "Opened file %s" +msgstr "" + +#: src/revelation.in:1356 +#, python-format +msgid "Data saved to file %s" +msgstr "" + +#: src/revelation.in:1361 +msgid "Save cancelled" +msgstr "" + +#: src/revelation.in:1365 +msgid "Unable to save file" +msgstr "" + +#: src/revelation.in:1366 +msgid "Save failed" +msgstr "" + +#: src/revelation.in:1406 +msgid "Quit cancelled" +msgstr "" + +#: src/revelation.in:1419 +#, python-format +msgid "%s redone" +msgstr "" + +#: src/revelation.in:1453 +#, python-format +msgid "%s undone" +msgstr "" + +#: src/revelation.in:1462 +msgid "Preferences" +msgstr "Innstillinger" + +#: src/revelation.in:1469 +msgid "General" +msgstr "Generelt" + +#: src/revelation.in:1473 +msgid "Interface" +msgstr "Grensesnitt" + +#: src/revelation.in:1477 src/revelation.in:1564 +msgid "Goto Commands" +msgstr "" + +#: src/revelation.in:1486 +msgid "Doubleclick Action" +msgstr "Dobbelklikk-handling" + +#: src/revelation.in:1489 +msgid "Go to account, if possible" +msgstr "" + +#: src/revelation.in:1492 +msgid "" +"Go to the account (open in external application) on doubleclick, if required " +"data is filled in" +msgstr "" + +#: src/revelation.in:1496 +msgid "Edit account" +msgstr "" + +#: src/revelation.in:1499 +msgid "Edit the account on doubleclick" +msgstr "" + +#: src/revelation.in:1503 +msgid "Copy password to clipboard" +msgstr "" + +#: src/revelation.in:1506 +msgid "Copy the account password to clipboard on doubleclick" +msgstr "" + +#: src/revelation.in:1513 +msgid "Files" +msgstr "Filer" + +#: src/revelation.in:1516 +msgid "Open file on startup:" +msgstr "" + +#: src/revelation.in:1520 +msgid "When enabled, this file will be opened when the program is started" +msgstr "" + +#: src/revelation.in:1522 +msgid "Select File to Automatically Open" +msgstr "" + +#: src/revelation.in:1527 +msgid "File to open when Revelation is started" +msgstr "" + +#: src/revelation.in:1535 +msgid "Automatically save data when changed" +msgstr "" + +#: src/revelation.in:1538 +msgid "" +"Automatically save the data file when an entry is added, modified or removed" +msgstr "" + +#: src/revelation.in:1542 +msgid "Lock file when inactive for" +msgstr "" + +#: src/revelation.in:1545 +msgid "Automatically lock the data file after a period of inactivity" +msgstr "" + +#: src/revelation.in:1551 +msgid "The period of inactivity before locking the file, in minutes" +msgstr "" + +#: src/revelation.in:1557 +msgid "minutes" +msgstr "" + +#: src/revelation.in:1575 +#, python-format +msgid "" +"Goto command for %s accounts. The following expansion variables can be used:" +msgstr "" + +#: src/revelation.in:1581 +#, python-format +msgid "%%: a % sign" +msgstr "" + +#: src/revelation.in:1582 +msgid "%?x: optional expansion variable" +msgstr "" + +#: src/revelation.in:1583 +msgid "%(...%): optional substring expansion" +msgstr "" + +#: src/revelation.in:1592 +msgid "Passwords" +msgstr "Passord" + +#: src/revelation.in:1595 +msgid "Display passwords and other secrets" +msgstr "" + +#: src/revelation.in:1598 +msgid "" +"Display passwords and other secrets, such as PIN codes (otherwise, hide with " +"******)" +msgstr "" + +#: src/revelation.in:1602 +msgid "Also copy username when copying password" +msgstr "" + +#: src/revelation.in:1605 +msgid "" +"When the password is copied to clipboard, put the username before the " +"password as a clipboard \"chain\"" +msgstr "" + +#: src/revelation.in:1613 +msgid "" +"The number of characters in generated passwords - 8 or more are recommended" +msgstr "" + +#: src/revelation.in:1614 +msgid "Length of generated passwords" +msgstr "" + +#: src/revelation.in:1620 +msgid "Toolbar Style" +msgstr "Verktøylinje" + +#: src/revelation.in:1623 +msgid "Use desktop default" +msgstr "Bruk standard" + +#: src/revelation.in:1626 +msgid "Show toolbar items with default style" +msgstr "" + +#: src/revelation.in:1630 +msgid "Show icons and text" +msgstr "Vis ikoner og tekst" + +#: src/revelation.in:1633 +msgid "Show toolbar items with both icons and text" +msgstr "" + +#: src/revelation.in:1637 +msgid "Show icons and important text" +msgstr "Vis ikoner og viktig tekst" + +#: src/revelation.in:1640 +msgid "Show toolbar items with text beside important icons" +msgstr "" + +#: src/revelation.in:1644 +msgid "Show icons only" +msgstr "Vis kun ikoner" + +#: src/revelation.in:1647 +msgid "Show toolbar items with icons only" +msgstr "" + +#: src/revelation.in:1651 +msgid "Show text only" +msgstr "Vis kun tekst" + +#: src/revelation.in:1654 +msgid "Show toolbar items with text only" +msgstr "" + diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 src/lib/Makefile.am --- a/src/lib/Makefile.am Sat Jul 22 12:56:21 2006 +0000 +++ b/src/lib/Makefile.am Sat Jul 22 15:22:44 2006 +0000 @@ -26,6 +26,7 @@ config.py: config.py.in sed \ -e "s|\@GCONFTOOL\@|$(GCONFTOOL)|" \ + -e "s|\@PACKAGE\@|$(PACKAGE)|" \ -e "s|\@VERSION\@|$(VERSION)|" \ -e "s|\@datadir\@|$(datadir)|" \ -e "s|\@pkgdatadir\@|$(pkgdatadir)|" \ diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 src/lib/config.py.in --- a/src/lib/config.py.in Sat Jul 22 12:56:21 2006 +0000 +++ b/src/lib/config.py.in Sat Jul 22 15:22:44 2006 +0000 @@ -29,11 +29,13 @@ DIR_GCONFSCHEMAS= "@pkgschemadir@" DIR_ICONS = "@datadir@/icons" +DIR_LOCALE = "@datadir@/locale" DIR_UI = "@pkgdatadir@/ui" FILE_GCONFTOOL = "@GCONFTOOL@" APPNAME = "Revelation" +PACKAGE = "@PACKAGE@" VERSION = "@VERSION@" DATAVERSION = 1 RELNAME = "The decision to flee came suddenly" diff -r 86a195045ce4a7339217a7abfbb92a3441cf9334 -r f7e311e828af5468809a20d3ea41b96a50d5b299 src/revelation.in --- a/src/revelation.in Sat Jul 22 12:56:21 2006 +0000 +++ b/src/revelation.in Sat Jul 22 15:22:44 2006 +0000 @@ -22,13 +22,15 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # -import gnome, gobject, gtk, gtk.gdk, os, pwd, sys +import gettext, gnome, gobject, gtk, gtk.gdk, os, pwd, sys if "@pyexecdir@" not in sys.path: sys.path.insert(0, "@pyexecdir@") from revelation import config, data, datahandler, dialog, entry, io, mman, ui, util +_ = gettext.gettext + class Revelation(ui.App): "The Revelation application" @@ -37,6 +39,10 @@ sys.excepthook = self.__cb_exception os.umask(0077) + gettext.bindtextdomain(config.PACKAGE, config.DIR_LOCALE) + gettext.bind_textdomain_codeset(config.PACKAGE, "UTF-8") + gettext.textdomain(config.PACKAGE) + self.program = gnome.init( config.APPNAME, config.APPNAME, gnome.libgnome_module_info_get(), sys.argv, [] @@ -55,15 +61,15 @@ self.__init_states() except IOError: - dialog.Error(self, "Missing data files", "Some of Revelations system files could not be found, please reinstall Revelation.").run() + dialog.Error(self, _(u'Missing data files'), _(u'Some of Revelations system files could not be found, please reinstall Revelation.')).run() sys.exit(1) except config.ConfigError: - dialog.Error(self, "Missing configuration data", "Revelation could not find its configuration data, please reinstall Revelation.").run() + dialog.Error(self, _(u'Missing configuration data'), _(u'Revelation could not find its configuration data, please reinstall Revelation.')).run() sys.exit(1) except ui.DataError: - dialog.Error(self, "Invalid data files", "Some of Revelations system files contain invalid data, please reinstall Revelation.").run() + dialog.Error(self, _(u'Invalid data files'), _(u'Some of Revelations system files contain invalid data, please reinstall Revelation.')).run() sys.exit(1) @@ -140,7 +146,7 @@ # set some variables - self.entrysearch.string = "" + self.entrysearch.string = u'' self.entrysearch.type = None # set ui widget states @@ -340,7 +346,7 @@ os.chdir(os.path.dirname(file)) else: - self.set_title("[New file]") + self.set_title(u'[' + _(u'New file') + u']') def __state_find(self, string): @@ -353,10 +359,10 @@ "Sets states based on undoqueue actions" if undoaction is None: - s, l = False, "_Undo" + s, l = False, _(u'_Undo') else: - s, l = True, "_Undo %s" % undoaction[1].lower() + s, l = True, _(u'_Undo %s') % undoaction[1].lower() action = self.uimanager.get_action("undo") action.set_property("sensitive", s) @@ -364,10 +370,10 @@ if redoaction is None: - s, l = False, "_Redo" + s, l = False, _(u'_Redo') else: - s, l = True, "_Redo %s" % redoaction[1].lower() + s, l = True, _(u'_Redo %s') % redoaction[1].lower() action = self.uimanager.get_action("redo") action.set_property("sensitive", s) @@ -457,7 +463,7 @@ self.file_open(self.datafile.get_file(), self.datafile.get_password()) except dialog.CancelError: - self.statusbar.set_status("Open cancelled") + self.statusbar.set_status(_(u'Open cancelled')) def __cb_file_autolock(self, widget, data = None): @@ -816,11 +822,11 @@ if match != None: self.tree.select(match) - self.statusbar.set_status("Match found for '%s'" % string) + self.statusbar.set_status(_(u'Match found for \'%s\'') % string) else: - self.statusbar.set_status("No match found for '%s'" % string) - dialog.Error(parent, "No match found", "The string '%s' does not match any entries. Try searching for a different phrase." % string).run() + self.statusbar.set_status(_(u'No match found for \'%s\'') % string) + dialog.Error(parent, _(u'No match found'), _(u'The string \'%s\' does not match any entries. Try searching for a different phrase.') % string).run() def __file_autosave(self): @@ -852,27 +858,27 @@ return datafile.load(file, password, lambda: dialog.PasswordOpen(self, os.path.basename(file)).run()) except datahandler.PasswordError: - dialog.Error(self, "Incorrect password", "The password you entered for the file'%s' was not correct." % file).run() + dialog.Error(self, _(u'Incorrect password'), _(u'The password you entered for the file \'%s\' was not correct.') % file).run() except datahandler.FormatError: - self.statusbar.set_status("Open failed") - dialog.Error(self, "Invalid file format", "The file '%s' contains invalid data." % file).run() + self.statusbar.set_status(_(u'Open failed')) + dialog.Error(self, _(u'Invalid file format'), _(u'The file \'%s\' contains invalid data.') % file).run() except ( datahandler.DataError, entry.EntryTypeError, entry.EntryFieldError ): - self.statusbar.set_status("Open failed") - dialog.Error(self, "Unknown data", "The file '%s' contains unknown data. It may have been created by a more recent version of Revelation.." % file).run() + self.statusbar.set_status(_(u'Open failed')) + dialog.Error(self, _(u'Unknown data'), _(u'The file \'%s\' contains unknown data. It may have been created by a newer version of Revelation.') % file).run() except datahandler.VersionError: - self.statusbar.set_status("Open failed") - dialog.Error(self, "Unknown data version", "The file '%s' has a future version number, please upgrade Revelation to open it." % file).run() + self.statusbar.set_status(_(u'Open failed')) + dialog.Error(self, _(u'Unknown data version'), _(u'The file \'%s\' has a future version number, please upgrade Revelation to open it.') % file).run() except datahandler.DetectError: - self.statusbar.set_status("Open failed") - dialog.Error(self, "Unable to detect filetype", "The file type of the file '%s' could not be automatically detected. Try specifying the file type manually." % file).run() + self.statusbar.set_status(_(u'Open failed')) + dialog.Error(self, _(u'Unable to detect filetype'), _(u'The file type of the file \'%s\' could not be automatically detected. Try specifying the file type manually.')% file).run() except IOError: - self.statusbar.set_status("Open failed") - dialog.Error(self, "Unable to open file", "The file '%s' could not be opened. Make sure that the file exists, and that you have permissions to open it." % file).run() + self.statusbar.set_status(_(u'Open failed')) + dialog.Error(self, _(u'Unable to open file'), _(u'The file \'%s\' could not be opened. Make sure that the file exists, and that you have permissions to open it.') % file).run() def __get_common_usernames(self, e = None): @@ -913,18 +919,18 @@ secrets.insert(0, e[entry.UsernameField]) if len(secrets) == 0: - self.statusbar.set_status("Entry has no password to copy") + self.statusbar.set_status(_(u'Entry has no password to copy')) else: self.clipboard.set(secrets, True) - self.statusbar.set_status("Password copied to clipboard") + self.statusbar.set_status(_(u'Password copied to clipboard')) def clip_copy(self, iters): "Copies entries to the clipboard" self.entryclipboard.set(self.entrystore, iters) - self.statusbar.set_status("Entries copied") + self.statusbar.set_status(_(u'Entries copied')) def clip_cut(self, iters): @@ -946,14 +952,14 @@ self.entrystore.remove_entry(iter) self.undoqueue.add_action( - "Cut entries", self.__cb_undo_remove, self.__cb_redo_remove, + _(u'Cut entries'), self.__cb_undo_remove, self.__cb_redo_remove, undoactions ) self.__file_autosave() self.tree.unselect_all() - self.statusbar.set_status("Entries cut") + self.statusbar.set_status(_(u'Entries cut')) def clip_paste(self, entrystore, parent): @@ -968,14 +974,14 @@ paths = [ self.entrystore.get_path(iter) for iter in iters ] self.undoqueue.add_action( - "Paste entries", self.__cb_undo_paste, self.__cb_redo_paste, + _(u'Paste entries'), self.__cb_undo_paste, self.__cb_redo_paste, ( entrystore, self.entrystore.get_path(parent), paths ) ) if len(iters) > 0: self.tree.select(iters[0]) - self.statusbar.set_status("Entries pasted") + self.statusbar.set_status(_(u'Entries pasted')) def entry_add(self, e = None, parent = None, sibling = None): @@ -983,23 +989,23 @@ try: if e == None: - d = dialog.EntryEdit(self, "Add Entry", None, self.config, self.clipboard) + d = dialog.EntryEdit(self, _(u'Add Entry'), None, self.config, self.clipboard) d.set_fieldwidget_data(entry.UsernameField, self.__get_common_usernames()) e = d.run() iter = self.entrystore.add_entry(e, parent, sibling) self.undoqueue.add_action( - "Add entry", self.__cb_undo_add, self.__cb_redo_add, + _(u'Add entry'), self.__cb_undo_add, self.__cb_redo_add, ( self.entrystore.get_path(iter), e.copy() ) ) self.__file_autosave() self.tree.select(iter) - self.statusbar.set_status("Entry added") + self.statusbar.set_status(_(u'Entry added')) except dialog.CancelError: - self.statusbar.set_status("Add entry cancelled") + self.statusbar.set_status(_(u'Add entry cancelled')) def entry_edit(self, iter): @@ -1012,10 +1018,10 @@ e = self.entrystore.get_entry(iter) if type(e) == entry.FolderEntry: - d = dialog.FolderEdit(self, "Edit Folder", e) + d = dialog.FolderEdit(self, _(u'Edit Folder'), e) else: - d = dialog.EntryEdit(self, "Edit Entry", e, self.config, self.clipboard) + d = dialog.EntryEdit(self, _(u'Edit Entry'), e, self.config, self.clipboard) d.set_fieldwidget_data(entry.UsernameField, self.__get_common_usernames(e)) @@ -1024,15 +1030,15 @@ self.tree.select(iter) self.undoqueue.add_action( - "Update entry", self.__cb_undo_edit, self.__cb_redo_edit, + _(u'Update entry'), self.__cb_undo_edit, self.__cb_redo_edit, ( self.entrystore.get_path(iter), e.copy(), n.copy() ) ) self.__file_autosave() - self.statusbar.set_status("Entry updated") + self.statusbar.set_status(_(u'Entry updated')) except dialog.CancelError: - self.statusbar.set_status("Edit entry cancelled") + self.statusbar.set_status(_(u'Edit entry cancelled')) def entry_find(self): @@ -1048,21 +1054,21 @@ try: if e == None: - e = dialog.FolderEdit(self, "Add Folder").run() + e = dialog.FolderEdit(self, _(u'Add Folder')).run() iter = self.entrystore.add_entry(e, parent, sibling) self.undoqueue.add_action( - "Add folder", self.__cb_undo_add, self.__cb_redo_add, + _(u'Add folder'), self.__cb_undo_add, self.__cb_redo_add, ( self.entrystore.get_path(iter), e.copy() ) ) self.__file_autosave() self.tree.select(iter) - self.statusbar.set_status("Folder added") + self.statusbar.set_status(_(u'Folder added')) except dialog.CancelError: - self.statusbar.set_status("Add folder cancelled") + self.statusbar.set_status(_(u'Add folder cancelled')) def entry_goto(self, iters): @@ -1076,7 +1082,7 @@ command = self.config.get("launcher/%s" % e.id) if command in ( "", None ): - self.statusbar.set_status("No goto command found for " + e.typename + " entries") + self.statusbar.set_status(_(u'No goto command found for %s entries') % e.typename) return subst = {} @@ -1099,13 +1105,13 @@ command = util.parse_subst(command, subst) util.execute_child(command) - self.statusbar.set_status("Entry opened") + self.statusbar.set_status(_(u'Entry opened')) except ( util.SubstFormatError, config.ConfigError ): - dialog.Error(self, "Invalid goto command format", "The goto command for '" + e.typename + "' entries is invalid, please correct this in the preferences.").run() + dialog.Error(self, _(u'Invalid goto command format'), _(u'The goto command for \'%s\' entries is invalid, please correct it in the preferences.') % e.typename).run() except util.SubstValueError: - dialog.Error(self, "Missing entry data", "The entry '" + e.name + "' does not have all the data required to go to it.").run() + dialog.Error(self, _(u'Missing entry data'), _(u'The entry \'%s\' does not have all the data required to open it.') % e.name).run() def entry_move(self, sourceiters, parent = None, sibling = None): @@ -1126,7 +1132,7 @@ newiters.append(newiter) self.undoqueue.add_action( - "Move entry", self.__cb_undo_move, self.__cb_redo_move, + _(u'Move entry'), self.__cb_undo_move, self.__cb_redo_move, undoactions ) @@ -1134,7 +1140,7 @@ self.tree.select(newiters[0]) self.__file_autosave() - self.statusbar.set_status("Entries moved") + self.statusbar.set_status(_(u'Entries moved')) def entry_remove(self, iters): @@ -1161,16 +1167,16 @@ self.entrystore.remove_entry(iter) self.undoqueue.add_action( - "Remove entry", self.__cb_undo_remove, self.__cb_redo_remove, + _(u'Remove entry'), self.__cb_undo_remove, self.__cb_redo_remove, undoactions ) self.tree.unselect_all() self.__file_autosave() - self.statusbar.set_status("Entries removed") + self.statusbar.set_status(_(u'Entries removed')) except dialog.CancelError: - self.statusbar.set_status("Entry removal cancelled") + self.statusbar.set_status(_(u'Entry removal cancelled')) def file_change_password(self, password = None): @@ -1184,10 +1190,10 @@ self.entrystore.changed = True self.__file_autosave() - self.statusbar.set_status("Password changed") + self.statusbar.set_status(_(u'Password changed')) except dialog.CancelError: - self.statusbar.set_status("Password change cancelled") + self.statusbar.set_status(_(u'Password change cancelled')) def file_export(self): @@ -1205,14 +1211,14 @@ password = None datafile.save(self.entrystore, file, password) - self.statusbar.set_status("Data exported to %s" % datafile.get_file()) + self.statusbar.set_status(_(u'Data exported to %s') % datafile.get_file()) except dialog.CancelError: - self.statusbar.set_status("Export cancelled") + self.statusbar.set_status(_(u'Export cancelled')) except IOError: - dialog.Error(self, "Unable to write to file", "The file '%s' could not be opened for writing. Make sure that you have the proper permissions to write to it." % file).run() - self.statusbar.set_status("Export failed") + dialog.Error(self, _(u'Unable to write to file'), _(u'The file \'%s\' could not be opened for writing. Make sure that you have the proper permissions to write to it.') % file).run() + self.statusbar.set_status(_(u'Export failed')) def file_import(self): @@ -1228,16 +1234,16 @@ paths = [ self.entrystore.get_path(iter) for iter in newiters ] self.undoqueue.add_action( - "Import data", self.__cb_undo_import, self.__cb_redo_import, + _(u'Import data'), self.__cb_undo_import, self.__cb_redo_import, ( paths, entrystore ) ) - self.statusbar.set_status("Data imported from %s" % datafile.get_file()) + self.statusbar.set_status(_(u'Data imported from %s') % datafile.get_file()) self.__file_autosave() except dialog.CancelError: - self.statusbar.set_status("Import cancelled") + self.statusbar.set_status(_(u'Import cancelled')) def file_lock(self): @@ -1260,8 +1266,8 @@ # clear application contents self.tree.set_model(None) self.entryview.clear() - self.set_title("[Locked]") - self.statusbar.set_status("File locked") + self.set_title('[' + _(u'Locked') + ']') + self.statusbar.set_status(_(u'File locked')) # hide any dialogs for window in transients: @@ -1272,7 +1278,7 @@ d = dialog.PasswordLock(self, password) if self.entrystore.changed == True: - l = ui.ImageLabel("Quit disabled due to unsaved changes", ui.STOCK_WARNING) + l = ui.ImageLabel(_(u'Quit disabled due to unsaved changes'), ui.STOCK_WARNING) d.contents.pack_start(l) d.get_button(1).set_sensitive(False) @@ -1285,7 +1291,7 @@ self.tree.set_model(self.entrystore) self.tree.select(activeiter) self.set_title(oldtitle) - self.statusbar.set_status("File unlocked") + self.statusbar.set_status(_(u'File unlocked')) for window in transients: window.show() @@ -1304,10 +1310,10 @@ self.entrystore.clear() self.datafile.close() self.undoqueue.clear() - self.statusbar.set_status("New file created") + self.statusbar.set_status(_(u'New file created')) except dialog.CancelError: - self.statusbar.set_status("New file cancelled") + self.statusbar.set_status(_(u'New file cancelled')) def file_open(self, file = None, password = None): @@ -1331,10 +1337,10 @@ self.entrystore.changed = False self.undoqueue.clear() - self.statusbar.set_status("Opened file %s" % self.datafile.get_file()) + self.statusbar.set_status(_(u'Opened file %s') % self.datafile.get_file()) except dialog.CancelError: - self.statusbar.set_status("Open cancelled") + self.statusbar.set_status(_(u'Open cancelled')) def file_save(self, file = None, password = None): @@ -1349,17 +1355,17 @@ self.datafile.save(self.entrystore, file, password) self.entrystore.changed = False - self.statusbar.set_status("Data saved to file %s" % file) + self.statusbar.set_status(_(u'Data saved to file %s') % file) return True except dialog.CancelError: - self.statusbar.set_status("Save cancelled") + self.statusbar.set_status(_(u'Save cancelled')) return False except IOError: - dialog.Error(self, "Unable to save file", "The file '%s' could not be opened for writing. Make sure that you have the proper permissions to write to it." % file).run() - self.statusbar.set_status("Save failed") + dialog.Error(self, _(u'Unable to save file'), _(u'The file \'%s\' could not be opened for writing. Make sure that you have the proper permissions to write to it.') % file).run() + self.statusbar.set_status(_('Save failed')) return False @@ -1399,7 +1405,7 @@ return True except dialog.CancelError: - self.statusbar.set_status("Quit cancelled") + self.statusbar.set_status(_(u'Quit cancelled')) return False @@ -1412,7 +1418,7 @@ return self.undoqueue.redo() - self.statusbar.set_status("%s redone" % action[1]) + self.statusbar.set_status(_(u'%s redone') % action[1]) self.__file_autosave() @@ -1446,7 +1452,7 @@ return self.undoqueue.undo() - self.statusbar.set_status("%s undone" % action[1]) + self.statusbar.set_status(_(u'%s undone') % action[1]) self.__file_autosave() @@ -1455,22 +1461,22 @@ "A preference dialog" def __init__(self, parent, cfg): - dialog.Utility.__init__(self, parent, "Preferences") + dialog.Utility.__init__(self, parent, _(u'Preferences')) self.config = cfg self.set_modal(False) self.notebook = ui.Notebook() self.vbox.pack_start(self.notebook) - self.page_general = self.notebook.create_page("General") + self.page_general = self.notebook.create_page(_(u'General')) self.__init_section_files(self.page_general) self.__init_section_password(self.page_general) - self.page_interface = self.notebook.create_page("Interface") + self.page_interface = self.notebook.create_page(_(u'Interface')) self.__init_section_doubleclick(self.page_interface) self.__init_section_toolbar(self.page_interface) - self.page_gotocmd = self.notebook.create_page("Goto Commands") + self.page_gotocmd = self.notebook.create_page(_(u'Goto Commands')) self.__init_section_gotocmd(self.page_gotocmd) self.connect("response", lambda w,d: self.destroy()) @@ -1479,48 +1485,48 @@ def __init_section_doubleclick(self, page): "Sets up the doubleclick section" - self.section_doubleclick = page.add_section("Doubleclick Action") + self.section_doubleclick = page.add_section(_(u'Doubleclick Action')) # radio-button for go to - self.radio_doubleclick_goto = ui.RadioButton(None, "Go to account, if possible") + self.radio_doubleclick_goto = ui.RadioButton(None, _(u'Go to account, if possible')) ui.config_bind(self.config, "behavior/doubleclick", self.radio_doubleclick_goto, "goto") - self.tooltips.set_tip(self.radio_doubleclick_goto, "Go to the account (open in external application) on doubleclick, if required data is filled in") + self.tooltips.set_tip(self.radio_doubleclick_goto, _(u'Go to the account (open in external application) on doubleclick, if required data is filled in')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_goto) # radio-button for edit - self.radio_doubleclick_edit = ui.RadioButton(self.radio_doubleclick_goto, "Edit account") + self.radio_doubleclick_edit = ui.RadioButton(self.radio_doubleclick_goto, _(u'Edit account')) ui.config_bind(self.config, "behavior/doubleclick", self.radio_doubleclick_edit, "edit") - self.tooltips.set_tip(self.radio_doubleclick_edit, "Edit the account on doubleclick") + self.tooltips.set_tip(self.radio_doubleclick_edit, _(u'Edit the account on doubleclick')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_edit) # radio-button for copy - self.radio_doubleclick_copy = ui.RadioButton(self.radio_doubleclick_goto, "Copy password to clipboard") + self.radio_doubleclick_copy = ui.RadioButton(self.radio_doubleclick_goto, _(u'Copy password to clipboard')) ui.config_bind(self.config, "behavior/doubleclick", self.radio_doubleclick_copy, "copy") - self.tooltips.set_tip(self.radio_doubleclick_copy, "Copy the account password to clipboard on doubleclick") + self.tooltips.set_tip(self.radio_doubleclick_copy, _(u'Copy the account password to clipboard on doubleclick')) self.section_doubleclick.append_widget(None, self.radio_doubleclick_copy) def __init_section_files(self, page): "Sets up the files section" - self.section_files = page.add_section("Files") + self.section_files = page.add_section(_(u'Files')) # checkbutton and file button for autoloading a file - self.check_autoload = ui.CheckButton("Open file on startup:") + self.check_autoload = ui.CheckButton(_(u'Open file on startup:')) ui.config_bind(self.config, "file/autoload", self.check_autoload) self.check_autoload.connect("toggled", lambda w: self.button_autoload_file.set_sensitive(w.get_active())) - self.tooltips.set_tip(self.check_autoload, "When enabled, this file will be opened when the program is started") + self.tooltips.set_tip(self.check_autoload, _(u'When enabled, this file will be opened when the program is started')) - self.button_autoload_file = ui.FileButton("Select File to Automatically Open") + self.button_autoload_file = ui.FileButton(_(u'Select File to Automatically Open')) ui.config_bind(self.config, "file/autoload_file", self.button_autoload_file) self.button_autoload_file.set_sensitive(self.check_autoload.get_active()) eventbox = ui.EventBox(self.button_autoload_file) - self.tooltips.set_tip(eventbox, "File to open when Revelation is started") + self.tooltips.set_tip(eventbox, _(u'File to open when Revelation is started')) hbox = ui.HBox() hbox.pack_start(self.check_autoload, False, False) @@ -1528,36 +1534,36 @@ self.section_files.append_widget(None, hbox) # check-button for autosave - self.check_autosave = ui.CheckButton("Automatically save data when changed") + self.check_autosave = ui.CheckButton(_(u'Automatically save data when changed')) ui.config_bind(self.config, "file/autosave", self.check_autosave) - self.tooltips.set_tip(self.check_autosave, "Automatically save the data file when an entry is added, modified or removed") + self.tooltips.set_tip(self.check_autosave, _(u'Automatically save the data file when an entry is added, modified or removed')) self.section_files.append_widget(None, self.check_autosave) # autolock file - self.check_autolock = ui.CheckButton("Lock file when inactive for") + self.check_autolock = ui.CheckButton(_(u'Lock file when inactive for')) ui.config_bind(self.config, "file/autolock", self.check_autolock) self.check_autolock.connect("toggled", lambda w: self.spin_autolock_timeout.set_sensitive(w.get_active())) - self.tooltips.set_tip(self.check_autolock, "Automatically lock the data file after a period of inactivity") + self.tooltips.set_tip(self.check_autolock, _(u'Automatically lock the data file after a period of inactivity')) self.spin_autolock_timeout = ui.SpinEntry() self.spin_autolock_timeout.set_range(1, 120) self.spin_autolock_timeout.set_sensitive(self.check_autolock.get_active()) ui.config_bind(self.config, "file/autolock_timeout", self.spin_autolock_timeout) - self.tooltips.set_tip(self.spin_autolock_timeout, "The period of inactivity before locking the file, in minutes") + self.tooltips.set_tip(self.spin_autolock_timeout, _(u'The period of inactivity before locking the file, in minutes')) hbox = ui.HBox() hbox.set_spacing(3) hbox.pack_start(self.check_autolock, False, False) hbox.pack_start(self.spin_autolock_timeout, False, False) - hbox.pack_start(ui.Label("minutes")) + hbox.pack_start(ui.Label(_(u'minutes'))) self.section_files.append_widget(None, hbox) def __init_section_gotocmd(self, page): "Sets up the goto command section" - self.section_gotocmd = page.add_section("Goto Commands") + self.section_gotocmd = page.add_section(_(u'Goto Commands')) for entrytype in entry.ENTRYLIST: if entrytype == entry.FolderEntry: @@ -1568,15 +1574,15 @@ widget = ui.Entry() ui.config_bind(self.config, "launcher/%s" % e.id, widget) - tooltip = "Goto command for %s accounts. The following expansion variables can be used:\n\n" % e.typename + tooltip = _(u'Goto command for %s accounts. The following expansion variables can be used:') % e.typename + "\n\n" for field in e.fields: tooltip += "%%%s: %s\n" % ( field.symbol, field.name ) tooltip += "\n" - tooltip += "%%: a % sign\n" - tooltip += "%?x: optional expansion variable\n" - tooltip += "%(...%): optional substring expansion" + tooltip += _(u'%%: a % sign') + "\n" + tooltip += _(u'%?x: optional expansion variable') + "\n" + tooltip += _(u'%(...%): optional substring expansion') self.tooltips.set_tip(widget, tooltip) self.section_gotocmd.append_widget(e.typename, widget) @@ -1585,20 +1591,20 @@ def __init_section_password(self, page): "Sets up the password section" - self.section_password = page.add_section("Passwords") + self.section_password = page.add_section(_(u'Passwords')) # show passwords checkbutton - self.check_show_passwords = ui.CheckButton("Display passwords and other secrets") + self.check_show_passwords = ui.CheckButton(_(u'Display passwords and other secrets')) ui.config_bind(self.config, "view/passwords", self.check_show_passwords) - self.tooltips.set_tip(self.check_show_passwords, "Display passwords and other secrets, such as PIN codes (otherwise, hide with ******)") + self.tooltips.set_tip(self.check_show_passwords, _(u'Display passwords and other secrets, such as PIN codes (otherwise, hide with ******)')) self.section_password.append_widget(None, self.check_show_passwords) # chain username checkbutton - self.check_chain_username = ui.CheckButton("Also copy username when copying password") + self.check_chain_username = ui.CheckButton(_(u'Also copy username when copying password')) ui.config_bind(self.config, "clipboard/chain_username", self.check_chain_username) - self.tooltips.set_tip(self.check_chain_username, "When the password is copied to clipboard, put the username before the password as a clipboard \"chain\"") + self.tooltips.set_tip(self.check_chain_username, _(u'When the password is copied to clipboard, put the username before the password as a clipboard "chain"')) self.section_password.append_widget(None, self.check_chain_username) # password length spinbutton @@ -1606,48 +1612,48 @@ self.spin_pwlen.set_range(4, 32) ui.config_bind(self.config, "passwordgen/length", self.spin_pwlen) - self.tooltips.set_tip(self.spin_pwlen, "The number of characters in generated passwords - 8 or more are recommended") - self.section_password.append_widget("Length of generated passwords", self.spin_pwlen) + self.tooltips.set_tip(self.spin_pwlen, _(u'The number of characters in generated passwords - 8 or more are recommended')) + self.section_password.append_widget(_(u'Length of generated passwords'), self.spin_pwlen) def __init_section_toolbar(self, page): "Sets up the toolbar section" - self.section_toolbar = page.add_section("Toolbar Style") + self.section_toolbar = page.add_section(_(u'Toolbar Style')) # radio-button for desktop default - self.radio_toolbar_desktop = ui.RadioButton(None, "Use desktop default") + self.radio_toolbar_desktop = ui.RadioButton(None, _(u'Use desktop default')) ui.config_bind(self.config, "view/toolbar_style", self.radio_toolbar_desktop, "desktop") - self.tooltips.set_tip(self.radio_toolbar_desktop, "Show toolbar items with default style") + self.tooltips.set_tip(self.radio_toolbar_desktop, _(u'Show toolbar items with default style')) self.section_toolbar.append_widget(None, self.radio_toolbar_desktop) # radio-button for icons and text - self.radio_toolbar_both = ui.RadioButton(self.radio_toolbar_desktop, "Show icons and text") + self.radio_toolbar_both = ui.RadioButton(self.radio_toolbar_desktop, _(u'Show icons and text')) ui.config_bind(self.config, "view/toolbar_style", self.radio_toolbar_both, "both") - self.tooltips.set_tip(self.radio_toolbar_both, "Show toolbar items with both icons and text") + self.tooltips.set_tip(self.radio_toolbar_both, _(u'Show toolbar items with both icons and text')) self.section_toolbar.append_widget(None, self.radio_toolbar_both) # radio-button for icons and important text - self.radio_toolbar_bothhoriz = ui.RadioButton(self.radio_toolbar_desktop, "Show icons and important text") + self.radio_toolbar_bothhoriz = ui.RadioButton(self.radio_toolbar_desktop, _(u'Show icons and important text')) ui.config_bind(self.config, "view/toolbar_style", self.radio_toolbar_bothhoriz, "both-horiz") - self.tooltips.set_tip(self.radio_toolbar_bothhoriz, "Show toolbar items with text beside important icons") + self.tooltips.set_tip(self.radio_toolbar_bothhoriz, _(u'Show toolbar items with text beside important icons')) self.section_toolbar.append_widget(None, self.radio_toolbar_bothhoriz) # radio-button for icons only - self.radio_toolbar_icons = ui.RadioButton(self.radio_toolbar_desktop, "Show icons only") + self.radio_toolbar_icons = ui.RadioButton(self.radio_toolbar_desktop, _(u'Show icons only')) ui.config_bind(self.config, "view/toolbar_style", self.radio_toolbar_icons, "icons") - self.tooltips.set_tip(self.radio_toolbar_icons, "Show toolbar items with icons only") + self.tooltips.set_tip(self.radio_toolbar_icons, _(u'Show toolbar items with icons only')) self.section_toolbar.append_widget(None, self.radio_toolbar_icons) # radio-button for text only - self.radio_toolbar_text = ui.RadioButton(self.radio_toolbar_desktop, "Show text only") + self.radio_toolbar_text = ui.RadioButton(self.radio_toolbar_desktop, _(u'Show text only')) ui.config_bind(self.config, "view/toolbar_style", self.radio_toolbar_text, "text") - self.tooltips.set_tip(self.radio_toolbar_text, "Show toolbar items with text only") + self.tooltips.set_tip(self.radio_toolbar_text, _(u'Show toolbar items with text only')) self.section_toolbar.append_widget(None, self.radio_toolbar_text)