bug #33140 [Intl] Full alpha3 language support (ro0NL)
This PR was merged into the 4.4 branch.
Discussion
----------
[Intl] Full alpha3 language support
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | #33136
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
I'll validate some more cases with tests.
Commits
-------
29aee2ddf2
[Intl] Full alpha3 language support
This commit is contained in:
commit
9130c6ad1a
@ -162,15 +162,12 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
|
|
||||||
sort($this->languageCodes);
|
sort($this->languageCodes);
|
||||||
|
|
||||||
$alpha2ToAlpha3 = $this->generateAlpha2ToAlpha3Mapping($metadataBundle);
|
|
||||||
$alpha3ToAlpha2 = array_flip($alpha2ToAlpha3);
|
|
||||||
asort($alpha3ToAlpha2);
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'Version' => $rootBundle['Version'],
|
'Version' => $rootBundle['Version'],
|
||||||
'Languages' => $this->languageCodes,
|
'Languages' => $this->languageCodes,
|
||||||
'Alpha2ToAlpha3' => $alpha2ToAlpha3,
|
'Alpha3Languages' => $this->generateAlpha3Codes($this->languageCodes, $metadataBundle),
|
||||||
'Alpha3ToAlpha2' => $alpha3ToAlpha2,
|
'Alpha2ToAlpha3' => $this->generateAlpha2ToAlpha3Mapping($metadataBundle),
|
||||||
|
'Alpha3ToAlpha2' => $this->generateAlpha3ToAlpha2Mapping($metadataBundle),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,6 +176,23 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
return array_diff_key(iterator_to_array($localeBundle['Languages']), self::$blacklist);
|
return array_diff_key(iterator_to_array($localeBundle['Languages']), self::$blacklist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function generateAlpha3Codes(array $languageCodes, ArrayAccessibleResourceBundle $metadataBundle): array
|
||||||
|
{
|
||||||
|
$alpha3Codes = array_flip(array_filter($languageCodes, static function (string $language): bool {
|
||||||
|
return 3 === \strlen($language);
|
||||||
|
}));
|
||||||
|
|
||||||
|
foreach ($metadataBundle['alias']['language'] as $alias => $data) {
|
||||||
|
if (3 === \strlen($alias) && 'overlong' === $data['reason']) {
|
||||||
|
$alpha3Codes[$alias] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($alpha3Codes);
|
||||||
|
|
||||||
|
return array_keys($alpha3Codes);
|
||||||
|
}
|
||||||
|
|
||||||
private function generateAlpha2ToAlpha3Mapping(ArrayAccessibleResourceBundle $metadataBundle)
|
private function generateAlpha2ToAlpha3Mapping(ArrayAccessibleResourceBundle $metadataBundle)
|
||||||
{
|
{
|
||||||
$aliases = iterator_to_array($metadataBundle['alias']['language']);
|
$aliases = iterator_to_array($metadataBundle['alias']['language']);
|
||||||
@ -213,4 +227,20 @@ class LanguageDataGenerator extends AbstractDataGenerator
|
|||||||
|
|
||||||
return $alpha2ToAlpha3;
|
return $alpha2ToAlpha3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function generateAlpha3ToAlpha2Mapping(ArrayAccessibleResourceBundle $metadataBundle): array
|
||||||
|
{
|
||||||
|
$alpha3ToAlpha2 = [];
|
||||||
|
|
||||||
|
foreach ($metadataBundle['alias']['language'] as $alias => $data) {
|
||||||
|
$language = $data['replacement'];
|
||||||
|
if (2 === \strlen($language) && 3 === \strlen($alias) && 'overlong' === $data['reason']) {
|
||||||
|
$alpha3ToAlpha2[$alias] = $language;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
asort($alpha3ToAlpha2);
|
||||||
|
|
||||||
|
return $alpha3ToAlpha2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ final class Languages extends ResourceBundle
|
|||||||
*/
|
*/
|
||||||
public static function getAlpha3Codes(): array
|
public static function getAlpha3Codes(): array
|
||||||
{
|
{
|
||||||
return self::readEntry(['Alpha2ToAlpha3'], 'meta');
|
return self::readEntry(['Alpha3Languages'], 'meta');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,7 +111,12 @@ final class Languages extends ResourceBundle
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (MissingResourceException $e) {
|
} catch (MissingResourceException $e) {
|
||||||
return false;
|
static $cache;
|
||||||
|
if (null === $cache) {
|
||||||
|
$cache = array_flip(self::getAlpha3Codes());
|
||||||
|
}
|
||||||
|
|
||||||
|
return isset($cache[$language]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +127,15 @@ final class Languages extends ResourceBundle
|
|||||||
*/
|
*/
|
||||||
public static function getAlpha3Name(string $language, string $displayLocale = null): string
|
public static function getAlpha3Name(string $language, string $displayLocale = null): string
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
return self::getName(self::getAlpha2Code($language), $displayLocale);
|
return self::getName(self::getAlpha2Code($language), $displayLocale);
|
||||||
|
} catch (MissingResourceException $e) {
|
||||||
|
if (3 === \strlen($language)) {
|
||||||
|
return self::getName($language, $displayLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -137,6 +150,10 @@ final class Languages extends ResourceBundle
|
|||||||
$alpha2Names = self::getNames($displayLocale);
|
$alpha2Names = self::getNames($displayLocale);
|
||||||
$alpha3Names = [];
|
$alpha3Names = [];
|
||||||
foreach ($alpha2Names as $alpha2Code => $name) {
|
foreach ($alpha2Names as $alpha2Code => $name) {
|
||||||
|
if (3 === \strlen($alpha2Code)) {
|
||||||
|
$alpha3Names[$alpha2Code] = $name;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
$alpha3Names[self::getAlpha3Code($alpha2Code)] = $name;
|
$alpha3Names[self::getAlpha3Code($alpha2Code)] = $name;
|
||||||
} catch (MissingResourceException $e) {
|
} catch (MissingResourceException $e) {
|
||||||
|
@ -618,6 +618,605 @@
|
|||||||
"zun",
|
"zun",
|
||||||
"zza"
|
"zza"
|
||||||
],
|
],
|
||||||
|
"Alpha3Languages": [
|
||||||
|
"aar",
|
||||||
|
"abk",
|
||||||
|
"ace",
|
||||||
|
"ach",
|
||||||
|
"ada",
|
||||||
|
"ady",
|
||||||
|
"aeb",
|
||||||
|
"afh",
|
||||||
|
"afr",
|
||||||
|
"agq",
|
||||||
|
"ain",
|
||||||
|
"aka",
|
||||||
|
"akk",
|
||||||
|
"akz",
|
||||||
|
"ale",
|
||||||
|
"aln",
|
||||||
|
"alt",
|
||||||
|
"amh",
|
||||||
|
"ang",
|
||||||
|
"anp",
|
||||||
|
"ara",
|
||||||
|
"arc",
|
||||||
|
"arg",
|
||||||
|
"arn",
|
||||||
|
"aro",
|
||||||
|
"arp",
|
||||||
|
"arq",
|
||||||
|
"ars",
|
||||||
|
"arw",
|
||||||
|
"ary",
|
||||||
|
"arz",
|
||||||
|
"asa",
|
||||||
|
"ase",
|
||||||
|
"asm",
|
||||||
|
"ast",
|
||||||
|
"ava",
|
||||||
|
"ave",
|
||||||
|
"avk",
|
||||||
|
"awa",
|
||||||
|
"aym",
|
||||||
|
"aze",
|
||||||
|
"bak",
|
||||||
|
"bal",
|
||||||
|
"bam",
|
||||||
|
"ban",
|
||||||
|
"bar",
|
||||||
|
"bas",
|
||||||
|
"bax",
|
||||||
|
"bbc",
|
||||||
|
"bbj",
|
||||||
|
"bej",
|
||||||
|
"bel",
|
||||||
|
"bem",
|
||||||
|
"ben",
|
||||||
|
"bew",
|
||||||
|
"bez",
|
||||||
|
"bfd",
|
||||||
|
"bfq",
|
||||||
|
"bgn",
|
||||||
|
"bho",
|
||||||
|
"bih",
|
||||||
|
"bik",
|
||||||
|
"bin",
|
||||||
|
"bis",
|
||||||
|
"bjn",
|
||||||
|
"bkm",
|
||||||
|
"bla",
|
||||||
|
"bod",
|
||||||
|
"bos",
|
||||||
|
"bpy",
|
||||||
|
"bqi",
|
||||||
|
"bra",
|
||||||
|
"bre",
|
||||||
|
"brh",
|
||||||
|
"brx",
|
||||||
|
"bss",
|
||||||
|
"bua",
|
||||||
|
"bug",
|
||||||
|
"bul",
|
||||||
|
"bum",
|
||||||
|
"byn",
|
||||||
|
"byv",
|
||||||
|
"cad",
|
||||||
|
"car",
|
||||||
|
"cat",
|
||||||
|
"cay",
|
||||||
|
"cch",
|
||||||
|
"ccp",
|
||||||
|
"ceb",
|
||||||
|
"ces",
|
||||||
|
"cgg",
|
||||||
|
"cha",
|
||||||
|
"chb",
|
||||||
|
"che",
|
||||||
|
"chg",
|
||||||
|
"chk",
|
||||||
|
"chm",
|
||||||
|
"chn",
|
||||||
|
"cho",
|
||||||
|
"chp",
|
||||||
|
"chr",
|
||||||
|
"chu",
|
||||||
|
"chv",
|
||||||
|
"chy",
|
||||||
|
"ckb",
|
||||||
|
"cop",
|
||||||
|
"cor",
|
||||||
|
"cos",
|
||||||
|
"cps",
|
||||||
|
"cre",
|
||||||
|
"crh",
|
||||||
|
"crs",
|
||||||
|
"csb",
|
||||||
|
"cym",
|
||||||
|
"dak",
|
||||||
|
"dan",
|
||||||
|
"dar",
|
||||||
|
"dav",
|
||||||
|
"del",
|
||||||
|
"den",
|
||||||
|
"deu",
|
||||||
|
"dgr",
|
||||||
|
"din",
|
||||||
|
"div",
|
||||||
|
"dje",
|
||||||
|
"doi",
|
||||||
|
"dsb",
|
||||||
|
"dtp",
|
||||||
|
"dua",
|
||||||
|
"dum",
|
||||||
|
"dyo",
|
||||||
|
"dyu",
|
||||||
|
"dzg",
|
||||||
|
"dzo",
|
||||||
|
"ebu",
|
||||||
|
"efi",
|
||||||
|
"egl",
|
||||||
|
"egy",
|
||||||
|
"eka",
|
||||||
|
"ell",
|
||||||
|
"elx",
|
||||||
|
"eng",
|
||||||
|
"enm",
|
||||||
|
"epo",
|
||||||
|
"est",
|
||||||
|
"esu",
|
||||||
|
"eus",
|
||||||
|
"ewe",
|
||||||
|
"ewo",
|
||||||
|
"ext",
|
||||||
|
"fan",
|
||||||
|
"fao",
|
||||||
|
"fas",
|
||||||
|
"fat",
|
||||||
|
"fij",
|
||||||
|
"fil",
|
||||||
|
"fin",
|
||||||
|
"fit",
|
||||||
|
"fon",
|
||||||
|
"fra",
|
||||||
|
"frc",
|
||||||
|
"frm",
|
||||||
|
"fro",
|
||||||
|
"frp",
|
||||||
|
"frr",
|
||||||
|
"frs",
|
||||||
|
"fry",
|
||||||
|
"ful",
|
||||||
|
"fur",
|
||||||
|
"gaa",
|
||||||
|
"gag",
|
||||||
|
"gan",
|
||||||
|
"gay",
|
||||||
|
"gba",
|
||||||
|
"gbz",
|
||||||
|
"gez",
|
||||||
|
"gil",
|
||||||
|
"gla",
|
||||||
|
"gle",
|
||||||
|
"glg",
|
||||||
|
"glk",
|
||||||
|
"glv",
|
||||||
|
"gmh",
|
||||||
|
"goh",
|
||||||
|
"gom",
|
||||||
|
"gon",
|
||||||
|
"gor",
|
||||||
|
"got",
|
||||||
|
"grb",
|
||||||
|
"grc",
|
||||||
|
"grn",
|
||||||
|
"gsw",
|
||||||
|
"guc",
|
||||||
|
"guj",
|
||||||
|
"gur",
|
||||||
|
"guz",
|
||||||
|
"gwi",
|
||||||
|
"hai",
|
||||||
|
"hak",
|
||||||
|
"hat",
|
||||||
|
"hau",
|
||||||
|
"haw",
|
||||||
|
"hbs",
|
||||||
|
"heb",
|
||||||
|
"her",
|
||||||
|
"hif",
|
||||||
|
"hil",
|
||||||
|
"hin",
|
||||||
|
"hit",
|
||||||
|
"hmn",
|
||||||
|
"hmo",
|
||||||
|
"hrv",
|
||||||
|
"hsb",
|
||||||
|
"hsn",
|
||||||
|
"hun",
|
||||||
|
"hup",
|
||||||
|
"hye",
|
||||||
|
"iba",
|
||||||
|
"ibb",
|
||||||
|
"ibo",
|
||||||
|
"ido",
|
||||||
|
"iii",
|
||||||
|
"iku",
|
||||||
|
"ile",
|
||||||
|
"ilo",
|
||||||
|
"ina",
|
||||||
|
"ind",
|
||||||
|
"inh",
|
||||||
|
"ipk",
|
||||||
|
"isl",
|
||||||
|
"ita",
|
||||||
|
"izh",
|
||||||
|
"jam",
|
||||||
|
"jav",
|
||||||
|
"jbo",
|
||||||
|
"jgo",
|
||||||
|
"jmc",
|
||||||
|
"jpn",
|
||||||
|
"jpr",
|
||||||
|
"jrb",
|
||||||
|
"jut",
|
||||||
|
"kaa",
|
||||||
|
"kab",
|
||||||
|
"kac",
|
||||||
|
"kaj",
|
||||||
|
"kal",
|
||||||
|
"kam",
|
||||||
|
"kan",
|
||||||
|
"kas",
|
||||||
|
"kat",
|
||||||
|
"kau",
|
||||||
|
"kaw",
|
||||||
|
"kaz",
|
||||||
|
"kbd",
|
||||||
|
"kbl",
|
||||||
|
"kcg",
|
||||||
|
"kde",
|
||||||
|
"kea",
|
||||||
|
"ken",
|
||||||
|
"kfo",
|
||||||
|
"kgp",
|
||||||
|
"kha",
|
||||||
|
"khm",
|
||||||
|
"kho",
|
||||||
|
"khq",
|
||||||
|
"khw",
|
||||||
|
"kik",
|
||||||
|
"kin",
|
||||||
|
"kir",
|
||||||
|
"kiu",
|
||||||
|
"kkj",
|
||||||
|
"kln",
|
||||||
|
"kmb",
|
||||||
|
"koi",
|
||||||
|
"kok",
|
||||||
|
"kom",
|
||||||
|
"kon",
|
||||||
|
"kor",
|
||||||
|
"kos",
|
||||||
|
"kpe",
|
||||||
|
"krc",
|
||||||
|
"kri",
|
||||||
|
"krj",
|
||||||
|
"krl",
|
||||||
|
"kru",
|
||||||
|
"ksb",
|
||||||
|
"ksf",
|
||||||
|
"ksh",
|
||||||
|
"kua",
|
||||||
|
"kum",
|
||||||
|
"kur",
|
||||||
|
"kut",
|
||||||
|
"lad",
|
||||||
|
"lag",
|
||||||
|
"lah",
|
||||||
|
"lam",
|
||||||
|
"lao",
|
||||||
|
"lat",
|
||||||
|
"lav",
|
||||||
|
"lez",
|
||||||
|
"lfn",
|
||||||
|
"lij",
|
||||||
|
"lim",
|
||||||
|
"lin",
|
||||||
|
"lit",
|
||||||
|
"liv",
|
||||||
|
"lkt",
|
||||||
|
"lmo",
|
||||||
|
"lol",
|
||||||
|
"lou",
|
||||||
|
"loz",
|
||||||
|
"lrc",
|
||||||
|
"ltg",
|
||||||
|
"ltz",
|
||||||
|
"lua",
|
||||||
|
"lub",
|
||||||
|
"lug",
|
||||||
|
"lui",
|
||||||
|
"lun",
|
||||||
|
"luo",
|
||||||
|
"lus",
|
||||||
|
"luy",
|
||||||
|
"lzh",
|
||||||
|
"lzz",
|
||||||
|
"mad",
|
||||||
|
"maf",
|
||||||
|
"mag",
|
||||||
|
"mah",
|
||||||
|
"mai",
|
||||||
|
"mak",
|
||||||
|
"mal",
|
||||||
|
"man",
|
||||||
|
"mar",
|
||||||
|
"mas",
|
||||||
|
"mde",
|
||||||
|
"mdf",
|
||||||
|
"mdr",
|
||||||
|
"men",
|
||||||
|
"mer",
|
||||||
|
"mfe",
|
||||||
|
"mga",
|
||||||
|
"mgh",
|
||||||
|
"mgo",
|
||||||
|
"mic",
|
||||||
|
"min",
|
||||||
|
"mkd",
|
||||||
|
"mlg",
|
||||||
|
"mlt",
|
||||||
|
"mnc",
|
||||||
|
"mni",
|
||||||
|
"moh",
|
||||||
|
"mol",
|
||||||
|
"mon",
|
||||||
|
"mos",
|
||||||
|
"mri",
|
||||||
|
"mrj",
|
||||||
|
"msa",
|
||||||
|
"mua",
|
||||||
|
"mus",
|
||||||
|
"mwl",
|
||||||
|
"mwr",
|
||||||
|
"mwv",
|
||||||
|
"mya",
|
||||||
|
"mye",
|
||||||
|
"myv",
|
||||||
|
"mzn",
|
||||||
|
"nan",
|
||||||
|
"nap",
|
||||||
|
"naq",
|
||||||
|
"nau",
|
||||||
|
"nav",
|
||||||
|
"nbl",
|
||||||
|
"nde",
|
||||||
|
"ndo",
|
||||||
|
"nds",
|
||||||
|
"nep",
|
||||||
|
"new",
|
||||||
|
"nia",
|
||||||
|
"niu",
|
||||||
|
"njo",
|
||||||
|
"nld",
|
||||||
|
"nmg",
|
||||||
|
"nnh",
|
||||||
|
"nno",
|
||||||
|
"nob",
|
||||||
|
"nog",
|
||||||
|
"non",
|
||||||
|
"nor",
|
||||||
|
"nov",
|
||||||
|
"nqo",
|
||||||
|
"nso",
|
||||||
|
"nus",
|
||||||
|
"nwc",
|
||||||
|
"nya",
|
||||||
|
"nym",
|
||||||
|
"nyn",
|
||||||
|
"nyo",
|
||||||
|
"nzi",
|
||||||
|
"oci",
|
||||||
|
"oji",
|
||||||
|
"ori",
|
||||||
|
"orm",
|
||||||
|
"osa",
|
||||||
|
"oss",
|
||||||
|
"ota",
|
||||||
|
"pag",
|
||||||
|
"pal",
|
||||||
|
"pam",
|
||||||
|
"pan",
|
||||||
|
"pap",
|
||||||
|
"pau",
|
||||||
|
"pcd",
|
||||||
|
"pcm",
|
||||||
|
"pdc",
|
||||||
|
"pdt",
|
||||||
|
"peo",
|
||||||
|
"pfl",
|
||||||
|
"phn",
|
||||||
|
"pli",
|
||||||
|
"pms",
|
||||||
|
"pnt",
|
||||||
|
"pol",
|
||||||
|
"pon",
|
||||||
|
"por",
|
||||||
|
"prg",
|
||||||
|
"pro",
|
||||||
|
"prs",
|
||||||
|
"pus",
|
||||||
|
"quc",
|
||||||
|
"que",
|
||||||
|
"qug",
|
||||||
|
"raj",
|
||||||
|
"rap",
|
||||||
|
"rar",
|
||||||
|
"rgn",
|
||||||
|
"rif",
|
||||||
|
"rof",
|
||||||
|
"roh",
|
||||||
|
"rom",
|
||||||
|
"ron",
|
||||||
|
"rtm",
|
||||||
|
"rue",
|
||||||
|
"rug",
|
||||||
|
"run",
|
||||||
|
"rup",
|
||||||
|
"rus",
|
||||||
|
"rwk",
|
||||||
|
"sad",
|
||||||
|
"sag",
|
||||||
|
"sah",
|
||||||
|
"sam",
|
||||||
|
"san",
|
||||||
|
"saq",
|
||||||
|
"sas",
|
||||||
|
"sat",
|
||||||
|
"saz",
|
||||||
|
"sba",
|
||||||
|
"sbp",
|
||||||
|
"scn",
|
||||||
|
"sco",
|
||||||
|
"sdc",
|
||||||
|
"sdh",
|
||||||
|
"see",
|
||||||
|
"seh",
|
||||||
|
"sei",
|
||||||
|
"sel",
|
||||||
|
"ses",
|
||||||
|
"sga",
|
||||||
|
"sgs",
|
||||||
|
"shi",
|
||||||
|
"shn",
|
||||||
|
"shu",
|
||||||
|
"sid",
|
||||||
|
"sin",
|
||||||
|
"sli",
|
||||||
|
"slk",
|
||||||
|
"slv",
|
||||||
|
"sly",
|
||||||
|
"sma",
|
||||||
|
"sme",
|
||||||
|
"smj",
|
||||||
|
"smn",
|
||||||
|
"smo",
|
||||||
|
"sms",
|
||||||
|
"sna",
|
||||||
|
"snd",
|
||||||
|
"snk",
|
||||||
|
"sog",
|
||||||
|
"som",
|
||||||
|
"sot",
|
||||||
|
"spa",
|
||||||
|
"sqi",
|
||||||
|
"srd",
|
||||||
|
"srn",
|
||||||
|
"srp",
|
||||||
|
"srr",
|
||||||
|
"ssw",
|
||||||
|
"ssy",
|
||||||
|
"stq",
|
||||||
|
"suk",
|
||||||
|
"sun",
|
||||||
|
"sus",
|
||||||
|
"sux",
|
||||||
|
"swa",
|
||||||
|
"swb",
|
||||||
|
"swc",
|
||||||
|
"swe",
|
||||||
|
"syc",
|
||||||
|
"syr",
|
||||||
|
"szl",
|
||||||
|
"tah",
|
||||||
|
"tam",
|
||||||
|
"tat",
|
||||||
|
"tcy",
|
||||||
|
"tel",
|
||||||
|
"tem",
|
||||||
|
"teo",
|
||||||
|
"ter",
|
||||||
|
"tet",
|
||||||
|
"tgk",
|
||||||
|
"tgl",
|
||||||
|
"tha",
|
||||||
|
"tig",
|
||||||
|
"tir",
|
||||||
|
"tiv",
|
||||||
|
"tkl",
|
||||||
|
"tkr",
|
||||||
|
"tlh",
|
||||||
|
"tli",
|
||||||
|
"tly",
|
||||||
|
"tmh",
|
||||||
|
"tog",
|
||||||
|
"ton",
|
||||||
|
"tpi",
|
||||||
|
"tru",
|
||||||
|
"trv",
|
||||||
|
"tsd",
|
||||||
|
"tsi",
|
||||||
|
"tsn",
|
||||||
|
"tso",
|
||||||
|
"ttt",
|
||||||
|
"tuk",
|
||||||
|
"tum",
|
||||||
|
"tur",
|
||||||
|
"tvl",
|
||||||
|
"twi",
|
||||||
|
"twq",
|
||||||
|
"tyv",
|
||||||
|
"tzm",
|
||||||
|
"udm",
|
||||||
|
"uga",
|
||||||
|
"uig",
|
||||||
|
"ukr",
|
||||||
|
"umb",
|
||||||
|
"urd",
|
||||||
|
"uzb",
|
||||||
|
"vai",
|
||||||
|
"vec",
|
||||||
|
"ven",
|
||||||
|
"vep",
|
||||||
|
"vie",
|
||||||
|
"vls",
|
||||||
|
"vmf",
|
||||||
|
"vol",
|
||||||
|
"vot",
|
||||||
|
"vro",
|
||||||
|
"vun",
|
||||||
|
"wae",
|
||||||
|
"wal",
|
||||||
|
"war",
|
||||||
|
"was",
|
||||||
|
"wbp",
|
||||||
|
"wln",
|
||||||
|
"wol",
|
||||||
|
"wuu",
|
||||||
|
"xal",
|
||||||
|
"xho",
|
||||||
|
"xmf",
|
||||||
|
"xog",
|
||||||
|
"yao",
|
||||||
|
"yap",
|
||||||
|
"yav",
|
||||||
|
"ybb",
|
||||||
|
"yid",
|
||||||
|
"yor",
|
||||||
|
"yrl",
|
||||||
|
"yue",
|
||||||
|
"zap",
|
||||||
|
"zbl",
|
||||||
|
"zea",
|
||||||
|
"zen",
|
||||||
|
"zgh",
|
||||||
|
"zha",
|
||||||
|
"zho",
|
||||||
|
"zul",
|
||||||
|
"zun",
|
||||||
|
"zza"
|
||||||
|
],
|
||||||
"Alpha2ToAlpha3": {
|
"Alpha2ToAlpha3": {
|
||||||
"aa": "aar",
|
"aa": "aar",
|
||||||
"ab": "abk",
|
"ab": "abk",
|
||||||
@ -806,6 +1405,7 @@
|
|||||||
"ave": "ae",
|
"ave": "ae",
|
||||||
"afr": "af",
|
"afr": "af",
|
||||||
"aka": "ak",
|
"aka": "ak",
|
||||||
|
"twi": "ak",
|
||||||
"amh": "am",
|
"amh": "am",
|
||||||
"arg": "an",
|
"arg": "an",
|
||||||
"ara": "ar",
|
"ara": "ar",
|
||||||
@ -912,6 +1512,7 @@
|
|||||||
"mya": "my",
|
"mya": "my",
|
||||||
"nau": "na",
|
"nau": "na",
|
||||||
"nob": "nb",
|
"nob": "nb",
|
||||||
|
"nor": "nb",
|
||||||
"nde": "nd",
|
"nde": "nd",
|
||||||
"nep": "ne",
|
"nep": "ne",
|
||||||
"ndo": "ng",
|
"ndo": "ng",
|
||||||
@ -933,6 +1534,7 @@
|
|||||||
"que": "qu",
|
"que": "qu",
|
||||||
"roh": "rm",
|
"roh": "rm",
|
||||||
"run": "rn",
|
"run": "rn",
|
||||||
|
"mol": "ro",
|
||||||
"ron": "ro",
|
"ron": "ro",
|
||||||
"rus": "ru",
|
"rus": "ru",
|
||||||
"kin": "rw",
|
"kin": "rw",
|
||||||
|
@ -626,6 +626,7 @@ class CountriesTest extends ResourceBundleTestCase
|
|||||||
{
|
{
|
||||||
$this->assertTrue(Countries::alpha3CodeExists('NOR'));
|
$this->assertTrue(Countries::alpha3CodeExists('NOR'));
|
||||||
$this->assertTrue(Countries::alpha3CodeExists('NLD'));
|
$this->assertTrue(Countries::alpha3CodeExists('NLD'));
|
||||||
|
$this->assertFalse(Countries::alpha3CodeExists('NL'));
|
||||||
$this->assertFalse(Countries::alpha3CodeExists('NIO'));
|
$this->assertFalse(Countries::alpha3CodeExists('NIO'));
|
||||||
$this->assertFalse(Countries::alpha3CodeExists('ZZZ'));
|
$this->assertFalse(Countries::alpha3CodeExists('ZZZ'));
|
||||||
}
|
}
|
||||||
|
@ -640,6 +640,606 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
'zza',
|
'zza',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
private static $alpha3Codes = [
|
||||||
|
'aar',
|
||||||
|
'abk',
|
||||||
|
'ace',
|
||||||
|
'ach',
|
||||||
|
'ada',
|
||||||
|
'ady',
|
||||||
|
'aeb',
|
||||||
|
'afh',
|
||||||
|
'afr',
|
||||||
|
'agq',
|
||||||
|
'ain',
|
||||||
|
'aka',
|
||||||
|
'akk',
|
||||||
|
'akz',
|
||||||
|
'ale',
|
||||||
|
'aln',
|
||||||
|
'alt',
|
||||||
|
'amh',
|
||||||
|
'ang',
|
||||||
|
'anp',
|
||||||
|
'ara',
|
||||||
|
'arc',
|
||||||
|
'arg',
|
||||||
|
'arn',
|
||||||
|
'aro',
|
||||||
|
'arp',
|
||||||
|
'arq',
|
||||||
|
'ars',
|
||||||
|
'arw',
|
||||||
|
'ary',
|
||||||
|
'arz',
|
||||||
|
'asa',
|
||||||
|
'ase',
|
||||||
|
'asm',
|
||||||
|
'ast',
|
||||||
|
'ava',
|
||||||
|
'ave',
|
||||||
|
'avk',
|
||||||
|
'awa',
|
||||||
|
'aym',
|
||||||
|
'aze',
|
||||||
|
'bak',
|
||||||
|
'bal',
|
||||||
|
'bam',
|
||||||
|
'ban',
|
||||||
|
'bar',
|
||||||
|
'bas',
|
||||||
|
'bax',
|
||||||
|
'bbc',
|
||||||
|
'bbj',
|
||||||
|
'bej',
|
||||||
|
'bel',
|
||||||
|
'bem',
|
||||||
|
'ben',
|
||||||
|
'bew',
|
||||||
|
'bez',
|
||||||
|
'bfd',
|
||||||
|
'bfq',
|
||||||
|
'bgn',
|
||||||
|
'bho',
|
||||||
|
'bih',
|
||||||
|
'bik',
|
||||||
|
'bin',
|
||||||
|
'bis',
|
||||||
|
'bjn',
|
||||||
|
'bkm',
|
||||||
|
'bla',
|
||||||
|
'bod',
|
||||||
|
'bos',
|
||||||
|
'bpy',
|
||||||
|
'bqi',
|
||||||
|
'bra',
|
||||||
|
'bre',
|
||||||
|
'brh',
|
||||||
|
'brx',
|
||||||
|
'bss',
|
||||||
|
'bua',
|
||||||
|
'bug',
|
||||||
|
'bul',
|
||||||
|
'bum',
|
||||||
|
'byn',
|
||||||
|
'byv',
|
||||||
|
'cad',
|
||||||
|
'car',
|
||||||
|
'cat',
|
||||||
|
'cay',
|
||||||
|
'cch',
|
||||||
|
'ccp',
|
||||||
|
'ceb',
|
||||||
|
'ces',
|
||||||
|
'cgg',
|
||||||
|
'cha',
|
||||||
|
'chb',
|
||||||
|
'che',
|
||||||
|
'chg',
|
||||||
|
'chk',
|
||||||
|
'chm',
|
||||||
|
'chn',
|
||||||
|
'cho',
|
||||||
|
'chp',
|
||||||
|
'chr',
|
||||||
|
'chu',
|
||||||
|
'chv',
|
||||||
|
'chy',
|
||||||
|
'ckb',
|
||||||
|
'cop',
|
||||||
|
'cor',
|
||||||
|
'cos',
|
||||||
|
'cps',
|
||||||
|
'cre',
|
||||||
|
'crh',
|
||||||
|
'crs',
|
||||||
|
'csb',
|
||||||
|
'cym',
|
||||||
|
'dak',
|
||||||
|
'dan',
|
||||||
|
'dar',
|
||||||
|
'dav',
|
||||||
|
'del',
|
||||||
|
'den',
|
||||||
|
'deu',
|
||||||
|
'dgr',
|
||||||
|
'din',
|
||||||
|
'div',
|
||||||
|
'dje',
|
||||||
|
'doi',
|
||||||
|
'dsb',
|
||||||
|
'dtp',
|
||||||
|
'dua',
|
||||||
|
'dum',
|
||||||
|
'dyo',
|
||||||
|
'dyu',
|
||||||
|
'dzg',
|
||||||
|
'dzo',
|
||||||
|
'ebu',
|
||||||
|
'efi',
|
||||||
|
'egl',
|
||||||
|
'egy',
|
||||||
|
'eka',
|
||||||
|
'ell',
|
||||||
|
'elx',
|
||||||
|
'eng',
|
||||||
|
'enm',
|
||||||
|
'epo',
|
||||||
|
'est',
|
||||||
|
'esu',
|
||||||
|
'eus',
|
||||||
|
'ewe',
|
||||||
|
'ewo',
|
||||||
|
'ext',
|
||||||
|
'fan',
|
||||||
|
'fao',
|
||||||
|
'fas',
|
||||||
|
'fat',
|
||||||
|
'fij',
|
||||||
|
'fil',
|
||||||
|
'fin',
|
||||||
|
'fit',
|
||||||
|
'fon',
|
||||||
|
'fra',
|
||||||
|
'frc',
|
||||||
|
'frm',
|
||||||
|
'fro',
|
||||||
|
'frp',
|
||||||
|
'frr',
|
||||||
|
'frs',
|
||||||
|
'fry',
|
||||||
|
'ful',
|
||||||
|
'fur',
|
||||||
|
'gaa',
|
||||||
|
'gag',
|
||||||
|
'gan',
|
||||||
|
'gay',
|
||||||
|
'gba',
|
||||||
|
'gbz',
|
||||||
|
'gez',
|
||||||
|
'gil',
|
||||||
|
'gla',
|
||||||
|
'gle',
|
||||||
|
'glg',
|
||||||
|
'glk',
|
||||||
|
'glv',
|
||||||
|
'gmh',
|
||||||
|
'goh',
|
||||||
|
'gom',
|
||||||
|
'gon',
|
||||||
|
'gor',
|
||||||
|
'got',
|
||||||
|
'grb',
|
||||||
|
'grc',
|
||||||
|
'grn',
|
||||||
|
'gsw',
|
||||||
|
'guc',
|
||||||
|
'guj',
|
||||||
|
'gur',
|
||||||
|
'guz',
|
||||||
|
'gwi',
|
||||||
|
'hai',
|
||||||
|
'hak',
|
||||||
|
'hat',
|
||||||
|
'hau',
|
||||||
|
'haw',
|
||||||
|
'hbs',
|
||||||
|
'heb',
|
||||||
|
'her',
|
||||||
|
'hif',
|
||||||
|
'hil',
|
||||||
|
'hin',
|
||||||
|
'hit',
|
||||||
|
'hmn',
|
||||||
|
'hmo',
|
||||||
|
'hrv',
|
||||||
|
'hsb',
|
||||||
|
'hsn',
|
||||||
|
'hun',
|
||||||
|
'hup',
|
||||||
|
'hye',
|
||||||
|
'iba',
|
||||||
|
'ibb',
|
||||||
|
'ibo',
|
||||||
|
'ido',
|
||||||
|
'iii',
|
||||||
|
'iku',
|
||||||
|
'ile',
|
||||||
|
'ilo',
|
||||||
|
'ina',
|
||||||
|
'ind',
|
||||||
|
'inh',
|
||||||
|
'ipk',
|
||||||
|
'isl',
|
||||||
|
'ita',
|
||||||
|
'izh',
|
||||||
|
'jam',
|
||||||
|
'jav',
|
||||||
|
'jbo',
|
||||||
|
'jgo',
|
||||||
|
'jmc',
|
||||||
|
'jpn',
|
||||||
|
'jpr',
|
||||||
|
'jrb',
|
||||||
|
'jut',
|
||||||
|
'kaa',
|
||||||
|
'kab',
|
||||||
|
'kac',
|
||||||
|
'kaj',
|
||||||
|
'kal',
|
||||||
|
'kam',
|
||||||
|
'kan',
|
||||||
|
'kas',
|
||||||
|
'kat',
|
||||||
|
'kau',
|
||||||
|
'kaw',
|
||||||
|
'kaz',
|
||||||
|
'kbd',
|
||||||
|
'kbl',
|
||||||
|
'kcg',
|
||||||
|
'kde',
|
||||||
|
'kea',
|
||||||
|
'ken',
|
||||||
|
'kfo',
|
||||||
|
'kgp',
|
||||||
|
'kha',
|
||||||
|
'khm',
|
||||||
|
'kho',
|
||||||
|
'khq',
|
||||||
|
'khw',
|
||||||
|
'kik',
|
||||||
|
'kin',
|
||||||
|
'kir',
|
||||||
|
'kiu',
|
||||||
|
'kkj',
|
||||||
|
'kln',
|
||||||
|
'kmb',
|
||||||
|
'koi',
|
||||||
|
'kok',
|
||||||
|
'kom',
|
||||||
|
'kon',
|
||||||
|
'kor',
|
||||||
|
'kos',
|
||||||
|
'kpe',
|
||||||
|
'krc',
|
||||||
|
'kri',
|
||||||
|
'krj',
|
||||||
|
'krl',
|
||||||
|
'kru',
|
||||||
|
'ksb',
|
||||||
|
'ksf',
|
||||||
|
'ksh',
|
||||||
|
'kua',
|
||||||
|
'kum',
|
||||||
|
'kur',
|
||||||
|
'kut',
|
||||||
|
'lad',
|
||||||
|
'lag',
|
||||||
|
'lah',
|
||||||
|
'lam',
|
||||||
|
'lao',
|
||||||
|
'lat',
|
||||||
|
'lav',
|
||||||
|
'lez',
|
||||||
|
'lfn',
|
||||||
|
'lij',
|
||||||
|
'lim',
|
||||||
|
'lin',
|
||||||
|
'lit',
|
||||||
|
'liv',
|
||||||
|
'lkt',
|
||||||
|
'lmo',
|
||||||
|
'lol',
|
||||||
|
'lou',
|
||||||
|
'loz',
|
||||||
|
'lrc',
|
||||||
|
'ltg',
|
||||||
|
'ltz',
|
||||||
|
'lua',
|
||||||
|
'lub',
|
||||||
|
'lug',
|
||||||
|
'lui',
|
||||||
|
'lun',
|
||||||
|
'luo',
|
||||||
|
'lus',
|
||||||
|
'luy',
|
||||||
|
'lzh',
|
||||||
|
'lzz',
|
||||||
|
'mad',
|
||||||
|
'maf',
|
||||||
|
'mag',
|
||||||
|
'mah',
|
||||||
|
'mai',
|
||||||
|
'mak',
|
||||||
|
'mal',
|
||||||
|
'man',
|
||||||
|
'mar',
|
||||||
|
'mas',
|
||||||
|
'mde',
|
||||||
|
'mdf',
|
||||||
|
'mdr',
|
||||||
|
'men',
|
||||||
|
'mer',
|
||||||
|
'mfe',
|
||||||
|
'mga',
|
||||||
|
'mgh',
|
||||||
|
'mgo',
|
||||||
|
'mic',
|
||||||
|
'min',
|
||||||
|
'mkd',
|
||||||
|
'mlg',
|
||||||
|
'mlt',
|
||||||
|
'mnc',
|
||||||
|
'mni',
|
||||||
|
'moh',
|
||||||
|
'mol',
|
||||||
|
'mon',
|
||||||
|
'mos',
|
||||||
|
'mri',
|
||||||
|
'mrj',
|
||||||
|
'msa',
|
||||||
|
'mua',
|
||||||
|
'mus',
|
||||||
|
'mwl',
|
||||||
|
'mwr',
|
||||||
|
'mwv',
|
||||||
|
'mya',
|
||||||
|
'mye',
|
||||||
|
'myv',
|
||||||
|
'mzn',
|
||||||
|
'nan',
|
||||||
|
'nap',
|
||||||
|
'naq',
|
||||||
|
'nau',
|
||||||
|
'nav',
|
||||||
|
'nbl',
|
||||||
|
'nde',
|
||||||
|
'ndo',
|
||||||
|
'nds',
|
||||||
|
'nep',
|
||||||
|
'new',
|
||||||
|
'nia',
|
||||||
|
'niu',
|
||||||
|
'njo',
|
||||||
|
'nld',
|
||||||
|
'nmg',
|
||||||
|
'nnh',
|
||||||
|
'nno',
|
||||||
|
'nob',
|
||||||
|
'nog',
|
||||||
|
'non',
|
||||||
|
'nor',
|
||||||
|
'nov',
|
||||||
|
'nqo',
|
||||||
|
'nso',
|
||||||
|
'nus',
|
||||||
|
'nwc',
|
||||||
|
'nya',
|
||||||
|
'nym',
|
||||||
|
'nyn',
|
||||||
|
'nyo',
|
||||||
|
'nzi',
|
||||||
|
'oci',
|
||||||
|
'oji',
|
||||||
|
'ori',
|
||||||
|
'orm',
|
||||||
|
'osa',
|
||||||
|
'oss',
|
||||||
|
'ota',
|
||||||
|
'pag',
|
||||||
|
'pal',
|
||||||
|
'pam',
|
||||||
|
'pan',
|
||||||
|
'pap',
|
||||||
|
'pau',
|
||||||
|
'pcd',
|
||||||
|
'pcm',
|
||||||
|
'pdc',
|
||||||
|
'pdt',
|
||||||
|
'peo',
|
||||||
|
'pfl',
|
||||||
|
'phn',
|
||||||
|
'pli',
|
||||||
|
'pms',
|
||||||
|
'pnt',
|
||||||
|
'pol',
|
||||||
|
'pon',
|
||||||
|
'por',
|
||||||
|
'prg',
|
||||||
|
'pro',
|
||||||
|
'prs',
|
||||||
|
'pus',
|
||||||
|
'quc',
|
||||||
|
'que',
|
||||||
|
'qug',
|
||||||
|
'raj',
|
||||||
|
'rap',
|
||||||
|
'rar',
|
||||||
|
'rgn',
|
||||||
|
'rif',
|
||||||
|
'rof',
|
||||||
|
'roh',
|
||||||
|
'rom',
|
||||||
|
'ron',
|
||||||
|
'rtm',
|
||||||
|
'rue',
|
||||||
|
'rug',
|
||||||
|
'run',
|
||||||
|
'rup',
|
||||||
|
'rus',
|
||||||
|
'rwk',
|
||||||
|
'sad',
|
||||||
|
'sag',
|
||||||
|
'sah',
|
||||||
|
'sam',
|
||||||
|
'san',
|
||||||
|
'saq',
|
||||||
|
'sas',
|
||||||
|
'sat',
|
||||||
|
'saz',
|
||||||
|
'sba',
|
||||||
|
'sbp',
|
||||||
|
'scn',
|
||||||
|
'sco',
|
||||||
|
'sdc',
|
||||||
|
'sdh',
|
||||||
|
'see',
|
||||||
|
'seh',
|
||||||
|
'sei',
|
||||||
|
'sel',
|
||||||
|
'ses',
|
||||||
|
'sga',
|
||||||
|
'sgs',
|
||||||
|
'shi',
|
||||||
|
'shn',
|
||||||
|
'shu',
|
||||||
|
'sid',
|
||||||
|
'sin',
|
||||||
|
'sli',
|
||||||
|
'slk',
|
||||||
|
'slv',
|
||||||
|
'sly',
|
||||||
|
'sma',
|
||||||
|
'sme',
|
||||||
|
'smj',
|
||||||
|
'smn',
|
||||||
|
'smo',
|
||||||
|
'sms',
|
||||||
|
'sna',
|
||||||
|
'snd',
|
||||||
|
'snk',
|
||||||
|
'sog',
|
||||||
|
'som',
|
||||||
|
'sot',
|
||||||
|
'spa',
|
||||||
|
'sqi',
|
||||||
|
'srd',
|
||||||
|
'srn',
|
||||||
|
'srp',
|
||||||
|
'srr',
|
||||||
|
'ssw',
|
||||||
|
'ssy',
|
||||||
|
'stq',
|
||||||
|
'suk',
|
||||||
|
'sun',
|
||||||
|
'sus',
|
||||||
|
'sux',
|
||||||
|
'swa',
|
||||||
|
'swb',
|
||||||
|
'swc',
|
||||||
|
'swe',
|
||||||
|
'syc',
|
||||||
|
'syr',
|
||||||
|
'szl',
|
||||||
|
'tah',
|
||||||
|
'tam',
|
||||||
|
'tat',
|
||||||
|
'tcy',
|
||||||
|
'tel',
|
||||||
|
'tem',
|
||||||
|
'teo',
|
||||||
|
'ter',
|
||||||
|
'tet',
|
||||||
|
'tgk',
|
||||||
|
'tgl',
|
||||||
|
'tha',
|
||||||
|
'tig',
|
||||||
|
'tir',
|
||||||
|
'tiv',
|
||||||
|
'tkl',
|
||||||
|
'tkr',
|
||||||
|
'tlh',
|
||||||
|
'tli',
|
||||||
|
'tly',
|
||||||
|
'tmh',
|
||||||
|
'tog',
|
||||||
|
'ton',
|
||||||
|
'tpi',
|
||||||
|
'tru',
|
||||||
|
'trv',
|
||||||
|
'tsd',
|
||||||
|
'tsi',
|
||||||
|
'tsn',
|
||||||
|
'tso',
|
||||||
|
'ttt',
|
||||||
|
'tuk',
|
||||||
|
'tum',
|
||||||
|
'tur',
|
||||||
|
'tvl',
|
||||||
|
'twi',
|
||||||
|
'twq',
|
||||||
|
'tyv',
|
||||||
|
'tzm',
|
||||||
|
'udm',
|
||||||
|
'uga',
|
||||||
|
'uig',
|
||||||
|
'ukr',
|
||||||
|
'umb',
|
||||||
|
'urd',
|
||||||
|
'uzb',
|
||||||
|
'vai',
|
||||||
|
'vec',
|
||||||
|
'ven',
|
||||||
|
'vep',
|
||||||
|
'vie',
|
||||||
|
'vls',
|
||||||
|
'vmf',
|
||||||
|
'vol',
|
||||||
|
'vot',
|
||||||
|
'vro',
|
||||||
|
'vun',
|
||||||
|
'wae',
|
||||||
|
'wal',
|
||||||
|
'war',
|
||||||
|
'was',
|
||||||
|
'wbp',
|
||||||
|
'wln',
|
||||||
|
'wol',
|
||||||
|
'wuu',
|
||||||
|
'xal',
|
||||||
|
'xho',
|
||||||
|
'xmf',
|
||||||
|
'xog',
|
||||||
|
'yao',
|
||||||
|
'yap',
|
||||||
|
'yav',
|
||||||
|
'ybb',
|
||||||
|
'yid',
|
||||||
|
'yor',
|
||||||
|
'yrl',
|
||||||
|
'yue',
|
||||||
|
'zap',
|
||||||
|
'zbl',
|
||||||
|
'zea',
|
||||||
|
'zen',
|
||||||
|
'zgh',
|
||||||
|
'zha',
|
||||||
|
'zho',
|
||||||
|
'zul',
|
||||||
|
'zun',
|
||||||
|
'zza',
|
||||||
|
];
|
||||||
|
|
||||||
private static $alpha2ToAlpha3 = [
|
private static $alpha2ToAlpha3 = [
|
||||||
'aa' => 'aar',
|
'aa' => 'aar',
|
||||||
'ab' => 'abk',
|
'ab' => 'abk',
|
||||||
@ -823,6 +1423,192 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
'zu' => 'zul',
|
'zu' => 'zul',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
private static $alpha3ToAlpha2 = [
|
||||||
|
'aar' => 'aa',
|
||||||
|
'abk' => 'ab',
|
||||||
|
'ave' => 'ae',
|
||||||
|
'afr' => 'af',
|
||||||
|
'aka' => 'ak',
|
||||||
|
'twi' => 'ak',
|
||||||
|
'amh' => 'am',
|
||||||
|
'arg' => 'an',
|
||||||
|
'ara' => 'ar',
|
||||||
|
'asm' => 'as',
|
||||||
|
'ava' => 'av',
|
||||||
|
'aym' => 'ay',
|
||||||
|
'aze' => 'az',
|
||||||
|
'bak' => 'ba',
|
||||||
|
'bel' => 'be',
|
||||||
|
'bul' => 'bg',
|
||||||
|
'bis' => 'bi',
|
||||||
|
'bam' => 'bm',
|
||||||
|
'ben' => 'bn',
|
||||||
|
'bod' => 'bo',
|
||||||
|
'bre' => 'br',
|
||||||
|
'bos' => 'bs',
|
||||||
|
'cat' => 'ca',
|
||||||
|
'che' => 'ce',
|
||||||
|
'cha' => 'ch',
|
||||||
|
'cos' => 'co',
|
||||||
|
'cre' => 'cr',
|
||||||
|
'ces' => 'cs',
|
||||||
|
'chu' => 'cu',
|
||||||
|
'chv' => 'cv',
|
||||||
|
'cym' => 'cy',
|
||||||
|
'dan' => 'da',
|
||||||
|
'deu' => 'de',
|
||||||
|
'div' => 'dv',
|
||||||
|
'dzo' => 'dz',
|
||||||
|
'ewe' => 'ee',
|
||||||
|
'ell' => 'el',
|
||||||
|
'eng' => 'en',
|
||||||
|
'epo' => 'eo',
|
||||||
|
'spa' => 'es',
|
||||||
|
'est' => 'et',
|
||||||
|
'eus' => 'eu',
|
||||||
|
'fas' => 'fa',
|
||||||
|
'ful' => 'ff',
|
||||||
|
'fin' => 'fi',
|
||||||
|
'fij' => 'fj',
|
||||||
|
'fao' => 'fo',
|
||||||
|
'fra' => 'fr',
|
||||||
|
'fry' => 'fy',
|
||||||
|
'gle' => 'ga',
|
||||||
|
'gla' => 'gd',
|
||||||
|
'glg' => 'gl',
|
||||||
|
'grn' => 'gn',
|
||||||
|
'guj' => 'gu',
|
||||||
|
'glv' => 'gv',
|
||||||
|
'hau' => 'ha',
|
||||||
|
'heb' => 'he',
|
||||||
|
'hin' => 'hi',
|
||||||
|
'hmo' => 'ho',
|
||||||
|
'hrv' => 'hr',
|
||||||
|
'hat' => 'ht',
|
||||||
|
'hun' => 'hu',
|
||||||
|
'hye' => 'hy',
|
||||||
|
'her' => 'hz',
|
||||||
|
'ina' => 'ia',
|
||||||
|
'ind' => 'id',
|
||||||
|
'ile' => 'ie',
|
||||||
|
'ibo' => 'ig',
|
||||||
|
'iii' => 'ii',
|
||||||
|
'ipk' => 'ik',
|
||||||
|
'ido' => 'io',
|
||||||
|
'isl' => 'is',
|
||||||
|
'ita' => 'it',
|
||||||
|
'iku' => 'iu',
|
||||||
|
'jpn' => 'ja',
|
||||||
|
'jav' => 'jv',
|
||||||
|
'kat' => 'ka',
|
||||||
|
'kon' => 'kg',
|
||||||
|
'kik' => 'ki',
|
||||||
|
'kua' => 'kj',
|
||||||
|
'kaz' => 'kk',
|
||||||
|
'kal' => 'kl',
|
||||||
|
'khm' => 'km',
|
||||||
|
'kan' => 'kn',
|
||||||
|
'kor' => 'ko',
|
||||||
|
'kau' => 'kr',
|
||||||
|
'kas' => 'ks',
|
||||||
|
'kur' => 'ku',
|
||||||
|
'kom' => 'kv',
|
||||||
|
'cor' => 'kw',
|
||||||
|
'kir' => 'ky',
|
||||||
|
'lat' => 'la',
|
||||||
|
'ltz' => 'lb',
|
||||||
|
'lug' => 'lg',
|
||||||
|
'lim' => 'li',
|
||||||
|
'lin' => 'ln',
|
||||||
|
'lao' => 'lo',
|
||||||
|
'lit' => 'lt',
|
||||||
|
'lub' => 'lu',
|
||||||
|
'lav' => 'lv',
|
||||||
|
'mlg' => 'mg',
|
||||||
|
'mah' => 'mh',
|
||||||
|
'mri' => 'mi',
|
||||||
|
'mkd' => 'mk',
|
||||||
|
'mal' => 'ml',
|
||||||
|
'mon' => 'mn',
|
||||||
|
'mar' => 'mr',
|
||||||
|
'msa' => 'ms',
|
||||||
|
'mlt' => 'mt',
|
||||||
|
'mya' => 'my',
|
||||||
|
'nau' => 'na',
|
||||||
|
'nob' => 'nb',
|
||||||
|
'nor' => 'nb',
|
||||||
|
'nde' => 'nd',
|
||||||
|
'nep' => 'ne',
|
||||||
|
'ndo' => 'ng',
|
||||||
|
'nld' => 'nl',
|
||||||
|
'nno' => 'nn',
|
||||||
|
'nbl' => 'nr',
|
||||||
|
'nav' => 'nv',
|
||||||
|
'nya' => 'ny',
|
||||||
|
'oci' => 'oc',
|
||||||
|
'oji' => 'oj',
|
||||||
|
'orm' => 'om',
|
||||||
|
'ori' => 'or',
|
||||||
|
'oss' => 'os',
|
||||||
|
'pan' => 'pa',
|
||||||
|
'pli' => 'pi',
|
||||||
|
'pol' => 'pl',
|
||||||
|
'pus' => 'ps',
|
||||||
|
'por' => 'pt',
|
||||||
|
'que' => 'qu',
|
||||||
|
'roh' => 'rm',
|
||||||
|
'run' => 'rn',
|
||||||
|
'mol' => 'ro',
|
||||||
|
'ron' => 'ro',
|
||||||
|
'rus' => 'ru',
|
||||||
|
'kin' => 'rw',
|
||||||
|
'san' => 'sa',
|
||||||
|
'srd' => 'sc',
|
||||||
|
'snd' => 'sd',
|
||||||
|
'sme' => 'se',
|
||||||
|
'sag' => 'sg',
|
||||||
|
'sin' => 'si',
|
||||||
|
'slk' => 'sk',
|
||||||
|
'slv' => 'sl',
|
||||||
|
'smo' => 'sm',
|
||||||
|
'sna' => 'sn',
|
||||||
|
'som' => 'so',
|
||||||
|
'sqi' => 'sq',
|
||||||
|
'srp' => 'sr',
|
||||||
|
'ssw' => 'ss',
|
||||||
|
'sot' => 'st',
|
||||||
|
'sun' => 'su',
|
||||||
|
'swe' => 'sv',
|
||||||
|
'swa' => 'sw',
|
||||||
|
'tam' => 'ta',
|
||||||
|
'tel' => 'te',
|
||||||
|
'tgk' => 'tg',
|
||||||
|
'tha' => 'th',
|
||||||
|
'tir' => 'ti',
|
||||||
|
'tuk' => 'tk',
|
||||||
|
'tsn' => 'tn',
|
||||||
|
'ton' => 'to',
|
||||||
|
'tur' => 'tr',
|
||||||
|
'tso' => 'ts',
|
||||||
|
'tat' => 'tt',
|
||||||
|
'tah' => 'ty',
|
||||||
|
'uig' => 'ug',
|
||||||
|
'ukr' => 'uk',
|
||||||
|
'urd' => 'ur',
|
||||||
|
'uzb' => 'uz',
|
||||||
|
'ven' => 've',
|
||||||
|
'vie' => 'vi',
|
||||||
|
'vol' => 'vo',
|
||||||
|
'wln' => 'wa',
|
||||||
|
'wol' => 'wo',
|
||||||
|
'xho' => 'xh',
|
||||||
|
'yid' => 'yi',
|
||||||
|
'yor' => 'yo',
|
||||||
|
'zha' => 'za',
|
||||||
|
'zho' => 'zh',
|
||||||
|
'zul' => 'zu',
|
||||||
|
];
|
||||||
|
|
||||||
public function testGetLanguageCodes()
|
public function testGetLanguageCodes()
|
||||||
{
|
{
|
||||||
$this->assertEquals(self::$languages, Languages::getLanguageCodes());
|
$this->assertEquals(self::$languages, Languages::getLanguageCodes());
|
||||||
@ -833,12 +1619,19 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
*/
|
*/
|
||||||
public function testGetNames($displayLocale)
|
public function testGetNames($displayLocale)
|
||||||
{
|
{
|
||||||
$languages = array_keys(Languages::getNames($displayLocale));
|
$languages = array_keys($names = Languages::getNames($displayLocale));
|
||||||
|
|
||||||
sort($languages);
|
sort($languages);
|
||||||
|
|
||||||
$this->assertNotEmpty($languages);
|
$this->assertNotEmpty($languages);
|
||||||
$this->assertEmpty(array_diff($languages, self::$languages));
|
$this->assertEmpty(array_diff($languages, self::$languages));
|
||||||
|
|
||||||
|
foreach (Languages::getAlpha3Names($displayLocale) as $alpha3Code => $name) {
|
||||||
|
$alpha2Code = self::$alpha3ToAlpha2[$alpha3Code] ?? null;
|
||||||
|
if (null !== $alpha2Code) {
|
||||||
|
$this->assertSame($name, $names[$alpha2Code]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetNamesDefaultLocale()
|
public function testGetNamesDefaultLocale()
|
||||||
@ -929,20 +1722,51 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
|
|
||||||
public function testGetAlpha3Codes()
|
public function testGetAlpha3Codes()
|
||||||
{
|
{
|
||||||
$this->assertSame(self::$alpha2ToAlpha3, Languages::getAlpha3Codes());
|
$this->assertSame(self::$alpha3Codes, Languages::getAlpha3Codes());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetAlpha2Code()
|
public function provideLanguagesWithAlpha2Equivalent()
|
||||||
{
|
{
|
||||||
foreach (self::$alpha2ToAlpha3 as $alpha2Code => $alpha3Code) {
|
return array_map(
|
||||||
$this->assertSame($alpha2Code, Languages::getAlpha2Code($alpha3Code));
|
function ($value) { return [$value]; },
|
||||||
|
array_keys(self::$alpha3ToAlpha2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideLanguagesWithAlpha2Equivalent
|
||||||
|
*/
|
||||||
|
public function testGetAlpha2Code($language)
|
||||||
|
{
|
||||||
|
$this->assertSame(self::$alpha3ToAlpha2[$language], Languages::getAlpha2Code($language));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideLanguagesWithoutAlpha2Equivalent()
|
||||||
|
{
|
||||||
|
return array_map(
|
||||||
|
function ($value) { return [$value]; },
|
||||||
|
array_diff(self::$alpha3Codes, array_keys(self::$alpha3ToAlpha2))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider provideLanguagesWithoutAlpha2Equivalent
|
||||||
|
*/
|
||||||
|
public function testGetAlpha2CodeFailsIfNoAlpha2Equivalent($language)
|
||||||
|
{
|
||||||
|
$this->expectException('Symfony\Component\Intl\Exception\MissingResourceException');
|
||||||
|
Languages::getAlpha2Code($language);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testAlpha3CodeExists()
|
public function testAlpha3CodeExists()
|
||||||
{
|
{
|
||||||
$this->assertTrue(Languages::alpha3CodeExists('nob'));
|
$this->assertTrue(Languages::alpha3CodeExists('nob'));
|
||||||
$this->assertTrue(Languages::alpha3CodeExists('nld'));
|
$this->assertTrue(Languages::alpha3CodeExists('nld'));
|
||||||
|
$this->assertTrue(Languages::alpha3CodeExists('ace'));
|
||||||
|
$this->assertTrue(Languages::alpha3CodeExists('nor'));
|
||||||
|
$this->assertTrue(Languages::alpha3CodeExists('twi'));
|
||||||
|
$this->assertTrue(Languages::alpha3CodeExists('tgl'));
|
||||||
|
$this->assertFalse(Languages::alpha3CodeExists('en'));
|
||||||
$this->assertFalse(Languages::alpha3CodeExists('foo'));
|
$this->assertFalse(Languages::alpha3CodeExists('foo'));
|
||||||
$this->assertFalse(Languages::alpha3CodeExists('zzz'));
|
$this->assertFalse(Languages::alpha3CodeExists('zzz'));
|
||||||
}
|
}
|
||||||
@ -952,21 +1776,18 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
*/
|
*/
|
||||||
public function testGetAlpha3Name($displayLocale)
|
public function testGetAlpha3Name($displayLocale)
|
||||||
{
|
{
|
||||||
$names = Languages::getNames($displayLocale);
|
$names = Languages::getAlpha3Names($displayLocale);
|
||||||
|
|
||||||
foreach ($names as $alpha2 => $name) {
|
foreach ($names as $language => $name) {
|
||||||
$alpha3 = self::$alpha2ToAlpha3[$alpha2] ?? false;
|
$this->assertSame($name, Languages::getAlpha3Name($language, $displayLocale));
|
||||||
if ($alpha3) {
|
|
||||||
$this->assertSame($name, Languages::getAlpha3Name($alpha3, $displayLocale));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetAlpha3NameWithInvalidCountryCode()
|
public function testGetAlpha3NameWithInvalidLanguageCode()
|
||||||
{
|
{
|
||||||
$this->expectException(MissingResourceException::class);
|
$this->expectException(MissingResourceException::class);
|
||||||
|
|
||||||
Languages::getAlpha3Name('ZZZ');
|
Languages::getAlpha3Name('zzz');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -974,18 +1795,18 @@ class LanguagesTest extends ResourceBundleTestCase
|
|||||||
*/
|
*/
|
||||||
public function testGetAlpha3Names($displayLocale)
|
public function testGetAlpha3Names($displayLocale)
|
||||||
{
|
{
|
||||||
$names = Languages::getAlpha3Names($displayLocale);
|
$languages = array_keys($names = Languages::getAlpha3Names($displayLocale));
|
||||||
|
|
||||||
$alpha3Codes = array_keys($names);
|
sort($languages);
|
||||||
sort($alpha3Codes);
|
|
||||||
$this->assertSame(array_values(self::$alpha2ToAlpha3), $alpha3Codes);
|
|
||||||
|
|
||||||
$alpha2Names = Languages::getNames($displayLocale);
|
$this->assertNotEmpty($languages);
|
||||||
foreach ($alpha2Names as $alpha2Code => $name) {
|
$this->assertEmpty(array_diff($languages, self::$alpha3Codes));
|
||||||
if (!isset(self::$alpha2ToAlpha3[$alpha2Code])) {
|
|
||||||
unset($alpha2Names[$alpha2Code]);
|
foreach (Languages::getNames($displayLocale) as $alpha2Code => $name) {
|
||||||
|
$alpha3Code = self::$alpha2ToAlpha3[$alpha2Code] ?? (3 === \strlen($alpha2Code) ? $alpha2Code : null);
|
||||||
|
if (null !== $alpha3Code) {
|
||||||
|
$this->assertSame($name, $names[$alpha3Code]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->assertSame(array_values($alpha2Names), array_values($names));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user