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