return $this->getService( 'MagicWordFactory' );
}
+ /**
+ * @since 1.32
+ * @return \Language
+ */
+ public function getContentLanguage() {
+ return $this->getService( 'ContentLanguage' );
+ }
+
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service getter here, don't forget to add a test
// case for it in MediaWikiServicesTest::provideGetters() and in
return new MagicWordFactory( $wgContLang );
},
+ 'ContentLanguage' => function ( MediaWikiServices $services ) {
+ return Language::factory( $services->getMainConfig()->get( 'LanguageCode' ) );
+ },
+
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service here, don't forget to add a getter function
// in the MediaWikiServices class. The convenience getter should just call
/**
* @var Language $wgContLang
+ * @deprecated since 1.32, use the ContentLanguage service directly
*/
-$wgContLang = Language::factory( $wgLanguageCode );
-$wgContLang->initContLang();
+$wgContLang = MediaWikiServices::getInstance()->getContentLanguage();
// Now that variant lists may be available...
$wgRequest->interpolateTitle();
// any live Language object, both on setup and teardown
$reset = function () {
MWNamespace::clearCaches();
- $GLOBALS['wgContLang']->resetNamespaces();
+ MediaWikiServices::getInstance()->getContentLanguage()->resetNamespaces();
};
$setup[] = $reset;
$teardown[] = $reset;
$lang = Language::factory( $langCode );
$lang->resetNamespaces();
$setup['wgContLang'] = $lang;
+ $setup[] = function () use ( $lang ) {
+ MediaWikiServices::getInstance()->disableService( 'ContentLanguage' );
+ MediaWikiServices::getInstance()->redefineService(
+ 'ContentLanguage',
+ function () use ( $lang ) {
+ return $lang;
+ }
+ );
+ };
+ $teardown[] = function () {
+ MediaWikiServices::getInstance()->resetServiceForTesting( 'ContentLanguage' );
+ };
$reset = function () {
MediaWikiServices::getInstance()->resetServiceForTesting( 'MagicWordFactory' );
$this->resetTitleServices();
* @param array $articles Article info array from TestFileReader
*/
public function addArticles( $articles ) {
- global $wgContLang;
$setup = [];
$teardown = [];
// Be sure ParserTestRunner::addArticle has correct language set,
// so that system messages get into the right language cache
- if ( $wgContLang->getCode() !== 'en' ) {
+ if ( MediaWikiServices::getInstance()->getContentLanguage()->getCode() !== 'en' ) {
$setup['wgLanguageCode'] = 'en';
- $setup['wgContLang'] = Language::factory( 'en' );
+ $lang = Language::factory( 'en' );
+ $setup['wgContLang'] = $lang;
+ $setup[] = function () use ( $lang ) {
+ $services = MediaWikiServices::getInstance();
+ $services->disableService( 'ContentLanguage' );
+ $services->redefineService( 'ContentLanguage', function () use ( $lang ) {
+ return $lang;
+ } );
+ };
+ $teardown[] = function () {
+ MediaWikiServices::getInstance()->resetServiceForTesting( 'ContentLanguage' );
+ };
}
// Add special namespaces, in case that hasn't been done by staticSetup() yet
return $object;
}
);
+
+ if ( $name === 'ContentLanguage' ) {
+ $this->doSetMwGlobals( [ 'wgContLang' => $object ] );
+ }
}
/**
$pairs = [ $pairs => $value ];
}
+ if ( isset( $pairs['wgContLang'] ) ) {
+ throw new MWException(
+ 'No setting $wgContLang, use setContentLang() or setService( \'ContentLanguage\' )'
+ );
+ }
+
+ $this->doSetMwGlobals( $pairs, $value );
+ }
+
+ /**
+ * An internal method that allows setService() to set globals that tests are not supposed to
+ * touch.
+ */
+ private function doSetMwGlobals( $pairs, $value = null ) {
$this->stashMwGlobals( array_keys( $pairs ) );
foreach ( $pairs as $key => $value ) {
$langCode = $lang;
$langObj = Language::factory( $langCode );
}
- $this->setMwGlobals( [
- 'wgLanguageCode' => $langCode,
- 'wgContLang' => $langObj,
- ] );
+ $this->setMwGlobals( 'wgLanguageCode', $langCode );
+ $this->setService( 'ContentLanguage', $langObj );
}
/**
'ActorMigration' => [ 'ActorMigration', ActorMigration::class ],
'ConfigRepository' => [ 'ConfigRepository', \MediaWiki\Config\ConfigRepository::class ],
'MagicWordFactory' => [ 'MagicWordFactory', MagicWordFactory::class ],
+ 'ContentLanguage' => [ 'ContentLanguage', Language::class ],
];
}