enable translated output for this report

svn: r22118
This commit is contained in:
Paul Franklin 2013-04-29 19:26:06 +00:00
parent 70ee3d822f
commit 6ea9a5ad70
2 changed files with 86 additions and 68 deletions

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2013 Paul Franklin
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -190,53 +191,56 @@ class EventType(GrampsType):
(MARR_ALT , _("Alternate Marriage"), "Alternate Marriage"), (MARR_ALT , _("Alternate Marriage"), "Alternate Marriage"),
] ]
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
return value
_ABBREVIATIONS = { _ABBREVIATIONS = {
BIRTH: _("birth abbreviation|b."), BIRTH: _T_("birth abbreviation|b."),
DEATH: _("death abbreviation|d."), DEATH: _T_("death abbreviation|d."),
MARRIAGE: _("marriage abbreviation|m."), MARRIAGE: _T_("marriage abbreviation|m."),
UNKNOWN: _("Unknown abbreviation|unkn."), UNKNOWN: _T_("Unknown abbreviation|unkn."),
CUSTOM: _("Custom abbreviation|cust."), CUSTOM: _T_("Custom abbreviation|cust."),
ADOPT: _("Adopted abbreviation|adop."), ADOPT: _T_("Adopted abbreviation|adop."),
ADULT_CHRISTEN : _("Adult Christening abbreviation|a.chr."), ADULT_CHRISTEN : _T_("Adult Christening abbreviation|a.chr."),
BAPTISM: _("Baptism abbreviation|bap."), BAPTISM: _T_("Baptism abbreviation|bap."),
BAR_MITZVAH : _("Bar Mitzvah abbreviation|bar."), BAR_MITZVAH : _T_("Bar Mitzvah abbreviation|bar."),
BAS_MITZVAH : _("Bas Mitzvah abbreviation|bas."), BAS_MITZVAH : _T_("Bas Mitzvah abbreviation|bas."),
BLESS: _("Blessing abbreviation|bles."), BLESS: _T_("Blessing abbreviation|bles."),
BURIAL: _("Burial abbreviation|bur."), BURIAL: _T_("Burial abbreviation|bur."),
CAUSE_DEATH : _("Cause Of Death abbreviation|d.cau."), CAUSE_DEATH : _T_("Cause Of Death abbreviation|d.cau."),
CENSUS: _("Census abbreviation|cens."), CENSUS: _T_("Census abbreviation|cens."),
CHRISTEN: _("Christening abbreviation|chr."), CHRISTEN: _T_("Christening abbreviation|chr."),
CONFIRMATION: _("Confirmation abbreviation|conf."), CONFIRMATION: _T_("Confirmation abbreviation|conf."),
CREMATION: _("Cremation abbreviation|crem."), CREMATION: _T_("Cremation abbreviation|crem."),
DEGREE: _("Degree abbreviation|deg."), DEGREE: _T_("Degree abbreviation|deg."),
EDUCATION: _("Education abbreviation|edu."), EDUCATION: _T_("Education abbreviation|edu."),
ELECTED: _("Elected abbreviation|elec."), ELECTED: _T_("Elected abbreviation|elec."),
EMIGRATION: _("Emigration abbreviation|em."), EMIGRATION: _T_("Emigration abbreviation|em."),
FIRST_COMMUN: _("First Communion abbreviation|f.comm."), FIRST_COMMUN: _T_("First Communion abbreviation|f.comm."),
IMMIGRATION: _("Immigration abbreviation|im."), IMMIGRATION: _T_("Immigration abbreviation|im."),
GRADUATION: _("Graduation abbreviation|grad."), GRADUATION: _T_("Graduation abbreviation|grad."),
MED_INFO: _("Medical Information abbreviation|medinf."), MED_INFO: _T_("Medical Information abbreviation|medinf."),
MILITARY_SERV: _("Military Service abbreviation|milser."), MILITARY_SERV: _T_("Military Service abbreviation|milser."),
NATURALIZATION: _("Naturalization abbreviation|nat."), NATURALIZATION: _T_("Naturalization abbreviation|nat."),
NOB_TITLE: _("Nobility Title abbreviation|nob."), NOB_TITLE: _T_("Nobility Title abbreviation|nob."),
NUM_MARRIAGES: _("Number of Marriages abbreviation|n.o.mar."), NUM_MARRIAGES: _T_("Number of Marriages abbreviation|n.o.mar."),
OCCUPATION: _("Occupation abbreviation|occ."), OCCUPATION: _T_("Occupation abbreviation|occ."),
ORDINATION: _("Ordination abbreviation|ord."), ORDINATION: _T_("Ordination abbreviation|ord."),
PROBATE: _("Probate abbreviation|prob."), PROBATE: _T_("Probate abbreviation|prob."),
PROPERTY: _("Property abbreviation|prop."), PROPERTY: _T_("Property abbreviation|prop."),
RELIGION: _("Religion abbreviation|rel."), RELIGION: _T_("Religion abbreviation|rel."),
RESIDENCE: _("Residence abbreviation|res."), RESIDENCE: _T_("Residence abbreviation|res."),
RETIREMENT: _("Retirement abbreviation|ret."), RETIREMENT: _T_("Retirement abbreviation|ret."),
WILL: _("Will abbreviation|will."), WILL: _T_("Will abbreviation|will."),
MARR_SETTL: _("Marriage Settlement abbreviation|m.set."), MARR_SETTL: _T_("Marriage Settlement abbreviation|m.set."),
MARR_LIC: _("Marriage License abbreviation|m.lic."), MARR_LIC: _T_("Marriage License abbreviation|m.lic."),
MARR_CONTR: _("Marriage Contract abbreviation|m.con."), MARR_CONTR: _T_("Marriage Contract abbreviation|m.con."),
MARR_BANNS: _("Marriage Banns abbreviation|m.ban."), MARR_BANNS: _T_("Marriage Banns abbreviation|m.ban."),
MARR_ALT: _("Alternate Marriage abbreviation|alt.mar."), MARR_ALT: _T_("Alternate Marriage abbreviation|alt.mar."),
ENGAGEMENT: _("Engagement abbreviation|engd."), ENGAGEMENT: _T_("Engagement abbreviation|engd."),
DIVORCE: _("Divorce abbreviation|div."), DIVORCE: _T_("Divorce abbreviation|div."),
DIV_FILING: _("Divorce Filing abbreviation|div.f."), DIV_FILING: _T_("Divorce Filing abbreviation|div.f."),
ANNULMENT: _("Annulment abbreviation|annul.") ANNULMENT: _T_("Annulment abbreviation|annul.")
} }
def __init__(self, value=None): def __init__(self, value=None):
@ -329,15 +333,18 @@ class EventType(GrampsType):
return self.value == event_type[0][0] # first one, the code return self.value == event_type[0][0] # first one, the code
return False return False
def get_abbreviation(self): def get_abbreviation(self, trans_text=glocale.translation.sgettext):
""" """
Returns the abbreviation for this event. Uses the explicitly Returns the abbreviation for this event. Uses the explicitly
given abbreviations, or first letter of each word, or the first given abbreviations, or first letter of each word, or the first
three letters. Appends a period after the abbreviation, three letters. Appends a period after the abbreviation,
but not if string is in _ABBREVIATIONS. but not if string is in _ABBREVIATIONS.
If trans_text is passed in (a glocale.translation.sgettext)
then the translated abbreviation will be returned instead.
""" """
if self.value in self._ABBREVIATIONS: if self.value in self._ABBREVIATIONS:
return self._ABBREVIATIONS[self.value] return trans_text(self._ABBREVIATIONS[self.value])
else: else:
abbrev = cuni(self) abbrev = cuni(self)
if " " in abbrev: if " " in abbrev:

