diff --git a/gramps/cli/arghandler.py b/gramps/cli/arghandler.py index aab7bd624..d04b65a85 100644 --- a/gramps/cli/arghandler.py +++ b/gramps/cli/arghandler.py @@ -186,9 +186,9 @@ class ArgHandler(object): else: # Need to convert to system file encoding before printing # For non latin characters in path/file/user names - print(msg1.encode(sys.getfilesystemencoding()), file=sys.stderr) + print(msg1.encode(sys.stdout.encoding, 'backslashreplace'), file=sys.stderr) if msg2 is not None: - print(msg2.encode(sys.getfilesystemencoding()), file=sys.stderr) + print(msg2.encode(sys.stdout.encoding, 'backslashreplace'), file=sys.stderr) #------------------------------------------------------------------------- # Argument parser: sorts out given arguments @@ -295,7 +295,7 @@ class ArgHandler(object): else: ask = input ans = ask(_('OK to overwrite? (yes/no) ') \ - .encode(sys.getfilesystemencoding())) + .encode(sys.stdout.encoding, 'backslashreplace')) except EOFError: print() sys.exit(0) @@ -409,26 +409,26 @@ class ArgHandler(object): if self.list: print(_('List of known family trees in your database path\n').\ - encode(sys.getfilesystemencoding())) + encode(sys.stdout.encoding, 'backslashreplace')) for name, dirname in sorted(self.dbman.family_tree_list(), key=lambda pair: pair[0].lower()): print((_("%(full_DB_path)s with name \"%(f_t_name)s\"") % \ {'full_DB_path' : dirname, - 'f_t_name' : name}).encode(sys.getfilesystemencoding())) + 'f_t_name' : name}).encode(sys.stdout.encoding, 'backslashreplace')) sys.exit(0) if self.list_more: - print(_('Gramps Family Trees:').encode(sys.getfilesystemencoding())) + print(_('Gramps Family Trees:').encode(sys.stdout.encoding, 'backslashreplace')) summary_list = self.dbman.family_tree_summary() for summary in sorted(summary_list, key=lambda sum: sum["Family tree"].lower()): print(_("Family Tree \"%s\":").\ - encode(sys.getfilesystemencoding()) % summary["Family tree"]) + encode(sys.stdout.encoding, 'backslashreplace') % summary["Family tree"]) for item in sorted(summary): if item != "Family tree": print((" %s: %s" % (item, summary[item])).\ - encode(sys.getfilesystemencoding())) + encode(sys.stdout.encoding, 'backslashreplace')) sys.exit(0) self.__open_action() @@ -443,7 +443,7 @@ class ArgHandler(object): for expt in self.exports: # Need to convert path/filename to str before printing # For non latin characters in Windows path/file/user names - fn = expt[0].encode(sys.getfilesystemencoding()) + fn = expt[0].encode(sys.stdout.encoding, 'backslashreplace') fmt = str(expt[1]) print(_("Exporting: file %(filename)s, " "format %(format)s.") % \ @@ -481,7 +481,7 @@ class ArgHandler(object): self.imp_db_path, title = self.dbman.create_new_db_cli() else: self.imp_db_path = get_empty_tempdir("import_dbdir") \ - .encode(sys.getfilesystemencoding()) + .encode(sys.stdout.encoding, 'backslashreplace') newdb = DbBsddb() newdb.write_version(self.imp_db_path) @@ -495,7 +495,7 @@ class ArgHandler(object): sys.exit(0) for imp in self.imports: - fn = imp[0].encode(sys.getfilesystemencoding()) + fn = imp[0].encode(sys.stdout.encoding, 'backslashreplace') fmt = str(imp[1]) msg = _("Importing: file %(filename)s, format %(format)s.") % \ {'filename' : fn, 'format' : fmt} @@ -624,10 +624,10 @@ class ArgHandler(object): # Print cli report name ([item[0]), GUI report name (item[4]) if len(pdata.id) <= 25: print(" %s%s- %s" % ( pdata.id, " " * (26 - len(pdata.id)), - pdata.name.encode(sys.getfilesystemencoding())), file=sys.stderr) + pdata.name.encode(sys.stdout.encoding, 'backslashreplace')), file=sys.stderr) else: print(" %s\t- %s" % (pdata.id, - pdata.name.encode(sys.getfilesystemencoding())), file=sys.stderr) + pdata.name.encode(sys.stdout.encoding, 'backslashreplace')), file=sys.stderr) elif action == "tool": from gramps.gui.plug import tool @@ -665,10 +665,10 @@ class ArgHandler(object): # Print cli report name ([item[0]), GUI report name (item[4]) if len(pdata.id) <= 25: print(" %s%s- %s" % ( pdata.id, " " * (26 - len(pdata.id)), - pdata.name.encode(sys.getfilesystemencoding())), file=sys.stderr) + pdata.name.encode(sys.stdout.encoding, 'backslashreplace')), file=sys.stderr) else: print(" %s\t- %s" % (pdata.id, - pdata.name.encode(sys.getfilesystemencoding())), file=sys.stderr) + pdata.name.encode(sys.stdout.encoding, 'backslashreplace')), file=sys.stderr) elif action == "book": try: diff --git a/gramps/cli/argparser.py b/gramps/cli/argparser.py index c6346ee2c..e3a2cce0c 100644 --- a/gramps/cli/argparser.py +++ b/gramps/cli/argparser.py @@ -293,7 +293,7 @@ class ArgParser(object): self.list_more = True elif option in ('-s','--show'): print ("Gramps config settings from %s:" % \ - config.filename.encode(sys.getfilesystemencoding())) + config.filename.encode(sys.stdout.encoding, 'backslashreplace')) for section in config.data: for setting in config.data[section]: print ("%s.%s=%s" % ( @@ -403,7 +403,7 @@ class ArgParser(object): """ if self.help: # Convert Help messages to file system encoding before printing - print (_HELP.encode(sys.getfilesystemencoding())) + print (_HELP.encode(sys.stdout.encoding, 'backslashreplace')) sys.exit(0) def print_usage(self): @@ -412,5 +412,5 @@ class ArgParser(object): """ if self.usage: # Convert Help messages to file system encoding before printing - print (_USAGE.encode(sys.getfilesystemencoding())) + print (_USAGE.encode(sys.stdout.encoding, 'backslashreplace')) sys.exit(0) diff --git a/gramps/cli/clidbman.py b/gramps/cli/clidbman.py index 694f2f46a..5381a7d45 100644 --- a/gramps/cli/clidbman.py +++ b/gramps/cli/clidbman.py @@ -192,7 +192,7 @@ class CLIDbManager(object): retval["Locked?"] = "no" retval["DB version"] = version if sys.version_info[0] < 3: - retval["Family tree"] = name.encode(sys.getfilesystemencoding()) + retval["Family tree"] = name.encode(glocale.getfilesystemencoding()) else: retval["Family tree"] = name retval["Path"] = dirpath @@ -207,7 +207,7 @@ class CLIDbManager(object): # make the default directory if it does not exist dbdir = os.path.expanduser(config.get('behavior.database-path')) if sys.version_info[0] < 3: - dbdir = dbdir.encode(sys.getfilesystemencoding()) + dbdir = dbdir.encode(glocale.getfilesystemencoding()) db_ok = make_dbdir(dbdir) self.current_names = [] @@ -414,7 +414,7 @@ def make_dbdir(dbdir): if not os.path.isdir(dbdir): os.makedirs(dbdir) except (IOError, OSError) as msg: - msg = conv_to_unicode(str(msg), sys.getfilesystemencoding()) + msg = conv_to_unicode(str(msg), glocale.getfilesystemencoding()) LOG.error(_("\nERROR: Wrong database path in Edit Menu->Preferences.\n" "Open preferences and set correct database path.\n\n" "Details: Could not make database directory:\n %s\n\n") % msg) @@ -443,7 +443,7 @@ def find_next_db_dir(): base = "%x" % int(time.time()) dbdir = os.path.expanduser(config.get('behavior.database-path')) if sys.version_info[0] < 3: - dbdir = dbdir.encode(sys.getfilesystemencoding()) + dbdir = dbdir.encode(glocale.getfilesystemencoding()) new_path = os.path.join(dbdir, base) if not os.path.isdir(new_path): break @@ -486,7 +486,7 @@ def find_locker_name(dirpath): # Convert username to unicode according to system encoding # Otherwise problems with non ASCII characters in # username in Windows - username = conv_to_unicode(username, sys.getfilesystemencoding()) + username = conv_to_unicode(username, glocale.getfilesystemencoding()) # feature request 2356: avoid genitive form last = _("Locked by %s") % username ifile.close() diff --git a/gramps/cli/grampscli.py b/gramps/cli/grampscli.py index 180920aa4..ef57acc66 100644 --- a/gramps/cli/grampscli.py +++ b/gramps/cli/grampscli.py @@ -297,10 +297,10 @@ def startcli(errors, argparser): #already errors encountered. Show first one on terminal and exit # Convert error message to file system encoding before print errmsg = _('Error encountered: %s') % errors[0][0] - errmsg = errmsg.encode(sys.getfilesystemencoding()) + errmsg = errmsg.encode(sys.stdout.encoding, 'backslashreplace') print(errmsg) errmsg = _(' Details: %s') % errors[0][1] - errmsg = errmsg.encode(sys.getfilesystemencoding()) + errmsg = errmsg.encode(sys.stdout.encoding, 'backslashreplace') print(errmsg) sys.exit(1) @@ -308,10 +308,10 @@ def startcli(errors, argparser): # Convert error message to file system encoding before print errmsg = _('Error encountered in argument parsing: %s') \ % argparser.errors[0][0] - errmsg = errmsg.encode(sys.getfilesystemencoding()) + errmsg = errmsg.encode(sys.stdout.encoding, 'backslashreplace') print(errmsg) errmsg = _(' Details: %s') % argparser.errors[0][1] - errmsg = errmsg.encode(sys.getfilesystemencoding()) + errmsg = errmsg.encode(sys.stdout.encoding, 'backslashreplace') print(errmsg) sys.exit(1) diff --git a/gramps/cli/plug/__init__.py b/gramps/cli/plug/__init__.py index 014245637..d7f695175 100644 --- a/gramps/cli/plug/__init__.py +++ b/gramps/cli/plug/__init__.py @@ -571,11 +571,11 @@ class CommandLineReport(object): # Make the output nicer to read, assume a tab has 8 spaces tabs = '\t\t' if len(key) < 10 else '\t' optmsg = " %s%s%s (%s)" % (key, tabs, opt[1], opt[0]) - print(optmsg.encode(sys.getfilesystemencoding())) + print(optmsg.encode(sys.stdout.encoding, 'backslashreplace')) else: optmsg = " %s%s%s" % (key, tabs, _('(no help available)')) - print(optmsg.encode(sys.getfilesystemencoding())) + print(optmsg.encode(sys.stdout.encoding, 'backslashreplace')) print((_(" Use '%(donottranslate)s' to see description " "and acceptable values") % {'donottranslate' : "show=option"})) @@ -588,10 +588,10 @@ class CommandLineReport(object): if isinstance(vals, (list, tuple)): for val in vals: optmsg = " %s" % val - print(optmsg.encode(sys.getfilesystemencoding())) + print(optmsg.encode(sys.stdout.encoding, 'backslashreplace')) else: optmsg = " %s" % opt[2] - print(optmsg.encode(sys.getfilesystemencoding())) + print(optmsg.encode(sys.stdout.encoding, 'backslashreplace')) else: #there was a show option given, but the option is invalid diff --git a/gramps/gen/plug/_pluginreg.py b/gramps/gen/plug/_pluginreg.py index 6b4974e29..c149e97c5 100644 --- a/gramps/gen/plug/_pluginreg.py +++ b/gramps/gen/plug/_pluginreg.py @@ -1091,7 +1091,7 @@ class PluginRegister(object): lenpd = len(self.__plugindata) full_filename = os.path.join(dir, filename) if sys.version_info[0] < 3: - full_filename = full_filename.encode(sys.getfilesystemencoding()) + full_filename = full_filename.encode(glocale.getfilesystemencoding()) local_gettext = glocale.get_addon_translator(full_filename).gettext try: #execfile(full_filename, diff --git a/gramps/gen/plug/docgen/graphdoc.py b/gramps/gen/plug/docgen/graphdoc.py index 0bfa17879..55361a5bd 100644 --- a/gramps/gen/plug/docgen/graphdoc.py +++ b/gramps/gen/plug/docgen/graphdoc.py @@ -658,7 +658,7 @@ class GVPsDoc(GVDocBase): # :cairo does not work with Graphviz 2.26.3 and later See issue 4164 # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -706,7 +706,7 @@ class GVSvgDoc(GVDocBase): dotfile.close() # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -749,7 +749,7 @@ class GVSvgzDoc(GVDocBase): dotfile.close() # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -792,7 +792,7 @@ class GVPngDoc(GVDocBase): dotfile.close() # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -835,7 +835,7 @@ class GVJpegDoc(GVDocBase): dotfile.close() # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -878,7 +878,7 @@ class GVGifDoc(GVDocBase): dotfile.close() # Covert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -924,7 +924,7 @@ class GVPdfGvDoc(GVDocBase): dotfile.close() # Convert filename to str using file system encoding. if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename @@ -989,7 +989,7 @@ class GVPdfGsDoc(GVDocBase): # Convert to PDF using ghostscript if sys.version_info[0] < 3: - fname = self._filename.encode(sys.getfilesystemencoding()) + fname = self._filename.encode(glocale.getfilesystemencoding()) else: fname = self._filename command = '%s -q -sDEVICE=pdfwrite -dNOPAUSE -dDEVICEWIDTHPOINTS=%d' \ diff --git a/gramps/gen/utils/grampslocale.py b/gramps/gen/utils/grampslocale.py index 9761f2e35..77c5b48c8 100644 --- a/gramps/gen/utils/grampslocale.py +++ b/gramps/gen/utils/grampslocale.py @@ -338,73 +338,6 @@ class GrampsLocale(object): return "utf-8" -#------------------------------------------------------------------------- -# -# GrampsTranslation Class -# -#------------------------------------------------------------------------- -class GrampsTranslations(gettext.GNUTranslations): - """ - Overrides and extends gettext.GNUTranslations. See the Python gettext - "Class API" documentation for how to use this. - """ - def language(self): - """ - Return the target languge of this translations object. - """ - return self.info()["language"] - - def gettext(self, msgid): - """ - Obtain translation of gettext, return a unicode object - :param msgid: The string to translated. - :type msgid: unicode - :returns: Translation or the original. - :rtype: unicode - """ - # If msgid =="" then gettext will return po file header - # and that's not what we want. - if len(msgid.strip()) == 0: - return msgid - if sys.version_info[0] < 3: - return gettext.GNUTranslations.ugettext(self, msgid) - else: - return gettext.GNUTranslations.gettext(self, msgid) - - def ngettext(self, singular, plural, num): - """ - The translation of singular/plural is returned unless the translation is - not available and the singular contains the separator. In that case, - the returned value is the singular. - - :param singular: The singular form of the string to be translated. - may contain a context seperator - :type singular: unicode - :param plural: The plural form of the string to be translated. - :type plural: unicode - :param num: the amount for which to decide the translation - :type num: int - :returns: Translation or the original. - :rtype: unicode - """ - if sys.version_info[0] < 3: - return gettext.GNUTranslations.ungettext(self, singular, - plural, num) - else: - return gettext.GNUTranslations.ngettext(self, singular, - plural, num) - - def sgettext(self, msgid, sep='|'): - """ - Even with a null translator we need to filter out the translator hint. - """ - msgval = self.gettext(msgid) - if msgval == msgid: - sep_idx = msgid.rfind(sep) - msgval = msgid[sep_idx+1:] - return msgval - - #------------------------------------------------------------------------- # # Translations Classes @@ -483,7 +416,6 @@ class GrampsTranslations(gettext.GNUTranslations): msgval = msgid[sep_idx+1:] return msgval - class GrampsNullTranslations(gettext.NullTranslations): """ Extends gettext.NullTranslations to provide the sgettext method. diff --git a/gramps/gui/dialog.py b/gramps/gui/dialog.py index 8941da6de..a9f79efa3 100644 --- a/gramps/gui/dialog.py +++ b/gramps/gui/dialog.py @@ -193,7 +193,7 @@ class ErrorDialog(Gtk.MessageDialog): class RunDatabaseRepair(ErrorDialog): def __init__(self, msg, parent=None): if sys.version_info[0] < 3: - msg = cuni(str(msg).decode(sys.getfilesystemencoding())) + msg = cuni(str(msg).decode(glocale.getfilesystemencoding())) else: msg = str(msg) ErrorDialog.__init__( @@ -208,7 +208,7 @@ class RunDatabaseRepair(ErrorDialog): class DBErrorDialog(ErrorDialog): def __init__(self, msg, parent=None): if sys.version_info[0] < 3: - msg = cuni(str(msg).decode(sys.getfilesystemencoding())) + msg = cuni(str(msg).decode(glocale.getfilesystemencoding())) else: msg = str(msg) ErrorDialog.__init__( diff --git a/gramps/gui/editors/displaytabs/gallerytab.py b/gramps/gui/editors/displaytabs/gallerytab.py index 9ebed173e..ee152ca1f 100644 --- a/gramps/gui/editors/displaytabs/gallerytab.py +++ b/gramps/gui/editors/displaytabs/gallerytab.py @@ -520,7 +520,7 @@ class GalleryTab(ButtonTab, DbGUIElement): if protocol == "file": name = fix_encoding(mfile) name = cuni(url2pathname( - name.encode(sys.getfilesystemencoding()))) + name.encode(glocale.getfilesystemencoding()))) mime = get_type(name) if not is_valid_type(mime): return diff --git a/gramps/gui/viewmanager.py b/gramps/gui/viewmanager.py index f5543f5c6..8c1b45779 100644 --- a/gramps/gui/viewmanager.py +++ b/gramps/gui/viewmanager.py @@ -1365,7 +1365,7 @@ class ViewManager(CLIManager): if value: (filename, title) = value if sys.version_info[0] < 3: - filename = filename.encode(sys.getfilesystemencoding()) + filename = filename.encode(glocale.getfilesystemencoding()) self.db_loader.read_file(filename) self._post_load_newdb(filename, 'x-directory/normal', title) @@ -1567,7 +1567,7 @@ class ViewManager(CLIManager): basefile = file_entry.get_text() basefile = basefile.replace("/", r"-") filename = os.path.join(path_entry.get_text(), basefile) - filename = filename.encode(sys.getfilesystemencoding()) + filename = filename.encode(glocale.getfilesystemencoding()) if os.path.exists(filename): sfilename = get_unicode_path_from_env_var(filename) question = QuestionDialog2( diff --git a/gramps/plugins/docgen/pdfdoc.py b/gramps/plugins/docgen/pdfdoc.py index 9177c0b95..fc56f00a6 100644 --- a/gramps/plugins/docgen/pdfdoc.py +++ b/gramps/plugins/docgen/pdfdoc.py @@ -89,7 +89,7 @@ class PdfDoc(libcairodoc.CairoDoc): # create cairo context and pango layout filename = self._backend.filename if sys.version_info[0] < 3: - filename = filename.encode(sys.getfilesystemencoding()) + filename = self._backend.filename.encode(glocale.getfilesystemencoding()) try: surface = cairo.PDFSurface(filename, paper_width, paper_height) except IOError as msg: diff --git a/gramps/plugins/lib/maps/geography.py b/gramps/plugins/lib/maps/geography.py index e4d34eb8e..635779228 100644 --- a/gramps/plugins/lib/maps/geography.py +++ b/gramps/plugins/lib/maps/geography.py @@ -153,13 +153,13 @@ class GeoGraphyView(OsmGps, NavigationView): ('gramps-geo-mainmap' + '.png' )) pathu = path if sys.version_info[0] < 3: - pathu = path.encode(sys.getfilesystemencoding()) + pathu = path.encode(glocale.getfilesystemencoding()) self.geo_mainmap = cairo.ImageSurface.create_from_png(pathu) path = os.path.join(ROOT_DIR, "images", "48x48", ('gramps-geo-altmap' + '.png' )) pathu = path if sys.version_info[0] < 3: - pathu = path.encode(sys.getfilesystemencoding()) + pathu = path.encode(glocale.getfilesystemencoding()) self.geo_altmap = cairo.ImageSurface.create_from_png(pathu) if ( config.get('geography.map_service') in ( constants.OPENSTREETMAP, @@ -176,7 +176,7 @@ class GeoGraphyView(OsmGps, NavigationView): (constants.ICONS.get(int(ident), default_image) + '.png' )) pathu = path if sys.version_info[0] < 3: - pathu = path.encode(sys.getfilesystemencoding()) + pathu = path.encode(glocale.getfilesystemencoding()) self.geo_othermap[ident] = cairo.ImageSurface.create_from_png(pathu) def change_page(self): diff --git a/gramps/plugins/tool/check.py b/gramps/plugins/tool/check.py index da9cb77a3..d29611776 100644 --- a/gramps/plugins/tool/check.py +++ b/gramps/plugins/tool/check.py @@ -690,8 +690,8 @@ class CheckIntegrity(object): photo_desc = obj.get_description() if photo_name is not None and photo_name != "" and not find_file(photo_name): if cl: - # Convert to file system encoding before prining - fn = os.path.basename(photo_name).encode(sys.getfilesystemencoding()) + # Convert to stdout encoding before prining + fn = os.path.basename(photo_name).encode(sys.stdout.encoding, 'backslashreplace') logging.warning(" FAIL: media file %s was not found." % fn) self.bad_photo.append(ObjectId) @@ -2195,8 +2195,7 @@ class Report(ManagedWindow): def __init__(self, uistate, text, cl=0): if cl: - # Convert to file system encoding before printing - print (text.encode(sys.getfilesystemencoding())) + print (text.encode(sys.stdout.encoding, 'backslashreplace')) return ManagedWindow.__init__(self, uistate, [], self) diff --git a/gramps/plugins/view/mediaview.py b/gramps/plugins/view/mediaview.py index 9c0fa679a..e72e59a94 100644 --- a/gramps/plugins/view/mediaview.py +++ b/gramps/plugins/view/mediaview.py @@ -196,7 +196,7 @@ class MediaView(ListView): protocol, site, mfile, j, k, l = urlparse(clean_string) if protocol == "file": name = cuni(url2pathname( - mfile.encode(sys.getfilesystemencoding()))) + mfile.encode(glocale.getfilesystemencoding()))) mime = get_type(name) if not is_valid_type(mime): return diff --git a/gramps/plugins/view/pedigreeview.py b/gramps/plugins/view/pedigreeview.py index 980d2958a..a41065c53 100644 --- a/gramps/plugins/view/pedigreeview.py +++ b/gramps/plugins/view/pedigreeview.py @@ -209,7 +209,7 @@ class PersonBoxWidgetCairo(_PersonWidgetBase): if image: image_path = self.get_image(dbstate, person) if sys.version_info[0] < 3 and isinstance(image_path, STRTYPE): - image_path = image_path.encode(sys.getfilesystemencoding()) + image_path = image_path.encode(glocale.getfilesystemencoding()) if image_path and os.path.exists(image_path): self.img_surf = cairo.ImageSurface.create_from_png(image_path)