GrampsLocale: Extract 2 reporting functions

set_translation() to the Report class
Add a new module stdoptions to gen.plug.report with function
add_localization_option(). The intent of stdoptions is to reduce the code-copying among reports; this is the first bit.

svn: r21966
This commit is contained in:
John Ralls 2013-04-12 22:27:44 +00:00
parent 27f667e343
commit 665206df85
6 changed files with 90 additions and 57 deletions

View File

@ -35,3 +35,5 @@ from ._bibliography import Bibliography, Citation
from ._options import MenuReportOptions, ReportOptions, DocOptions from ._options import MenuReportOptions, ReportOptions, DocOptions
from ._book import BookList, Book, BookItem, append_styles from ._book import BookList, Book, BookItem, append_styles
import _stdoptions as stdoptions

View File

@ -28,6 +28,8 @@
# Report # Report
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gramps.plugins.lib.libtranslate import Translator
class Report(object): class Report(object):
""" """
The Report base class. This is a base class for generating The Report base class. This is a base class for generating
@ -53,7 +55,20 @@ class Report(object):
def begin_report(self): def begin_report(self):
pass pass
def set_translation(self, language):
"""
Set the translator to one selected with
stdoptions.add_localization_option().
"""
if not language:
return
trans = Translator(lang=language)
self._ = trans.gettext
self.__get_date = trans.get_date
self.__get_type = trans.get_type
return trans
def write_report(self): def write_report(self):
pass pass

View File

