Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
07bc49c44b | ||
|
c21c0a2328 | ||
|
d45d5a0afe | ||
|
47922e7be9 | ||
|
139ae5c305 | ||
|
5de8d6b2ec | ||
|
2bdf0bb220 | ||
|
3469687010 | ||
|
8f392ded30 | ||
|
9bf1fb62b5 | ||
|
5c9df14f97 | ||
|
6469396669 | ||
|
3bf07bf96f | ||
|
8179e66d0b | ||
|
b34f6acb50 | ||
|
f740ba4cf0 | ||
|
f1b13b49c5 | ||
|
5191d6bd11 | ||
|
2464adf714 |
@@ -1,3 +1,60 @@
|
||||
2005-07-05 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/PeopleModel.py (calculate_data): Fix invert of search result
|
||||
* src/Date.py (is_equal): Only compare text value for TEXTONLY dates.
|
||||
* src/GenericFilter.py: Add new filters to search for notes
|
||||
* src/gramps_main.py: Add new filters
|
||||
|
||||
2005-07-05 Alex Roitman <shura@gramps-project.org>
|
||||
* src/system_filters.xml: Remove testing contents.
|
||||
* src/EditPerson.py (__init__): Refresh person object from handle,
|
||||
if handle exists.
|
||||
* src/Marriage.py (__init__): Refresh family object from handle,
|
||||
if handle exists.
|
||||
* NEWS: Update.
|
||||
* configure.in: Bump up the release number.
|
||||
|
||||
* Release: Version 2.0.5 "It's certainly uncontaminated by cheese"
|
||||
released.
|
||||
* configure.in: Bump up the version number.
|
||||
|
||||
2005-07-03 Alex Roitman <shura@gramps-project.org>
|
||||
* src/plugins/GraphViz.py (dump_person): Correctly test for birth
|
||||
relations.
|
||||
|
||||
2005-07-03 Eero Tamminen <eerot@sf>
|
||||
* src/po/fi.po: Updated translated to latest template
|
||||
|
||||
2005-07-02 Alexander Roitman <shura@gramps-project.org>
|
||||
* src/RelLib.py (Family.get_handle_referents): Typo;
|
||||
(Event.get_handle_referents): Work around possible None for
|
||||
witness.
|
||||
* src/plugins/Check.py (check_source_references): Add checking
|
||||
routine to detect and remove dangling source references.
|
||||
* configure.in: Bump up the version number.
|
||||
|
||||
2005-07-01 Alex Roitman <shura@gramps-project.org>
|
||||
* src/plugins/WebPage.py (write_sibling): Apply patch from bug #
|
||||
1230430 at sf.net with minor tweaks.
|
||||
* src/NEWS: Update.
|
||||
|
||||
2005-06-29 Don Allingham <don@gramps-project.org>
|
||||
* src/GrampsDbBase.py: don't count_person for gender stats on
|
||||
add_person, since already done it commit_person
|
||||
|
||||
2005-06-29 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/plugins/DumpGenderStats.py: New plugin for debugging
|
||||
|
||||
2005-06-29 Don Allingham <don@gramps-project.org>
|
||||
* src/GrampsBSDDB.py: provide an upgrade task to rebuild gender stats
|
||||
* src/GrampsDbBase.py: move gender stats handling to the commit_person
|
||||
task, instead of trying to handle it in the Person() class
|
||||
* src/RelLib.py: removal of genderstats handling
|
||||
|
||||
2005-06-28 Don Allingham <don@gramps-project.org>
|
||||
* src/EditPerson.py: parse date correctly on edit
|
||||
* src/ReadGedcom.py: load previously used title properly into
|
||||
the dictionary to prevent traceback
|
||||
|
||||
2005-06-27 Don Allingham <don@gramps-project.org>
|
||||
* src/PeopleView.py: fix on_get_iter on delete person
|
||||
|
||||
|
@@ -1,3 +1,9 @@
|
||||
Version 2.0.5 -- the "It's certainly uncontaminated by cheese" release
|
||||
* New filters based on personal notes.
|
||||
* New routine for checking and removing corrupted source references in
|
||||
the Check and Repair tool.
|
||||
* Bug fixes.
|
||||
|
||||
Version 2.0.4 -- the "That's enough music for now, lads." release
|
||||
* Speedups for "select" dialogs in Family View.
|
||||
* Filters are working in reports again.
|
||||
|
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
|
||||
dnl May need to run automake && aclocal first
|
||||
|
||||
AC_PREREQ(2.57)
|
||||
AC_INIT(gramps, 2.0.4, gramps-bugs@lists.sourceforge.net)
|
||||
AC_INIT(gramps, 2.0.6, gramps-bugs@lists.sourceforge.net)
|
||||
AC_CONFIG_SRCDIR(src/gramps.py)
|
||||
AM_INIT_AUTOMAKE(1.6.3)
|
||||
RELEASE=0.CVS$(head -c 10 ${srcdir}/ChangeLog | tr -d '-')
|
||||
|
@@ -156,12 +156,12 @@ class Date:
|
||||
instance IN ALL REGARDS. Needed, because the __cmp__ only looks
|
||||
at the sorting value, and ignores the modifiers/comments.
|
||||
"""
|
||||
|
||||
if self.modifier == other.modifier and self.modifier == MOD_TEXTONLY:
|
||||
return self.text == other.text
|
||||
return (self.calendar == other.calendar and
|
||||
self.modifier == other.modifier and
|
||||
self.quality == other.quality and
|
||||
self.dateval == other.dateval and
|
||||
self.text == other.text and
|
||||
self.sortval == other.sortval)
|
||||
|
||||
def __str__(self):
|
||||
|
@@ -99,12 +99,17 @@ class EditPerson:
|
||||
|
||||
self.dp = DateHandler.parser
|
||||
self.dd = DateHandler.displayer
|
||||
self.orig_handle = person.get_handle()
|
||||
# UGLY HACK to refresh person object from handle if that exists
|
||||
# done to ensure that the person object is not stale, as it could
|
||||
# have been changed by something external (merge, tool, etc).
|
||||
if self.orig_handle:
|
||||
person = db.get_person_from_handle(self.orig_handle)
|
||||
self.person = person
|
||||
self.orig_surname = person.get_primary_name().get_group_name()
|
||||
self.orig_surname = self.person.get_primary_name().get_group_name()
|
||||
self.parent = parent
|
||||
self.orig_handle = self.person.get_handle()
|
||||
if self.parent.child_windows.has_key(self.orig_handle):
|
||||
self.parent.child_windows[self.person.get_handle()].present(None)
|
||||
self.parent.child_windows[self.orig_handle].present(None)
|
||||
return
|
||||
self.db = db
|
||||
self.callback = callback
|
||||
@@ -1323,6 +1328,9 @@ class EditPerson:
|
||||
orig record"""
|
||||
|
||||
surname = unicode(self.surname.get_text())
|
||||
self.birth_date_object = self.dp.parse(self.bdate.get_text())
|
||||
self.death_date_object = self.dp.parse(self.ddate.get_text())
|
||||
|
||||
self.birth.set_date_object(self.birth_date_object)
|
||||
self.death.set_date_object(self.death_date_object)
|
||||
|
||||
@@ -1718,6 +1726,9 @@ class EditPerson:
|
||||
|
||||
name = self.pname
|
||||
|
||||
self.birth_date_object = self.dp.parse(self.bdate.get_text())
|
||||
self.death_date_object = self.dp.parse(self.ddate.get_text())
|
||||
|
||||
self.birth.set_date_object(self.birth_date_object)
|
||||
self.birth.set_place_handle(self.get_place(self.bplace,1))
|
||||
|
||||
|
@@ -1813,6 +1813,36 @@ class HasSourceOf(Rule):
|
||||
return False
|
||||
return person.has_source_reference( self.source_handle)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# "People having notes"
|
||||
#-------------------------------------------------------------------------
|
||||
class HasNote(Rule):
|
||||
"""People having notes"""
|
||||
|
||||
name = _('People having notes')
|
||||
description = _("Matches people that have a note")
|
||||
category = _('General filters')
|
||||
|
||||
def apply(self,db,person):
|
||||
return bool(person.get_note())
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# "People having notes that contain a substring"
|
||||
#-------------------------------------------------------------------------
|
||||
class HasNoteMatchingSubstringOf(Rule):
|
||||
"""People having notes containing <subtring>"""
|
||||
|
||||
labels = [ _('Substring:')]
|
||||
name = _('People having notes containing <subtring>')
|
||||
description = _("Matches people whose notes contain text matching a substring")
|
||||
category = _('General filters')
|
||||
|
||||
def apply(self,db,person):
|
||||
n = person.get_note()
|
||||
if n:
|
||||
return n.find(self.list[0]) != -1
|
||||
return False
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GenericFilter
|
||||
@@ -2086,6 +2116,8 @@ editor_rule_list = [
|
||||
IsSiblingOfFilterMatch,
|
||||
RelationshipPathBetween,
|
||||
HasTextMatchingSubstringOf,
|
||||
HasNote,
|
||||
HasNoteMatchingSubstringOf
|
||||
]
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
@@ -43,7 +43,7 @@ from bsddb import dbshelve, db
|
||||
from RelLib import *
|
||||
from GrampsDbBase import *
|
||||
|
||||
_DBVERSION = 6
|
||||
_DBVERSION = 7
|
||||
|
||||
def find_surname(key,data):
|
||||
return str(data[3].get_surname())
|
||||
@@ -421,6 +421,8 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.upgrade_5()
|
||||
if version < 6:
|
||||
self.upgrade_6()
|
||||
if version < 7:
|
||||
self.upgrade_7()
|
||||
self.metadata['version'] = _DBVERSION
|
||||
print 'Successfully finished all upgrades'
|
||||
|
||||
@@ -737,3 +739,16 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
if val[1] != 6:
|
||||
order.append(val)
|
||||
self.set_media_column_order(order)
|
||||
|
||||
def upgrade_7(self):
|
||||
print "Upgrading to DB version 7"
|
||||
|
||||
self.genderStats = GenderStats()
|
||||
cursor = self.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,val = data
|
||||
p = Person(val)
|
||||
self.genderStats.count_person(p,self)
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
@@ -279,6 +279,16 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
old_data = self.person_map.get(handle)
|
||||
if transaction != None:
|
||||
transaction.add(PERSON_KEY,handle,old_data)
|
||||
|
||||
if old_data:
|
||||
old_person = Person(old_data)
|
||||
if (old_data[2] != person.gender or
|
||||
old_data[3].first_name != person.primary_name.first_name):
|
||||
self.genderStats.uncount_person(old_person)
|
||||
self.genderStats.count_person(person,self)
|
||||
else:
|
||||
self.genderStats.count_person(person,self)
|
||||
|
||||
self.person_map[handle] = person.serialize()
|
||||
if old_data:
|
||||
self.emit('person-update',([handle],))
|
||||
@@ -462,8 +472,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
|
||||
data = self.person_map.get(str(val))
|
||||
if data:
|
||||
person = Person()
|
||||
person.unserialize(data)
|
||||
person = Person(data)
|
||||
return person
|
||||
return None
|
||||
|
||||
@@ -536,7 +545,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
transaction.add(PERSON_KEY, val, None)
|
||||
self.person_map[str(val)] = person.serialize()
|
||||
self.emit('person-add', ([str(val)],))
|
||||
self.genderStats.count_person (person, self)
|
||||
return person
|
||||
|
||||
def find_source_from_handle(self,val,transaction):
|
||||
@@ -658,7 +666,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
if not person.get_handle():
|
||||
person.set_handle(self.create_id())
|
||||
self.commit_person(person,transaction)
|
||||
self.genderStats.count_person (person, self)
|
||||
return person.get_handle()
|
||||
|
||||
def add_family(self,family,transaction):
|
||||
|
@@ -79,10 +79,16 @@ class Marriage:
|
||||
|
||||
def __init__(self,parent,family,db):
|
||||
"""Initializes the Marriage class, and displays the window"""
|
||||
family_handle = family.get_handle()
|
||||
# UGLY HACK to refresh faimly object from handle if that exists
|
||||
# done to ensure that the family object is not stale, as it could
|
||||
# have been changed by something external (merge, tool, etc).
|
||||
if family_handle:
|
||||
family = db.get_family_from_handle(family_handle)
|
||||
self.family = family
|
||||
self.parent = parent
|
||||
if self.parent.child_windows.has_key(family.get_handle()):
|
||||
self.parent.child_windows[family.get_handle()].present(None)
|
||||
if self.parent.child_windows.has_key(family_handle):
|
||||
self.parent.child_windows[family_handle].present(None)
|
||||
return
|
||||
self.child_windows = {}
|
||||
self.db = db
|
||||
|
@@ -107,7 +107,10 @@ class PeopleModel(gtk.GenericTreeModel):
|
||||
if data_filter:
|
||||
keys = data_filter.apply(self.db)
|
||||
if self.invert_result:
|
||||
handle_list = self.db.get_person_handles(sort_handles=False)
|
||||
#TODO: Could be optimized by using a cursor
|
||||
keys = [k for k in handle_list if k not in keys]
|
||||
del handle_list
|
||||
else:
|
||||
keys = self.db.get_person_handles(sort_handles=False)
|
||||
|
||||
|
@@ -782,7 +782,7 @@ class GedcomParser:
|
||||
place.set_title(pname)
|
||||
place.set_gramps_id(new_id)
|
||||
self.db.add_place(place,self.trans)
|
||||
self.lid2id[gramps_id] = intid
|
||||
self.lid2id[title] = intid
|
||||
return place
|
||||
|
||||
def parse_cause(self,event,level):
|
||||
|
@@ -939,7 +939,6 @@ class Person(PrimaryObject,PrivateSourceNote,MediaBase,AttributeBase):
|
||||
# We hold a reference to the GrampsDB so that we can maintain
|
||||
# its genderStats. It doesn't get set here, but from
|
||||
# GenderStats.count_person.
|
||||
self.db = None
|
||||
|
||||
def serialize(self):
|
||||
"""
|
||||
@@ -1134,12 +1133,7 @@ class Person(PrimaryObject,PrivateSourceNote,MediaBase,AttributeBase):
|
||||
@param name: L{Name} to be assigned to the person
|
||||
@type name: L{Name}
|
||||
"""
|
||||
db = self.db
|
||||
if db:
|
||||
db.genderStats.uncount_person (self)
|
||||
self.primary_name = name
|
||||
if db:
|
||||
db.genderStats.count_person (self, db)
|
||||
|
||||
def get_primary_name(self):
|
||||
"""
|
||||
@@ -1233,13 +1227,7 @@ class Person(PrimaryObject,PrivateSourceNote,MediaBase,AttributeBase):
|
||||
Person.UNKNOWN
|
||||
@type gender: int
|
||||
"""
|
||||
# if the db object has been assigned, update the
|
||||
# genderStats of the database
|
||||
if self.db:
|
||||
self.db.genderStats.uncount_person (self)
|
||||
self.gender = gender
|
||||
if self.db:
|
||||
self.db.genderStats.count_person (self, self.db)
|
||||
|
||||
def get_gender(self) :
|
||||
"""
|
||||
@@ -1835,7 +1823,7 @@ class Family(PrimaryObject,SourceNote,MediaBase,AttributeBase):
|
||||
@return: Returns the list of objects refereincing primary objects.
|
||||
@rtype: list
|
||||
"""
|
||||
return get_sourcref_child_list() + self.source_list
|
||||
return self.get_sourcref_child_list() + self.source_list
|
||||
|
||||
def set_complete_flag(self,val):
|
||||
"""
|
||||
@@ -2185,9 +2173,12 @@ class Event(PrimaryObject,PrivateSourceNote,MediaBase,DateBase,PlaceBase):
|
||||
@return: Returns the list of objects refereincing primary objects.
|
||||
@rtype: list
|
||||
"""
|
||||
return self.media_list + self.source_list + \
|
||||
[witness for witness in self.witness
|
||||
if witness.type == Event.ID]
|
||||
ret = self.media_list + self.source_list
|
||||
if self.witness:
|
||||
ret += [witness for witness in self.witness
|
||||
if witness.type == Event.ID]
|
||||
return ret
|
||||
|
||||
def get_witness_list(self):
|
||||
"""
|
||||
Returns the list of L{Witness} instances associated with the Event.
|
||||
@@ -4058,7 +4049,6 @@ class GenderStats:
|
||||
if not person:
|
||||
return
|
||||
# Let the Person do their own counting later
|
||||
person.db = db
|
||||
|
||||
name = self._get_key (person)
|
||||
if not name:
|
||||
|
@@ -1048,6 +1048,16 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
|
||||
all.add_rule(GenericFilter.HasTextMatchingRegexpOf([]))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.GenericFilter()
|
||||
all.set_name(_("People with notes"))
|
||||
all.add_rule(GenericFilter.HasNote([]))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People with notes containing..."))
|
||||
all.add_rule(GenericFilter.HasNoteMatchingSubstringOf([]))
|
||||
filter_list.append(all)
|
||||
|
||||
self.filter_model = GenericFilter.FilterStore(filter_list)
|
||||
self.filter_list.set_model(self.filter_model)
|
||||
self.filter_list.set_active(self.filter_model.default_index())
|
||||
|
@@ -82,6 +82,7 @@ def runTool(database,active_person,callback,parent=None):
|
||||
|
||||
checker.check_events()
|
||||
checker.check_place_references()
|
||||
checker.check_source_references()
|
||||
database.transaction_commit(trans, _("Check Integrity"))
|
||||
database.enable_signals()
|
||||
database.request_rebuild()
|
||||
@@ -115,6 +116,7 @@ class CheckIntegrity:
|
||||
self.invalid_birth_events = []
|
||||
self.invalid_death_events = []
|
||||
self.invalid_place_references = []
|
||||
self.invalid_source_references = []
|
||||
|
||||
def family_errors(self):
|
||||
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family)
|
||||
@@ -429,6 +431,123 @@ class CheckIntegrity:
|
||||
self.db.commit_event(event,self.trans)
|
||||
self.invalid_place_references.append(key)
|
||||
|
||||
def check_source_references(self):
|
||||
known_handles = self.db.get_source_handles()
|
||||
|
||||
cursor = self.db.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
person = RelLib.Person()
|
||||
person.unserialize(info)
|
||||
handle_list = person.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
person.remove_source_references(bad_handles)
|
||||
self.db.commit_person(person,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.db.get_family_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
family = RelLib.Family()
|
||||
family.unserialize(info)
|
||||
handle_list = family.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
family.remove_source_references(bad_handles)
|
||||
self.db.commit_family(family,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.db.get_place_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
place = RelLib.Place()
|
||||
place.unserialize(info)
|
||||
handle_list = place.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
place.remove_source_references(bad_handles)
|
||||
self.db.commit_family(place,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.db.get_source_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
source = RelLib.Source()
|
||||
source.unserialize(info)
|
||||
handle_list = source.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
source.remove_source_references(bad_handles)
|
||||
self.db.commit_source(source,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.db.get_media_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
obj = RelLib.MediaObject()
|
||||
obj.unserialize(info)
|
||||
handle_list = obj.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
obj.remove_source_references(bad_handles)
|
||||
self.db.commit_object(obj,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.db.get_event_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,info = data
|
||||
event = RelLib.Event()
|
||||
event.unserialize(info)
|
||||
handle_list = event.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'Source' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
event.remove_source_references(bad_handles)
|
||||
self.db.commit_event(event,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
def build_report(self,cl=0):
|
||||
bad_photos = len(self.bad_photo)
|
||||
replaced_photos = len(self.replaced_photo)
|
||||
@@ -443,8 +562,10 @@ class CheckIntegrity:
|
||||
death_invalid = len(self.invalid_death_events)
|
||||
person = birth_invalid + death_invalid
|
||||
place_references = len(self.invalid_place_references)
|
||||
source_references = len(self.invalid_source_references)
|
||||
|
||||
errors = blink + efam + photos + rel + person + event_invalid + place_references
|
||||
errors = blink + efam + photos + rel + person \
|
||||
+ event_invalid + place_references + source_references
|
||||
|
||||
if errors == 0:
|
||||
if cl:
|
||||
@@ -534,6 +655,10 @@ class CheckIntegrity:
|
||||
self.text.write(_("1 place was referenced but not found\n"))
|
||||
elif place_references > 1:
|
||||
self.text.write(_("%d places were referenced, but not found\n") % place_references)
|
||||
if source_references == 1:
|
||||
self.text.write(_("1 source was referenced but not found\n"))
|
||||
elif source_references > 1:
|
||||
self.text.write(_("%d sources were referenced, but not found\n") % source_references)
|
||||
|
||||
return errors
|
||||
|
||||
|
65
gramps2/src/plugins/DumpGenderStats.py
Normal file
65
gramps2/src/plugins/DumpGenderStats.py
Normal file
@@ -0,0 +1,65 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000-2005 Martin Hawlisch, Donald N. Allingham
|
||||
#
|
||||
# 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$
|
||||
|
||||
"Dump gender stats"
|
||||
|
||||
import gtk
|
||||
import ListModel
|
||||
_GENDER = [ _(u'female'), _(u'male'), _(u'unknown') ]
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def DumpGenderStatsPlugin(database,active_person,callback,parent=None):
|
||||
stats_list = []
|
||||
for name in database.genderStats.stats.keys():
|
||||
stats_list.append((name,)+database.genderStats.stats[name]+(_GENDER[database.genderStats.guess_gender(name)],))
|
||||
|
||||
titles = [(_('Name'),1,100), (_('Male'),2,70),
|
||||
(_('Female'),3,70), ('Unknown',4,70), (_('Guess'),5,70) ]
|
||||
treeview = gtk.TreeView()
|
||||
model = ListModel.ListModel(treeview,titles)
|
||||
for entry in stats_list:
|
||||
model.add(entry,entry[0])
|
||||
w = gtk.Window()
|
||||
w.set_position(gtk.WIN_POS_MOUSE)
|
||||
w.set_default_size(400,300)
|
||||
s=gtk.ScrolledWindow()
|
||||
s.add(treeview)
|
||||
w.add(s)
|
||||
w.show_all()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from PluginMgr import register_tool
|
||||
|
||||
register_tool(
|
||||
DumpGenderStatsPlugin,
|
||||
_("Dumps gender statistics"),
|
||||
category=_("Debug"),
|
||||
description=_("Will dump the statistics for the gender guessing from the first name.")
|
||||
)
|
@@ -48,6 +48,7 @@ import Report
|
||||
import ReportOptions
|
||||
import GenericFilter
|
||||
import const
|
||||
import RelLib
|
||||
from BaseDoc import PAPER_LANDSCAPE
|
||||
from latin_utf8 import utf8_to_latin
|
||||
from QuestionDialog import ErrorDialog
|
||||
@@ -233,8 +234,8 @@ class GraphViz:
|
||||
family = self.database.get_family_from_handle(family_handle)
|
||||
father_handle = family.get_father_handle()
|
||||
mother_handle = family.get_mother_handle()
|
||||
fadopted = frel != _("Birth")
|
||||
madopted = mrel != _("Birth")
|
||||
fadopted = frel != RelLib.Person.CHILD_REL_BIRTH
|
||||
madopted = mrel != RelLib.Person.CHILD_REL_BIRTH
|
||||
famid = family.get_gramps_id().replace('-','_')
|
||||
if (self.show_families and
|
||||
(father_handle and person_dict.has_key(father_handle) or
|
||||
|
@@ -715,12 +715,24 @@ class IndividualPage:
|
||||
self.doc.write_text(_("Siblings"))
|
||||
self.doc.end_paragraph()
|
||||
|
||||
self.doc.start_table("three","IndTable")
|
||||
|
||||
self.doc.start_table("four","IndTable")
|
||||
self.doc.start_row()
|
||||
self.doc.start_cell("NormalCell")
|
||||
self.doc.start_paragraph("Label")
|
||||
self.doc.write_text(_("Siblings"))
|
||||
self.doc.end_paragraph()
|
||||
self.doc.end_cell()
|
||||
|
||||
self.doc.start_cell("NormalCell")
|
||||
first = True
|
||||
for child_handle in all_sisters:
|
||||
child = self.db.get_person_from_handle(child_handle)
|
||||
self.doc.start_paragraph("Data")
|
||||
name = child.get_primary_name().get_regular_name()
|
||||
if first:
|
||||
self.doc.start_paragraph("Data")
|
||||
first = False
|
||||
else:
|
||||
self.doc.write_text('\n')
|
||||
if self.person.get_handle() == child_handle:
|
||||
self.doc.write_text(name)
|
||||
elif self.list.has_key(child_handle):
|
||||
@@ -729,8 +741,12 @@ class IndividualPage:
|
||||
self.doc.end_link()
|
||||
else:
|
||||
self.doc.write_text(name)
|
||||
if not first:
|
||||
self.doc.end_paragraph()
|
||||
|
||||
|
||||
self.doc.end_cell()
|
||||
self.doc.end_row()
|
||||
self.doc.end_table()
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
|
2203
gramps2/src/po/fi.po
2203
gramps2/src/po/fi.po
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Project-Id-Version: fr\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: Thu Jun 23 14:11:42 2005\n"
|
||||
"PO-Revision-Date: 2005-05-17 18:11+0200\n"
|
||||
"PO-Revision-Date: 2005-06-28 21:48+0200\n"
|
||||
"Last-Translator: Matthieu Pupat <tieum.tieum@free.fr>\n"
|
||||
"Language-Team: Fran<61>ais <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -79,28 +79,24 @@ msgid "A person cannot be linked as his/her spouse"
|
||||
msgstr "Une personne ne peut <20>tre son propre conjoint"
|
||||
|
||||
#: AddSpouse.py:241
|
||||
#, fuzzy
|
||||
msgid "Spouse is a parent"
|
||||
msgstr "<b>Parents de l'<27>p_oux(se)</b>"
|
||||
msgstr "Le conjoint est un parent"
|
||||
|
||||
#: AddSpouse.py:242
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The person selected as a spouse is a parent of the active person. Usually, "
|
||||
"this is a mistake. You may choose either to proceed with adding a spouse, or "
|
||||
"to return to the Choose Spouse dialog to fix the problem."
|
||||
msgstr ""
|
||||
"Le sexe de la personne est inconnu. Habituellement, c'est une erreur. Vous "
|
||||
"pouvez choisir de continuer la sauvegarde ou d'<27>diter la fiche pour corriger "
|
||||
"le probl<62>me."
|
||||
"La personne s<>lectionn<6E>e comme conjoint est un parent de la personne active. "
|
||||
"Habituellement, c'est une erreur. Vous pouvez choisir de continuer la "
|
||||
"sauvegarde ou d'<27>diter la fiche pour corriger le probl<62>me."
|
||||
|
||||
#: AddSpouse.py:246 AddSpouse.py:267
|
||||
#, fuzzy
|
||||
msgid "Proceed with adding"
|
||||
msgstr "Fermer _sans sauvegarder"
|
||||
msgstr "Forcer l'ajout"
|
||||
|
||||
#: AddSpouse.py:246 AddSpouse.py:267
|
||||
#, fuzzy
|
||||
msgid "Return to dialog"
|
||||
msgstr "Retour <20> la fen<65>tre"
|
||||
|
||||
@@ -109,20 +105,18 @@ msgid "The spouse is already present in this family"
|
||||
msgstr "Le conjoint est d<>j<EFBFBD> pr<70>sent dans la famille"
|
||||
|
||||
#: AddSpouse.py:262
|
||||
#, fuzzy
|
||||
msgid "Spouse is a child"
|
||||
msgstr "Erreur lors de la s<>lection d'un enfant"
|
||||
msgstr "Le conjoint est un enfant"
|
||||
|
||||
#: AddSpouse.py:263
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"The person selected as a spouse is a child of the active person. Usually, "
|
||||
"this is a mistake. You may choose either to proceed with adding a spouse, or "
|
||||
"to return to the Choose Spouse dialog to fix the problem."
|
||||
msgstr ""
|
||||
"Le sexe de la personne est inconnu. Habituellement, c'est une erreur. Vous "
|
||||
"pouvez choisir de continuer la sauvegarde ou d'<27>diter la fiche pour corriger "
|
||||
"le probl<62>me."
|
||||
"La personne choisie comme conjoint est un enfant de la personne active. "
|
||||
"Habituellement, c'est une erreur. Vous pouvez choisir de continuer la "
|
||||
"sauvegarde ou d'<27>diter la fiche pour corriger le probl<62>me."
|
||||
|
||||
#: AddSpouse.py:293 FamilyView.py:725
|
||||
msgid "Add Spouse"
|
||||
@@ -221,9 +215,8 @@ msgid "Edit Bookmarks"
|
||||
msgstr "G<>rer les signets"
|
||||
|
||||
#: ChooseParents.py:129 ChooseParents.py:130
|
||||
#, fuzzy
|
||||
msgid "Loading..."
|
||||
msgstr "Chargement de %s ..."
|
||||
msgstr "Chargement ..."
|
||||
|
||||
#: ChooseParents.py:133
|
||||
msgid "Choose the Parents of %s"
|
||||
@@ -281,24 +274,20 @@ msgid "Father"
|
||||
msgstr "P<>re"
|
||||
|
||||
#: ChooseParents.py:834
|
||||
#, fuzzy
|
||||
msgid "Likely Father"
|
||||
msgstr "P<>re"
|
||||
msgstr "P<>re suppos<6F>"
|
||||
|
||||
#: ChooseParents.py:835
|
||||
#, fuzzy
|
||||
msgid "Matches likely fathers"
|
||||
msgstr "Corresponds <20> toutes les femmes de la base de donn<6E>es"
|
||||
msgstr "Tous les p<>res suppos<6F>s"
|
||||
|
||||
#: ChooseParents.py:844
|
||||
#, fuzzy
|
||||
msgid "Likely Mother"
|
||||
msgstr "M<>re"
|
||||
msgstr "M<>re suppos<6F>e"
|
||||
|
||||
#: ChooseParents.py:845
|
||||
#, fuzzy
|
||||
msgid "Matches likely mothers"
|
||||
msgstr "Corresponds <20> tous les hommes de la base de donn<EFBFBD>es"
|
||||
msgstr "Toutes les m<>res suppos<EFBFBD>es"
|
||||
|
||||
#: ColumnOrder.py:40
|
||||
msgid "Select Columns"
|
||||
@@ -670,13 +659,15 @@ msgstr "Nouveau lieu"
|
||||
|
||||
#: EditPlace.py:391
|
||||
msgid "Place title is already in use"
|
||||
msgstr ""
|
||||
msgstr "Le nom de lieu est d<>j<EFBFBD> utilis<69>"
|
||||
|
||||
#: EditPlace.py:392
|
||||
msgid ""
|
||||
"Each place must have a unique title, and title you have selected is already "
|
||||
"used by another place"
|
||||
msgstr ""
|
||||
"Chaque lieu doit avoir un titre unique. Le titre s<>lectionn<6E> est utilis<69> "
|
||||
"pour un autre lieu"
|
||||
|
||||
#: EditPlace.py:427
|
||||
msgid "Edit Place (%s)"
|
||||
@@ -1154,17 +1145,15 @@ msgid "Matches everyone in the database"
|
||||
msgstr "Assortir tout un chacun dans la base"
|
||||
|
||||
#: GenericFilter.py:146
|
||||
#, fuzzy
|
||||
msgid "Disconnected people"
|
||||
msgstr "Individus d<>connect<63>s"
|
||||
|
||||
#: GenericFilter.py:148
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Matches people that have no family relationships to any other person in the "
|
||||
"database"
|
||||
msgstr ""
|
||||
"Assortir les individus ayant des ascendants commun aux r<>sultats du filtrage"
|
||||
"Assortir les individus n'ayant de relation avec aucun individu de la base"
|
||||
|
||||
#: GenericFilter.py:164 GenericFilter.py:260 GenericFilter.py:368
|
||||
#: GenericFilter.py:459 GenericFilter.py:502 GenericFilter.py:623
|
||||
@@ -1175,16 +1164,14 @@ msgid "ID:"
|
||||
msgstr "Id :"
|
||||
|
||||
#: GenericFilter.py:165
|
||||
#, fuzzy
|
||||
msgid "Relationship path between <persons>"
|
||||
msgstr "Relation entre deux individus"
|
||||
msgstr "Relation entre <persons>"
|
||||
|
||||
#: GenericFilter.py:166
|
||||
msgid "Relationship filters"
|
||||
msgstr "Filtres relationnels"
|
||||
|
||||
#: GenericFilter.py:167
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Matches the ancestors of two persons back to a common ancestor, producing "
|
||||
"the relationship path between two persons."
|
||||
@@ -1193,17 +1180,14 @@ msgstr ""
|
||||
"relier ces deux personnes."
|
||||
|
||||
#: GenericFilter.py:261
|
||||
#, fuzzy
|
||||
msgid "People with <Id>"
|
||||
msgstr "Individus ayant des enfants"
|
||||
msgstr "Individus avec <id>"
|
||||
|
||||
#: GenericFilter.py:262
|
||||
#, fuzzy
|
||||
msgid "Matches people with a specified GRAMPS ID"
|
||||
msgstr "Assortir l'individu <20> son identifiant GRAMPS"
|
||||
msgstr "Assortir les individus avec l'identifiant GRAMPS"
|
||||
|
||||
#: GenericFilter.py:276
|
||||
#, fuzzy
|
||||
msgid "Default person"
|
||||
msgstr "Individu par d<>faut"
|
||||
|
||||
@@ -1212,18 +1196,16 @@ msgid "Matches the default person"
|
||||
msgstr "Trouver l'individu par d<>faut"
|
||||
|
||||
#: GenericFilter.py:299
|
||||
#, fuzzy
|
||||
msgid "Bookmarked people"
|
||||
msgstr "Comparer des personnes"
|
||||
msgstr "Personnes avec un marque-pages"
|
||||
|
||||
#: GenericFilter.py:301
|
||||
msgid "Matches the people on the bookmark list"
|
||||
msgstr "Trouver les personnes sur un marque-page"
|
||||
|
||||
#: GenericFilter.py:322
|
||||
#, fuzzy
|
||||
msgid "People with complete records"
|
||||
msgstr "Individus ayant des noms incomplets"
|
||||
msgstr "Individus ayant un enregistrement complet"
|
||||
|
||||
#: GenericFilter.py:324
|
||||
msgid "Matches all people whose records are complete"
|
||||
@@ -1238,14 +1220,12 @@ msgid "Matches all females"
|
||||
msgstr "Corresponds <20> toutes les femmes de la base de donn<6E>es"
|
||||
|
||||
#: GenericFilter.py:352 gramps_main.py:967
|
||||
#, fuzzy
|
||||
msgid "People with unknown gender"
|
||||
msgstr "Individus sans aucun mariage"
|
||||
msgstr "Individus sans sexe connu"
|
||||
|
||||
#: GenericFilter.py:354
|
||||
#, fuzzy
|
||||
msgid "Matches all people with unknown gender"
|
||||
msgstr "Rassemble les individus aux enregistrements complets"
|
||||
msgstr "Rassemble les individus sans sexe connu"
|
||||
|
||||
#: GenericFilter.py:368 GenericFilter.py:416 GenericFilter.py:670
|
||||
#: GenericFilter.py:724 plugins/FilterEditor.py:692
|
||||
@@ -1253,9 +1233,8 @@ msgid "Inclusive:"
|
||||
msgstr "Inclusif :"
|
||||
|
||||
#: GenericFilter.py:369
|
||||
#, fuzzy
|
||||
msgid "Descendants of <person>"
|
||||
msgstr "Descendants de %s"
|
||||
msgstr "Descendants de <person>"
|
||||
|
||||
#: GenericFilter.py:370 GenericFilter.py:418 GenericFilter.py:461
|
||||
#: GenericFilter.py:504 GenericFilter.py:625
|
||||
@@ -1273,14 +1252,12 @@ msgid "Filter name:"
|
||||
msgstr "Filtre sur le nom :"
|
||||
|
||||
#: GenericFilter.py:417
|
||||
#, fuzzy
|
||||
msgid "Descendants of <filter> match"
|
||||
msgstr "Est le descendant d'un individu r<>sultant du filtrage"
|
||||
msgstr "Est le descendant du filtre <filter>"
|
||||
|
||||
#: GenericFilter.py:419
|
||||
#, fuzzy
|
||||
msgid "Matches people that are descendants of anybody matched by a filter"
|
||||
msgstr "Assortir les descendants d'un individu aux r<>sultats du filtrage"
|
||||
msgstr "Descendants des individus r<>sultant d'un filtre"
|
||||
|
||||
#: GenericFilter.py:459 GenericFilter.py:502 GenericFilter.py:768
|
||||
#: GenericFilter.py:820 plugins/FilterEditor.py:678
|
||||
@@ -1288,9 +1265,8 @@ msgid "Number of generations:"
|
||||
msgstr "Nombre de g<>n<EFBFBD>rations :"
|
||||
|
||||
#: GenericFilter.py:460
|
||||
#, fuzzy
|
||||
msgid "Descendants of <person> not more than <N> generations away"
|
||||
msgstr "Est le descendant d'un individu sur moins de N g<>n<EFBFBD>rations"
|
||||
msgstr "Est le descendant de <person> sur moins de <N> g<>n<EFBFBD>rations"
|
||||
|
||||
#: GenericFilter.py:462
|
||||
msgid ""
|
||||
@@ -1299,9 +1275,8 @@ msgid ""
|
||||
msgstr "Assortir les descendants d'un individu sur moins de N g<>n<EFBFBD>rations"
|
||||
|
||||
#: GenericFilter.py:503
|
||||
#, fuzzy
|
||||
msgid "Descendants of <person> at least <N> generations away"
|
||||
msgstr "Est le descendant d'un individu sur au moins N g<>n<EFBFBD>rations"
|
||||
msgstr "Est le descendant de <person> sur au moins <N> g<>n<EFBFBD>rations"
|
||||
|
||||
#: GenericFilter.py:505
|
||||
msgid ""
|
||||
@@ -1310,9 +1285,8 @@ msgid ""
|
||||
msgstr "Assortir les descendants d'un individu sur au moins N g<>n<EFBFBD>rations"
|
||||
|
||||
#: GenericFilter.py:545
|
||||
#, fuzzy
|
||||
msgid "Children of <filter> match"
|
||||
msgstr "Est un enfant d'un individu r<>sultant du filtrage"
|
||||
msgstr "Enfants du filtre <filter>"
|
||||
|
||||
#: GenericFilter.py:546 GenericFilter.py:584 GenericFilter.py:872
|
||||
#: GenericFilter.py:1096 GenericFilter.py:1389 GenericFilter.py:1412
|
||||
@@ -1321,24 +1295,20 @@ msgid "Family filters"
|
||||
msgstr "Filtres familiaux"
|
||||
|
||||
#: GenericFilter.py:547
|
||||
#, fuzzy
|
||||
msgid "Matches children of anybody matched by a filter"
|
||||
msgstr "Assortir les enfants d'un individu aux r<>sultats du filtrage"
|
||||
msgstr "Enfants des individus r<>sultant d'un filtre"
|
||||
|
||||
#: GenericFilter.py:583
|
||||
#, fuzzy
|
||||
msgid "Siblings of <filter> match"
|
||||
msgstr "Est un fr<66>re ou une soeur d'un individu r<>sultant du filtrage"
|
||||
msgstr "Est un fr<66>re ou une soeur du filtre <filter>"
|
||||
|
||||
#: GenericFilter.py:585
|
||||
#, fuzzy
|
||||
msgid "Matches siblings of anybody matched by a filter"
|
||||
msgstr "Trouver les fr<EFBFBD>res et soeurs d'une personne gr<67>ce <20> un filtre"
|
||||
msgstr "Fr<EFBFBD>res et soeurs des individus r<>sultant d'un filtre"
|
||||
|
||||
#: GenericFilter.py:624
|
||||
#, fuzzy
|
||||
msgid "Descendant family members of <person>"
|
||||
msgstr "Est un membre de la famille descendant de"
|
||||
msgstr "Est un membre de la famille descendant de <person>"
|
||||
|
||||
#: GenericFilter.py:626
|
||||
msgid ""
|
||||
@@ -1347,9 +1317,8 @@ msgid ""
|
||||
msgstr "Assortir les descendants ou leurs <20>poux(se) <20> un individu"
|
||||
|
||||
#: GenericFilter.py:671
|
||||
#, fuzzy
|
||||
msgid "Ancestors of <person>"
|
||||
msgstr "Anc<6E>tres de %s"
|
||||
msgstr "Anc<6E>tres de <person>"
|
||||
|
||||
#: GenericFilter.py:672 GenericFilter.py:726 GenericFilter.py:770
|
||||
#: GenericFilter.py:822 GenericFilter.py:909 GenericFilter.py:955
|
||||
@@ -1361,9 +1330,8 @@ msgid "Matches people that are ancestors of a specified person"
|
||||
msgstr "Assortir les ascendants <20> un individu"
|
||||
|
||||
#: GenericFilter.py:725
|
||||
#, fuzzy
|
||||
msgid "Ancestors of <filter> match"
|
||||
msgstr "Est l'ascendant d'un individu r<>sultant du filtrage"
|
||||
msgstr "Est l'ascendant du filtre <filter>"
|
||||
|
||||
#: GenericFilter.py:727
|
||||
#, fuzzy
|
||||
@@ -10381,149 +10349,3 @@ msgstr "<b>Crit
|
||||
#: rule.glade:1186
|
||||
msgid "<b>Values</b>"
|
||||
msgstr "<b>Valeurs</b>"
|
||||
|
||||
#~ msgid "A person cannot be linked as his/her child's spouse"
|
||||
#~ msgstr "Une personne ne peut <20>tre le conjoint de son enfant"
|
||||
|
||||
#~ msgid "A person cannot be linked as his/her parent's spouse"
|
||||
#~ msgstr "Une personne ne peut <20>tre le conjoint de son p<>re ou de sa m<>re"
|
||||
|
||||
#~ msgid "Month Day, Year"
|
||||
#~ msgstr "Mois Jour, Ann<6E>e"
|
||||
|
||||
#~ msgid "Numerical"
|
||||
#~ msgstr "Num<75>rique"
|
||||
|
||||
#~ msgid "YYYY-MM-DD (ISO)"
|
||||
#~ msgstr "AAAA-MM-JJ (ISO)"
|
||||
|
||||
#~ msgid "DAY MON YEAR"
|
||||
#~ msgstr "JOUR MOIS ANNEE"
|
||||
|
||||
#~ msgid "Day Month Year"
|
||||
#~ msgstr "Jour Mois Ann<6E>e"
|
||||
|
||||
#~ msgid "MON DAY, YEAR"
|
||||
#~ msgstr "MOIS JOUR, ANNEE"
|
||||
|
||||
#~ msgid "Matches individuals that have no relationships"
|
||||
#~ msgstr "Trouver les individus sans relations"
|
||||
|
||||
#~ msgid "Matches the person that is a parent of someone matched by a filter"
|
||||
#~ msgstr "Assortir les parents d'un individu aux r<>sultats du filtrage"
|
||||
|
||||
#~ msgid "Is bookmarked person"
|
||||
#~ msgstr "Individu avec un marque-page"
|
||||
|
||||
#~ msgid "Has the Id"
|
||||
#~ msgstr "A l'identifiant"
|
||||
|
||||
#~ msgid "Has a name"
|
||||
#~ msgstr "A un nom"
|
||||
|
||||
#~ msgid "Has the death"
|
||||
#~ msgstr "A le d<>c<EFBFBD>s"
|
||||
|
||||
#~ msgid "Has the birth"
|
||||
#~ msgstr "A la naissance"
|
||||
|
||||
#~ msgid "Is a descendant of"
|
||||
#~ msgstr "Est le descendant de"
|
||||
|
||||
#~ msgid "Is an ancestor of"
|
||||
#~ msgstr "Est l'anc<6E>tre de"
|
||||
|
||||
#~ msgid "Has a common ancestor with"
|
||||
#~ msgstr "A un anc<6E>tre commun avec"
|
||||
|
||||
#~ msgid "Is a female"
|
||||
#~ msgstr "Est une femme"
|
||||
|
||||
#~ msgid "Is a male"
|
||||
#~ msgstr "Est un homme"
|
||||
|
||||
#~ msgid "Has complete record"
|
||||
#~ msgstr "A un enregistrement complet"
|
||||
|
||||
#~ msgid "Has source of"
|
||||
#~ msgstr "Contient la source"
|
||||
|
||||
#~ msgid "Matches the filter named"
|
||||
#~ msgstr "Correspond au crit<69>re suivant"
|
||||
|
||||
#~ msgid "People who were adopted"
|
||||
#~ msgstr "Individus ayant <20>t<EFBFBD> adopt<70>s"
|
||||
|
||||
#~ msgid "Has text matching substring of"
|
||||
#~ msgstr "A du texte contenant"
|
||||
|
||||
#~ msgid "Name contains..."
|
||||
#~ msgstr "Le nom contient ..."
|
||||
|
||||
#~ msgid "Index of individuals, sorted by last name."
|
||||
#~ msgstr "Index des individus tri<72> par nom."
|
||||
|
||||
#~ msgid "Surname"
|
||||
#~ msgstr "Nom de famille"
|
||||
|
||||
#~ msgid "Places"
|
||||
#~ msgstr "Lieux"
|
||||
|
||||
#~ msgid "Index of all the places in the project."
|
||||
#~ msgstr "Index de tous les lieux du projet."
|
||||
|
||||
#~ msgid "Letter"
|
||||
#~ msgstr "Lettres"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Index of all the surnames in the project. The links lead to a list of "
|
||||
#~ "individuals in the database with this same surname."
|
||||
#~ msgstr ""
|
||||
#~ "Index des noms de famille du projet. Les liens m<>nent vers la liste des "
|
||||
#~ "individus de la base ayant le m<>me nom de famille."
|
||||
|
||||
#~ msgid "Introduction"
|
||||
#~ msgstr "Introduction"
|
||||
|
||||
#~ msgid "All sources cited in the project."
|
||||
#~ msgstr "Toutes les sources cit<69>es dans le projet."
|
||||
|
||||
#~ msgid "Download"
|
||||
#~ msgstr "T<>l<EFBFBD>charger"
|
||||
|
||||
#~ msgid "Contact"
|
||||
#~ msgstr "Contact"
|
||||
|
||||
#~ msgid "Pedigree"
|
||||
#~ msgstr "Arborescence"
|
||||
|
||||
#~ msgid "Narrative"
|
||||
#~ msgstr "Narratif"
|
||||
|
||||
#~ msgid "Relationships"
|
||||
#~ msgstr "Relations"
|
||||
|
||||
#~ msgid "Partner"
|
||||
#~ msgstr "Partenaire"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(description)s, %(date)s at   %"
|
||||
#~ "(place)s"
|
||||
#~ msgstr ""
|
||||
#~ "%(description)s, %(date)s <20>   %(place)"
|
||||
#~ "s"
|
||||
|
||||
#~ msgid "%(description)s, %(date)s "
|
||||
#~ msgstr "%(description)s, %(date)s "
|
||||
|
||||
#~ msgid "%(date)s at   %(place)s"
|
||||
#~ msgstr "%(date)s <20>   %(place)s"
|
||||
|
||||
#~ msgid "Web site title"
|
||||
#~ msgstr "Nom du site web"
|
||||
|
||||
#~ msgid "Narrative Web Site"
|
||||
#~ msgstr "G<>n<EFBFBD>ration de site internet d<>taill<6C>"
|
||||
|
||||
#~ msgid "Min. bar char items"
|
||||
#~ msgstr "Nombre minimum d'entr<74>es pour les diagrammes en barres"
|
||||
|
@@ -1,9 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<filters>
|
||||
<filter name="asfd" function="and">
|
||||
<rule class="Is a male">
|
||||
</rule>
|
||||
</filter>
|
||||
<filter name="asfasdfasdf" function="and">
|
||||
</filter>
|
||||
</filters>
|
||||
|
Reference in New Issue
Block a user