2020-01-23 18:39:23 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use MediaWiki\Languages\LanguageConverterFactory;
|
|
|
|
|
use MediaWiki\MediaWikiServices;
|
2020-01-29 15:13:08 +00:00
|
|
|
use Wikimedia\TestingAccessWrapper;
|
2020-01-23 18:39:23 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @group large
|
|
|
|
|
* @group Language
|
|
|
|
|
* @coversDefaultClass MediaWiki\Languages\LanguageConverterFactory
|
|
|
|
|
*/
|
|
|
|
|
class LanguageConverterFactoryTest extends MediaWikiLangTestCase {
|
|
|
|
|
/**
|
|
|
|
|
* @covers ::__construct
|
2021-10-23 21:33:01 +00:00
|
|
|
* @covers ::instantiateConverter
|
2020-01-23 18:39:23 +00:00
|
|
|
* @covers ::getLanguageConverter
|
|
|
|
|
* @dataProvider codeProvider
|
|
|
|
|
*/
|
|
|
|
|
public function testLanguageConverters(
|
2022-11-08 06:30:52 +00:00
|
|
|
$langCode,
|
2022-11-08 06:31:39 +00:00
|
|
|
$staticDefaultVariant,
|
2020-01-23 18:39:23 +00:00
|
|
|
$type,
|
|
|
|
|
$variants,
|
|
|
|
|
$variantFallbacks,
|
|
|
|
|
$variantNames,
|
|
|
|
|
$flags,
|
|
|
|
|
$manualLevel
|
|
|
|
|
) {
|
2022-11-20 19:58:58 +00:00
|
|
|
$this->hideDeprecated( LanguageConverterFactory::class . '::isTitleConversionDisabled' );
|
2022-11-08 06:30:52 +00:00
|
|
|
$lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( $langCode );
|
2021-10-23 21:33:01 +00:00
|
|
|
$factory = new LanguageConverterFactory(
|
|
|
|
|
MediaWikiServices::getInstance()->getObjectFactory(),
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
static function () use ( $lang ) {
|
|
|
|
|
return $lang;
|
|
|
|
|
}
|
|
|
|
|
);
|
2020-11-25 04:35:49 +00:00
|
|
|
$this->assertFalse( $factory->isConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isTitleConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isLinkConversionDisabled() );
|
2020-01-23 18:39:23 +00:00
|
|
|
$converter = $factory->getLanguageConverter( $lang );
|
|
|
|
|
$this->verifyConverter(
|
|
|
|
|
$converter,
|
|
|
|
|
$lang,
|
2022-11-08 06:30:52 +00:00
|
|
|
$langCode,
|
2022-11-08 06:31:39 +00:00
|
|
|
$staticDefaultVariant,
|
2020-01-23 18:39:23 +00:00
|
|
|
$type,
|
|
|
|
|
$variants,
|
|
|
|
|
$variantFallbacks,
|
|
|
|
|
$variantNames,
|
|
|
|
|
$flags,
|
|
|
|
|
$manualLevel
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers ::__construct
|
2021-10-23 21:33:01 +00:00
|
|
|
* @covers ::instantiateConverter
|
2020-01-23 18:39:23 +00:00
|
|
|
* @covers ::getLanguageConverter
|
|
|
|
|
*/
|
|
|
|
|
public function testCreateFromCodeEnPigLatin() {
|
2022-11-20 19:58:58 +00:00
|
|
|
$this->hideDeprecated( LanguageConverterFactory::class . '::isTitleConversionDisabled' );
|
2020-01-23 18:39:23 +00:00
|
|
|
$lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' );
|
2021-10-23 21:33:01 +00:00
|
|
|
$factory = new LanguageConverterFactory(
|
|
|
|
|
MediaWikiServices::getInstance()->getObjectFactory(),
|
|
|
|
|
true,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
static function () use ( $lang ) {
|
|
|
|
|
return $lang;
|
|
|
|
|
}
|
|
|
|
|
);
|
2020-11-25 04:35:49 +00:00
|
|
|
$this->assertFalse( $factory->isConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isTitleConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isLinkConversionDisabled() );
|
2020-01-23 18:39:23 +00:00
|
|
|
|
|
|
|
|
$converter = $factory->getLanguageConverter( $lang );
|
|
|
|
|
|
|
|
|
|
$this->verifyConverter(
|
|
|
|
|
$converter,
|
|
|
|
|
$lang,
|
|
|
|
|
'en',
|
2022-11-08 06:30:52 +00:00
|
|
|
'en',
|
2020-01-23 18:39:23 +00:00
|
|
|
'EnConverter',
|
|
|
|
|
[ 'en', 'en-x-piglatin' ],
|
|
|
|
|
[],
|
|
|
|
|
[],
|
|
|
|
|
[],
|
|
|
|
|
[ 'en' => 'bidirectional', 'en-x-piglatin' => 'bidirectional' ]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers ::__construct
|
2021-10-23 21:33:01 +00:00
|
|
|
* @covers ::instantiateConverter
|
2020-01-23 18:39:23 +00:00
|
|
|
* @covers ::getLanguageConverter
|
2020-11-25 04:35:49 +00:00
|
|
|
* @dataProvider booleanProvider
|
2020-01-23 18:39:23 +00:00
|
|
|
*/
|
2020-11-25 04:35:49 +00:00
|
|
|
public function testDisabledBooleans( $pigLatinDisabled, $conversionDisabled, $titleDisabled ) {
|
2022-11-20 19:58:58 +00:00
|
|
|
$this->hideDeprecated( LanguageConverterFactory::class . '::isTitleConversionDisabled' );
|
2020-01-23 18:39:23 +00:00
|
|
|
$lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' );
|
2020-11-25 04:35:49 +00:00
|
|
|
$factory = new LanguageConverterFactory(
|
2021-10-23 21:33:01 +00:00
|
|
|
MediaWikiServices::getInstance()->getObjectFactory(),
|
2020-11-25 04:35:49 +00:00
|
|
|
!$pigLatinDisabled,
|
|
|
|
|
$conversionDisabled,
|
|
|
|
|
$titleDisabled,
|
2021-02-07 13:10:36 +00:00
|
|
|
static function () use ( $lang ) {
|
2020-11-25 04:35:49 +00:00
|
|
|
return $lang;
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
$converter = $factory->getLanguageConverter( $lang );
|
|
|
|
|
|
|
|
|
|
$this->assertSame( $conversionDisabled, $factory->isConversionDisabled() );
|
|
|
|
|
$this->assertSame( $titleDisabled, $factory->isTitleConversionDisabled() );
|
|
|
|
|
$this->assertSame( $conversionDisabled || $titleDisabled, $factory->isLinkConversionDisabled() );
|
|
|
|
|
|
|
|
|
|
if ( $pigLatinDisabled ) {
|
|
|
|
|
$this->assertNotContains(
|
|
|
|
|
'en-x-piglatin', $converter->getVariants()
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
$this->assertContains(
|
|
|
|
|
'en-x-piglatin', $converter->getVariants()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-19 22:32:30 +00:00
|
|
|
public static function booleanProvider() {
|
2020-11-25 04:35:49 +00:00
|
|
|
return [
|
|
|
|
|
[ false, false, false ],
|
|
|
|
|
[ false, false, true ],
|
2022-11-08 06:30:52 +00:00
|
|
|
[ false, true, false ],
|
|
|
|
|
[ false, true, true ],
|
2020-11-25 04:35:49 +00:00
|
|
|
[ true, false, false ],
|
|
|
|
|
[ true, false, true ],
|
2022-11-08 06:30:52 +00:00
|
|
|
[ true, true, false ],
|
|
|
|
|
[ true, true, true ],
|
2020-11-25 04:35:49 +00:00
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers ::__construct
|
2021-10-23 21:33:01 +00:00
|
|
|
* @covers ::instantiateConverter
|
2020-11-25 04:35:49 +00:00
|
|
|
* @covers ::getLanguageConverter
|
|
|
|
|
*/
|
|
|
|
|
public function testDefaultContentLanguageFallback() {
|
2022-11-20 19:58:58 +00:00
|
|
|
$this->hideDeprecated( LanguageConverterFactory::class . '::isTitleConversionDisabled' );
|
2020-11-25 04:35:49 +00:00
|
|
|
$lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' );
|
2021-10-23 21:33:01 +00:00
|
|
|
$factory = new LanguageConverterFactory(
|
|
|
|
|
MediaWikiServices::getInstance()->getObjectFactory(),
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
false,
|
|
|
|
|
static function () use ( $lang ) {
|
|
|
|
|
return $lang;
|
|
|
|
|
}
|
|
|
|
|
);
|
2020-11-25 04:35:49 +00:00
|
|
|
$this->assertFalse( $factory->isConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isTitleConversionDisabled() );
|
|
|
|
|
$this->assertFalse( $factory->isLinkConversionDisabled() );
|
2020-01-23 18:39:23 +00:00
|
|
|
|
|
|
|
|
$converter = $factory->getLanguageConverter();
|
|
|
|
|
|
|
|
|
|
$this->verifyConverter(
|
|
|
|
|
$converter,
|
|
|
|
|
$lang,
|
|
|
|
|
'en',
|
2022-11-08 06:30:52 +00:00
|
|
|
'en',
|
2020-01-23 18:39:23 +00:00
|
|
|
'TrivialLanguageConverter',
|
|
|
|
|
[ 'en' ],
|
|
|
|
|
[],
|
|
|
|
|
[],
|
|
|
|
|
[],
|
|
|
|
|
[]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function verifyConverter(
|
|
|
|
|
$converter,
|
|
|
|
|
$lang,
|
2022-11-08 06:30:52 +00:00
|
|
|
$langCode,
|
2022-11-08 06:31:39 +00:00
|
|
|
$staticDefaultVariant,
|
2020-01-23 18:39:23 +00:00
|
|
|
$type,
|
|
|
|
|
$variants,
|
|
|
|
|
$variantFallbacks,
|
|
|
|
|
$variantNames,
|
|
|
|
|
$flags,
|
|
|
|
|
$manualLevel
|
|
|
|
|
) {
|
|
|
|
|
$this->assertEquals( $type, get_class( $converter ) );
|
|
|
|
|
|
|
|
|
|
if ( is_a( $converter, LanguageConverter::class ) ) {
|
2020-01-29 15:13:08 +00:00
|
|
|
$testConverter = TestingAccessWrapper::newFromObject( $converter );
|
|
|
|
|
$this->assertSame( $lang, $testConverter->mLangObj, "Language should be as provided" );
|
|
|
|
|
|
2022-11-08 06:30:52 +00:00
|
|
|
$this->assertEquals( $langCode, $testConverter->getMainCode(),
|
|
|
|
|
"getMainCode should be as $langCode" );
|
2022-11-08 06:31:39 +00:00
|
|
|
$this->assertEquals( $staticDefaultVariant, $testConverter->getStaticDefaultVariant(),
|
|
|
|
|
"getStaticDefaultVariant should be as $staticDefaultVariant" );
|
2021-01-29 11:23:29 +00:00
|
|
|
$this->assertEquals( $manualLevel, $testConverter->getManualLevel(), "Manual Level" );
|
2020-01-23 18:39:23 +00:00
|
|
|
|
2021-01-29 11:23:29 +00:00
|
|
|
$this->assertEquals( $variants, $testConverter->getVariants(), "Variants" );
|
|
|
|
|
$this->assertEquals( $variantFallbacks, $testConverter->getVariantsFallbacks(), "Variant Fallbacks" );
|
2020-01-23 18:39:23 +00:00
|
|
|
$defaultFlags = [
|
2020-03-19 22:46:38 +00:00
|
|
|
'A' => 'A',
|
|
|
|
|
'T' => 'T',
|
|
|
|
|
'R' => 'R',
|
|
|
|
|
'D' => 'D',
|
|
|
|
|
'-' => '-',
|
|
|
|
|
'H' => 'H',
|
|
|
|
|
'N' => 'N',
|
2020-01-23 18:39:23 +00:00
|
|
|
];
|
2020-03-19 22:46:38 +00:00
|
|
|
$this->assertArraySubmapSame(
|
|
|
|
|
array_merge( $defaultFlags, $flags ),
|
2021-01-29 11:23:29 +00:00
|
|
|
$converter->getFlags(),
|
2020-03-19 22:46:38 +00:00
|
|
|
"Flags"
|
|
|
|
|
);
|
2020-01-23 18:39:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-19 22:32:30 +00:00
|
|
|
public static function codeProvider() {
|
2021-01-12 12:39:32 +00:00
|
|
|
$trivialWithNothingElseCodes = [
|
|
|
|
|
'aa', 'ab', 'abs', 'ace', 'ady', 'ady-cyrl', 'aeb', 'aeb-arab', 'aeb-latn',
|
|
|
|
|
'af', 'ak', 'aln', 'als', 'am', 'an', 'ang', 'anp', 'ar', 'arc', 'arn',
|
|
|
|
|
'arq', 'ary', 'arz', 'as', 'ase', 'ast', 'atj', 'av', 'avk', 'awa', 'ay',
|
|
|
|
|
'az', 'azb', 'ba', 'ban-bali', 'bar', 'bat-smg', 'bbc', 'bbc-latn', 'bcc',
|
|
|
|
|
'bcl', 'be', 'be-tarask', 'be-x-old', 'bg', 'bgn', 'bh', 'bho', 'bi', 'bjn',
|
|
|
|
|
'bm', 'bn', 'bo', 'bpy', 'bqi', 'br', 'brh', 'bs', 'btm', 'bto', 'bug', 'bxr',
|
|
|
|
|
'ca', 'cbk-zam', 'cdo', 'ce', 'ceb', 'ch', 'cho', 'chr', 'chy', 'ckb', 'co',
|
|
|
|
|
'cps', 'cr', 'crh-latn', 'crh-cyrl', 'cs', 'csb', 'cu', 'cv', 'cy', 'da',
|
|
|
|
|
'de', 'de-at', 'de-ch', 'de-formal', 'din', 'diq', 'dsb', 'dtp', 'dty',
|
|
|
|
|
'dv', 'dz', 'ee', 'egl', 'el', 'eml', 'en', 'en-ca', 'en-gb', 'eo', 'es',
|
|
|
|
|
'es-419', 'es-formal', 'et', 'eu', 'ext', 'fa', 'ff', 'fi', 'fit', 'fiu-vro',
|
|
|
|
|
'fj', 'fo', 'fr', 'frc', 'frp', 'frr', 'fur', 'fy', 'ga', 'gag', 'gan-hans',
|
|
|
|
|
'gan-hant', 'gcr', 'gd', 'gl', 'glk', 'gn', 'gom', 'gom-deva', 'gom-latn',
|
|
|
|
|
'gor', 'got', 'grc', 'gsw', 'gu', 'gv', 'ha', 'hak', 'haw', 'he', 'hi',
|
|
|
|
|
'hif', 'hif-latn', 'hil', 'ho', 'hr', 'hrx', 'hsb', 'ht', 'hu', 'hu-formal',
|
|
|
|
|
'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans',
|
|
|
|
|
'ike-latn', 'ilo', 'inh', 'io', 'is', 'it', 'ja', 'jam', 'jbo', 'jut',
|
|
|
|
|
'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbp', 'kg', 'khw', 'ki',
|
|
|
|
|
'kiu', 'kj', 'kjp', 'kk-arab', 'kk-cyrl', 'kk-latn', 'kk-cn', 'kk-kz',
|
|
|
|
|
'kk-tr', 'kl', 'km', 'kn', 'ko', 'ko-kp', 'koi', 'kr', 'krc', 'kri', 'krj',
|
|
|
|
|
'krl', 'ks', 'ks-arab', 'ks-deva', 'ksh', 'ku-latn', 'ku-arab', 'kum', 'kv',
|
|
|
|
|
'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lez', 'lfn', 'lg', 'li', 'lij', 'liv',
|
|
|
|
|
'lki', 'lmo', 'ln', 'lo', 'lrc', 'loz', 'lt', 'ltg', 'lus', 'luz', 'lv',
|
|
|
|
|
'lzh', 'lzz', 'mai', 'map-bms', 'mdf', 'mg', 'mh', 'mhr', 'mi', 'min', 'mk',
|
|
|
|
|
'ml', 'mn', 'mni', 'mnw', 'mo', 'mr', 'mrj', 'ms', 'mt', 'mus', 'mwl', 'my',
|
|
|
|
|
'myv', 'mzn', 'na', 'nah', 'nan', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new',
|
|
|
|
|
'ng', 'niu', 'nl', 'nl-informal', 'nn', 'no', 'nov', 'nqo', 'nrm', 'nso',
|
|
|
|
|
'nv', 'ny', 'nys', 'oc', 'olo', 'om', 'or', 'os', 'pa', 'pag', 'pam', 'pap',
|
|
|
|
|
'pcd', 'pdc', 'pdt', 'pfl', 'pi', 'pih', 'pl', 'pms', 'pnb', 'pnt', 'prg',
|
|
|
|
|
'ps', 'pt', 'pt-br', 'qu', 'qug', 'rgn', 'rif', 'rm', 'rmy', 'rn', 'ro',
|
|
|
|
|
'roa-rup', 'roa-tara', 'ru', 'rue', 'rup', 'ruq', 'ruq-cyrl', 'ruq-latn',
|
|
|
|
|
'rw', 'sa', 'sah', 'sat', 'sc', 'scn', 'sco', 'sd', 'sdc', 'sdh', 'se',
|
2021-10-05 21:55:15 +00:00
|
|
|
'sei', 'ses', 'sg', 'sgs', 'sh-cyrl', 'sh-latn', 'shi-tfng', 'shi-latn', 'shn',
|
|
|
|
|
'shy-latn', 'si', 'simple', 'sk', 'skr', 'skr-arab', 'sl', 'sli', 'sm', 'sma', 'sn',
|
2021-01-12 12:39:32 +00:00
|
|
|
'so', 'sq', 'sr-ec', 'sr-el', 'srn', 'ss', 'st', 'sty', 'stq', 'su', 'sv',
|
|
|
|
|
'sw', 'szl', 'szy', 'ta', 'tay', 'tcy', 'te', 'tet', 'tg-cyrl', 'tg-latn',
|
2020-07-27 12:21:43 +00:00
|
|
|
'th', 'ti', 'tk', 'tl', 'tly-latn', 'tn', 'to', 'tpi', 'tr', 'tru', 'ts', 'tt',
|
2021-01-12 12:39:32 +00:00
|
|
|
'tt-cyrl', 'tt-latn', 'tum', 'tw', 'ty', 'tyv', 'tzm', 'udm', 'ug', 'ug-arab',
|
|
|
|
|
'ug-latn', 'uk', 'ur', 'uz-cyrl', 'uz-latn', 've', 'vec', 'vep', 'vi', 'vls',
|
2014-07-26 14:55:14 +00:00
|
|
|
'vmf', 'vo', 'vot', 'vro', 'wa', 'war', 'wo', 'wuu-hans', 'wuu-hant', 'xal',
|
2013-08-10 10:13:21 +00:00
|
|
|
'xh', 'xmf', 'xsy', 'yi', 'yo', 'yue-hans', 'yue-hant', 'za', 'zea', 'zgh',
|
|
|
|
|
'zh-classical', 'zh-cn', 'zh-hans', 'zh-hant', 'zh-hk', 'zh-min-nan', 'zh-mo',
|
|
|
|
|
'zh-my', 'zh-sg', 'zh-tw', 'zu',
|
2021-01-12 12:39:32 +00:00
|
|
|
];
|
|
|
|
|
foreach ( $trivialWithNothingElseCodes as $code ) {
|
2022-11-08 06:30:52 +00:00
|
|
|
# $langCode, $mainVariantCode, $type, $variants, $variantFallbacks, $variantNames, $flags, $manualLevel
|
|
|
|
|
yield $code => [ $code, $code, 'TrivialLanguageConverter', [], [], [], [], [] ];
|
2021-01-12 12:39:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Languages with a type of than TrivialLanguageConverter or with variants/flags/manual level
|
|
|
|
|
yield 'ban' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'ban', 'ban', 'BanConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'ban', 'ban-bali', 'ban-x-dharma', 'ban-x-palmleaf', 'ban-x-pku' ],
|
|
|
|
|
[
|
|
|
|
|
'ban-bali' => 'ban',
|
|
|
|
|
'ban-x-dharma' => 'ban',
|
|
|
|
|
'ban-x-palmleaf' => 'ban',
|
|
|
|
|
'ban-x-pku' => 'ban',
|
|
|
|
|
], [], [], [
|
|
|
|
|
'ban' => 'bidirectional',
|
|
|
|
|
'ban-bali' => 'bidirectional',
|
|
|
|
|
'ban-x-dharma' => 'bidirectional',
|
|
|
|
|
'ban-x-palmleaf' => 'bidirectional',
|
|
|
|
|
'ban-x-pku' => 'bidirectional',
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'crh' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'crh', 'crh', 'CrhConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'crh', 'crh-cyrl', 'crh-latn' ],
|
|
|
|
|
[
|
|
|
|
|
'crh' => 'crh-latn',
|
|
|
|
|
'crh-cyrl' => 'crh-latn',
|
|
|
|
|
'crh-latn' => 'crh-cyrl',
|
|
|
|
|
], [], [], [
|
|
|
|
|
'crh' => 'bidirectional',
|
|
|
|
|
'crh-cyrl' => 'bidirectional',
|
|
|
|
|
'crh-latn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'gan' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'gan', 'gan', 'GanConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'gan', 'gan-hans', 'gan-hant' ],
|
|
|
|
|
[
|
|
|
|
|
'gan' => [ 'gan-hans', 'gan-hant' ],
|
|
|
|
|
'gan-hans' => [ 'gan' ],
|
|
|
|
|
'gan-hant' => [ 'gan' ],
|
|
|
|
|
], [], [], [
|
|
|
|
|
'gan' => 'disable',
|
|
|
|
|
'gan-hans' => 'bidirectional',
|
|
|
|
|
'gan-hant' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'iu' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'iu', 'iu', 'IuConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'iu', 'ike-cans', 'ike-latn' ],
|
|
|
|
|
[
|
|
|
|
|
'iu' => 'ike-cans',
|
|
|
|
|
'ike-cans' => 'iu',
|
|
|
|
|
'ike-latn' => 'iu',
|
|
|
|
|
], [], [], [
|
|
|
|
|
'iu' => 'bidirectional',
|
|
|
|
|
'ike-cans' => 'bidirectional',
|
|
|
|
|
'ike-latn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'kk' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'kk', 'kk', 'KkConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'kk', 'kk-cyrl', 'kk-latn', 'kk-arab', 'kk-kz', 'kk-tr', 'kk-cn' ],
|
|
|
|
|
[
|
|
|
|
|
'kk' => 'kk-cyrl',
|
|
|
|
|
'kk-cyrl' => 'kk',
|
|
|
|
|
'kk-latn' => 'kk',
|
|
|
|
|
'kk-arab' => 'kk',
|
|
|
|
|
'kk-kz' => 'kk-cyrl',
|
|
|
|
|
'kk-tr' => 'kk-latn',
|
|
|
|
|
'kk-cn' => 'kk-arab'
|
|
|
|
|
], [], [], [
|
|
|
|
|
'kk' => 'bidirectional',
|
|
|
|
|
'kk-cyrl' => 'bidirectional',
|
|
|
|
|
'kk-latn' => 'bidirectional',
|
|
|
|
|
'kk-arab' => 'bidirectional',
|
|
|
|
|
'kk-kz' => 'bidirectional',
|
|
|
|
|
'kk-tr' => 'bidirectional',
|
|
|
|
|
'kk-cn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'ku' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'ku', 'ku', 'KuConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'ku', 'ku-arab', 'ku-latn' ],
|
|
|
|
|
[
|
|
|
|
|
'ku' => 'ku-latn',
|
|
|
|
|
'ku-arab' => 'ku-latn',
|
|
|
|
|
'ku-latn' => 'ku-arab'
|
|
|
|
|
], [], [], [
|
|
|
|
|
'ku' => 'bidirectional',
|
|
|
|
|
'ku-arab' => 'bidirectional',
|
|
|
|
|
'ku-latn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2021-10-05 21:55:15 +00:00
|
|
|
yield 'sh' => [
|
|
|
|
|
'sh', 'sh-latn', 'ShConverter',
|
|
|
|
|
[ 'sh-latn', 'sh-cyrl' ],
|
|
|
|
|
[ 'sh-cyrl' => 'sh-latn' ],
|
|
|
|
|
[], [], [
|
|
|
|
|
'sh-latn' => 'bidirectional',
|
|
|
|
|
'sh-cyrl' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2021-01-12 12:39:32 +00:00
|
|
|
yield 'shi' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'shi', 'shi', 'ShiConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'shi', 'shi-tfng', 'shi-latn' ],
|
|
|
|
|
[
|
2022-11-08 06:30:52 +00:00
|
|
|
'shi' => [ 'shi-latn', 'shi-tfng' ],
|
|
|
|
|
'shi-tfng' => 'shi',
|
|
|
|
|
'shi-latn' => 'shi'
|
|
|
|
|
], [], [], [
|
2021-01-12 12:39:32 +00:00
|
|
|
'shi' => 'bidirectional',
|
|
|
|
|
'shi-tfng' => 'bidirectional',
|
|
|
|
|
'shi-latn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'sr' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'sr', 'sr', 'SrConverter',
|
|
|
|
|
[ 'sr', 'sr-ec', 'sr-el' ],
|
|
|
|
|
[
|
2021-01-12 12:39:32 +00:00
|
|
|
'sr' => 'sr-ec',
|
|
|
|
|
'sr-ec' => 'sr',
|
|
|
|
|
'sr-el' => 'sr'
|
|
|
|
|
], [], [
|
|
|
|
|
'S' => 'S',
|
|
|
|
|
'писмо' => 'S',
|
|
|
|
|
'pismo' => 'S',
|
|
|
|
|
'W' => 'W',
|
|
|
|
|
'реч' => 'W',
|
|
|
|
|
'reč' => 'W',
|
|
|
|
|
'ријеч' => 'W',
|
|
|
|
|
'riječ' => 'W'
|
|
|
|
|
], [
|
|
|
|
|
'sr' => 'bidirectional',
|
|
|
|
|
'sr-ec' => 'bidirectional',
|
|
|
|
|
'sr-el' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
yield 'tg' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'tg', 'tg', 'TgConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'tg', 'tg-latn' ],
|
|
|
|
|
[], [], [], [
|
|
|
|
|
'tg' => 'bidirectional',
|
|
|
|
|
'tg-latn' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2020-07-27 12:21:43 +00:00
|
|
|
yield 'tly' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'tly', 'tly', 'TlyConverter',
|
2020-07-27 12:21:43 +00:00
|
|
|
[ 'tly', 'tly-cyrl' ],
|
|
|
|
|
[ 'tly-cyrl' => 'tly' ],
|
|
|
|
|
[],
|
|
|
|
|
[
|
|
|
|
|
'tly' => 'tly',
|
|
|
|
|
'tly-cyrl' => 'tly-cyrl'
|
|
|
|
|
],
|
|
|
|
|
[
|
|
|
|
|
'tly' => 'bidirectional',
|
|
|
|
|
'tly-cyrl' => 'bidirectional',
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2021-01-12 12:39:32 +00:00
|
|
|
yield 'uz' => [
|
2022-11-08 06:30:52 +00:00
|
|
|
'uz', 'uz', 'UzConverter',
|
2021-01-12 12:39:32 +00:00
|
|
|
[ 'uz', 'uz-latn', 'uz-cyrl' ],
|
|
|
|
|
[
|
|
|
|
|
'uz' => 'uz-latn',
|
|
|
|
|
'uz-cyrl' => 'uz',
|
|
|
|
|
'uz-latn' => 'uz',
|
|
|
|
|
], [], [
|
|
|
|
|
'uz' => 'uz',
|
|
|
|
|
'uz-latn' => 'uz-latn',
|
|
|
|
|
'uz-cyrl' => 'uz-cyrl'
|
|
|
|
|
], [
|
|
|
|
|
'uz' => 'bidirectional',
|
|
|
|
|
'uz-latn' => 'bidirectional',
|
|
|
|
|
'uz-cyrl' => 'bidirectional',
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2014-07-26 14:55:14 +00:00
|
|
|
yield 'wuu' => [
|
|
|
|
|
'wuu', 'wuu', 'WuuConverter',
|
|
|
|
|
[ 'wuu', 'wuu-hans', 'wuu-hant' ],
|
|
|
|
|
[
|
|
|
|
|
'wuu' => [ 'wuu-hans', 'wuu-hant' ],
|
|
|
|
|
'wuu-hans' => [ 'wuu' ],
|
|
|
|
|
'wuu-hant' => [ 'wuu' ],
|
|
|
|
|
], [], [], [
|
|
|
|
|
'wuu' => 'disable',
|
|
|
|
|
'wuu-hans' => 'bidirectional',
|
|
|
|
|
'wuu-hant' => 'bidirectional'
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2013-08-10 10:13:21 +00:00
|
|
|
yield 'yue' => [
|
|
|
|
|
'yue', 'yue-hant', 'YueConverter',
|
|
|
|
|
[ 'yue-hant', 'yue-hans' ],
|
|
|
|
|
[
|
|
|
|
|
'yue-hant' => [ 'yue-hans' ],
|
|
|
|
|
'yue-hans' => [ 'yue-hant' ],
|
|
|
|
|
], [], [], [
|
|
|
|
|
'yue-hant' => 'disable',
|
|
|
|
|
'yue-hans' => 'bidirectional',
|
|
|
|
|
]
|
|
|
|
|
];
|
|
|
|
|
|
2020-01-23 18:39:23 +00:00
|
|
|
$zh_variants = [
|
|
|
|
|
'zh',
|
|
|
|
|
'zh-hans',
|
|
|
|
|
'zh-hant',
|
|
|
|
|
'zh-cn',
|
|
|
|
|
'zh-hk',
|
|
|
|
|
'zh-mo',
|
|
|
|
|
'zh-my',
|
|
|
|
|
'zh-sg',
|
|
|
|
|
'zh-tw'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$zh_variantfallbacks = [
|
|
|
|
|
'zh' => [ 'zh-hans', 'zh-hant', 'zh-cn', 'zh-tw', 'zh-hk', 'zh-sg', 'zh-mo', 'zh-my' ],
|
|
|
|
|
'zh-hans' => [ 'zh-cn', 'zh-sg', 'zh-my' ],
|
|
|
|
|
'zh-hant' => [ 'zh-tw', 'zh-hk', 'zh-mo' ],
|
|
|
|
|
'zh-cn' => [ 'zh-hans', 'zh-sg', 'zh-my' ],
|
|
|
|
|
'zh-sg' => [ 'zh-hans', 'zh-cn', 'zh-my' ],
|
|
|
|
|
'zh-my' => [ 'zh-hans', 'zh-sg', 'zh-cn' ],
|
|
|
|
|
'zh-tw' => [ 'zh-hant', 'zh-hk', 'zh-mo' ],
|
|
|
|
|
'zh-hk' => [ 'zh-hant', 'zh-mo', 'zh-tw' ],
|
|
|
|
|
'zh-mo' => [ 'zh-hant', 'zh-hk', 'zh-tw' ],
|
|
|
|
|
];
|
|
|
|
|
$zh_ml = [
|
|
|
|
|
'zh' => 'disable',
|
|
|
|
|
'zh-hans' => 'unidirectional',
|
|
|
|
|
'zh-hant' => 'unidirectional',
|
|
|
|
|
'zh-cn' => 'bidirectional',
|
|
|
|
|
'zh-hk' => 'bidirectional',
|
|
|
|
|
'zh-mo' => 'bidirectional',
|
|
|
|
|
'zh-my' => 'bidirectional',
|
|
|
|
|
'zh-sg' => 'bidirectional',
|
|
|
|
|
'zh-tw' => 'bidirectional',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$zh_flags = [
|
|
|
|
|
'A' => 'A',
|
|
|
|
|
'T' => 'T',
|
|
|
|
|
'R' => 'R',
|
|
|
|
|
'D' => 'D',
|
|
|
|
|
'-' => '-',
|
|
|
|
|
'H' => 'H',
|
|
|
|
|
'N' => 'N',
|
|
|
|
|
'zh' => 'zh',
|
|
|
|
|
'zh-hans' => 'zh-hans',
|
|
|
|
|
'zh-hant' => 'zh-hant',
|
|
|
|
|
'zh-cn' => 'zh-cn',
|
|
|
|
|
'zh-hk' => 'zh-hk',
|
|
|
|
|
'zh-mo' => 'zh-mo',
|
|
|
|
|
'zh-my' => 'zh-my',
|
|
|
|
|
'zh-sg' => 'zh-sg',
|
|
|
|
|
'zh-tw' => 'zh-tw'
|
|
|
|
|
];
|
2022-11-08 06:30:52 +00:00
|
|
|
yield 'zh' => [ 'zh', 'zh', 'ZhConverter', $zh_variants, $zh_variantfallbacks,[], $zh_flags, $zh_ml ];
|
2020-01-23 18:39:23 +00:00
|
|
|
}
|
|
|
|
|
}
|