Add Ukrainian relationship calculator and holidays (contributions by Fedir)

svn: r22527
This commit is contained in:
Jérôme Rapinat 2013-06-20 07:16:10 +00:00
parent 78bd5a0256
commit 7d96ee1308
4 changed files with 962 additions and 1 deletions

View File

@ -499,4 +499,41 @@
<date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/> <date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/>
<date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/> <date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/>
</country> </country>
<country _name="Ukraine">
<date value="*/1/1" type="national" name="Новий Рік"/>
<date value="*/1/6" type="religious" name="Святий Вечір"/>
<date value="*/1/7" type="religious" name="Різдво"/>
<date value="*/1/13" type="religious" name="Маланка"/>
<date value="*/1/14" type="religious" name="Старий Новий рік, Щедрий вечір"/>
<date value="*/1/19" type="religious" name="Водохреща"/>
<date value="*/1/22" type="national" name="День Соборності України"/>
<date value="*/2/14" type="secular" name="День закоханих"/>
<date value="*/2/15" type="religious" name="Стрітення"/>
<date value="*/3/8" type="secular" name="Міжнародний жіночий день"/>
<date value="*/3/20" type="secular" name="Весняне Рівнодення"/>
<date value="*/4/1" type="secular" name="День сміху"/>
<date value="*/4/7" type="religious" name="Благовіщення"/>
<date value="2010/4/4" type="religious" name="Великдень"/>
<date value="2011/4/24" type="religious" name="Великдень"/>
<date value="2012/4/15" type="religious" name="Великдень"/>
<date value="2013/5/5" type="religious" name="Великдень"/>
<date value="2014/4/20" type="religious" name="Великдень"/>
<date value="2015/4/12" type="religious" name="Великдень"/>
<date value="2016/5/1" type="religious" name="Великдень"/>
<date value="2017/4/16" type="religious" name="Великдень"/>
<date value="2018/4/8" type="religious" name="Великдень"/>
<date value="2019/4/28" type="religious" name="Великдень"/>
<date value="2020/4/19" type="religious" name="Великдень"/>
<date value="*/5/1" type="national" name="День Праці"/>
<date value="*/6/21" type="secular" name="Весняне Сонцестояння"/>
<date value="*/6/28" type="national" name="День Конституції України"/>
<date value="*/7/7" type="religious" name="Івана Купала"/>
<date value="*/8/19" type="religious" name="Спаса"/>
<date value="*/8/24" type="national" name="День Незалежності України"/>
<date value="*/9/22" type="secular" name="Осіннє Рівнодення"/>
<date value="*/10/14" type="religious" name="Покрова, День Українського козацтва"/>
<date value="*/12/13" type="religious" name="Андрія"/>
<date value="*/12/19" type="religious" name="Миколая"/>
<date value="*/12/21" type="secular" name="Осіннє Сонцестояння"/>
</country>
</calendar> </calendar>

View File

@ -25,7 +25,8 @@ pkgpython_PYTHON = \
rel_ru.py\ rel_ru.py\
rel_sk.py\ rel_sk.py\
rel_sl.py\ rel_sl.py\
rel_sv.py rel_sv.py\
rel_uk.py
pkgpyexecdir = @pkgpyexecdir@/plugins/rel pkgpyexecdir = @pkgpyexecdir@/plugins/rel
pkgpythondir = $(datadir)/@PACKAGE@/plugins/rel pkgpythondir = $(datadir)/@PACKAGE@/plugins/rel

907
src/plugins/rel/rel_uk.py Normal file
View File

