From 36a91b6cb9ddebc42c5aaab9995e1b99d6e7afc1 Mon Sep 17 00:00:00 2001 From: "Rob G. Healey" Date: Thu, 25 Feb 2010 15:52:32 +0000 Subject: [PATCH] Changed some formatted strings to named variables for 'make distcheck' to work properly. svn: r14483 --- src/Relationship.py | 5 +- src/data/Web_Alphabet-Horizontal.css | 84 ++++++++++ src/data/Web_Alphabet-Vertical.css | 174 ++++++++++++++++++++ src/data/Web_Visually.css | 89 ---------- src/plugins/BookReport.py | 3 +- src/plugins/Records.py | 6 +- src/plugins/gramplet/SessionLogGramplet.py | 2 +- src/plugins/import/ImportCsv.py | 4 +- src/plugins/import/ImportGrdb.py | 6 +- src/plugins/import/ImportProGen.py | 9 +- src/plugins/import/ImportXml.py | 14 +- src/plugins/lib/libgedcom.py | 6 +- src/plugins/quickview/all_events.py | 5 +- src/plugins/quickview/all_relations.py | 7 +- src/plugins/textreport/SimpleBookTitle.py | 3 +- src/plugins/tool/CalculateEstimatedDates.py | 6 +- src/plugins/tool/Check.py | 106 +++++++----- src/plugins/tool/RelCalc.py | 24 +-- src/plugins/webreport/NarrativeWeb.py | 23 ++- 19 files changed, 393 insertions(+), 183 deletions(-) create mode 100755 src/data/Web_Alphabet-Horizontal.css create mode 100755 src/data/Web_Alphabet-Vertical.css diff --git a/src/Relationship.py b/src/Relationship.py index 64e0ca3f3..26107960f 100644 --- a/src/Relationship.py +++ b/src/Relationship.py @@ -924,9 +924,8 @@ class RelationshipCalculator(object): #loop, keep one message in storage! self.__loopDetected = True self.__msg += [_("Relationship loop detected:") + \ - _("Person %s connects to himself via %s") % \ - (person.get_primary_name().get_name(), - rel2[len(rel1):])] + _("Person %(person)s connects to himself via %(relation)s") ] % { + 'person' : person.get_primary_name().get_name(), 'relation' : rel2[len(rel1):] } return elif store: pmap[person.handle] = [[rel_str], [rel_fam]] diff --git a/src/data/Web_Alphabet-Horizontal.css b/src/data/Web_Alphabet-Horizontal.css new file mode 100755 index 000000000..93abf23c3 --- /dev/null +++ b/src/data/Web_Alphabet-Horizontal.css @@ -0,0 +1,84 @@ +/* + ************************************************************************************************** +Copyright Holder and License +************************************************************************************************** +GRAMPS Cascading Style Sheet +Style Name: Web_Alphabet-Horizontal.css +************************************************************************************************** +This website was created with GRAMPS +http://www.gramps-project.org +-------------------------------------------------------------------------------------------------- +GRAMPS is a Free Software Project for Genealogy, offering a professional genealogy program, +and a wiki open to all. It is a community project, created, developed and governed by genealogists. + +Go to http://gramps-project.org to learn more! + +-------------------------------------------------------------------------------------------------- +Copyright (C) 2009 Rob G. Healey + +This file is part of the GRAMPS program. + +GRAMPS is free software: you can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, version 2 of the License. + +GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with GRAMPS. If not, +see . +-------------------------------------------------------------------------------------------------- +# $Id: $ + + Header +----------------------------------------------------- */ +div#header { + position: fixed; + top: 0px; + left: 0px; + overflow: auto; + width: 100%; + margin: 0; +} + +/* NarrativeWeb Navigation +--------------------------------------------------------------------------------------- */ +body#NarrativeWeb div#navigation { + position: fixed; + left: 0px; + width: 100%; +} + +/* Alphabet Navigation +----------------------------------------------------- */ +div#alphabet { + position: fixed; + top: 130px; + left: 0px; + width: 100%; + margin: 0; +} +div#alphabet ul { + list-style:none; + min-width:770px; + height:24px; + margin:0; + padding: 0px 0px 0px 16px; + border-width: 2px 0px 4px 0px; + border-style: solid; +} +div#alphabet ul li:after { + content:" |"; +} +div#alphabet ul li { + margin:0; + float:left; +} +div#alphabet ul li a { + display:block; + padding: 4px 8px 4px 8px; + float:left; + font:bold 16px/100% sans; + margin:0; + text-decoration:none; +} diff --git a/src/data/Web_Alphabet-Vertical.css b/src/data/Web_Alphabet-Vertical.css new file mode 100755 index 000000000..7c138cf82 --- /dev/null +++ b/src/data/Web_Alphabet-Vertical.css @@ -0,0 +1,174 @@ +/* + ************************************************************************************************** +Copyright Holder and License +************************************************************************************************** +GRAMPS Cascading Style Sheet +Style Name: Web_Alphabet-Vertical.css +************************************************************************************************** +This website was created with GRAMPS +http://www.gramps-project.org +-------------------------------------------------------------------------------------------------- +GRAMPS is a Free Software Project for Genealogy, offering a professional genealogy program, +and a wiki open to all. It is a community project, created, developed and governed by genealogists. + +Go to http://gramps-project.org to learn more! + +-------------------------------------------------------------------------------------------------- +Copyright (C) 2009 Rob G. Healey + +This file is part of the GRAMPS program. + +GRAMPS is free software: you can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, version 2 of the License. + +GRAMPS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with GRAMPS. If not, +see . +-------------------------------------------------------------------------------------------------- +# $Id: $ + + Body Element +----------------------------------------------------- */ +body { + font-family: Arial, sans, sans-serif, Helvetica; + color: #000; + background-color: #FFF; + padding: 60px 0px 0px 108px; +} + +/* Header +----------------------------------------------------- */ +#header { + position: fixed; + top: 0px; + left: 0px; + overflow: auto; + width: 100%; +} + +/* Navigation/ SubNavigation +----------------------------------------------------- */ +div#navigation, div#subnavigation { + position: fixed; + left: 0px; + width: 108px; + height: 500px; + overflow-x: auto; + border-width: 2px 4px 2px 4px; + border-style: solid; +} +div#navigation ul, div#subnavigation ul { + display: inline; + list-style: none; + padding: 0px 9px 0px 9px; + margin: 0; +} +div#navigation ul li, div#subnavigation ul li { + font: bold 14px/100% sans; + padding: 10px 10px 10px 0px; + margin:0; + float: left; + border-width: 0px 0px 2px 0px; + border-style: solid; +} +div#navigation ul li:first-child, div#subnavigation ul li:first-child { + border-top: 0; +} +div#navigation ul li:last-child, div#subnavigation ul li:last-child { + border-bottom: 0; +} +div#navigation ul li a, div#subnavigation ul li a { + text-decoration: none; + display: block; + padding: 10px 0px 6px 10px; +} +div#navigation ul li a:hover, div#subnavigation ul li a:hover { + background-color: #C1B398; +} +div#navigation ul li.CurrentSection a, div#subnavigation ul li.CurrentSection a { + font-weight:bold; + font-style: italic; + background-color: #453619; + color: #FFF; +} +div#navigation ul li.CurrentSection a:hover { + background-color: #000; + color: #FFF; +} +div#subnavigation ul li.CurrentSection a { + border-width: 0px 0px 2px 0px; + border-color: #5D835F; +} + +/* Alphabet Navigation +----------------------------------------------------- */ +div#alphabet { + width: 100%; + margin: 0; + padding: 0; +} +div#alphabet ul { + list-style:none; + min-width: 900px; + height: 40px; + margin:0; + padding: 0px 0px 0px 16px; + border-bottom: solid 2px #5D835F; +} +div#alphabet ul li { + float:left; +} +div#alphabet ul li a { + display: block; + padding: 12px 16px 14px 1px; + float:left; + font: .8em bold italic small-caps verdana, serif; + color: #000; + text-decoration:none; + margin:0; +} +div#alphabet ul li a:hover { + background-color: #C1B398; +} + +/* Alphabet Navigation +----------------------------------------------------- */ +div#alphabet { + width: 100%; + margin: 0; + background-color: #6AF364; +} +div#alphabet ul { + list-style:none; + min-width:770px; + height:24px; + margin:0; + padding: 0px 0px 0px 16px; + border-width: 1px 0px 1px 0px; + border-style: solid; + border-color: #5D835F; +} +div#alphabet ul li:after { + content:" |"; +} +div#alphabet ul li { + margin:0; + float:left; +} +div#alphabet ul li a { + display:block; + padding: 4px 8px 4px 8px; + float:left; + font: normal 16px/100% sans; + margin:0; + text-decoration:none; + color: #000; +} +div#alphabet ul li a:hover { + background-color: #000; + color: #FFF; +} + diff --git a/src/data/Web_Visually.css b/src/data/Web_Visually.css index 986064941..6f63e99a5 100644 --- a/src/data/Web_Visually.css +++ b/src/data/Web_Visually.css @@ -49,11 +49,6 @@ Females Web_Gender_Female.png NarrativeWeb Styles -------------------------------------------------------------------------------------------- */ -body { - font-family: Arial, sans, sans-serif, Helvetica; - color: #000; - background-color: #FFF; -} /* General Elements ----------------------------------------------------- */ @@ -268,90 +263,6 @@ div#footer p#copyright img { padding:0; } -/* Navigation ------------------------------------------------------ */ -div#navigation, div#subnavigation { - width: 100%; - margin: 0; - padding: 0; -} -div#navigation ul, div#subnavigation ul { - list-style:none; - min-width: 900px; - height: 40px; - margin:0; - padding: 0px 0px 0px 16px; - border-bottom: solid 2px #5D835F; -} -div#navigation ul li, div#subnavigation ul li { - float:left; -} -div#navigation ul li a, div#subnavigation ul li a { - display: block; - padding: 12px 16px 14px 1px; - float:left; - font: .8em bold italic small-caps verdana, serif; - color: #000; - text-decoration:none; - margin:0; -} -div#navigation ul li a:hover, div#subnavigation ul li a:hover { - background-color: #C1B398; -} -div#navigation ul li.CurrentSection a, div#subnavigation ul li.CurrentSection a { - font-weight:bold; - font-style: italic; - background-color: #453619; - color: #FFF; -} -div#navigation ul li.CurrentSection a:hover { - background-color: #000; - color: #FFF; -} -div#subnavigation ul li.CurrentSection a { - border-width: 0px 0px 2px 0px; - border-color: #5D835F; -} -i0 - -/* Alphabet Navigation ------------------------------------------------------ */ -div#alphabet { - width: 100%; - margin: 0; - background-color: #6AF364; -} -div#alphabet ul { - list-style:none; - min-width:770px; - height:24px; - margin:0; - padding: 0px 0px 0px 16px; - border-width: 1px 0px 1px 0px; - border-style: solid; - border-color: #5D835F; -} -div#alphabet ul li:after { - content:" |"; -} -div#alphabet ul li { - margin:0; - float:left; -} -div#alphabet ul li a { - display:block; - padding: 4px 8px 4px 8px; - float:left; - font: normal 16px/100% sans; - margin:0; - text-decoration:none; - color: #000; -} -div#alphabet ul li a:hover { - background-color: #000; - color: #FFF; -} - /* Main Table ----------------------------------------------------- */ table.infolist { diff --git a/src/plugins/BookReport.py b/src/plugins/BookReport.py index e8fb018ce..5784e6005 100644 --- a/src/plugins/BookReport.py +++ b/src/plugins/BookReport.py @@ -176,7 +176,8 @@ def _get_subject(options, dbase): else: mother_name = _("unknown mother") - name = _("%s and %s (%s)") % (father_name, mother_name, family_id) + name = _("%(father)s and %(mother)s (%(id)s)") % { + 'father' : father_name, 'mother' : mother_name, 'id' : family_id } return name return _("Not Applicable") diff --git a/src/plugins/Records.py b/src/plugins/Records.py index f70146fca..665052665 100644 --- a/src/plugins/Records.py +++ b/src/plugins/Records.py @@ -210,9 +210,9 @@ def _find_records(db, filter, callname): father = db.get_person_from_handle(father_handle) mother = db.get_person_from_handle(mother_handle) - name = _("%s and %s") % ( - _person_get_display_name(father, callname), - _person_get_display_name(mother, callname)) + name = _("%(father)s and %(mother)s") % { + 'father' : _person_get_display_name(father, callname), + 'mother' : _person_get_display_name(mother, callname) } _record(None, family_mostchildren, len(family.get_child_ref_list()), diff --git a/src/plugins/gramplet/SessionLogGramplet.py b/src/plugins/gramplet/SessionLogGramplet.py index e4e25cee7..c6c8cd0e8 100644 --- a/src/plugins/gramplet/SessionLogGramplet.py +++ b/src/plugins/gramplet/SessionLogGramplet.py @@ -81,6 +81,6 @@ class LogGramplet(Gramplet): if mother_handle: mother = self.dbstate.db.get_person_from_handle(mother_handle) mother_name = name_displayer.display(mother) - name = _("%s and %s") % (mother_name, father_name) + name = _("%(mother)s and %(father)s") % { 'mother' : mother_name, 'father' : father_name } self.link(name, ltype, handle) self.append_text("\n") diff --git a/src/plugins/import/ImportCsv.py b/src/plugins/import/ImportCsv.py index c723ed549..b91893a6a 100644 --- a/src/plugins/import/ImportCsv.py +++ b/src/plugins/import/ImportCsv.py @@ -330,8 +330,8 @@ class CSVParser(object): try: data = [[r.strip() for r in row] for row in reader] except csv.Error, e: - ErrorDialog(_('format error: file %s, line %d: %s') % - (self.filename, reader.line_num, e)) + ErrorDialog(_('format error: file %(fname)s, line %(line)d: %(zero)s')) % { + 'fname' : self.filename, 'line' : reader.line_num, 'zero' : e } try: fp.close() except: diff --git a/src/plugins/import/ImportGrdb.py b/src/plugins/import/ImportGrdb.py index 63d8e9de9..6fdd26923 100644 --- a/src/plugins/import/ImportGrdb.py +++ b/src/plugins/import/ImportGrdb.py @@ -2825,9 +2825,9 @@ def importData(database, filename, callback=None, cl=0): if database.has_name_group_key(key) : present = database.get_name_group_mapping(key) if not value == present: - msg = _("Your family tree groups name %s together" - " with %s, did not change this grouping to %s") % ( - key, present, value) + msg = _("Your family tree groups name %(key)s together" + " with %(present)s, did not change this grouping to %(value)s") % { + 'key' : key, 'present' : present, 'value' : value } LOG.warn(msg) else: database.set_name_group_mapping(key, value) diff --git a/src/plugins/import/ImportProGen.py b/src/plugins/import/ImportProGen.py index 5130afa77..59935bdcf 100644 --- a/src/plugins/import/ImportProGen.py +++ b/src/plugins/import/ImportProGen.py @@ -688,7 +688,8 @@ class ProgenParser(object): date.set(gen.lib.Date.QUAL_NONE, gen.lib.Date.MOD_ABOUT, gen.lib.Date.CAL_GREGORIAN, (0, month, year, None)) return date - log.warning(_("date did not match: '%s' (%s)") % (txt.encode('utf-8'), diag_msg or '')) + log.warning(_("date did not match: '(text)%s' (%(msg)s)")) % { + 'text' : txt.encode('utf-8'), 'msg' : diag_msg or '' } # Hmmm. Just use the plain text. date.set_as_text(txt) return date @@ -1238,9 +1239,11 @@ class ProgenParser(object): father_handle = father > 0 and self.__find_person_handle("I%d" % father) or None mother_handle = mother > 0 and self.__find_person_handle("I%d" % mother) or None if father > 0 and not father_handle: - log.warning(_("cannot find father for I%s (father=%d)") % (pers_id, father)) + log.warning(_("cannot find father for I%(person)s (father=%(id)d)")) % { + 'person' : pers_id, 'id' : father } elif mother > 0 and not mother_handle: - log.warning(_("cannot find mother for I%s (mother=%d)") % (pers_id, mother)) + log.warning(_("cannot find mother for I(person)%s (mother=%(mother)d)")) % { + 'person' : pers_id, 'mother' : mother } else: fam = self.fm2fam.get((father_handle, mother_handle), None) if not fam: diff --git a/src/plugins/import/ImportXml.py b/src/plugins/import/ImportXml.py index bd870678d..3ca00efbe 100644 --- a/src/plugins/import/ImportXml.py +++ b/src/plugins/import/ImportXml.py @@ -1310,9 +1310,9 @@ class GrampsParser(UpdateCallback): if self.db.has_name_group_key(key) : present = self.db.get_name_group_mapping(key) if not value == present: - msg = _("Your family tree groups name %s together" - " with %s, did not change this grouping to %s") % ( - key, present, value) + msg = _("Your family tree groups name %(key)s together" + " with %(parent)s, did not change this grouping to %(value)s") % { + 'key' : key, 'parent' : present, 'value' : value } self.errmsg(msg) else: self.db.set_name_group_mapping(key, value) @@ -2479,11 +2479,11 @@ def version_is_valid(filename, cli): parser = VersionParser(filename) if parser.get_xmlns_version() > libgrampsxml.GRAMPS_XML_VERSION: - msg = _("The .gramps file you are importing was made by version %s of " - "Gramps, while you are running an older version %s. " + msg = _("The .gramps file you are importing was made by version %(newer)s of " + "Gramps, while you are running an older version %(older)s. " "The file will not be imported. Please upgrade to the latest " - "version of Gramps and try again." - ) % (parser.get_gramps_version(), const.VERSION) + "version of Gramps and try again." ) % { + 'newer' : parser.get_gramps_version(), 'older' : const.VERSION } if cli: LOG.warn(msg) return False diff --git a/src/plugins/lib/libgedcom.py b/src/plugins/lib/libgedcom.py index 276934b3f..a94fe2459 100644 --- a/src/plugins/lib/libgedcom.py +++ b/src/plugins/lib/libgedcom.py @@ -5494,8 +5494,8 @@ class GedcomParser(UpdateCallback): line = self.__get_next_line() if self.__level_is_finished(line, level): if skips and self.want_parse_warnings: - msg = _("skipped %d subordinate(s) at line %d")\ - % (skips, line.line - skips) + msg = _("skipped %(skip)d subordinate(s) at line %(line)d") % { + 'skip' : skips, 'line' : line.line - skips } self.__warn(msg) return skips += 1 @@ -5929,4 +5929,4 @@ def __build_date_string(day, mon, year, bce, mmap): retval = "(%d %s)" % (day, mmap[mon]) else: retval = "%d %s %d%s" % (day, mmap[mon], year, bce) - return retval \ No newline at end of file + return retval diff --git a/src/plugins/quickview/all_events.py b/src/plugins/quickview/all_events.py index 9d88eb03a..84bc8f5e4 100644 --- a/src/plugins/quickview/all_events.py +++ b/src/plugins/quickview/all_events.py @@ -95,9 +95,8 @@ def run_fam(database, document, family): # display the results - sdoc.title(_("Sorted events of family\n %s - %s") % - (sdb.name(sdb.father(family)), - sdb.name(sdb.mother(family)))) + sdoc.title(_("Sorted events of family\n %(father)s - %(mother)s")) % { + 'father' : sdb.name(sdb.father(family)), 'mother' : sdb.name(sdb.mother(family)) } sdoc.paragraph("") stab.columns(_("Family Member"), _("Event Type"), diff --git a/src/plugins/quickview/all_relations.py b/src/plugins/quickview/all_relations.py index 63d94b852..09f1dab7c 100644 --- a/src/plugins/quickview/all_relations.py +++ b/src/plugins/quickview/all_relations.py @@ -77,8 +77,8 @@ class AllRelReport(): p1 = self.sdb.name(self.person) if self.person.handle == self.home_person.handle : self.sdoc.paragraph(_FMT_VOID % ( - _("%s and %s are the same person.") % ( p1, p2)) - ) + _("%(person)s and %(active_person)s are the same person."))) % { + 'person' : p1, 'active_person' : p2 } return #check if not a family too: @@ -203,7 +203,8 @@ class AllRelReport(): """ p2 = self.sdb.name(self.home_person) p1 = self.sdb.name(self.person) - self.sdoc.title(_("Relationships of %s to %s") % (p1 ,p2)) + self.sdoc.title(_("Relationships of %(person)s to %(active_person)s")) % { + 'person' : p1 ,'active_person' : p2 } self.sdoc.paragraph("") def print_details_header(self, relations, pers1, pers2, diff --git a/src/plugins/textreport/SimpleBookTitle.py b/src/plugins/textreport/SimpleBookTitle.py index c7e72a150..a8f5f575f 100644 --- a/src/plugins/textreport/SimpleBookTitle.py +++ b/src/plugins/textreport/SimpleBookTitle.py @@ -127,7 +127,8 @@ class SimpleBookTitleOptions(MenuReportOptions): dateinfo = time.localtime(time.time()) rname = self.__db.get_researcher().get_name() - footer_string = _('Copyright %d %s') % (dateinfo[0], rname) + footer_string = _('Copyright %(year)d %(name)s') % { + 'year' : dateinfo[0], 'name' : rname } footer = StringOption(_('Footer'), footer_string ) footer.set_help(_("Footer string for the page.")) menu.add_option(category_name, "footer", footer) diff --git a/src/plugins/tool/CalculateEstimatedDates.py b/src/plugins/tool/CalculateEstimatedDates.py index cde4385c4..83201649f 100644 --- a/src/plugins/tool/CalculateEstimatedDates.py +++ b/src/plugins/tool/CalculateEstimatedDates.py @@ -444,7 +444,8 @@ class CalcToolManagedWindow(PluginWindows.ToolManagedWindowBatch): if not birth_ref and add_birth_event: other_name = self.sdb.name(other) if other_name: - explanation = _("Added birth event based on %s, from %s") % (evidence, other_name) + explanation = _("Added birth event based on %(evidence)s, from %(name)s") % { + 'evidence' : evidence, 'name ' : other_name } else: explanation = _("Added birth event based on %s") % evidence modifier = self.get_modifier("birth") @@ -459,7 +460,8 @@ class CalcToolManagedWindow(PluginWindows.ToolManagedWindowBatch): if not death_ref and add_death_event: other_name = self.sdb.name(other) if other_name: - explanation = _("Added death event based on %s, from %s") % (evidence, other_name) + explanation = _("Added death event based on %(evidence)s, from %(person)s") % { + 'evidence' : evidence, 'person' : other_name } else: explanation = _("Added death event based on %s") % evidence modifier = self.get_modifier("death") diff --git a/src/plugins/tool/Check.py b/src/plugins/tool/Check.py index c41d0b7d7..47520de87 100644 --- a/src/plugins/tool/Check.py +++ b/src/plugins/tool/Check.py @@ -1286,9 +1286,11 @@ class CheckIntegrity(object): self.db.get_number_of_places() + self.db.get_number_of_media_objects() + self.db.get_number_of_sources() + - self.db.get_number_of_repositories() ) + self.db.get_number_of_repositories() + ) - self.progress.set_pass(_('Looking for note reference problems'), total ) + self.progress.set_pass(_('Looking for note reference problems'), + total) for handle in self.db.person_map.keys(): self.progress.step() @@ -1451,13 +1453,13 @@ class CheckIntegrity(object): _('The database has passed internal checks'), parent=uistate.window) else: - print "No errors were found: the database has passed internal checks." + print("No errors were found: the database has passed internal checks.") return 0 self.text = cStringIO.StringIO() if blink > 0: - self.text.write(ngettext("%d broken child/family link was fixed\n", \ - "%d broken child-family links were found\n", blink) % blink) + self.text.write(ngettext("%(quantity)d broken child/family link was fixed\n", \ + "%(quantity)d broken child-family links were found\n", blink) % { 'quantity' : blink } ) for (person_handle, family_handle) in self.broken_links: person = self.db.get_person_from_handle(person_handle) if person: @@ -1470,12 +1472,12 @@ class CheckIntegrity(object): except: pn = _("Unknown") self.text.write('\t') - self.text.write(_("%s was removed from the family of %s\n") % (cn, pn)) + self.text.write(_("%(person)s was removed from the family of %(family)s\n")) % { + 'person' : cn, 'family' : pn } if plink > 0: self.text.write(ngettext("%(quantity)d broken spouse/family link was fixed\n", \ - "%(quantity)d broken spouse/family links were found\n", plink)) % { - 'quantity' : plink } + "%(quantity)d broken spouse/family links were found\n", plink)) % { 'quantity' : plink } for (person_handle, family_handle) in self.broken_parent_links: person = self.db.get_person_from_handle(person_handle) if person: @@ -1488,11 +1490,12 @@ class CheckIntegrity(object): else: pn = family_handle self.text.write('\t') - self.text.write(_("%s was restored to the family of %s\n") % (cn, pn)) + self.text.write(_("%(person)s was restored to the family of %(family)s\n")) % { + 'person' : cn, 'family' : pn } if slink > 0: - self.text.write(ngettext("%d duplicate spouse/family link was found\n", \ - "%d duplicate spouse/family links were found\n", slink) % slink) + self.text.write(ngettext("%(quantity)d duplicate spouse/family link was found\n", \ + "%(quantity)d duplicate spouse/family links were found\n", slink)) % { 'quantity' : slink } for (person_handle, family_handle) in self.broken_parent_links: person = self.db.get_person_from_handle(person_handle) if person: @@ -1505,78 +1508,91 @@ class CheckIntegrity(object): else: pn = _("None") self.text.write('\t') - self.text.write(_("%s was restored to the family of %s\n") % (cn, pn)) + self.text.write(_("%(person)s was restored to the family of %(family)s\n")) % { + 'person' : cn, 'family' : pn } if efam == 1: self.text.write(_("%d family with no parents or children found, removed.\n")) - self.text.write("\t%(empty_family)s\n") % {'empty_family' : self.empty_family[0] } + self.text.write("\t%s\n" % self.empty_family[0]) elif efam > 1: self.text.write(_("%(quantity)d families with no parents or children, removed.\n")) % { 'quantity' : efam } if rel: - self.text.write(ngettext("%d corrupted family relationship fixed\n", \ - "%d corrupted family relationship fixed\n", rel) % rel ) + self.text.write(ngettext("%(quantity)d corrupted family relationship fixed\n", \ + "%(quantity)d corrupted family relationship fixed\n", rel)) % { 'quantity' : rel } if person_references: - self.text.write(ngettext("%d person was referenced but not found\n", \ - "%d persons were referenced, but not found\n", person_references) % person_references) + self.text.write(ngettext("%(quantity)d person was referenced but not found\n", \ + "%(quantity)d persons were referenced, but not found\n", person_references)) % { + 'quantity' : person_references } if invalid_dates: - self.text.write(ngettext("%d date was corrected\n", \ - "%d dates were corrected\n", invalid_dates) % invalid_dates) + self.text.write(ngettext("%(quantity)d date was corrected\n", \ + "%(quantity)d dates were corrected\n", invalid_dates)) % { 'quantity' : invalid_dates } if repo_references: - self.text.write(ngettext("%d repository was referenced but not found\n", \ - "%d repositories were referenced, but not found\n", repo_references) % repo_references) + self.text.write(ngettext("%(quantity)d repository was referenced but not found\n", \ + "%(quantity)d repositories were referenced, but not found\n", repo_references)) % { + 'quantity' : repo_references } if photos: - self.text.write(ngettext("%d media object was referenced, but not found\n", \ - "%d media objects were referenced, but not found\n", photos) % photos) + self.text.write(ngettext("%(quantity)d media object was referenced, but not found\n", \ + "%(quantity)d media objects were referenced, but not found\n", photos)) % { 'quantity' : photos } if bad_photos: - self.text.write(ngettext("Reference to %d missing media object was kept\n", \ - "References to %d media objects were kept\n", bad_photos) % bad_photos) + self.text.write(ngettext("Reference to %(quantity)d missing media object was kept\n", \ + "References to %(quantity)d media objects were kept\n", bad_photos)) % { + 'quantity' : bad_photos } if replaced_photos: - self.text.write(ngettext("%d missing media object was replaced\n", \ - "%d missing media objects were replaced\n", replaced_photos) % replaced_photos) + self.text.write(ngettext("%(quantity)d missing media object was replaced\n", \ + "%(quantity)d missing media objects were replaced\n", replaced_photos)) % { + 'quantity' : replaced_photos } if removed_photos: - self.text.write(ngettext("%d missing media object was removed\n", \ - "%d missing media objects were removed\n", removed_photos) % removed_photos) + self.text.write(ngettext("%(quantity)d missing media object was removed\n", \ + "%(quantity)d missing media objects were removed\n", removed_photos)) % { + 'quantity' : removed_photos } if event_invalid: - self.text.write(ngettext("%d invalid event reference was removed\n", \ - "%d invalid event references were removed\n", event_invalid) % event_invalid) + self.text.write(ngettext("%(quantity)d invalid event reference was removed\n", \ + "%(quantity)d invalid event references were removed\n", event_invalid)) % { + 'quantity' : event_invalid } if birth_invalid: - self.text.write(ngettext("%d invalid birth event name was fixed\n", \ - "%d invalid birth event names were fixed\n", birth_invalid) % birth_invalid) + self.text.write(ngettext("%(quantity)d invalid birth event name was fixed\n", \ + "%(quantity)d invalid birth event names were fixed\n", birth_invalid)) % { + 'quantity' : birth_invalid } if death_invalid: - self.text.write(ngettext("%d invalid death event name was fixed\n", \ - "%d invalid death event names were fixed\n", death_invalid) % death_invalid) + self.text.write(ngettext("%(quantity)d invalid death event name was fixed\n", \ + "%(quantity)d invalid death event names were fixed\n", death_invalid)) % { + 'quantity' : death_invalid } if place_references: - self.text.write(ngettext("%d place was referenced but not found\n", \ - "%d places were referenced, but not found\n", place_references) % place_references) + self.text.write(ngettext("%(quantity)d place was referenced but not found\n", \ + "%(quantity)d places were referenced, but not found\n", place_references)) % { + 'quantity' : place_references } if source_references: - self.text.write(ngettext("%d source was referenced but not found\n", \ - "%d sources were referenced, but not found\n", source_references) % source_references) + self.text.write(ngettext("%(quantity)d source was referenced but not found\n", \ + "%(quantity)d sources were referenced, but not found\n", source_references)) % { + 'quantity' : source_references } if media_references: self.text.write(ngettext("%d media object was referenced but not found\n", \ "%d media objects were referenced but not found\n", media_references) % media_references) if note_references: - self.text.write(ngettext("%d note object was referenced but not found\n", \ - "%d note objects were referenced but not found\n", note_references) % note_references) + self.text.write(ngettext("%(quantity)d note object was referenced but not found\n", \ + "%(quantity)d note objects were referenced but not found\n", note_references)) % { + 'quantity' : note_references } if name_format: - self.text.write(ngettext("%d invalid name format reference was removed\n", \ - "%d invalid name format references were removed\n", name_format) % name_format) + self.text.write(ngettext("%(quantity)d invalid name format reference was removed\n", \ + "%(quantity)d invalid name format references were removed\n", name_format)) % { + 'quantity' : name_format } if empty_objs > 0 : self.text.write(_("%(empty_obj)d empty objects removed:\n" @@ -1587,7 +1603,7 @@ class CheckIntegrity(object): " %(media)d media objects\n" " %(place)d place objects\n" " %(repo)d repository objects\n" - " %(note)d note objects\n" ) % { + " %(note)d note objects\n" )) % { 'empty_obj' : empty_objs, 'person' : len(self.empty_objects['persons']), 'family' : len(self.empty_objects['families']), @@ -1596,7 +1612,7 @@ class CheckIntegrity(object): 'media' : len(self.empty_objects['media']), 'place' : len(self.empty_objects['places']), 'repo' : len(self.empty_objects['repos']), - 'note' : len(self.empty_objects['notes']) } ) + 'note' : len(self.empty_objects['notes']) } return errors diff --git a/src/plugins/tool/RelCalc.py b/src/plugins/tool/RelCalc.py index 08c23bebe..b71b830b8 100644 --- a/src/plugins/tool/RelCalc.py +++ b/src/plugins/tool/RelCalc.py @@ -43,7 +43,7 @@ import gtk # GRAMPS modules # #------------------------------------------------------------------------- -from gen.display.name import displayer as _nd +from gen.display.name import displayer as name_displayer import ManagedWindow from gui.views.treemodels import PeopleBaseModel, PersonTreeModel from libpersonview import BasePersonView @@ -100,7 +100,7 @@ class RelCalc(Tool.Tool, ManagedWindow.ManagedWindow): uistate.get_active('Person')) name = '' if self.person: - name = _nd.display(self.person) + name = name_displayer.display(self.person) self.title = _('Relationship calculator: %(person_name)s' ) % {'person_name' : name} window = self.glade.toplevel @@ -178,15 +178,15 @@ class RelCalc(Tool.Tool, ManagedWindow.ManagedWindow): rel_strings, common_an = self.relationship.get_all_relationships( self.db, self.person, other_person) - p1 = _nd.display(self.person) - p2 = _nd.display(other_person) + p1 = name_displayer.display(self.person) + p2 = name_displayer.display(other_person) text = [] if other_person is None: pass elif self.person.handle == other_person.handle: - rstr = _("%(person)s and %(active_person)s are the same person.") % { - 'person' : p1, 'active_person' : p2} + rstr = _("%(person)s and %(active_person)s are the same person.")) % { + 'person' : p1, 'active_person' : p2 } text.append((rstr, "")) elif len(rel_strings) == 0: rstr = _("%(person)s and %(active_person)s are not related.") % { @@ -203,15 +203,15 @@ class RelCalc(Tool.Tool, ManagedWindow.ManagedWindow): if common[0] in [other_person.handle, self.person.handle]: commontext = '' else : - name = _nd.display(person) + name = name_displayer.display(person) commontext = " " + _("Their common ancestor is %s.") % name elif length == 2: p1c = self.db.get_person_from_handle(common[0]) p2c = self.db.get_person_from_handle(common[1]) - p1str = _nd.display(p1c) - p2str = _nd.display(p2c) - commontext = " " + _("Their common ancestors are %s and %s." - ) % (p1str,p2str) + p1str = name_displayer.display(p1c) + p2str = name_displayer.display(p2c) + commontext = " " + _("Their common ancestors are %(acentor1)s and %(ancestor2)s.") + % { 'ancestor1' : p1str, 'ancestor2' : p2str } elif length > 2: index = 0 commontext = " " + _("Their common ancestors are: ") @@ -219,7 +219,7 @@ class RelCalc(Tool.Tool, ManagedWindow.ManagedWindow): person = self.db.get_person_from_handle(person_handle) if index: commontext += ", " - commontext += _nd.display(person) + commontext += name_displayer.display(person) index += 1 commontext += "." else: diff --git a/src/plugins/webreport/NarrativeWeb.py b/src/plugins/webreport/NarrativeWeb.py index 43814681a..b48b9e78e 100644 --- a/src/plugins/webreport/NarrativeWeb.py +++ b/src/plugins/webreport/NarrativeWeb.py @@ -942,6 +942,10 @@ class BasePage(object): fname = "/".join(["styles", _NARRATIVESCREEN]) url2 = self.report.build_url_fname(fname, None, self.up) + # link to Navigation stylesheet + fname = "/".join(["styles", "Web_Alphabet-Vertical.css"]) + url5 = self.report.build_url_fname(fname, None, self.up) + # Link to _NARRATIVEPRINT stylesheet fname = "/".join(["styles", _NARRATIVEPRINT]) url3 = self.report.build_url_fname(fname, None, self.up) @@ -2137,8 +2141,11 @@ class PlaceListPage(BasePage): table += thead trow = Html("tr") + ( - Html("th", _("Letter"), class_ = "ColumnLetter", inline = True), - Html("th", _("Place name | Name"), class_ = "ColumnName", inline = True) + Html("th", _("Letter"), class_ = "ColumnLetter", inline = True), + Html("th", _("Place name | Name"), class_ = "ColumnName", inline = True), + Html("th", _("State"), class_ = "ColumnState", inline = True), + Html("th", _("Country"), class_ = "ColumnCtry", inline = True), + Html("th", _("Latitude/ Longitude"), class_ = "ColumnCoordinates", inline = True) ) thead += trow @@ -2158,6 +2165,7 @@ class PlaceListPage(BasePage): continue letter = first_letter(place_title) + ml = place.get_main_location() trow = Html("tr") tbody += trow @@ -2176,6 +2184,13 @@ class PlaceListPage(BasePage): trow += Html("td", self.place_link(place.handle, place_title, place.gramps_id), class_ = "ColumnName") + trow.extend( Html("td", data, class_ = "Column" + colclass, inline = True) + for (colclass, data) in [ + ["State", ml.state], + ["Country", ml.country], + ["Coordinates", place.lat + "," + place.long] ] + if data or " " ) + # add clearline for proper styling # add footer section footer = self.write_footer() @@ -5114,6 +5129,10 @@ class NavWebReport(Report): fname = os.path.join(const.DATA_DIR, self.css) self.copy_file(fname, _NARRATIVESCREEN, "styles") + # copy Navigation stylesheet + fname = os.path.join(const.DATA_DIR, "Web_Alphabet-Vertical.css") + self.copy_file(fname, "Web_Alphabet-Vertical.css", "styles") + # copy printer stylesheet fname = os.path.join(const.DATA_DIR, "Web_Print-Default.css") self.copy_file(fname, _NARRATIVEPRINT, "styles")