View File

@ -7,6 +7,7 @@
# Copyright (C) 2010 Craig J. Anderson # Copyright (C) 2010 Craig J. Anderson
# Copyright (C) 2010 Jakim Friant # Copyright (C) 2010 Jakim Friant
# Copyright (C) 2011 Matt Keenan (matt.keenan@gmail.com) # Copyright (C) 2011 Matt Keenan (matt.keenan@gmail.com)
# Copyright (C) 2013 Paul Franklin
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -35,30 +36,29 @@ Reports/Text Reports/Descendant Report.
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy import copy
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# GRAMPS modules # GRAMPS modules
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
from gramps.gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle, from gramps.gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
FONT_SANS_SERIF, INDEX_TYPE_TOC, PARA_ALIGN_CENTER) FONT_SANS_SERIF, INDEX_TYPE_TOC,
PARA_ALIGN_CENTER)
from gramps.gen.plug.menu import (NumberOption, PersonOption, BooleanOption, from gramps.gen.plug.menu import (NumberOption, PersonOption, BooleanOption,
EnumeratedListOption) EnumeratedListOption)
from gramps.gen.display.name import displayer as global_name_display from gramps.gen.display.name import displayer as global_name_display
from gramps.gen.errors import ReportError from gramps.gen.errors import ReportError
from gramps.gen.plug.report import Report from gramps.gen.plug.report import Report
from gramps.gen.plug.report import utils as ReportUtils from gramps.gen.plug.report import utils as ReportUtils
from gramps.gen.plug.report import MenuReportOptions from gramps.gen.plug.report import MenuReportOptions
from gramps.gen.plug.report import stdoptions from gramps.gen.plug.report import stdoptions
from gramps.gen.datehandler import get_date
from gramps.gen.sort import Sort from gramps.gen.sort import Sort
from gramps.gen.utils.db import (get_birth_or_fallback, get_death_or_fallback, from gramps.gen.utils.db import (get_birth_or_fallback, get_death_or_fallback,
get_marriage_or_fallback, get_divorce_or_fallback) get_marriage_or_fallback, get_divorce_or_fallback)
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# PrintSimple # PrintSimple
@ -147,7 +147,7 @@ class Printinfo():
This class must first be initialized with set_class_vars This class must first be initialized with set_class_vars
""" """
def __init__(self, doc, database, numbering, showmarriage, showdivorce,\ def __init__(self, doc, database, numbering, showmarriage, showdivorce,\
name_display): name_display, locale):
#classes #classes
self._name_display = name_display self._name_display = name_display
self.doc = doc self.doc = doc
@ -156,22 +156,24 @@ class Printinfo():
#variables #variables
self.showmarriage = showmarriage self.showmarriage = showmarriage
self.showdivorce = showdivorce self.showdivorce = showdivorce
self._ = locale.translation.sgettext # needed for English
self._get_date = locale.get_date
def __date_place(self,event): def __date_place(self,event):
if event: if event:
date = get_date(event) date = self._get_date(event.get_date_object())
place_handle = event.get_place_handle() place_handle = event.get_place_handle()
if place_handle: if place_handle:
place = self.database.get_place_from_handle( place = self.database.get_place_from_handle(
place_handle).get_title() place_handle).get_title()
return("%(event_abbrev)s %(date)s - %(place)s" % { return("%(event_abbrev)s %(date)s - %(place)s" % {
'event_abbrev': event.type.get_abbreviation(), 'event_abbrev': event.type.get_abbreviation(self._),
'date' : date, 'date' : date,
'place' : place, 'place' : place,
}) })
else: else:
return("%(event_abbrev)s %(date)s" % { return("%(event_abbrev)s %(date)s" % {
'event_abbrev': event.type.get_abbreviation(), 'event_abbrev': event.type.get_abbreviation(self._),
'date' : date 'date' : date
}) })
return "" return ""
@ -219,12 +221,14 @@ class Printinfo():
mark = ReportUtils.get_person_mark(self.database, spouse) mark = ReportUtils.get_person_mark(self.database, spouse)
self.doc.start_paragraph("DR-Spouse%d" % min(level, 32)) self.doc.start_paragraph("DR-Spouse%d" % min(level, 32))
name = self._name_display.display(spouse) name = self._name_display.display(spouse)
self.doc.write_text(_("sp. %(spouse)s") % {'spouse':name}, mark) self.doc.write_text(
self._("sp. %(spouse)s") % {'spouse':name}, mark)
self.dump_string(spouse, family_handle) self.dump_string(spouse, family_handle)
self.doc.end_paragraph() self.doc.end_paragraph()
else: else:
self.doc.start_paragraph("DR-Spouse%d" % min(level, 32)) self.doc.start_paragraph("DR-Spouse%d" % min(level, 32))
self.doc.write_text(_("sp. %(spouse)s") % {'spouse':'Unknown'}) self.doc.write_text(
self._("sp. %(spouse)s") % {'spouse':'Unknown'})
self.doc.end_paragraph() self.doc.end_paragraph()
def print_reference(self, level, person, display_num): def print_reference(self, level, person, display_num):
@ -234,8 +238,9 @@ class Printinfo():
mark = ReportUtils.get_person_mark(self.database, person) mark = ReportUtils.get_person_mark(self.database, person)
self.doc.start_paragraph("DR-Spouse%d" % min(level, 32)) self.doc.start_paragraph("DR-Spouse%d" % min(level, 32))
name = self._name_display.display(person) name = self._name_display.display(person)
self.doc.write_text(_("sp. see %(reference)s : %(spouse)s") % self.doc.write_text(
{'reference':display_num, 'spouse':name}, mark) self._("sp. see %(reference)s : %(spouse)s") %
{'reference':display_num, 'spouse':name}, mark)
self.doc.end_paragraph() self.doc.end_paragraph()
@ -255,12 +260,13 @@ class RecurseDown():
objPrint: A Printinfo derived class that prints person objPrint: A Printinfo derived class that prints person
information on the report information on the report
""" """
def __init__(self, max_generations, database, objPrint, showdups): def __init__(self, max_generations, database, objPrint, showdups, locale):
self.max_generations = max_generations self.max_generations = max_generations
self.database = database self.database = database
self.objPrint = objPrint self.objPrint = objPrint
self.showdups = showdups self.showdups = showdups
self.person_printed = {} self.person_printed = {}
self._ = locale.translation.sgettext # needed for English
def recurse(self, level, person, curdepth): def recurse(self, level, person, curdepth):
@ -289,7 +295,7 @@ class RecurseDown():
self.objPrint.print_spouse(level, spouse_handle, family) self.objPrint.print_spouse(level, spouse_handle, family)
if spouse_handle: if spouse_handle:
spouse_num = _("%s sp." % (ref_str)) spouse_num = self._("%s sp." % (ref_str))
self.person_printed[spouse_handle] = spouse_num self.person_printed[spouse_handle] = spouse_num
if level >= self.max_generations: if level >= self.max_generations:
@ -337,6 +343,9 @@ class DescendantReport(Report):
sort = Sort(self.database) sort = Sort(self.database)
lang = menu.get_option_by_name('trans').get_value()
self._locale = self.set_locale(lang)
#Initialize the Printinfo class #Initialize the Printinfo class
self._showdups = menu.get_option_by_name('dups').get_value() self._showdups = menu.get_option_by_name('dups').get_value()
numbering = menu.get_option_by_name('numbering').get_value() numbering = menu.get_option_by_name('numbering').get_value()
@ -359,19 +368,19 @@ class DescendantReport(Report):
self._name_display.set_default_format(name_format) self._name_display.set_default_format(name_format)
self.objPrint = Printinfo(self.doc, database, obj, marrs, divs, self.objPrint = Printinfo(self.doc, database, obj, marrs, divs,
self._name_display) self._name_display, self._locale)
def write_report(self): def write_report(self):
self.doc.start_paragraph("DR-Title") self.doc.start_paragraph("DR-Title")
name = self._name_display.display(self.center_person) name = self._name_display.display(self.center_person)
# feature request 2356: avoid genitive form # feature request 2356: avoid genitive form
title = _("Descendants of %s") % name title = self._("Descendants of %s") % name
mark = IndexMark(title, INDEX_TYPE_TOC, 1) mark = IndexMark(title, INDEX_TYPE_TOC, 1)
self.doc.write_text(title, mark) self.doc.write_text(title, mark)
self.doc.end_paragraph() self.doc.end_paragraph()
recurse = RecurseDown(self.max_generations, self.database, recurse = RecurseDown(self.max_generations, self.database,
self.objPrint, self._showdups) self.objPrint, self._showdups, self._locale)
recurse.recurse(1, self.center_person, None) recurse.recurse(1, self.center_person, None)
#------------------------------------------------------------------------ #------------------------------------------------------------------------
@ -421,6 +430,8 @@ class DescendantOptions(MenuReportOptions):
dups.set_help(_("Whether to show duplicate Family Trees in the report.")) dups.set_help(_("Whether to show duplicate Family Trees in the report."))
menu.add_option(category_name, "dups", dups) menu.add_option(category_name, "dups", dups)
stdoptions.add_localization_option(menu, category_name)
def make_default_style(self, default_style): def make_default_style(self, default_style):
"""Make the default output style for the Descendant Report.""" """Make the default output style for the Descendant Report."""
f = FontStyle() f = FontStyle()