MediaWiki master
LanguageConverterFactory.php
Go to the documentation of this file.
1<?php
7namespace MediaWiki\Language;
8
10use CrhConverter;
11use EnConverter;
12use GanConverter;
13use IuConverter;
14use KuConverter;
18use MniConverter;
19use ShConverter;
20use ShiConverter;
21use SrConverter;
22use TgConverter;
23use TlyConverter;
25use UzConverter;
26use Wikimedia\ObjectFactory\ObjectFactory;
27use WuuConverter;
28use ZghConverter;
29use ZhConverter;
30
38
40 private $cache = [];
45 private $converterList = [
46 'ban' => [
47 'class' => BanConverter::class,
48 ],
49 'crh' => [
50 'class' => CrhConverter::class,
51 ],
52 'gan' => [
53 'class' => GanConverter::class,
54 ],
55 'iu' => [
56 'class' => IuConverter::class,
57 ],
58 'ku' => [
59 'class' => KuConverter::class,
60 ],
61 'mni' => [
62 'class' => MniConverter::class,
63 ],
64 'sh' => [
65 'class' => ShConverter::class,
66 ],
67 'shi' => [
68 'class' => ShiConverter::class,
69 ],
70 'sr' => [
71 'class' => SrConverter::class,
72 ],
73 'tg' => [
74 'class' => TgConverter::class,
75 ],
76 'tly' => [
77 'class' => TlyConverter::class,
78 ],
79 'uz' => [
80 'class' => UzConverter::class,
81 ],
82 'wuu' => [
83 'class' => WuuConverter::class,
84 ],
85 'zgh' => [
86 'class' => ZghConverter::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
107 public const CONSTRUCTOR_OPTIONS = [
111 ];
112
113 private ServiceOptions $options;
114 private ObjectFactory $objectFactory;
115
119 private $defaultLanguage;
120
129 public function __construct(
130 ServiceOptions $options,
131 ObjectFactory $objectFactory,
132 callable $defaultLanguage
133 ) {
134 $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS );
135 $this->options = $options;
136 $this->objectFactory = $objectFactory;
137 if ( $options->get( MainConfigNames::UsePigLatinVariant ) ) {
138 $this->converterList['en'] = self::EN_CONVERTER;
139 }
140 $this->defaultLanguage = $defaultLanguage;
141 }
142
149 private function instantiateConverter( $lang ): ILanguageConverter {
150 $code = mb_strtolower( $lang->getCode() );
151 $spec = $this->converterList[$code] ?? self::DEFAULT_CONVERTER;
152 // ObjectFactory::createObject accepts an array, not just a callable (phan bug)
153 // @phan-suppress-next-line PhanTypeInvalidCallableArrayKey, PhanTypeInvalidCallableArraySize
154 return $this->objectFactory->createObject(
155 $spec,
156 [
157 'assertClass' => ILanguageConverter::class,
158 'extraArgs' => [ $lang ],
159 ]
160 );
161 }
162
172 public function getLanguageConverter( $language = null ): ILanguageConverter {
173 $lang = $language ?? ( $this->defaultLanguage )();
174 if ( isset( $this->cache[$lang->getCode()] ) ) {
175 return $this->cache[$lang->getCode()];
176 }
177 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable False positive
178 $converter = $this->instantiateConverter( $lang );
179 $this->cache[$lang->getCode()] = $converter;
180 return $converter;
181 }
182
188 public function isConversionDisabled() {
189 return $this->options->get( MainConfigNames::DisableLangConversion );
190 }
191
197 public function isLinkConversionDisabled() {
198 return $this->options->get( MainConfigNames::DisableLangConversion ) ||
199 // Note that this configuration option is misnamed.
200 $this->options->get( MainConfigNames::DisableTitleConversion );
201 }
202}
203
205class_alias( LanguageConverterFactory::class, 'MediaWiki\\Languages\\LanguageConverterFactory' );
Balinese specific code.
Crimean Tatar (Qırımtatarca) converter routines.
English specific converter routines.
Gan Chinese specific code.
Inuktitut specific code.
Kurdish converter routines.
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.
getLanguageConverter( $language=null)
Provide a LanguageConverter for given language.
__construct(ServiceOptions $options, ObjectFactory $objectFactory, callable $defaultLanguage)
isConversionDisabled()
Whether to disable language variant conversion.
isLinkConversionDisabled()
Whether to disable language variant conversion for links.
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.