GrampsLocale: Integrate libtranslate functions into GrampsLocale

And remove libtranslate

svn: r21967
This commit is contained in:
John Ralls 2013-04-12 22:27:54 +00:00
parent 665206df85
commit 56254d4a14
8 changed files with 25 additions and 211 deletions

View File

@ -28,7 +28,7 @@
# Report
#
#-------------------------------------------------------------------------
from gramps.plugins.lib.libtranslate import Translator
from gramps.gen.utils.grampslocale import GrampsLocale
class Report(object):
"""
@ -56,18 +56,18 @@ class Report(object):
def begin_report(self):
pass
def set_translation(self, language):
def set_locale(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
if language == GrampsLocale.DEFAULT_TRANSLATION_STR:
language = None
locale = GrampsLocale(lang=language)
self._ = locale.translation.gettext
self.__get_date = locale.get_date
self.__get_type = locale.get_type
return locale
def write_report(self):
pass

View File

@ -477,9 +477,6 @@ class GrampsLocale(object):
else:
self._init_secondary_locale()
self.icu_locales = {}
self.collator = None
if HAVE_ICU:
@ -496,14 +493,15 @@ class GrampsLocale(object):
self.translation = self._get_translation(self.localedomain,
self.localedir, self.language)
# This is a no-op for secondaries but needs the translation
# set, so it needs to be here.
self._set_dictionaries()
if _hdlr:
LOG.removeHandler(_hdlr)
self._dd = self._dp = None
#Guards against running twice on the first instance.
self.initialized = True
def _get_translation(self, domain = None,

View File

@ -42,7 +42,7 @@ from gramps.gen.lib.familyreltype import FamilyRelType
from gramps.gen.display.name import displayer as _nd
from gramps.gen.utils.alive import probably_alive
from gramps.gen.plug.report import utils as ReportUtils
from gramps.plugins.lib.libtranslate import Translator
from gramps.gen.const import GRAMPS_LOCALE as glocale
#-------------------------------------------------------------------------
#
@ -1349,7 +1349,7 @@ class Narrator(object):
def __init__(self, dbase, verbose=True, use_call_name=False,use_fulldate=False,
empty_date="", empty_place="",
translator=None,
locale=None,
get_endnote_numbers=_get_empty_endnote_numbers):
"""
Initialize the narrator class.
@ -1386,12 +1386,11 @@ class Narrator(object):
self.__person = None
self.__first_name = ""
self.__first_name_used = False
if translator is None:
translator = Translator(Translator.DEFAULT_TRANSLATION_STR)
self.__translate_text = translator.gettext
self.__get_date = translator.get_date
if locale is None:
locale = glocale
self.__translate_text = locale.translation.gettext
self.__get_date = locale.get_date
def set_subject(self, person):
"""

View File

@ -198,23 +198,6 @@ authors = ["The Gramps project"],
authors_email = ["http://gramps-project.org"],
)
#------------------------------------------------------------------------
#
# libtranslate
#
#------------------------------------------------------------------------
register(GENERAL,
id = 'libtranslate',
name = "translation lib",
description = _("Provides Textual Translation.") ,
version = '1.0',
gramps_target_version = '4.1',
status = STABLE,
fname = 'libtranslate.py',
authors = ["Brian Matherly"],
authors_email = ["brian@gramps-project.org"],
)
#------------------------------------------------------------------------
#
# libpersonview

View File

@ -1,166 +0,0 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2009 Brian G. Matherly
#
# 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$
"""
Translator class for use by plugins.
"""
#------------------------------------------------------------------------
#
# python modules
#
#------------------------------------------------------------------------
#------------------------------------------------------------------------
#
# GRAMPS modules
#
#------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.get_translation().gettext
from gramps.gen.datehandler import displayer, LANG_TO_DISPLAY
from gramps.gen.config import config
from gramps.gen.lib.grampstype import GrampsType
from gramps.gen.constfunc import cuni
#-------------------------------------------------------------------------
#
# Translator
#
#-------------------------------------------------------------------------
class Translator(object):
"""
This class provides translated strings for the configured language.
"""
DEFAULT_TRANSLATION_STR = "default"
def __init__(self, lang=DEFAULT_TRANSLATION_STR):
"""
:param lang: The language to translate to.
The language can be:
* The name of any installed .mo file
* "en" to use the message strings in the code
* "default" to use the default translation being used by gettext.
:type lang: string
:return: nothing
"""
if lang == Translator.DEFAULT_TRANSLATION_STR:
self.__trans = glocale.get_translation()
self.__dd = displayer
else:
# If lang isn't supported, this will fallback to the
# current global language
self.__trans = glocale.get_translation(languages=[lang])
val = config.get('preferences.date-format')
if lang in LANG_TO_DISPLAY:
self.__dd = LANG_TO_DISPLAY[lang](val)
else:
self.__dd = displayer
def gettext(self, message):
"""
Return the unicode translated string.
:param message: The message to be translated.
:type message: string
:returns: The translated message
:rtype: unicode
"""
return self.__trans.gettext(message)
def ngettext(self, singular, plural, n):
"""
Return the unicode translated singular/plural string.
The translation of singular/plural is returned unless the translation is
not available and the singular contains the separator. In that case,
the returned value is the portion of singular following the last
separator. Default separator is '|'.
:param singular: The singular form of the string to be translated.
may contain a context separator
:type singular: unicode
:param plural: The plural form of the string to be translated.
:type plural: unicode
:param n: the amount for which to decide the translation
:type n: int
:returns: The translated singular/plural message
:rtype: unicode
"""
return self.__trans.ngettext(singular, plural, n)
def sgettext(self, msgid, sep='|'):
"""
Strip the context used for resolving translation ambiguities.
The translation of msgid is returned unless the translation is
not available and the msgid contains the separator. In that case,
the returned value is the portion of msgid following the last
separator. Default separator is '|'.
:param msgid: The string to translated.
:type msgid: unicode
:param sep: The separator marking the context.
:type sep: unicode
:returns: Translation or the original with context stripped.
:rtype: unicode
"""
try:
return self.__trans.sgettext(msgid)
except AttributeError:
return self.__trans.gettext(msgid)
def get_date(self, date):
"""
Return a string representing the date appropriate for the language being
translated.
:param date: The date to be represented.
:type date: :class:`~gen.lib.date.Date`
:returns: The date as text in the proper language.
:rtype: unicode
"""
return self.__dd.display(date)
def get_type(self, name):
"""
Return a string representing the name appropriate for the language being
translated.
:param name: The name type to be represented.
:returns: The name as text in the proper language.
:rtype: unicode
"""
return GrampsType.xml_str(name)
# List of translated strings used here
# Dead code for l10n; added on translation template
# Translation string should be same as key name
# ex: AttributeType
#(FATHER_AGE , _("Father's Age"), "Father Age"),
#(MOTHER_AGE , _("Mother's Age"), "Mother Age"),
_("Father Age"), _("Mother Age")

View File

@ -113,9 +113,9 @@ class AncestorReport(Report):
self._name_display.set_default_format(name_format)
lang = menu.get_option_by_name('trans').get_value()
translator = self.set_translation(lang)
locale = self.set_locale(lang)
self.__narrator = Narrator(self.database, use_fulldate=True,
translator=translator)
locale=locale)
def apply_filter(self, person_handle, index, generation=1):
"""

View File

@ -159,10 +159,10 @@ class DetAncestorReport(Report):
empty_place = ""
lang = menu.get_option_by_name('trans').get_value()
translator = self.set_translation(lang)
locale = self.set_locale(lang)
self.__narrator = Narrator(self.database, self.verbose, use_call,
use_fulldate, empty_date, empty_place,
translator=translator,
locale=locale,
get_endnote_numbers=self.endnotes)
self.bibli = Bibliography(Bibliography.MODE_DATE|Bibliography.MODE_PAGE)

View File

@ -180,11 +180,11 @@ class DetDescendantReport(Report):
if name_format != 0:
self._name_display.set_default_format(name_format)
translator = self.set_translation(get_value('trans'))
locale = self.set_locale(get_value('trans'))
self.__narrator = Narrator(self.database, self.verbose,
use_call, use_fulldate,
empty_date, empty_place,
translator=translator,
locale=locale,
get_endnote_numbers=self.endnotes)