diff --git a/gramps/gen/lib/date.py b/gramps/gen/lib/date.py
index c4a82ebf7..23be4f71e 100644
--- a/gramps/gen/lib/date.py
+++ b/gramps/gen/lib/date.py
@@ -404,12 +404,15 @@ class Span(object):
"""
trans_text = dlocale.translation.sgettext
# trans_text is a defined keyword (see po/update_po.py, po/genpot.sh)
- ngettext = dlocale.translation.ngettext
+ ngettext = dlocale.translation.ngettext # to see "nearby" comments
if diff_tuple == (-1, -1, -1): return trans_text("unknown")
retval = ""
detail = 0
if diff_tuple[0] != 0:
- retval += ngettext("%d year", "%d years", diff_tuple[0]) % diff_tuple[0]
+ # translators: leave all/any {...} untranslated
+ retval += ngettext("{number_of} year", "{number_of} years",
+ diff_tuple[0]
+ ).format(number_of=diff_tuple[0])
detail += 1
if self.precision == detail:
return retval
@@ -417,7 +420,10 @@ class Span(object):
if retval != "":
# translators: needed for Arabic, ignore otherwise
retval += trans_text(", ")
- retval += ngettext("%d month", "%d months", diff_tuple[1]) % diff_tuple[1]
+ # translators: leave all/any {...} untranslated
+ retval += ngettext("{number_of} month", "{number_of} months",
+ diff_tuple[1]
+ ).format(number_of=diff_tuple[1])
detail += 1
if self.precision == detail:
return retval
@@ -425,7 +431,10 @@ class Span(object):
if retval != "":
# translators: needed for Arabic, ignore otherwise
retval += trans_text(", ")
- retval += ngettext("%d day", "%d days", diff_tuple[2]) % diff_tuple[2]
+ # translators: leave all/any {...} untranslated
+ retval += ngettext("{number_of} day", "{number_of} days",
+ diff_tuple[2]
+ ).format(number_of=diff_tuple[2])
detail += 1
if self.precision == detail:
return retval
diff --git a/gramps/gui/plug/_windows.py b/gramps/gui/plug/_windows.py
index dcdfdaa2c..c18943028 100644
--- a/gramps/gui/plug/_windows.py
+++ b/gramps/gui/plug/_windows.py
@@ -57,11 +57,12 @@ from gi.repository import GObject
# GRAMPS modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from ..managedwindow import ManagedWindow
from gramps.gen.errors import UnavailableError, WindowActiveError
from gramps.gen.plug import PluginRegister, PTYPE_STR, load_addon_file
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.gettext
from ..utils import open_file_with_default_application
from ..pluginmanager import GuiPluginManager
from . import tool
@@ -1203,9 +1204,10 @@ class UpdateAddons(ManagedWindow):
longop.end()
if count:
OkDialog(_("Done downloading and installing addons"),
- "%s %s" % (glocale.translation.ngettext("%d addon was installed.",
- "%d addons were installed.",
- count) % count,
+ # translators: leave all/any {...} untranslated
+ "%s %s" % (ngettext("{number_of} addon was installed.",
+ "{number_of} addons were installed.",
+ count).format(number_of=count),
_("You need to restart Gramps to see new views.")),
self.window)
else:
diff --git a/gramps/gui/plug/export/_exportoptions.py b/gramps/gui/plug/export/_exportoptions.py
index a7a011250..c507e5f0e 100644
--- a/gramps/gui/plug/export/_exportoptions.py
+++ b/gramps/gui/plug/export/_exportoptions.py
@@ -37,7 +37,7 @@
#-------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
-ngettext = glocale.translation.ngettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.config import config
from gramps.gen.display.name import displayer as name_displayer
from gramps.gen.filters import GenericFilter, rules
@@ -147,8 +147,10 @@ class WriterOptionBox(object):
full_database_row = Gtk.HBox()
full_database_row.pack_start(Gtk.Label(_("Unfiltered Family Tree:")), True, True, 0)
people_count = len(self.dbstate.db.get_person_handles())
- button = Gtk.Button(ngettext("%d Person", "%d People", people_count) %
- people_count)
+ # translators: leave all/any {...} untranslated
+ button = Gtk.Button(ngettext("{number_of} Person",
+ "{number_of} People", people_count
+ ).format(number_of=people_count) )
button.set_tooltip_text(_("Click to see preview of unfiltered data"))
button.set_size_request(107, -1)
button.connect("clicked", self.show_preview_data)
@@ -251,7 +253,10 @@ class WriterOptionBox(object):
# Make a box and put the option in it:
from gi.repository import Gtk
from ...widgets import SimpleButton
- button = Gtk.Button(ngettext("%d Person", "%d People", 0) % 0)
+ # translators: leave all/any {...} untranslated
+ button = Gtk.Button(ngettext("{number_of} Person",
+ "{number_of} People", 0
+ ).format(number_of=0) )
button.set_size_request(107, -1)
button.connect("clicked", self.show_preview_data)
button.proxy_name = proxy_name
@@ -547,8 +552,10 @@ class WriterOptionBox(object):
self.preview_proxy_button[proxy_name].set_sensitive(1)
people_count = len(dbase.get_person_handles())
self.preview_proxy_button[proxy_name].set_label(
- ngettext("%d Person", "%d People", people_count) %
- people_count)
+ # translators: leave all/any {...} untranslated
+ ngettext("{number_of} Person",
+ "{number_of} People", people_count
+ ).format(number_of=people_count) )
return dbase
def apply_proxy(self, proxy_name, dbase, progress=None):
diff --git a/gramps/plugins/drawreport/calendarreport.py b/gramps/plugins/drawreport/calendarreport.py
index 3f909938b..7b9de9f8c 100644
--- a/gramps/plugins/drawreport/calendarreport.py
+++ b/gramps/plugins/drawreport/calendarreport.py
@@ -314,7 +314,7 @@ class Calendar(Report):
db.get_number_of_people()) as step:
people = self.filter.apply(self.database, people, step)
- ngettext = self._locale.translation.ngettext
+ ngettext = self._locale.translation.ngettext # to see "nearby" comments
with self._user.progress(_('Calendar Report'),
_('Reading database...'),
@@ -365,10 +365,11 @@ class Calendar(Report):
text = self._('%(person)s, birth') % {
'person' : short_name }
else:
- text = (ngettext('%(person)s, %(age)d',
- '%(person)s, %(age)d', nyears)
- % {'person' : short_name,
- 'age' : nyears })
+ # translators: leave all/any {...} untranslated
+ text = ngettext('{person}, {age}',
+ '{person}, {age}',
+ nyears).format(person=short_name,
+ age=nyears)
self.add_day_item(text, month, day, marks=[mark])
if self.anniversaries:
family_list = person.get_family_handle_list()
@@ -426,11 +427,10 @@ class Calendar(Report):
'person' : short_name,
}
else:
- text = (ngettext("%(spouse)s and\n %(person)s, %(nyears)d",
- "%(spouse)s and\n %(person)s, %(nyears)d", nyears)
- % {'spouse' : spouse_name,
- 'person' : short_name,
- 'nyears' : nyears})
+ # translators: leave all/any {...} untranslated
+ text = ngettext("{spouse} and\n {person}, {nyears}",
+ "{spouse} and\n {person}, {nyears}",
+ nyears).format(spouse=spouse_name, person=short_name, nyears=nyears)
alive1 = probably_alive(person,
self.database,
diff --git a/gramps/plugins/gramplet/pedigreegramplet.py b/gramps/plugins/gramplet/pedigreegramplet.py
index 3dc2b66a1..2688a1f32 100644
--- a/gramps/plugins/gramplet/pedigreegramplet.py
+++ b/gramps/plugins/gramplet/pedigreegramplet.py
@@ -33,9 +33,10 @@ import cgi
# GRAMPS modules
#
#------------------------------------------------------------------------
-from gramps.gen.plug import Gramplet
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
+from gramps.gen.plug import Gramplet
from gramps.gen.display.name import displayer as name_displayer
from gramps.gen.datehandler import get_date
from gramps.gen.lib import EventType
@@ -267,16 +268,22 @@ class PedigreeGramplet(Gramplet):
self.link(_("Generation %d") % g, 'PersonList', handles,
tooltip=_("Double-click to see people in generation %d") % g)
percent = glocale.format('%.2f', float(count)/2**(g-1) * 100) + percent_sign
- self.append_text(glocale.translation.ngettext(
- " has %(count_person)d of %(max_count_person)d individuals (%(percent)s complete)\n",
- " has %(count_person)d of %(max_count_person)d individuals (%(percent)s complete)\n",
- 2**(g-1)) % {'count_person': count, 'max_count_person': 2**(g-1), 'percent': percent})
+ self.append_text(
+ # translators: leave all/any {...} untranslated
+ ngettext(" has {count_person} of {max_count_person} "
+ "individuals ({percent} complete)\n",
+ " has {count_person} of {max_count_person} "
+ "individuals ({percent} complete)\n", 2**(g-1)
+ ).format(count_person=count,
+ max_count_person=2**(g-1),
+ percent=percent) )
self.link(_("All generations"), 'PersonList', all,
tooltip=_("Double-click to see all generations"))
- self.append_text(glocale.translation.ngettext(
- " have %d individual\n",
- " have %d individuals\n",
- len(all)) % len(all))
+ self.append_text(
+ # translators: leave all/any {...} untranslated
+ ngettext(" have {number_of} individual\n",
+ " have {number_of} individuals\n", len(all)
+ ).format(number_of=len(all)) )
# Set to a fixed font
if self.box_mode == "UTF":
start, end = self.gui.buffer.get_bounds()
diff --git a/gramps/plugins/graph/gvfamilylines.py b/gramps/plugins/graph/gvfamilylines.py
index 2478b4ea9..483031765 100644
--- a/gramps/plugins/graph/gvfamilylines.py
+++ b/gramps/plugins/graph/gvfamilylines.py
@@ -895,6 +895,7 @@ class FamilyLinesReport(Report):
def writeFamilies(self):
self.doc.add_comment('')
+ ngettext = self._locale.translation.ngettext # to see "nearby" comments
# loop through all the families we need to output
for family_handle in self._families:
@@ -936,8 +937,10 @@ class FamilyLinesReport(Report):
if self._incchildcount:
child_count = len(family.get_child_ref_list())
if child_count >= 1:
- childrenStr = self._locale.translation.ngettext(
- "%d child", "%d children", child_count) % child_count
+ # translators: leave all/any {...} untranslated
+ childrenStr = ngettext("{number_of} child",
+ "{number_of} children", child_count
+ ).format(number_of=child_count)
label = ''
if weddingDate:
diff --git a/gramps/plugins/importer/importcsv.py b/gramps/plugins/importer/importcsv.py
index 0c3890e1c..4e28137f5 100644
--- a/gramps/plugins/importer/importcsv.py
+++ b/gramps/plugins/importer/importcsv.py
@@ -50,6 +50,7 @@ LOG = logging.getLogger(".ImportCSV")
#-------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.lib import ChildRef, Citation, Event, EventRef, EventType, Family, FamilyRelType, Name, NameType, Note, NoteType, Person, Place, Source, Surname, Tag
from gramps.gen.db import DbTxn
from gramps.gen.plug.utils import OpenFileOrStdin
@@ -340,8 +341,10 @@ class CSVParser(object):
self.db.enable_signals()
self.db.request_rebuild()
tym = time.time() - tym
- msg = glocale.translation.ngettext('Import Complete: %d second',
- 'Import Complete: %d seconds', tym ) % tym
+ # translators: leave all/any {...} untranslated
+ msg = ngettext('Import Complete: {number_of} second',
+ 'Import Complete: {number_of} seconds', tym
+ ).format(number_of=tym)
LOG.debug(msg)
LOG.debug("New Families: %d" % self.fam_count)
LOG.debug("New Individuals: %d" % self.indi_count)
diff --git a/gramps/plugins/importer/importgeneweb.py b/gramps/plugins/importer/importgeneweb.py
index 57435bb82..d56efff36 100644
--- a/gramps/plugins/importer/importgeneweb.py
+++ b/gramps/plugins/importer/importgeneweb.py
@@ -32,8 +32,6 @@ from __future__ import print_function
import re
import time
import sys
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.gettext
#------------------------------------------------------------------------
#
@@ -48,6 +46,9 @@ LOG = logging.getLogger(".ImportGeneWeb")
# GRAMPS modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.errors import GedcomError
from gramps.gen.lib import (Attribute, AttributeType, ChildRef, Citation,
Date, DateError, Event, EventRef, EventRoleType, EventType,
@@ -190,7 +191,10 @@ class GeneWebParser(object):
self.errmsg(str(err))
t = time.time() - t
- msg = glocale.translation.ngettext('Import Complete: %d second','Import Complete: %d seconds', t ) % t
+ # translators: leave all/any {...} untranslated
+ msg = ngettext('Import Complete: {number_of} second',
+ 'Import Complete: {number_of} seconds', t
+ ).format(number_of=t)
self.db.enable_signals()
self.db.request_rebuild()
diff --git a/gramps/plugins/importer/importvcard.py b/gramps/plugins/importer/importvcard.py
index 20d216279..ab85a4d56 100644
--- a/gramps/plugins/importer/importvcard.py
+++ b/gramps/plugins/importer/importvcard.py
@@ -30,8 +30,6 @@
import sys
import re
import time
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.gettext
#------------------------------------------------------------------------
#
@@ -46,6 +44,9 @@ LOG = logging.getLogger(".ImportVCard")
# GRAMPS modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.errors import GrampsImportError
from gramps.gen.lib import (Address, Date, DateError, Event, EventRef,
EventType, Name, NameType, Person, Surname, Url, UrlType)
@@ -227,8 +228,10 @@ class VCardParser(object):
self.database.enable_signals()
self.database.request_rebuild()
tym = time.time() - tym
- msg = glocale.translation.ngettext('Import Complete: %d second',
- 'Import Complete: %d seconds', tym ) % tym
+ # translators: leave all/any {...} untranslated
+ msg = ngettext('Import Complete: {number_of} second',
+ 'Import Complete: {number_of} seconds', tym
+ ).format(number_of=tym)
LOG.debug(msg)
def _parse_vCard_file(self, filehandle):
diff --git a/gramps/plugins/quickview/filterbyname.py b/gramps/plugins/quickview/filterbyname.py
index 0e9785140..f3871b43a 100644
--- a/gramps/plugins/quickview/filterbyname.py
+++ b/gramps/plugins/quickview/filterbyname.py
@@ -38,6 +38,7 @@ import posixpath
from collections import defaultdict
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
fname_map = {'all': _('Filtering_on|all'),
'Inverse Person': _('Filtering_on|Inverse Person'),
@@ -392,9 +393,10 @@ def run(database, document, filter_name, *args, **kwargs):
else:
raise AttributeError("invalid filter name: '%s'" % filter_name)
- sdoc.paragraph(glocale.translation.ngettext("Filter matched %d record."
- ,
- "Filter matched %d records.", matches) % matches)
+ # translators: leave all/any {...} untranslated
+ sdoc.paragraph(ngettext("Filter matched {number_of} record.",
+ "Filter matched {number_of} records.", matches
+ ).format(number_of=matches) )
sdoc.paragraph("")
document.has_data = matches > 0
if matches > 0:
diff --git a/gramps/plugins/quickview/samesurnames.py b/gramps/plugins/quickview/samesurnames.py
index 03c1d6f19..45ed8a40b 100644
--- a/gramps/plugins/quickview/samesurnames.py
+++ b/gramps/plugins/quickview/samesurnames.py
@@ -27,10 +27,11 @@
Display a people who have a person's same surname or given name.
"""
-from gramps.gen.simple import SimpleAccess, SimpleDoc
-from gramps.gui.plug.quick import QuickTable
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
+from gramps.gen.simple import SimpleAccess, SimpleDoc
+from gramps.gui.plug.quick import QuickTable
from gramps.gen.lib import Person
from gramps.gen.filters.rules import Rule
from gramps.gen.filters import GenericFilterFactory
@@ -131,10 +132,13 @@ def run(database, document, person):
matches += 1
document.has_data = matches > 0
- sdoc.paragraph(glocale.translation.ngettext("There is %d person with a matching name, or alternate name.\n"
- ,
- "There are %d people with a matching name, or alternate name.\n"
- , matches) % matches)
+ sdoc.paragraph(
+ # translators: leave all/any {...} untranslated
+ ngettext("There is {number_of} person "
+ "with a matching name, or alternate name.\n",
+ "There are {number_of} people "
+ "with a matching name, or alternate name.\n", matches
+ ).format(number_of=matches) )
stab.write(sdoc)
def run_given(database, document, person):
@@ -173,8 +177,11 @@ def run_given(database, document, person):
matches += 1
document.has_data = matches > 0
- sdoc.paragraph(glocale.translation.ngettext("There is %d person with a matching name, or alternate name.\n"
- ,
- "There are %d people with a matching name, or alternate name.\n"
- , matches) % matches)
+ sdoc.paragraph(
+ # translators: leave all/any {...} untranslated
+ ngettext("There is {number_of} person "
+ "with a matching name, or alternate name.\n",
+ "There are {number_of} people "
+ "with a matching name, or alternate name.\n", matches
+ ).format(number_of=matches) )
stab.write(sdoc)
diff --git a/gramps/plugins/textreport/birthdayreport.py b/gramps/plugins/textreport/birthdayreport.py
index 6c8253dd0..82229a6e1 100644
--- a/gramps/plugins/textreport/birthdayreport.py
+++ b/gramps/plugins/textreport/birthdayreport.py
@@ -266,7 +266,7 @@ class BirthdayReport(Report):
rel_calc = get_relationship_calculator(reinit=True,
clocale=self._locale)
- ngettext = self._locale.translation.ngettext
+ ngettext = self._locale.translation.ngettext # to see "nearby" comments
with self._user.progress(_('Birthday and Anniversary Report'),
_('Reading database...'), len(people)) as step:
@@ -330,11 +330,12 @@ class BirthdayReport(Report):
'person' : short_name,
'relation' : comment}
else:
- text = (ngettext('%(person)s, %(age)d%(relation)s',
- '%(person)s, %(age)d%(relation)s', nyears)
- % {'person' : short_name,
- 'age' : nyears,
- 'relation' : comment})
+ # translators: leave all/any {...} untranslated
+ text = ngettext('{person}, {age}{relation}',
+ '{person}, {age}{relation}',
+ nyears).format(person=short_name,
+ age=nyears,
+ relation=comment)
self.add_day_item(text, month, day, person)
if self.anniversaries:
@@ -382,11 +383,10 @@ class BirthdayReport(Report):
'spouse' : spouse_name,
'person' : short_name}
else:
- text = (ngettext("%(spouse)s and\n %(person)s, %(nyears)d",
- "%(spouse)s and\n %(person)s, %(nyears)d", nyears)
- % {'spouse' : spouse_name,
- 'person' : short_name,
- 'nyears' : nyears})
+ # translators: leave all/any {...} untranslated
+ text = ngettext("{spouse} and\n {person}, {nyears}",
+ "{spouse} and\n {person}, {nyears}",
+ nyears).format(spouse=spouse_name, person=short_name, nyears=nyears)
prob_alive_date = Date(self.year, month, day)
alive1 = probably_alive(person, self.database,
diff --git a/gramps/plugins/textreport/numberofancestorsreport.py b/gramps/plugins/textreport/numberofancestorsreport.py
index 91dc5d9da..6b11cfff6 100644
--- a/gramps/plugins/textreport/numberofancestorsreport.py
+++ b/gramps/plugins/textreport/numberofancestorsreport.py
@@ -101,6 +101,7 @@ class NumberOfAncestorsReport(Report):
all_people = {}
total_theoretical = 0
thisgen[self.__person.get_handle()]=1
+ ngettext = self._locale.translation.ngettext # to see "nearby" comments
self.doc.start_paragraph("NOA-Title")
name = self._name_display.display(self.__person)
@@ -124,15 +125,13 @@ class NumberOfAncestorsReport(Report):
# TC # English return something like:
# Generation 3 has 2 individuals. (50.00%)
- text = self._locale.translation.ngettext(
- "Generation %(generation)d has %(count)d individual. "
- "%(percent)s",
- "Generation %(generation)d has %(count)d individuals. "
- "%(percent)s",
- thisgensize) % {
- 'generation': gen,
- 'count': thisgensize,
- 'percent': percent}
+ # translators: leave all/any {...} untranslated
+ text = ngettext(
+ "Generation {number} has {count} individual. {percent}",
+ "Generation {number} has {count} individuals. {percent}",
+ thisgensize).format(number=gen,
+ count=thisgensize,
+ percent=percent)
self.doc.start_paragraph('NOA-Normal')
self.doc.write_text(text)
diff --git a/gramps/plugins/tool/changetypes.py b/gramps/plugins/tool/changetypes.py
index e7307e12e..dc92d6626 100644
--- a/gramps/plugins/tool/changetypes.py
+++ b/gramps/plugins/tool/changetypes.py
@@ -36,9 +36,10 @@ from __future__ import print_function
# GRAMPS modules
#
#------------------------------------------------------------------------
-from gramps.gui.utils import ProgressMeter
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
+from gramps.gui.utils import ProgressMeter
from gramps.gui.managedwindow import ManagedWindow
from gramps.gui.autocomp import fill_combo
from gramps.gen.lib import EventType
@@ -130,8 +131,10 @@ class ChangeTypes(tool.BatchTool, ManagedWindow):
if modified == 0:
msg = _("No event record was modified.")
else:
- msg = glocale.translation.ngettext("%d event record was modified."
- , "%d event records were modified.", modified) % modified
+ # translators: leave all/any {...} untranslated
+ msg = ngettext("{number_of} event record was modified.",
+ "{number_of} event records were modified.", modified
+ ).format(number_of=modified)
self.user.info(_('Change types'), msg, parent_window)
return (bool(modified),msg)
diff --git a/gramps/plugins/tool/check.py b/gramps/plugins/tool/check.py
index ae3a7af17..858d572b7 100644
--- a/gramps/plugins/tool/check.py
+++ b/gramps/plugins/tool/check.py
@@ -60,6 +60,9 @@ from gi.repository import Gtk
# GRAMPS modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.lib import (Citation, Event, EventType, Family, MediaObject,
Name, Note, Person, Place, Repository, Source,
StyledText, Tag)
@@ -77,9 +80,6 @@ from gramps.gui.dialog import OkDialog, MissingMediaDialog
from gramps.gen.display.name import displayer as _nd
from gramps.gui.glade import Glade
from gramps.gen.constfunc import UNITYPE, cuni, handle2internal
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.gettext
-ngettext = glocale.translation.ngettext
# table for handling control chars in notes.
# All except 09, 0A, 0D are replaced with space.
@@ -2103,10 +2103,11 @@ class CheckIntegrity(object):
self.text = StringIO()
if blink > 0:
self.text.write(
- ngettext("%(quantity)d broken child/family link was fixed\n",
- "%(quantity)d broken child-family links were fixed\n",
- blink) % {'quantity': blink}
- )
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} broken child/family link was fixed\n",
+ "{quantity} broken child/family links were fixed\n",
+ blink).format(quantity=blink)
+ )
for (person_handle, family_handle) in self.broken_links:
person = self.db.get_person_from_handle(person_handle)
if person:
@@ -2126,9 +2127,10 @@ class CheckIntegrity(object):
if plink > 0:
self.text.write(
- ngettext("%(quantity)d broken spouse/family link was fixed\n",
- "%(quantity)d broken spouse/family links were fixed\n",
- plink) % {'quantity' : plink}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} broken spouse/family link was fixed\n",
+ "{quantity} broken spouse/family links were fixed\n",
+ plink).format(quantity=plink)
)
for (person_handle, family_handle) in self.broken_parent_links:
person = self.db.get_person_from_handle(person_handle)
@@ -2149,9 +2151,12 @@ class CheckIntegrity(object):
if slink > 0:
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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} duplicate "
+ "spouse/family link was found\n",
+ "{quantity} duplicate "
+ "spouse/family links were found\n",
+ slink).format(quantity=slink)
)
for (person_handle, family_handle) in self.broken_parent_links:
person = self.db.get_person_from_handle(person_handle)
@@ -2183,143 +2188,195 @@ class CheckIntegrity(object):
if rel:
self.text.write(
- ngettext("%d corrupted family relationship fixed\n",
- "%d corrupted family relationship fixed\n",
- rel) % rel
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} corrupted family relationship fixed\n",
+ "{quantity} corrupted family relationships fixed\n",
+ rel).format(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
+ # translators: leave all/any {...} untranslated
+ ngettext(
+ "{quantity} person was referenced but not found\n",
+ "{quantity} persons were referenced, but not found\n",
+ person_references).format(quantity=person_references)
)
if family_references:
self.text.write(
- ngettext("%d family was referenced but not found\n",
- "%d families were referenced, but not found\n",
- family_references) % family_references
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} family was "
+ "referenced but not found\n",
+ "{quantity} families were "
+ "referenced, but not found\n",
+ family_references).format(quantity=family_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(
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} date was corrected\n",
+ "{quantity} dates were corrected\n",
+ invalid_dates).format(quantity=invalid_dates)
+ )
if 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})
+ # translators: leave all/any {...} untranslated
+ ngettext(
+ "{quantity} repository was "
+ "referenced but not found\n",
+ "{quantity} repositories were "
+ "referenced, but not found\n",
+ repo_references).format(quantity=repo_references)
+ )
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} media object was "
+ "referenced but not found\n",
+ "{quantity} media objects were "
+ "referenced, but not found\n",
+ photos).format(quantity=photos)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext(
+ "Reference to {quantity} missing media object was kept\n",
+ "References to {quantity} media objects were kept\n",
+ bad_photos).format(quantity=bad_photos)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} missing media object was replaced\n",
+ "{quantity} missing media objects were replaced\n",
+ replaced_photos).format(quantity=replaced_photos)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} missing media object was removed\n",
+ "{quantity} missing media objects were removed\n",
+ removed_photos).format(quantity=removed_photos)
)
if event_invalid:
self.text.write(
- ngettext("%(quantity)d event was referenced but not found\n",
- "%(quantity)d events were referenced, but not found\n",
- event_invalid) % {'quantity': event_invalid}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} event was referenced but not found\n",
+ "{quantity} events were referenced, but not found\n",
+ event_invalid).format(quantity=event_invalid)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} invalid birth event name was fixed\n",
+ "{quantity} invalid birth event names were fixed\n",
+ birth_invalid).format(quantity=birth_invalid)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} invalid death event name was fixed\n",
+ "{quantity} invalid death event names were fixed\n",
+ death_invalid).format(quantity=death_invalid)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} place was referenced but not found\n",
+ "{quantity} places were referenced, but not found\n",
+ place_references).format(quantity=place_references)
)
if citation_references:
self.text.write(
- ngettext("%(quantity)d citation was referenced but not found\n",
- "%(quantity)d citations were referenced, but not found\n",
- citation_references) % {'quantity': citation_references}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} citation was "
+ "referenced but not found\n",
+ "{quantity} citations were "
+ "referenced, but not found\n",
+ citation_references
+ ).format(quantity=citation_references)
)
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} source was "
+ "referenced but not found\n",
+ "{quantity} sources were "
+ "referenced, but not found\n",
+ source_references).format(quantity=source_references)
)
if media_references:
self.text.write(
- ngettext("%(quantity)d media object was referenced but not found\n",
- "%(quantity)d media objects were referenced but not found\n",
- media_references) % {'quantity': media_references}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} media object was "
+ "referenced but not found\n",
+ "{quantity} media objects were "
+ "referenced, but not found\n",
+ media_references).format(quantity=media_references)
)
if 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})
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} note object was "
+ "referenced but not found\n",
+ "{quantity} note objects were "
+ "referenced, but not found\n",
+ note_references).format(quantity=note_references)
+ )
if tag_references:
self.text.write(
- ngettext("%(quantity)d tag object was referenced but not found\n",
- "%(quantity)d tag objects were referenced but not found\n",
- tag_references) % {'quantity': tag_references})
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} tag object was "
+ "referenced but not found\n",
+ "{quantity} tag objects were "
+ "referenced, but not found\n",
+ tag_references).format(quantity=tag_references)
+ )
if tag_references:
self.text.write(
- ngettext("%(quantity)d tag object was referenced but not found\n",
- "%(quantity)d tag objects were referenced but not found\n",
- tag_references) % {'quantity': tag_references})
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} tag object was "
+ "referenced but not found\n",
+ "{quantity} tag objects were "
+ "referenced, but not found\n",
+ tag_references).format(quantity=tag_references)
+ )
if 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}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} invalid name format "
+ "reference was removed\n",
+ "{quantity} invalid name format "
+ "references were removed\n",
+ name_format).format(quantity=name_format)
)
if replaced_sourcerefs:
self.text.write(
- ngettext("%(quantity)d invalid source citation was fixed\n",
- "%(quantity)d invalid source citations were fixed\n",
- replaced_sourcerefs) % {'quantity' : replaced_sourcerefs}
+ # translators: leave all/any {...} untranslated
+ ngettext("{quantity} invalid source citation was fixed\n",
+ "{quantity} invalid source citations were fixed\n",
+ replaced_sourcerefs
+ ).format(quantity=replaced_sourcerefs)
)
if empty_objs > 0 :
diff --git a/gramps/plugins/tool/eventnames.py b/gramps/plugins/tool/eventnames.py
index 5dd592717..8e977722d 100644
--- a/gramps/plugins/tool/eventnames.py
+++ b/gramps/plugins/tool/eventnames.py
@@ -29,8 +29,6 @@
# python modules
#
#-------------------------------------------------------------------------
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.gettext
#-------------------------------------------------------------------------
@@ -44,6 +42,9 @@ _ = glocale.translation.gettext
# gramps modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.gettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.lib import EventRoleType
from gramps.gen.db import DbTxn
from gramps.gen.utils.db import family_name
@@ -113,12 +114,14 @@ class EventNames(tool.BatchTool):
self.db.request_rebuild()
if self.change == True:
- self.user.info(_('Modifications made'),
- glocale.translation.ngettext("%s event description has been added",
- "%s event descriptions have been added", counter) % counter)
+ # translators: leave all/any {...} untranslated
+ message = ngettext("{quantity} event description has been added",
+ "{quantity} event descriptions have been added",
+ counter).format(quantity=counter)
+ self.user.info(_('Modifications made'), message)
else:
self.user.info(_('No modifications made'),
- _("No event description has been added."))
+ _("No event description has been added."))
#-------------------------------------------------------------------------
#
diff --git a/gramps/plugins/tool/mergecitations.py b/gramps/plugins/tool/mergecitations.py
index 6f2e74056..c414db0ab 100644
--- a/gramps/plugins/tool/mergecitations.py
+++ b/gramps/plugins/tool/mergecitations.py
@@ -47,6 +47,9 @@ from gi.repository import Gtk
# GRAMPS modules
#
#-------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.utils.string import conf_strings
from gramps.gen.const import URL_MANUAL_PAGE
from gramps.gui.utils import ProgressMeter
@@ -55,9 +58,7 @@ from gramps.gui.dialog import OkDialog
from gramps.gui.display import display_help
from gramps.gen.datehandler import get_date
from gramps.gui.managedwindow import ManagedWindow
-from gramps.gen.const import GRAMPS_LOCALE as glocale
from gramps.gen.merge import MergeCitationQuery
-_ = glocale.translation.sgettext
from gramps.gui.glade import Glade
from gramps.gen.db import DbTxn
@@ -227,10 +228,11 @@ class MergeCitations(tool.BatchTool,ManagedWindow):
db.enable_signals()
db.request_rebuild()
self.progress.close()
- OkDialog(
- _("Number of merges done"),
- glocale.translation.ngettext("%(num)d citation merged",
- "%(num)d citations merged", num_merges) % {'num': num_merges})
+ OkDialog(_("Number of merges done"),
+ # translators: leave all/any {...} untranslated
+ ngettext("{number_of} citation merged",
+ "{number_of} citations merged", num_merges
+ ).format(number_of=num_merges) )
self.close(obj)
#------------------------------------------------------------------------
diff --git a/gramps/plugins/tool/notrelated.py b/gramps/plugins/tool/notrelated.py
index 05534e1a6..0ed05d42e 100644
--- a/gramps/plugins/tool/notrelated.py
+++ b/gramps/plugins/tool/notrelated.py
@@ -38,6 +38,9 @@ from gi.repository import GObject
# GRAMPS modules
#
#------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.const import URL_MANUAL_PAGE
from gramps.gui.plug import tool
from gramps.gen.plug.report import utils as ReportUtils
@@ -45,9 +48,6 @@ from gramps.gui.editors import EditPerson, EditFamily
from gramps.gui.managedwindow import ManagedWindow
from gramps.gui.utils import ProgressMeter
from gramps.gui.display import display_help
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.sgettext
-ngettext = glocale.translation.ngettext
from gramps.gui.glade import Glade
from gramps.gen.lib import Tag
from gramps.gen.db import DbTxn
@@ -255,10 +255,13 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) :
# if more than 1 person is selected, use a progress indicator
if rows > 1:
progress = ProgressMeter(self.title,_('Starting'))
- #TRANS: no singular form needed, as rows is always > 1
- progress.set_pass(ngettext("Setting tag for %d person",
- "Setting tag for %d people",
- rows) % rows, rows)
+ progress.set_pass(
+ # translators: leave all/any {...} untranslated
+ #TRANS: no singular form needed, as rows is always > 1
+ ngettext("Setting tag for {number_of} person",
+ "Setting tag for {number_of} people",
+ rows).format(number_of=rows),
+ rows)
# iterate through all of the selected rows
@@ -295,12 +298,13 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) :
def findRelatedPeople(self) :
- #TRANS: No singular form is needed.
self.progress.set_pass(
- ngettext("Finding relationships between %d person",
- "Finding relationships between %d people",
- self.numberOfPeopleInDatabase) %
- self.numberOfPeopleInDatabase,
+ # translators: leave all/any {...} untranslated
+ #TRANS: No singular form is needed.
+ ngettext("Finding relationships between {number_of} person",
+ "Finding relationships between {number_of} people",
+ self.numberOfPeopleInDatabase
+ ).format(number_of=self.numberOfPeopleInDatabase),
self.numberOfPeopleInDatabase)
# as long as we have people we haven't processed yet, keep looping
@@ -376,10 +380,12 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) :
# we have at least 1 "unrelated" person to find
self.progress.set_pass(
- ngettext("Looking for %d person", "Looking for %d people",
- self.numberOfUnrelatedPeople) %
- self.numberOfUnrelatedPeople,
- self.numberOfPeopleInDatabase)
+ # translators: leave all/any {...} untranslated
+ ngettext("Looking for {number_of} person",
+ "Looking for {number_of} people",
+ self.numberOfUnrelatedPeople
+ ).format(number_of=self.numberOfUnrelatedPeople),
+ self.numberOfPeopleInDatabase)
# loop through everyone in the database
for handle in self.db.iter_person_handles():
@@ -402,11 +408,12 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) :
def populateModel(self) :
self.progress.set_pass(
- ngettext("Looking up the name of %d person",
- "Looking up the names of %d people",
- self.numberOfUnrelatedPeople) %
- self.numberOfUnrelatedPeople,
- self.numberOfUnrelatedPeople)
+ # translators: leave all/any {...} untranslated
+ ngettext("Looking up the name of {number_of} person",
+ "Looking up the names of {number_of} people",
+ self.numberOfUnrelatedPeople
+ ).format(number_of=self.numberOfUnrelatedPeople),
+ self.numberOfUnrelatedPeople)
# loop through the entire list of unrelated people
for handle in self.handlesOfPeopleNotRelated:
diff --git a/gramps/plugins/view/relview.py b/gramps/plugins/view/relview.py
index 9dfffce20..5b207ae78 100644
--- a/gramps/plugins/view/relview.py
+++ b/gramps/plugins/view/relview.py
@@ -32,7 +32,7 @@ from __future__ import unicode_literals
#-------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.sgettext
-ngettext = glocale.translation.ngettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
import cgi
#-------------------------------------------------------------------------
@@ -880,7 +880,10 @@ class RelationshipView(NavigationView):
else:
count = 0
if count > 1 :
- childmsg = ngettext(" (%d sibling)", " (%d siblings)", count) % count
+ # translators: leave all/any {...} untranslated
+ childmsg = ngettext(" ({number_of} sibling)",
+ " ({number_of} siblings)", count
+ ).format(number_of=count)
elif count == 1 :
gender = self.dbstate.db.get_person_from_handle(
child_list[0]).gender
@@ -936,7 +939,10 @@ class RelationshipView(NavigationView):
else:
count = 0
if count > 1 :
- childmsg = ngettext(" (%d sibling)"," (%d siblings)", count) % count
+ # translators: leave all/any {...} untranslated
+ childmsg = ngettext(" ({number_of} sibling)",
+ " ({number_of} siblings)", count
+ ).format(number_of=count)
elif count == 1 :
gender = self.dbstate.db.get_person_from_handle(
child_list[0]).gender
@@ -1348,7 +1354,10 @@ class RelationshipView(NavigationView):
else:
count = 0
if count >= 1 :
- childmsg = ngettext(" (%d child)"," (%d children)", count) % count
+ # translators: leave all/any {...} untranslated
+ childmsg = ngettext(" ({number_of} child)",
+ " ({number_of} children)", count
+ ).format(number_of=count)
else :
childmsg = _(" (no children)")
box = self.get_people_box(handle, post_msg=childmsg)
@@ -1395,7 +1404,10 @@ class RelationshipView(NavigationView):
else:
count = 0
if count >= 1 :
- childmsg = ngettext(" (%d child)"," (%d children)", count) % count
+ # translators: leave all/any {...} untranslated
+ childmsg = ngettext(" ({number_of} child)",
+ " ({number_of} children)", count
+ ).format(number_of=count)
else :
childmsg = _(" (no children)")
box = self.get_people_box(post_msg=childmsg)
diff --git a/gramps/plugins/webreport/webcal.py b/gramps/plugins/webreport/webcal.py
index 24ffd1150..44f2bc5fc 100644
--- a/gramps/plugins/webreport/webcal.py
+++ b/gramps/plugins/webreport/webcal.py
@@ -36,8 +36,6 @@ Web Calendar generator.
from functools import partial
import os, codecs, shutil, re, sys
import datetime, calendar
-from gramps.gen.const import GRAMPS_LOCALE as glocale
-_ = glocale.translation.sgettext
#------------------------------------------------------------------------
# Set up logging
@@ -48,6 +46,9 @@ log = logging.getLogger(".WebPage")
#------------------------------------------------------------------------
# GRAMPS module
#------------------------------------------------------------------------
+from gramps.gen.const import GRAMPS_LOCALE as glocale
+_ = glocale.translation.sgettext
+ngettext = glocale.translation.ngettext # else "nearby" comments are ignored
from gramps.gen.lib import Date, Name, NameType, Person
from gramps.gen.lib.date import Today
from gramps.gen.const import PROGRAM_NAME, URL_HOMEPAGE, USER_HOME
@@ -1716,12 +1717,11 @@ def get_day_list(event_date, holiday_list, bday_anniv_list):
txt_str = _('%(couple)s, wedding') % {
'couple' : text}
else:
- txt_str = (glocale.translation.ngettext(
- '%(couple)s, %(years)d'
- ' year anniversary',
- '%(couple)s, %(years)d'
- ' year anniversary', nyears)
- % {'couple' : text, 'years' : nyears})
+ years_str = '' + nyears + ''
+ # translators: leave all/any {...} untranslated
+ txt_str = ngettext("{couple}, {years} year anniversary",
+ "{couple}, {years} year anniversary",
+ nyears).format(couple=text, years=years_str)
txt_str = Html('span', txt_str, class_ = "yearsmarried")
day_list.append((nyears, date, txt_str, event))