1<?php 2/** 3 * webtrees: online genealogy 4 * Copyright (C) 2019 webtrees development team 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16namespace Fisharebest\Webtrees; 17 18use Rhumsaa\Uuid\Uuid; 19 20/** 21 * Static GEDCOM data for tags 22 */ 23class GedcomTag 24{ 25 /** @var string[] All tags that webtrees knows how to translate - including special/internal tags */ 26 private static $ALL_TAGS = array( 27 'ABBR', 'ADDR', 'ADR1', 'ADR2', 'ADOP', 'ADOP:DATE', 'ADOP:PLAC', 28 'AFN', 'AGE', 'AGNC', 'ALIA', 'ANCE', 'ANCI', 'ANUL', 'ASSO', 'AUTH', 'BAPL', 29 'BAPL:DATE', 'BAPL:PLAC', 'BAPM', 'BAPM:DATE', 'BAPM:PLAC', 'BARM', 30 'BARM:DATE', 'BARM:PLAC', 'BASM', 'BASM:DATE', 'BASM:PLAC', 31 'BIRT', 'BIRT:DATE', 'BIRT:PLAC', 'BLES', 'BLES:DATE', 32 'BLES:PLAC', 'BLOB', 'BURI', 'BURI:DATE', 'BURI:PLAC', 33 'CALN', 'CAST', 'CAUS', 'CEME', 'CENS', 'CENS:DATE', 'CENS:PLAC', 'CHAN', 'CHAN:DATE', 'CHAN:_WT_USER', 'CHAR', 34 'CHIL', 'CHR', 'CHR:DATE', 'CHR:PLAC', 'CHRA', 'CITN', 'CITY', 35 'COMM', 'CONC', 'CONT', 'CONF', 'CONF:DATE', 'CONF:PLAC', 'CONL', 36 'COPR', 'CORP', 'CREM', 'CREM:DATE', 'CREM:PLAC', 'CTRY', 'DATA', 37 'DATA:DATE', 'DATE', 'DEAT', 'DEAT:CAUS', 'DEAT:DATE', 'DEAT:PLAC', 38 'DESC', 'DESI', 'DEST', 'DIV', 'DIVF', 'DSCR', 'EDUC', 'EDUC:AGNC', 'EMAI', 39 'EMAIL', 'EMAL', 'EMIG', 'EMIG:DATE', 'EMIG:PLAC', 'ENDL', 'ENDL:DATE', 40 'ENDL:PLAC', 'ENGA', 'ENGA:DATE', 'ENGA:PLAC', 'EVEN', 'EVEN:DATE', 41 'EVEN:PLAC', 'EVEN:TYPE', 'FACT', 'FACT:TYPE', 'FAM', 'FAMC', 'FAMF', 'FAMS', 'FAMS:CENS:DATE', 'FAMS:CENS:PLAC', 42 'FAMS:DIV:DATE', 'FAMS:MARR:DATE', 'FAMS:MARR:PLAC', 'FAMS:NOTE', 43 'FAX', 'FCOM', 'FCOM:DATE', 44 'FCOM:PLAC', 'FILE', 'FONE', 'FORM', 'GEDC', 'GIVN', 'GRAD', 45 'HEAD', 'HUSB', 'IDNO', 'IMMI', 'IMMI:DATE', 'IMMI:PLAC', 'INDI', 'INFL', 46 'LANG', 'LATI', 'LEGA', 'LONG', 'MAP', 'MARB', 'MARB:DATE', 'MARB:PLAC', 47 'MARC', 'MARL', 'MARR', 'MARR:DATE', 'MARR:PLAC', 48 'MARR_CIVIL', 'MARR_PARTNERS', 'MARR_RELIGIOUS', 'MARR_UNKNOWN', 'MARS', 49 'MEDI', 'NAME', 'NAME:FONE', 'NAME:_HEB', 'NATI', 'NATU', 'NATU:DATE', 'NATU:PLAC', 50 'NCHI', 'NICK', 'NMR', 'NOTE', 'NPFX', 'NSFX', 'OBJE', 'OCCU', 'OCCU:AGNC', 51 'ORDI', 'ORDN', 'ORDN:AGNC', 'ORDN:DATE', 'ORDN:PLAC', 'PAGE', 'PEDI', 'PHON', 52 'PLAC', 'PLAC:FONE', 'PLAC:ROMN', 'PLAC:_HEB', 'POST', 'PROB', 'PROP', 'PUBL', 53 'QUAY', 'REFN', 'RELA', 'RELI', 'REPO', 'RESI', 'RESI:DATE', 'RESI:PLAC', 'RESN', 54 'RETI', 'RETI:AGNC', 'RFN', 'RIN', 'ROLE', 'ROMN', 'SERV', 'SEX', 'SHARED_NOTE', 55 'SLGC', 'SLGC:DATE', 'SLGC:PLAC', 'SLGS', 'SLGS:DATE', 'SLGS:PLAC', 'SOUR', 56 'SPFX', 'SSN', 'STAE', 'STAT', 'STAT:DATE', 'SUBM', 'SUBN', 'SURN', 'TEMP', 57 'TEXT', 'TIME', 'TITL', 'TITL:FONE', 'TITL:ROMN', 'TITL:_HEB', 'TRLR', 'TYPE', 58 'URL', 'VERS', 'WIFE', 'WILL', 'WWW', '_ADOP_CHIL', '_ADOP_GCHI', '_ADOP_GCH1', 59 '_ADOP_GCH2', '_ADOP_HSIB', '_ADOP_SIBL', '_ADPF', '_ADPM', '_AKA', '_AKAN', '_ASSO', 60 '_BAPM_CHIL', '_BAPM_GCHI', '_BAPM_GCH1', '_BAPM_GCH2', '_BAPM_HSIB', '_BAPM_SIBL', 61 '_BIBL', '_BIRT_CHIL', '_BIRT_GCHI', '_BIRT_GCH1', '_BIRT_GCH2', '_BIRT_HSIB', '_BIRT_SIBL', 62 '_BRTM', '_BRTM:DATE', '_BRTM:PLAC', '_BURI_CHIL', 63 '_BURI_GCHI', '_BURI_GCH1', '_BURI_GCH2', '_BURI_GPAR', '_BURI_HSIB', '_BURI_SIBL', '_BURI_SPOU', 64 '_CHR_CHIL', '_CHR_GCHI', '_CHR_GCH1', '_CHR_GCH2', '_CHR_HSIB', '_CHR_SIBL', '_COML', 65 '_CREM_CHIL', '_CREM_GCHI', '_CREM_GCH1', '_CREM_GCH2', '_CREM_GPAR', '_CREM_HSIB', '_CREM_SIBL', '_CREM_SPOU', 66 '_DBID', '_DEAT_CHIL', '_DEAT_GCHI', '_DEAT_GCH1', '_DEAT_GCH2', '_DEAT_GPAR', '_DEAT_GPA1', '_DEAT_GPA2', 67 '_DEAT_HSIB', '_DEAT_PARE', '_DEAT_SIBL', '_DEAT_SPOU', '_DEG', '_DETS', '_DNA', 68 '_EMAIL', '_EYEC', '_FA1', '_FA2', '_FA3', '_FA4', '_FA5', '_FA6', '_FA7', '_FA8', 69 '_FA9', '_FA10', '_FA11', '_FA12', '_FA13', '_FNRL', '_FREL', '_GEDF', '_GODP', '_HAIR', 70 '_HEB', '_HEIG', '_HNM', '_HOL', '_INTE', '_LOC', '_MARI', 71 '_MARNM', '_PRIM', '_MARNM_SURN', '_MARR_CHIL', '_MARR_FAMC', '_MARR_GCHI', 72 '_MARR_GCH1', '_MARR_GCH2', '_MARR_HSIB', '_MARR_PARE', '_MARR_SIBL', '_MBON', 73 '_MDCL', '_MEDC', '_MEND', '_MILI', '_MILT', '_MREL', '_MSTAT', '_NAME', '_NAMS', 74 '_NLIV', '_NMAR', '_NMR', '_WT_USER', '_PRMN', '_SCBK', '_SEPR', '_SSHOW', '_STAT', 75 '_SUBQ', '_TODO', '_TYPE', '_UID', '_URL', '_WEIG', '_WITN', '_YART', '__BRTM_CHIL', 76 '__BRTM_GCHI', '__BRTM_GCH1', '__BRTM_GCH2', '__BRTM_HSIB', '__BRTM_SIBL', 77 // These pseudo-tags are generated dynamically to display media object attributes 78 '__FILE_SIZE__', '__IMAGE_SIZE__', 79 ); 80 81 /** @var string[] Possible values for the Object-File-Format types */ 82 private static $OBJE_FILE_FORM_TYPE = array( 83 'audio', 'book', 'card', 'certificate', 'coat', 'document', 'electronic', 84 'fiche', 'film', 'magazine', 'manuscript', 'map', 'newspaper', 'photo', 85 'tombstone', 'video', 'painting', 'other', 86 ); 87 88 /** 89 * Is $tag one of our known tags? 90 * 91 * @param string $tag 92 * 93 * @return bool 94 */ 95 public static function isTag($tag) 96 { 97 return in_array($tag, self::$ALL_TAGS); 98 } 99 100 /** 101 * Translate a tag, for an (optional) record 102 * 103 * @param string $tag 104 * @param GedcomRecord|null $record 105 * 106 * @return string 107 */ 108 public static function getLabel($tag, GedcomRecord $record = null) 109 { 110 if ($record instanceof Individual) { 111 $sex = $record->getSex(); 112 } else { 113 $sex = 'U'; 114 } 115 116 switch ($tag) { 117 case 'ABBR': 118 return 119 /* I18N: gedcom tag ABBR */ 120 I18N::translate('Abbreviation'); 121 case 'ADDR': 122 return 123 /* I18N: gedcom tag ADDR */ 124 I18N::translate('Address'); 125 case 'ADR1': 126 return I18N::translate('Address line 1'); 127 case 'ADR2': 128 return I18N::translate('Address line 2'); 129 case 'ADOP': 130 return 131 /* I18N: gedcom tag ADOP */ 132 I18N::translate('Adoption'); 133 case 'ADOP:DATE': 134 return I18N::translate('Date of adoption'); 135 case 'ADOP:PLAC': 136 return I18N::translate('Place of adoption'); 137 case 'AFN': 138 return 139 /* I18N: gedcom tag AFN */ 140 I18N::translate('Ancestral file number'); 141 case 'AGE': 142 return 143 /* I18N: gedcom tag AGE */ 144 I18N::translate('Age'); 145 case 'AGNC': 146 return 147 /* I18N: gedcom tag AGNC */ 148 I18N::translate('Agency'); 149 case 'ALIA': 150 return 151 /* I18N: gedcom tag ALIA */ 152 I18N::translate('Alias'); 153 case 'ANCE': 154 return 155 /* I18N: gedcom tag ANCE */ 156 I18N::translate('Generations of ancestors'); 157 case 'ANCI': 158 return 159 /* I18N: gedcom tag ANCI */ 160 I18N::translate('Ancestors interest'); 161 case 'ANUL': 162 return 163 /* I18N: gedcom tag ANUL */ 164 I18N::translate('Annulment'); 165 case 'ASSO': 166 return 167 /* I18N: gedcom tag ASSO */ 168 I18N::translate('Associate'); /* see also _ASSO */ 169 case 'AUTH': 170 return 171 /* I18N: gedcom tag AUTH */ 172 I18N::translate('Author'); 173 case 'BAPL': 174 return 175 /* I18N: gedcom tag BAPL. LDS = Church of Latter Day Saints. */ 176 I18N::translate('LDS baptism'); 177 case 'BAPL:DATE': 178 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Date of LDS baptism'); 179 case 'BAPL:PLAC': 180 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Place of LDS baptism'); 181 case 'BAPM': 182 return 183 /* I18N: gedcom tag BAPM */ 184 I18N::translate('Baptism'); 185 case 'BAPM:DATE': 186 return I18N::translate('Date of baptism'); 187 case 'BAPM:PLAC': 188 return I18N::translate('Place of baptism'); 189 case 'BARM': 190 return 191 /* I18N: gedcom tag BARM */ 192 I18N::translate('Bar mitzvah'); 193 case 'BARM:DATE': 194 return I18N::translate('Date of bar mitzvah'); 195 case 'BARM:PLAC': 196 return I18N::translate('Place of bar mitzvah'); 197 case 'BASM': 198 return 199 /* I18N: gedcom tag BASM */ 200 I18N::translate('Bat mitzvah'); 201 case 'BASM:DATE': 202 return I18N::translate('Date of bat mitzvah'); 203 case 'BASM:PLAC': 204 return I18N::translate('Place of bat mitzvah'); 205 case 'BIRT': 206 return 207 /* I18N: gedcom tag BIRT */ 208 I18N::translate('Birth'); 209 case 'BIRT:DATE': 210 return I18N::translate('Date of birth'); 211 case 'BIRT:PLAC': 212 return I18N::translate('Place of birth'); 213 case 'BLES': 214 return 215 /* I18N: gedcom tag BLES */ 216 I18N::translate('Blessing'); 217 case 'BLES:DATE': 218 return I18N::translate('Date of blessing'); 219 case 'BLES:PLAC': 220 return I18N::translate('Place of blessing'); 221 case 'BLOB': 222 return 223 /* I18N: gedcom tag BLOB */ 224 I18N::translate('Binary data object'); 225 case 'BURI': 226 return 227 /* I18N: gedcom tag BURI */ 228 I18N::translate('Burial'); 229 case 'BURI:DATE': 230 return I18N::translate('Date of burial'); 231 case 'BURI:PLAC': 232 return I18N::translate('Place of burial'); 233 case 'CALN': 234 return 235 /* I18N: gedcom tag CALN */ 236 I18N::translate('Call number'); 237 case 'CAST': 238 return 239 /* I18N: gedcom tag CAST */ 240 I18N::translate('Caste'); 241 case 'CAUS': 242 return 243 /* I18N: gedcom tag CAUS */ 244 I18N::translate('Cause'); 245 case 'CEME': 246 return 247 /* I18N: gedcom tag CEME */ 248 I18N::translate('Cemetery'); 249 case 'CENS': 250 return 251 /* I18N: gedcom tag CENS */ 252 I18N::translate('Census'); 253 case 'CENS:DATE': 254 return I18N::translate('Census date'); 255 case 'CENS:PLAC': 256 return I18N::translate('Census place'); 257 case 'CHAN': 258 return 259 /* I18N: gedcom tag CHAN */ 260 I18N::translate('Last change'); 261 case 'CHAN:DATE': 262 return 263 /* I18N: gedcom tag CHAN:DATE */ 264 I18N::translate('Date of last change'); 265 case 'CHAN:_WT_USER': 266 return 267 /* I18N: gedcom tag CHAN:_WT_USER */ 268 I18N::translate('Author of last change'); 269 case 'CHAR': 270 return 271 /* I18N: gedcom tag CHAR */ 272 I18N::translate('Character set'); 273 case 'CHIL': 274 return 275 /* I18N: gedcom tag CHIL */ 276 I18N::translate('Child'); 277 case 'CHR': 278 return 279 /* I18N: gedcom tag CHR */ 280 I18N::translate('Christening'); 281 case 'CHR:DATE': 282 return I18N::translate('Date of christening'); 283 case 'CHR:PLAC': 284 return I18N::translate('Place of christening'); 285 case 'CHRA': 286 return 287 /* I18N: gedcom tag CHRA */ 288 I18N::translate('Adult christening'); 289 case 'CITN': 290 return 291 /* I18N: gedcom tag CITN */ 292 I18N::translate('Citizenship'); 293 case 'CITY': 294 return 295 /* I18N: gedcom tag CITY */ 296 I18N::translate('City'); 297 case 'COMM': 298 return 299 /* I18N: gedcom tag COMM */ 300 I18N::translate('Comment'); 301 case 'CONC': 302 return 303 /* I18N: gedcom tag CONC */ 304 I18N::translate('Concatenation'); 305 case 'CONT': 306 return 307 /* I18N: gedcom tag CONT */ 308 I18N::translate('Continued'); 309 case 'CONF': 310 return 311 /* I18N: gedcom tag CONF */ 312 I18N::translate('Confirmation'); 313 case 'CONF:DATE': 314 return I18N::translate('Date of confirmation'); 315 case 'CONF:PLAC': 316 return I18N::translate('Place of confirmation'); 317 case 'CONL': 318 return 319 /* I18N: gedcom tag CONL. LDS = Church of Latter Day Saints. */ 320 I18N::translate('LDS confirmation'); 321 case 'COPR': 322 return 323 /* I18N: gedcom tag COPR */ 324 I18N::translate('Copyright'); 325 case 'CORP': 326 return 327 /* I18N: gedcom tag CORP */ 328 I18N::translate('Corporation'); 329 case 'CREM': 330 return 331 /* I18N: gedcom tag CREM */ 332 I18N::translate('Cremation'); 333 case 'CREM:DATE': 334 return I18N::translate('Date of cremation'); 335 case 'CREM:PLAC': 336 return I18N::translate('Place of cremation'); 337 case 'CTRY': 338 return 339 /* I18N: gedcom tag CTRY */ 340 I18N::translate('Country'); 341 case 'DATA': 342 return 343 /* I18N: gedcom tag DATA */ 344 I18N::translate('Data'); 345 case 'DATA:DATE': 346 return I18N::translate('Date of entry in original source'); 347 case 'DATE': 348 return 349 /* I18N: gedcom tag DATE */ 350 I18N::translate('Date'); 351 case 'DEAT': 352 return 353 /* I18N: gedcom tag DEAT */ 354 I18N::translate('Death'); 355 case 'DEAT:CAUS': 356 return I18N::translate('Cause of death'); 357 case 'DEAT:DATE': 358 return I18N::translate('Date of death'); 359 case 'DEAT:PLAC': 360 return I18N::translate('Place of death'); 361 case 'DESC': 362 return 363 /* I18N: gedcom tag DESC */ 364 I18N::translate('Descendants'); 365 case 'DESI': 366 return 367 /* I18N: gedcom tag DESI */ 368 I18N::translate('Descendants interest'); 369 case 'DEST': 370 return 371 /* I18N: gedcom tag DEST */ 372 I18N::translate('Destination'); 373 case 'DIV': 374 return 375 /* I18N: gedcom tag DIV */ 376 I18N::translate('Divorce'); 377 case 'DIVF': 378 return 379 /* I18N: gedcom tag DIVF */ 380 I18N::translate('Divorce filed'); 381 case 'DSCR': 382 return 383 /* I18N: gedcom tag DSCR */ 384 I18N::translate('Description'); 385 case 'EDUC': 386 return 387 /* I18N: gedcom tag EDUC */ 388 I18N::translate('Education'); 389 case 'EDUC:AGNC': 390 return I18N::translate('School or college'); 391 case 'EMAI': 392 return 393 /* I18N: gedcom tag EMAI */ 394 I18N::translate('Email address'); 395 case 'EMAIL': 396 return 397 /* I18N: gedcom tag EMAIL */ 398 I18N::translate('Email address'); 399 case 'EMAL': 400 return 401 /* I18N: gedcom tag EMAL */ 402 I18N::translate('Email address'); 403 case 'EMIG': 404 return 405 /* I18N: gedcom tag EMIG */ 406 I18N::translate('Emigration'); 407 case 'EMIG:DATE': 408 return I18N::translate('Date of emigration'); 409 case 'EMIG:PLAC': 410 return I18N::translate('Place of emigration'); 411 case 'ENDL': 412 return 413 /* I18N: gedcom tag ENDL. LDS = Church of Latter Day Saints. */ 414 I18N::translate('LDS endowment'); 415 case 'ENDL:DATE': 416 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Date of LDS endowment'); 417 case 'ENDL:PLAC': 418 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Place of LDS endowment'); 419 case 'ENGA': 420 return 421 /* I18N: gedcom tag ENGA */ 422 I18N::translate('Engagement'); 423 case 'ENGA:DATE': 424 return I18N::translate('Date of engagement'); 425 case 'ENGA:PLAC': 426 return I18N::translate('Place of engagement'); 427 case 'EVEN': 428 return 429 /* I18N: gedcom tag EVEN */ 430 I18N::translate('Event'); 431 case 'EVEN:DATE': 432 return I18N::translate('Date of event'); 433 case 'EVEN:PLAC': 434 return I18N::translate('Place of event'); 435 case 'EVEN:TYPE': 436 return I18N::translate('Type of event'); 437 case 'FACT': 438 return 439 /* I18N: gedcom tag FACT */ 440 I18N::translate('Fact'); 441 case 'FACT:TYPE': 442 return I18N::translate('Type of fact'); 443 case 'FAM': 444 return 445 /* I18N: gedcom tag FAM */ 446 I18N::translate('Family'); 447 case 'FAMC': 448 return 449 /* I18N: gedcom tag FAMC */ 450 I18N::translate('Family as a child'); 451 case 'FAMF': 452 return 453 /* I18N: gedcom tag FAMF */ 454 I18N::translate('Family file'); 455 case 'FAMS': 456 return 457 /* I18N: gedcom tag FAMS */ 458 I18N::translate('Family as a spouse'); 459 case 'FAMS:CENS:DATE': 460 return I18N::translate('Spouse census date'); 461 case 'FAMS:CENS:PLAC': 462 return I18N::translate('Spouse census place'); 463 case 'FAMS:DIV:DATE': 464 return I18N::translate('Date of divorce'); 465 case 'FAMS:MARR:DATE': 466 return I18N::translate('Date of marriage'); 467 case 'FAMS:MARR:PLAC': 468 return I18N::translate('Place of marriage'); 469 case 'FAMS:NOTE': 470 return I18N::translate('Spouse note'); 471 case 'FAMS:SLGS:DATE': 472 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Date of LDS spouse sealing'); 473 case 'FAMS:SLGS:PLAC': 474 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Place of LDS spouse sealing'); 475 case 'FAX': 476 return 477 /* I18N: gedcom tag FAX */ 478 I18N::translate('Fax'); 479 case 'FCOM': 480 return 481 /* I18N: gedcom tag FCOM */ 482 I18N::translate('First communion'); 483 case 'FCOM:DATE': 484 return I18N::translate('Date of first communion'); 485 case 'FCOM:PLAC': 486 return I18N::translate('Place of first communion'); 487 case 'FILE': 488 return 489 /* I18N: gedcom tag FILE */ 490 I18N::translate('Filename'); 491 case 'FONE': 492 return 493 /* I18N: gedcom tag FONE */ 494 I18N::translate('Phonetic'); 495 case 'FORM': 496 return 497 /* I18N: gedcom tag FORM */ 498 I18N::translate('Format'); 499 case 'GEDC': 500 return 501 /* I18N: gedcom tag GEDC */ 502 I18N::translate('GEDCOM file'); 503 case 'GIVN': 504 return 505 /* I18N: gedcom tag GIVN */ 506 I18N::translate('Given names'); 507 case 'GRAD': 508 return 509 /* I18N: gedcom tag GRAD */ 510 I18N::translate('Graduation'); 511 case 'HEAD': 512 return 513 /* I18N: gedcom tag HEAD */ 514 I18N::translate('Header'); 515 case 'HUSB': 516 return 517 /* I18N: gedcom tag HUSB */ 518 I18N::translate('Husband'); 519 case 'IDNO': 520 return 521 /* I18N: gedcom tag IDNO */ 522 I18N::translate('Identification number'); 523 case 'IMMI': 524 return 525 /* I18N: gedcom tag IMMI */ 526 I18N::translate('Immigration'); 527 case 'IMMI:DATE': 528 return I18N::translate('Date of immigration'); 529 case 'IMMI:PLAC': 530 return I18N::translate('Place of immigration'); 531 case 'INDI': 532 return 533 /* I18N: gedcom tag INDI */ 534 I18N::translate('Individual'); 535 case 'INFL': 536 return 537 /* I18N: gedcom tag INFL */ 538 I18N::translate('Infant'); 539 case 'LANG': 540 return 541 /* I18N: gedcom tag LANG */ 542 I18N::translate('Language'); 543 case 'LATI': 544 return 545 /* I18N: gedcom tag LATI */ 546 I18N::translate('Latitude'); 547 case 'LEGA': 548 return 549 /* I18N: gedcom tag LEGA */ 550 I18N::translate('Legatee'); 551 case 'LONG': 552 return 553 /* I18N: gedcom tag LONG */ 554 I18N::translate('Longitude'); 555 case 'MAP': 556 return 557 /* I18N: gedcom tag MAP */ 558 I18N::translate('Map'); 559 case 'MARB': 560 return 561 /* I18N: gedcom tag MARB */ 562 I18N::translate('Marriage banns'); 563 case 'MARB:DATE': 564 return I18N::translate('Date of marriage banns'); 565 case 'MARB:PLAC': 566 return I18N::translate('Place of marriage banns'); 567 case 'MARC': 568 return 569 /* I18N: gedcom tag MARC */ 570 I18N::translate('Marriage contract'); 571 case 'MARL': 572 return 573 /* I18N: gedcom tag MARL */ 574 I18N::translate('Marriage license'); 575 case 'MARR': 576 return 577 /* I18N: gedcom tag MARR */ 578 I18N::translate('Marriage'); 579 case 'MARR:DATE': 580 return I18N::translate('Date of marriage'); 581 case 'MARR:PLAC': 582 return I18N::translate('Place of marriage'); 583 case 'MARR_CIVIL': 584 return I18N::translate('Civil marriage'); 585 case 'MARR_PARTNERS': 586 return I18N::translate('Registered partnership'); 587 case 'MARR_RELIGIOUS': 588 return I18N::translate('Religious marriage'); 589 case 'MARR_UNKNOWN': 590 return I18N::translate('Marriage type unknown'); 591 case 'MARS': 592 return 593 /* I18N: gedcom tag MARS */ 594 I18N::translate('Marriage settlement'); 595 case 'MEDI': 596 return 597 /* I18N: gedcom tag MEDI */ 598 I18N::translate('Media type'); 599 case 'NAME': 600 if ($record instanceof Repository) { 601 return 602 /* I18N: gedcom tag REPO:NAME */ 603 I18N::translateContext('Repository', 'Name'); 604 } else { 605 return 606 /* I18N: gedcom tag NAME */ 607 I18N::translate('Name'); 608 } 609 case 'NAME:FONE': 610 return I18N::translate('Phonetic name'); 611 case 'NAME:_HEB': 612 return I18N::translate('Name in Hebrew'); 613 case 'NATI': 614 return 615 /* I18N: gedcom tag NATI */ 616 I18N::translate('Nationality'); 617 case 'NATU': 618 return 619 /* I18N: gedcom tag NATU */ 620 I18N::translate('Naturalization'); 621 case 'NATU:DATE': 622 return I18N::translate('Date of naturalization'); 623 case 'NATU:PLAC': 624 return I18N::translate('Place of naturalization'); 625 case 'NCHI': 626 return 627 /* I18N: gedcom tag NCHI */ 628 I18N::translate('Number of children'); 629 case 'NICK': 630 return 631 /* I18N: gedcom tag NICK */ 632 I18N::translate('Nickname'); 633 case 'NMR': 634 return 635 /* I18N: gedcom tag NMR */ 636 I18N::translate('Number of marriages'); 637 case 'NOTE': 638 return 639 /* I18N: gedcom tag NOTE */ 640 I18N::translate('Note'); 641 case 'NPFX': 642 return 643 /* I18N: gedcom tag NPFX */ 644 I18N::translate('Name prefix'); 645 case 'NSFX': 646 return 647 /* I18N: gedcom tag NSFX */ 648 I18N::translate('Name suffix'); 649 case 'OBJE': 650 return 651 /* I18N: gedcom tag OBJE */ 652 I18N::translate('Media object'); 653 case 'OCCU': 654 return 655 /* I18N: gedcom tag OCCU */ 656 I18N::translate('Occupation'); 657 case 'OCCU:AGNC': 658 return I18N::translate('Employer'); 659 case 'ORDI': 660 return 661 /* I18N: gedcom tag ORDI */ 662 I18N::translate('Ordinance'); 663 case 'ORDN': 664 return 665 /* I18N: gedcom tag ORDN */ 666 I18N::translate('Ordination'); 667 case 'ORDN:AGNC': 668 return I18N::translate('Religious institution'); 669 case 'ORDN:DATE': 670 return I18N::translate('Date of ordination'); 671 case 'ORDN:PLAC': 672 return I18N::translate('Place of ordination'); 673 case 'PAGE': 674 return 675 /* I18N: gedcom tag PAGE */ 676 I18N::translate('Citation details'); 677 case 'PEDI': 678 return 679 /* I18N: gedcom tag PEDI */ 680 I18N::translate('Relationship to parents'); 681 case 'PHON': 682 return 683 /* I18N: gedcom tag PHON */ 684 I18N::translate('Phone'); 685 case 'PLAC': 686 return 687 /* I18N: gedcom tag PLAC */ 688 I18N::translate('Place'); 689 case 'PLAC:FONE': 690 return I18N::translate('Phonetic place'); 691 case 'PLAC:ROMN': 692 return I18N::translate('Romanized place'); 693 case 'PLAC:_HEB': 694 return I18N::translate('Place in Hebrew'); 695 case 'POST': 696 return 697 /* I18N: gedcom tag POST */ 698 I18N::translate('Postal code'); 699 case 'PROB': 700 return 701 /* I18N: gedcom tag PROB */ 702 I18N::translate('Probate'); 703 case 'PROP': 704 return 705 /* I18N: gedcom tag PROP */ 706 I18N::translate('Property'); 707 case 'PUBL': 708 return 709 /* I18N: gedcom tag PUBL */ 710 I18N::translate('Publication'); 711 case 'QUAY': 712 return 713 /* I18N: gedcom tag QUAY */ 714 I18N::translate('Quality of data'); 715 case 'REFN': 716 return 717 /* I18N: gedcom tag REFN */ 718 I18N::translate('Reference number'); 719 case 'RELA': 720 return 721 /* I18N: gedcom tag RELA */ 722 I18N::translate('Relationship'); 723 case 'RELI': 724 return 725 /* I18N: gedcom tag RELI */ 726 I18N::translate('Religion'); 727 case 'REPO': 728 return 729 /* I18N: gedcom tag REPO */ 730 I18N::translate('Repository'); 731 case 'RESI': 732 return 733 /* I18N: gedcom tag RESI */ 734 I18N::translate('Residence'); 735 case 'RESI:DATE': 736 return I18N::translate('Date of residence'); 737 case 'RESI:PLAC': 738 return I18N::translate('Place of residence'); 739 case 'RESN': 740 return 741 /* I18N: gedcom tag RESN */ 742 I18N::translate('Restriction'); 743 case 'RETI': 744 return 745 /* I18N: gedcom tag RETI */ 746 I18N::translate('Retirement'); 747 case 'RETI:AGNC': 748 return I18N::translate('Employer'); 749 case 'RFN': 750 return 751 /* I18N: gedcom tag RFN */ 752 I18N::translate('Record file number'); 753 case 'RIN': 754 return 755 /* I18N: gedcom tag RIN */ 756 I18N::translate('Record ID number'); 757 case 'ROLE': 758 return 759 /* I18N: gedcom tag ROLE */ 760 I18N::translate('Role'); 761 case 'ROMN': 762 return 763 /* I18N: gedcom tag ROMN */ 764 I18N::translate('Romanized'); 765 case 'SERV': 766 return 767 /* I18N: gedcom tag SERV */ 768 I18N::translate('Remote server'); 769 case 'SEX': 770 return 771 /* I18N: gedcom tag SEX */ 772 I18N::translate('Gender'); 773 case 'SHARED_NOTE': 774 return I18N::translate('Shared note'); 775 case 'SLGC': 776 return 777 /* I18N: gedcom tag SLGC. LDS = Church of Latter Day Saints. */ 778 I18N::translate('LDS child sealing'); 779 case 'SLGC:DATE': 780 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Date of LDS child sealing'); 781 case 'SLGC:PLAC': 782 return /* I18N: LDS = Church of Latter Day Saints. */ I18N::translate('Place of LDS child sealing'); 783 case 'SLGS': 784 return 785 /* I18N: gedcom tag SLGS. LDS = Church of Latter Day Saints. */ 786 I18N::translate('LDS spouse sealing'); 787 case 'SOUR': 788 return 789 /* I18N: gedcom tag SOUR */ 790 I18N::translate('Source'); 791 case 'SPFX': 792 return 793 /* I18N: gedcom tag SPFX */ 794 I18N::translate('Surname prefix'); 795 case 'SSN': 796 return 797 /* I18N: gedcom tag SSN */ 798 I18N::translate('Social security number'); 799 case 'STAE': 800 return 801 /* I18N: gedcom tag STAE */ 802 I18N::translate('State'); 803 case 'STAT': 804 return 805 /* I18N: gedcom tag STAT */ 806 I18N::translate('Status'); 807 case 'STAT:DATE': 808 return I18N::translate('Status change date'); 809 case 'SUBM': 810 return 811 /* I18N: gedcom tag SUBM */ 812 I18N::translate('Submitter'); 813 case 'SUBN': 814 return 815 /* I18N: gedcom tag SUBN */ 816 I18N::translate('Submission'); 817 case 'SURN': 818 return 819 /* I18N: gedcom tag SURN */ 820 I18N::translate('Surname'); 821 case 'TEMP': 822 return 823 /* I18N: gedcom tag TEMP */ 824 I18N::translate('Temple'); 825 case 'TEXT': 826 return 827 /* I18N: gedcom tag TEXT */ 828 I18N::translate('Text'); 829 case 'TIME': 830 return 831 /* I18N: gedcom tag TIME */ 832 I18N::translate('Time'); 833 case 'TITL': 834 return 835 /* I18N: gedcom tag TITL */ 836 I18N::translate('Title'); 837 case 'TITL:FONE': 838 return I18N::translate('Phonetic title'); 839 case 'TITL:ROMN': 840 return I18N::translate('Romanized title'); 841 case 'TITL:_HEB': 842 return I18N::translate('Title in Hebrew'); 843 case 'TRLR': 844 return 845 /* I18N: gedcom tag TRLR */ 846 I18N::translate('Trailer'); 847 case 'TYPE': 848 return 849 /* I18N: gedcom tag TYPE */ 850 I18N::translate('Type'); 851 case 'URL': 852 return 853 /* I18N: gedcom tag URL (A web address / URL) */ 854 I18N::translate('URL'); 855 case 'VERS': 856 return 857 /* I18N: gedcom tag VERS */ 858 I18N::translate('Version'); 859 case 'WIFE': 860 return 861 /* I18N: gedcom tag WIFE */ 862 I18N::translate('Wife'); 863 case 'WILL': 864 return 865 /* I18N: gedcom tag WILL */ 866 I18N::translate('Will'); 867 case 'WWW': 868 return 869 /* I18N: gedcom tag WWW (A web address / URL) */ 870 I18N::translate('URL'); 871 case '_ADOP_CHIL': 872 switch ($sex) { 873 case 'M': 874 return I18N::translate('Adoption of a son'); 875 case 'F': 876 return I18N::translate('Adoption of a daughter'); 877 default: 878 return I18N::translate('Adoption of a child'); 879 } 880 case '_ADOP_GCHI': 881 switch ($sex) { 882 case 'M': 883 return I18N::translate('Adoption of a grandson'); 884 case 'F': 885 return I18N::translate('Adoption of a granddaughter'); 886 default: 887 return I18N::translate('Adoption of a grandchild'); 888 } 889 case '_ADOP_GCH1': 890 switch ($sex) { 891 case 'M': 892 return I18N::translateContext('daughter’s son', 'Adoption of a grandson'); 893 case 'F': 894 return I18N::translateContext('daughter’s daughter', 'Adoption of a granddaughter'); 895 default: 896 return I18N::translate('Adoption of a grandchild'); 897 } 898 case '_ADOP_GCH2': 899 switch ($sex) { 900 case 'M': 901 return I18N::translateContext('son’s son', 'Adoption of a grandson'); 902 case 'F': 903 return I18N::translateContext('son’s daughter', 'Adoption of a granddaughter'); 904 default: 905 return I18N::translate('Adoption of a grandchild'); 906 } 907 case '_ADOP_HSIB': 908 switch ($sex) { 909 case 'M': 910 return I18N::translate('Adoption of a half-brother'); 911 case 'F': 912 return I18N::translate('Adoption of a half-sister'); 913 default: 914 return I18N::translate('Adoption of a half-sibling'); 915 } 916 case '_ADOP_SIBL': 917 switch ($sex) { 918 case 'M': 919 return I18N::translate('Adoption of a brother'); 920 case 'F': 921 return I18N::translate('Adoption of a sister'); 922 default: 923 return I18N::translate('Adoption of a sibling'); 924 } 925 case '_ADPF': 926 switch ($sex) { 927 case 'M': 928 return 929 /* I18N: gedcom tag _ADPF */ 930 I18N::translateContext('MALE', 'Adopted by father'); 931 case 'F': 932 return 933 /* I18N: gedcom tag _ADPF */ 934 I18N::translateContext('FEMALE', 'Adopted by father'); 935 default: 936 return 937 /* I18N: gedcom tag _ADPF */ 938 I18N::translate('Adopted by father'); 939 } 940 case '_ADPM': 941 switch ($sex) { 942 case 'M': 943 return 944 /* I18N: gedcom tag _ADPM */ 945 I18N::translateContext('MALE', 'Adopted by mother'); 946 case 'F': 947 return 948 /* I18N: gedcom tag _ADPM */ 949 I18N::translateContext('FEMALE', 'Adopted by mother'); 950 default: 951 return 952 /* I18N: gedcom tag _ADPM */ 953 I18N::translate('Adopted by mother'); 954 } 955 case '_AKA': 956 case '_AKAN': 957 switch ($sex) { 958 case 'M': 959 return 960 /* I18N: gedcom tag _AKA */ 961 I18N::translateContext('MALE', 'Also known as'); 962 case 'F': 963 return 964 /* I18N: gedcom tag _AKA */ 965 I18N::translateContext('FEMALE', 'Also known as'); 966 default: 967 return 968 /* I18N: gedcom tag _AKA */ 969 I18N::translate('Also known as'); 970 } 971 case '_ASSO': 972 return 973 /* I18N: gedcom tag _ASSO */ 974 I18N::translate('Associate'); /* see also ASSO */ 975 case '_BAPM_CHIL': 976 switch ($sex) { 977 case 'M': 978 return I18N::translate('Baptism of a son'); 979 case 'F': 980 return I18N::translate('Baptism of a daughter'); 981 default: 982 return I18N::translate('Baptism of a child'); 983 } 984 case '_BAPM_GCHI': 985 switch ($sex) { 986 case 'M': 987 return I18N::translate('Baptism of a grandson'); 988 case 'F': 989 return I18N::translate('Baptism of a granddaughter'); 990 default: 991 return I18N::translate('Baptism of a grandchild'); 992 } 993 case '_BAPM_GCH1': 994 switch ($sex) { 995 case 'M': 996 return I18N::translateContext('daughter’s son', 'Baptism of a grandson'); 997 case 'F': 998 return I18N::translateContext('daughter’s daughter', 'Baptism of a granddaughter'); 999 default: 1000 return I18N::translate('Baptism of a grandchild'); 1001 } 1002 case '_BAPM_GCH2': 1003 switch ($sex) { 1004 case 'M': 1005 return I18N::translateContext('son’s son', 'Baptism of a grandson'); 1006 case 'F': 1007 return I18N::translateContext('son’s daughter', 'Baptism of a granddaughter'); 1008 default: 1009 return I18N::translate('Baptism of a grandchild'); 1010 } 1011 case '_BAPM_HSIB': 1012 switch ($sex) { 1013 case 'M': 1014 return I18N::translate('Baptism of a half-brother'); 1015 case 'F': 1016 return I18N::translate('Baptism of a half-sister'); 1017 default: 1018 return I18N::translate('Baptism of a half-sibling'); 1019 } 1020 case '_BAPM_SIBL': 1021 switch ($sex) { 1022 case 'M': 1023 return I18N::translate('Baptism of a brother'); 1024 case 'F': 1025 return I18N::translate('Baptism of a sister'); 1026 default: 1027 return I18N::translate('Baptism of a sibling'); 1028 } 1029 case '_BIBL': 1030 return 1031 /* I18N: gedcom tag _BIBL */ 1032 I18N::translate('Bibliography'); 1033 case '_BIRT_CHIL': 1034 switch ($sex) { 1035 case 'M': 1036 return I18N::translate('Birth of a son'); 1037 case 'F': 1038 return I18N::translate('Birth of a daughter'); 1039 default: 1040 return I18N::translate('Birth of a child'); 1041 } 1042 case '_BIRT_GCHI': 1043 switch ($sex) { 1044 case 'M': 1045 return I18N::translate('Birth of a grandson'); 1046 case 'F': 1047 return I18N::translate('Birth of a granddaughter'); 1048 default: 1049 return I18N::translate('Birth of a grandchild'); 1050 } 1051 case '_BIRT_GCH1': 1052 switch ($sex) { 1053 case 'M': 1054 return I18N::translateContext('daughter’s son', 'Birth of a grandson'); 1055 case 'F': 1056 return I18N::translateContext('daughter’s daughter', 'Birth of a granddaughter'); 1057 default: 1058 return I18N::translate('Birth of a grandchild'); 1059 } 1060 case '_BIRT_GCH2': 1061 switch ($sex) { 1062 case 'M': 1063 return I18N::translateContext('son’s son', 'Birth of a grandson'); 1064 case 'F': 1065 return I18N::translateContext('son’s daughter', 'Birth of a granddaughter'); 1066 default: 1067 return I18N::translate('Birth of a grandchild'); 1068 } 1069 case '_BIRT_HSIB': 1070 switch ($sex) { 1071 case 'M': 1072 return I18N::translate('Birth of a half-brother'); 1073 case 'F': 1074 return I18N::translate('Birth of a half-sister'); 1075 default: 1076 return I18N::translate('Birth of a half-sibling'); 1077 } 1078 case '_BIRT_SIBL': 1079 switch ($sex) { 1080 case 'M': 1081 return I18N::translate('Birth of a brother'); 1082 case 'F': 1083 return I18N::translate('Birth of a sister'); 1084 default: 1085 return I18N::translate('Birth of a sibling'); 1086 } 1087 case '_BRTM': 1088 return 1089 /* I18N: gedcom tag _BRTM */ 1090 I18N::translate('Brit milah'); 1091 case '_BRTM:DATE': 1092 return I18N::translate('Date of brit milah'); 1093 case '_BRTM:PLAC': 1094 return I18N::translate('Place of brit milah'); 1095 case '_BURI_CHIL': 1096 switch ($sex) { 1097 case 'M': 1098 return I18N::translate('Burial of a son'); 1099 case 'F': 1100 return I18N::translate('Burial of a daughter'); 1101 default: 1102 return I18N::translate('Burial of a child'); 1103 } 1104 case '_BURI_GCHI': 1105 switch ($sex) { 1106 case 'M': 1107 return I18N::translate('Burial of a grandson'); 1108 case 'F': 1109 return I18N::translate('Burial of a granddaughter'); 1110 default: 1111 return I18N::translate('Burial of a grandchild'); 1112 } 1113 case '_BURI_GCH1': 1114 switch ($sex) { 1115 case 'M': 1116 return I18N::translateContext('daughter’s son', 'Burial of a grandson'); 1117 case 'F': 1118 return I18N::translateContext('daughter’s daughter', 'Burial of a granddaughter'); 1119 default: 1120 return I18N::translate('Burial of a grandchild'); 1121 } 1122 case '_BURI_GCH2': 1123 switch ($sex) { 1124 case 'M': 1125 return I18N::translateContext('son’s son', 'Burial of a grandson'); 1126 case 'F': 1127 return I18N::translateContext('son’s daughter', 'Burial of a granddaughter'); 1128 default: 1129 return I18N::translate('Burial of a grandchild'); 1130 } 1131 case '_BURI_GPAR': 1132 switch ($sex) { 1133 case 'M': 1134 return I18N::translate('Burial of a grandfather'); 1135 case 'F': 1136 return I18N::translate('Burial of a grandmother'); 1137 default: 1138 return I18N::translate('Burial of a grandparent'); 1139 } 1140 case '_BURI_GPA1': 1141 switch ($sex) { 1142 case 'M': 1143 return I18N::translate('Burial of a paternal grandfather'); 1144 case 'F': 1145 return I18N::translate('Burial of a paternal grandmother'); 1146 default: 1147 return I18N::translate('Burial of a paternal grandparent'); 1148 } 1149 case '_BURI_GPA2': 1150 switch ($sex) { 1151 case 'M': 1152 return I18N::translate('Burial of a maternal grandfather'); 1153 case 'F': 1154 return I18N::translate('Burial of a maternal grandmother'); 1155 default: 1156 return I18N::translate('Burial of a maternal grandparent'); 1157 } 1158 case '_BURI_HSIB': 1159 switch ($sex) { 1160 case 'M': 1161 return I18N::translate('Burial of a half-brother'); 1162 case 'F': 1163 return I18N::translate('Burial of a half-sister'); 1164 default: 1165 return I18N::translate('Burial of a half-sibling'); 1166 } 1167 case '_BURI_PARE': 1168 switch ($sex) { 1169 case 'M': 1170 return I18N::translate('Burial of a father'); 1171 case 'F': 1172 return I18N::translate('Burial of a mother'); 1173 default: 1174 return I18N::translate('Burial of a parent'); 1175 } 1176 case '_BURI_SIBL': 1177 switch ($sex) { 1178 case 'M': 1179 return I18N::translate('Burial of a brother'); 1180 case 'F': 1181 return I18N::translate('Burial of a sister'); 1182 default: 1183 return I18N::translate('Burial of a sibling'); 1184 } 1185 case '_BURI_SPOU': 1186 switch ($sex) { 1187 case 'M': 1188 return I18N::translate('Burial of a husband'); 1189 case 'F': 1190 return I18N::translate('Burial of a wife'); 1191 default: 1192 return I18N::translate('Burial of a spouse'); 1193 } 1194 case '_CHR_CHIL': 1195 switch ($sex) { 1196 case 'M': 1197 return I18N::translate('Christening of a son'); 1198 case 'F': 1199 return I18N::translate('Christening of a daughter'); 1200 default: 1201 return I18N::translate('Christening of a child'); 1202 } 1203 case '_CHR_GCHI': 1204 switch ($sex) { 1205 case 'M': 1206 return I18N::translate('Christening of a grandson'); 1207 case 'F': 1208 return I18N::translate('Christening of a granddaughter'); 1209 default: 1210 return I18N::translate('Christening of a grandchild'); 1211 } 1212 case '_CHR_GCH1': 1213 switch ($sex) { 1214 case 'M': 1215 return I18N::translateContext('daughter’s son', 'Christening of a grandson'); 1216 case 'F': 1217 return I18N::translateContext('daughter’s daughter', 'Christening of a granddaughter'); 1218 default: 1219 return I18N::translate('Christening of a grandchild'); 1220 } 1221 case '_CHR_GCH2': 1222 switch ($sex) { 1223 case 'M': 1224 return I18N::translateContext('son’s son', 'Christening of a grandson'); 1225 case 'F': 1226 return I18N::translateContext('son’s daughter', 'Christening of a granddaughter'); 1227 default: 1228 return I18N::translate('Christening of a grandchild'); 1229 } 1230 case '_CHR_HSIB': 1231 switch ($sex) { 1232 case 'M': 1233 return I18N::translate('Christening of a half-brother'); 1234 case 'F': 1235 return I18N::translate('Christening of a half-sister'); 1236 default: 1237 return I18N::translate('Christening of a half-sibling'); 1238 } 1239 case '_CHR_SIBL': 1240 switch ($sex) { 1241 case 'M': 1242 return I18N::translate('Christening of a brother'); 1243 case 'F': 1244 return I18N::translate('Christening of a sister'); 1245 default: 1246 return I18N::translate('Christening of a sibling'); 1247 } 1248 case '_COML': 1249 return 1250 /* I18N: gedcom tag _COML */ 1251 I18N::translate('Common law marriage'); 1252 case '_CREM_CHIL': 1253 switch ($sex) { 1254 case 'M': 1255 return I18N::translate('Cremation of a son'); 1256 case 'F': 1257 return I18N::translate('Cremation of a daughter'); 1258 default: 1259 return I18N::translate('Cremation of a child'); 1260 } 1261 case '_CREM_GCHI': 1262 switch ($sex) { 1263 case 'M': 1264 return I18N::translate('Cremation of a grandson'); 1265 case 'F': 1266 return I18N::translate('Cremation of a granddaughter'); 1267 default: 1268 return I18N::translate('Cremation of a grandchild'); 1269 } 1270 case '_CREM_GCH1': 1271 switch ($sex) { 1272 case 'M': 1273 return I18N::translateContext('daughter’s son', 'Cremation of a grandson'); 1274 case 'F': 1275 return I18N::translateContext('daughter’s daughter', 'Cremation of a granddaughter'); 1276 default: 1277 return I18N::translate('Cremation of a grandchild'); 1278 } 1279 case '_CREM_GCH2': 1280 switch ($sex) { 1281 case 'M': 1282 return I18N::translateContext('son’s son', 'Cremation of a grandson'); 1283 case 'F': 1284 return I18N::translateContext('son’s daughter', 'Cremation of a granddaughter'); 1285 default: 1286 return I18N::translate('Cremation of a grandchild'); 1287 } 1288 case '_CREM_GPAR': 1289 switch ($sex) { 1290 case 'M': 1291 return I18N::translate('Cremation of a grandfather'); 1292 case 'F': 1293 return I18N::translate('Cremation of a grandmother'); 1294 default: 1295 return I18N::translate('Cremation of a grand-parent'); 1296 } 1297 case '_CREM_GPA1': 1298 switch ($sex) { 1299 case 'M': 1300 return I18N::translate('Cremation of a paternal grandfather'); 1301 case 'F': 1302 return I18N::translate('Cremation of a paternal grandmother'); 1303 default: 1304 return I18N::translate('Cremation of a grand-parent'); 1305 } 1306 case '_CREM_GPA2': 1307 switch ($sex) { 1308 case 'M': 1309 return I18N::translate('Cremation of a maternal grandfather'); 1310 case 'F': 1311 return I18N::translate('Cremation of a maternal grandmother'); 1312 default: 1313 return I18N::translate('Cremation of a grand-parent'); 1314 } 1315 case '_CREM_HSIB': 1316 switch ($sex) { 1317 case 'M': 1318 return I18N::translate('Cremation of a half-brother'); 1319 case 'F': 1320 return I18N::translate('Cremation of a half-sister'); 1321 default: 1322 return I18N::translate('Cremation of a half-sibling'); 1323 } 1324 case '_CREM_PARE': 1325 switch ($sex) { 1326 case 'M': 1327 return I18N::translate('Cremation of a father'); 1328 case 'F': 1329 return I18N::translate('Cremation of a mother'); 1330 default: 1331 return I18N::translate('Cremation of a parent'); 1332 } 1333 case '_CREM_SIBL': 1334 switch ($sex) { 1335 case 'M': 1336 return I18N::translate('Cremation of a brother'); 1337 case 'F': 1338 return I18N::translate('Cremation of a sister'); 1339 default: 1340 return I18N::translate('Cremation of a sibling'); 1341 } 1342 case '_CREM_SPOU': 1343 switch ($sex) { 1344 case 'M': 1345 return I18N::translate('Cremation of a husband'); 1346 case 'F': 1347 return I18N::translate('Cremation of a wife'); 1348 default: 1349 return I18N::translate('Cremation of a spouse'); 1350 } 1351 case '_DBID': 1352 return 1353 /* I18N: gedcom tag _DBID */ 1354 I18N::translate('Linked database ID'); 1355 case '_DEAT_CHIL': 1356 switch ($sex) { 1357 case 'M': 1358 return I18N::translate('Death of a son'); 1359 case 'F': 1360 return I18N::translate('Death of a daughter'); 1361 default: 1362 return I18N::translate('Death of a child'); 1363 } 1364 case '_DEAT_GCHI': 1365 switch ($sex) { 1366 case 'M': 1367 return I18N::translate('Death of a grandson'); 1368 case 'F': 1369 return I18N::translate('Death of a granddaughter'); 1370 default: 1371 return I18N::translate('Death of a grandchild'); 1372 } 1373 case '_DEAT_GCH1': 1374 switch ($sex) { 1375 case 'M': 1376 return I18N::translateContext('daughter’s son', 'Death of a grandson'); 1377 case 'F': 1378 return I18N::translateContext('daughter’s daughter', 'Death of a granddaughter'); 1379 default: 1380 return I18N::translate('Death of a grandchild'); 1381 } 1382 case '_DEAT_GCH2': 1383 switch ($sex) { 1384 case 'M': 1385 return I18N::translateContext('son’s son', 'Death of a grandson'); 1386 case 'F': 1387 return I18N::translateContext('son’s daughter', 'Death of a granddaughter'); 1388 default: 1389 return I18N::translate('Death of a grandchild'); 1390 } 1391 case '_DEAT_GPAR': 1392 switch ($sex) { 1393 case 'M': 1394 return I18N::translate('Death of a grandfather'); 1395 case 'F': 1396 return I18N::translate('Death of a grandmother'); 1397 default: 1398 return I18N::translate('Death of a grand-parent'); 1399 } 1400 case '_DEAT_GPA1': 1401 switch ($sex) { 1402 case 'M': 1403 return I18N::translate('Death of a paternal grandfather'); 1404 case 'F': 1405 return I18N::translate('Death of a paternal grandmother'); 1406 default: 1407 return I18N::translate('Death of a grand-parent'); 1408 } 1409 case '_DEAT_GPA2': 1410 switch ($sex) { 1411 case 'M': 1412 return I18N::translate('Death of a maternal grandfather'); 1413 case 'F': 1414 return I18N::translate('Death of a maternal grandmother'); 1415 default: 1416 return I18N::translate('Death of a grand-parent'); 1417 } 1418 case '_DEAT_HSIB': 1419 switch ($sex) { 1420 case 'M': 1421 return I18N::translate('Death of a half-brother'); 1422 case 'F': 1423 return I18N::translate('Death of a half-sister'); 1424 default: 1425 return I18N::translate('Death of a half-sibling'); 1426 } 1427 case '_DEAT_PARE': 1428 switch ($sex) { 1429 case 'M': 1430 return I18N::translate('Death of a father'); 1431 case 'F': 1432 return I18N::translate('Death of a mother'); 1433 default: 1434 return I18N::translate('Death of a parent'); 1435 } 1436 case '_DEAT_SIBL': 1437 switch ($sex) { 1438 case 'M': 1439 return I18N::translate('Death of a brother'); 1440 case 'F': 1441 return I18N::translate('Death of a sister'); 1442 default: 1443 return I18N::translate('Death of a sibling'); 1444 } 1445 case '_DEAT_SPOU': 1446 switch ($sex) { 1447 case 'M': 1448 return I18N::translate('Death of a husband'); 1449 case 'F': 1450 return I18N::translate('Death of a wife'); 1451 default: 1452 return I18N::translate('Death of a spouse'); 1453 } 1454 case '_DEG': 1455 return 1456 /* I18N: gedcom tag _DEG */ 1457 I18N::translate('Degree'); 1458 case '_DETS': 1459 return 1460 /* I18N: gedcom tag _DETS */ 1461 I18N::translate('Death of one spouse'); 1462 case '_DNA': 1463 return 1464 /* I18N: gedcom tag _DNA (from FTM 2010) */ 1465 I18N::translate('DNA markers'); 1466 case '_EMAIL': 1467 return 1468 /* I18N: gedcom tag _EMAIL */ 1469 I18N::translate('Email address'); 1470 case '_EYEC': 1471 return 1472 /* I18N: gedcom tag _EYEC */ 1473 I18N::translate('Eye color'); 1474 case '_FA1': 1475 return I18N::translate('Fact 1'); 1476 case '_FA2': 1477 return I18N::translate('Fact 2'); 1478 case '_FA3': 1479 return I18N::translate('Fact 3'); 1480 case '_FA4': 1481 return I18N::translate('Fact 4'); 1482 case '_FA5': 1483 return I18N::translate('Fact 5'); 1484 case '_FA6': 1485 return I18N::translate('Fact 6'); 1486 case '_FA7': 1487 return I18N::translate('Fact 7'); 1488 case '_FA8': 1489 return I18N::translate('Fact 8'); 1490 case '_FA9': 1491 return I18N::translate('Fact 9'); 1492 case '_FA10': 1493 return I18N::translate('Fact 10'); 1494 case '_FA11': 1495 return I18N::translate('Fact 11'); 1496 case '_FA12': 1497 return I18N::translate('Fact 12'); 1498 case '_FA13': 1499 return I18N::translate('Fact 13'); 1500 case '_FNRL': 1501 return 1502 /* I18N: gedcom tag _FNRL */ 1503 I18N::translate('Funeral'); 1504 case '_FREL': 1505 return 1506 /* I18N: gedcom tag _FREL */ 1507 I18N::translate('Relationship to father'); 1508 case '_GEDF': 1509 return 1510 /* I18N: gedcom tag _GEDF */ 1511 I18N::translate('GEDCOM file'); 1512 case '_GODP': 1513 return 1514 /* I18N: gedcom tag _GODP */ 1515 I18N::translate('Godparent'); 1516 case '_HAIR': 1517 return 1518 /* I18N: gedcom tag _HAIR */ 1519 I18N::translate('Hair color'); 1520 case '_HEB': 1521 return 1522 /* I18N: gedcom tag _HEB */ 1523 I18N::translate('Hebrew'); 1524 case '_HEIG': 1525 return 1526 /* I18N: gedcom tag _HEIG */ 1527 I18N::translate('Height'); 1528 case '_HNM': 1529 return 1530 /* I18N: gedcom tag _HNM */ 1531 I18N::translate('Hebrew name'); 1532 case '_HOL': 1533 return 1534 /* I18N: gedcom tag _HOL */ 1535 I18N::translate('Holocaust'); 1536 case '_INTE': 1537 switch ($sex) { 1538 case 'M': 1539 return 1540 /* I18N: gedcom tag _INTE */ 1541 I18N::translateContext('MALE', 'Interred'); 1542 case 'F': 1543 return 1544 /* I18N: gedcom tag _INTE */ 1545 I18N::translateContext('FEMALE', 'Interred'); 1546 default: 1547 return 1548 /* I18N: gedcom tag _INTE */ 1549 I18N::translate('Interred'); 1550 } 1551 case '_LOC': 1552 return 1553 /* I18N: gedcom tag _LOC */ 1554 I18N::translate('Location'); 1555 case '_MARI': 1556 return 1557 /* I18N: gedcom tag _MARI */ 1558 I18N::translate('Marriage intention'); 1559 case '_MARNM': 1560 return 1561 /* I18N: gedcom tag _MARNM */ 1562 I18N::translate('Married name'); 1563 case '_PRIM': 1564 return 1565 /* I18N: gedcom tag _PRIM */ 1566 I18N::translate('Highlighted image'); 1567 case '_MARNM_SURN': 1568 return I18N::translate('Married surname'); 1569 case '_MARR_CHIL': 1570 switch ($sex) { 1571 case 'M': 1572 return I18N::translate('Marriage of a son'); 1573 case 'F': 1574 return I18N::translate('Marriage of a daughter'); 1575 default: 1576 return I18N::translate('Marriage of a child'); 1577 } 1578 case '_MARR_FAMC': 1579 return 1580 /* I18N: ...to each other */ 1581 I18N::translate('Marriage of parents'); 1582 case '_MARR_GCHI': 1583 switch ($sex) { 1584 case 'M': 1585 return I18N::translate('Marriage of a grandson'); 1586 case 'F': 1587 return I18N::translate('Marriage of a granddaughter'); 1588 default: 1589 return I18N::translate('Marriage of a grandchild'); 1590 } 1591 case '_MARR_GCH1': 1592 switch ($sex) { 1593 case 'M': 1594 return I18N::translateContext('daughter’s son', 'Marriage of a grandson'); 1595 case 'F': 1596 return I18N::translateContext('daughter’s daughter', 'Marriage of a granddaughter'); 1597 default: 1598 return I18N::translate('Marriage of a grandchild'); 1599 } 1600 case '_MARR_GCH2': 1601 switch ($sex) { 1602 case 'M': 1603 return I18N::translateContext('son’s son', 'Marriage of a grandson'); 1604 case 'F': 1605 return I18N::translateContext('son’s daughter', 'Marriage of a granddaughter'); 1606 default: 1607 return I18N::translate('Marriage of a grandchild'); 1608 } 1609 case '_MARR_HSIB': 1610 switch ($sex) { 1611 case 'M': 1612 return I18N::translate('Marriage of a half-brother'); 1613 case 'F': 1614 return I18N::translate('Marriage of a half-sister'); 1615 default: 1616 return I18N::translate('Marriage of a half-sibling'); 1617 } 1618 case '_MARR_PARE': 1619 switch ($sex) { 1620 case 'M': 1621 return 1622 /* I18N: ...to another spouse */ 1623 I18N::translate('Marriage of a father'); 1624 case 'F': 1625 return 1626 /* I18N: ...to another spouse */ 1627 I18N::translate('Marriage of a mother'); 1628 default: 1629 return 1630 /* I18N: ...to another spouse */ 1631 I18N::translate('Marriage of a parent'); 1632 } 1633 case '_MARR_SIBL': 1634 switch ($sex) { 1635 case 'M': 1636 return I18N::translate('Marriage of a brother'); 1637 case 'F': 1638 return I18N::translate('Marriage of a sister'); 1639 default: 1640 return I18N::translate('Marriage of a sibling'); 1641 } 1642 case '_MBON': 1643 return 1644 /* I18N: gedcom tag _MBON */ 1645 I18N::translate('Marriage bond'); 1646 case '_MDCL': 1647 return 1648 /* I18N: gedcom tag _MDCL */ 1649 I18N::translate('Medical'); 1650 case '_MEDC': 1651 return 1652 /* I18N: gedcom tag _MEDC */ 1653 I18N::translate('Medical condition'); 1654 case '_MEND': 1655 return 1656 /* I18N: gedcom tag _MEND */ 1657 I18N::translate('Marriage ending status'); 1658 case '_MILI': 1659 return 1660 /* I18N: gedcom tag _MILI */ 1661 I18N::translate('Military'); 1662 case '_MILT': 1663 return 1664 /* I18N: gedcom tag _MILT */ 1665 I18N::translate('Military service'); 1666 case '_MREL': 1667 return 1668 /* I18N: gedcom tag _MREL */ 1669 I18N::translate('Relationship to mother'); 1670 case '_MSTAT': 1671 return 1672 /* I18N: gedcom tag _MSTAT */ 1673 I18N::translate('Marriage beginning status'); 1674 case '_NAME': 1675 return 1676 /* I18N: gedcom tag _NAME */ 1677 I18N::translate('Mailing name'); 1678 case '_NAMS': 1679 return 1680 /* I18N: gedcom tag _NAMS */ 1681 I18N::translate('Namesake'); 1682 case '_NLIV': 1683 return 1684 /* I18N: gedcom tag _NLIV */ 1685 I18N::translate('Not living'); 1686 case '_NMAR': 1687 switch ($sex) { 1688 case 'M': 1689 return 1690 /* I18N: gedcom tag _NMAR */ 1691 I18N::translateContext('MALE', 'Never married'); 1692 case 'F': 1693 return 1694 /* I18N: gedcom tag _NMAR */ 1695 I18N::translateContext('FEMALE', 'Never married'); 1696 default: 1697 return 1698 /* I18N: gedcom tag _NMAR */ 1699 I18N::translate('Never married'); 1700 } 1701 case '_NMR': 1702 switch ($sex) { 1703 case 'M': 1704 return 1705 /* I18N: gedcom tag _NMR */ 1706 I18N::translateContext('MALE', 'Not married'); 1707 case 'F': 1708 return 1709 /* I18N: gedcom tag _NMR */ 1710 I18N::translateContext('FEMALE', 'Not married'); 1711 default: 1712 return 1713 /* I18N: gedcom tag _NMR */ 1714 I18N::translate('Not married'); 1715 } 1716 case '_WT_USER': 1717 return I18N::translate('by'); 1718 case '_PRMN': 1719 return 1720 /* I18N: gedcom tag _PRMN */ 1721 I18N::translate('Permanent number'); 1722 case '_SCBK': 1723 return 1724 /* I18N: gedcom tag _SCBK */ 1725 I18N::translate('Scrapbook'); 1726 case '_SEPR': 1727 return 1728 /* I18N: gedcom tag _SEPR */ 1729 I18N::translate('Separated'); 1730 case '_SSHOW': 1731 return 1732 /* I18N: gedcom tag _SSHOW */ 1733 I18N::translate('Slide show'); 1734 case '_STAT': 1735 return 1736 /* I18N: gedcom tag _STAT */ 1737 I18N::translate('Marriage status'); 1738 case '_SUBQ': 1739 return 1740 /* I18N: gedcom tag _SUBQ */ 1741 I18N::translate('Short version'); 1742 case '_TODO': 1743 return 1744 /* I18N: gedcom tag _TODO */ 1745 I18N::translate('Research task'); 1746 case '_TYPE': 1747 return 1748 /* I18N: gedcom tag _TYPE */ 1749 I18N::translate('Media type'); 1750 case '_UID': 1751 return 1752 /* I18N: gedcom tag _UID */ 1753 I18N::translate('Unique identifier'); 1754 case '_URL': 1755 return 1756 /* I18N: gedcom tag _URL */ 1757 I18N::translate('URL'); 1758 case '_WEIG': 1759 return 1760 /* I18N: gedcom tag _WEIG */ 1761 I18N::translate('Weight'); 1762 case '_WITN': 1763 return 1764 /* I18N: gedcom tag _WITN */ 1765 I18N::translate('Witness'); 1766 case '_WT_OBJE_SORT': 1767 return 1768 /* I18N: gedcom tag _WT_OBJE_SORT */ 1769 I18N::translate('Re-order media'); 1770 case '_YART': 1771 return /* I18N: gedcom tag _YART - A yahrzeit is a special anniversary of death in the Hebrew faith/calendar. */ I18N::translate('Yahrzeit'); 1772 // Brit milah applies only to males, no need for male/female translations 1773 case '__BRTM_CHIL': 1774 return I18N::translate('Brit milah of a son'); 1775 case '__BRTM_GCHI': 1776 return I18N::translate('Brit milah of a grandson'); 1777 case '__BRTM_GCH1': 1778 return I18N::translateContext('daughter’s son', 'Brit milah of a grandson'); 1779 case '__BRTM_GCH2': 1780 return I18N::translateContext('son’s son', 'Brit milah of a grandson'); 1781 case '__BRTM_HSIB': 1782 return I18N::translate('Brit milah of a half-brother'); 1783 case '__BRTM_SIBL': 1784 return I18N::translate('Brit milah of a brother'); 1785 // These "pseudo" tags are generated internally to present information about a media object 1786 case '__FILE_SIZE__': 1787 return I18N::translate('File size'); 1788 case '__IMAGE_SIZE__': 1789 return I18N::translate('Image dimensions'); 1790 default: 1791 // If no specialisation exists (e.g. DEAT:CAUS), then look for the general (CAUS) 1792 if (strpos($tag, ':')) { 1793 list(, $tag) = explode(':', $tag, 2); 1794 1795 return self::getLabel($tag, $record); 1796 } 1797 1798 // Still no translation? Highlight this as an error 1799 return '<span class="error" title="' . I18N::translate('Unrecognized GEDCOM code') . '">' . Filter::escapeHtml($tag) . '</span>'; 1800 } 1801 } 1802 1803 /** 1804 * Translate a label/value pair, such as “Occupation: Farmer” 1805 * 1806 * @param string $tag 1807 * @param string $value 1808 * @param GedcomRecord|null $record 1809 * @param string|null $element 1810 * 1811 * @return string 1812 */ 1813 public static function getLabelValue($tag, $value, GedcomRecord $record = null, $element = 'div') 1814 { 1815 return 1816 '<' . $element . ' class="fact_' . $tag . '">' . 1817 /* I18N: a label/value pair, such as “Occupation: Farmer”. Some languages may need to change the punctuation. */ 1818 I18N::translate('<span class="label">%1$s:</span> <span class="field" dir="auto">%2$s</span>', self::getLabel($tag, $record), $value) . 1819 '</' . $element . '>'; 1820 } 1821 1822 /** 1823 * Get a list of facts, for use in the "fact picker" edit control 1824 * 1825 * @param string $fact_type 1826 * 1827 * @return string[] 1828 */ 1829 public static function getPicklistFacts($fact_type) 1830 { 1831 switch ($fact_type) { 1832 case 'INDI': 1833 $tags = array( 1834 // Facts, attributes for individuals (no links to FAMs) 1835 'RESN', 'NAME', 'SEX', 'BIRT', 'CHR', 'DEAT', 'BURI', 'CREM', 1836 'ADOP', 'BAPM', 'BARM', 'BASM', 'BLES', 'CHRA', 'CONF', 'FCOM', 'ORDN', 1837 'NATU', 'EMIG', 'IMMI', 'CENS', 'PROB', 'WILL', 'GRAD', 'RETI', 'EVEN', 1838 'CAST', 'DSCR', 'EDUC', 'IDNO', 'NATI', 'NCHI', 'NMR', 1839 'OCCU', 'PROP', 'RELI', 'RESI', 'SSN', 'TITL', 'FACT', 1840 'BAPL', 'CONL', 'ENDL', 'SLGC', 1841 'SUBM', 'ASSO', 'ALIA', 'ANCI', 'DESI', 'RFN', 'AFN', 1842 'REFN', 'RIN', 'CHAN', 'NOTE', 'SHARED_NOTE', 'SOUR', 'OBJE', 1843 // non standard tags 1844 '_BRTM', '_DEG', '_DNA', '_EYEC', '_FNRL', '_HAIR', '_HEIG', '_HNM', 1845 '_HOL', '_INTE', '_MDCL', '_MEDC', '_MILI', '_MILT', '_NAME', '_NAMS', 1846 '_NLIV', '_NMAR', '_PRMN', '_TODO', '_UID', '_WEIG', '_YART', 1847 ); 1848 break; 1849 case 'FAM': 1850 $tags = array( 1851 // Facts for families, left out HUSB, WIFE & CHIL links 1852 'RESN', 'ANUL', 'CENS', 'DIV', 'DIVF', 'ENGA', 'MARB', 'MARC', 1853 'MARR', 'MARL', 'MARS', 'RESI', 'EVEN', 'NCHI', 'SUBM', 'SLGS', 1854 'REFN', 'RIN', 'CHAN', 'NOTE', 'SHARED_NOTE', 'SOUR', 'OBJE', 1855 // non standard tags 1856 '_NMR', 'MARR_CIVIL', 'MARR_RELIGIOUS', 'MARR_PARTNERS', 'MARR_UNKNOWN', 1857 '_COML', '_MBON', '_MARI', '_SEPR', '_TODO', 1858 ); 1859 break; 1860 case 'SOUR': 1861 $tags = array( 1862 // Facts for sources 1863 'DATA', 'AUTH', 'TITL', 'ABBR', 'PUBL', 'TEXT', 'REPO', 'REFN', 'RIN', 1864 'CHAN', 'NOTE', 'SHARED_NOTE', 'OBJE', 1865 'RESN', 1866 ); 1867 break; 1868 case 'REPO': 1869 $tags = array( 1870 // Facts for repositories 1871 'NAME', 'ADDR', 'PHON', 'EMAIL', 'FAX', 'WWW', 1872 'NOTE', 'SHARED_NOTE', 'REFN', 'RIN', 'CHAN', 1873 'RESN', 1874 ); 1875 break; 1876 case 'PLAC': 1877 $tags = array( 1878 // Facts for places 1879 'FONE', 'ROMN', 1880 // non standard tags 1881 '_HEB', 1882 ); 1883 break; 1884 case 'NAME': 1885 $tags = array( 1886 // Facts subordinate to NAME 1887 'NICK', 'FONE', 'ROMN', 1888 // non standard tags 1889 '_HEB', '_AKA', 1890 ); 1891 break; 1892 default: 1893 $tags = array(); 1894 break; 1895 } 1896 1897 $facts = array(); 1898 foreach ($tags as $tag) { 1899 $facts[$tag] = self::getLabel($tag, null); 1900 } 1901 uasort($facts, '\Fisharebest\Webtrees\I18N::strcasecmp'); 1902 1903 return $facts; 1904 } 1905 1906 /** 1907 * Translate the value for 1 FILE/2 FORM/3 TYPE 1908 * 1909 * @param string $type 1910 * 1911 * @return string 1912 */ 1913 public static function getFileFormTypeValue($type) 1914 { 1915 switch (strtolower($type)) { 1916 case 'audio': 1917 return /* I18N: Type of media object */ I18N::translate('Audio'); 1918 case 'book': 1919 return /* I18N: Type of media object */ I18N::translate('Book'); 1920 case 'card': 1921 return /* I18N: Type of media object */ I18N::translate('Card'); 1922 case 'certificate': 1923 return /* I18N: Type of media object */ I18N::translate('Certificate'); 1924 case 'coat': 1925 return /* I18N: Type of media object */ I18N::translate('Coat of arms'); 1926 case 'document': 1927 return /* I18N: Type of media object */ I18N::translate('Document'); 1928 case 'electronic': 1929 return /* I18N: Type of media object */ I18N::translate('Electronic'); 1930 case 'fiche': 1931 return /* I18N: Type of media object */ I18N::translate('Microfiche'); 1932 case 'film': 1933 return /* I18N: Type of media object */ I18N::translate('Microfilm'); 1934 case 'magazine': 1935 return /* I18N: Type of media object */ I18N::translate('Magazine'); 1936 case 'manuscript': 1937 return /* I18N: Type of media object */ I18N::translate('Manuscript'); 1938 case 'map': 1939 return /* I18N: Type of media object */ I18N::translate('Map'); 1940 case 'newspaper': 1941 return /* I18N: Type of media object */ I18N::translate('Newspaper'); 1942 case 'photo': 1943 return /* I18N: Type of media object */ I18N::translate('Photo'); 1944 case 'tombstone': 1945 return /* I18N: Type of media object */ I18N::translate('Tombstone'); 1946 case 'video': 1947 return /* I18N: Type of media object */ I18N::translate('Video'); 1948 case 'painting': 1949 return /* I18N: Type of media object */ I18N::translate('Painting'); 1950 default: 1951 return /* I18N: Type of media object */ I18N::translate('Other'); 1952 } 1953 } 1954 1955 /** 1956 * A list of all possible values for 1 FILE/2 FORM/3 TYPE 1957 * 1958 * @return string[] 1959 */ 1960 public static function getFileFormTypes() 1961 { 1962 $values = array(); 1963 foreach (self::$OBJE_FILE_FORM_TYPE as $type) { 1964 $values[$type] = self::getFileFormTypeValue($type); 1965 } 1966 uasort($values, '\Fisharebest\Webtrees\I18N::strcasecmp'); 1967 1968 return $values; 1969 } 1970 1971 /** 1972 * Generate a value for a new _UID field. 1973 * Instead of RFC4122-compatible UUIDs, generate ones that 1974 * are compatible with PAF, Legacy, RootsMagic, etc. 1975 * In these, the string is upper-cased, dashes are removed, 1976 * and a two-byte checksum is added. 1977 * 1978 * @return string 1979 */ 1980 public static function createUid() 1981 { 1982 $uid = str_replace('-', '', Uuid::uuid4()); 1983 1984 $checksum_a = 0; // a sum of the bytes 1985 $checksum_b = 0; // a sum of the incremental values of $checksum_a 1986 1987 // Compute checksums 1988 for ($i = 0; $i < 32; $i += 2) { 1989 $checksum_a += hexdec(substr($uid, $i, 2)); 1990 $checksum_b += $checksum_a & 0xff; 1991 } 1992 1993 return strtoupper($uid . substr(dechex($checksum_a), -2) . substr(dechex($checksum_b), -2)); 1994 } 1995} 1996