@ -0,0 +1,907 @@
# -*- coding: utf-8 -*-
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2003-2005 Donald N. Allingham
# Copyright (C) 2008 Brian G. Matherly
# Copyright (C) 2013 Oleh Petriv <olehsbox[at]yahoo.com>
# Copyright (C) 2013 Fedir Zinchuk <fedikw[at]gmail.com>
#
# 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
#
# UA: Пояснення щодо родинних відносин див. relationship.py
# EN: Ukrainian relationship calculator. For more information see relationship.py
"""
Ukrainian-specific definitions of relationships
"""
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import gen.lib
import Relationship
#-------------------------------------------------------------------------
# Relationship levels
_level_name = [
"",
"рідний(-на)", "двоюрідний(-на)", "троюрідний(-на)",
"чотириюрідний(-на)", "п'ятиюрідний(-на)", "шестиюрідний(-на)",
"семиюрідний(-на)", "восьмиюрідний(-на)", "дев'ятиюрідний(-на)",
"десятиюрідний(-на)", "одинадцятиюрідний(-на)",
"дванадцятиюрідний(-на)", "тринадцятиюрідний(-на)",
"чотирнадцятиюрідний(-на)", "п'ятнадцятиюрідний(-на)",
"шістнадцятиюрідний(-на)", "сімнадцятиюрідний(-на)",
"вісімнадцятиюрідний(-на)", "дев'ятнадцятиюрідний(-на)",
"двадцятиюрідний(-на)"
]
_level_name_male = [
"",
"рідний", "двоюрідний", "троюрідний",
"чотириюрідний", "п'ятиюрідний", "шестиюрідний",
"семиюрідний", "восьмиюрідний", "дев'ятиюрідний",
"десятиюрідний", "одинадцятиюрідний", "дванадцятиюрідний",
"тринадцятиюрідний", "чотирнадцятиюрідний", "п'ятнадцятиюрідний",
"шістнадцятиюрідний", "сімнадцятиюрідний", "вісімнадцятиюрідний",
"дев'ятнадцятиюрідний", "двадцятиюрідний"
]
_level_name_female = [
"",
"рідна", "двоюрідна", "троюрідна",
"чотириюріднa", "п'ятиюрідна", "шестиюрідна",
"семиюрідна", "восьмиюрідна", "дев'ятиюрідна",
"десятиюрідна", "одинадцятиюрідна", "дванадцятиюрідна",
"тринадцятиюрідна", "чотирнадцятиюрідна", "п'ятнадцятиюрідна",
"шістнадцятиюрідна", "сімнадцятиюрідна", "вісімнадцятиюрідна",
"дев'ятнадцятиюрідна", "двадцятиюрідна"
]
_son_level = [
"",
"син",
"внук",
"правнук",
"праправнук",
]
_daughter_level = [
"",
"дочка",
"онука",
"правнучка",
"праправнучка",
]
_father_level = [
"",
"батько",
"дід",
"прадід",
"прапрадід",
]
_mother_level = [
"",
"мати",
"баба",
"прабаба",
"прапрабаба",
]
_uncle_level = [
"",
"брат", # not used, just for keep count
"дядько",
"дід",
"прадід",
"прапрадід",
]
_aunt_level = [
"",
"сестра", # not used, just for keep count
"тітка",
"баба",
"прабаба",
"прапрабаба",
]
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
class RelationshipCalculator(Relationship.RelationshipCalculator):
"""
RelationshipCalculator Class
"""
def __init__(self):
Relationship.RelationshipCalculator.__init__(self)
def get_sword_distaff(self, level, reltocommon, gender = gen.lib.Person.UNKNOWN):
"""
Generate relationships 'by male line' or 'by female line',
specific for Ukraine
"""
if level <= 1:
return ""
# test the relation line
by_line = ''
for g in reltocommon:
if(by_line and by_line != g):
by_line = ''
break
by_line = g
if by_line == self.REL_FATHER and gender == gen.lib.Person.MALE:
# by male line
return " по чоловічій лінії"
elif by_line == self.REL_MOTHER and gender == gen.lib.Person.FEMALE:
# by male line
return " по жіночій лінії"
elif reltocommon[0] == self.REL_FATHER:
# From father's side
return " по батькові"
elif reltocommon[0] == self.REL_MOTHER:
# From mother's side
return " по матері"
else:
return ""
def get_son(self, level, inlaw=''):
"""
Provides information how much male descendant is related to this person
"""
# Define if the person is natural relative or in law
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if level >= 0 and level < len(_son_level):
return t_inlaw +_son_level[level]
else:
return t_inlaw + "пра(пра)внук у %d поколінні" % (level + 1)
def get_daughter(self, level, inlaw=''):
"""
Provides information how much female descendant is related to this person
"""
# Define if the person is natural relative or in law
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названа "
if level >= 0 and level < len(_daughter_level):
return t_inlaw + _daughter_level[level]
else:
return t_inlaw + "пра(пра)внучка у %d поколінні" % (level + 1)
def get_child_unknown(self, level, inlaw=''):
"""
Provides information how much descendant of unknown gender is related to this person
"""
# Define if the person is natural relative or in law
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий(на) "
if level == 1:
return t_inlaw + "внук(а)"
else:
return t_inlaw + "пра(пра)внук(а) у %d поколінні" % (level + 1)
def get_father(self, level, reltocommon, inlaw=''):
"""
Provides information how much male ancestor (for example father)
is related to the given person
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if level >= 0 and level < len(_father_level):
# If you know exact name of relationship - use it
if level == 1:
# Father
return t_inlaw + _father_level[level]
else:
# Grandfather, Greatgrandfather, Greatgreatgrandfather
return t_inlaw + _father_level[level] \
+ self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
else:
# For deep generations
return t_inlaw + "пра(пра)дід у %d поколінні" % (level + 1) \
+ self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
def get_mother(self, level, reltocommon, inlaw=''):
"""
Provides information how much female ancestor (for example mother)
is related to the given person
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названа "
if level >= 0 and level < len(_mother_level):
# If you know exact name of relationship - use it
if level == 1:
# Mother
return t_inlaw + _mother_level[level]
else:
# Grandmother, Greatgrandmother, Greatgreatgrandmother
return t_inlaw + _mother_level[level] \
+ self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
else:
# For deep generations
return t_inlaw + "пра(пра)баба у %d поколінні" % (level + 1) \
+ self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
def get_parent_unknown(self, level, reltocommon, inlaw=''):
"""
Provides information how much an ancestor of unknown gender
is related to the given person (unknown sex)
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if level == 1:
return t_inlaw + "батько/мати"
else:
return t_inlaw + "пра(пра)- дід/баба у %d поколінні" % (level + 1) \
+ self.get_sword_distaff(level, reltocommon)
def get_uncle(self, level, reltocommon, inlaw = ''):
"""
Return ancle generation name
"""
if reltocommon[0] == self.REL_FATHER:
# from Father
if level < len(_uncle_level):
if level == 2:
return _uncle_level[level] + " (стрийко)"
else:
return "двоюрідний " + _uncle_level[level] \
+ " по батькові"
else:
return "двоюрідний пра(пра)дід в %d поколінні по батькові" % (level)
elif reltocommon[0] == self.REL_MOTHER:
# from Mother
if level < len(_uncle_level):
if level == 2:
return _uncle_level[level] + " (вуйко)"
else:
return "двоюрідний " + _uncle_level[level] \
+ " по матері"
else:
return "двоюрідний пра(пра)дід в %d поколінні по матері" % (level)
else:
if level == 2:
return "дядько (стрийко/вуйко)"
else:
return "двоюрідний пра(пра)дід в %d поколінні" % (level)
def get_aunt(self, level, reltocommon, inlaw = ''):
"""
Return aunt generation name
"""
if reltocommon[0] == self.REL_FATHER:
# from Father
if level < len(_aunt_level):
if level == 2:
return _aunt_level[level] + " (стрийна)"
else:
return "двоюрідна " + _aunt_level[level] \
+ " по батькові"
else:
return "двоюрідна пра(пра)баба в %d поколінні по батькові" \
% (level)
elif reltocommon[0] == self.REL_MOTHER:
# from Mother
if level < len(_aunt_level):
if level == 2:
return _aunt_level[level] + " (вуйна)"
else:
return "двоюрідна " + _aunt_level[level] \
+ " по матері"
else:
return "двоюрідна пра(пра)баба в %d поколінні по матері" \
% (level)
else:
if level == 2:
return "тітка (стрийна/вуйна)"
else:
return "двоюрідна пра(пра)баба в %d поколінні" % (level)
def get_uncle_aunt_unknown(self, level, reltocommon, inlaw = ''):
"""
Return uncle/aunt generation name when gender unknown
"""
if reltocommon[0] == self.REL_FATHER:
# from Father
if level == 2:
return "дядько/тітка (стрийко)"
else:
return "двоюрідний дід/баба в %d поколінні по батькові" \
% (level)
elif reltocommon[0] == self.REL_MOTHER:
# from Mother
if level == 2:
return "дядько/тітка (вуйко)"
else:
return "двоюрідний дід/баба в %d поколінні по матері" \
% (level)
else:
if level == 2:
return "дядько/тітка"
else:
return "двоюрідний дід/баба в %d поколінні" % (level)
def get_nephew(self, level, reltocommon, inlaw = ''):
"""
Return nephew generation name
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if level == 2:
if reltocommon[0] == self.REL_FATHER :
# Brother's son
return t_inlaw + "небіж (братанець)"
elif reltocommon[0] == self.REL_MOTHER :
# Sister's son
return t_inlaw + "небіж (сестринець)"
else:
return t_inlaw + "небіж (братанець/сестринець)"
elif level >= 2 and level <=6:
if reltocommon[level-2] == self.REL_FATHER :
# Brother's son generation
if reltocommon[level-3] == self.REL_FATHER :
# Son of brother son
return self.get_son((level - 2), inlaw) \
+ " небожа по брату"
elif reltocommon[level-3] == self.REL_MOTHER :
# Son of brother daughter
return self.get_son((level - 2), inlaw) \
+ " небоги по брату"
else:
return self.get_son((level - 2), inlaw) \
+ " небожа/небоги по брату"
elif reltocommon[level-2] == self.REL_MOTHER :
# Sister's son generation
if reltocommon[level-3] == self.REL_FATHER :
# Son of sister son
return self.get_son((level - 2), inlaw) \
+ " небожа по сестрі"
elif reltocommon[level-3] == self.REL_MOTHER :
# Son of sister daughter
return self.get_son((level - 2), inlaw) \
+ " небоги по сестрі"
else:
return self.get_son((level - 2), inlaw) \
+ " небожа/небоги по сестрі"
else:
return self.get_son((level - 2), inlaw) + " небожа/небоги"
else:
if reltocommon[level-2] == self.REL_FATHER :
# Brother's son generation
return t_inlaw + "чоловічий нащадок у %d поколінні брата" \
% (level)
elif reltocommon[level-2] == self.REL_MOTHER :
# Sister's son generation
return t_inlaw + "чоловічий нащадок у %d поколінні сестри" \
% (level)
else:
return t_inlaw + "чоловічий нащадок у %d поколінні брата/сестри" \
% (level)
def get_niece(self, level, reltocommon, inlaw = ''):
"""
Return niece generation name
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if level == 2:
if reltocommon[0] == self.REL_FATHER :
# Brother's daughter
return t_inlaw + "небога (братанка)"
elif reltocommon[0] == self.REL_MOTHER :
# Sister's daughter
return t_inlaw + "небога (сестрениця)"
else:
return t_inlaw + "небога (братанка/сестрениця)"
elif level >= 2 and level <=6:
if reltocommon[level-2] == self.REL_FATHER :
# Brother's daughter generation
if reltocommon[level-3] == self.REL_FATHER :
# daughter of brother son
return self.get_daughter((level - 2), inlaw) \
+ " небожа по брату"
elif reltocommon[level-3] == self.REL_MOTHER :
# daughter of brother daughter
return self.get_daughter((level - 2), inlaw) \
+ " небоги по брату"
else:
return self.get_daughter((level - 2), inlaw) \
+ " небожа/небоги по брату"
elif reltocommon[level-2] == self.REL_MOTHER :
# Sister's daughter generation
if reltocommon[level-3] == self.REL_FATHER :
# daughter of sister son
return self.get_daughter((level - 2), inlaw) \
+ " небожа по сестрі"
elif reltocommon[level-3] == self.REL_MOTHER :
# daughter of sister daughter
return self.get_daughter((level - 2), inlaw) \
+ " небоги по сестрі"
else:
return self.get_daughter((level - 2), inlaw) \
+ " небожа/небоги по сестрі"
else:
return self.get_daughter(level, inlaw) + " небожа/небоги"
else:
if reltocommon[level-2] == self.REL_FATHER :
# Brother's daughter generation
return t_inlaw + "жіночий нащадок у %d поколінні брата" \
% (level)
elif reltocommon[level-2] == self.REL_MOTHER :
# Sister's daughter generation
return t_inlaw + "жіночий нащадок у %d поколінні сестри" \
% (level)
else:
return t_inlaw + "жіночий нащадок у %d поколінні брата/сестри" \
% (level)
def get_nephew_niece_unknown (self, level, reltocommon, inlaw = ''):
"""
Return nephew/niece generation name when gender unknown
"""
if inlaw == '':
t_inlaw = ""
else:
t_inlaw = "названий "
if reltocommon[level-2] == self.REL_FATHER:
# Brother's descendant
return t_inlaw + "нащадок в %d поколінні брата" % (level)
elif (reltocommon[level-2] == self.REL_MOTHER):
# Sister's descendant
return t_inlaw + "нащадок в %d поколінні сестри" % (level)
else :
return t_inlaw + "нащадок в %d поколінні брата aбо сестри" \
% (level)
def get_level(self, level, gender):
"""
Return level name depend of gender
"""
if (gender == gen.lib.Person.MALE):
if level < len(_level_name_male):
return _level_name_male[level]
else:
return "%d-юрідний" % level
elif (gender == gen.lib.Person.FEMALE):
if level < len(_level_name_female):
return _level_name_female[level]
else:
return "%d-юрідна" % level
else:
if level < len(_level_name):
return _level_name[level]
else:
return "%d-юрідний(на)" % level
def get_single_relationship_string(self, Ga, Gb, gender_a, gender_b,
reltocommon_a, reltocommon_b,
only_birth=True,
in_law_a=False, in_law_b=False):
"""
Provide a string that describes the relationsip between a person, and
another person. E.g. "grandparent" or "child".
Ga: The number of generations between the main person and the
common ancestor. (кількість поколінь між прямими родичами особи:
сини, батьки, бабусі...)
Gb: The number of generations between the other person and the
common ancestor. (кількість поколінь між іншою особою
і спільним предком)
gender_a : gender of person a
gender_b : gender of person b
reltocommon_a : relation path to common ancestor or common
Family for person a.
Note that length = Ga
reltocommon_b : relation path to common ancestor or common
Family for person b.
Note that length = Gb
in_law_a : True if path to common ancestors is via the partner
of person a
in_law_b : True if path to common ancestors is via the partner
of person b
only_birth : True if relation between a and b is by birth only
False otherwise
more see in relationship.py get_single_relationship_string()
"""
if only_birth:
step = ''
else:
step = self.STEP
if in_law_a or in_law_b :
inlaw = self.INLAW
else:
inlaw = ''
t_inlaw = ""
# b is the same person as a
if Ga == Gb == 0:
rel_str = 'та сама особа'
elif Ga == 0:
# b is son/descendant of a
if gender_b == gen.lib.Person.MALE:
if inlaw and Gb == 1 and not step:
rel_str = "зять"
else:
rel_str = self.get_son(Gb, inlaw)
elif gender_b == gen.lib.Person.FEMALE:
if inlaw and Gb == 1 and not step:
rel_str = "невістка"
else:
rel_str = self.get_daughter(Gb, inlaw)
else:
rel_str = self.get_child_unknown(Gb, inlaw)
elif Gb == 0:
# b is parent/grand parent of a
if gender_b == gen.lib.Person.MALE:
if inlaw and Gb == 1 and not step:
rel_str = "тесть"
else:
rel_str = self.get_father(Ga, reltocommon_a, inlaw)
elif gender_b == gen.lib.Person.FEMALE:
if inlaw and Gb == 1 and not step:
rel_str = "теща"
else:
rel_str = self.get_mother(Ga, reltocommon_a, inlaw)
else:
rel_str = self.get_parent_unknown(Ga, reltocommon_a, inlaw)
elif Ga == Gb == 1:
# Family, brother/sister
# not used, leave it just in case
# because should be handled
# by get_sibling_relationship_string
# that called in parent RelationshipCalculator
# see Relationship.py
if gender_b == gen.lib.Person.MALE:
if inlaw and not step:
rel_str = "рідний брат"
else:
rel_str = "напів рідний брат"
elif gender_b == gen.lib.Person.FEMALE:
if inlaw and not step:
rel_str = "рідна сестра"
else:
rel_str = "напів рідна сестра"
else:
rel_str = "брат/сестра"
elif Gb == 1 and Ga > 1:
# b is aunt/uncle of a
if (gender_b == gen.lib.Person.MALE):
rel_str = self.get_uncle(Ga, reltocommon_a, inlaw)
elif (gender_b == gen.lib.Person.FEMALE):
rel_str = self.get_aunt(Ga, reltocommon_a, inlaw)
else:
rel_str = self.get_uncle_aunt_unknown(Ga, reltocommon_a, inlaw)
elif Ga == 1 and Gb > 1:
# b is niece/nephew of a
if (gender_b == gen.lib.Person.MALE):
rel_str = self.get_nephew(Gb, reltocommon_b, inlaw)
elif (gender_b == gen.lib.Person.FEMALE):
rel_str = self.get_niece(Gb, reltocommon_b, inlaw)
else:
rel_str = self.get_nephew_niece_unknown(Gb, reltocommon_b, inlaw)
elif Ga > 1 and Gb > 1:
# b is (cousin/far aunt/far uncle/far niece/far nephew) of a
if Ga > Gb:
# b is far aunt/far uncle of a
level = Ga - Gb + 1
if level >= 3:#it is right or???
level_name = self.get_level(Gb + 1, gender_b)
else:
level_name = self.get_level(Gb, gender_b)
if (gender_b == gen.lib.Person.MALE):
# b is far uncle
if inlaw != '':
t_inlaw = "названий "
if level < len(_uncle_level):
rel_str = t_inlaw + "%s %s" \
% (level_name, _uncle_level[level])
else:
rel_str = t_inlaw + "%s пра(пра)дід в %d поколінні" \
% (level_name, (level))
elif (gender_b == gen.lib.Person.FEMALE):
# b is far aunt
if inlaw != '':
t_inlaw = "названа "
if level < len(_aunt_level):
rel_str = t_inlaw + "%s %s" \
% (level_name, _aunt_level[level])
else:
rel_str = t_inlaw + "%s пра(пра)баба в %d поколінні" \
% (level_name, (level))
else:
if inlaw != '':
t_inlaw = "названий(на) "
if level == 2:
rel_str = t_inlaw + "%s дядько/тітка" % level_name
else:
rel_str = t_inlaw + "%s пра(пра)- дід/баба в %d поколінні" \
% (level_name, (level))
elif Ga < Gb:
# b is far niece/far nephew of a
level_name = self.get_level(Ga, gender_b)
level = Gb - Ga + 1
if (gender_b == gen.lib.Person.MALE):
# b is far nephew
if level == 2:
rel_str = "%s небіж" % level_name
else:
rel_str = "%s пра(пра)внук у %d поколінні" \
% (level_name, level)
#rel_str = "%s %s" % (level_name, self.get_nephew(level, reltocommon_b, inlaw))
elif (gender_b == gen.lib.Person.FEMALE):
# b is far niece
if level == 2:
rel_str = "%s небога" % level_name
else:
rel_str = "%s пра(пра)внучка у %d поколінні" \
% (level_name, level)
#rel_str = "%s %s" % (level_name, self.get_niece(level, reltocommon_b, inlaw))
else:
rel_str = "%s пра(пра)внук(а) у %d поколінні" % level
#rel_str = "%s %s" % (level_name, self.get_nephew_niece_unknown(level, reltocommon_b, inlaw))
else: #Gb == Ga
# b is cousin of a
level_name = self.get_level(Ga, gender_b)
if (gender_b == gen.lib.Person.MALE):
if inlaw != '':
t_inlaw = "названий "
rel_str = t_inlaw + "%s брат" % level_name
elif (gender_b == gen.lib.Person.FEMALE):
if inlaw != '':
t_inlaw = "названа "
rel_str = t_inlaw + "%s сестра" % level_name
else:
if inlaw != '':
t_inlaw = "названий(на) "
rel_str = t_inlaw + "%s брат/сестра" % level_name
else:
# A program should never goes there, but...
rel_str = "невизначений ступінь спорідненості"
return rel_str
def get_plural_relationship_string(self, Ga, Gb,
reltocommon_a='', reltocommon_b='',
only_birth=True,
in_law_a=False, in_law_b=False):
"""
Generate a text with information, how far away is a group of persons
from a main person
"""
if Ga == Gb == 0:
return 'та сама особа'
if 0 == Ga:
# These are descendants
if 1 == Gb:
return 'діти'
if 2 == Gb:
return 'внуки'
if 3 == Gb:
return 'правнуки'
if 4 == Gb:
return 'праправнуки'
return 'прапрапра(n)внуки'
if 0 == Gb:
# These are parents/grand parents
if 1 == Ga:
return 'батьки'
if 2 == Ga:
return 'діди/баби'
if 3 == Ga:
return 'прадіди/прабаби'
if 4 == Ga:
return 'прапращури'
return 'прапрапра(n)щури'
if 1 == Ga == Gb:
return 'батьки'
if 1 == Gb and Ga > 1:
return 'дядьки (вуйки, стрийки) і тітки'
if 1 < Gb and 1 == Ga:
return 'небожі по братові і сестрі'
if 1 < Ga and 1 < Gb:
return 'дальня родина'
return 'відносини невідомі'
def get_sibling_relationship_string(self, sib_type, gender_a, gender_b,
in_law_a=False, in_law_b=False):
if in_law_a or in_law_b :
inlaw = self.INLAW
else:
inlaw = ''
if sib_type == self.NORM_SIB:
if not inlaw:
if gender_b == gen.lib.Person.MALE:
rel_str = 'рідний брат'
elif gender_b == gen.lib.Person.FEMALE:
rel_str = 'рідна сестра'
else:
rel_str = 'рідний(а) брат або сестра'
else:
if gender_b == gen.lib.Person.MALE:
rel_str = "названий брат"
elif gender_b == gen.lib.Person.FEMALE:
rel_str = "названа сестра"
else:
rel_str = "названий(а) брат або сестра"
elif sib_type == self.UNKNOWN_SIB:
if not inlaw:
if gender_b == gen.lib.Person.MALE:
rel_str = 'брат'
elif gender_b == gen.lib.Person.FEMALE:
rel_str = 'сестра'
else:
rel_str = 'брат або сестра'
else:
if gender_b == gen.lib.Person.MALE:
rel_str = "швагро"
elif gender_b == gen.lib.Person.FEMALE:
rel_str = "братова"
else:
rel_str = "швагро або братова"
elif sib_type == self.HALF_SIB_FATHER:
if gender_b == gen.lib.Person.MALE:
rel_str = "єдинокровний(напіврідний) брат"
elif gender_b == gen.lib.Person.FEMALE:
rel_str = "єдинокровна(напіврідна) сестра"
else:
rel_str = "напіврідний(а) брат/сестра"
elif sib_type == self.HALF_SIB_MOTHER:
if gender_b == gen.lib.Person.MALE:
rel_str = "єдинокровний(напіврідний) брат"
elif gender_b == gen.lib.Person.FEMALE:
rel_str = "єдинокровна(напіврідна) сестра"
else:
rel_str = "напіврідний(а) брат/сестра"
elif sib_type == self.STEP_SIB:
if gender_b == gen.lib.Person.MALE:
rel_str = "зведений брат"
elif gender_b == gen.lib.Person.FEMALE:
rel_str = "зведена сестра"
else:
rel_str = "зведений брат або сестра"
else:
rel_str = "невизначена ступінь родинних відносин"
return rel_str
if __name__ == "__main__":
# Test function. Call it as follows from the command line (so as to find
# imported modules):
# export PYTHONPATH=/path/to/gramps/src
# python src/plugins/rel/rel_pl.py
"""
TRANSLATORS, copy this if statement at the bottom of your
rel_xx.py module, and test your work with:
python src/plugins/rel/rel_xx.py
"""
from Relationship import test
import signal
import sys
# If someone go out
def goodby(signal, frame):
print 'No more Drink!'
sys.exit(0)
signal.signal(signal.SIGINT, goodby)
# Run test
RC = RelationshipCalculator()
test(RC, True)

View File

@ -294,3 +294,19 @@ plg.relcalcclass = 'RelationshipCalculator'
plg.lang_list = ["sv", "SV", "sv_SE", "swedish", "Swedish", "sv_SE.UTF8", plg.lang_list = ["sv", "SV", "sv_SE", "swedish", "Swedish", "sv_SE.UTF8",
"sv_SE@euro", "sv_SE.UTF8@euro", "svenska", "Svenska", "sv_SE@euro", "sv_SE.UTF8@euro", "svenska", "Svenska",
"sv_SE.UTF-8", "sv_SE.utf-8", "sv_SE.utf8", "Swedish_Sweden"] "sv_SE.UTF-8", "sv_SE.utf-8", "sv_SE.utf8", "Swedish_Sweden"]
# uk
plg = newplugin()
plg.id = 'relcalc_uk'
plg.name = _("Ukrainian Relationship Calculator")
plg.description = _("Calculates relationships between people")
plg.version = '1.0'
plg.gramps_target_version = '3.4'
plg.status = STABLE
plg.fname = 'rel_uk.py'
plg.ptype = RELCALC
plg.relcalcclass = 'RelationshipCalculator'
plg.lang_list = ["uk", "UA", "uk_UA", "ukrainian",
"Ukrainian", "uk_UA.utf8",
"uk_UA.UTF8", "uk_UA.utf-8", "uk_UA.UTF-8", "uk_UA.iso88595",
"uk_UA.iso8859-5", "uk_UA.iso-8859-5", "koi8u", "uk_koi8u",
"uk_UA.koi8u","uk_UA.KOI8-U",]