@ -0,0 +1,51 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright 2013 John Ralls <jralls@ceridwen.us>
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
Commonly used report options. Call the function, don't copy the code!
"""
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
from gramps.gen.plug.menu import EnumeratedListOption
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
#-------------------------------------------------------------------------
#
# StandardReportOptions
#
#-------------------------------------------------------------------------
def add_localization_option(menu, category):
"""
Insert an option for localizing the report into a different locale
from the UI locale.
"""
trans = EnumeratedListOption(_("Translation"),
glocale.DEFAULT_TRANSLATION_STR)
trans.add_item(glocale.DEFAULT_TRANSLATION_STR, _("Default"))
languages = glocale.get_language_dict()
for language in sorted(languages, key=glocale.sort_key):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report."))
menu.add_option(category, "trans", trans)

View File

@ -32,8 +32,6 @@
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import math import math
import copy import copy
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.get_translation().gettext
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -41,6 +39,7 @@ _ = glocale.get_translation().gettext
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.get_translation().gettext
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.lib import ChildRefType from gramps.gen.lib import ChildRefType
@ -52,8 +51,8 @@ from gramps.gen.plug.docgen import (IndexMark, FontStyle, ParagraphStyle,
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.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -105,8 +104,6 @@ class AncestorReport(Report):
self.center_person = database.get_person_from_gramps_id(pid) self.center_person = database.get_person_from_gramps_id(pid)
if (self.center_person == None) : if (self.center_person == None) :
raise ReportError(_("Person %s is not in the Database") % pid ) raise ReportError(_("Person %s is not in the Database") % pid )
language = menu.get_option_by_name('trans').get_value()
translator = Translator(language)
# Copy the global NameDisplay so that we don't change application # Copy the global NameDisplay so that we don't change application
# defaults. # defaults.
@ -115,7 +112,8 @@ class AncestorReport(Report):
if name_format != 0: if name_format != 0:
self._name_display.set_default_format(name_format) self._name_display.set_default_format(name_format)
self._ = translator.gettext lang = menu.get_option_by_name('trans').get_value()
translator = self.set_translation(lang)
self.__narrator = Narrator(self.database, use_fulldate=True, self.__narrator = Narrator(self.database, use_fulldate=True,
translator=translator) translator=translator)
@ -296,15 +294,8 @@ class AncestorOptions(MenuReportOptions):
namebrk = BooleanOption(_("Add linebreak after each name"), False) namebrk = BooleanOption(_("Add linebreak after each name"), False)
namebrk.set_help(_("Indicates if a line break should follow the name.")) namebrk.set_help(_("Indicates if a line break should follow the name."))
menu.add_option(category_name, "namebrk", namebrk) menu.add_option(category_name, "namebrk", namebrk)
trans = EnumeratedListOption(_("Translation"), stdoptions.add_localization_option(menu, category_name)
Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
languages = glocale.get_language_dict()
for language in sorted(languages, key=glocale.sort_key):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report."))
menu.add_option(category_name, "trans", trans)
def make_default_style(self, default_style): def make_default_style(self, default_style):
""" """

View File

@ -35,8 +35,6 @@
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
import copy import copy
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.get_translation().gettext
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -44,6 +42,7 @@ _ = glocale.get_translation().gettext
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.get_translation().gettext
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.lib import EventType, FamilyRelType, Person, NoteType from gramps.gen.lib import EventType, FamilyRelType, Person, NoteType
@ -55,8 +54,8 @@ from gramps.gen.plug.report import ( Report, Bibliography )
from gramps.gen.plug.report import endnotes from gramps.gen.plug.report import endnotes
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.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -159,19 +158,13 @@ class DetAncestorReport(Report):
else: else:
empty_place = "" empty_place = ""
language = get_value('trans') lang = menu.get_option_by_name('trans').get_value()
translator = Translator(language) translator = self.set_translation(lang)
self._ = translator.gettext self.__narrator = Narrator(self.database, self.verbose, use_call,
use_fulldate, empty_date, empty_place,
self.__narrator = Narrator(self.database, self.verbose, use_call,use_fulldate ,
empty_date, empty_place,
translator=translator, translator=translator,
get_endnote_numbers=self.endnotes) get_endnote_numbers=self.endnotes)
self.__get_date = translator.get_date
self.__get_type = translator.get_type
self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE) self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE)
def apply_filter(self, person_handle, index): def apply_filter(self, person_handle, index):
@ -720,8 +713,8 @@ class DetAncestorOptions(MenuReportOptions):
from functools import partial from functools import partial
# Report Options # Report Options
category = _("Report Options")
addopt = partial(menu.add_option, _("Report Options")) addopt = partial(menu.add_option, category)
pid = PersonOption(_("Center Person")) pid = PersonOption(_("Center Person"))
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
@ -750,15 +743,8 @@ class DetAncestorOptions(MenuReportOptions):
pageben.set_help( pageben.set_help(
_("Whether to start a new page before the end notes.")) _("Whether to start a new page before the end notes."))
addopt("pageben", pageben) addopt("pageben", pageben)
trans = EnumeratedListOption(_("Translation"), stdoptions.add_localization_option(menu, category)
Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
languages = glocale.get_language_dict()
for language in sorted(languages, key=glocale.sort_key):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report."))
addopt("trans", trans)
# Content options # Content options

View File

@ -59,8 +59,8 @@ from gramps.gen.plug.report import (Report, Bibliography)
from gramps.gen.plug.report import endnotes from gramps.gen.plug.report import endnotes
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.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -172,9 +172,6 @@ class DetDescendantReport(Report):
else: else:
empty_place = "" empty_place = ""
language = get_value('trans')
translator = Translator(language)
self._ = translator.gettext
# Copy the global NameDisplay so that we don't change application # Copy the global NameDisplay so that we don't change application
# defaults. # defaults.
@ -183,15 +180,13 @@ class DetDescendantReport(Report):
if name_format != 0: if name_format != 0:
self._name_display.set_default_format(name_format) self._name_display.set_default_format(name_format)
translator = self.set_translation(get_value('trans'))
self.__narrator = Narrator(self.database, self.verbose, self.__narrator = Narrator(self.database, self.verbose,
use_call, use_fulldate, use_call, use_fulldate,
empty_date, empty_place, empty_date, empty_place,
translator=translator, translator=translator,
get_endnote_numbers=self.endnotes) get_endnote_numbers=self.endnotes)
self.__get_date = translator.get_date
self.__get_type = translator.get_type
self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE) self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE)
@ -884,8 +879,8 @@ class DetDescendantOptions(MenuReportOptions):
""" """
# Report Options # Report Options
category = _("Report Options")
add_option = partial(menu.add_option, _("Report Options")) add_option = partial(menu.add_option, category)
pid = PersonOption(_("Center Person")) pid = PersonOption(_("Center Person"))
pid.set_help(_("The center person for the report")) pid.set_help(_("The center person for the report"))
@ -926,14 +921,7 @@ class DetDescendantOptions(MenuReportOptions):
_("Whether to start a new page before the end notes.")) _("Whether to start a new page before the end notes."))
add_option("pageben", pageben) add_option("pageben", pageben)
trans = EnumeratedListOption(_("Translation"), stdoptions.add_localization_option(menu, category)
Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
languages = glocale.get_language_dict()
for language in sorted(languages, key=glocale.sort_key):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report."))
add_option("trans", trans)
# Content # Content