MediaWiki master
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 KuConverter;
30use Language;
32use ShConverter;
33use ShiConverter;
34use SrConverter;
35use TgConverter;
36use TlyConverter;
38use UzConverter;
39use Wikimedia\ObjectFactory\ObjectFactory;
40use WuuConverter;
41use ZhConverter;
42
50
51 private $cache = [];
55 private $converterList = [
56 'ban' => [
57 'class' => BanConverter::class,
58 ],
59 'crh' => [
60 'class' => CrhConverter::class,
61 ],
62 'gan' => [
63 'class' => GanConverter::class,
64 ],
65 'iu' => [
66 'class' => IuConverter::class,
67 ],
68 'ku' => [
69 'class' => KuConverter::class,
70 ],
71 'shi' => [
72 'class' => ShiConverter::class,
73 ],
74 'sh' => [
75 'class' => ShConverter::class,
76 ],
77 'sr' => [
78 'class' => SrConverter::class,
79 ],
80 'tg' => [
81 'class' => TgConverter::class,
82 ],
83 'tly' => [
84 'class' => TlyConverter::class,
85 ],
86 'uz' => [
87 'class' => UzConverter::class,
88 ],
89 'wuu' => [
90 'class' => WuuConverter::class,
91 ],
92 'zh' => [
93 'class' => ZhConverter::class,
94 ],
95 ];
96
97 private const DEFAULT_CONVERTER = [
98 'class' => TrivialLanguageConverter::class,
99 'services' => [
100 'TitleFormatter',
101 ]
102 ];
103
104 private const EN_CONVERTER = [
105 'class' => EnConverter::class,
106 ];
107
109 private $objectFactory;
110
114 private $isConversionDisabled;
115
119 private $isTitleConversionDisabled;
120
124 private $defaultLanguage;
125
136 public function __construct(
137 ObjectFactory $objectFactory,
138 $usePigLatinVariant, $isConversionDisabled, $isTitleConversionDisabled,
139 callable $defaultLanguage
140 ) {
141 $this->objectFactory = $objectFactory;
142 if ( $usePigLatinVariant ) {
143 $this->converterList['en'] = self::EN_CONVERTER;
144 }
145 $this->isConversionDisabled = $isConversionDisabled;
146 $this->isTitleConversionDisabled = $isTitleConversionDisabled;
147 $this->defaultLanguage = $defaultLanguage;
148 }
149
156 private function instantiateConverter( $lang ): ILanguageConverter {
157 $code = mb_strtolower( $lang->getCode() );
158 $spec = $this->converterList[$code] ?? self::DEFAULT_CONVERTER;
159 // ObjectFactory::createObject accepts an array, not just a callable (phan bug)
160 // @phan-suppress-next-line PhanTypeInvalidCallableArrayKey, PhanTypeInvalidCallableArraySize
161 return $this->objectFactory->createObject(
162 $spec,
163 [
164 'assertClass' => ILanguageConverter::class,
165 'extraArgs' => [ $lang ],
166 ]
167 );
168 }
169
179 public function getLanguageConverter( $language = null ): ILanguageConverter {
180 $lang = $language ?? ( $this->defaultLanguage )();
181 if ( isset( $this->cache[$lang->getCode()] ) ) {
182 return $this->cache[$lang->getCode()];
183 }
184 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable False positive
185 $converter = $this->instantiateConverter( $lang );
186 $this->cache[$lang->getCode()] = $converter;
187 return $converter;
188 }
189
195 public function isConversionDisabled() {
196 return $this->isConversionDisabled;
197 }
198
205 public function isTitleConversionDisabled() {
206 wfDeprecated( __METHOD__, '1.36' );
207 return $this->isTitleConversionDisabled;
208 }
209
215 public function isLinkConversionDisabled() {
216 return $this->isConversionDisabled || $this->isTitleConversionDisabled;
217 }
218}
wfDeprecated( $function, $version=false, $component=false, $callerOffset=2)
Logs a warning that a deprecated feature was used.
Balinese specific code.
Crimean Tatar (Qırımtatarca) converter routines.
English specific converter routines.
Gan Chinese specific code.
Inuktitut specific code.
Kurdish converter routines.
Base class for language-specific code.
Definition Language.php:63
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.
Stub object for the user language.
Converts Serbo-Croatian from Latin script to Cyrillic script.
Shilha specific code.
Serbian (Српски / Srpski) specific code.
Tajik (Тоҷикӣ) specific code, converting Tajiki to Latin orthography.
Talysh specific code.
A trivial language converter.
Uzbek specific code.
Wu language specific code.
Chinese converter routine.
The shared interface for all language converters.