@@ -61,6 +61,33 @@ class RegionDataGenerator extends AbstractDataGenerator
61
61
'ZZ ' => true , // Unknown Region
62
62
];
63
63
64
+ // @see https://en.wikipedia.org/wiki/ISO_3166-1_numeric#Withdrawn_codes
65
+ private const WITHDRAWN_CODES = [
66
+ 128 , // Canton and Enderbury Islands
67
+ 200 , // Czechoslovakia
68
+ 216 , // Dronning Maud Land
69
+ 230 , // Ethiopia
70
+ 249 , // France, Metropolitan
71
+ 278 , // German Democratic Republic
72
+ 280 , // Germany, Federal Republic of
73
+ 396 , // Johnston Island
74
+ 488 , // Midway Islands
75
+ 530 , // Netherlands Antilles
76
+ 532 , // Netherlands Antilles
77
+ 536 , // Neutral Zone
78
+ 582 , // Pacific Islands (Trust Territory)
79
+ 590 , // Panama
80
+ 658 , // Saint Kitts-Nevis-Anguilla
81
+ 720 , // Yemen, Democratic
82
+ 736 , // Sudan
83
+ 810 , // USSR
84
+ 849 , // United States Miscellaneous Pacific Islands
85
+ 872 , // Wake Island
86
+ 886 , // Yemen Arab Republic
87
+ 890 , // Yugoslavia, Socialist Federal Republic of
88
+ 891 , // Serbia and Montenegro
89
+ ];
90
+
64
91
/**
65
92
* Collects all available language codes.
66
93
*
@@ -151,10 +178,16 @@ protected function generateDataForMeta(BundleEntryReaderInterface $reader, strin
151
178
$ alpha3ToAlpha2 = array_flip ($ alpha2ToAlpha3 );
152
179
asort ($ alpha3ToAlpha2 );
153
180
181
+ $ alpha2ToNumeric = $ this ->generateAlpha2ToNumericMapping ($ metadataBundle );
182
+ $ numericToAlpha2 = array_flip ($ alpha2ToNumeric );
183
+ asort ($ numericToAlpha2 );
184
+
154
185
return [
155
186
'Regions ' => $ this ->regionCodes ,
156
187
'Alpha2ToAlpha3 ' => $ alpha2ToAlpha3 ,
157
188
'Alpha3ToAlpha2 ' => $ alpha3ToAlpha2 ,
189
+ 'Alpha2ToNumeric ' => $ alpha2ToNumeric ,
190
+ 'NumericToAlpha2 ' => $ numericToAlpha2 ,
158
191
];
159
192
}
160
193
@@ -177,10 +210,13 @@ protected function generateRegionNames(ArrayAccessibleResourceBundle $localeBund
177
210
private function generateAlpha2ToAlpha3Mapping (array $ countries , ArrayAccessibleResourceBundle $ metadataBundle ): array
178
211
{
179
212
$ aliases = iterator_to_array ($ metadataBundle ['alias ' ]['territory ' ]);
213
+
180
214
$ alpha2ToAlpha3 = [];
181
215
182
216
foreach ($ aliases as $ alias => $ data ) {
217
+
183
218
$ country = $ data ['replacement ' ];
219
+
184
220
if (2 === \strlen ($ country ) && 3 === \strlen ($ alias ) && 'overlong ' === $ data ['reason ' ]) {
185
221
if (isset (self ::PREFERRED_ALPHA2_TO_ALPHA3_MAPPING [$ country ])) {
186
222
// Validate to prevent typos
@@ -208,4 +244,32 @@ private function generateAlpha2ToAlpha3Mapping(array $countries, ArrayAccessible
208
244
209
245
return $ alpha2ToAlpha3 ;
210
246
}
247
+
248
+ private function generateAlpha2ToNumericMapping (ArrayAccessibleResourceBundle $ metadataBundle ): array
249
+ {
250
+ $ aliases = iterator_to_array ($ metadataBundle ['alias ' ]['territory ' ]);
251
+
252
+ $ alpha2ToNumeric = [];
253
+
254
+ foreach ($ aliases as $ alias => $ data ) {
255
+
256
+ if (!is_numeric ($ alias )) {
257
+ continue ;
258
+ }
259
+
260
+ if (in_array ($ alias , self ::WITHDRAWN_CODES )) {
261
+ continue ;
262
+ }
263
+
264
+ if ('deprecated ' === $ data ['reason ' ]) {
265
+ continue ;
266
+ }
267
+
268
+ $ alpha2ToNumeric [$ data ['replacement ' ]] = (string ) $ alias ;
269
+ }
270
+
271
+ ksort ($ alpha2ToNumeric );
272
+
273
+ return $ alpha2ToNumeric ;
274
+ }
211
275
}
0 commit comments