enable translated output for this report (in trunk only)
svn: r23435
This commit is contained in:
parent
4ca39d0fff
commit
fdd69173f2
@ -3,7 +3,7 @@
|
||||
# Copyright (C) 2000-2007 Donald N. Allingham
|
||||
# Copyright (C) 2008-2009 Brian G. Matherly
|
||||
# Copyright (C) 2010 Jakim Friant
|
||||
# Copyright (C) 2012 Paul Franklin
|
||||
# Copyright (C) 2012-2013 Paul Franklin
|
||||
#
|
||||
# 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
|
||||
@ -26,8 +26,6 @@
|
||||
# python modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
from functools import partial
|
||||
import datetime
|
||||
import time
|
||||
@ -37,23 +35,27 @@ import time
|
||||
# GRAMPS modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
from gramps.gen.const import URL_HOMEPAGE
|
||||
from gramps.gen.display.name import displayer as _nd
|
||||
from gramps.gen.errors import ReportError
|
||||
from gramps.gen.relationship import get_relationship_calculator
|
||||
from gramps.gen.plug.docgen import (FontStyle, ParagraphStyle, GraphicsStyle,
|
||||
FONT_SERIF, PARA_ALIGN_CENTER,
|
||||
PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT,
|
||||
IndexMark, INDEX_TYPE_TOC)
|
||||
FONT_SERIF, PARA_ALIGN_CENTER,
|
||||
PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT,
|
||||
IndexMark, INDEX_TYPE_TOC)
|
||||
from gramps.gen.plug.docgen.fontscale import string_trim
|
||||
from gramps.gen.plug.menu import (BooleanOption, StringOption, NumberOption,
|
||||
EnumeratedListOption, FilterOption, PersonOption)
|
||||
EnumeratedListOption, FilterOption,
|
||||
PersonOption)
|
||||
from gramps.gen.plug.report import Report
|
||||
from gramps.gen.plug.report import utils as ReportUtils
|
||||
from gramps.gen.plug.report import MenuReportOptions
|
||||
from gramps.gen.plug.report import stdoptions
|
||||
from gramps.gen.utils.alive import probably_alive
|
||||
from gramps.gen.datehandler import displayer as _dd
|
||||
from gramps.gen.lib import Date, EventRoleType, EventType, Name, NameType, Person, Surname
|
||||
from gramps.gen.lib import (Date, EventRoleType, EventType, Name, NameType,
|
||||
Person, Surname)
|
||||
from gramps.gen.lib.date import gregorian
|
||||
|
||||
import gramps.plugins.lib.libholiday as libholiday
|
||||
@ -67,6 +69,12 @@ from gramps.plugins.lib.libholiday import g2iso
|
||||
pt2cm = ReportUtils.pt2cm
|
||||
cm2pt = ReportUtils.cm2pt
|
||||
|
||||
def _T_(value): # enable deferred translations (see Python docs 22.1.3.4)
|
||||
return value
|
||||
|
||||
_TITLE1 = _T_("My Calendar")
|
||||
_TITLE2 = _T_("Produced with Gramps")
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Calendar
|
||||
@ -100,6 +108,8 @@ class Calendar(Report):
|
||||
if (self.center_person == None) :
|
||||
raise ReportError(_("Person %s is not in the Database") % pid )
|
||||
|
||||
self._locale = self.set_locale(get_value('trans'))
|
||||
|
||||
def get_name(self, person, maiden_name = None):
|
||||
""" Return person's name, unless maiden_name given,
|
||||
unless married_name listed.
|
||||
@ -152,10 +162,25 @@ class Calendar(Report):
|
||||
for day in range(1, 32):
|
||||
holiday_names = holiday_table.get_holidays(month, day)
|
||||
for holiday_name in holiday_names:
|
||||
self.add_day_item(holiday_name, month, day, "CAL-Holiday")
|
||||
self.add_day_item(self._(holiday_name), month, day,
|
||||
"CAL-Holiday")
|
||||
# FIXME translation only works for a limited set of things
|
||||
# (the right fix is to somehow feed the locale into the
|
||||
# HolidayTable class in plugins/lib/libholiday.py and then
|
||||
# probably changing all the holiday code to somehow defer
|
||||
# the translation of holidays, until it can be based
|
||||
# on the passed-in locale, but since that would probably
|
||||
# also mean checking every use of holidays I don't think
|
||||
# it is advisable to do, with a release so imminent)
|
||||
# it is also debatable whether it is worth bothering at
|
||||
# all, since it is hard for me to imagine why a user would
|
||||
# be wanting to generate a translated report with holidays
|
||||
# since I believe its main use will be for dates of people
|
||||
|
||||
def write_report(self):
|
||||
""" The short method that runs through each month and creates a page. """
|
||||
"""
|
||||
The short method that runs through each month and creates a page.
|
||||
"""
|
||||
# initialize the dict to fill:
|
||||
self.calendar = {}
|
||||
|
||||
@ -166,8 +191,9 @@ class Calendar(Report):
|
||||
# get data from database:
|
||||
self.collect_data()
|
||||
# generate the report:
|
||||
with self._user.progress( _('Calendar Report'),
|
||||
_('Formatting months...'), 12) as step:
|
||||
with self._user.progress(_('Calendar Report'),
|
||||
_('Formatting months...'),
|
||||
12) as step:
|
||||
for month in range(1, 13):
|
||||
step()
|
||||
self.print_page(month)
|
||||
@ -182,7 +208,7 @@ class Calendar(Report):
|
||||
pdaynames = style_sheet.get_paragraph_style("CAL-Daynames")
|
||||
pnumbers = style_sheet.get_paragraph_style("CAL-Numbers")
|
||||
ptext1style = style_sheet.get_paragraph_style("CAL-Text1style")
|
||||
long_days = _dd.long_days
|
||||
long_days = self._dd.long_days
|
||||
|
||||
self.doc.start_page()
|
||||
width = self.doc.get_usable_width()
|
||||
@ -190,7 +216,7 @@ class Calendar(Report):
|
||||
header = 2.54 # one inch
|
||||
mark = None
|
||||
if month == 1:
|
||||
mark = IndexMark(_('Calendar Report'), INDEX_TYPE_TOC, 1)
|
||||
mark = IndexMark(self._('Calendar Report'), INDEX_TYPE_TOC, 1)
|
||||
self.draw_rectangle("CAL-Border", 0, 0, width, height)
|
||||
self.doc.draw_box("CAL-Title", "", 0, 0, width, header, mark)
|
||||
self.doc.draw_line("CAL-Border", 0, header, width, header)
|
||||
@ -198,10 +224,10 @@ class Calendar(Report):
|
||||
# TRANSLATORS: see
|
||||
# http://gramps-project.org/wiki/index.php?title=Translating_Gramps#Translating_dates
|
||||
# to learn how to select proper inflection for your language.
|
||||
title = _("{long_month} {year}").format(
|
||||
long_month = _dd.long_months[month],
|
||||
year = year
|
||||
).capitalize()
|
||||
title = self._("{long_month} {year}").format(
|
||||
long_month = self._dd.long_months[month],
|
||||
year = year
|
||||
).capitalize()
|
||||
mark = IndexMark(title, INDEX_TYPE_TOC, 2)
|
||||
font_height = pt2cm(ptitle.get_font().get_size())
|
||||
self.doc.center_text("CAL-Title", title,
|
||||
@ -253,8 +279,8 @@ class Calendar(Report):
|
||||
font = ptext.get_font()
|
||||
line = string_trim(font, line, cm2pt(cell_width + 0.2))
|
||||
self.doc.draw_text(format, line,
|
||||
day_col * cell_width + 0.1,
|
||||
header + (week_row + 1) * cell_height - position + (current * spacing) - 0.1, m_list[0])
|
||||
day_col * cell_width + 0.1,
|
||||
header + (week_row + 1) * cell_height - position + (current * spacing) - 0.1, m_list[0])
|
||||
if len(m_list) > 1: # index the spouse too
|
||||
self.doc.draw_text(format, "",0,0, m_list[1])
|
||||
current += 1
|
||||
@ -263,9 +289,18 @@ class Calendar(Report):
|
||||
last_edge = 0
|
||||
font_height = pt2cm(1.5 * ptext1style.get_font().get_size())
|
||||
x = last_edge + (width - last_edge)/2
|
||||
self.doc.center_text("CAL-Text1style", self.text1, x, height - font_height * 3)
|
||||
self.doc.center_text("CAL-Text2style", self.text2, x, height - font_height * 2)
|
||||
self.doc.center_text("CAL-Text3style", self.text3, x, height - font_height * 1)
|
||||
text1 = str(self.text1)
|
||||
if text1 == _(_TITLE1):
|
||||
text1 = self._(_TITLE1)
|
||||
self.doc.center_text("CAL-Text1style", text1,
|
||||
x, height - font_height * 3)
|
||||
text2 = str(self.text2)
|
||||
if text2 == _(_TITLE2):
|
||||
text2 = self._(_TITLE2)
|
||||
self.doc.center_text("CAL-Text2style", text2,
|
||||
x, height - font_height * 2)
|
||||
self.doc.center_text("CAL-Text3style", self.text3,
|
||||
x, height - font_height * 1)
|
||||
self.doc.end_page()
|
||||
|
||||
def collect_data(self):
|
||||
@ -276,12 +311,15 @@ class Calendar(Report):
|
||||
db = self.database
|
||||
people = db.iter_person_handles()
|
||||
with self._user.progress(_('Calendar Report'),
|
||||
_('Applying Filter...'),
|
||||
db.get_number_of_people()) as step:
|
||||
_('Applying Filter...'),
|
||||
db.get_number_of_people()) as step:
|
||||
people = self.filter.apply(self.database, people, step)
|
||||
|
||||
ngettext = self._locale.translation.ngettext
|
||||
|
||||
with self._user.progress(_('Calendar Report'),
|
||||
_('Reading database...'), len(people)) as step:
|
||||
_('Reading database...'),
|
||||
len(people)) as step:
|
||||
for person_handle in people:
|
||||
step()
|
||||
person = db.get_person_from_handle(person_handle)
|
||||
@ -325,15 +363,13 @@ class Calendar(Report):
|
||||
|
||||
if not self.alive or alive:
|
||||
if nyears == 0:
|
||||
text = _('%(person)s, birth%(relation)s') % {
|
||||
'person' : short_name,
|
||||
'relation' : ""}
|
||||
text = self._('%(person)s, birth') % {
|
||||
'person' : short_name }
|
||||
else:
|
||||
text = (glocale.translation.ngettext('%(person)s, %(age)d%(relation)s',
|
||||
'%(person)s, %(age)d%(relation)s', nyears)
|
||||
% {'person' : short_name,
|
||||
'age' : nyears,
|
||||
'relation' : ""})
|
||||
text = (ngettext('%(person)s, %(age)d',
|
||||
'%(person)s, %(age)d', nyears)
|
||||
% {'person' : short_name,
|
||||
'age' : nyears })
|
||||
self.add_day_item(text, month, day, marks=[mark])
|
||||
if self.anniversaries:
|
||||
family_list = person.get_family_handle_list()
|
||||
@ -361,14 +397,14 @@ class Calendar(Report):
|
||||
rt = EventRoleType
|
||||
if event.type in [et.MARRIAGE,
|
||||
et.MARR_ALT] and \
|
||||
(event_ref.get_role() == rt.FAMILY or
|
||||
event_ref.get_role() == rt.PRIMARY ):
|
||||
(event_ref.get_role() == rt.FAMILY or
|
||||
event_ref.get_role() == rt.PRIMARY ):
|
||||
are_married = event
|
||||
elif event.type in [et.DIVORCE,
|
||||
et.ANNULMENT,
|
||||
et.DIV_FILING] and \
|
||||
(event_ref.get_role() == rt.FAMILY or
|
||||
event_ref.get_role() == rt.PRIMARY ):
|
||||
(event_ref.get_role() == rt.FAMILY or
|
||||
event_ref.get_role() == rt.PRIMARY ):
|
||||
are_married = None
|
||||
if are_married is not None:
|
||||
for event_ref in fam.get_event_ref_list():
|
||||
@ -386,20 +422,22 @@ class Calendar(Report):
|
||||
|
||||
nyears = self.year - year
|
||||
if nyears == 0:
|
||||
text = _('%(spouse)s and\n %(person)s, wedding') % {
|
||||
'spouse' : spouse_name,
|
||||
'person' : short_name,
|
||||
text = self._('%(spouse)s and\n %(person)s, wedding') % {
|
||||
'spouse' : spouse_name,
|
||||
'person' : short_name,
|
||||
}
|
||||
else:
|
||||
text = (glocale.translation.ngettext("%(spouse)s and\n %(person)s, %(nyears)d",
|
||||
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})
|
||||
% {'spouse' : spouse_name,
|
||||
'person' : short_name,
|
||||
'nyears' : nyears})
|
||||
|
||||
alive1 = probably_alive(person, self.database,
|
||||
alive1 = probably_alive(person,
|
||||
self.database,
|
||||
prob_alive_date)
|
||||
alive2 = probably_alive(spouse, self.database,
|
||||
alive2 = probably_alive(spouse,
|
||||
self.database,
|
||||
prob_alive_date)
|
||||
if ((self.alive and alive1 and alive2) or not self.alive):
|
||||
self.add_day_item(text, month, day,
|
||||
@ -486,18 +524,20 @@ class CalendarOptions(MenuReportOptions):
|
||||
anniversaries.set_help(_("Include anniversaries in the calendar"))
|
||||
add_option("anniversaries", anniversaries)
|
||||
|
||||
stdoptions.add_localization_option(menu, category_name)
|
||||
|
||||
category_name = _("Text Options")
|
||||
add_option = partial(menu.add_option, _("Text Options"))
|
||||
|
||||
text1 = StringOption(_("Text Area 1"), _("My Calendar"))
|
||||
text1 = StringOption(_("Text Area 1"), _(_TITLE1))
|
||||
text1.set_help(_("First line of text at bottom of calendar"))
|
||||
add_option("text1", text1)
|
||||
|
||||
text2 = StringOption(_("Text Area 2"), _("Produced with Gramps"))
|
||||
text2 = StringOption(_("Text Area 2"), _(_TITLE2))
|
||||
text2.set_help(_("Second line of text at bottom of calendar"))
|
||||
add_option("text2", text2)
|
||||
|
||||
text3 = StringOption(_("Text Area 3"), "http://gramps-project.org/",)
|
||||
text3 = StringOption(_("Text Area 3"), URL_HOMEPAGE)
|
||||
text3.set_help(_("Third line of text at bottom of calendar"))
|
||||
add_option("text3", text3)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user