1<?php 2 3/** 4 * webtrees: online genealogy 5 * Copyright (C) 2023 webtrees development team 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <https://www.gnu.org/licenses/>. 16 */ 17 18declare(strict_types=1); 19 20namespace Fisharebest\Webtrees\CustomTags; 21 22use Fisharebest\Webtrees\Contracts\CustomTagInterface; 23use Fisharebest\Webtrees\Contracts\ElementInterface; 24use Fisharebest\Webtrees\Elements\AddressCity; 25use Fisharebest\Webtrees\Elements\AddressCountry; 26use Fisharebest\Webtrees\Elements\AddressEmail; 27use Fisharebest\Webtrees\Elements\AddressFax; 28use Fisharebest\Webtrees\Elements\AddressLine; 29use Fisharebest\Webtrees\Elements\AddressLine1; 30use Fisharebest\Webtrees\Elements\AddressLine2; 31use Fisharebest\Webtrees\Elements\AddressLine3; 32use Fisharebest\Webtrees\Elements\AddressPostalCode; 33use Fisharebest\Webtrees\Elements\AddressState; 34use Fisharebest\Webtrees\Elements\AddressWebPage; 35use Fisharebest\Webtrees\Elements\CauseOfEvent; 36use Fisharebest\Webtrees\Elements\CertaintyAssessment; 37use Fisharebest\Webtrees\Elements\Change; 38use Fisharebest\Webtrees\Elements\ChangeDate; 39use Fisharebest\Webtrees\Elements\CustomElement; 40use Fisharebest\Webtrees\Elements\DateValue; 41use Fisharebest\Webtrees\Elements\DateValueToday; 42use Fisharebest\Webtrees\Elements\EmptyElement; 43use Fisharebest\Webtrees\Elements\EventAttributeType; 44use Fisharebest\Webtrees\Elements\EventTypeCitedFrom; 45use Fisharebest\Webtrees\Elements\FamilyStatusText; 46use Fisharebest\Webtrees\Elements\GovIdentifier; 47use Fisharebest\Webtrees\Elements\HierarchicalRelationship; 48use Fisharebest\Webtrees\Elements\LanguageId; 49use Fisharebest\Webtrees\Elements\LocationRecord; 50use Fisharebest\Webtrees\Elements\MaidenheadLocator; 51use Fisharebest\Webtrees\Elements\NamePieceGiven; 52use Fisharebest\Webtrees\Elements\NoteStructure; 53use Fisharebest\Webtrees\Elements\PafUid; 54use Fisharebest\Webtrees\Elements\PhoneNumber; 55use Fisharebest\Webtrees\Elements\PhoneticType; 56use Fisharebest\Webtrees\Elements\PlaceHierarchy; 57use Fisharebest\Webtrees\Elements\PlaceLatitude; 58use Fisharebest\Webtrees\Elements\PlaceLongtitude; 59use Fisharebest\Webtrees\Elements\PlaceName; 60use Fisharebest\Webtrees\Elements\PlacePhoneticVariation; 61use Fisharebest\Webtrees\Elements\PlaceRomanizedVariation; 62use Fisharebest\Webtrees\Elements\RelationIsDescriptor; 63use Fisharebest\Webtrees\Elements\ReligiousAffiliation; 64use Fisharebest\Webtrees\Elements\ResearchTask; 65use Fisharebest\Webtrees\Elements\ResearchTaskPriority; 66use Fisharebest\Webtrees\Elements\ResearchTaskStatus; 67use Fisharebest\Webtrees\Elements\ResearchTaskType; 68use Fisharebest\Webtrees\Elements\ResponsibleAgency; 69use Fisharebest\Webtrees\Elements\RestrictionNotice; 70use Fisharebest\Webtrees\Elements\RoleInEvent; 71use Fisharebest\Webtrees\Elements\RomanizedType; 72use Fisharebest\Webtrees\Elements\SexXValue; 73use Fisharebest\Webtrees\Elements\SourceData; 74use Fisharebest\Webtrees\Elements\SubmitterText; 75use Fisharebest\Webtrees\Elements\TextFromSource; 76use Fisharebest\Webtrees\Elements\TimeValueNow; 77use Fisharebest\Webtrees\Elements\VersionNumber; 78use Fisharebest\Webtrees\Elements\WhereWithinSource; 79use Fisharebest\Webtrees\Elements\XrefAssociate; 80use Fisharebest\Webtrees\Elements\XrefLocation; 81use Fisharebest\Webtrees\Elements\XrefMedia; 82use Fisharebest\Webtrees\Elements\XrefRepository; 83use Fisharebest\Webtrees\Elements\XrefSource; 84use Fisharebest\Webtrees\I18N; 85 86/** 87 * GEDCOM files created by Gedcom-L 88 * 89 * @see https://www.genwiki.de/GEDCOM-L 90 */ 91class GedcomL implements CustomTagInterface 92{ 93 /** 94 * The name of the application. 95 * 96 * @return string 97 */ 98 public function name(): string 99 { 100 return 'GEDCOM-L'; 101 } 102 103 /** 104 * Tags created by this application. 105 * 106 * @return array<string,ElementInterface> 107 */ 108 public function tags(): array 109 { 110 return [ 111 'FAM:*:ADDR:_NAME' => new CustomElement(I18N::translate('Name of addressee')), 112 // I18N: https://gov.genealogy.net 113 'FAM:*:PLAC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')), 114 'FAM:*:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')), 115 // I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System 116 'FAM:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')), 117 'FAM:*:PLAC:_POST' => new AddressPostalCode(I18N::translate('Postal code')), 118 'FAM:*:PLAC:_POST:DATE' => new DateValue(I18N::translate('Date')), 119 'FAM:*:_ASSO' => new XrefAssociate(I18N::translate('Associate')), 120 'FAM:*:_ASSO:NOTE' => new NoteStructure(I18N::translate('Note on association')), 121 'FAM:*:_ASSO:RELA' => new RelationIsDescriptor(I18N::translate('Relationship')), 122 'FAM:*:_ASSO:SOUR' => new XrefSource(I18N::translate('Source citation')), 123 'FAM:*:_ASSO:SOUR:DATA' => new SourceData(I18N::translate('Data')), 124 'FAM:*:_ASSO:SOUR:DATA:DATE' => new DateValue(I18N::translate('Date of entry in original source')), 125 'FAM:*:_ASSO:SOUR:DATA:TEXT' => new TextFromSource(I18N::translate('Text')), 126 'FAM:*:_ASSO:SOUR:EVEN' => new EventTypeCitedFrom(I18N::translate('Event')), 127 'FAM:*:_ASSO:SOUR:EVEN:ROLE' => new RoleInEvent(I18N::translate('Role')), 128 'FAM:*:_ASSO:SOUR:NOTE' => new NoteStructure(I18N::translate('Note on source citation')), 129 'FAM:*:_ASSO:SOUR:OBJE' => new XrefMedia(I18N::translate('Media object')), 130 'FAM:*:_ASSO:SOUR:PAGE' => new WhereWithinSource(I18N::translate('Citation details')), 131 'FAM:*:_ASSO:SOUR:QUAY' => new CertaintyAssessment(I18N::translate('Quality of data')), 132 'FAM:*:_WITN' => new CustomElement(I18N::translate('Witnesses')), 133 'FAM:_ASSO' => new XrefAssociate(I18N::translate('Associate')), 134 'FAM:_ASSO:RELA' => new RelationIsDescriptor(I18N::translate('Relationship')), 135 'FAM:_STAT' => new FamilyStatusText(I18N::translate('Family status')), 136 'FAM:_TODO' => new ResearchTask(I18N::translate('Research task'), ['DESC' => '1:1', '_CAT' => '0:1', '_PRTY' => '0:1', 'TYPE' => '0:1', 'NOTE' => '0:M', 'DATA' => '0:1', 'STAT' => '0:1', '_CDATE' => '0:1', '_RDATE' => '0:1', 'REPO' => '0:1', '_UID' => '0:M']), 137 'FAM:_TODO:DATA' => new SubmitterText(I18N::translate('The solution')), 138 'FAM:_TODO:DATE' => new DateValueToday(I18N::translate('Creation date')), 139 'FAM:_TODO:DESC' => new CustomElement(I18N::translate('Description')), 140 'FAM:_TODO:NOTE' => new NoteStructure(I18N::translate('Note')), 141 'FAM:_TODO:REPO' => new XrefRepository(I18N::translate('Repository'), []), 142 'FAM:_TODO:STAT' => new ResearchTaskStatus(I18N::translate('Status')), 143 'FAM:_TODO:TYPE' => new ResearchTaskType(I18N::translate('Type of research task')), 144 'FAM:_TODO:_CAT' => new CustomElement(I18N::translate('Category')), 145 'FAM:_TODO:_CDATE' => new DateValue(I18N::translate('Completion date')), 146 'FAM:_TODO:_PRTY' => new ResearchTaskPriority(I18N::translate('Priority')), 147 'FAM:_TODO:_RDATE' => new DateValue(I18N::translate('Reminder date')), 148 'FAM:_UID' => new PafUid(I18N::translate('Unique identifier')), 149 'HEAD:GEDC:VERS:_ADDENDUM' => new EmptyElement(I18N::translate('GEDCOM-L')), 150 'HEAD:GEDC:VERS:_ADDENDUM:VERS' => new VersionNumber(I18N::translate('Version')), 151 'HEAD:GEDC:VERS:_ADDENDUM:WWW' => new AddressWebPage(I18N::translate('URL')), 152 'HEAD:SOUR:CORP:ADDR:_NAME' => new CustomElement(I18N::translate('Name of addressee')), 153 'HEAD:_SCHEMA' => new EmptyElement(I18N::translate('Schema')), 154 'HEAD:_SCHEMA:*' => new EmptyElement(I18N::translate('Base GEDCOM tag')), 155 'HEAD:_SCHEMA:*:*' => new EmptyElement(I18N::translate('New GEDCOM tag')), 156 'HEAD:_SCHEMA:*:*:*' => new EmptyElement(I18N::translate('New GEDCOM tag')), 157 'HEAD:_SCHEMA:*:*:*:*' => new EmptyElement(I18N::translate('New GEDCOM tag')), 158 'HEAD:_SCHEMA:*:*:*:*:*' => new EmptyElement(I18N::translate('New GEDCOM tag')), 159 'HEAD:_SCHEMA:*:*:*:*:*:*' => new EmptyElement(I18N::translate('New GEDCOM tag')), 160 'HEAD:_SCHEMA:*:*:*:*:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')), 161 'HEAD:_SCHEMA:*:*:*:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')), 162 'HEAD:_SCHEMA:*:*:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')), 163 'HEAD:_SCHEMA:*:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')), 164 'HEAD:_SCHEMA:*:*:_DEFN' => new EmptyElement(I18N::translate('Definition')), 165 'INDI:*:ADDR:_NAME' => new CustomElement(I18N::translate('Name of addressee')), 166 // I18N: https://gov.genealogy.net 167 'INDI:*:PLAC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')), 168 'INDI:*:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')), 169 // I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System 170 'INDI:*:PLAC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')), 171 'INDI:*:PLAC:_POST' => new AddressPostalCode(I18N::translate('Postal code')), 172 'INDI:*:PLAC:_POST:DATE' => new DateValue(I18N::translate('Date')), 173 'INDI:*:_ASSO' => new XrefAssociate(I18N::translate('Associate')), 174 'INDI:*:_ASSO:NOTE' => new NoteStructure(I18N::translate('Note on association')), 175 'INDI:*:_ASSO:RELA' => new RelationIsDescriptor(I18N::translate('Relationship')), 176 'INDI:*:_ASSO:SOUR' => new XrefSource(I18N::translate('Source citation')), 177 'INDI:*:_ASSO:SOUR:DATA' => new SourceData(I18N::translate('Data')), 178 'INDI:*:_ASSO:SOUR:DATA:DATE' => new DateValue(I18N::translate('Date of entry in original source')), 179 'INDI:*:_ASSO:SOUR:DATA:TEXT' => new TextFromSource(I18N::translate('Text')), 180 'INDI:*:_ASSO:SOUR:EVEN' => new EventTypeCitedFrom(I18N::translate('Event')), 181 'INDI:*:_ASSO:SOUR:EVEN:ROLE' => new RoleInEvent(I18N::translate('Role')), 182 'INDI:*:_ASSO:SOUR:NOTE' => new NoteStructure(I18N::translate('Note on source citation')), 183 'INDI:*:_ASSO:SOUR:OBJE' => new XrefMedia(I18N::translate('Media object')), 184 'INDI:*:_ASSO:SOUR:PAGE' => new WhereWithinSource(I18N::translate('Citation details')), 185 'INDI:*:_ASSO:SOUR:QUAY' => new CertaintyAssessment(I18N::translate('Quality of data')), 186 'INDI:*:_WITN' => new CustomElement(I18N::translate('Witnesses')), 187 'INDI:BAPM:_GODP' => new CustomElement(I18N::translate('Godparents')), 188 'INDI:CHR:_GODP' => new CustomElement(I18N::translate('Godparents')), 189 'INDI:NAME:_RUFNAME' => new NamePieceGiven(I18N::translate('Rufname')), 190 'INDI:OBJE:_PRIM' => new CustomElement(I18N::translate('Highlighted image')), 191 'INDI:SEX' => new SexXValue(I18N::translate('Gender')), 192 'INDI:_TODO' => new ResearchTask(I18N::translate('Research task')), 193 'INDI:_TODO:DATA' => new SubmitterText(I18N::translate('The solution')), 194 'INDI:_TODO:DATE' => new DateValueToday(I18N::translate('Creation date')), 195 'INDI:_TODO:DESC' => new CustomElement(I18N::translate('Description')), 196 'INDI:_TODO:NOTE' => new NoteStructure(I18N::translate('Note')), 197 'INDI:_TODO:REPO' => new XrefRepository(I18N::translate('Repository'), []), 198 'INDI:_TODO:STAT' => new ResearchTaskStatus(I18N::translate('Status')), 199 'INDI:_TODO:TYPE' => new ResearchTaskType(I18N::translate('Type of research task')), 200 'INDI:_TODO:_CAT' => new CustomElement(I18N::translate('Category')), 201 'INDI:_TODO:_CDATE' => new DateValue(I18N::translate('Completion date')), 202 'INDI:_TODO:_PRTY' => new ResearchTaskPriority(I18N::translate('Priority')), 203 'INDI:_TODO:_RDATE' => new DateValue(I18N::translate('Reminder date')), 204 'INDI:_UID' => new PafUid(I18N::translate('Unique identifier')), 205 'NOTE:_UID' => new PafUid(I18N::translate('Unique identifier')), 206 'OBJE:FILE:_PRIM' => new CustomElement(I18N::translate('Highlighted image')), 207 'OBJE:_UID' => new PafUid(I18N::translate('Unique identifier')), 208 'REPO:ADDR:_NAME' => new CustomElement(I18N::translate('Name of addressee')), 209 'REPO:_UID' => new PafUid(I18N::translate('Unique identifier')), 210 'SOUR:_UID' => new PafUid(I18N::translate('Unique identifier')), 211 'SOUR:DATA:EVEN:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')), 212 // I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System 213 'SOUR:DATA:EVEN:PLAC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')), 214 'SOUR:DATA:EVEN:PLAC:_POST' => new AddressPostalCode(I18N::translate('Postal code')), 215 'SOUR:DATA:EVEN:PLAC:_POST:DATE' => new DateValue(I18N::translate('Date')), 216 'SOUR:DATA:EVEN:PLAC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')), 217 'SUBM:ADDR:_NAME' => new CustomElement(I18N::translate('Name of addressee')), 218 'SUBM:_UID' => new PafUid(I18N::translate('Unique identifier')), 219 'SUBN:_UID' => new PafUid(I18N::translate('Unique identifier')), 220 '_LOC' => new LocationRecord(I18N::translate('Location')), 221 '_LOC:CHAN' => new Change(I18N::translate('Last change')), 222 '_LOC:CHAN:DATE' => new ChangeDate(I18N::translate('Date of last change')), 223 '_LOC:CHAN:DATE:TIME' => new TimeValueNow(I18N::translate('Time of last change')), 224 '_LOC:CHAN:NOTE' => new NoteStructure(I18N::translate('Note on last change')), 225 '_LOC:EVEN' => new CustomElement(I18N::translate('Event'), ['TYPE' => '0:1', 'DATE' => '0:1', 'PLAC' => '0:1', 'ADDR' => '0:1', 'EMAIL' => '0:1:?', 'WWW' => '0:1:?', 'PHON' => '0:1:?', 'FAX' => '0:1:?', 'CAUS' => '0:1', 'AGNC' => '0:1', 'RELI' => '0:1', 'NOTE' => '0:M', 'OBJE' => '0:M', 'SOUR' => '0:M', 'RESN' => '0:1']), 226 '_LOC:EVEN:ADDR' => new AddressLine(I18N::translate('Address')), 227 '_LOC:EVEN:ADDR:ADR1' => new AddressLine1(I18N::translate('Address line 1')), 228 '_LOC:EVEN:ADDR:ADR2' => new AddressLine2(I18N::translate('Address line 2')), 229 '_LOC:EVEN:ADDR:ADR3' => new AddressLine3(I18N::translate('Address line 3')), 230 '_LOC:EVEN:ADDR:CITY' => new AddressCity(I18N::translate('City')), 231 '_LOC:EVEN:ADDR:CTRY' => new AddressCountry(I18N::translate('Country')), 232 '_LOC:EVEN:ADDR:POST' => new AddressPostalCode(I18N::translate('Postal code')), 233 '_LOC:EVEN:ADDR:STAE' => new AddressState(I18N::translate('State')), 234 '_LOC:EVEN:AGNC' => new ResponsibleAgency(I18N::translate('Agency')), 235 '_LOC:EVEN:CAUS' => new CauseOfEvent(I18N::translate('Cause')), 236 '_LOC:EVEN:DATE' => new DateValue(I18N::translate('Date of event')), 237 '_LOC:EVEN:EMAIL' => new AddressEmail(I18N::translate('Email address')), 238 '_LOC:EVEN:FAX' => new AddressFax(I18N::translate('Fax')), 239 '_LOC:EVEN:NOTE' => new NoteStructure(I18N::translate('Note')), 240 '_LOC:EVEN:OBJE' => new XrefMedia(I18N::translate('Media object')), 241 '_LOC:EVEN:PHON' => new PhoneNumber(I18N::translate('Phone')), 242 '_LOC:EVEN:PLAC' => new PlaceName(I18N::translate('Place of event')), 243 '_LOC:EVEN:PLAC:FONE' => new PlacePhoneticVariation(I18N::translate('Phonetic place')), 244 '_LOC:EVEN:PLAC:FONE:TYPE' => new PhoneticType(I18N::translate('Type')), 245 '_LOC:EVEN:PLAC:FORM' => new PlaceHierarchy(I18N::translate('Format')), 246 '_LOC:EVEN:PLAC:MAP' => new EmptyElement(I18N::translate('Coordinates'), ['LATI' => '1:1', 'LONG' => '1:1']), 247 '_LOC:EVEN:PLAC:MAP:LATI' => new PlaceLatitude(I18N::translate('Latitude')), 248 '_LOC:EVEN:PLAC:MAP:LONG' => new PlaceLongtitude(I18N::translate('Longitude')), 249 '_LOC:EVEN:PLAC:NOTE' => new NoteStructure(I18N::translate('Note on place')), 250 '_LOC:EVEN:PLAC:ROMN' => new PlaceRomanizedVariation(I18N::translate('Romanized place')), 251 '_LOC:EVEN:PLAC:ROMN:TYPE' => new RomanizedType(I18N::translate('Type')), 252 '_LOC:EVEN:PLAC:_LOC' => new XrefLocation(I18N::translate('Location')), 253 '_LOC:EVEN:RELI' => new ReligiousAffiliation(I18N::translate('Religion'), []), 254 '_LOC:EVEN:RESN' => new RestrictionNotice(I18N::translate('Restriction')), 255 '_LOC:EVEN:SOUR' => new XrefSource(I18N::translate('Source citation')), 256 '_LOC:EVEN:TYPE' => new EventAttributeType(I18N::translate('Type of event')), 257 '_LOC:EVEN:WWW' => new CustomElement(I18N::translate('URL')), 258 '_LOC:MAP' => new EmptyElement(I18N::translate('Coordinates'), ['LATI' => '1:1', 'LONG' => '1:1']), 259 '_LOC:MAP:LATI' => new PlaceLatitude(I18N::translate('Latitude')), 260 '_LOC:MAP:LONG' => new PlaceLongtitude(I18N::translate('Longitude')), 261 '_LOC:NAME' => new PlaceName(I18N::translate('Place'), ['ABBR' => '0:1', 'DATE' => '0:1', 'LANG' => '0:1', 'SOUR' => '0:M']), 262 '_LOC:NAME:ABBR' => new CustomElement(I18N::translate('Abbreviation'), ['TYPE' => '0:1']), 263 '_LOC:NAME:ABBR:TYPE' => new CustomElement(I18N::translate('Type of abbreviation')), 264 '_LOC:NAME:DATE' => new DateValue(I18N::translate('Date')), 265 '_LOC:NAME:LANG' => new LanguageId(I18N::translate('Language')), 266 '_LOC:NAME:SOUR' => new XrefSource(I18N::translate('Source')), 267 '_LOC:NOTE' => new NoteStructure(I18N::translate('Note')), 268 '_LOC:OBJE' => new XrefMedia(I18N::translate('Media')), 269 '_LOC:RELI' => new ReligiousAffiliation(I18N::translate('Religion'), []), 270 '_LOC:SOUR' => new XrefSource(I18N::translate('Source')), 271 '_LOC:SOUR:DATA' => new SourceData(I18N::translate('Data')), 272 '_LOC:SOUR:DATA:DATE' => new DateValue(I18N::translate('Date of entry in original source')), 273 '_LOC:SOUR:DATA:TEXT' => new TextFromSource(I18N::translate('Text')), 274 '_LOC:SOUR:EVEN' => new EventTypeCitedFrom(I18N::translate('Event')), 275 '_LOC:SOUR:EVEN:ROLE' => new RoleInEvent(I18N::translate('Role')), 276 '_LOC:SOUR:NOTE' => new NoteStructure(I18N::translate('Note on source citation')), 277 '_LOC:SOUR:OBJE' => new XrefMedia(I18N::translate('Media object')), 278 '_LOC:SOUR:PAGE' => new WhereWithinSource(I18N::translate('Citation details')), 279 '_LOC:SOUR:QUAY' => new CertaintyAssessment(I18N::translate('Quality of data')), 280 '_LOC:TYPE' => new CustomElement(I18N::translate('Type of location'), ['DATE' => '0:1', '_GOVTYPE' => '0:1', 'SOUR' => '0:M']), 281 '_LOC:TYPE:DATE' => new DateValue(I18N::translate('Date')), 282 '_LOC:TYPE:SOUR' => new XrefSource(I18N::translate('Source')), 283 '_LOC:TYPE:_GOVTYPE' => new CustomElement(I18N::translate('GOV identifier type')), 284 '_LOC:_AIDN' => new CustomElement(I18N::translate('Administrative ID')), 285 '_LOC:_AIDN:DATE' => new DateValue(I18N::translate('Date')), 286 '_LOC:_AIDN:SOUR' => new XrefSource(I18N::translate('Source')), 287 '_LOC:_AIDN:TYPE' => new CustomElement(I18N::translate('Type of administrative ID')), 288 '_LOC:_DMGD' => new CustomElement(I18N::translate('Demographic data')), 289 '_LOC:_DMGD:DATE' => new DateValue(I18N::translate('Date')), 290 '_LOC:_DMGD:SOUR' => new XrefSource(I18N::translate('Source')), 291 '_LOC:_DMGD:TYPE' => new CustomElement(I18N::translate('Type of demographic data')), 292 // I18N: https://gov.genealogy.net 293 '_LOC:_GOV' => new GovIdentifier(I18N::translate('GOV identifier')), 294 '_LOC:_LOC' => new XrefLocation(I18N::translate('Parent location'), ['DATE' => '0:1', 'SOUR' => '0:M', 'TYPE' => '0:1']), 295 '_LOC:_LOC:DATE' => new DateValue(I18N::translate('Date')), 296 '_LOC:_LOC:SOUR' => new XrefSource(I18N::translate('Source')), 297 '_LOC:_LOC:TYPE' => new HierarchicalRelationship(I18N::translate('Hierarchical relationship')), 298 // I18N: https://en.wikipedia.org/wiki/Maidenhead_Locator_System 299 '_LOC:_MAIDENHEAD' => new MaidenheadLocator(I18N::translate('Maidenhead location code')), 300 '_LOC:_POST' => new AddressPostalCode(I18N::translate('Postal code')), 301 '_LOC:_POST:DATE' => new DateValue(I18N::translate('Date')), 302 '_LOC:_POST:SOUR' => new XrefSource(I18N::translate('Source')), 303 '_LOC:_UID' => new PafUid(I18N::translate('Unique identifier')), 304 '_LOC:*:SOUR:DATA' => new SourceData(I18N::translate('Data')), 305 '_LOC:*:SOUR:DATA:DATE' => new DateValue(I18N::translate('Date of entry in original source')), 306 '_LOC:*:SOUR:DATA:TEXT' => new TextFromSource(I18N::translate('Text')), 307 '_LOC:*:SOUR:EVEN' => new EventTypeCitedFrom(I18N::translate('Event')), 308 '_LOC:*:SOUR:EVEN:ROLE' => new RoleInEvent(I18N::translate('Role')), 309 '_LOC:*:SOUR:NOTE' => new NoteStructure(I18N::translate('Note on source citation')), 310 '_LOC:*:SOUR:OBJE' => new XrefMedia(I18N::translate('Media object')), 311 '_LOC:*:SOUR:PAGE' => new WhereWithinSource(I18N::translate('Citation details')), 312 '_LOC:*:SOUR:QUAY' => new CertaintyAssessment(I18N::translate('Quality of data')), 313 ]; 314 } 315} 316