Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 29aee2d

Browse files
committed
[Intl] Full alpha3 language support
1 parent 0bdf10a commit 29aee2d

File tree

5 files changed

+1503
-32
lines changed

5 files changed

+1503
-32
lines changed

src/Symfony/Component/Intl/Data/Generator/LanguageDataGenerator.php

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,12 @@ protected function generateDataForMeta(BundleEntryReaderInterface $reader, $temp
162162

163163
sort($this->languageCodes);
164164

165-
$alpha2ToAlpha3 = $this->generateAlpha2ToAlpha3Mapping($metadataBundle);
166-
$alpha3ToAlpha2 = array_flip($alpha2ToAlpha3);
167-
asort($alpha3ToAlpha2);
168-
169165
return [
170166
'Version' => $rootBundle['Version'],
171167
'Languages' => $this->languageCodes,
172-
'Alpha2ToAlpha3' => $alpha2ToAlpha3,
173-
'Alpha3ToAlpha2' => $alpha3ToAlpha2,
168+
'Alpha3Languages' => $this->generateAlpha3Codes($this->languageCodes, $metadataBundle),
169+
'Alpha2ToAlpha3' => $this->generateAlpha2ToAlpha3Mapping($metadataBundle),
170+
'Alpha3ToAlpha2' => $this->generateAlpha3ToAlpha2Mapping($metadataBundle),
174171
];
175172
}
176173

@@ -179,6 +176,23 @@ private static function generateLanguageNames(ArrayAccessibleResourceBundle $loc
179176
return array_diff_key(iterator_to_array($localeBundle['Languages']), self::$blacklist);
180177
}
181178

179+
private function generateAlpha3Codes(array $languageCodes, ArrayAccessibleResourceBundle $metadataBundle): array
180+
{
181+
$alpha3Codes = array_flip(array_filter($languageCodes, static function (string $language): bool {
182+
return 3 === \strlen($language);
183+
}));
184+
185+
foreach ($metadataBundle['alias']['language'] as $alias => $data) {
186+
if (3 === \strlen($alias) && 'overlong' === $data['reason']) {
187+
$alpha3Codes[$alias] = true;
188+
}
189+
}
190+
191+
ksort($alpha3Codes);
192+
193+
return array_keys($alpha3Codes);
194+
}
195+
182196
private function generateAlpha2ToAlpha3Mapping(ArrayAccessibleResourceBundle $metadataBundle)
183197
{
184198
$aliases = iterator_to_array($metadataBundle['alias']['language']);
@@ -213,4 +227,20 @@ private function generateAlpha2ToAlpha3Mapping(ArrayAccessibleResourceBundle $me
213227

214228
return $alpha2ToAlpha3;
215229
}
230+
231+
private function generateAlpha3ToAlpha2Mapping(ArrayAccessibleResourceBundle $metadataBundle): array
232+
{
233+
$alpha3ToAlpha2 = [];
234+
235+
foreach ($metadataBundle['alias']['language'] as $alias => $data) {
236+
$language = $data['replacement'];
237+
if (2 === \strlen($language) && 3 === \strlen($alias) && 'overlong' === $data['reason']) {
238+
$alpha3ToAlpha2[$alias] = $language;
239+
}
240+
}
241+
242+
asort($alpha3ToAlpha2);
243+
244+
return $alpha3ToAlpha2;
245+
}
216246
}

src/Symfony/Component/Intl/Languages.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public static function getAlpha2Code(string $language): string
9898
*/
9999
public static function getAlpha3Codes(): array
100100
{
101-
return self::readEntry(['Alpha2ToAlpha3'], 'meta');
101+
return self::readEntry(['Alpha3Languages'], 'meta');
102102
}
103103

104104
/**
@@ -111,7 +111,12 @@ public static function alpha3CodeExists(string $language): bool
111111

112112
return true;
113113
} catch (MissingResourceException $e) {
114-
return false;
114+
static $cache;
115+
if (null === $cache) {
116+
$cache = array_flip(self::getAlpha3Codes());
117+
}
118+
119+
return isset($cache[$language]);
115120
}
116121
}
117122

@@ -122,7 +127,15 @@ public static function alpha3CodeExists(string $language): bool
122127
*/
123128
public static function getAlpha3Name(string $language, string $displayLocale = null): string
124129
{
125-
return self::getName(self::getAlpha2Code($language), $displayLocale);
130+
try {
131+
return self::getName(self::getAlpha2Code($language), $displayLocale);
132+
} catch (MissingResourceException $e) {
133+
if (3 === \strlen($language)) {
134+
return self::getName($language, $displayLocale);
135+
}
136+
137+
throw $e;
138+
}
126139
}
127140

128141
/**
@@ -137,6 +150,10 @@ public static function getAlpha3Names($displayLocale = null): array
137150
$alpha2Names = self::getNames($displayLocale);
138151
$alpha3Names = [];
139152
foreach ($alpha2Names as $alpha2Code => $name) {
153+
if (3 === \strlen($alpha2Code)) {
154+
$alpha3Names[$alpha2Code] = $name;
155+
continue;
156+
}
140157
try {
141158
$alpha3Names[self::getAlpha3Code($alpha2Code)] = $name;
142159
} catch (MissingResourceException $e) {

0 commit comments

Comments
 (0)