3 use MediaWiki\Config\HashConfig
;
4 use MediaWiki\Config\ServiceOptions
;
5 use MediaWiki\Language\ILanguageConverter
;
6 use MediaWiki\Languages\LanguageConverterFactory
;
7 use MediaWiki\MainConfigNames
;
9 trait LanguageConverterTestTrait
{
12 private $codeRegex = '/^(.+)ConverterTest$/';
14 /** @var LanguageConverterFactory */
17 protected function getCode(): string {
18 if ( preg_match( $this->codeRegex
, get_class( $this ), $m ) ) {
19 # Normalize language code since classes uses underscores
20 return mb_strtolower( str_replace( '_', '-', $m[1] ) );
25 protected function getConverterFactory() {
26 if ( $this->factory
) {
27 return $this->factory
;
30 $code = $this->getCode();
31 $this->factory
= new LanguageConverterFactory(
32 new ServiceOptions( LanguageConverterFactory
::CONSTRUCTOR_OPTIONS
, new HashConfig( [
33 MainConfigNames
::UsePigLatinVariant
=> false,
34 MainConfigNames
::DisableLangConversion
=> false,
35 MainConfigNames
::DisableTitleConversion
=> false,
37 $this->getServiceContainer()->getObjectFactory(),
38 function () use ( $code ) {
39 $services = $this->getServiceContainer();
41 return $services->getLanguageFactory()->getLanguage( $code );
43 return $services->getContentLanguage();
48 return $this->factory
;
52 * @param string|null $language Language code or null to use language
53 * returned by ::getCode(), or the content language if not set either.
54 * @return ILanguageConverter
56 protected function getLanguageConverter( $language = null ): ILanguageConverter
{
58 $language = $this->getServiceContainer()->getLanguageFactory()
59 ->getLanguage( $language );
62 return $this->getConverterFactory()->getLanguageConverter( $language );