Merge with Gramps50 branch
This commit is contained in:
commit
67c8fd18cb
@ -1,12 +1,12 @@
|
||||
0 HEAD
|
||||
1 SOUR Gramps
|
||||
2 VERS 5.0.1
|
||||
2 VERS 5.0.2
|
||||
2 NAME Gramps
|
||||
1 DATE 7 NOV 2018
|
||||
2 TIME 16:03:33
|
||||
1 DATE 5 MAR 2019
|
||||
2 TIME 09:11:15
|
||||
1 SUBM @SUBM@
|
||||
1 FILE C:\Users\prc\AppData\Roaming\gramps\temp\exp_sample_ged.ged
|
||||
1 COPR Copyright (c) 2018 Alex Roitman,,,.
|
||||
1 COPR Copyright (c) 2019 Alex Roitman,,,.
|
||||
1 GEDC
|
||||
2 VERS 5.5.1
|
||||
2 FORM LINEAGE-LINKED
|
||||
@ -1420,8 +1420,8 @@
|
||||
0 @N0018@ NOTE Another Citation Note
|
||||
0 @N0019@ NOTE A bad photo for sure
|
||||
0 @O0000@ OBJE
|
||||
1 FILE c:\users\prc\workspace\grampsm\main\data\tests\O0.jpg
|
||||
2 FORM jpeg
|
||||
1 FILE c:\msys64\mingw64\share\gramps\tests\O0.jpg
|
||||
2 FORM jpg
|
||||
2 TITL Michael O'Toole 2015-11
|
||||
1 NOTE @N0019@
|
||||
1 CHAN
|
||||
|
@ -3,41 +3,41 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2016-08-29" version="5.0.0-alpha1"/>
|
||||
<created date="2019-03-13" version="5.0.2"/>
|
||||
<researcher>
|
||||
</researcher>
|
||||
</header>
|
||||
<events>
|
||||
<event handle="_0000000500000005" change="1472500305" id="E0000">
|
||||
<event handle="_0000000500000005" change="1" id="E0000">
|
||||
<type>Birth</type>
|
||||
<dateval val="1816"/>
|
||||
<place hlink="_0000000700000007"/>
|
||||
<citationref hlink="_0000000600000006"/>
|
||||
</event>
|
||||
<event handle="_0000000800000008" change="1472500305" id="E0001">
|
||||
<event handle="_0000000800000008" change="1" id="E0001">
|
||||
<type>Residence</type>
|
||||
<dateval val="1850"/>
|
||||
<place hlink="_0000000a0000000a"/>
|
||||
<citationref hlink="_0000000900000009"/>
|
||||
</event>
|
||||
<event handle="_0000000b0000000b" change="1472500305" id="E0002">
|
||||
<event handle="_0000000b0000000b" change="1" id="E0002">
|
||||
<type>Death</type>
|
||||
<datestr val="1850/1860"/>
|
||||
<place hlink="_0000000c0000000c"/>
|
||||
</event>
|
||||
<event handle="_0000000f0000000f" change="1472500305" id="E0003">
|
||||
<event handle="_0000000f0000000f" change="1" id="E0003">
|
||||
<type>Marriage</type>
|
||||
<dateval val="1841" type="about"/>
|
||||
<place hlink="_0000001000000010"/>
|
||||
</event>
|
||||
<event handle="_0000001100000011" change="1472500305" id="E0004">
|
||||
<event handle="_0000001100000011" change="1" id="E0004">
|
||||
<type>Marriage</type>
|
||||
<dateval val="1847-08"/>
|
||||
<place hlink="_0000001200000012"/>
|
||||
</event>
|
||||
</events>
|
||||
<people>
|
||||
<person handle="_0000000100000001" change="1472500305" id="I0278">
|
||||
<person handle="_0000000100000001" change="1" id="I0278">
|
||||
<gender>M</gender>
|
||||
<name type="Birth Name">
|
||||
<first>Andrew</first>
|
||||
@ -54,13 +54,13 @@
|
||||
</person>
|
||||
</people>
|
||||
<families>
|
||||
<family handle="_0000000d0000000d" change="1472500305" id="F0073">
|
||||
<family handle="_0000000d0000000d" change="1" id="F0073">
|
||||
<rel type="Married"/>
|
||||
<father hlink="_0000000100000001"/>
|
||||
<eventref hlink="_0000000f0000000f" role="Family"/>
|
||||
<childref hlink="_0000000100000001"/>
|
||||
</family>
|
||||
<family handle="_0000000e0000000e" change="1472500305" id="F0074">
|
||||
<family handle="_0000000e0000000e" change="1" id="F0074">
|
||||
<rel type="Married"/>
|
||||
<father hlink="_0000000100000001"/>
|
||||
<eventref hlink="_0000001100000011" role="Family"/>
|
||||
@ -68,19 +68,19 @@
|
||||
</family>
|
||||
</families>
|
||||
<citations>
|
||||
<citation handle="_0000000400000004" change="1472500305" id="C0000">
|
||||
<citation handle="_0000000400000004" change="1" id="C0000">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
<sourceref hlink="_0000000200000002"/>
|
||||
</citation>
|
||||
<citation handle="_0000000600000006" change="1472500305" id="C0001">
|
||||
<citation handle="_0000000600000006" change="1" id="C0001">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
<sourceref hlink="_0000000200000002"/>
|
||||
</citation>
|
||||
<citation handle="_0000000900000009" change="1472500305" id="C0002">
|
||||
<citation handle="_0000000900000009" change="1" id="C0002">
|
||||
<page>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248</page>
|
||||
<confidence>2</confidence>
|
||||
<objref hlink="_0000000300000003"/>
|
||||
@ -88,7 +88,7 @@
|
||||
</citation>
|
||||
</citations>
|
||||
<sources>
|
||||
<source handle="_0000000200000002" change="1472500305" id="S0029">
|
||||
<source handle="_0000000200000002" change="1" id="S0029">
|
||||
<stitle>1850 United States Federal Census</stitle>
|
||||
<sauthor>Ancestry.com</sauthor>
|
||||
<spubinfo>Name: Ancestry.com Operations, Inc.; Location: Provo, UT, USA; Date: 2009;</spubinfo>
|
||||
@ -96,42 +96,43 @@
|
||||
</source>
|
||||
</sources>
|
||||
<places>
|
||||
<placeobj handle="_0000000700000007" change="1472500305" id="P0000" type="Unknown">
|
||||
<placeobj handle="_0000000700000007" change="1" id="P0000" type="Unknown">
|
||||
<ptitle>Tennessee, USA</ptitle>
|
||||
<pname value="Tennessee, USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000000a0000000a" change="1472500305" id="P0001" type="Unknown">
|
||||
<placeobj handle="_0000000a0000000a" change="1" id="P0001" type="Unknown">
|
||||
<ptitle>District 14, Cape Girardeau, Missouri, USA</ptitle>
|
||||
<pname value="District 14, Cape Girardeau, Missouri, USA"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000000c0000000c" change="1472500305" id="P0002" type="Unknown">
|
||||
<placeobj handle="_0000000c0000000c" change="1" id="P0002" type="Unknown">
|
||||
<ptitle>Bollinger Co. MO</ptitle>
|
||||
<pname value="Bollinger Co. MO"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001000000010" change="1472500305" id="P0003" type="Unknown">
|
||||
<placeobj handle="_0000001000000010" change="1" id="P0003" type="Unknown">
|
||||
<ptitle>Union Co.?, IL</ptitle>
|
||||
<pname value="Union Co.?, IL"/>
|
||||
</placeobj>
|
||||
<placeobj handle="_0000001200000012" change="1472500305" id="P0004" type="Unknown">
|
||||
<placeobj handle="_0000001200000012" change="1" id="P0004" type="Unknown">
|
||||
<ptitle>Wayne, Missouri, United States</ptitle>
|
||||
<pname value="Wayne, Missouri, United States"/>
|
||||
</placeobj>
|
||||
</places>
|
||||
<objects>
|
||||
<object handle="_0000000300000003" change="1472500305" id="M159">
|
||||
<object handle="_0000000300000003" change="1" id="M159">
|
||||
<file src="1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="1850 United States Federal Census"/>
|
||||
<noteref hlink="_0000001400000014"/>
|
||||
<noteref hlink="_0000001500000015"/>
|
||||
</object>
|
||||
<object handle="_0000001600000016" change="1472500305" id="M158">
|
||||
<file src="D:/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="D:\Users\PRC\Downloads\1850 United States Federal Census(11)-1.jpg"/>
|
||||
<object handle="_0000001600000016" change="1" id="M158">
|
||||
<file src="/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg" mime="image/jpeg" description="/Users/PRC/Downloads/1850 United States Federal Census(11)-1.jpg"/>
|
||||
<noteref hlink="_0000001700000017"/>
|
||||
</object>
|
||||
<object handle="_0000001700000017" change="1472500305" id="M157">
|
||||
<object handle="_0000001800000018" change="1" id="M157">
|
||||
<file src="http://1.gravatar.com/avatar/77e02a3c8c665155ad1acaac8c2742e0?s=120&d=mm&r=pg" mime="unknown" description="http://1.gravatar.com/avatar/77e02a3c8c665155ad1acaac8c2742e0?s=120&d=mm&r=pg"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
<repository handle="_0000001300000013" change="1472500305" id="R0001">
|
||||
<repository handle="_0000001300000013" change="1" id="R0001">
|
||||
<rname>Ancestry.com</rname>
|
||||
<type>Library</type>
|
||||
<address>
|
||||
@ -140,16 +141,26 @@
|
||||
</repository>
|
||||
</repositories>
|
||||
<notes>
|
||||
<note handle="_0000001400000014" change="1472500305" id="N0000" type="Media Note">
|
||||
<note handle="_0000001400000014" change="1" id="N0000" type="Media Note">
|
||||
<text>Year: 1850; Census Place: District 14, Cape Girardeau, Missouri; Roll: M432_394; Page: 435B; Image: 248 </text>
|
||||
</note>
|
||||
<note handle="_0000001500000015" change="1472500305" id="N0001" type="GEDCOM import">
|
||||
<note handle="_0000001500000015" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into OBJE (multi-media object) Gramps ID M159:
|
||||
|
||||
Could not import 1850 United States Federal Census(11)-1.jpg Line 70: 1 FILE 1850 United States Federal Census(11)-1.jpg</text>
|
||||
Could not import 1850 United States Federal Census(11)-1.jpg Line 70: 1 FILE 1850 United States Federal Census(11)-1.jpg
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="200"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_0000001700000017" change="1" id="N0002" type="GEDCOM import">
|
||||
<text>Records not imported into OBJE (multi-media object) Gramps ID M158:
|
||||
|
||||
Could not import D:\Users\PRC\Downloads\1850 United States Federa Line 75: 1 FILE D:\Users\PRC\Downloads\1850 United States Federal Census(11)-1.jpg
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="223"/>
|
||||
</style>
|
||||
</note>
|
||||
</notes>
|
||||
</database>
|
||||
|
@ -3,7 +3,7 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2017-05-30" version="5.0.0-alpha1"/>
|
||||
<created date="2019-03-05" version="5.0.2"/>
|
||||
<researcher>
|
||||
</researcher>
|
||||
</header>
|
||||
@ -66,9 +66,10 @@
|
||||
<object handle="_0000000300000003" change="1" id="O0000">
|
||||
<file src="test_emb_55.jpg" mime="image/jpeg" description="Multimedia link embedded form v5.5"/>
|
||||
<noteref hlink="_0000000200000002"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
</object>
|
||||
<object handle="_0000000400000004" change="548708291" id="M1">
|
||||
<file src="" mime="" description="Multimedia link to linked form v5.5 blob"/>
|
||||
<file src="" mime="image/jpeg" description="Multimedia link to linked form v5.5 blob"/>
|
||||
<attribute type="REFN" value="Ref12345M1">
|
||||
<noteref hlink="_0000001200000012"/>
|
||||
</attribute>
|
||||
@ -117,7 +118,7 @@
|
||||
<citationref hlink="_0000002700000027"/>
|
||||
</object>
|
||||
<object handle="_0000000c0000000c" change="1" id="O0002">
|
||||
<file src="http://www.geni.com/photo/view?photo_id=6000000001341319061" mime="unknown" description="Multimedia link embedded form v5.5 URL"/>
|
||||
<file src="http://www.geni.com/photo/view?photo_id=6000000001341319061" mime="text/html" description="Multimedia link embedded form v5.5 URL"/>
|
||||
<noteref hlink="_0000000b0000000b"/>
|
||||
</object>
|
||||
<object handle="_0000000d0000000d" change="1" id="M7">
|
||||
@ -129,7 +130,7 @@
|
||||
<noteref hlink="_0000002900000029"/>
|
||||
</object>
|
||||
<object handle="_0000001500000015" change="1" id="M2">
|
||||
<file src="" mime="" description="2nd blob Multimedia link to linked form v5.5 blob"/>
|
||||
<file src="" mime="image/jpeg" description="2nd blob Multimedia link to linked form v5.5 blob"/>
|
||||
<noteref hlink="_0000001600000016"/>
|
||||
</object>
|
||||
</objects>
|
||||
|
@ -3,7 +3,7 @@
|
||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||
<header>
|
||||
<created date="2016-10-24" version="5.0.0-alpha1"/>
|
||||
<created date="2019-03-05" version="5.0.2"/>
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
<resaddr>Not Provided</resaddr>
|
||||
@ -163,6 +163,7 @@
|
||||
</event>
|
||||
<event handle="_0000005500000055" change="1" id="E0026">
|
||||
<type>Birth</type>
|
||||
<description>No Date Information</description>
|
||||
</event>
|
||||
<event handle="_0000005600000056" change="1" id="E0027">
|
||||
<type>Death</type>
|
||||
@ -1456,13 +1457,13 @@
|
||||
<noteref hlink="_000000f9000000f9"/>
|
||||
</object>
|
||||
<object handle="_000000d1000000d1" change="1" id="O0001">
|
||||
<file src="Magnes&Anna_smiths_marr_cert.jpg" mime="unknown" description="Magnes&Anna_smiths_marr_cert.jpg"/>
|
||||
<file src="Magnes&Anna_smiths_marr_cert.jpg" mime="image/jpeg" description="Magnes&Anna_smiths_marr_cert.jpg"/>
|
||||
</object>
|
||||
<object handle="_000000d8000000d8" change="1" id="O0002">
|
||||
<file src="John&Alice_smiths_marr_cert.jpg" mime="unknown" description="John&Alice_smiths_marr_cert.jpg"/>
|
||||
<file src="John&Alice_smiths_marr_cert.jpg" mime="image/jpeg" description="John&Alice_smiths_marr_cert.jpg"/>
|
||||
</object>
|
||||
<object handle="_000000f1000000f1" change="1" id="O0003">
|
||||
<file src="Attic_photo.jpg" mime="unknown" description="Attic_photo.jpg"/>
|
||||
<file src="Attic_photo.jpg" mime="image/jpeg" description="Attic_photo.jpg"/>
|
||||
</object>
|
||||
</objects>
|
||||
<repositories>
|
||||
@ -1506,7 +1507,8 @@
|
||||
<note handle="_0000000100000001" change="1" id="N0000" type="GEDCOM import">
|
||||
<text>Records not imported into HEAD (header):
|
||||
|
||||
GEDCOM FORM not supported Line 14: 2 FORM NOT LINEAGE-LINKED</text>
|
||||
GEDCOM FORM not supported Line 14: 2 FORM NOT LINEAGE-LINKED
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="148"/>
|
||||
</style>
|
||||
@ -1514,7 +1516,8 @@ GEDCOM FORM not supported Line 14:
|
||||
<note handle="_0000000200000002" change="1" id="N0001" type="GEDCOM import">
|
||||
<text>Records not imported into SUBM (Submitter): (@SUBM@) Alex Roitman,,,:
|
||||
|
||||
Line ignored as not understood Line 23: 2 NOTE No address provided (note not supported)</text>
|
||||
Line ignored as not understood Line 23: 2 NOTE No address provided (note not supported)
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="199"/>
|
||||
</style>
|
||||
@ -1523,7 +1526,8 @@ Line ignored as not understood Line 23:
|
||||
<text>Records not imported into FAM (family) Gramps ID F0003:
|
||||
|
||||
Line ignored as not understood Line 46: 2 SOUR Not really allowed here
|
||||
Filename omitted Line 48: 1 OBJE</text>
|
||||
Filename omitted Line 48: 1 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="256"/>
|
||||
</style>
|
||||
@ -1562,7 +1566,8 @@ Filename omitted Line 48:
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0016:
|
||||
|
||||
Warn: ADDR overwritten Line 204: 3 ADR1 456 Main St again
|
||||
ADDR element ignored '459 Main St.' Line 202: 2 ADDR 459 Main St., The Village, San Francisco, CA, USA</text>
|
||||
ADDR element ignored '459 Main St.' Line 202: 2 ADDR 459 Main St., The Village, San Francisco, CA, USA
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="304"/>
|
||||
</style>
|
||||
@ -1573,7 +1578,8 @@ ADDR element ignored '459 Main St.' Line 202:
|
||||
<note handle="_0000004700000047" change="1" id="N0014" type="GEDCOM import">
|
||||
<text>Records not imported into INDI (individual) Gramps ID I0018:
|
||||
|
||||
Tag recognized but not supported Line 245: 2 TYPE first generaton</text>
|
||||
Tag recognized but not supported Line 245: 2 TYPE first generaton
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="165"/>
|
||||
</style>
|
||||
@ -1604,7 +1610,8 @@ Company. He enlisted in the army at Sparks 7 December 1917 and served as a Corpo
|
||||
<note handle="_000000cf000000cf" change="1" id="N0021" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0010:
|
||||
|
||||
Tag recognized but not supported Line 863: 2 _STAT</text>
|
||||
Tag recognized but not supported Line 863: 2 _STAT
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="146"/>
|
||||
</style>
|
||||
@ -1613,7 +1620,8 @@ Tag recognized but not supported Line 863:
|
||||
<text>Records not imported into FAM (family) Gramps ID F0011:
|
||||
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 878: 3 OBJE
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 881: 2 OBJE</text>
|
||||
Could not import Magnes&Anna_smiths_marr_cert.jpg Line 881: 2 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="233"/>
|
||||
</style>
|
||||
@ -1621,7 +1629,8 @@ Could not import Magnes&Anna_smiths_marr_cert.jpg Line 8
|
||||
<note handle="_000000d9000000d9" change="1" id="N0023" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0012:
|
||||
|
||||
Could not import John&Alice_smiths_marr_cert.jpg Line 905: 1 OBJE</text>
|
||||
Could not import John&Alice_smiths_marr_cert.jpg Line 905: 1 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="145"/>
|
||||
</style>
|
||||
@ -1629,7 +1638,8 @@ Could not import John&Alice_smiths_marr_cert.jpg Line 9
|
||||
<note handle="_000000e4000000e4" change="1" id="N0024" type="GEDCOM import">
|
||||
<text>Records not imported into FAM (family) Gramps ID F0008:
|
||||
|
||||
Tag recognized but not supported Line 1005: 1 ADDR 123 Main st, Grantville, Virginia, USA</text>
|
||||
Tag recognized but not supported Line 1005: 1 ADDR 123 Main st, Grantville, Virginia, USA
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="183"/>
|
||||
</style>
|
||||
@ -1653,7 +1663,8 @@ Tag recognized but not supported Line 1005:
|
||||
<text>Records not imported into SOUR (source) Gramps ID S0003:
|
||||
|
||||
Tag recognized but not supported Line 1045: 1 DATA
|
||||
Skipped subordinate line Line 1046: 2 AGNC NYC Public Library</text>
|
||||
Skipped subordinate line Line 1046: 2 AGNC NYC Public Library
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="252"/>
|
||||
</style>
|
||||
@ -1669,7 +1680,8 @@ Skipped subordinate line Line 1046:
|
||||
|
||||
REFN ignored Line 1075: 3 REFN blah blah
|
||||
Skipped subordinate line Line 1076: 4 TYPE who knows
|
||||
Could not import Attic_photo.jpg Line 1079: 3 OBJE</text>
|
||||
Could not import Attic_photo.jpg Line 1079: 3 OBJE
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="344"/>
|
||||
</style>
|
||||
@ -1677,7 +1689,8 @@ Could not import Attic_photo.jpg Line 1079:
|
||||
<note handle="_000000f6000000f6" change="1" id="N0034" type="GEDCOM import">
|
||||
<text>Records not imported into Top Level:
|
||||
|
||||
Unknown tag Line 1106: 0 XXX an unknown token at level 0</text>
|
||||
Unknown tag Line 1106: 0 XXX an unknown token at level 0
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="152"/>
|
||||
</style>
|
||||
@ -1685,12 +1698,13 @@ Unknown tag Line 1106:
|
||||
<note handle="_000000f8000000f8" change="1" id="N0035" type="GEDCOM import">
|
||||
<text>Records not imported into Top Level:
|
||||
|
||||
Unknown tag Line 1109: 1 @X1@ XXX and unknown token xref definition</text>
|
||||
Unknown tag Line 1109: 1 @X1@ XXX and unknown token xref definition
|
||||
</text>
|
||||
<style name="fontface" value="Monospace">
|
||||
<range start="0" end="163"/>
|
||||
</style>
|
||||
</note>
|
||||
<note handle="_000000f9000000f9" change="1477325896" id="N0036" type="General">
|
||||
<note handle="_000000f9000000f9" change="1551800790" id="N0036" type="General">
|
||||
<text>Objects referenced by this note were missing in a file imported on 12/25/1999 12:00:00 AM.</text>
|
||||
</note>
|
||||
</notes>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<resphone>(555)123-4567</resphone>
|
||||
<resemail>anyone@someplace.com</resemail>
|
||||
</researcher>
|
||||
<mediapath>{GRAMPS_RESOURCES}/example/gramps</mediapath>
|
||||
<mediapath>{GRAMPS_RESOURCES}/doc/gramps/example/gramps</mediapath>
|
||||
</header>
|
||||
<tags>
|
||||
<tag handle="_c7642d9389b54417e8b" change="1370206720" name="tag1" color="#000000000000" priority="0"/>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<researcher>
|
||||
<resname>Alex Roitman,,,</resname>
|
||||
</researcher>
|
||||
<mediapath>{GRAMPS_RESOURCES}/example/gramps</mediapath>
|
||||
<mediapath>{GRAMPS_RESOURCES}/doc/gramps/example/gramps</mediapath>
|
||||
</header>
|
||||
<name-formats>
|
||||
<format number="-1" name="SURNAME, Given (Common)" fmt_str="SURNAME, given (common)" active="1"/>
|
||||
|
@ -54,11 +54,6 @@ class PlaceFormat:
|
||||
self.street = street
|
||||
self.reverse = reverse
|
||||
|
||||
def to_xml(self):
|
||||
return (' <format name="%s" levels="%s" language="%s" '
|
||||
'street="%s" reverse="%s"/>\n' %
|
||||
(self.name, self.levels, self.language,
|
||||
self.street, self.reverse))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -71,8 +66,11 @@ class PlaceDisplay:
|
||||
self.place_formats = []
|
||||
self.default_format = config.get('preferences.place-format')
|
||||
if os.path.exists(PLACE_FORMATS):
|
||||
try:
|
||||
self.load_formats()
|
||||
else:
|
||||
return
|
||||
except BaseException:
|
||||
print(_("Error in '%s' file: cannot load.") % PLACE_FORMATS)
|
||||
pf = PlaceFormat(_('Full'), ':', '', 0, False)
|
||||
self.place_formats.append(pf)
|
||||
|
||||
@ -164,12 +162,20 @@ class PlaceDisplay:
|
||||
dom.unlink()
|
||||
|
||||
def save_formats(self):
|
||||
with open(PLACE_FORMATS, 'w') as fd:
|
||||
fd.write('<?xml version="1.0" encoding="utf-8"?>\n')
|
||||
fd.write('<place_formats>\n')
|
||||
doc = xml.dom.minidom.Document()
|
||||
place_formats = doc.createElement('place_formats')
|
||||
doc.appendChild(place_formats)
|
||||
for fmt in self.place_formats:
|
||||
fd.write(fmt.to_xml())
|
||||
fd.write('</place_formats>\n')
|
||||
node = doc.createElement('format')
|
||||
place_formats.appendChild(node)
|
||||
node.setAttribute('name', fmt.name)
|
||||
node.setAttribute('levels', fmt.levels)
|
||||
node.setAttribute('language', fmt.language)
|
||||
node.setAttribute('street', str(fmt.street))
|
||||
node.setAttribute('reverse', str(fmt.reverse))
|
||||
with open(PLACE_FORMATS, 'w', encoding='utf-8') as f_d:
|
||||
doc.writexml(f_d, addindent=' ', newl='\n', encoding='utf-8')
|
||||
|
||||
|
||||
def _get_offset(value, index):
|
||||
if index is not None and value.startswith('p'):
|
||||
|
@ -124,6 +124,9 @@ class GenericFilter:
|
||||
def get_cursor(self, db):
|
||||
return db.get_person_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_person_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Person()
|
||||
|
||||
@ -133,13 +136,15 @@ class GenericFilter:
|
||||
def get_number(self, db):
|
||||
return db.get_number_of_people()
|
||||
|
||||
def check_func(self, db, id_list, task, user=None, tupleind=None):
|
||||
def check_func(self, db, id_list, task, user=None, tupleind=None,
|
||||
tree=False):
|
||||
final_list = []
|
||||
if user:
|
||||
user.begin_progress(_('Filter'), _('Applying ...'),
|
||||
self.get_number(db))
|
||||
if id_list is None:
|
||||
with self.get_cursor(db) as cursor:
|
||||
with (self.get_tree_cursor(db) if tree else
|
||||
self.get_cursor(db)) as cursor:
|
||||
for handle, data in cursor:
|
||||
person = self.make_obj()
|
||||
person.unserialize(data)
|
||||
@ -162,14 +167,15 @@ class GenericFilter:
|
||||
user.end_progress()
|
||||
return final_list
|
||||
|
||||
def check_and(self, db, id_list, user=None, tupleind=None):
|
||||
def check_and(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
final_list = []
|
||||
flist = self.flist
|
||||
if user:
|
||||
user.begin_progress(_('Filter'), _('Applying ...'),
|
||||
self.get_number(db))
|
||||
if id_list is None:
|
||||
with self.get_cursor(db) as cursor:
|
||||
with (self.get_tree_cursor(db) if tree else
|
||||
self.get_cursor(db)) as cursor:
|
||||
for handle, data in cursor:
|
||||
person = self.make_obj()
|
||||
person.unserialize(data)
|
||||
@ -194,14 +200,17 @@ class GenericFilter:
|
||||
user.end_progress()
|
||||
return final_list
|
||||
|
||||
def check_or(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.or_test, user, tupleind)
|
||||
def check_or(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.or_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def check_one(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.one_test, user, tupleind)
|
||||
def check_one(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.one_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def check_xor(self, db, id_list, user=None, tupleind=None):
|
||||
return self.check_func(db, id_list, self.xor_test, user, tupleind)
|
||||
def check_xor(self, db, id_list, user=None, tupleind=None, tree=False):
|
||||
return self.check_func(db, id_list, self.xor_test, user, tupleind,
|
||||
tree=False)
|
||||
|
||||
def xor_test(self, db, person):
|
||||
test = False
|
||||
@ -231,7 +240,7 @@ class GenericFilter:
|
||||
def check(self, db, handle):
|
||||
return self.get_check_func()(db, [handle])
|
||||
|
||||
def apply(self, db, id_list=None, tupleind=None, user=None):
|
||||
def apply(self, db, id_list=None, tupleind=None, user=None, tree=False):
|
||||
"""
|
||||
Apply the filter using db.
|
||||
If id_list given, the handles in id_list are used. If not given
|
||||
@ -251,7 +260,7 @@ class GenericFilter:
|
||||
m = self.get_check_func()
|
||||
for rule in self.flist:
|
||||
rule.requestprepare(db, user)
|
||||
res = m(db, id_list, user, tupleind)
|
||||
res = m(db, id_list, user, tupleind, tree)
|
||||
for rule in self.flist:
|
||||
rule.requestreset()
|
||||
return res
|
||||
@ -315,6 +324,9 @@ class GenericCitationFilter(GenericFilter):
|
||||
def get_cursor(self, db):
|
||||
return db.get_citation_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_citation_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Citation()
|
||||
|
||||
@ -332,6 +344,9 @@ class GenericPlaceFilter(GenericFilter):
|
||||
def get_cursor(self, db):
|
||||
return db.get_place_cursor()
|
||||
|
||||
def get_tree_cursor(self, db):
|
||||
return db.get_place_tree_cursor()
|
||||
|
||||
def make_obj(self):
|
||||
return Place()
|
||||
|
||||
|
@ -75,6 +75,8 @@ class RelationshipPathBetween(Rule):
|
||||
self.desc_list(child_ref.ref, map, 0)
|
||||
|
||||
def apply_filter(self, rank, handle, plist, pmap):
|
||||
if not handle:
|
||||
return
|
||||
person = self.db.get_person_from_handle(handle)
|
||||
if person is None:
|
||||
return
|
||||
|
@ -133,7 +133,8 @@ class MergeFamilyQuery:
|
||||
old_handle = self.titanic.get_handle()
|
||||
|
||||
with DbTxn(_('Merge Family'), self.database) as trans:
|
||||
|
||||
# commit family in case Phoenix GrampsID, relationship has changed
|
||||
self.database.commit_family(self.phoenix, trans)
|
||||
if self.phoenix_fh != self.titanic_fh:
|
||||
if self.phoenix_fh:
|
||||
phoenix_father = self.database.get_person_from_handle(
|
||||
@ -161,6 +162,8 @@ class MergeFamilyQuery:
|
||||
titanic_mother = None
|
||||
self.merge_person(phoenix_mother, titanic_mother,
|
||||
'mother', trans)
|
||||
# Reload families from db in case the merge_person above changed
|
||||
# them
|
||||
self.phoenix = self.database.get_family_from_handle(new_handle)
|
||||
self.titanic = self.database.get_family_from_handle(old_handle)
|
||||
|
||||
@ -174,8 +177,6 @@ class MergeFamilyQuery:
|
||||
self.phoenix_mh)
|
||||
else:
|
||||
phoenix_mother = None
|
||||
self.phoenix = self.database.get_family_from_handle(new_handle)
|
||||
self.titanic = self.database.get_family_from_handle(old_handle)
|
||||
self.phoenix.merge(self.titanic)
|
||||
self.database.commit_family(self.phoenix, trans)
|
||||
for childref in self.titanic.get_child_ref_list():
|
||||
|
@ -991,8 +991,9 @@ class GVPdfGsDoc(GVDocBase):
|
||||
tmp_pdf_piece = "%s_%d_%d.pdf" % (tmp_ps, __x, __y)
|
||||
list_of_pieces.append(tmp_pdf_piece)
|
||||
# Generate Ghostscript code
|
||||
command = '%s -q -dBATCH -dNOPAUSE -dSAFER -g%dx%d '\
|
||||
'-sOutputFile="%s" -r72 -sDEVICE=pdfwrite '\
|
||||
command = '%s -q -dBATCH -dNOPAUSE -dSAFER '\
|
||||
'-dDEVICEWIDTHPOINTS=%d -dDEVICEHEIGHTPOINTS=%d '\
|
||||
'-sOutputFile="%s" -sDEVICE=pdfwrite '\
|
||||
'-c "<</.HWMargins [%d %d %d %d] /PageOffset [%d %d]>> '\
|
||||
'setpagedevice" -f "%s"' % (
|
||||
_GS_CMD, width_pt + 10, height_pt + 10, tmp_pdf_piece,
|
||||
@ -1002,7 +1003,7 @@ class GVPdfGsDoc(GVDocBase):
|
||||
os.system(command)
|
||||
# Merge pieces to single multipage PDF ;
|
||||
command = '%s -q -dBATCH -dNOPAUSE '\
|
||||
'-sOUTPUTFILE="%s" -r72 -sDEVICE=pdfwrite %s '\
|
||||
'-sOUTPUTFILE="%s" -sDEVICE=pdfwrite %s '\
|
||||
% (_GS_CMD, self._filename, ' '.join(list_of_pieces))
|
||||
os.system(command)
|
||||
|
||||
|
@ -266,7 +266,7 @@ def mac_setup_localization(glocale):
|
||||
LOG.debug("No supported languages found in $LANGUAGE")
|
||||
if not (language and language[0]):
|
||||
translations = _mac_language_list()
|
||||
if len(translations) > 0:
|
||||
if translations and len(translations) > 0:
|
||||
language = translations
|
||||
LOG.debug("Returning Translations %s", ':'.join(translations))
|
||||
|
||||
|
@ -131,15 +131,15 @@ class EventEmbedList(DbGUIElement, GroupEmbeddedList):
|
||||
refs = self.get_data()[self._WORKGROUP]
|
||||
ref_list = [eref.ref for eref in refs]
|
||||
indexlist = []
|
||||
last = 0
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle)
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup events from the object
|
||||
for index in indexlist.reverse():
|
||||
for index in reversed(indexlist):
|
||||
del refs[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild_callback()
|
||||
|
@ -92,6 +92,10 @@ class PersonEventEmbedList(EventEmbedList):
|
||||
self._data.append(family.get_event_ref_list())
|
||||
self._groups.append((family_handle, self._FAMNAME,
|
||||
groupname))
|
||||
#we register all events that need to be tracked
|
||||
for group in self._data:
|
||||
self.callman.register_handles(
|
||||
{'event': [eref.ref for eref in group]})
|
||||
self.changed = False
|
||||
|
||||
return self._data
|
||||
|
@ -38,13 +38,15 @@ from gramps.gen.errors import WindowActiveError
|
||||
from ...ddtargets import DdTargets
|
||||
from .personrefmodel import PersonRefModel
|
||||
from .embeddedlist import EmbeddedList, TEXT_COL, MARKUP_COL, ICON_COL
|
||||
from ...dbguielement import DbGUIElement
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PersonRefEmbedList(EmbeddedList):
|
||||
class PersonRefEmbedList(DbGUIElement, EmbeddedList):
|
||||
|
||||
_HANDLE_COL = 4
|
||||
_DND_TYPE = DdTargets.PERSONREF
|
||||
@ -69,15 +71,61 @@ class PersonRefEmbedList(EmbeddedList):
|
||||
|
||||
def __init__(self, dbstate, uistate, track, data):
|
||||
self.data = data
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||
_('_Associations'), PersonRefModel,
|
||||
move_buttons=True)
|
||||
|
||||
def _connect_db_signals(self):
|
||||
"""
|
||||
called on init of DbGUIElement, connect to db as required.
|
||||
"""
|
||||
#note: person-rebuild closes the editors, so no need to connect to it
|
||||
self.callman.register_callbacks(
|
||||
{'person-update': self.person_change, # change to person we track
|
||||
'person-delete': self.person_delete, # delete of person we track
|
||||
})
|
||||
self.callman.connect_all(keys=['person'])
|
||||
|
||||
def person_change(self, *obj):
|
||||
"""
|
||||
Callback method called when a tracked person changes (description
|
||||
changes...)
|
||||
"""
|
||||
self.rebuild()
|
||||
|
||||
def person_delete(self, hndls):
|
||||
"""
|
||||
Callback method called when a tracked person is deleted.
|
||||
There are two possibilities:
|
||||
* a tracked non-workgroup person is deleted, just rebuilding the view
|
||||
will correct this.
|
||||
* a workgroup person is deleted. The person must be removed from the
|
||||
obj so that no inconsistent data is shown.
|
||||
"""
|
||||
for handle in hndls:
|
||||
ref_list = [pref.ref for pref in self.data]
|
||||
indexlist = []
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup persons from the object
|
||||
for index in reversed(indexlist):
|
||||
del self.data[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild()
|
||||
|
||||
def get_ref_editor(self):
|
||||
from .. import EditPersonRef
|
||||
return EditPersonRef
|
||||
|
||||
def get_data(self):
|
||||
self.callman.register_handles(
|
||||
{'person': [pref.ref for pref in self.data]})
|
||||
return self.data
|
||||
|
||||
def column_order(self):
|
||||
|
@ -40,13 +40,15 @@ from ...ddtargets import DdTargets
|
||||
from .placerefmodel import PlaceRefModel
|
||||
from .embeddedlist import EmbeddedList, TEXT_COL
|
||||
from ...selectors import SelectorFactory
|
||||
from ...dbguielement import DbGUIElement
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class PlaceRefEmbedList(EmbeddedList):
|
||||
class PlaceRefEmbedList(DbGUIElement, EmbeddedList):
|
||||
|
||||
_HANDLE_COL = 4
|
||||
_DND_TYPE = DdTargets.PLACEREF
|
||||
@ -65,11 +67,57 @@ class PlaceRefEmbedList(EmbeddedList):
|
||||
self.data = data
|
||||
self.handle = handle
|
||||
self.callback = callback
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track,
|
||||
_('Enclosed By'), PlaceRefModel,
|
||||
share_button=True, move_buttons=True)
|
||||
|
||||
def _connect_db_signals(self):
|
||||
"""
|
||||
called on init of DbGUIElement, connect to db as required.
|
||||
"""
|
||||
#note: place-rebuild closes the editors, so no need to connect to it
|
||||
self.callman.register_callbacks(
|
||||
{'place-update': self.place_change, # change to place we track
|
||||
'place-delete': self.place_delete, # delete of place we track
|
||||
})
|
||||
self.callman.connect_all(keys=['place'])
|
||||
|
||||
def place_change(self, *obj):
|
||||
"""
|
||||
Callback method called when a tracked place changes (description
|
||||
changes...)
|
||||
"""
|
||||
self.rebuild()
|
||||
|
||||
def place_delete(self, hndls):
|
||||
"""
|
||||
Callback method called when a tracked place is deleted.
|
||||
There are two possibilities:
|
||||
* a tracked non-workgroup place is deleted, just rebuilding the view
|
||||
will correct this.
|
||||
* a workgroup place is deleted. The place must be removed from the
|
||||
obj so that no inconsistent data is shown.
|
||||
"""
|
||||
for handle in hndls:
|
||||
ref_list = [pref.ref for pref in self.data]
|
||||
indexlist = []
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup places from the object
|
||||
for index in reversed(indexlist):
|
||||
del self.data[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild()
|
||||
|
||||
def get_data(self):
|
||||
self.callman.register_handles(
|
||||
{'place': [pref.ref for pref in self.data]})
|
||||
return self.data
|
||||
|
||||
def column_order(self):
|
||||
|
@ -174,6 +174,8 @@ class EditCitation(EditPrimary):
|
||||
|
||||
self._add_db_signal('citation-rebuild', self._do_close)
|
||||
self._add_db_signal('citation-delete', self.check_for_close)
|
||||
self._add_db_signal('source-delete', self.source_delete)
|
||||
self._add_db_signal('source-update', self.source_update)
|
||||
|
||||
def _setup_fields(self):
|
||||
"""
|
||||
@ -269,6 +271,26 @@ class EditCitation(EditPrimary):
|
||||
author = ''
|
||||
self.glade.get_object("author").set_text(author)
|
||||
|
||||
def source_update(self, hndls):
|
||||
''' Source changed outside of dialog, update text if its ours '''
|
||||
handle = self.obj.get_reference_handle()
|
||||
if handle and handle in hndls:
|
||||
source = self.db.get_source_from_handle(handle)
|
||||
s_lbl = "%s [%s]" % (source.get_title(), source.gramps_id)
|
||||
self.glade.get_object("source").set_text(s_lbl)
|
||||
author = source.get_author()
|
||||
self.glade.get_object("author").set_text(author)
|
||||
|
||||
def source_delete(self, hndls):
|
||||
''' Source deleted outside of dialog, remove it if its ours'''
|
||||
handle = self.obj.get_reference_handle()
|
||||
if handle and handle in hndls:
|
||||
self.obj.set_reference_handle(None)
|
||||
self.glade.get_object("source").set_markup(
|
||||
self.source_field.EMPTY_TEXT)
|
||||
self.glade.get_object("author").set_text('')
|
||||
self.source_field.set_button(False)
|
||||
|
||||
def build_menu_names(self, source):
|
||||
"""
|
||||
Provide the information needed by the base class to define the
|
||||
|
@ -129,6 +129,8 @@ class EditEvent(EditPrimary):
|
||||
"""
|
||||
self._add_db_signal('event-rebuild', self._do_close)
|
||||
self._add_db_signal('event-delete', self.check_for_close)
|
||||
self._add_db_signal('place-delete', self.place_delete)
|
||||
self._add_db_signal('place-update', self.place_update)
|
||||
|
||||
def _setup_fields(self):
|
||||
|
||||
@ -301,6 +303,24 @@ class EditEvent(EditPrimary):
|
||||
cmp_obj = self.empty_object()
|
||||
return cmp_obj.serialize(True)[1:] != self.obj.serialize()[1:]
|
||||
|
||||
def place_update(self, hndls):
|
||||
''' Place changed outside of dialog, update text if its ours '''
|
||||
handle = self.obj.get_place_handle()
|
||||
if handle and handle in hndls:
|
||||
place = self.db.get_place_from_handle(handle)
|
||||
p_lbl = "%s [%s]" % (place.get_title(), place.gramps_id)
|
||||
self.top.get_object("place").set_text(p_lbl)
|
||||
|
||||
def place_delete(self, hndls):
|
||||
''' Place deleted outside of dialog, remove it if its ours'''
|
||||
handle = self.obj.get_place_handle()
|
||||
if handle and handle in hndls:
|
||||
self.obj.set_place_handle(None)
|
||||
self.top.get_object("place").set_markup(
|
||||
self.place_field.EMPTY_TEXT)
|
||||
self.place_field.set_button(False)
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Delete Query class
|
||||
|
@ -120,6 +120,8 @@ class EditEventRef(EditReference):
|
||||
"""
|
||||
self._add_db_signal('event-rebuild', self.close)
|
||||
self._add_db_signal('event-delete', self.check_for_close)
|
||||
self._add_db_signal('place-delete', self.place_delete)
|
||||
self._add_db_signal('place-update', self.place_update)
|
||||
|
||||
def _setup_fields(self):
|
||||
|
||||
@ -279,3 +281,20 @@ class EditEventRef(EditReference):
|
||||
self.update(self.source_ref,self.source)
|
||||
|
||||
self.close()
|
||||
|
||||
def place_update(self, hndls):
|
||||
''' Place changed outside of dialog, update text if its ours '''
|
||||
handle = self.source.get_place_handle()
|
||||
if handle and handle in hndls:
|
||||
place = self.db.get_place_from_handle(handle)
|
||||
p_lbl = "%s [%s]" % (place.get_title(), place.gramps_id)
|
||||
self.top.get_object("eer_place").set_text(p_lbl)
|
||||
|
||||
def place_delete(self, hndls):
|
||||
''' Place deleted outside of dialog, remove it if its ours'''
|
||||
handle = self.source.get_place_handle()
|
||||
if handle and handle in hndls:
|
||||
self.source.set_place_handle(None)
|
||||
self.top.get_object("eer_place").set_markup(
|
||||
self.place_field.EMPTY_TEXT)
|
||||
self.place_field.set_button(False)
|
||||
|
@ -80,6 +80,7 @@ from gramps.gen.utils.db import (get_birth_or_fallback, get_death_or_fallback,
|
||||
from ..selectors import SelectorFactory
|
||||
from gramps.gen.utils.id import create_id
|
||||
from gramps.gen.const import URL_MANUAL_SECT1
|
||||
from ..dbguielement import DbGUIElement
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -97,7 +98,8 @@ _KP_ENTER = Gdk.keyval_from_name("KP_Enter")
|
||||
_LEFT_BUTTON = 1
|
||||
_RIGHT_BUTTON = 3
|
||||
|
||||
class ChildEmbedList(EmbeddedList):
|
||||
|
||||
class ChildEmbedList(DbGUIElement, EmbeddedList):
|
||||
"""
|
||||
The child embed list is specific to the Edit Family dialog, so it
|
||||
is contained here instead of in displaytabs.
|
||||
@ -139,9 +141,54 @@ class ChildEmbedList(EmbeddedList):
|
||||
Create the object, storing the passed family value
|
||||
"""
|
||||
self.family = family
|
||||
DbGUIElement.__init__(self, dbstate.db)
|
||||
EmbeddedList.__init__(self, dbstate, uistate, track, _('Chil_dren'),
|
||||
ChildModel, share_button=True, move_buttons=True)
|
||||
|
||||
def _connect_db_signals(self):
|
||||
"""
|
||||
called on init of DbGUIElement, connect to db as required.
|
||||
"""
|
||||
#note: event-rebuild closes the editors, so no need to connect to it
|
||||
self.callman.register_callbacks(
|
||||
{'person-update': self.person_change, # change to person we track
|
||||
'person-delete': self.person_delete, # delete of person we track
|
||||
})
|
||||
self.callman.connect_all(keys=['person'])
|
||||
|
||||
def person_change(self, *obj):
|
||||
"""
|
||||
Callback method called when a tracked person changes (description
|
||||
changes...)
|
||||
"""
|
||||
self.rebuild()
|
||||
|
||||
def person_delete(self, hndls):
|
||||
"""
|
||||
Callback method called when a tracked person is deleted.
|
||||
There are two possibilities:
|
||||
* a tracked non-workgroup person is deleted, just rebuilding the view
|
||||
will correct this.
|
||||
* a workgroup person is deleted. The person must be removed from the
|
||||
obj so that no inconsistent data is shown.
|
||||
"""
|
||||
for handle in hndls:
|
||||
prefs = self.get_data()
|
||||
ref_list = [pref.ref for pref in prefs]
|
||||
indexlist = []
|
||||
last = -1
|
||||
while True:
|
||||
try:
|
||||
last = ref_list.index(handle, last + 1)
|
||||
indexlist.append(last)
|
||||
except ValueError:
|
||||
break
|
||||
#remove the deleted workgroup persons from the object
|
||||
for index in reversed(indexlist):
|
||||
del prefs[index]
|
||||
#now rebuild the display tab
|
||||
self.rebuild()
|
||||
|
||||
def get_popup_menu_items(self):
|
||||
return [
|
||||
(False, _('Edit child'), self.edit_child_button_clicked),
|
||||
@ -163,7 +210,10 @@ class ChildEmbedList(EmbeddedList):
|
||||
Normally, get_data returns a list. However, we return family
|
||||
object here instead.
|
||||
"""
|
||||
return self.family.get_child_ref_list()
|
||||
prefs = self.family.get_child_ref_list()
|
||||
self.callman.register_handles(
|
||||
{'person': [eref.ref for eref in prefs]})
|
||||
return prefs
|
||||
|
||||
def column_order(self):
|
||||
return [(1, 13), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6),
|
||||
@ -292,9 +342,11 @@ class ChildEmbedList(EmbeddedList):
|
||||
name.set_primary_surname(0)
|
||||
if self.family:
|
||||
father_handle = self.family.get_father_handle()
|
||||
father = (self.dbstate.db.get_person_from_handle(father_handle) if
|
||||
father_handle else None)
|
||||
mother_handle = self.family.get_mother_handle()
|
||||
father = self.dbstate.db.get_person_from_handle(father_handle)
|
||||
mother = self.dbstate.db.get_person_from_handle(mother_handle)
|
||||
mother = (self.dbstate.db.get_person_from_handle(mother_handle) if
|
||||
mother_handle else None)
|
||||
if not father and not mother:
|
||||
return name
|
||||
if not father:
|
||||
@ -412,10 +464,21 @@ class EditFamily(EditPrimary):
|
||||
'event-rebuild': self.topdata_updated,
|
||||
'event-delete': self.topdata_updated, # delete eg birth event fath
|
||||
'person-update': self.topdata_updated, # change eg name of father
|
||||
'person-delete' : self.person_delete, # mother/father deleted?
|
||||
'person-rebuild': self._do_close,
|
||||
})
|
||||
self.callman.connect_all(keys=['family', 'event', 'person'])
|
||||
|
||||
def person_delete(self, handles):
|
||||
""" This checks if mother/father is deleted, specifically when newly
|
||||
added before data is saved """
|
||||
for hndl in handles:
|
||||
if self.obj.father_handle == hndl:
|
||||
self.obj.father_handle = None
|
||||
if self.obj.mother_handle == hndl:
|
||||
self.obj.mother_handle = None
|
||||
self.load_data()
|
||||
|
||||
def check_for_family_change(self, handles):
|
||||
"""
|
||||
Callback for family-update signal
|
||||
|
@ -245,6 +245,7 @@ class EditMedia(EditPrimary):
|
||||
self.view_media(obj)
|
||||
|
||||
def view_media(self, obj):
|
||||
if self.obj.handle:
|
||||
ref_obj = self.dbstate.db.get_media_from_handle(self.obj.handle)
|
||||
|
||||
if ref_obj:
|
||||
|
@ -269,9 +269,7 @@ class EditPerson(EditPrimary):
|
||||
self._add_db_signal('family-delete', self.family_change)
|
||||
self._add_db_signal('family-update', self.family_change)
|
||||
self._add_db_signal('family-add', self.family_change)
|
||||
self._add_db_signal('event-update', self.event_updated)
|
||||
self._add_db_signal('event-rebuild', self.event_updated)
|
||||
self._add_db_signal('event-delete', self.event_updated)
|
||||
|
||||
def family_change(self, handle_list=[]):
|
||||
"""
|
||||
|
@ -182,8 +182,8 @@ class EditPlace(EditPrimary):
|
||||
def set_latlongitude(self, value):
|
||||
try:
|
||||
coma = value.index(',')
|
||||
self.longitude.set_text(value[coma+1:])
|
||||
self.latitude.set_text(value[:coma])
|
||||
self.longitude.set_text(value[coma+1:].strip())
|
||||
self.latitude.set_text(value[:coma].strip())
|
||||
self.top.get_object("lat_entry").validate(force=True)
|
||||
self.top.get_object("lon_entry").validate(force=True)
|
||||
self.obj.set_latitude(self.latitude.get_value())
|
||||
|
@ -175,8 +175,8 @@ class EditPlaceRef(EditReference):
|
||||
def set_latlongitude(self, value):
|
||||
try:
|
||||
coma = value.index(',')
|
||||
self.longitude.set_text(value[coma+1:])
|
||||
self.latitude.set_text(value[:coma])
|
||||
self.longitude.set_text(value[coma+1:].strip())
|
||||
self.latitude.set_text(value[:coma].strip())
|
||||
self.top.get_object("lat_entry").validate(force=True)
|
||||
self.top.get_object("lon_entry").validate(force=True)
|
||||
self.source.set_latitude(self.latitude.get_value())
|
||||
|
@ -150,9 +150,6 @@ class MergeCitation(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.citation2
|
||||
titanic = self.citation1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Citation')
|
||||
|
||||
if self.get_widget("page_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_page(titanic.get_page())
|
||||
@ -165,5 +162,8 @@ class MergeCitation(ManagedWindow):
|
||||
|
||||
query = MergeCitationQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Citation')
|
||||
self.uistate.set_busy_cursor(False)
|
||||
self.close()
|
||||
|
@ -167,9 +167,6 @@ class MergeEvent(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.ev2
|
||||
titanic = self.ev1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Event')
|
||||
|
||||
if self.get_widget("type_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_type(titanic.get_type())
|
||||
@ -185,5 +182,8 @@ class MergeEvent(ManagedWindow):
|
||||
|
||||
query = MergeEventQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Event')
|
||||
self.uistate.set_busy_cursor(False)
|
||||
self.close()
|
||||
|
@ -203,9 +203,6 @@ class MergeFamily(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.fy2
|
||||
titanic = self.fy1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Family')
|
||||
|
||||
phoenix_fh = phoenix.get_father_handle()
|
||||
phoenix_mh = phoenix.get_mother_handle()
|
||||
@ -223,6 +220,9 @@ class MergeFamily(ManagedWindow):
|
||||
query = MergeFamilyQuery(self.database, phoenix, titanic,
|
||||
phoenix_fh, phoenix_mh)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Family')
|
||||
except MergeError as err:
|
||||
ErrorDialog(_("Cannot merge people"), str(err),
|
||||
parent=self.window)
|
||||
|
@ -147,9 +147,6 @@ class MergeMedia(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.mo2
|
||||
titanic = self.mo1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Media')
|
||||
|
||||
if self.get_widget("path_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_path(titanic.get_path())
|
||||
@ -163,4 +160,7 @@ class MergeMedia(ManagedWindow):
|
||||
|
||||
query = MergeMediaQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Media')
|
||||
self.close()
|
||||
|
@ -159,9 +159,6 @@ class MergeNote(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.no2
|
||||
titanic = self.no1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Note')
|
||||
|
||||
if self.get_widget("text_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_styledtext(titanic.get_styledtext())
|
||||
@ -174,4 +171,7 @@ class MergeNote(ManagedWindow):
|
||||
|
||||
query = MergeNoteQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Note')
|
||||
self.close()
|
||||
|
@ -321,9 +321,6 @@ class MergePerson(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.pr2
|
||||
titanic = self.pr1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Person')
|
||||
|
||||
if self.get_widget("name_btn1").get_active() ^ use_handle1:
|
||||
swapname = phoenix.get_primary_name()
|
||||
@ -347,6 +344,9 @@ class MergePerson(ManagedWindow):
|
||||
"handle. We recommend that you go to Relationships "
|
||||
"view and see if additional manual merging of families "
|
||||
"is necessary."), parent=self.window)
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Person')
|
||||
except MergeError as err:
|
||||
ErrorDialog(_("Cannot merge people"), str(err),
|
||||
parent=self.window)
|
||||
|
@ -197,9 +197,6 @@ class MergePlace(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.pl2
|
||||
titanic = self.pl1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Place')
|
||||
|
||||
if self.get_widget("title_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_title(titanic.get_title())
|
||||
@ -218,6 +215,9 @@ class MergePlace(ManagedWindow):
|
||||
|
||||
query = MergePlaceQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Place')
|
||||
|
||||
if self.callback:
|
||||
self.callback()
|
||||
|
@ -140,9 +140,6 @@ class MergeRepository(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.rp2
|
||||
titanic = self.rp1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Repository')
|
||||
|
||||
if self.get_widget("name_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_name(titanic.get_name())
|
||||
@ -153,5 +150,8 @@ class MergeRepository(ManagedWindow):
|
||||
|
||||
query = MergeRepositoryQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Repository')
|
||||
self.uistate.set_busy_cursor(False)
|
||||
self.close()
|
||||
|
@ -159,9 +159,6 @@ class MergeSource(ManagedWindow):
|
||||
else:
|
||||
phoenix = self.src2
|
||||
titanic = self.src1
|
||||
# Add second handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Source')
|
||||
|
||||
if self.get_widget("title_btn1").get_active() ^ use_handle1:
|
||||
phoenix.set_title(titanic.get_title())
|
||||
@ -176,5 +173,8 @@ class MergeSource(ManagedWindow):
|
||||
|
||||
query = MergeSourceQuery(self.dbstate, phoenix, titanic)
|
||||
query.execute()
|
||||
# Add the selected handle to history so that when merge is complete,
|
||||
# phoenix is the selected row.
|
||||
self.uistate.set_active(phoenix.get_handle(), 'Source')
|
||||
self.uistate.set_busy_cursor(False)
|
||||
self.close()
|
||||
|
@ -586,7 +586,7 @@ class TreeBaseModel(GObject.GObject, Gtk.TreeModel, BaseModel):
|
||||
assert not skip
|
||||
if dfilter:
|
||||
cdb = CacheProxyDb(self.db)
|
||||
for handle in dfilter.apply(cdb,
|
||||
for handle in dfilter.apply(cdb, tree=True,
|
||||
user=User(parent=self.uistate.window)):
|
||||
status_ppl.heartbeat()
|
||||
data = data_map(handle)
|
||||
|
@ -63,6 +63,7 @@ from gramps.gen.utils.alive import probably_alive
|
||||
from gramps.gen.utils.libformatting import FormattingHelper
|
||||
from gramps.gen.utils.db import (find_children, find_parents, find_witnessed_people,
|
||||
get_age, get_timeperiod, preset_name)
|
||||
from gramps.gen.constfunc import is_quartz
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
from gramps.gen.const import (
|
||||
PIXELS_PER_GENERATION,
|
||||
@ -670,6 +671,8 @@ class FanChartBaseWidget(Gtk.DrawingArea):
|
||||
|
||||
def draw_radial_text(self, cr, text, radiusin, radiusout, start_rad, stop_rad, font, flipped):
|
||||
layout = self.create_pango_layout(text)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(layout.get_context(), 72)
|
||||
layout.set_font_description(font)
|
||||
layout.set_wrap(Pango.WrapMode.WORD_CHAR)
|
||||
|
||||
@ -701,6 +704,8 @@ class FanChartBaseWidget(Gtk.DrawingArea):
|
||||
Text not fitting a single line will be char-wrapped away.
|
||||
"""
|
||||
layout = self.create_pango_layout(text)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(layout.get_context(), 72)
|
||||
layout.set_font_description(font)
|
||||
layout.set_wrap(Pango.WrapMode.WORD_CHAR)
|
||||
|
||||
@ -771,6 +776,8 @@ class FanChartBaseWidget(Gtk.DrawingArea):
|
||||
cr.set_source_rgb(color[0], color[1], color[2])
|
||||
cr.fill()
|
||||
layout = self.create_pango_layout(text)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(layout.get_context(), 72)
|
||||
layout.set_font_description(font)
|
||||
cr.move_to(startw+gradwidth+4, starth)
|
||||
cr.set_source_rgb(0, 0, 0) #black
|
||||
|
@ -330,9 +330,11 @@ class DBAPI(DbGeneric):
|
||||
"""
|
||||
Return the defined names that have been assigned to a default grouping.
|
||||
"""
|
||||
self.dbapi.execute("SELECT name FROM name_group ORDER BY name")
|
||||
self.dbapi.execute("SELECT name, grouping FROM name_group "
|
||||
"ORDER BY name")
|
||||
rows = self.dbapi.fetchall()
|
||||
return [row[0] for row in rows]
|
||||
# not None test below fixes db corrupted by 11011 for export
|
||||
return [row[0] for row in rows if row[1] is not None]
|
||||
|
||||
def get_name_group_mapping(self, key):
|
||||
"""
|
||||
@ -341,7 +343,8 @@ class DBAPI(DbGeneric):
|
||||
self.dbapi.execute(
|
||||
"SELECT grouping FROM name_group WHERE name = ?", [key])
|
||||
row = self.dbapi.fetchone()
|
||||
if row:
|
||||
if row and row[0] is not None:
|
||||
# not None test fixes db corrupted by 11011
|
||||
return row[0]
|
||||
else:
|
||||
return key
|
||||
@ -566,7 +569,7 @@ class DBAPI(DbGeneric):
|
||||
self.dbapi.execute("SELECT grouping FROM name_group WHERE name = ?",
|
||||
[key])
|
||||
row = self.dbapi.fetchone()
|
||||
return True if row else False
|
||||
return row and row[0] is not None
|
||||
|
||||
def set_name_group_mapping(self, name, grouping):
|
||||
"""
|
||||
@ -576,14 +579,18 @@ class DBAPI(DbGeneric):
|
||||
self.dbapi.execute("SELECT 1 FROM name_group WHERE name = ?",
|
||||
[name])
|
||||
row = self.dbapi.fetchone()
|
||||
if row:
|
||||
if row and grouping is not None:
|
||||
self.dbapi.execute("UPDATE name_group SET grouping=? "
|
||||
"WHERE name = ?", [grouping, name])
|
||||
elif row and grouping is None:
|
||||
self.dbapi.execute("DELETE FROM name_group WHERE name = ?", [name])
|
||||
grouping = ''
|
||||
else:
|
||||
self.dbapi.execute(
|
||||
"INSERT INTO name_group (name, grouping) VALUES (?, ?)",
|
||||
[name, grouping])
|
||||
self._txn_commit()
|
||||
self.emit('person-groupname-rebuild', (name, grouping))
|
||||
|
||||
def _commit_base(self, obj, obj_key, trans, change_time):
|
||||
"""
|
||||
|
@ -46,6 +46,7 @@ import cairo
|
||||
# Gramps modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from gramps.gen.constfunc import is_quartz
|
||||
import gramps.plugins.lib.libcairodoc as libcairodoc
|
||||
from gramps.gen.plug.docgen import INDEX_TYPE_ALP, INDEX_TYPE_TOC
|
||||
from gramps.gen.errors import ReportError
|
||||
@ -109,6 +110,8 @@ class CairoDocgen(libcairodoc.CairoDoc):
|
||||
pango_context = fontmap.create_context()
|
||||
options = cairo.FontOptions()
|
||||
options.set_hint_metrics(cairo.HINT_METRICS_OFF)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(pango_context, 72)
|
||||
PangoCairo.context_set_font_options(pango_context, options)
|
||||
layout = Pango.Layout(pango_context)
|
||||
PangoCairo.update_context(cr, pango_context)
|
||||
|
@ -538,7 +538,6 @@ class RecurseDown:
|
||||
|
||||
spouse_handle = utils.find_spouse(person, family)
|
||||
if (self.max_spouses > s_level and
|
||||
spouse_handle and
|
||||
spouse_handle not in self.families_seen):
|
||||
def _spouse_box(who):
|
||||
return self.add_person_box((x_level, s_level+1),
|
||||
|
@ -104,15 +104,6 @@ LANGUAGES = {
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
MIME2GED = {
|
||||
"image/bmp" : "bmp",
|
||||
"image/gif" : "gif",
|
||||
"image/jpeg" : "jpeg",
|
||||
"image/x-pcx" : "pcx",
|
||||
"image/tiff" : "tiff",
|
||||
"audio/x-wav" : "wav"
|
||||
}
|
||||
|
||||
QUALITY_MAP = {
|
||||
Citation.CONF_VERY_HIGH : "3",
|
||||
Citation.CONF_HIGH : "2",
|
||||
@ -1467,8 +1458,7 @@ class GedcomWriter(UpdateCallback):
|
||||
gramps_id = media.get_gramps_id()
|
||||
|
||||
self._writeln(0, '@%s@' % gramps_id, 'OBJE')
|
||||
mime = media.get_mime_type()
|
||||
form = MIME2GED.get(mime, mime)
|
||||
form = os.path.splitext(media.get_path())[1][1:]
|
||||
path = media_path_full(self.dbase, media.get_path())
|
||||
self._writeln(1, 'FILE', path, limit=255)
|
||||
if form:
|
||||
|
@ -61,9 +61,9 @@ from gramps.gen.plug.menu import (NumberOption, ColorOption, BooleanOption,
|
||||
EnumeratedListOption, PersonListOption,
|
||||
SurnameColorOption)
|
||||
from gramps.gen.utils.db import get_birth_or_fallback, get_death_or_fallback
|
||||
from gramps.gen.utils.location import get_main_location
|
||||
from gramps.gen.proxy import CacheProxyDb
|
||||
from gramps.gen.errors import ReportError
|
||||
from gramps.gen.display.place import displayer as _pd
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -1089,27 +1089,7 @@ class FamilyLinesReport(Report):
|
||||
if place_handle:
|
||||
place = self._db.get_place_from_handle(place_handle)
|
||||
if place:
|
||||
location = get_main_location(self._db, place)
|
||||
if location.get(PlaceType.HAMLET):
|
||||
place_text = location.get(PlaceType.HAMLET)
|
||||
elif location.get(PlaceType.VILLAGE):
|
||||
place_text = location.get(PlaceType.VILLAGE)
|
||||
elif location.get(PlaceType.TOWN):
|
||||
place_text = location.get(PlaceType.TOWN)
|
||||
elif location.get(PlaceType.CITY):
|
||||
place_text = location.get(PlaceType.CITY)
|
||||
elif location.get(PlaceType.PARISH):
|
||||
place_text = location.get(PlaceType.PARISH)
|
||||
elif location.get(PlaceType.COUNTY):
|
||||
place_text = location.get(PlaceType.COUNTY)
|
||||
elif location.get(PlaceType.PROVINCE):
|
||||
place_text = location.get(PlaceType.PROVINCE)
|
||||
elif location.get(PlaceType.REGION):
|
||||
place_text = location.get(PlaceType.REGION)
|
||||
elif location.get(PlaceType.STATE):
|
||||
place_text = location.get(PlaceType.STATE)
|
||||
elif location.get(PlaceType.COUNTRY):
|
||||
place_text = location.get(PlaceType.COUNTRY)
|
||||
place_text = _pd.display(self._db, place)
|
||||
place_text = place_text.replace('<', '<')
|
||||
place_text = place_text.replace('>', '>')
|
||||
return place_text
|
||||
|
@ -494,13 +494,13 @@ class RelGraphReport(Report):
|
||||
self.doc.start_subgraph(fam_id)
|
||||
f_handle = fam.get_father_handle()
|
||||
m_handle = fam.get_mother_handle()
|
||||
if f_handle:
|
||||
if f_handle in self.persons:
|
||||
father = self._db.get_person_from_handle(f_handle)
|
||||
self.doc.add_link(father.get_gramps_id(),
|
||||
fam_id, "",
|
||||
self.arrowheadstyle,
|
||||
self.arrowtailstyle)
|
||||
if m_handle:
|
||||
if m_handle in self.persons:
|
||||
mother = self._db.get_person_from_handle(m_handle)
|
||||
self.doc.add_link(mother.get_gramps_id(),
|
||||
fam_id, "",
|
||||
|
@ -1149,6 +1149,8 @@ class GrampsParser(UpdateCallback):
|
||||
self.placeobj.title = attrs.get('title', '')
|
||||
self.locations = 0
|
||||
self.update(self.p.CurrentLineNumber)
|
||||
if self.default_tag:
|
||||
self.placeobj.add_tag(self.default_tag.handle)
|
||||
return self.placeobj
|
||||
|
||||
def start_location(self, attrs):
|
||||
@ -1276,6 +1278,8 @@ class GrampsParser(UpdateCallback):
|
||||
self.event.private = bool(attrs.get("priv"))
|
||||
self.event.change = int(attrs.get('change', self.change))
|
||||
self.info.add('new-object', EVENT_KEY, self.event)
|
||||
if self.default_tag:
|
||||
self.event.add_tag(self.default_tag.handle)
|
||||
return self.event
|
||||
|
||||
def start_eventref(self, attrs):
|
||||
@ -1754,7 +1758,7 @@ class GrampsParser(UpdateCallback):
|
||||
' with "%(parent)s", did not change this grouping to "%(value)s".') % {
|
||||
'key' : key, 'parent' : present, 'value' : value }
|
||||
self.user.warn(_("Gramps ignored a name grouping"), msg)
|
||||
else:
|
||||
elif value != 'None': # None test fixes file corrupted by 11011
|
||||
self.db.set_name_group_mapping(key, value)
|
||||
|
||||
def start_last(self, attrs):
|
||||
@ -2089,6 +2093,8 @@ class GrampsParser(UpdateCallback):
|
||||
self.conf if self.__xml_version >= (1, 5, 1)
|
||||
else 0 ) # See bug# 7125
|
||||
self.info.add('new-object', CITATION_KEY, self.citation)
|
||||
if self.default_tag:
|
||||
self.citation.add_tag(self.default_tag.handle)
|
||||
return self.citation
|
||||
|
||||
def start_sourceref(self, attrs):
|
||||
@ -2143,6 +2149,8 @@ class GrampsParser(UpdateCallback):
|
||||
self.source.private = bool(attrs.get("priv"))
|
||||
self.source.change = int(attrs.get('change', self.change))
|
||||
self.info.add('new-object', SOURCE_KEY, self.source)
|
||||
if self.default_tag:
|
||||
self.source.add_tag(self.default_tag.handle)
|
||||
return self.source
|
||||
|
||||
def start_reporef(self, attrs):
|
||||
@ -2261,6 +2269,8 @@ class GrampsParser(UpdateCallback):
|
||||
self.repo.private = bool(attrs.get("priv"))
|
||||
self.repo.change = int(attrs.get('change', self.change))
|
||||
self.info.add('new-object', REPOSITORY_KEY, self.repo)
|
||||
if self.default_tag:
|
||||
self.repo.add_tag(self.default_tag.handle)
|
||||
return self.repo
|
||||
|
||||
def stop_people(self, *tag):
|
||||
|
@ -94,6 +94,7 @@ import time
|
||||
# from xml.parsers.expat import ParserCreate
|
||||
from collections import defaultdict, OrderedDict
|
||||
import string
|
||||
import mimetypes
|
||||
from io import StringIO, TextIOWrapper
|
||||
from urllib.parse import urlparse
|
||||
|
||||
@ -123,7 +124,7 @@ from gramps.gen.lib import (
|
||||
Surname, Tag, Url, UrlType, PlaceType, PlaceRef, PlaceName)
|
||||
from gramps.gen.db import DbTxn
|
||||
from gramps.gen.updatecallback import UpdateCallback
|
||||
from gramps.gen.mime import get_type
|
||||
from gramps.gen.utils.file import media_path
|
||||
from gramps.gen.utils.id import create_id
|
||||
from gramps.gen.utils.lds import TEMPLES
|
||||
from gramps.gen.utils.unknown import make_unknown, create_explanation_note
|
||||
@ -531,15 +532,6 @@ PEDIGREE_TYPES = {
|
||||
'adopted': TYPE_ADOPT,
|
||||
'foster' : TYPE_FOSTER, }
|
||||
|
||||
MIME_MAP = {
|
||||
'jpeg' : 'image/jpeg', 'rtf' : 'text/rtf',
|
||||
'jpg' : 'image/jpeg', 'pdf' : 'application/pdf',
|
||||
'mpeg' : 'video/mpeg', 'gif' : 'image/gif',
|
||||
'mpg' : 'video/mpeg', 'bmp' : 'image/x-ms-bmp',
|
||||
'tiff' : 'image/tiff', 'aif' : 'audio/x-aiff',
|
||||
'text' : 'text/plain', 'w8bn' : 'application/msword',
|
||||
'wav' : 'audio/x-wav', 'mov' : 'video/quicktime', }
|
||||
|
||||
FTW_BAD_PLACE = [
|
||||
EventType.OCCUPATION,
|
||||
EventType.RELIGION,
|
||||
@ -2315,8 +2307,8 @@ class GedcomParser(UpdateCallback):
|
||||
TOKEN_MEDI : self.__media_ref_medi, # v5.5.1
|
||||
TOKEN_TITL : self.__media_ref_titl,
|
||||
TOKEN_FILE : self.__media_ref_file,
|
||||
TOKEN_NOTE : self.__media_ref_note,
|
||||
TOKEN_RNOTE : self.__media_ref_note,
|
||||
TOKEN_NOTE : self.__obje_note, # illegal, but often there
|
||||
TOKEN_RNOTE : self.__obje_note, # illegal, but often there
|
||||
TOKEN__PRIM : self.__media_ref_prim, # LFT etc.
|
||||
TOKEN_IGNORE : self.__ignore,
|
||||
}
|
||||
@ -2728,7 +2720,6 @@ class GedcomParser(UpdateCallback):
|
||||
|
||||
self.attrs = list(amap.values())
|
||||
self.gedattr = dict([key, val] for val, key in amap.items())
|
||||
self.search_paths = []
|
||||
|
||||
def parse_gedcom_file(self, use_trans=False):
|
||||
"""
|
||||
@ -3021,6 +3012,9 @@ class GedcomParser(UpdateCallback):
|
||||
# FIXME: problem possibly caused by umlaut/accented character
|
||||
# in filename
|
||||
return (0, fullname)
|
||||
# strip off Windows drive letter, if present
|
||||
if len(fullname) > 3 and fullname[1] == ':':
|
||||
fullname = fullname[2:]
|
||||
# look where we found the '.ged', using the full path in fullname
|
||||
other = os.path.join(altpath, fullname)
|
||||
if os.path.isfile(other):
|
||||
@ -3029,15 +3023,15 @@ class GedcomParser(UpdateCallback):
|
||||
other = os.path.join(altpath, os.path.basename(fullname))
|
||||
if os.path.isfile(other):
|
||||
return (1, other)
|
||||
# I don't think the following code does anything because search_paths
|
||||
# is never initialized...
|
||||
if len(fullname) > 3:
|
||||
if fullname[1] == ':':
|
||||
fullname = fullname[2:]
|
||||
for path in self.search_paths:
|
||||
other = os.path.normpath("%s/%s" % (path, fullname))
|
||||
# lets try using the base path for relative media paths
|
||||
other = os.path.join(media_path(self.dbase), fullname)
|
||||
if os.path.isfile(other):
|
||||
return (1, other)
|
||||
return (1, fullname)
|
||||
# lets try using the base path for relative media paths with base name
|
||||
other = os.path.join(media_path(self.dbase),
|
||||
os.path.basename(fullname))
|
||||
if os.path.isfile(other):
|
||||
return (1, os.path.basename(fullname))
|
||||
return (0, fullname)
|
||||
|
||||
def __get_next_line(self):
|
||||
@ -5331,7 +5325,7 @@ class GedcomParser(UpdateCallback):
|
||||
sub_state.attr = None
|
||||
sub_state.filename = ""
|
||||
sub_state.title = ""
|
||||
sub_state.note = ""
|
||||
sub_state.media = Media()
|
||||
sub_state.level = state.level + 1
|
||||
sub_state.prim = ""
|
||||
|
||||
@ -5366,8 +5360,9 @@ class GedcomParser(UpdateCallback):
|
||||
# to allow import of references to URLs (especially for import from
|
||||
# geni.com), do not try to find the file if it is blatently a URL
|
||||
res = urlparse(sub_state.filename)
|
||||
if sub_state.filename != '' and \
|
||||
(res.scheme == '' or res.scheme == 'file'):
|
||||
if sub_state.filename != '' and (res.scheme == '' or
|
||||
len(res.scheme) == 1 or
|
||||
res.scheme == 'file'):
|
||||
(valid, path) = self.__find_file(sub_state.filename,
|
||||
self.dir_path)
|
||||
if not valid:
|
||||
@ -5376,7 +5371,7 @@ class GedcomParser(UpdateCallback):
|
||||
else:
|
||||
path = sub_state.filename
|
||||
# Multiple references to the same media silently drops the later
|
||||
# ones, even if title, notes etc. are different
|
||||
# ones, even if title, etc. are different
|
||||
photo_handle = self.media_map.get(path)
|
||||
if photo_handle is None:
|
||||
photo = Media()
|
||||
@ -5384,21 +5379,30 @@ class GedcomParser(UpdateCallback):
|
||||
if sub_state.title:
|
||||
photo.set_description(sub_state.title)
|
||||
else:
|
||||
photo.set_description(path)
|
||||
photo.set_description(path.replace('\\', '/'))
|
||||
full_path = os.path.abspath(path)
|
||||
if os.path.isfile(full_path):
|
||||
photo.set_mime_type(get_type(full_path))
|
||||
# deal with mime types
|
||||
value = mimetypes.guess_type(full_path)
|
||||
if value and value[0]: # found from filename
|
||||
photo.set_mime_type(value[0])
|
||||
else: # get from OBJE.FILE.FORM
|
||||
if '/' in sub_state.form: # already has expanded mime type
|
||||
photo.set_mime_type(sub_state.form)
|
||||
else:
|
||||
photo.set_mime_type(MIME_MAP.get(sub_state.form,
|
||||
'unknown'))
|
||||
if sub_state.note:
|
||||
photo.add_note(sub_state.note)
|
||||
value = mimetypes.types_map.get('.' + sub_state.form,
|
||||
_('unknown'))
|
||||
photo.set_mime_type(value)
|
||||
if sub_state.attr:
|
||||
photo.attribute_list.append(sub_state.attr)
|
||||
self.dbase.add_media(photo, self.trans)
|
||||
self.media_map[path] = photo.handle
|
||||
else:
|
||||
photo = self.dbase.get_media_from_handle(photo_handle)
|
||||
# copy notes to our media
|
||||
for note in sub_state.media.get_note_list():
|
||||
photo.add_note(note)
|
||||
self.dbase.commit_media(photo, self.trans)
|
||||
|
||||
if sub_state.prim == "Y":
|
||||
state.photo = photo.handle
|
||||
oref = MediaRef()
|
||||
@ -5458,21 +5462,6 @@ class GedcomParser(UpdateCallback):
|
||||
return
|
||||
state.filename = line.data
|
||||
|
||||
def __media_ref_note(self, line, state):
|
||||
"""
|
||||
+1 <<NOTE_STRUCTURE>> {0:M}
|
||||
|
||||
@param line: The current line in GedLine format
|
||||
@type line: GedLine
|
||||
@param state: The current state
|
||||
@type state: CurrentState
|
||||
"""
|
||||
obj = Media()
|
||||
self.__parse_note(line, obj, state)
|
||||
nlist = obj.get_note_list()
|
||||
if nlist:
|
||||
state.note = nlist[0]
|
||||
|
||||
def __media_ref_prim(self, line, state):
|
||||
"""
|
||||
+1 _PRIM <Y/N> {0:1}
|
||||
@ -6703,6 +6692,17 @@ class GedcomParser(UpdateCallback):
|
||||
|
||||
if state.media.get_path() == "":
|
||||
self.__add_msg(_("Filename omitted"), line, state)
|
||||
# deal with mime types
|
||||
value = mimetypes.guess_type(state.media.get_path())
|
||||
if value and value[0]: # found from filename
|
||||
state.media.set_mime_type(value[0])
|
||||
else: # get from OBJE.FILE.FORM
|
||||
if '/' in state.form: # already has expanded mime type
|
||||
state.media.set_mime_type(state.form)
|
||||
else:
|
||||
value = mimetypes.types_map.get('.' + state.form,
|
||||
_('unknown'))
|
||||
state.media.set_mime_type(value)
|
||||
# Add the default reference if no source has found
|
||||
self.__add_default_source(media)
|
||||
|
||||
@ -6738,21 +6738,21 @@ class GedcomParser(UpdateCallback):
|
||||
self.__skip_subordinate_levels(state.level + 1, state)
|
||||
return
|
||||
res = urlparse(line.data)
|
||||
if line.data != '' and (res.scheme == '' or res.scheme == 'file'):
|
||||
if line.data != '' and (res.scheme == '' or
|
||||
len(res.scheme) == 1 or res.scheme == 'file'):
|
||||
(file_ok, filename) = self.__find_file(line.data, self.dir_path)
|
||||
if state.form != "url":
|
||||
# Might not work if FORM doesn't precede FILE
|
||||
if not file_ok:
|
||||
self.__add_msg(_("Could not import %s") % filename, line,
|
||||
self.__add_msg(_("Could not import %s") % line.data, line,
|
||||
state)
|
||||
path = filename
|
||||
else:
|
||||
path = line.data
|
||||
|
||||
state.media.set_path(path)
|
||||
state.media.set_mime_type(get_type(path))
|
||||
if not state.media.get_description():
|
||||
state.media.set_description(path)
|
||||
state.media.set_description(path.replace('\\', '/'))
|
||||
|
||||
def __obje_title(self, line, state):
|
||||
"""
|
||||
@ -7827,6 +7827,9 @@ class GedcomParser(UpdateCallback):
|
||||
sub_state.pf = self.place_parser
|
||||
|
||||
self.__parse_level(sub_state, event_map, self.__undefined)
|
||||
if(description == 'Y' and event.date.is_empty() and
|
||||
event.type == EventType.BIRTH and not event.place):
|
||||
event.set_description(_("No Date Information"))
|
||||
state.msg += sub_state.msg
|
||||
|
||||
self.__add_place(event, sub_state)
|
||||
|
@ -20,16 +20,19 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
|
||||
"""
|
||||
This module is the base class for all geography view module
|
||||
"""
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.sgettext
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
import logging
|
||||
import gi
|
||||
from gi.repository import GLib
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -38,6 +41,7 @@ from gi.repository import GLib
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import OsmGpsMap as osmgpsmap
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -55,23 +59,22 @@ from gramps.gen.config import config
|
||||
from gramps.gui.editors import EditPlace, EditEvent, EditFamily, EditPerson
|
||||
from gramps.gui.selectors.selectplace import SelectPlace
|
||||
from gramps.gen.utils.file import media_path_full
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
|
||||
import gi
|
||||
gi.require_version('OsmGpsMap', '1.0')
|
||||
from gi.repository import OsmGpsMap as osmgpsmap
|
||||
from . import constants
|
||||
from .osmgps import OsmGps
|
||||
from .selectionlayer import SelectionLayer
|
||||
from .placeselection import PlaceSelection
|
||||
from .cairoprint import CairoPrintSave
|
||||
from .libkml import Kml
|
||||
gi.require_version('OsmGpsMap', '1.0')
|
||||
_ = glocale.translation.sgettext
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Set up logging
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
import logging
|
||||
_LOG = logging.getLogger("maps.geography")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -89,11 +92,6 @@ GEOGRAPHY_PATH = os.path.join(HOME_DIR, "maps")
|
||||
PLACE_REGEXP = re.compile('<span background="green">(.*)</span>')
|
||||
PLACE_STRING = '<span background="green">%s</span>'
|
||||
|
||||
# pylint: disable=unused-argument
|
||||
# pylint: disable=unused-variable
|
||||
# pylint: disable=no-member
|
||||
# pylint: disable=maybe-no-member
|
||||
|
||||
def _get_sign(value):
|
||||
"""
|
||||
return 1 if we have a negative number, 0 in other case
|
||||
@ -155,20 +153,13 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self.places_found = []
|
||||
self.select_fct = None
|
||||
self.geo_mainmap = None
|
||||
self.reloadtiles = None
|
||||
theme = Gtk.IconTheme.get_default()
|
||||
self.geo_mainmap = theme.load_surface('gramps-geo-mainmap', 48, 1,
|
||||
None, 0)
|
||||
self.geo_altmap = theme.load_surface('gramps-geo-altmap', 48, 1,
|
||||
None, 0)
|
||||
if (config.get('geography.map_service') in
|
||||
(constants.OPENSTREETMAP,
|
||||
constants.MAPS_FOR_FREE,
|
||||
constants.OPENCYCLEMAP,
|
||||
constants.OSM_PUBLIC_TRANSPORT,
|
||||
)):
|
||||
default_image = self.geo_mainmap
|
||||
else:
|
||||
default_image = self.geo_altmap
|
||||
self.sort = []
|
||||
self.geo_othermap = {}
|
||||
for ident in (EventType.BIRTH,
|
||||
EventType.DEATH,
|
||||
@ -190,11 +181,14 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self.changemap = None
|
||||
self.clearmap = None
|
||||
self.nbplaces = 0
|
||||
self.nbmarkers = 0
|
||||
self.place_without_coordinates = []
|
||||
|
||||
def add_bookmark(self, *menu):
|
||||
def add_bookmark(self, menu):
|
||||
"""
|
||||
Add the place to the bookmark
|
||||
"""
|
||||
dummy_menu = menu
|
||||
mlist = self.selected_handles()
|
||||
if mlist:
|
||||
self.bookmarks.add(mlist[0])
|
||||
@ -210,6 +204,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Add the place to the bookmark from the popup menu
|
||||
"""
|
||||
dummy_menu = menu
|
||||
if handle:
|
||||
self.uistate.set_active(handle, self.navigation_type())
|
||||
self.bookmarks.add(handle)
|
||||
@ -264,6 +259,9 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
self._config.save()
|
||||
|
||||
def clear_view(self):
|
||||
"""
|
||||
Clear the map: places, markers, tracks, messages...
|
||||
"""
|
||||
self.place_list = []
|
||||
self.remove_all_markers()
|
||||
self.remove_all_gps()
|
||||
@ -278,6 +276,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
is no need to store the database, since we will get the value
|
||||
from self.state.db
|
||||
"""
|
||||
dummy_dbse = dbse
|
||||
if self.active:
|
||||
self.bookmarks.redraw()
|
||||
self.build_tree()
|
||||
@ -317,12 +316,18 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
All geography views must have the same path for maps
|
||||
"""
|
||||
dummy_client = client
|
||||
dummy_cnxn_id = cnxn_id
|
||||
dummy_data = data
|
||||
config.set("geography.path", entry)
|
||||
|
||||
def set_zoom_when_center(self, client, cnxn_id, entry, data):
|
||||
"""
|
||||
All geography views must have the same zoom_when_center for maps
|
||||
"""
|
||||
dummy_client = client
|
||||
dummy_cnxn_id = cnxn_id
|
||||
dummy_data = data
|
||||
config.set("geography.zoom_when_center", int(entry))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -330,7 +335,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
# Map Menu
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def build_nav_menu(self, obj, event, lat, lon):
|
||||
def build_nav_menu(self, osm, event, lat, lon):
|
||||
"""
|
||||
Builds the menu for actions on the map.
|
||||
"""
|
||||
@ -384,9 +389,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
menu.append(add_item)
|
||||
|
||||
map_name = constants.MAP_TITLE[config.get("geography.map_service")]
|
||||
title = _("Replace '%(map)s' by =>") % {
|
||||
'map' : map_name
|
||||
}
|
||||
title = _("Replace '%(map)s' by =>") % {'map' : map_name}
|
||||
add_item = Gtk.MenuItem(label=title)
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
@ -404,8 +407,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
changemap.append(changemapitem)
|
||||
|
||||
reload_text = _("Reload all visible tiles for '%(map)s'.") % {
|
||||
'map' : map_name
|
||||
}
|
||||
'map' : map_name}
|
||||
self.reloadtiles = Gtk.MenuItem(label=reload_text)
|
||||
reloadtiles = self.reloadtiles
|
||||
reloadtiles.connect("activate", self.reload_visible_tiles)
|
||||
@ -414,8 +416,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
menu.append(reloadtiles)
|
||||
|
||||
clear_text = _("Clear the '%(map)s' tiles cache.") % {
|
||||
'map' : map_name
|
||||
}
|
||||
'map' : map_name}
|
||||
self.clearmap = Gtk.MenuItem(label=clear_text)
|
||||
clearmap = self.clearmap
|
||||
clearmap.connect("activate", self.clear_map,
|
||||
@ -433,12 +434,14 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
We need to reload all visible tiles for the current map
|
||||
"""
|
||||
dummy_menu = menu
|
||||
self.reload_tiles()
|
||||
|
||||
def clear_map(self, menu, the_map):
|
||||
"""
|
||||
We need to clean the tiles cache for the current map
|
||||
"""
|
||||
dummy_menu = menu
|
||||
import shutil
|
||||
|
||||
path = "%s%c%s" % (config.get('geography.path'), os.sep, the_map)
|
||||
@ -455,6 +458,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Center the map at the new position then save it.
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
self.osm.set_center_and_zoom(lat, lon,
|
||||
config.get("geography.zoom_when_center"))
|
||||
self.save_center(lat, lon)
|
||||
@ -474,15 +479,13 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
for mark in self.sort:
|
||||
# as we are not precise with our hand, reduce the precision
|
||||
# depending on the zoom.
|
||||
precision = {
|
||||
1 : '%3.0f', 2 : '%3.1f', 3 : '%3.1f', 4 : '%3.1f',
|
||||
precision = {1 : '%3.0f', 2 : '%3.1f', 3 : '%3.1f', 4 : '%3.1f',
|
||||
5 : '%3.2f', 6 : '%3.2f', 7 : '%3.2f', 8 : '%3.3f',
|
||||
9 : '%3.3f', 10 : '%3.3f', 11 : '%3.3f', 12 : '%3.3f',
|
||||
13 : '%3.3f', 14 : '%3.4f', 15 : '%3.4f', 16 : '%3.4f',
|
||||
17 : '%3.4f', 18 : '%3.4f'
|
||||
}.get(config.get("geography.zoom"), '%3.1f')
|
||||
shift = {
|
||||
1 : 5.0, 2 : 5.0, 3 : 3.0,
|
||||
shift = {1 : 5.0, 2 : 5.0, 3 : 3.0,
|
||||
4 : 1.0, 5 : 0.5, 6 : 0.3, 7 : 0.15,
|
||||
8 : 0.06, 9 : 0.03, 10 : 0.015,
|
||||
11 : 0.005, 12 : 0.003, 13 : 0.001,
|
||||
@ -537,6 +540,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Add a new marker
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
mapservice = config.get('geography.map_service')
|
||||
if (mapservice in (constants.OPENSTREETMAP,
|
||||
constants.OPENSTREETMAP_RENDERER)):
|
||||
@ -622,7 +627,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Create a list of places without coordinates.
|
||||
"""
|
||||
if not [gid, place] in self.place_without_coordinates:
|
||||
if [gid, place] not in self.place_without_coordinates:
|
||||
self.place_without_coordinates.append([gid, place])
|
||||
self.without += 1
|
||||
|
||||
@ -641,11 +646,11 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
last = ""
|
||||
current = ""
|
||||
differtype = False
|
||||
#savetype = None
|
||||
lat = 0.0
|
||||
lon = 0.0
|
||||
icon = None
|
||||
count = 0
|
||||
colour = None
|
||||
self.uistate.set_busy_cursor(True)
|
||||
_LOG.debug("%s", time.strftime("start create_marker : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
@ -676,7 +681,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
differtype = True
|
||||
if lat != 0.0 and lon != 0.0:
|
||||
self.add_marker(None, None, lat, lon, icon, differtype,
|
||||
count, color=mark[12])
|
||||
count, color=colour)
|
||||
self._set_center_and_zoom()
|
||||
_LOG.debug("%s", time.strftime(" stop create_marker : "
|
||||
"%a %d %b %Y %H:%M:%S", time.gmtime()))
|
||||
@ -704,8 +709,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
We zoom in until at least one marker missing.
|
||||
"""
|
||||
if ((self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon))
|
||||
and lvl < 18):
|
||||
and self._visible_marker(p2lat, p2lon)) and lvl < 18):
|
||||
lvl += 1
|
||||
self.osm.set_zoom(lvl)
|
||||
GLib.timeout_add(int(50), self._autozoom_in, lvl,
|
||||
@ -719,8 +723,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
We zoom out until all markers visible.
|
||||
"""
|
||||
if (not (self._visible_marker(p1lat, p1lon)
|
||||
and self._visible_marker(p2lat, p2lon))
|
||||
and lvl > 1):
|
||||
and self._visible_marker(p2lat, p2lon)) and lvl > 1):
|
||||
lvl -= 1
|
||||
self.osm.set_zoom(lvl)
|
||||
GLib.timeout_add(int(50), self._autozoom_out, lvl,
|
||||
@ -764,54 +767,16 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
The following is too complex. In some case, all markers are not present.
|
||||
"""
|
||||
# Select the center of the map and the zoom
|
||||
signminlon = _get_sign(self.minlon)
|
||||
signminlat = _get_sign(self.minlat)
|
||||
signmaxlon = _get_sign(self.maxlon)
|
||||
signmaxlat = _get_sign(self.maxlat)
|
||||
current = osmgpsmap.MapPoint.new_degrees(self.minlat, self.minlon)
|
||||
self.end_selection = current
|
||||
current = osmgpsmap.MapPoint.new_degrees(self.maxlat, self.maxlon)
|
||||
self.begin_selection = current
|
||||
if signminlon == signmaxlon:
|
||||
maxlong = abs(abs(self.minlon) - abs(self.maxlon))
|
||||
else:
|
||||
maxlong = abs(abs(self.minlon) + abs(self.maxlon))
|
||||
if signminlat == signmaxlat:
|
||||
maxlat = abs(abs(self.minlat) - abs(self.maxlat))
|
||||
else:
|
||||
maxlat = abs(abs(self.minlat) + abs(self.maxlat))
|
||||
latit = longt = 0.0
|
||||
for mark in self.sort:
|
||||
if signminlat == signmaxlat:
|
||||
if signminlat == 1:
|
||||
latit = self.minlat+self.centerlat
|
||||
else:
|
||||
latit = self.maxlat-self.centerlat
|
||||
elif self.maxlat > self.centerlat:
|
||||
latit = self.maxlat-self.centerlat
|
||||
else:
|
||||
latit = self.minlat+self.centerlat
|
||||
if signminlon == signmaxlon:
|
||||
if signminlon == 1:
|
||||
longt = self.minlon+self.centerlon
|
||||
else:
|
||||
longt = self.maxlon-self.centerlon
|
||||
elif self.maxlon > self.centerlon:
|
||||
longt = self.maxlon-self.centerlon
|
||||
else:
|
||||
longt = self.minlon+self.centerlon
|
||||
# all maps: 0.0 for longitude and latitude means no location.
|
||||
if latit == longt == 0.0:
|
||||
latit = longt = 0.00000001
|
||||
self.latit = latit
|
||||
self.longt = longt
|
||||
if config.get("geography.lock"):
|
||||
self.osm.set_center_and_zoom(config.get("geography.center-lat"),
|
||||
config.get("geography.center-lon"),
|
||||
config.get("geography.zoom"))
|
||||
else:
|
||||
self._autozoom()
|
||||
self.save_center(self.latit, self.longt)
|
||||
config.set("geography.zoom", self.osm.props.zoom)
|
||||
self.end_selection = None
|
||||
|
||||
@ -824,8 +789,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
dbstate.db.get_family_from_handle(ref_handle)
|
||||
for (ref_type, ref_handle) in
|
||||
dbstate.db.find_backlink_handles(event.handle)
|
||||
if ref_type == 'Family'
|
||||
]
|
||||
if ref_type == 'Family']
|
||||
fnam = mnam = _("Unknown")
|
||||
if family_list:
|
||||
for family in family_list:
|
||||
@ -855,7 +819,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
object_handle = media_ref.get_reference_handle()
|
||||
media_obj = self.dbstate.db.get_media_from_handle(object_handle)
|
||||
path = media_obj.get_path()
|
||||
name, extension = os.path.splitext(path)
|
||||
dummy_name, extension = os.path.splitext(path)
|
||||
if extension == ".kml":
|
||||
path = media_path_full(self.dbstate.db, path)
|
||||
if os.path.isfile(path):
|
||||
@ -870,6 +834,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Print or save the view that is currently shown
|
||||
"""
|
||||
dummy_obj = obj
|
||||
if Gtk.MAJOR_VERSION == 3 and Gtk.MINOR_VERSION < 11:
|
||||
from gramps.gui.dialog import WarningDialog
|
||||
WarningDialog(
|
||||
@ -893,6 +858,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Center the map at the marker position
|
||||
"""
|
||||
dummy_lat = lat
|
||||
dummy_lon = lon
|
||||
self.set_center(menu, event, float(mark[3]), float(mark[4]))
|
||||
|
||||
def add_place_bubble_message(self, event, lat, lon, marks,
|
||||
@ -900,6 +867,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Create the place menu of a marker
|
||||
"""
|
||||
dummy_marks = marks
|
||||
add_item = Gtk.MenuItem()
|
||||
add_item.show()
|
||||
menu.append(add_item)
|
||||
@ -927,10 +895,12 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected place at the marker position
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
self.mark = mark
|
||||
place = self.dbstate.db.get_place_from_gramps_id(self.mark[9])
|
||||
parent_list = place.get_placeref_list()
|
||||
if len(parent_list) > 0:
|
||||
if parent_list:
|
||||
parent = parent_list[0].ref
|
||||
else:
|
||||
parent = None
|
||||
@ -942,6 +912,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected person at the marker position
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
dummy_lat = lat
|
||||
dummy_lon = lon
|
||||
_LOG.debug("edit_person : %s", mark[8])
|
||||
# need to add code here to edit the person.
|
||||
person = self.dbstate.db.get_person_from_gramps_id(mark[8])
|
||||
@ -954,6 +928,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected family at the marker position
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
dummy_lat = lat
|
||||
dummy_lon = lon
|
||||
_LOG.debug("edit_family : %s", mark[11])
|
||||
family = self.dbstate.db.get_family_from_gramps_id(mark[11])
|
||||
try:
|
||||
@ -965,6 +943,9 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected event at the marker position
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_lat = lat
|
||||
dummy_lon = lon
|
||||
_LOG.debug("edit_event : %s", mark[10])
|
||||
event = self.dbstate.db.get_event_from_gramps_id(mark[10])
|
||||
try:
|
||||
@ -977,6 +958,8 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
Add a new place using longitude and latitude of location centered
|
||||
on the map
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
self.select_fct = PlaceSelection(self.uistate, self.dbstate, self.osm,
|
||||
self.selection_layer, self.place_list,
|
||||
lat, lon, self.__add_place)
|
||||
@ -990,6 +973,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
3 - create the place(s) with name and title found in the kml marker.
|
||||
|
||||
"""
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
dummy_lat = lat
|
||||
dummy_lon = lon
|
||||
# Ask for the kml file
|
||||
filtering = Gtk.FileFilter()
|
||||
filtering.add_pattern("*.kml")
|
||||
@ -1046,13 +1033,13 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
If we have a place history, we must show all places to avoid an empty
|
||||
place selection in the PlaceSelection.
|
||||
"""
|
||||
if self.uistate.get_active('Place'):
|
||||
self._createmap(None)
|
||||
dummy_menu = menu
|
||||
dummy_event = event
|
||||
selector = SelectPlace(self.dbstate, self.uistate, [])
|
||||
place = selector.run()
|
||||
if place:
|
||||
parent_list = place.get_placeref_list()
|
||||
if len(parent_list) > 0:
|
||||
if parent_list:
|
||||
parent = parent_list[0].ref
|
||||
else:
|
||||
parent = None
|
||||
@ -1072,6 +1059,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
gids = gids + ", " + plce.gramps_id
|
||||
if nb_places > 1:
|
||||
from gramps.gui.dialog import WarningDialog
|
||||
ptitle = place_title
|
||||
WarningDialog(
|
||||
_('You have at least two places with the same title.'),
|
||||
_("The title of the places is:\n%(title)s\n"
|
||||
@ -1079,13 +1067,11 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"You should eiher rename the places or merge them.\n\n"
|
||||
"%(bold_start)s"
|
||||
"I can't proceed with your request"
|
||||
"%(bold_end)s.\n") % {
|
||||
'bold_start' : '<b>',
|
||||
"%(bold_end)s.\n") % {'bold_start' : '<b>',
|
||||
'bold_end' : '</b>',
|
||||
'title': '<b>' + place_title + '</b>',
|
||||
'title': '<b>' + ptitle + '</b>',
|
||||
'gid': gids},
|
||||
parent=self.uistate.window
|
||||
)
|
||||
parent=self.uistate.window)
|
||||
else:
|
||||
self.mark = [None, None, None, None, None, None, None,
|
||||
None, None, place.gramps_id, None, None]
|
||||
@ -1150,6 +1136,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Edit the selected place at the marker position
|
||||
"""
|
||||
dummy_parent = parent
|
||||
self.select_fct.close()
|
||||
place = self.dbstate.db.get_place_from_gramps_id(self.mark[9])
|
||||
place.set_latitude(str(plat))
|
||||
@ -1195,6 +1182,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Do we need to lock the zoom and position ?
|
||||
"""
|
||||
dummy_client = client
|
||||
dummy_cnxn_id = cnxn_id
|
||||
dummy_entry = entry
|
||||
dummy_data = data
|
||||
if config.get("geography.lock"):
|
||||
config.set("geography.lock", False)
|
||||
self._set_center_and_zoom()
|
||||
@ -1206,6 +1197,10 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
We asked to change the crosshair.
|
||||
"""
|
||||
dummy_client = client
|
||||
dummy_cnxn_id = cnxn_id
|
||||
dummy_entry = entry
|
||||
dummy_data = data
|
||||
if config.get("geography.show_cross"):
|
||||
config.set("geography.show_cross", False)
|
||||
else:
|
||||
@ -1240,27 +1235,28 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
grid.set_row_spacing(6)
|
||||
self.path_entry = Gtk.Entry()
|
||||
configdialog.add_path_box(grid,
|
||||
_('Where to save the tiles for offline mode.'),
|
||||
0, self.path_entry, config.get('geography.path'),
|
||||
_('Where to save the tiles for offline'
|
||||
' mode.'),
|
||||
0, self.path_entry,
|
||||
config.get('geography.path'),
|
||||
self.set_tilepath, self.select_tilepath)
|
||||
configdialog.add_text(grid,
|
||||
_('If you have no more space in your file system.'
|
||||
'You can remove all tiles placed in the above path.\n'
|
||||
'Be careful! If you have no internet, you\'ll get no map.'),
|
||||
' You can remove all tiles placed in the above'
|
||||
' path.\nBe careful! If you have no internet,'
|
||||
' you\'ll get no map.'),
|
||||
2, line_wrap=False)
|
||||
configdialog.add_slider(grid,
|
||||
_('Zoom used when centering'),
|
||||
configdialog.add_slider(grid, _('Zoom used when centering'),
|
||||
3, 'geography.zoom_when_center',
|
||||
(2, 16))
|
||||
configdialog.add_slider(grid,
|
||||
_('The maximum number of places to show'),
|
||||
configdialog.add_slider(grid, _('The maximum number of places to show'),
|
||||
4, 'geography.max_places',
|
||||
(1000, 10000))
|
||||
configdialog.add_checkbox(grid,
|
||||
_('Use keypad for shortcuts :\n'
|
||||
'Either we choose the + and - from the keypad if we '
|
||||
'select this,\n'
|
||||
'or we use the characters from the keyboard.'),
|
||||
_('Use keypad for shortcuts :\nEither we '
|
||||
'choose the + and - from the keypad if we '
|
||||
'select this,\nor we use the characters '
|
||||
'from the keyboard.'),
|
||||
5, 'geography.use-keypad',
|
||||
extra_callback=self.update_shortcuts)
|
||||
return _('The map'), grid
|
||||
@ -1269,6 +1265,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Save the tile path in the config section.
|
||||
"""
|
||||
dummy_obj = obj
|
||||
if self.path_entry.get_text().strip():
|
||||
config.set('geography.path', self.path_entry.get_text())
|
||||
else:
|
||||
@ -1278,6 +1275,7 @@ class GeoGraphyView(OsmGps, NavigationView):
|
||||
"""
|
||||
Call a file chooser selection box to select the tile path.
|
||||
"""
|
||||
dummy_obj = obj
|
||||
selected_dir = Gtk.FileChooserDialog(
|
||||
_("Select tile cache directory for offline mode"),
|
||||
action=Gtk.FileChooserAction.SELECT_FOLDER,
|
||||
|
@ -48,6 +48,7 @@ from gi.repository import Pango, PangoCairo
|
||||
# Gramps Modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.constfunc import is_quartz
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -131,6 +132,8 @@ class MessageLayer(GObject.GObject, osmgpsmap.MapLayer):
|
||||
ctx.save()
|
||||
ctx.move_to(100, 5)
|
||||
layout = PangoCairo.create_layout(ctx)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(layout.get_context(), 72)
|
||||
layout.set_font_description(descr)
|
||||
layout.set_indent(Pango.SCALE * 0)
|
||||
layout.set_alignment(Pango.Alignment.LEFT)
|
||||
|
@ -181,7 +181,7 @@ class DbTestClassBase(object):
|
||||
('family-delete', ['0000000600000006']),
|
||||
('person-update', ['0000000100000001', '0000000200000002',
|
||||
'0000000100000001', '0000000200000002']),
|
||||
('family-update', ['0000000500000005'])]
|
||||
('family-update', ['0000000500000005', '0000000500000005'])]
|
||||
self.assertEqual(sigs, self.sigs, msg="merge families")
|
||||
fam_cnt = self.db.get_number_of_families()
|
||||
pers_cnt = self.db.get_number_of_people()
|
||||
@ -222,7 +222,7 @@ class DbTestClassBase(object):
|
||||
('person-update', ['0000000200000002', '0000000100000001',
|
||||
'0000000200000002', '0000000100000001']),
|
||||
('family-update', ['0000000500000005', '0000000600000006',
|
||||
'0000000600000006'])]
|
||||
'0000000600000006', '0000000500000005'])]
|
||||
self.assertEqual(sigs, self.sigs, msg="undo merge signals check")
|
||||
fam_cnt = self.db.get_number_of_families()
|
||||
pers_cnt = self.db.get_number_of_people()
|
||||
@ -303,7 +303,7 @@ class DbTestClassBase(object):
|
||||
('family-delete', ['0000000600000006']),
|
||||
('person-update', ['0000000100000001', '0000000200000002',
|
||||
'0000000100000001', '0000000200000002']),
|
||||
('family-update', ['0000000500000005'])]
|
||||
('family-update', ['0000000500000005', '0000000500000005'])]
|
||||
self.assertEqual(sigs, self.sigs, msg="merge families")
|
||||
fam_cnt = self.db.get_number_of_families()
|
||||
pers_cnt = self.db.get_number_of_people()
|
||||
|
@ -193,6 +193,7 @@ class DuplicatePeopleTool(tool.Tool, ManagedWindow):
|
||||
index = 0
|
||||
males = {}
|
||||
females = {}
|
||||
self.map = {}
|
||||
|
||||
length = self.db.get_number_of_people()
|
||||
|
||||
|
@ -79,6 +79,7 @@ class SortEvents(PluginWindows.ToolManagedWindowBatch):
|
||||
"""
|
||||
The name of the initial menu tab.
|
||||
"""
|
||||
self.setup_configs('interface.sortevents', 500, 350)
|
||||
return _("Options")
|
||||
|
||||
def run(self):
|
||||
|
@ -259,6 +259,8 @@ class PersonBoxWidgetCairo(_PersonWidgetBase):
|
||||
alh = self.get_allocated_height()
|
||||
if not self.textlayout:
|
||||
self.textlayout = PangoCairo.create_layout(context)
|
||||
if is_quartz():
|
||||
PangoCairo.context_set_resolution(self.textlayout.get_context(), 72)
|
||||
# The following seems like it Should work, but it doesn't
|
||||
# font_desc = self.get_style_context().get_property(
|
||||
# "font", Gtk.StateFlags.NORMAL)
|
||||
|
@ -156,6 +156,8 @@ class RelationshipView(NavigationView):
|
||||
self.use_shade = self._config.get('preferences.relation-shade')
|
||||
self.theme = self._config.get('preferences.relation-display-theme')
|
||||
self.toolbar_visible = config.get('interface.toolbar-on')
|
||||
self.age_precision = config.get('preferences.age-display-precision')
|
||||
|
||||
|
||||
def get_handle_from_gramps_id(self, gid):
|
||||
"""
|
||||
@ -720,29 +722,30 @@ class RelationshipView(NavigationView):
|
||||
if death:
|
||||
death_date = death.get_date_object()
|
||||
if (death_date and death_date.get_valid()):
|
||||
age = death_date - birth_date
|
||||
subgrid.attach(widgets.BasicLabel(_("%s:") % death_title),
|
||||
1, 2, 1, 1)
|
||||
deathwidget = widgets.BasicLabel("%s (%s)" %
|
||||
(self.format_event(death), age),
|
||||
age = (death_date - birth_date).format(
|
||||
precision=self.age_precision)
|
||||
subgrid.attach(widgets.BasicLabel(
|
||||
_("%s:") % death_title), 1, 2, 1, 1)
|
||||
deathwidget = widgets.BasicLabel(
|
||||
"%s (%s)" % (self.format_event(death), age),
|
||||
Pango.EllipsizeMode.END)
|
||||
deathwidget.set_selectable(True)
|
||||
subgrid.attach(deathwidget,
|
||||
2, 2, 1, 1)
|
||||
subgrid.attach(deathwidget, 2, 2, 1, 1)
|
||||
showed_death = True
|
||||
if not showed_death:
|
||||
age = Today() - birth_date
|
||||
age = (Today() - birth_date).format(
|
||||
precision=self.age_precision)
|
||||
if probably_alive(person, self.dbstate.db):
|
||||
subgrid.attach(widgets.BasicLabel(_("%s:") % _("Alive")),
|
||||
1, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel("(%s)" % age, Pango.EllipsizeMode.END),
|
||||
2, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel(
|
||||
_("%s:") % _("Alive")), 1, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel(
|
||||
"(%s)" % age, Pango.EllipsizeMode.END), 2, 2, 1, 1)
|
||||
else:
|
||||
subgrid.attach(widgets.BasicLabel(_("%s:") % _("Death")),
|
||||
1, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel("%s (%s)" % (_("unknown"), age),
|
||||
Pango.EllipsizeMode.END),
|
||||
2, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel(
|
||||
_("%s:") % _("Death")), 1, 2, 1, 1)
|
||||
subgrid.attach(widgets.BasicLabel(
|
||||
"%s (%s)" % (_("unknown"), age),
|
||||
Pango.EllipsizeMode.END), 2, 2, 1, 1)
|
||||
showed_death = True
|
||||
|
||||
if not showed_death:
|
||||
|
@ -26,10 +26,6 @@ environ['PANGO_SYSCONFDIR'] = bundle_etc
|
||||
environ['PANGO_LIBDIR'] = bundle_lib
|
||||
environ['GDK_PIXBUF_MODULE_FILE'] = join(bundle_lib, 'gdk-pixbuf-2.0',
|
||||
'2.10.0', 'loaders.cache')
|
||||
if int(release().split('.')[0]) > 10:
|
||||
environ['GTK_IM_MODULE_FILE'] = join(bundle_etc, 'gtk-3.0',
|
||||
'gtk.immodules')
|
||||
|
||||
environ['GI_TYPELIB_PATH'] = join(bundle_lib, 'girepository-1.0')
|
||||
environ['GVBINDIR'] = join(bundle_lib, 'graphviz')
|
||||
environ['ENCHANT_MODULE_PATH'] = join(bundle_lib, 'enchant')
|
||||
|
65
po/cs.po
65
po/cs.po
@ -2,7 +2,7 @@
|
||||
# This file is distributed under the same license as the Gramps package.
|
||||
# Radek Malcic <malcic@atlas.cz>, 2004
|
||||
# Jiří Pejchal <jiri.pejchal@gmail.com>, 2005
|
||||
# Zdeněk Hataš <zdenek.hatas@gmail.com>, 2006 - 2018
|
||||
# Zdeněk Hataš <zdenek.hatas@gmail.com>, 2006 - 2019
|
||||
#
|
||||
# Common terms and translations:
|
||||
# ancestor předek
|
||||
@ -37,8 +37,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gramps 3.3.x\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-07-24 14:13+0100\n"
|
||||
"PO-Revision-Date: 2018-12-22 16:24+0100\n"
|
||||
"POT-Creation-Date: 2018-12-26 11:20-0600\n"
|
||||
"PO-Revision-Date: 2019-01-11 18:01+0100\n"
|
||||
"Last-Translator: Zdeněk Hataš <zdenek.hatas@gmail.com>\n"
|
||||
"Language-Team: Czech <Czech <gnome-cs-list@gnome.org>>\n"
|
||||
"Language: cs\n"
|
||||
@ -899,6 +899,15 @@ msgstr ""
|
||||
"uložit jako webové stránky. Celou databázi, vybrané rodiny nebo jedince lze "
|
||||
"exportovat do kolekce stránek připravených k publikaci na webu."
|
||||
|
||||
#: ../data/tips.xml.in.h:46
|
||||
msgid ""
|
||||
"<b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps "
|
||||
"is to use the Gramps bug tracking system at https://gramps-project.org/bugs/"
|
||||
msgstr ""
|
||||
"<b>Hlášení chyb v Gramps</b><br/>Nejlepší způsob, jak nahlásit chybu v "
|
||||
"Gramps, je použít systém sledování chyb na stránce https://gramps-project."
|
||||
"org/bugs/"
|
||||
|
||||
#: ../data/tips.xml.in.h:46
|
||||
msgid ""
|
||||
"<b>Reporting Bugs in Gramps</b><br/>The best way to report a bug in Gramps "
|
||||
@ -3803,6 +3812,15 @@ msgstr "Různé filtry"
|
||||
msgid "No description"
|
||||
msgstr "Bez popisu"
|
||||
|
||||
#. more references to a filter than expected
|
||||
#: ../gramps/gen/filters/rules/_rule.py:94
|
||||
msgid "The filter definition contains a loop."
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/gen/filters/rules/_rule.py:95
|
||||
msgid "One rule references another which eventually references the first."
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/gen/filters/rules/citation/_allcitations.py:45
|
||||
msgid "Every citation"
|
||||
msgstr "Všechny citace"
|
||||
@ -18127,6 +18145,10 @@ msgstr "Zkopírovat vše"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Zobrazit data mimo filtr"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Generate_Book_dialog"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Dostupné knihy"
|
||||
@ -18450,6 +18472,10 @@ msgstr "výchozí"
|
||||
msgid "Document Styles"
|
||||
msgstr "Styly dokumentu"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Document_Styles_dialog"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Nový styl"
|
||||
@ -18476,6 +18502,10 @@ msgstr "Vyberte styl"
|
||||
msgid "Style editor"
|
||||
msgstr "Editor stylů"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Style_editor_dialog"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -18597,6 +18627,10 @@ msgstr "Vybrat mediální objekt"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr "Select_Child_selector"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Select_Person_selector"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
msgid "manual|Select_Father_selector"
|
||||
msgstr "Select_Father_selector"
|
||||
@ -18621,10 +18655,18 @@ msgstr "Repositories"
|
||||
msgid "Select Repository"
|
||||
msgstr "Vybrat archiv"
|
||||
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Select_Repository_selector"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
msgid "Select Source"
|
||||
msgstr "Vybrat pramen"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:76
|
||||
msgid "manual|Select_Source_selector"
|
||||
msgstr "Select_Source_selector"
|
||||
|
||||
#: ../gramps/gui/spell.py:92
|
||||
msgid "Off"
|
||||
msgstr "Vyp"
|
||||
@ -19600,6 +19642,10 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Informace o průběhu"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Reorder_Relationships_dialog"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Přeskupit vazby"
|
||||
@ -21789,6 +21835,10 @@ msgstr "EMAIL"
|
||||
msgid "WWW"
|
||||
msgstr "WWW"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1438
|
||||
msgid "Writing media"
|
||||
msgstr "Zapisují se média"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1570
|
||||
msgid "GEDCOM Export failed"
|
||||
msgstr "Export GEDCOM selhal"
|
||||
@ -23416,6 +23466,10 @@ msgstr "Upravit vybranou poznámku k úkolu"
|
||||
msgid "Add a new To Do note"
|
||||
msgstr "Přidat novou poznámku k úkolu"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todo.py:201
|
||||
msgid "First select the object to which you want to attach a note"
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/plugins/gramplet/todogramplet.py:149
|
||||
msgid "Unattached"
|
||||
msgstr "Nepřipojen"
|
||||
@ -32649,6 +32703,10 @@ msgstr "Správce médií..."
|
||||
msgid "Media Manager"
|
||||
msgstr "Správce médií"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:91
|
||||
msgid "Help"
|
||||
msgstr "Nápověda"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:97
|
||||
#: ../gramps/plugins/webreport/basepage.py:1483
|
||||
#: ../gramps/plugins/webreport/basepage.py:1606
|
||||
@ -40080,3 +40138,4 @@ msgstr "Správce médií"
|
||||
|
||||
#~ msgid "Password:"
|
||||
#~ msgstr "Heslo:"
|
||||
|
||||
|
1
po/da.po
1
po/da.po
@ -37389,3 +37389,4 @@ msgstr "Mediehåndtering"
|
||||
|
||||
#~ msgid "Applying Person Filter..."
|
||||
#~ msgstr "Anvender Personfilter..."
|
||||
|
||||
|
45
po/fi.po
45
po/fi.po
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Gramps_5_fi\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-11-29 06:08+0200\n"
|
||||
"PO-Revision-Date: 2018-11-29 06:48+0200\n"
|
||||
"POT-Creation-Date: 2019-01-02 11:13+0200\n"
|
||||
"PO-Revision-Date: 2019-01-05 07:31+0200\n"
|
||||
"Last-Translator: Matti Niemelä <niememat@gmail.com>\n"
|
||||
"Language-Team: suomi <niememat@gmail.com>\n"
|
||||
"Language: fi\n"
|
||||
@ -19292,6 +19292,11 @@ msgstr "Kopioi kaikki"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Valitse tiedot joihin suodin on kohdistunut"
|
||||
|
||||
# 20181220 OK
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Tuota_kirja"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Valmiit kirjamallit"
|
||||
@ -19630,6 +19635,11 @@ msgstr "oletus"
|
||||
msgid "Document Styles"
|
||||
msgstr "Asiakirjatyylit"
|
||||
|
||||
# 20181220 ok
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Asiakirjatyylit"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Uusi tyyli"
|
||||
@ -19653,11 +19663,17 @@ msgstr "Puuttuvat tiedot"
|
||||
msgid "Select a style"
|
||||
msgstr "Valitse tyyli"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:226
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:298
|
||||
# 20181220
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:233
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:308
|
||||
msgid "Style editor"
|
||||
msgstr "Tyylimuokkain"
|
||||
|
||||
# 20181220 ok
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Tyylimuokkain"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -19807,6 +19823,11 @@ msgstr "Valitse mediatiedosto"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr "Valitse_lapsi_ikkuna"
|
||||
|
||||
# 20190104
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Valitse_henkil.C3.B6"
|
||||
|
||||
# WIKI_HELP_SEC osa1
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
#: ../gramps/gui/selectors/selectperson.py:64
|
||||
@ -19841,6 +19862,11 @@ msgstr "Arkistot"
|
||||
msgid "Select Repository"
|
||||
msgstr "Valitse arkisto"
|
||||
|
||||
# 20190104
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Valitse_arkisto"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
#: ../gramps/gui/selectors/selectsource.py:59
|
||||
msgid "Select Source"
|
||||
@ -20867,6 +20893,11 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Edistymistietoja"
|
||||
|
||||
# 20181220
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Järjestä_suhteet_uudelleen"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Järjestä uudelleen suhteet"
|
||||
@ -34633,6 +34664,11 @@ msgstr "Median_hallinta..."
|
||||
msgid "Media Manager"
|
||||
msgstr "Medianhallinta"
|
||||
|
||||
# 20181220
|
||||
#: ../gramps/plugins/tool/mediamanager.py:91
|
||||
msgid "Help"
|
||||
msgstr "_Ohjeet"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:97
|
||||
#: ../gramps/plugins/webreport/basepage.py:1483
|
||||
#: ../gramps/plugins/webreport/basepage.py:1606
|
||||
@ -39842,3 +39878,4 @@ msgstr ""
|
||||
|
||||
#~ msgid " "
|
||||
#~ msgstr " "
|
||||
|
||||
|
3881
po/gramps.pot
3881
po/gramps.pot
File diff suppressed because it is too large
Load Diff
96
po/it.po
96
po/it.po
@ -1,6 +1,6 @@
|
||||
# Italian translation for GRAMPS
|
||||
# This file is distributed under the same license as the Gramps package.
|
||||
# Copyright (C) 2001-2013 the Gramps Project
|
||||
# Copyright (C) 2001-2019 the Gramps Project
|
||||
#
|
||||
# Common and noteworthy translations:
|
||||
#
|
||||
@ -57,13 +57,13 @@
|
||||
#
|
||||
# Marco Molteni <molter@gufi.org>, 2001-2002;.
|
||||
# Lorenzo Cappelletti <lorenzo.cappelletti@email.it>, 2003.
|
||||
# Luigi Toscano <luigi.toscano@tiscali.it>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
|
||||
# Luigi Toscano <luigi.toscano@tiscali.it>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gramps\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-05-20 09:31-0500\n"
|
||||
"PO-Revision-Date: 2018-07-15 16:38+0100\n"
|
||||
"POT-Creation-Date: 2018-12-26 11:20-0600\n"
|
||||
"PO-Revision-Date: 2019-02-10 16:07+0100\n"
|
||||
"Last-Translator: Luigi Toscano <luigi.toscano@tiscali.it>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
@ -3734,6 +3734,16 @@ msgstr "Altri filtri"
|
||||
msgid "No description"
|
||||
msgstr "Nessuna descrizione"
|
||||
|
||||
#. more references to a filter than expected
|
||||
#: ../gramps/gen/filters/rules/_rule.py:94
|
||||
#, fuzzy
|
||||
msgid "The filter definition contains a loop."
|
||||
msgstr "Definizione del formato non corretta"
|
||||
|
||||
#: ../gramps/gen/filters/rules/_rule.py:95
|
||||
msgid "One rule references another which eventually references the first."
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/gen/filters/rules/citation/_allcitations.py:45
|
||||
msgid "Every citation"
|
||||
msgstr "Ogni citazione"
|
||||
@ -9599,7 +9609,7 @@ msgstr "Sopra"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/treedoc.py:69
|
||||
msgid "Below"
|
||||
msgstr "Sotto:"
|
||||
msgstr "Sotto"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/treedoc.py:70
|
||||
msgid "Not shown"
|
||||
@ -9755,7 +9765,7 @@ msgstr "Stile dei bordi"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/treedoc.py:187
|
||||
msgid "Style of the edges between nodes."
|
||||
msgstr "Stile dei bordi tra i noi"
|
||||
msgstr "Stile dei bordi tra i nodi."
|
||||
|
||||
#: ../gramps/gen/plug/docgen/treedoc.py:190
|
||||
msgid "Level distance"
|
||||
@ -18123,6 +18133,11 @@ msgstr "Copia tutto"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Visualizzare dati non nel filtro"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
#, fuzzy
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Genera libro"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Libri disponibili"
|
||||
@ -18449,6 +18464,11 @@ msgstr "predefinito"
|
||||
msgid "Document Styles"
|
||||
msgstr "Stili documenti"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
#, fuzzy
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Finestra_nuova_fonti"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Nuovo stile"
|
||||
@ -18475,6 +18495,11 @@ msgstr "Seleziona uno stile"
|
||||
msgid "Style editor"
|
||||
msgstr "Editor stili"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
#, fuzzy
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Editor nomi di luoghi"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -18605,6 +18630,11 @@ msgstr "Seleziona oggetto multimediale"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
#, fuzzy
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Fusione_luoghi"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
msgid "manual|Select_Father_selector"
|
||||
msgstr ""
|
||||
@ -18631,10 +18661,20 @@ msgstr "Depositi"
|
||||
msgid "Select Repository"
|
||||
msgstr "Seleziona deposito"
|
||||
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
#, fuzzy
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Fusione_note"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
msgid "Select Source"
|
||||
msgstr "Seleziona fonte"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:76
|
||||
#, fuzzy
|
||||
msgid "manual|Select_Source_selector"
|
||||
msgstr "Fusione_note"
|
||||
|
||||
#: ../gramps/gui/spell.py:92
|
||||
msgid "Off"
|
||||
msgstr "Disattivato"
|
||||
@ -19605,6 +19645,11 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Informazioni di avanzamento"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
#, fuzzy
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Riordina relazioni"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Riordina relazioni"
|
||||
@ -21715,6 +21760,11 @@ msgstr "EMAIL"
|
||||
msgid "WWW"
|
||||
msgstr "WWW"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1438
|
||||
#, fuzzy
|
||||
msgid "Writing media"
|
||||
msgstr "Scrittura dati note"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1570
|
||||
msgid "GEDCOM Export failed"
|
||||
msgstr "Esportazione GEDCOM non riuscita"
|
||||
@ -23374,6 +23424,11 @@ msgstr "Modifica la nota selezionata"
|
||||
msgid "Add a new To Do note"
|
||||
msgstr "Aggiunge una nuova nota"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todo.py:201
|
||||
#, fuzzy
|
||||
msgid "First select the object to which you want to attach a note"
|
||||
msgstr "Selezionare il luogo per il quale mostrare il fumetto informativo."
|
||||
|
||||
#: ../gramps/plugins/gramplet/todogramplet.py:149
|
||||
msgid "Unattached"
|
||||
msgstr "Non allegato"
|
||||
@ -23389,6 +23444,9 @@ msgid ""
|
||||
"powerful features.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Gramps è un software progettato per la ricerca genealogica. Seppure simile "
|
||||
"ad altri programmi genealogici, Gramps offre alcune funzioni uniche e "
|
||||
"potenti.\n"
|
||||
|
||||
#: ../gramps/plugins/gramplet/welcomegramplet.py:105
|
||||
msgid "Links"
|
||||
@ -23427,6 +23485,11 @@ msgid ""
|
||||
"powerful, yet easy to use.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Gramps è stato creato da genealogisti per genealogisti, organizzati nel "
|
||||
"progetto Gramps. Gramps è un software Open Source; questo vuol dire che "
|
||||
"siete liberi di copiarlo e distribuirlo a chiunque desideriate. È sviluppato "
|
||||
"e mantenuto da una squadra di volontari di tutto il mondo che ha per "
|
||||
"obiettivo quello di rendere Gramps potente, ma comunque semplice da usare.\n"
|
||||
|
||||
#: ../gramps/plugins/gramplet/welcomegramplet.py:124
|
||||
msgid "Getting Started"
|
||||
@ -23440,6 +23503,11 @@ msgid ""
|
||||
"For more details, please read the information at the links above\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"La prima cosa da fare è creare un nuovo albero genealogico. Per creare un "
|
||||
"nuovo albero genealogico (talvolta chiamato database) selezionare «Alberi "
|
||||
"genealogici» dal menu, scegliere «Gestisci alberi genealogici», premere "
|
||||
"«Nuovo» e dare un nome al database. Per maggiori informazioni consultare le "
|
||||
"informazioni raggiungibili dai collegamenti segnalati precedentemente\n"
|
||||
|
||||
#: ../gramps/plugins/gramplet/welcomegramplet.py:130
|
||||
msgid "Dashboard View"
|
||||
@ -23456,6 +23524,17 @@ msgid ""
|
||||
"can also drag the Properties button to reposition the gramplet on this page, "
|
||||
"and detach the gramplet to float above Gramps."
|
||||
msgstr ""
|
||||
"Questa è la vista del «cruscotto», dove è possibile aggiungere ulteriori "
|
||||
"gramplet. È possibile aggiungere ulteriori gramplet ad ogni vista "
|
||||
"aggiungendo una barra laterale o una barra in basso, tramite un clic del "
|
||||
"pulsante destro alla destra della scheda.\n"
|
||||
"\n"
|
||||
"Si possono aggiungere ulteriori colone con un clic sull'icona di "
|
||||
"configurazione nella barra degli strumenti, mentre un clic destro sullo "
|
||||
"sfondo permette di aggiungere ulteriori gramplet. È anche possibile "
|
||||
"trascinare il pulsante delle proprietà di una gramplet per cambiarne la "
|
||||
"posizione nella pagina, e staccare la gramplet in una finestra separata da "
|
||||
"quella di Gramps."
|
||||
|
||||
#. Minimum number of lines we want to see. Further lines with the same
|
||||
#. distance to the main person will be added on top of this.
|
||||
@ -33712,7 +33791,7 @@ msgstr "Ricostruisce le mappe dei riferimenti"
|
||||
|
||||
#: ../gramps/plugins/tool/tools.gpr.py:309
|
||||
msgid "Rebuild Gender Statistics"
|
||||
msgstr "Ricostrusci statistiche sui sessi"
|
||||
msgstr "Ricostruisci statistiche sui sessi"
|
||||
|
||||
#: ../gramps/plugins/tool/tools.gpr.py:310
|
||||
msgid "Rebuilds gender statistics for name gender guessing..."
|
||||
@ -36305,7 +36384,7 @@ msgstr ""
|
||||
#: ../gramps/plugins/webreport/narrativeweb.py:2016
|
||||
#, fuzzy
|
||||
msgid "Do we include the web calendar ?"
|
||||
msgstr "Il titolo del calendario"
|
||||
msgstr ""
|
||||
|
||||
#: ../gramps/plugins/webreport/narrativeweb.py:2026
|
||||
msgid "Where do you place your web site ? default = /WEBCAL"
|
||||
@ -43887,3 +43966,4 @@ msgstr "Gestore_oggetti_multimediali"
|
||||
#~ "Per le segnalazioni di bug si deve usare https://gramps-project.org/bugs/ "
|
||||
#~ "per le viste ufficiali, altrimenti bisogna contattare l'autore della "
|
||||
#~ "vista (%(firstauthoremail)s). "
|
||||
|
||||
|
232
po/ru.po
232
po/ru.po
@ -10,14 +10,14 @@
|
||||
# Andrey Baznikin (http://d.scn.ru/), 2009-2011.
|
||||
# Vassilii Khachaturov <vassilii@tarunz.org>, 2011-2014.
|
||||
# Egor Reentov <egor.gramps@gmail.com>, 2011-2013.
|
||||
# Ivan Komaritsyn <vantu5z@mail.ru>, 2015-2018.
|
||||
# Ivan Komaritsyn <vantu5z@mail.ru>, 2015-2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gramps50\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-12-04 14:34+0300\n"
|
||||
"PO-Revision-Date: 2018-12-04 15:57+0300\n"
|
||||
"POT-Creation-Date: 2019-02-23 11:42-0300\n"
|
||||
"PO-Revision-Date: 2019-03-12 14:36-0300\n"
|
||||
"Last-Translator: Ivan Komaritsyn <vantu5z@mail.ru>\n"
|
||||
"Language-Team: Russian\n"
|
||||
"Language: ru\n"
|
||||
@ -1215,7 +1215,7 @@ msgstr "Используется строка параметров: %s"
|
||||
#: ../gramps/cli/arghandler.py:466
|
||||
#, python-format
|
||||
msgid "Exporting: file %(filename)s, format %(format)s."
|
||||
msgstr "Экспортируются: файл %(filename)s, формат %(format)s."
|
||||
msgstr "Экспорт: файл %(filename)s, формат %(format)s."
|
||||
|
||||
#: ../gramps/cli/arghandler.py:477
|
||||
msgid "Cleaning up."
|
||||
@ -1503,7 +1503,7 @@ msgstr ""
|
||||
"gramps\n"
|
||||
"\n"
|
||||
"Внимание: Эти примеры указаны для оболочки bash.\n"
|
||||
"Точный синтаксис командной строки может отличаться для прочих оболочек и под "
|
||||
"Точный синтаксис командной строки может отличаться для других оболочек и под "
|
||||
"Windows.\n"
|
||||
|
||||
#: ../gramps/cli/argparser.py:248 ../gramps/cli/argparser.py:421
|
||||
@ -1517,8 +1517,8 @@ msgid ""
|
||||
"Type gramps --help for an overview of commands, or read the manual pages."
|
||||
msgstr ""
|
||||
"Ошибка при разборе аргументов: %s \n"
|
||||
"Наберите gramps --help чтобы увидеть аргументы командной строки или "
|
||||
"прочитайте страницы руководства."
|
||||
"Наберите gramps --help чтобы увидеть доступные аргументы командной строки "
|
||||
"или прочитайте страницы руководства."
|
||||
|
||||
#: ../gramps/cli/argparser.py:268
|
||||
#, python-format
|
||||
@ -1658,7 +1658,7 @@ msgstr "%(str1)s: %(str2)s"
|
||||
#: ../gramps/cli/clidbman.py:274
|
||||
#, python-format
|
||||
msgid "Starting Import, %s"
|
||||
msgstr "Импортирование %s"
|
||||
msgstr "Начало импорта %s"
|
||||
|
||||
#: ../gramps/cli/clidbman.py:280
|
||||
msgid "Import finished..."
|
||||
@ -3864,7 +3864,7 @@ msgstr "Название фильтра:"
|
||||
#: ../gramps/gen/filters/rules/_matchesfilterbase.py:70
|
||||
#, python-format
|
||||
msgid "Can't find filter %s in the defined custom filters"
|
||||
msgstr "Не удалось найти фильтр «%s» среди заданных фильтров пользователя"
|
||||
msgstr "Не удалось найти фильтр «%s» среди фильтров пользователя"
|
||||
|
||||
#: ../gramps/gen/filters/rules/_matchessourcefilterbase.py:47
|
||||
#: ../gramps/gen/filters/rules/citation/_matchessourcefilter.py:48
|
||||
@ -8942,7 +8942,7 @@ msgstr "Хранилище"
|
||||
|
||||
#: ../gramps/gen/lib/reporef.py:96 ../gramps/gui/clipboard.py:505
|
||||
msgid "Repository ref"
|
||||
msgstr "ссылка на хранилище"
|
||||
msgstr "Ссылка на хранилище"
|
||||
|
||||
#: ../gramps/gen/lib/reporef.py:107
|
||||
#: ../gramps/gui/editors/displaytabs/repoembedlist.py:68
|
||||
@ -9215,7 +9215,7 @@ msgstr "Эл. почта"
|
||||
|
||||
#: ../gramps/gen/lib/urltype.py:50
|
||||
msgid "Web Home"
|
||||
msgstr "Домашняя страница в WWW"
|
||||
msgstr "Домашняя страница в сети"
|
||||
|
||||
#: ../gramps/gen/lib/urltype.py:51
|
||||
msgid "Web Search"
|
||||
@ -9235,11 +9235,11 @@ msgstr "Ведётся поиск..."
|
||||
|
||||
#: ../gramps/gen/merge/mergecitationquery.py:61
|
||||
msgid "Merge Citation"
|
||||
msgstr "Объединение цитаты"
|
||||
msgstr "Объединение цитат"
|
||||
|
||||
#: ../gramps/gen/merge/mergeeventquery.py:59
|
||||
msgid "Merge Event Objects"
|
||||
msgstr "События объединены"
|
||||
msgstr "Объединение событий"
|
||||
|
||||
#: ../gramps/gen/merge/mergefamilyquery.py:90
|
||||
msgid "A parent should be a father or mother."
|
||||
@ -9255,17 +9255,17 @@ msgid ""
|
||||
"A parent and child cannot be merged. To merge these people, you must first "
|
||||
"break the relationship between them."
|
||||
msgstr ""
|
||||
"Объединение детей и родителей не разрешено. Для объединения этих людей вы "
|
||||
"должны сначала удалить связи между ними."
|
||||
"Объединение детей и родителей не разрешено. Для объединения этих людей "
|
||||
"необходимо сначала удалить связи между ними."
|
||||
|
||||
#: ../gramps/gen/merge/mergefamilyquery.py:135
|
||||
msgid "Merge Family"
|
||||
msgstr "Объединить семью"
|
||||
msgstr "Объединение семей"
|
||||
|
||||
#: ../gramps/gen/merge/mergemediaquery.py:59
|
||||
#: ../gramps/gui/merge/mergemedia.py:66
|
||||
msgid "Merge Media Objects"
|
||||
msgstr "Объединить документы или изображения"
|
||||
msgstr "Объединение документов или изображений"
|
||||
|
||||
#: ../gramps/gen/merge/mergenotequery.py:58 ../gramps/gui/merge/mergenote.py:66
|
||||
msgid "Merge Notes"
|
||||
@ -9295,7 +9295,7 @@ msgstr "Объединение хранилищ"
|
||||
|
||||
#: ../gramps/gen/merge/mergesourcequery.py:62
|
||||
msgid "Merge Source"
|
||||
msgstr "Объединить источник"
|
||||
msgstr "Объединение источников"
|
||||
|
||||
#: ../gramps/gen/plug/_gramplet.py:345
|
||||
#, python-format
|
||||
@ -9319,7 +9319,7 @@ msgid ""
|
||||
" but is not known to the module. Ignoring..."
|
||||
msgstr ""
|
||||
"Настройка «%(opt_name)s» задана в %(file)s,\n"
|
||||
" но не поддерживается данным модулем. Игнорирую..."
|
||||
" но не поддерживается данным модулем. Игнорируется..."
|
||||
|
||||
#: ../gramps/gen/plug/_pluginreg.py:59
|
||||
msgid "Stable"
|
||||
@ -9395,7 +9395,7 @@ msgstr "Разное"
|
||||
#: ../gramps/gen/plug/_pluginreg.py:1176
|
||||
#, python-format
|
||||
msgid "ERROR: Failed reading plugin registration %(filename)s"
|
||||
msgstr "ОШИБКА: Не удается прочесть файл регистрации модулей %(filename)s"
|
||||
msgstr "ОШИБКА: Не удаётся прочесть файл регистрации модуля %(filename)s"
|
||||
|
||||
#: ../gramps/gen/plug/_pluginreg.py:1154
|
||||
#, python-format
|
||||
@ -9634,7 +9634,7 @@ msgstr "Ориентация графа"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/graphdoc.py:152
|
||||
msgid "Whether graph goes from top to bottom or left to right."
|
||||
msgstr "Строить граф сверху вниз либо слева направо."
|
||||
msgstr "Строить граф сверху вниз, либо слева направо."
|
||||
|
||||
#: ../gramps/gen/plug/docgen/graphdoc.py:156
|
||||
msgid "Number of Horizontal Pages"
|
||||
@ -9776,12 +9776,12 @@ msgid ""
|
||||
"graphs will result in longer lines and larger graphs."
|
||||
msgstr ""
|
||||
"Подграфы могут помочь Graphviz расположить супругов рядом, но на сложных "
|
||||
"графах это приведет к более длинным линиям и бо́льшим графам."
|
||||
"графах это приведёт к более длинным линиям и бо́льшим графам."
|
||||
|
||||
#. ###############################
|
||||
#: ../gramps/gen/plug/docgen/graphdoc.py:257
|
||||
msgid "Note to add to the graph"
|
||||
msgstr "Комментарий для добавления к графу"
|
||||
msgstr "Комментарий к графу"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/graphdoc.py:259
|
||||
msgid "This text will be added to the graph."
|
||||
@ -9846,7 +9846,7 @@ msgstr "Graphviz файл"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/paperstyle.py:78
|
||||
msgid "paper size|Letter"
|
||||
msgstr "Letter"
|
||||
msgstr "Письмо"
|
||||
|
||||
#: ../gramps/gen/plug/docgen/paperstyle.py:80
|
||||
msgid "paper size|Legal"
|
||||
@ -10090,8 +10090,7 @@ msgstr "Допустимые значения: "
|
||||
#.
|
||||
#. ------------------------------------------------------------------------
|
||||
#: ../gramps/gen/plug/report/_book.py:71 ../gramps/gui/plug/_dialogs.py:59
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:84 ../gramps/gui/viewmanager.py:122
|
||||
#: ../gramps/gui/viewmanager.py:121
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:86 ../gramps/gui/viewmanager.py:121
|
||||
msgid "Unsupported"
|
||||
msgstr "Неподдерживаемые"
|
||||
|
||||
@ -10236,11 +10235,9 @@ msgid "Name format"
|
||||
msgstr "Формат имён"
|
||||
|
||||
#: ../gramps/gen/plug/report/stdoptions.py:78
|
||||
#: ../gramps/plugins/webreport/webcal.py:1679
|
||||
#: ../gramps/plugins/webreport/webcal.py:1685
|
||||
#: ../gramps/plugins/webreport/webcal.py:1686
|
||||
msgid "Select the format to display names"
|
||||
msgstr "Выберите формат отображения имен"
|
||||
msgstr "Выберите формат отображения имён"
|
||||
|
||||
#: ../gramps/gen/plug/report/stdoptions.py:106
|
||||
msgid "Include data marked private"
|
||||
@ -10495,7 +10492,7 @@ msgstr "Ошибка: отсутствует параметр gramps_target_vers
|
||||
#: ../gramps/gen/plug/utils.py:380
|
||||
#, python-format
|
||||
msgid "Installing '%s'..."
|
||||
msgstr "Устанавливаем '%s'..."
|
||||
msgstr "Установка '%s'..."
|
||||
|
||||
#: ../gramps/gen/plug/utils.py:385
|
||||
#, python-format
|
||||
@ -10527,9 +10524,9 @@ msgstr ""
|
||||
"перезапустите Gramps."
|
||||
|
||||
#: ../gramps/gen/relationship.py:1273
|
||||
#: ../gramps/plugins/view/pedigreeview.py:1531
|
||||
#: ../gramps/plugins/view/pedigreeview.py:1533
|
||||
msgid "Relationship loop detected"
|
||||
msgstr "Обнаружена петля в отношениях"
|
||||
msgstr "Обнаружен цикл в отношениях"
|
||||
|
||||
#: ../gramps/gen/relationship.py:1332
|
||||
#, python-format
|
||||
@ -10538,11 +10535,11 @@ msgid ""
|
||||
"It is possible that relationships have been missed"
|
||||
msgstr ""
|
||||
"Поиск в семейном древе достиг максимальной глубины в %d поколений.\n"
|
||||
"Возможно что некоторые отношения не были найдены"
|
||||
"Возможно, что некоторые отношения не были найдены"
|
||||
|
||||
#: ../gramps/gen/relationship.py:1406
|
||||
msgid "Relationship loop detected:"
|
||||
msgstr "Обнаружена петля в отношениях:"
|
||||
msgstr "Обнаружен цикл в отношениях:"
|
||||
|
||||
#: ../gramps/gen/relationship.py:1407
|
||||
#, python-format
|
||||
@ -10657,7 +10654,7 @@ msgid ""
|
||||
"Family relationship translator not available for language '%s'. Using "
|
||||
"'english' instead."
|
||||
msgstr ""
|
||||
"Перевод терминологии родственных отношений для языка «%s» не осуществлён. "
|
||||
"Перевод терминологии родственных отношений для языка «%s» недоступен. "
|
||||
"Будет использована английская терминология."
|
||||
|
||||
#: ../gramps/gen/utils/alive.py:145 ../gramps/plugins/importer/importcsv.py:201
|
||||
@ -12045,11 +12042,11 @@ msgstr "Проверить дополнения на наличие обновл
|
||||
msgid "Checking Addons Failed"
|
||||
msgstr "Не удалось проверить дополнения"
|
||||
|
||||
#: ../gramps/gui/configure.py:1467
|
||||
#: ../gramps/gui/configure.py:1476
|
||||
msgid "The addon repository appears to be unavailable. Please try again later."
|
||||
msgstr ""
|
||||
"Сервер с дополнениями временно недоступен. Пожалуйста, попробуйте ещё раз "
|
||||
"попозже."
|
||||
"через некоторое время."
|
||||
|
||||
#: ../gramps/gui/configure.py:1480
|
||||
msgid "There are no available addons of this type"
|
||||
@ -12086,15 +12083,13 @@ msgstr "Хост"
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: ../gramps/gui/configure.py:1534
|
||||
msgid "Family Tree Database path"
|
||||
msgstr ""
|
||||
"Путь к базе данных\n"
|
||||
"с семейным древом"
|
||||
|
||||
#: ../gramps/gui/configure.py:1543
|
||||
msgid "Family Tree Database path"
|
||||
msgstr "Путь к базе данных с семейным древом"
|
||||
|
||||
#: ../gramps/gui/configure.py:1552
|
||||
msgid "Automatically load last Family Tree"
|
||||
msgstr "Автоматически загружать последнюю базу данных"
|
||||
msgstr "Автоматически загружать последнее семейное древо"
|
||||
|
||||
#: ../gramps/gui/configure.py:1549
|
||||
msgid "Backup path"
|
||||
@ -12318,10 +12313,10 @@ msgstr "У Вас нет доступа для чтения выбранного
|
||||
msgid "Cannot create file"
|
||||
msgstr "Не удалось создать файл"
|
||||
|
||||
#: ../gramps/gui/dbloader.py:585 ../gramps/gui/dbloader.py:558
|
||||
#: ../gramps/gui/dbloader.py:558
|
||||
#, python-format
|
||||
msgid "Could not import file: %s"
|
||||
msgstr "Ошибка импорта файла %s"
|
||||
msgstr "Ошибка импорта файла: %s"
|
||||
|
||||
#: ../gramps/gui/dbloader.py:586 ../gramps/gui/dbloader.py:559
|
||||
msgid ""
|
||||
@ -12622,7 +12617,7 @@ msgstr ""
|
||||
|
||||
#: ../gramps/gui/dbman.py:925
|
||||
msgid "Proceed, I have taken a backup"
|
||||
msgstr "Продолжить, ведь я сделал резервную копию"
|
||||
msgstr "Продолжить, я уже сделал резервную копию"
|
||||
|
||||
#: ../gramps/gui/dbman.py:926
|
||||
msgid "Stop"
|
||||
@ -18472,37 +18467,32 @@ msgstr "Фильтр ссылок"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:346
|
||||
msgid "Click to see preview after reference filter"
|
||||
msgstr "Щелкните чтобы увидеть предпросмотр после применения фильтра ссылок"
|
||||
msgstr "Щёлкните, чтобы увидеть предпросмотр после применения фильтра ссылок"
|
||||
|
||||
# fixme! проверить на живой программе
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:396
|
||||
msgid "Hide order"
|
||||
msgstr "Скрыть упорядочивание"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:589
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:592
|
||||
msgid "Filtering private data"
|
||||
msgstr "Фильтрую частные данные"
|
||||
msgstr "Применение фильтра личных данных"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:598
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:601
|
||||
msgid "Filtering living persons"
|
||||
msgstr "Фильтрую ныне живущих лиц"
|
||||
msgstr "Применение фильтра ныне живущих лиц"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:615
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:618
|
||||
msgid "Applying selected person filter"
|
||||
msgstr "Применить выбранный фильтр людей"
|
||||
msgstr "Применение выбранного фильтра лиц"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:625
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:628
|
||||
msgid "Applying selected note filter"
|
||||
msgstr "Применить выбранный фильтр заметок"
|
||||
msgstr "Применение выбранного фильтра заметок"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:634
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:637
|
||||
msgid "Filtering referenced records"
|
||||
msgstr "Фильтрую записи по ссылкам"
|
||||
msgstr "Фильтр записей по ссылкам"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:675
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:678
|
||||
@ -18531,10 +18521,9 @@ msgstr "Включать все выбранные заметки"
|
||||
msgid "Replace given names of living people"
|
||||
msgstr "Изменять имена живых людей"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:732
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:735
|
||||
msgid "Replace complete name of living people"
|
||||
msgstr "Изменять имена живых людей"
|
||||
msgstr "Изменять имена живых людей полностью"
|
||||
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:733
|
||||
#: ../gramps/gui/plug/export/_exportoptions.py:736
|
||||
@ -18589,6 +18578,10 @@ msgstr "Копировать всё"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Смотреть данные, неподходящие под фильтр"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Создание_книги"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Доступные книги"
|
||||
@ -18597,9 +18590,9 @@ msgstr "Доступные книги"
|
||||
msgid "Discard Unsaved Changes"
|
||||
msgstr "Отменить несохранённые изменения"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:241
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:248
|
||||
msgid "You have made changes which have not been saved."
|
||||
msgstr "Изменения, сделанные вами, ещё не были сохранены."
|
||||
msgstr "Изменения, сделанные Вами, ещё не были сохранены."
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:242
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:738
|
||||
@ -18841,7 +18834,7 @@ msgstr "Параметры документа"
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:503
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:530
|
||||
msgid "Permission problem"
|
||||
msgstr "Ошибка отсутствия прав"
|
||||
msgstr "Ошибка прав доступа"
|
||||
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:504
|
||||
#, python-format
|
||||
@ -18850,7 +18843,7 @@ msgid ""
|
||||
"\n"
|
||||
"Please select another directory or correct the permissions."
|
||||
msgstr ""
|
||||
"Отсутствуют права на запись в каталог %s\n"
|
||||
"Отсутствуют права на запись в этот каталог %s\n"
|
||||
"\n"
|
||||
"Пожалуйста, выберите другой каталог или измените права доступа."
|
||||
|
||||
@ -18880,7 +18873,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Нет прав для создания %s\n"
|
||||
"\n"
|
||||
"Пожалуйста, выберите другой путь или измените права."
|
||||
"Пожалуйста, выберите другой путь или измените права доступа."
|
||||
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:538
|
||||
#: ../gramps/plugins/export/exportxml.py:146
|
||||
@ -18899,14 +18892,14 @@ msgstr ""
|
||||
"\n"
|
||||
"Пожалуйста, выберите другой каталог или создайте его."
|
||||
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:665
|
||||
#: ../gramps/gui/plug/tool.py:136 ../gramps/plugins/tool/relcalc.py:150
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:668
|
||||
#: ../gramps/gui/plug/tool.py:136 ../gramps/plugins/tool/relcalc.py:157
|
||||
msgid "Active person has not been set"
|
||||
msgstr "Базовое лицо не установлено"
|
||||
msgstr "Активное лицо не установлено"
|
||||
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:666
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:669
|
||||
msgid "You must select an active person for this report to work properly."
|
||||
msgstr "Для работы этого отчёта необходимо выбрать активное лицо."
|
||||
msgstr "Для создания этого отчёта необходимо выбрать активное лицо."
|
||||
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:721
|
||||
#: ../gramps/gui/plug/report/_reportdialog.py:728
|
||||
@ -18927,6 +18920,10 @@ msgstr "по умолчанию"
|
||||
msgid "Document Styles"
|
||||
msgstr "Стили документов"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Стили_документов"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Новый стиль"
|
||||
@ -18955,6 +18952,10 @@ msgstr "Выберите стиль"
|
||||
msgid "Style editor"
|
||||
msgstr "Редактор стилей"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Редактор_стилей"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -19016,9 +19017,9 @@ msgstr ""
|
||||
msgid "_Proceed with the tool"
|
||||
msgstr "_Запустить инструмент"
|
||||
|
||||
#: ../gramps/gui/plug/tool.py:137 ../gramps/plugins/tool/relcalc.py:151
|
||||
#: ../gramps/gui/plug/tool.py:137 ../gramps/plugins/tool/relcalc.py:158
|
||||
msgid "You must select an active person for this tool to work properly."
|
||||
msgstr "Для работы этого инструмента необходимо выбрать активное лицо."
|
||||
msgstr "Для запуска этого инструмента необходимо выбрать активное лицо."
|
||||
|
||||
#: ../gramps/gui/selectors/selectcitation.py:51
|
||||
#: ../gramps/gui/selectors/selectcitation.py:86
|
||||
@ -19097,6 +19098,10 @@ msgstr "Выберите документ"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr "Выбор_ребёнка"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Выбор_лица"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
#: ../gramps/gui/selectors/selectperson.py:64
|
||||
msgid "manual|Select_Father_selector"
|
||||
@ -19127,6 +19132,10 @@ msgstr "Хранилища"
|
||||
msgid "Select Repository"
|
||||
msgstr "Выберите хранилище"
|
||||
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Выбор_хранилища"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
#: ../gramps/gui/selectors/selectsource.py:59
|
||||
msgid "Select Source"
|
||||
@ -19226,15 +19235,15 @@ msgstr "История очищена"
|
||||
|
||||
#: ../gramps/gui/utils.py:230
|
||||
msgid "Canceling..."
|
||||
msgstr "Отменяю..."
|
||||
msgstr "Производится отмена..."
|
||||
|
||||
#: ../gramps/gui/utils.py:310
|
||||
msgid "Please do not force closing this important dialog."
|
||||
msgstr "Пожалуйста, не закрывайте этот важный диалог силой."
|
||||
msgstr "Пожалуйста, не закрывайте этот важный диалог."
|
||||
|
||||
#: ../gramps/gui/utils.py:374
|
||||
msgid "The external program failed to launch or experienced an error"
|
||||
msgstr "Внешняя программа не смогла запуститься, либо в ней случился сбой"
|
||||
msgstr "Внешняя программа не смогла запуститься или в ней произошёл сбой"
|
||||
|
||||
#: ../gramps/gui/utils.py:384
|
||||
msgid "Error from external program"
|
||||
@ -19441,9 +19450,9 @@ msgid "Key %s is not bound"
|
||||
msgstr "Клавиша %s не назначена"
|
||||
|
||||
#. registering plugins
|
||||
#: ../gramps/gui/viewmanager.py:788 ../gramps/gui/viewmanager.py:787
|
||||
#: ../gramps/gui/viewmanager.py:787
|
||||
msgid "Registering plugins..."
|
||||
msgstr "Регистрирую модули..."
|
||||
msgstr "Регистрация модулей..."
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:796 ../gramps/gui/viewmanager.py:795
|
||||
msgid "Ready"
|
||||
@ -19454,14 +19463,12 @@ msgstr "Готово"
|
||||
msgid "Abort changes?"
|
||||
msgstr "Отказаться от изменений?"
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:842 ../gramps/gui/viewmanager.py:841
|
||||
#: ../gramps/gui/viewmanager.py:851
|
||||
msgid ""
|
||||
"Aborting changes will return the database to the state it was before you "
|
||||
"started this editing session."
|
||||
msgstr ""
|
||||
"Отказ от изменений вернёт базу данных в состояние до начала вашей текущей "
|
||||
"сессии."
|
||||
"Отказ от изменений вернёт базу данных в состояние до начала текущей сессии."
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:844 ../gramps/gui/viewmanager.py:843
|
||||
#: ../gramps/gui/viewmanager.py:853
|
||||
@ -19473,21 +19480,17 @@ msgstr "Отказаться от изменений"
|
||||
msgid "Cannot abandon session's changes"
|
||||
msgstr "Ошибка отката изменений сессии"
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:856 ../gramps/gui/viewmanager.py:855
|
||||
#: ../gramps/gui/viewmanager.py:865
|
||||
msgid ""
|
||||
"Changes cannot be completely abandoned because the number of changes made in "
|
||||
"the session exceeded the limit."
|
||||
msgstr ""
|
||||
"Нельзя откатить все изменения, поскольку число изменений, совершенных в "
|
||||
"сессии, превзошло предел."
|
||||
"Нельзя откатить все изменения, поскольку число изменений, совершённых в "
|
||||
"сессии, превысило предел."
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:1017 ../gramps/gui/viewmanager.py:1016
|
||||
#: ../gramps/gui/viewmanager.py:1026
|
||||
msgid "View failed to load. Check error output."
|
||||
msgstr ""
|
||||
"Не удалось загрузить вид. Проверьте сообщения об ошибках в окне, из которого "
|
||||
"запущен Gramps."
|
||||
msgstr "Не удалось загрузить вид. Проверьте сообщения об ошибках."
|
||||
|
||||
# statistics over import results
|
||||
#: ../gramps/gui/viewmanager.py:1169 ../gramps/gui/viewmanager.py:1168
|
||||
@ -19515,7 +19518,6 @@ msgstr "Ошибка сохранения резервной копии"
|
||||
msgid "Failed Loading View"
|
||||
msgstr "Не удалось загрузить вид"
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:1689 ../gramps/gui/viewmanager.py:1688
|
||||
#: ../gramps/gui/viewmanager.py:1698
|
||||
#, python-format
|
||||
msgid ""
|
||||
@ -19534,8 +19536,8 @@ msgstr ""
|
||||
"\n"
|
||||
"%(error_msg)s\n"
|
||||
"\n"
|
||||
"Если не можете устранить причину сами, то можно либо сообщить об ошибке по "
|
||||
"адресу %(gramps_bugtracker_url)s, либо связаться с автором вида "
|
||||
"Если не можете устранить причину сами, то сообщите об ошибке по адресу "
|
||||
"%(gramps_bugtracker_url)s, либо свяжитесь с автором вида "
|
||||
"(%(firstauthoremail)s).\n"
|
||||
"\n"
|
||||
"Если не хотите, чтобы Gramps пыталась загрузить этот вид в следующий раз, "
|
||||
@ -19546,7 +19548,6 @@ msgstr ""
|
||||
msgid "Failed Loading Plugin"
|
||||
msgstr "Ошибка загрузки модуля"
|
||||
|
||||
#: ../gramps/gui/viewmanager.py:1782 ../gramps/gui/viewmanager.py:1781
|
||||
#: ../gramps/gui/viewmanager.py:1791
|
||||
#, python-format
|
||||
msgid ""
|
||||
@ -19565,8 +19566,8 @@ msgstr ""
|
||||
"\n"
|
||||
"%(error_msg)s\n"
|
||||
"\n"
|
||||
"Если не можете устранить причину сами, то можно либо сообщить об ошибке по "
|
||||
"адресу %(gramps_bugtracker_url)s, либо связаться с автором модуля "
|
||||
"Если не можете устранить причину сами, то сообщите об ошибке по адресу "
|
||||
"%(gramps_bugtracker_url)s, либо свяжитесь с автором модуля "
|
||||
"(%(firstauthoremail)s).\n"
|
||||
"\n"
|
||||
"Если не хотите, чтобы Gramps пыталась загрузить этот модуль в следующий раз, "
|
||||
@ -19699,13 +19700,12 @@ msgstr "Нельзя поставить закладку: ничто не выд
|
||||
msgid "Multiple Selection Delete"
|
||||
msgstr "Удаление нескольких элементов"
|
||||
|
||||
#: ../gramps/gui/views/listview.py:546 ../gramps/gui/views/listview.py:553
|
||||
#: ../gramps/gui/views/listview.py:553
|
||||
msgid ""
|
||||
"More than one item has been selected for deletion. Select the option "
|
||||
"indicating how to delete the items:"
|
||||
msgstr ""
|
||||
"Для удаления выделено более одного элемента. Выберите параметры индикации "
|
||||
"при удалении:"
|
||||
"Для удаления выделено более одного элемента. Выберите параметры для удаления:"
|
||||
|
||||
#: ../gramps/gui/views/listview.py:548 ../gramps/gui/views/listview.py:555
|
||||
msgid "Delete All"
|
||||
@ -19715,13 +19715,13 @@ msgstr "Удалить всё"
|
||||
msgid "Confirm Each Delete"
|
||||
msgstr "Подтверждать каждое удаление"
|
||||
|
||||
#: ../gramps/gui/views/listview.py:560 ../gramps/gui/views/listview.py:567
|
||||
#: ../gramps/gui/views/listview.py:567
|
||||
msgid ""
|
||||
"This item is currently being used. Deleting it will remove it from the "
|
||||
"database and from all other items that reference it."
|
||||
msgstr ""
|
||||
"Этот элемент в настоящее время используется. Удаление сотрёт его из базы "
|
||||
"данных и из всех других элементов, которые ссылаются на это."
|
||||
"данных и из всех других элементов, которые ссылаются на него."
|
||||
|
||||
#: ../gramps/gui/views/listview.py:564 ../gramps/plugins/view/familyview.py:269
|
||||
#: ../gramps/gui/views/listview.py:571
|
||||
@ -19739,9 +19739,9 @@ msgstr "Удалить %s?"
|
||||
msgid "_Delete Item"
|
||||
msgstr "У_далить элемент"
|
||||
|
||||
#: ../gramps/gui/views/listview.py:614 ../gramps/gui/views/listview.py:621
|
||||
#: ../gramps/gui/views/listview.py:621
|
||||
msgid "Column clicked, sorting..."
|
||||
msgstr "Выбран столбец, сортирую..."
|
||||
msgstr "Выбран столбец, сортировка..."
|
||||
|
||||
#: ../gramps/gui/views/listview.py:1043 ../gramps/gui/views/listview.py:1057
|
||||
msgid "Export View as Spreadsheet"
|
||||
@ -19769,7 +19769,7 @@ msgstr "Создана закладка для %s"
|
||||
#: ../gramps/plugins/lib/maps/geography.py:221
|
||||
#: ../gramps/plugins/view/familyview.py:223
|
||||
msgid "A bookmark could not be set because no one was selected."
|
||||
msgstr "Нельзя поставить закладку: никто не выделен."
|
||||
msgstr "Нельзя создать закладку: никто не выделен."
|
||||
|
||||
#: ../gramps/gui/views/navigationview.py:274
|
||||
msgid "_Add Bookmark"
|
||||
@ -20023,10 +20023,9 @@ msgstr "Братья/Сёстры"
|
||||
msgid "Related"
|
||||
msgstr "Связанные"
|
||||
|
||||
#: ../gramps/gui/widgets/fanchart.py:1806
|
||||
#: ../gramps/gui/widgets/fanchart.py:1809
|
||||
#: ../gramps/gui/widgets/fanchart.py:1816
|
||||
msgid "Add partner to person"
|
||||
msgstr "Добавляю партнёра к лицу"
|
||||
msgstr "Добавить партнёра к лицу"
|
||||
|
||||
#: ../gramps/gui/widgets/fanchart.py:1813
|
||||
#: ../gramps/gui/widgets/fanchart.py:1816
|
||||
@ -20054,7 +20053,7 @@ msgid ""
|
||||
"Select the down arrow on the right corner for adding, removing or restoring "
|
||||
"gramplets."
|
||||
msgstr ""
|
||||
"Нажмите значок со стрелочкой в правом нижнем углу, чтобы добавить, удалить, "
|
||||
"Нажмите значок со стрелочкой в правом нижнем углу, чтобы добавить, удалить "
|
||||
"или восстановить грамплеты."
|
||||
|
||||
#: ../gramps/gui/widgets/grampletbar.py:486
|
||||
@ -20148,7 +20147,7 @@ msgid ""
|
||||
"Double-click on the picture to view it in the default image viewer "
|
||||
"application."
|
||||
msgstr ""
|
||||
"Двойной щелчок по изображению приведёт к просмотру в программе по умолчанию."
|
||||
"Двойной щелчок по изображению для его просмотра в программе по умолчанию."
|
||||
|
||||
#: ../gramps/gui/widgets/photo.py:87
|
||||
msgid "Make Active Media"
|
||||
@ -20167,6 +20166,10 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Информация о прогрессе"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Порядок_отношений"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Упорядочить отношения"
|
||||
@ -20431,7 +20434,7 @@ msgstr "Создаёт документы в формате «просто те
|
||||
|
||||
#: ../gramps/plugins/docgen/docgen.gpr.py:55
|
||||
msgid "Print..."
|
||||
msgstr "Напечатать..."
|
||||
msgstr "Печать..."
|
||||
|
||||
#: ../gramps/plugins/docgen/docgen.gpr.py:56
|
||||
msgid "Generates documents and prints them directly."
|
||||
@ -34089,6 +34092,10 @@ msgstr "Управление_документами..."
|
||||
msgid "Media Manager"
|
||||
msgstr "Управление документами"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:91
|
||||
msgid "Help"
|
||||
msgstr "Справка"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:97
|
||||
#: ../gramps/plugins/webreport/basepage.py:1483
|
||||
#: ../gramps/plugins/webreport/basepage.py:1606
|
||||
@ -34755,13 +34762,13 @@ msgstr "Сортировать события"
|
||||
msgid "Sort event changes"
|
||||
msgstr "Сортировка изменений события"
|
||||
|
||||
#: ../gramps/plugins/tool/sortevents.py:112
|
||||
#: ../gramps/plugins/tool/sortevents.py:113
|
||||
msgid "Sorting personal events..."
|
||||
msgstr "Сортирую события лиц..."
|
||||
msgstr "Сортировка событий лиц..."
|
||||
|
||||
#: ../gramps/plugins/tool/sortevents.py:134
|
||||
#: ../gramps/plugins/tool/sortevents.py:135
|
||||
msgid "Sorting family events..."
|
||||
msgstr "Сортирую события семей..."
|
||||
msgstr "Сортировка событий семей..."
|
||||
|
||||
#: ../gramps/plugins/tool/sortevents.py:165
|
||||
msgid "Tool Options"
|
||||
@ -38702,7 +38709,7 @@ msgstr "Определение фильтра содержит цикл."
|
||||
|
||||
#: ../gramps/gen/filters/rules/_rule.py:95
|
||||
msgid "One rule references another which eventually references the first."
|
||||
msgstr "Одно из праил ссылается на другое, которое ссылается на первое."
|
||||
msgstr "Одно из правил ссылается на другое, которое ссылается на первое."
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:76
|
||||
msgid "manual|Select_Source_selector"
|
||||
@ -42293,3 +42300,4 @@ msgstr "Управление_документами"
|
||||
#~ "Используйте https://gramps-project.org/bugs/ чтобы сообщить об ошибке в "
|
||||
#~ "официально поддерживаемых видах, или свяжитесь с автором "
|
||||
#~ "(%(firstauthoremail)s) в противном случае. "
|
||||
|
||||
|
79
po/sl.po
79
po/sl.po
@ -1,13 +1,13 @@
|
||||
# Slovenian translation for Gramps
|
||||
# This file is distributed under the same license as the Gramps package.
|
||||
# Copyright (c) 2007 gramps-project
|
||||
# Bernard Banko <beernarrd (at) gmail.com>, 2007-2017.
|
||||
# Bernard Banko <beernarrd at gmail.com>, 2007-2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gramps 3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-05-20 09:31-0500\n"
|
||||
"PO-Revision-Date: 2017-08-29 13:26+0200\n"
|
||||
"POT-Creation-Date: 2018-12-26 11:20-0600\n"
|
||||
"PO-Revision-Date: 2019-02-24 22:16+0200\n"
|
||||
"Last-Translator: Bernard Banko <beernarrd at gmail.com>\n"
|
||||
"Language-Team: lugos.si\n"
|
||||
"Language: sl\n"
|
||||
@ -3766,6 +3766,15 @@ msgstr "Razni filtri"
|
||||
msgid "No description"
|
||||
msgstr "Brez opisa"
|
||||
|
||||
#. more references to a filter than expected
|
||||
#: ../gramps/gen/filters/rules/_rule.py:94
|
||||
msgid "The filter definition contains a loop."
|
||||
msgstr "Filter vsebuje samega sebe."
|
||||
|
||||
#: ../gramps/gen/filters/rules/_rule.py:95
|
||||
msgid "One rule references another which eventually references the first."
|
||||
msgstr "Pravilo nanaša na pravilo, ki že vsebuje prvega."
|
||||
|
||||
#: ../gramps/gen/filters/rules/citation/_allcitations.py:45
|
||||
msgid "Every citation"
|
||||
msgstr "Vsak navedek"
|
||||
@ -18143,6 +18152,10 @@ msgstr "Kopiraj vse"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Prikaži podatke zunaj filtra"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Pogovorno_okno_Izdelaj_knjigo"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Knjige na voljo"
|
||||
@ -18468,6 +18481,10 @@ msgstr "privzeto"
|
||||
msgid "Document Styles"
|
||||
msgstr "Slogi dokumentov"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Pogovorno_okno_Določi_sloge"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Nov slog"
|
||||
@ -18494,6 +18511,10 @@ msgstr "Izberi slog"
|
||||
msgid "Style editor"
|
||||
msgstr "Urejevalnik slogov"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Pogovorno_okno_Urejevalnik_slogov"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -18618,6 +18639,10 @@ msgstr "Izberi predmet"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr "Izbor_otroka"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Izbirnik_Izbor_kraja"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
msgid "manual|Select_Father_selector"
|
||||
msgstr "Izbor_očeta"
|
||||
@ -18642,10 +18667,18 @@ msgstr "Nahajališča"
|
||||
msgid "Select Repository"
|
||||
msgstr "Izberi nahajališče"
|
||||
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Izbirnik_Izbor_matere"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
msgid "Select Source"
|
||||
msgstr "Izberi vir"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:76
|
||||
msgid "manual|Select_Source_selector"
|
||||
msgstr "Izbirnik_Izbor_opombe"
|
||||
|
||||
#: ../gramps/gui/spell.py:92
|
||||
msgid "Off"
|
||||
msgstr "Izklopljeno"
|
||||
@ -19620,6 +19653,10 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Podatki o napredovanju"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Pogovorno_okno_Preuredi_sorodstva"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Preuredi sorodstva"
|
||||
@ -21818,6 +21855,11 @@ msgstr "EMAIL"
|
||||
msgid "WWW"
|
||||
msgstr "WWW"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1438
|
||||
#, fuzzy
|
||||
msgid "Writing media"
|
||||
msgstr "Zapisovanje predmetov"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1570
|
||||
msgid "GEDCOM Export failed"
|
||||
msgstr "Izvoz GEDCOM ni bil uspešen"
|
||||
@ -22951,12 +22993,12 @@ msgstr "Pripomoček, ki zagotavlja filter za opombe"
|
||||
#: ../gramps/plugins/gramplet/gramplet.gpr.py:1138
|
||||
#: ../gramps/plugins/textreport/recordsreport.py:118
|
||||
msgid "Records"
|
||||
msgstr "Zapisi"
|
||||
msgstr "Rekordi"
|
||||
|
||||
#: ../gramps/plugins/gramplet/gramplet.gpr.py:1128
|
||||
#: ../gramps/plugins/textreport/textplugins.gpr.py:416
|
||||
msgid "Shows some interesting records about people and families"
|
||||
msgstr "Prikaže nekaj zanimivih zapisov o ljudeh in družinah"
|
||||
msgstr "Prikaže nekaj zanimivih rekordnih podatkov o ljudeh in družinah"
|
||||
|
||||
#: ../gramps/plugins/gramplet/gramplet.gpr.py:1143
|
||||
msgid "Person To Do"
|
||||
@ -23370,6 +23412,18 @@ msgstr "Število oseb"
|
||||
msgid "Individuals with unknown gender"
|
||||
msgstr "Osebe neznanega spola"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:156
|
||||
msgid "Incomplete names"
|
||||
msgstr "Nepopolna imena"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:160
|
||||
msgid "Individuals missing birth dates"
|
||||
msgstr "Osebe z manjkajočimi datumi rojstva"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:164
|
||||
msgid "Disconnected individuals"
|
||||
msgstr "Nepovezane osebe"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:115
|
||||
#: ../gramps/plugins/textreport/summary.py:211
|
||||
#: ../gramps/plugins/webreport/statistics.py:129
|
||||
@ -23388,6 +23442,10 @@ msgstr "Edinstveni priimki"
|
||||
msgid "Media Objects"
|
||||
msgstr "Zunanji predmeti"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:181
|
||||
msgid "Individuals with media objects"
|
||||
msgstr "Osebe z zunajimi predmeti"
|
||||
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:128
|
||||
#: ../gramps/plugins/webreport/statistics.py:138
|
||||
msgid "Total number of media object references"
|
||||
@ -23461,6 +23519,10 @@ msgstr "Uredi izbrano opombo Narediti"
|
||||
msgid "Add a new To Do note"
|
||||
msgstr "Dodaj novo opombo Narediti"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todo.py:201
|
||||
msgid "First select the object to which you want to attach a note"
|
||||
msgstr "Najprej izberite predmet, ki bi mu radi pripeli opombo"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todogramplet.py:149
|
||||
msgid "Unattached"
|
||||
msgstr "Nepripeto"
|
||||
@ -31911,7 +31973,7 @@ msgstr "Ustvari abecedno kazalo za knjižna poročila."
|
||||
|
||||
#: ../gramps/plugins/textreport/textplugins.gpr.py:415
|
||||
msgid "Records Report"
|
||||
msgstr "Poročilo o zapisih"
|
||||
msgstr "Poročilo o rekordih"
|
||||
|
||||
#: ../gramps/plugins/textreport/textplugins.gpr.py:437
|
||||
msgid "Note Link Report"
|
||||
@ -32857,6 +32919,10 @@ msgstr "Upravljalnik_zunanjih_predmetov..."
|
||||
msgid "Media Manager"
|
||||
msgstr "Upravljalnik zunanjih predmetov"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:91
|
||||
msgid "Help"
|
||||
msgstr "Pomoč"
|
||||
|
||||
#: ../gramps/plugins/tool/mediamanager.py:97
|
||||
#: ../gramps/plugins/webreport/basepage.py:1483
|
||||
#: ../gramps/plugins/webreport/basepage.py:1606
|
||||
@ -37191,3 +37257,4 @@ msgstr "Upravljalnik_zunanjih_predmetov"
|
||||
|
||||
#~ msgid "Alphabet Menu: %s"
|
||||
#~ msgstr "Abecedni meni: %s"
|
||||
|
||||
|
111
po/sv.po
111
po/sv.po
@ -20,39 +20,29 @@
|
||||
# Jens Arvidsson <jya@sverige.nu>, 2002-2005.
|
||||
# Stefan Björk <betula@users.sourceforge.net>, 2005-2006.
|
||||
# Peter Landgren <peter.talken@telia.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017.
|
||||
# Pär Ekholm <par.ekholm@pekholm.se>, 2018.
|
||||
# Pär Ekholm <par.ekholm@pekholm.se>, 2018, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: sv\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-07-24 14:13+0100\n"
|
||||
"PO-Revision-Date: 2018-11-15 18:11+0100\n"
|
||||
"POT-Creation-Date: 2018-12-26 11:20-0600\n"
|
||||
"PO-Revision-Date: 2019-01-02 22:39+0100\n"
|
||||
"Last-Translator: Pär Ekholm <par.ekholm@pekholm.se>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"Last-Translator: Pär Ekholm <par.ekholm@pekholm.se>\n"
|
||||
"Language: sv\n"
|
||||
|
||||
#: ../data/gramps.appdata.xml.in.h:1
|
||||
msgid ""
|
||||
"Gramps is a genealogy program that is both intuitive for hobbyists and "
|
||||
"feature-complete for professional genealogists."
|
||||
msgstr ""
|
||||
"Gramps är ett släktforskningsprogram som är både intuitivt för "
|
||||
"hobbyforskaren och komplett för den professionelle släktforskaren."
|
||||
msgid "Gramps is a genealogy program that is both intuitive for hobbyists and feature-complete for professional genealogists."
|
||||
msgstr "Gramps är ett släktforskningsprogram som både är intuitivt för hobbyforskaren och komplett för den professionelle släktforskaren."
|
||||
|
||||
#: ../data/gramps.appdata.xml.in.h:2
|
||||
msgid ""
|
||||
"It gives you the ability to record the many details of the life of an "
|
||||
"individual as well as the complex relationships between various people, "
|
||||
"places and events."
|
||||
msgstr ""
|
||||
"Det ger dig tillgång till möjligheten att notera många livsdetaljer hos "
|
||||
"person såväl som de komplexa släktskapen mellan många människor, platser och "
|
||||
"händelser."
|
||||
msgid "It gives you the ability to record the many details of the life of an individual as well as the complex relationships between various people, places and events."
|
||||
msgstr "Det ger dig tillgång till möjligheten att notera många livsdetaljer hos en person såväl som de komplexa släktskapen mellan många människor, platser och händelser."
|
||||
|
||||
#: ../data/gramps.appdata.xml.in.h:3
|
||||
msgid ""
|
||||
@ -3352,7 +3342,7 @@ msgstr "suffix"
|
||||
|
||||
#: ../gramps/gen/display/name.py:610 ../gramps/gen/display/name.py:710
|
||||
msgid "Name|call"
|
||||
msgstr "tilltalsnamnnamn"
|
||||
msgstr "tilltalsnamn"
|
||||
|
||||
#: ../gramps/gen/display/name.py:613 ../gramps/gen/display/name.py:712
|
||||
msgid "Name|common"
|
||||
@ -3786,6 +3776,15 @@ msgstr "Diverse filter"
|
||||
msgid "No description"
|
||||
msgstr "Beskrivning saknas"
|
||||
|
||||
#. more references to a filter than expected
|
||||
#: ../gramps/gen/filters/rules/_rule.py:94
|
||||
msgid "The filter definition contains a loop."
|
||||
msgstr "Filterdefinitionen innehåller en slinga."
|
||||
|
||||
#: ../gramps/gen/filters/rules/_rule.py:95
|
||||
msgid "One rule references another which eventually references the first."
|
||||
msgstr "En regel hänvisar en annan som så småningom hänvisar den första."
|
||||
|
||||
#: ../gramps/gen/filters/rules/citation/_allcitations.py:45
|
||||
msgid "Every citation"
|
||||
msgstr "Varje citering"
|
||||
@ -10994,7 +10993,7 @@ msgstr "Bidrag av"
|
||||
#. TRANSLATORS: Translate this to your name in your native language
|
||||
#: ../gramps/gui/aboutdialog.py:120
|
||||
msgid "translator-credits"
|
||||
msgstr "Peter Landgren, Pär Ekholm"
|
||||
msgstr "Pär Ekholm"
|
||||
|
||||
#: ../gramps/gui/aboutdialog.py:131
|
||||
#, python-format
|
||||
@ -18150,6 +18149,10 @@ msgstr "Kopiera allt"
|
||||
msgid "See data not in Filter"
|
||||
msgstr "Se data ej i filter"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:92
|
||||
msgid "Generate_Book_dialog"
|
||||
msgstr "Dialog för att skapa bok"
|
||||
|
||||
#: ../gramps/gui/plug/report/_bookdialog.py:166
|
||||
msgid "Available Books"
|
||||
msgstr "Tillgängliga böcker"
|
||||
@ -18477,6 +18480,10 @@ msgstr "standard"
|
||||
msgid "Document Styles"
|
||||
msgstr "Dokumentmallar"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:108
|
||||
msgid "manual|Document_Styles_dialog"
|
||||
msgstr "Dialog för dokumentmallar"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:140
|
||||
msgid "New Style"
|
||||
msgstr "Ny mall"
|
||||
@ -18503,6 +18510,10 @@ msgstr "Välj en mall"
|
||||
msgid "Style editor"
|
||||
msgstr "Mallredigerare"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:241
|
||||
msgid "manual|Style_editor_dialog"
|
||||
msgstr "Mallredigerardialog"
|
||||
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:341
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:369
|
||||
#: ../gramps/gui/plug/report/_styleeditor.py:387
|
||||
@ -18627,6 +18638,10 @@ msgstr "Välj mediaobjekt"
|
||||
msgid "manual|Select_Child_selector"
|
||||
msgstr "Välj barnselektor"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:70
|
||||
msgid "manual|Select_Person_selector"
|
||||
msgstr "Välj personselektor"
|
||||
|
||||
#: ../gramps/gui/selectors/selectperson.py:56
|
||||
msgid "manual|Select_Father_selector"
|
||||
msgstr "Välj farselektor"
|
||||
@ -18651,10 +18666,18 @@ msgstr "manual|Arkivplatser"
|
||||
msgid "Select Repository"
|
||||
msgstr "Välj arkivplats"
|
||||
|
||||
#: ../gramps/gui/selectors/selectrepository.py:75
|
||||
msgid "manual|Select_Repository_selector"
|
||||
msgstr "Välj arkivplatsselektor"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:62
|
||||
msgid "Select Source"
|
||||
msgstr "Välj källa"
|
||||
|
||||
#: ../gramps/gui/selectors/selectsource.py:76
|
||||
msgid "manual|Select_Source_selector"
|
||||
msgstr "Välj källselektor"
|
||||
|
||||
#: ../gramps/gui/spell.py:92
|
||||
msgid "Off"
|
||||
msgstr "Av"
|
||||
@ -19632,6 +19655,10 @@ msgstr ""
|
||||
msgid "Progress Information"
|
||||
msgstr "Framåtskridande"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:63
|
||||
msgid "manual|Reorder_Relationships_dialog"
|
||||
msgstr "Dialog för att ordna om släktskap"
|
||||
|
||||
#: ../gramps/gui/widgets/reorderfam.py:79
|
||||
msgid "Reorder Relationships"
|
||||
msgstr "Ordna om släktskap"
|
||||
@ -21825,6 +21852,10 @@ msgstr "E-POST"
|
||||
msgid "WWW"
|
||||
msgstr "WWW"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1438
|
||||
msgid "Writing media"
|
||||
msgstr "Skriver media"
|
||||
|
||||
#: ../gramps/plugins/export/exportgedcom.py:1570
|
||||
msgid "GEDCOM Export failed"
|
||||
msgstr "GEDCOM-export misslyckades"
|
||||
@ -23453,6 +23484,10 @@ msgstr "Redigera den valda Att Göra notisen"
|
||||
msgid "Add a new To Do note"
|
||||
msgstr "Lägg till ny Att Göra notis"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todo.py:201
|
||||
msgid "First select the object to which you want to attach a note"
|
||||
msgstr "Välj först objektet som du vill koppla en notis till"
|
||||
|
||||
#: ../gramps/plugins/gramplet/todogramplet.py:149
|
||||
msgid "Unattached"
|
||||
msgstr "Okopplad"
|
||||
@ -36415,12 +36450,10 @@ msgstr "Webb-kalender-rapport"
|
||||
msgid "Calculating Holidays for year %04d"
|
||||
msgstr "Beräknar helgdagar för år %04d"
|
||||
|
||||
#: ../gramps/plugins/webreport/webcal.py:486
|
||||
#: ../gramps/plugins/webreport/webcal.py:491
|
||||
#, python-format
|
||||
msgid ""
|
||||
"the \"WebCal\" will be the potential-email Subject|Created for "
|
||||
"%(html_email_author_start)sWebCal%(html_email_author_end)s"
|
||||
msgstr "Skapat för %(html_email_author_start)sWebCal%(html_email_author_end)s"
|
||||
msgid "the \"WebCal\" will be the potential-email Subject|Created for %(html_email_author_start)sWebCal%(html_email_author_end)s"
|
||||
msgstr "\"WebCal\" kommer att vara den viktigaste e-postsubjektet|Skapat för %(html_email_author_start)sWebCal%(html_email_author_end)s"
|
||||
|
||||
#: ../gramps/plugins/webreport/webcal.py:494
|
||||
#, python-format
|
||||
@ -37400,17 +37433,21 @@ msgstr "Media_hanterare"
|
||||
#~ msgid "Place Locations"
|
||||
#~ msgstr "Platslokalisering"
|
||||
|
||||
#~ msgid "Incomplete names"
|
||||
#~ msgstr "Ofullständigt namn"
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:156
|
||||
msgid "Incomplete names"
|
||||
msgstr "Ofullständiga namn"
|
||||
|
||||
#~ msgid "Individuals missing birth dates"
|
||||
#~ msgstr "Personer som saknar födelsedatum"
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:160
|
||||
msgid "Individuals missing birth dates"
|
||||
msgstr "Personer som saknar födelsedatum"
|
||||
|
||||
#~ msgid "Disconnected individuals"
|
||||
#~ msgstr "Isolerade personer"
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:164
|
||||
msgid "Disconnected individuals"
|
||||
msgstr "Släktlösa personer"
|
||||
|
||||
#~ msgid "Individuals with media objects"
|
||||
#~ msgstr "Personer med mediaobjekt"
|
||||
#: ../gramps/plugins/gramplet/statsgramplet.py:181
|
||||
msgid "Individuals with media objects"
|
||||
msgstr "Personer med mediaobjekt"
|
||||
|
||||
#~ msgid "Empty event note ignored"
|
||||
#~ msgstr "Tom händelsenotis ignorerades"
|
||||
@ -41216,8 +41253,9 @@ msgstr "Media_hanterare"
|
||||
#~ msgid "Dates on events are either about or after/before"
|
||||
#~ msgstr "Datum för händelser är antingen omkring eller efter/före"
|
||||
|
||||
#~ msgid "Help"
|
||||
#~ msgstr "Hjälp"
|
||||
#: ../gramps/plugins/tool/mediamanager.py:91
|
||||
msgid "Help"
|
||||
msgstr "Hjälp"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The Calculate Estimated Dates Tool is used to add and remove birth and "
|
||||
@ -41420,3 +41458,4 @@ msgstr "Media_hanterare"
|
||||
|
||||
#~ msgid "Name Format Editor"
|
||||
#~ msgstr "Namnformatsredigerare"
|
||||
|
||||
|
@ -51,11 +51,18 @@ from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
from argparse import ArgumentParser
|
||||
|
||||
# Windows OS
|
||||
|
||||
if sys.platform == 'win32':
|
||||
if sys.platform in ['linux', 'linux2', 'darwin', 'cygwin'] or shutil.which('msgmerge'):
|
||||
msgmergeCmd = 'msgmerge'
|
||||
msgfmtCmd = 'msgfmt'
|
||||
msgattribCmd = 'msgattrib'
|
||||
xgettextCmd = 'xgettext'
|
||||
pythonCmd = os.path.join(sys.prefix, 'bin', 'python3')
|
||||
elif sys.platform == 'win32':
|
||||
# GetText Win 32 obtained from http://gnuwin32.sourceforge.net/packages/gettext.htm
|
||||
# ....\gettext\bin\msgmerge.exe needs to be on the path
|
||||
msgmergeCmd = os.path.join('C:', 'Program Files(x86)', 'gettext', 'bin', 'msgmerge.exe')
|
||||
@ -163,7 +170,7 @@ def TipsParse(filename, mark):
|
||||
"Editor."
|
||||
'''
|
||||
|
||||
with open('../data/tips.xml.in.h', 'w') as tips:
|
||||
with open('../data/tips.xml.in.h', 'w', encoding='utf-8') as tips:
|
||||
marklist = root.iter(mark)
|
||||
for key in marklist:
|
||||
tip = ElementTree.tostring(key, encoding="UTF-8", method="xml")
|
||||
|
Loading…
Reference in New Issue
Block a user