diff --git a/src/plugins/lib/holidays.xml.in b/src/plugins/lib/holidays.xml.in
index 30d57d46c..619e0291f 100644
--- a/src/plugins/lib/holidays.xml.in
+++ b/src/plugins/lib/holidays.xml.in
@@ -499,4 +499,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/plugins/rel/Makefile.am b/src/plugins/rel/Makefile.am
index e0ab4b281..28ec57f0b 100644
--- a/src/plugins/rel/Makefile.am
+++ b/src/plugins/rel/Makefile.am
@@ -25,7 +25,8 @@ pkgpython_PYTHON = \
rel_ru.py\
rel_sk.py\
rel_sl.py\
- rel_sv.py
+ rel_sv.py\
+ rel_uk.py
pkgpyexecdir = @pkgpyexecdir@/plugins/rel
pkgpythondir = $(datadir)/@PACKAGE@/plugins/rel
diff --git a/src/plugins/rel/rel_uk.py b/src/plugins/rel/rel_uk.py
new file mode 100644
index 000000000..5f848e28b
--- /dev/null
+++ b/src/plugins/rel/rel_uk.py
@@ -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
+# Copyright (C) 2013 Fedir Zinchuk
+#
+# 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)
+
diff --git a/src/plugins/rel/relplugins.gpr.py b/src/plugins/rel/relplugins.gpr.py
index af5489d5a..d8ce442d2 100644
--- a/src/plugins/rel/relplugins.gpr.py
+++ b/src/plugins/rel/relplugins.gpr.py
@@ -294,3 +294,19 @@ plg.relcalcclass = 'RelationshipCalculator'
plg.lang_list = ["sv", "SV", "sv_SE", "swedish", "Swedish", "sv_SE.UTF8",
"sv_SE@euro", "sv_SE.UTF8@euro", "svenska", "Svenska",
"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",]