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;
34use ShConverter;
35use ShiConverter;
36use SrConverter;
37use TgConverter;
38use TlyConverter;
40use UzConverter;
41use Wikimedia\ObjectFactory\ObjectFactory;
42use WuuConverter;
43use ZghConverter;
44use ZhConverter;
45
53
54 private $cache = [];
58 private $converterList = [
59 'ban' => [
60 'class' => BanConverter::class,
61 ],
62 'crh' => [
63 'class' => CrhConverter::class,
64 ],
65 'gan' => [
66 'class' => GanConverter::class,
67 ],
68 'iu' => [
69 'class' => IuConverter::class,
70 ],
71 'ku' => [
72 'class' => KuConverter::class,
73 ],
74 'shi' => [
75 'class' => ShiConverter::class,
76 ],
77 'sh' => [
78 'class' => ShConverter::class,
79 ],
80 'sr' => [
81 'class' => SrConverter::class,
82 ],
83 'tg' => [
84 'class' => TgConverter::class,
85 ],
86 'tly' => [
87 'class' => TlyConverter::class,
88 ],
89 'uz' => [
90 'class' => UzConverter::class,
91 ],
92 'wuu' => [
93 'class' => WuuConverter::class,
94 ],
95 'zgh' => [
96 'class' => ZghConverter::class,
97 ],
98 'zh' => [
99 'class' => ZhConverter::class,
100 ],
101 ];
102
103 private const DEFAULT_CONVERTER = [
104 'class' => TrivialLanguageConverter::class,
105 'services' => [
106 'TitleFormatter',
107 ]
108 ];
109
110 private const EN_CONVERTER = [
111 'class' => EnConverter::class,
112 ];
113
117 public const CONSTRUCTOR_OPTIONS = [
121 ];
122
123 private ServiceOptions $options;
124 private ObjectFactory $objectFactory;
125
129 private $defaultLanguage;
130
139 public function __construct(
140 ServiceOptions $options,
141 ObjectFactory $objectFactory,
142 callable $defaultLanguage
143 ) {
144 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
145 $this->options = $options;
146 $this->objectFactory = $objectFactory;
147 if ( $options->get( MainConfigNames::UsePigLatinVariant ) ) {
148 $this->converterList['en'] = self::EN_CONVERTER;
149 }
150 $this->defaultLanguage = $defaultLanguage;
151 }
152
159 private function instantiateConverter( $lang ): ILanguageConverter {
160 $code = mb_strtolower( $lang->getCode() );
161 $spec = $this->converterList[$code] ?? self::DEFAULT_CONVERTER;
162 // ObjectFactory::createObject accepts an array, not just a callable (phan bug)
163 // @phan-suppress-next-line PhanTypeInvalidCallableArrayKey, PhanTypeInvalidCallableArraySize
164 return $this->objectFactory->createObject(
165 $spec,
166 [
167 'assertClass' => ILanguageConverter::class,
168 'extraArgs' => [ $lang ],
169 ]
170 );
171 }
172
182 public function getLanguageConverter( $language = null ): ILanguageConverter {
183 $lang = $language ?? ( $this->defaultLanguage )();
184 if ( isset( $this->cache[$lang->getCode()] ) ) {
185 return $this->cache[$lang->getCode()];
186 }
187 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable False positive
188 $converter = $this->instantiateConverter( $lang );
189 $this->cache[$lang->getCode()] = $converter;
190 return $converter;
191 }
192
198 public function isConversionDisabled() {
199 return $this->options->get( MainConfigNames::DisableLangConversion );
200 }
201
207 public function isLinkConversionDisabled() {
208 return $this->options->get( MainConfigNames::DisableLangConversion ) ||
209 // Note that this configuration option is misnamed.
210 $this->options->get( MainConfigNames::DisableTitleConversion );
211 }
212}
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
A class for passing options to services.
assertRequiredOptions(array $expectedKeys)
Assert that the list of options provided in this instance exactly match $expectedKeys,...
An interface for creating language converters.
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.
__construct(ServiceOptions $options, ObjectFactory $objectFactory, callable $defaultLanguage)
A class containing constants representing the names of configuration variables.
const UsePigLatinVariant
Name constant for the UsePigLatinVariant setting, for use with Config::get()
const DisableLangConversion
Name constant for the DisableLangConversion setting, for use with Config::get()
const DisableTitleConversion
Name constant for the DisableTitleConversion setting, for use with Config::get()
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.
Standard Moroccan Amazigh specific code.
Chinese converter routine.
The shared interface for all language converters.