MediaWiki REL1_39
LanguageConverterFactory.php
Go to the documentation of this file.
1<?php
21namespace MediaWiki\Languages;
22
23use BanConverter;
24use CrhConverter;
25use EnConverter;
26use GanConverter;
28use IuConverter;
29use KkConverter;
30use KuConverter;
31use Language;
32use ShiConverter;
33use SrConverter;
34use StubUserLang;
35use TgConverter;
36use TlyConverter;
38use UzConverter;
39use Wikimedia\ObjectFactory\ObjectFactory;
40use ZhConverter;
41
49
50 private $cache = [];
54 private $converterList = [
55 'ban' => [
56 'class' => BanConverter::class,
57 ],
58 'crh' => [
59 'class' => CrhConverter::class,
60 ],
61 'gan' => [
62 'class' => GanConverter::class,
63 ],
64 'iu' => [
65 'class' => IuConverter::class,
66 ],
67 'kk' => [
68 'class' => KkConverter::class,
69 ],
70 'ku' => [
71 'class' => KuConverter::class,
72 ],
73 'shi' => [
74 'class' => ShiConverter::class,
75 ],
76 'sr' => [
77 'class' => SrConverter::class,
78 ],
79 'tg' => [
80 'class' => TgConverter::class,
81 ],
82 'tly' => [
83 'class' => TlyConverter::class,
84 ],
85 'uz' => [
86 'class' => UzConverter::class,
87 ],
88 'zh' => [
89 'class' => ZhConverter::class,
90 ],
91 ];
92
93 private const DEFAULT_CONVERTER = [
94 'class' => TrivialLanguageConverter::class,
95 'services' => [
96 'TitleFormatter',
97 ]
98 ];
99
100 private const EN_CONVERTER = [
101 'class' => EnConverter::class,
102 ];
103
105 private $objectFactory;
106
110 private $isConversionDisabled;
111
115 private $isTitleConversionDisabled;
116
120 private $defaultLanguage;
121
132 public function __construct(
133 ObjectFactory $objectFactory,
134 $usePigLatinVariant, $isConversionDisabled, $isTitleConversionDisabled,
135 callable $defaultLanguage
136 ) {
137 $this->objectFactory = $objectFactory;
138 if ( $usePigLatinVariant ) {
139 $this->converterList['en'] = self::EN_CONVERTER;
140 }
141 $this->isConversionDisabled = $isConversionDisabled;
142 $this->isTitleConversionDisabled = $isTitleConversionDisabled;
143 $this->defaultLanguage = $defaultLanguage;
144 }
145
152 private function instantiateConverter( $lang ): ILanguageConverter {
153 $code = mb_strtolower( $lang->getCode() );
154 $spec = $this->converterList[$code] ?? self::DEFAULT_CONVERTER;
155 // ObjectFactory::createObject accepts an array, not just a callable (phan bug)
156 // @phan-suppress-next-line PhanTypeInvalidCallableArrayKey,PhanTypeInvalidCallableArraySize
157 return $this->objectFactory->createObject(
158 $spec,
159 [
160 'assertClass' => ILanguageConverter::class,
161 'extraArgs' => [ $lang ],
162 ]
163 );
164 }
165
175 public function getLanguageConverter( $language = null ): ILanguageConverter {
176 $lang = $language ?? ( $this->defaultLanguage )();
177 if ( isset( $this->cache[$lang->getCode()] ) ) {
178 return $this->cache[$lang->getCode()];
179 }
180 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable False positive
181 $converter = $this->instantiateConverter( $lang );
182 $this->cache[$lang->getCode()] = $converter;
183 return $converter;
184 }
185
190 public function isConversionDisabled() {
191 return $this->isConversionDisabled;
192 }
193
199 public function isTitleConversionDisabled() {
200 return $this->isTitleConversionDisabled;
201 }
202
207 public function isLinkConversionDisabled() {
208 return $this->isConversionDisabled || $this->isTitleConversionDisabled;
209 }
210}
Balinese specific code.
Crimean Tatar (Qırımtatarca) converter routines.
English specific converter routines.
Gan Chinese specific code.
Inuktitut specific code.
Kazakh (Қазақша) converter routines.
Kurdish converter routines.
Base class for language-specific code.
Definition Language.php:53
An interface for creating language converters.
isTitleConversionDisabled()
Whether to disable language variant conversion for titles.
__construct(ObjectFactory $objectFactory, $usePigLatinVariant, $isConversionDisabled, $isTitleConversionDisabled, callable $defaultLanguage)
isLinkConversionDisabled()
Whether to disable language variant conversion for links.
isConversionDisabled()
Whether to disable language variant conversion.
getLanguageConverter( $language=null)
Provide a LanguageConverter for given language.
Shilha specific code.
Serbian (Српски / Srpski) specific code.
Stub object for the user language.
Tajik (Тоҷикӣ) specific code, converting Tajiki to Latin orthography.
Talysh specific code.
A trivial language converter.
Uzbek specific code.
Chinese converter routine.
The shared interface for all language converters.
if(!isset( $args[0])) $lang