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 MniConverter;
35use ShConverter;
36use ShiConverter;
37use SrConverter;
38use TgConverter;
39use TlyConverter;
41use UzConverter;
42use Wikimedia\ObjectFactory\ObjectFactory;
43use WuuConverter;
44use ZghConverter;
45use ZhConverter;
46
54
55 private $cache = [];
59 private $converterList = [
60 'ban' => [
61 'class' => BanConverter::class,
62 ],
63 'crh' => [
64 'class' => CrhConverter::class,
65 ],
66 'gan' => [
67 'class' => GanConverter::class,
68 ],
69 'iu' => [
70 'class' => IuConverter::class,
71 ],
72 'ku' => [
73 'class' => KuConverter::class,
74 ],
75 'mni' => [
76 'class' => MniConverter::class,
77 ],
78 'shi' => [
79 'class' => ShiConverter::class,
80 ],
81 'sh' => [
82 'class' => ShConverter::class,
83 ],
84 'sr' => [
85 'class' => SrConverter::class,
86 ],
87 'tg' => [
88 'class' => TgConverter::class,
89 ],
90 'tly' => [
91 'class' => TlyConverter::class,
92 ],
93 'uz' => [
94 'class' => UzConverter::class,
95 ],
96 'wuu' => [
97 'class' => WuuConverter::class,
98 ],
99 'zgh' => [
100 'class' => ZghConverter::class,
101 ],
102 'zh' => [
103 'class' => ZhConverter::class,
104 ],
105 ];
106
107 private const DEFAULT_CONVERTER = [
108 'class' => TrivialLanguageConverter::class,
109 'services' => [
110 'TitleFormatter',
111 ]
112 ];
113
114 private const EN_CONVERTER = [
115 'class' => EnConverter::class,
116 ];
117
121 public const CONSTRUCTOR_OPTIONS = [
125 ];
126
127 private ServiceOptions $options;
128 private ObjectFactory $objectFactory;
129
133 private $defaultLanguage;
134
143 public function __construct(
144 ServiceOptions $options,
145 ObjectFactory $objectFactory,
146 callable $defaultLanguage
147 ) {
148 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
149 $this->options = $options;
150 $this->objectFactory = $objectFactory;
151 if ( $options->get( MainConfigNames::UsePigLatinVariant ) ) {
152 $this->converterList['en'] = self::EN_CONVERTER;
153 }
154 $this->defaultLanguage = $defaultLanguage;
155 }
156
163 private function instantiateConverter( $lang ): ILanguageConverter {
164 $code = mb_strtolower( $lang->getCode() );
165 $spec = $this->converterList[$code] ?? self::DEFAULT_CONVERTER;
166 // ObjectFactory::createObject accepts an array, not just a callable (phan bug)
167 // @phan-suppress-next-line PhanTypeInvalidCallableArrayKey, PhanTypeInvalidCallableArraySize
168 return $this->objectFactory->createObject(
169 $spec,
170 [
171 'assertClass' => ILanguageConverter::class,
172 'extraArgs' => [ $lang ],
173 ]
174 );
175 }
176
186 public function getLanguageConverter( $language = null ): ILanguageConverter {
187 $lang = $language ?? ( $this->defaultLanguage )();
188 if ( isset( $this->cache[$lang->getCode()] ) ) {
189 return $this->cache[$lang->getCode()];
190 }
191 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable False positive
192 $converter = $this->instantiateConverter( $lang );
193 $this->cache[$lang->getCode()] = $converter;
194 return $converter;
195 }
196
202 public function isConversionDisabled() {
203 return $this->options->get( MainConfigNames::DisableLangConversion );
204 }
205
211 public function isLinkConversionDisabled() {
212 return $this->options->get( MainConfigNames::DisableLangConversion ) ||
213 // Note that this configuration option is misnamed.
214 $this->options->get( MainConfigNames::DisableTitleConversion );
215 }
216}
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:66
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.
Meitei specific converter routines.
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.