diff options
Diffstat (limited to 'includes')
28 files changed, 157 insertions, 60 deletions
diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index 561a99e4b165..629e44ef5fb2 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -1220,10 +1220,11 @@ function wfGetLangObj( $langcode = false ) { } global $wgLanguageCode; + $services = MediaWikiServices::getInstance(); if ( $langcode === true || $langcode === $wgLanguageCode ) { # $langcode is the language code of the wikis content language object. # or it is a boolean and value is true - return MediaWikiServices::getInstance()->getContentLanguage(); + return $services->getContentLanguage(); } global $wgLang; @@ -1233,15 +1234,15 @@ function wfGetLangObj( $langcode = false ) { return $wgLang; } - $validCodes = array_keys( Language::fetchLanguageNames() ); + $validCodes = array_keys( $services->getLanguageNameUtils()->getLanguageNames() ); if ( in_array( $langcode, $validCodes ) ) { # $langcode corresponds to a valid language. - return MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( $langcode ); + return $services->getLanguageFactory()->getLanguage( $langcode ); } # $langcode is a string, but not a valid language code; use content language. wfDebug( "Invalid language code passed to wfGetLangObj, falling back to content language.\n" ); - return MediaWikiServices::getInstance()->getContentLanguage(); + return $services->getContentLanguage(); } /** diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index 86a763c08df4..e140f41fee7f 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -534,7 +534,9 @@ return [ $logger, [ 'useDB' => $mainConfig->get( 'UseDatabaseMessages' ) ], $services->getLanguageFactory(), - $services->getLocalisationCache() + $services->getLocalisationCache(), + $services->getLanguageNameUtils(), + $services->getLanguageFallback() ); }, @@ -740,7 +742,8 @@ return [ $services->getLinkRendererFactory()->create(), $services->getNamespaceInfo(), $services->getPermissionManager(), - $services->getLanguageConverterFactory()->getLanguageConverter() + $services->getLanguageConverterFactory()->getLanguageConverter(), + $services->getLanguageNameUtils() ); $factory->setLogger( LoggerFactory::getInstance( 'preferences' ) ); diff --git a/includes/Xml.php b/includes/Xml.php index e678800054ce..9f37c58bb798 100644 --- a/includes/Xml.php +++ b/includes/Xml.php @@ -207,7 +207,9 @@ class Xml { global $wgLanguageCode; $include = $customisedOnly ? 'mwfile' : 'mw'; - $languages = Language::fetchLanguageNames( $inLanguage, $include ); + $languages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( $inLanguage, $include ); // Make sure the site language is in the list; // a custom language code might not have a defined name... diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php index 7e97d7faf15c..acb38c2dd159 100644 --- a/includes/actions/InfoAction.php +++ b/includes/actions/InfoAction.php @@ -281,7 +281,7 @@ class InfoAction extends FormlessAction { $pageLang = $title->getPageLanguage()->getCode(); $pageLangHtml = $pageLang . ' - ' . - Language::fetchLanguageName( $pageLang, $lang->getCode() ); + $services->getLanguageNameUtils()->getLanguageName( $pageLang, $lang->getCode() ); // Link to Special:PageLanguage with pre-filled page title if user has permissions $permissionManager = $services->getPermissionManager(); if ( $config->get( 'PageLanguageUseDB' ) diff --git a/includes/api/ApiParse.php b/includes/api/ApiParse.php index 5e1d70ddf848..fb4aa63d26e1 100644 --- a/includes/api/ApiParse.php +++ b/includes/api/ApiParse.php @@ -658,6 +658,7 @@ class ApiParse extends ApiBase { } private function formatLangLinks( $links ) { + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); $result = []; foreach ( $links as $link ) { $entry = []; @@ -668,13 +669,13 @@ class ApiParse extends ApiBase { if ( $title ) { $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ); // localised language name in 'uselang' language - $entry['langname'] = Language::fetchLanguageName( + $entry['langname'] = $languageNameUtils->getLanguageName( $title->getInterwiki(), $this->getLanguage()->getCode() ); // native language name - $entry['autonym'] = Language::fetchLanguageName( $title->getInterwiki() ); + $entry['autonym'] = $languageNameUtils->getLanguageName( $title->getInterwiki() ); } ApiResult::setContentValue( $entry, 'title', $bits[1] ); $result[] = $entry; diff --git a/includes/api/ApiQueryAllMessages.php b/includes/api/ApiQueryAllMessages.php index 7437bb7167ab..39110810c3fe 100644 --- a/includes/api/ApiQueryAllMessages.php +++ b/includes/api/ApiQueryAllMessages.php @@ -35,16 +35,15 @@ class ApiQueryAllMessages extends ApiQueryBase { public function execute() { $params = $this->extractRequestParams(); - + $services = MediaWikiServices::getInstance(); if ( $params['lang'] === null ) { $langObj = $this->getLanguage(); - } elseif ( !Language::isValidCode( $params['lang'] ) ) { + } elseif ( !$services->getLanguageNameUtils()->isValidCode( $params['lang'] ) ) { $this->dieWithError( [ 'apierror-invalidlang', $this->encodeParamName( 'lang' ) ], 'invalidlang' ); } else { - $langObj = MediaWikiServices::getInstance()->getLanguageFactory() - ->getLanguage( $params['lang'] ); + $langObj = $services->getLanguageFactory()->getLanguage( $params['lang'] ); } if ( $params['enableparser'] ) { @@ -62,7 +61,8 @@ class ApiQueryAllMessages extends ApiQueryBase { // Determine which messages should we print if ( in_array( '*', $params['messages'] ) ) { - $message_names = Language::getMessageKeysFor( $langObj->getCode() ); + $message_names = $services->getLocalisationCache() + ->getSubitemList( $langObj->getCode(), 'messages' ); if ( $params['includelocal'] ) { $message_names = array_unique( array_merge( $message_names, diff --git a/includes/api/ApiQueryLangLinks.php b/includes/api/ApiQueryLangLinks.php index 13246e625a1f..c0067632f183 100644 --- a/includes/api/ApiQueryLangLinks.php +++ b/includes/api/ApiQueryLangLinks.php @@ -122,11 +122,13 @@ class ApiQueryLangLinks extends ApiQueryBase { $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT ); } } + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); if ( isset( $prop['langname'] ) ) { - $entry['langname'] = Language::fetchLanguageName( $row->ll_lang, $params['inlanguagecode'] ); + $entry['langname'] = $languageNameUtils + ->getLanguageName( $row->ll_lang, $params['inlanguagecode'] ); } if ( isset( $prop['autonym'] ) ) { - $entry['autonym'] = Language::fetchLanguageName( $row->ll_lang ); + $entry['autonym'] = $languageNameUtils->getLanguageName( $row->ll_lang ); } ApiResult::setContentValue( $entry, 'title', $row->ll_title ); $fit = $this->addPageSubItem( $row->ll_from, $entry ); diff --git a/includes/api/ApiQueryLanguageinfo.php b/includes/api/ApiQueryLanguageinfo.php index 5f85041620ec..a987c0eeac19 100644 --- a/includes/api/ApiQueryLanguageinfo.php +++ b/includes/api/ApiQueryLanguageinfo.php @@ -18,6 +18,8 @@ * @file */ +use MediaWiki\Languages\LanguageFallback; +use MediaWiki\Languages\LanguageNameUtils; use MediaWiki\MediaWikiServices; /** @@ -81,8 +83,8 @@ class ApiQueryLanguageinfo extends ApiQueryBase { $targetLanguageCode = $this->getLanguage()->getCode(); $include = 'all'; - - $availableLanguageCodes = array_keys( Language::fetchLanguageNames( + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); + $availableLanguageCodes = array_keys( $languageNameUtils->getLanguageNames( // MediaWiki and extensions may return different sets of language codes // when asked for language names in different languages; // asking for English language names is most likely to give us the full set, @@ -156,16 +158,16 @@ class ApiQueryLanguageinfo extends ApiQueryBase { } if ( $includeAutonym ) { - $autonym = Language::fetchLanguageName( + $autonym = $languageNameUtils->getLanguageName( $languageCode, - Language::AS_AUTONYMS, + LanguageNameUtils::AUTONYMS, $include ); $info['autonym'] = $autonym; } if ( $includeName ) { - $name = Language::fetchLanguageName( + $name = $languageNameUtils->getLanguageName( $languageCode, $targetLanguageCode, $include @@ -174,10 +176,10 @@ class ApiQueryLanguageinfo extends ApiQueryBase { } if ( $includeFallbacks ) { - $fallbacks = Language::getFallbacksFor( + $fallbacks = MediaWikiServices::getInstance()->getLanguageFallback()->getAll( $languageCode, // allow users to distinguish between implicit and explicit 'en' fallbacks - Language::STRICT_FALLBACKS + LanguageFallback::STRICT ); ApiResult::setIndexedTagName( $fallbacks, 'fb' ); $info['fallbacks'] = $fallbacks; diff --git a/includes/api/ApiQuerySiteinfo.php b/includes/api/ApiQuerySiteinfo.php index 264f86e5a3e5..5afd1fff66ca 100644 --- a/includes/api/ApiQuerySiteinfo.php +++ b/includes/api/ApiQuerySiteinfo.php @@ -399,7 +399,9 @@ class ApiQuerySiteinfo extends ApiQueryBase { $params = $this->extractRequestParams(); $langCode = $params['inlanguagecode'] ?? ''; - $langNames = Language::fetchLanguageNames( $langCode ); + $langNames = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( $langCode ); $getPrefixes = MediaWikiServices::getInstance()->getInterwikiLookup()->getAllPrefixes( $local ); $extraLangPrefixes = $this->getConfig()->get( 'ExtraInterlanguageLinkPrefixes' ); @@ -711,7 +713,9 @@ class ApiQuerySiteinfo extends ApiQueryBase { public function appendLanguages( $property ) { $params = $this->extractRequestParams(); $langCode = $params['inlanguagecode'] ?? ''; - $langNames = Language::fetchLanguageNames( $langCode ); + $langNames = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( $langCode ); $data = []; @@ -777,10 +781,11 @@ class ApiQuerySiteinfo extends ApiQueryBase { $data = []; $allowed = Skin::getAllowedSkins(); $default = Skin::normalizeKey( 'default' ); + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); foreach ( Skin::getSkinNames() as $name => $displayName ) { $msg = $this->msg( "skinname-{$name}" ); $code = $this->getParameter( 'inlanguagecode' ); - if ( $code && Language::isValidCode( $code ) ) { + if ( $code && $languageNameUtils->isValidCode( $code ) ) { $msg->inLanguage( $code ); } else { $msg->inContentLanguage(); diff --git a/includes/api/ApiSetPageLanguage.php b/includes/api/ApiSetPageLanguage.php index 84ab3ea98104..68531b7f2c32 100644 --- a/includes/api/ApiSetPageLanguage.php +++ b/includes/api/ApiSetPageLanguage.php @@ -20,6 +20,8 @@ * @file */ +use MediaWiki\MediaWikiServices; + /** * API module that facilitates changing the language of a page. * The API equivalent of SpecialPageLanguage. @@ -114,7 +116,9 @@ class ApiSetPageLanguage extends ApiBase { 'lang' => [ ApiBase::PARAM_TYPE => array_merge( [ 'default' ], - array_keys( Language::fetchLanguageNames( null, 'mwfile' ) ) + array_keys( MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( null, 'mwfile' ) ) ), ApiBase::PARAM_REQUIRED => true, ], diff --git a/includes/cache/MessageCache.php b/includes/cache/MessageCache.php index 09d64f3d32f6..613a505235a0 100644 --- a/includes/cache/MessageCache.php +++ b/includes/cache/MessageCache.php @@ -21,6 +21,8 @@ * @ingroup Cache */ use MediaWiki\Languages\LanguageFactory; +use MediaWiki\Languages\LanguageFallback; +use MediaWiki\Languages\LanguageNameUtils; use MediaWiki\Linker\LinkTarget; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; @@ -110,6 +112,10 @@ class MessageCache implements LoggerAwareInterface { protected $langFactory; /** @var LocalisationCache */ protected $localisationCache; + /** @var LanguageNameUtils */ + protected $languageNameUtils; + /** @var LanguageFallback */ + protected $languageFallback; /** * Get the singleton instance of this class @@ -152,6 +158,8 @@ class MessageCache implements LoggerAwareInterface { * Default: true. * @param LanguageFactory $langFactory * @param LocalisationCache $localisationCache + * @param LanguageNameUtils $languageNameUtils + * @param LanguageFallback $languageFallback */ public function __construct( WANObjectCache $wanCache, @@ -162,7 +170,9 @@ class MessageCache implements LoggerAwareInterface { LoggerInterface $logger, array $options, LanguageFactory $langFactory, - LocalisationCache $localisationCache + LocalisationCache $localisationCache, + LanguageNameUtils $languageNameUtils, + LanguageFallback $languageFallback ) { $this->wanCache = $wanCache; $this->clusterCache = $clusterCache; @@ -172,6 +182,8 @@ class MessageCache implements LoggerAwareInterface { $this->logger = $logger; $this->langFactory = $langFactory; $this->localisationCache = $localisationCache; + $this->languageNameUtils = $languageNameUtils; + $this->languageFallback = $languageFallback; $this->cache = new MapCacheLRU( 5 ); // limit size for sanity @@ -1014,7 +1026,7 @@ class MessageCache implements LoggerAwareInterface { // Try checking the database for all of the fallback languages if ( $useDB ) { - $fallbackChain = Language::getFallbacksFor( $langcode ); + $fallbackChain = $this->languageFallback->getAll( $langcode ); foreach ( $fallbackChain as $code ) { if ( isset( $alreadyTried[$code] ) ) { @@ -1319,7 +1331,7 @@ class MessageCache implements LoggerAwareInterface { * Mainly used after a mass rebuild */ public function clear() { - $langs = Language::fetchLanguageNames( null, 'mw' ); + $langs = $this->languageNameUtils->getLanguageNames( null, 'mw' ); foreach ( array_keys( $langs ) as $code ) { $this->wanCache->touchCheckKey( $this->getCheckKey( $code ) ); } @@ -1339,7 +1351,7 @@ class MessageCache implements LoggerAwareInterface { } $lang = array_pop( $pieces ); - if ( !Language::fetchLanguageName( $lang, null, 'mw' ) ) { + if ( !$this->languageNameUtils->getLanguageName( $lang, null, 'mw' ) ) { return [ $key, $wgLanguageCode ]; } diff --git a/includes/content/WikitextContentHandler.php b/includes/content/WikitextContentHandler.php index 191c718ca81a..d8183605c5bc 100644 --- a/includes/content/WikitextContentHandler.php +++ b/includes/content/WikitextContentHandler.php @@ -23,6 +23,7 @@ * @ingroup Content */ +use MediaWiki\Languages\LanguageNameUtils; use MediaWiki\MediaWikiServices; /** @@ -53,16 +54,22 @@ class WikitextContentHandler extends TextContentHandler { public function makeRedirectContent( Title $destination, $text = '' ) { $optionalColon = ''; + $services = MediaWikiServices::getInstance(); if ( $destination->getNamespace() == NS_CATEGORY ) { $optionalColon = ':'; } else { $iw = $destination->getInterwiki(); - if ( $iw && Language::fetchLanguageName( $iw, null, 'mw' ) ) { + if ( $iw && $services + ->getLanguageNameUtils() + ->getLanguageName( $iw, + LanguageNameUtils::AUTONYMS, + LanguageNameUtils::DEFINED ) + ) { $optionalColon = ':'; } } - $mwRedir = MediaWikiServices::getInstance()->getMagicWordFactory()->get( 'redirect' ); + $mwRedir = $services->getMagicWordFactory()->get( 'redirect' ); $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $optionalColon . $destination->getFullText() . ']]'; diff --git a/includes/context/RequestContext.php b/includes/context/RequestContext.php index c9abe21a841a..9674105cb393 100644 --- a/includes/context/RequestContext.php +++ b/includes/context/RequestContext.php @@ -294,7 +294,11 @@ class RequestContext implements IContextSource, MutableContext { $code = strtolower( $code ); # Validate $code - if ( !$code || !Language::isValidCode( $code ) || $code === 'qqq' ) { + if ( !$code + || !MediaWikiServices::getInstance()->getLanguageNameUtils() + ->isValidCode( $code ) + || $code === 'qqq' + ) { $code = $wgLanguageCode; } diff --git a/includes/htmlform/fields/HTMLSelectLanguageField.php b/includes/htmlform/fields/HTMLSelectLanguageField.php index 98cf3b19c453..2383953f2ac4 100644 --- a/includes/htmlform/fields/HTMLSelectLanguageField.php +++ b/includes/htmlform/fields/HTMLSelectLanguageField.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + /** * Language select field. */ @@ -15,7 +17,9 @@ class HTMLSelectLanguageField extends HTMLSelectField { $languageCode = $wgLanguageCode; } - $languages = Language::fetchLanguageNames( null, 'mw' ); + $languages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( null, 'mw' ); // Make sure the site language is in the list; // a custom language code might not have a defined name⦠diff --git a/includes/installer/WebInstaller.php b/includes/installer/WebInstaller.php index de333998e50c..7d599fff6efd 100644 --- a/includes/installer/WebInstaller.php +++ b/includes/installer/WebInstaller.php @@ -517,7 +517,9 @@ class WebInstaller extends Installer { public function getAcceptLanguage() { global $wgLanguageCode, $wgRequest; - $mwLanguages = Language::fetchLanguageNames( null, 'mwfile' ); + $mwLanguages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( null, 'mwfile' ); $headerLanguages = array_keys( $wgRequest->getAcceptLang() ); foreach ( $headerLanguages as $lang ) { diff --git a/includes/installer/WebInstallerLanguage.php b/includes/installer/WebInstallerLanguage.php index 50ab1cfc313c..b5c97d2ef888 100644 --- a/includes/installer/WebInstallerLanguage.php +++ b/includes/installer/WebInstallerLanguage.php @@ -19,6 +19,8 @@ * @ingroup Installer */ +use MediaWiki\MediaWikiServices; + class WebInstallerLanguage extends WebInstallerPage { /** @@ -30,7 +32,9 @@ class WebInstallerLanguage extends WebInstallerPage { $userLang = $r->getVal( 'uselang' ); $contLang = $r->getVal( 'ContLang' ); - $languages = Language::fetchLanguageNames( null, 'mwfile' ); + $languages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( null, 'mwfile' ); $lifetime = intval( ini_get( 'session.gc_maxlifetime' ) ); if ( !$lifetime ) { $lifetime = 1440; // PHP default @@ -103,7 +107,9 @@ class WebInstallerLanguage extends WebInstallerPage { $select = new XmlSelect( $name, $name, $selectedCode ); $select->setAttribute( 'tabindex', $this->parent->nextTabIndex() ); - $languages = Language::fetchLanguageNames( null, 'mwfile' ); + $languages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( null, 'mwfile' ); foreach ( $languages as $code => $lang ) { $select->addOption( "$code - $lang", $code ); } diff --git a/includes/logging/PageLangLogFormatter.php b/includes/logging/PageLangLogFormatter.php index a08427a0d881..5a8947561cdb 100644 --- a/includes/logging/PageLangLogFormatter.php +++ b/includes/logging/PageLangLogFormatter.php @@ -23,6 +23,8 @@ * @since 1.24 */ +use MediaWiki\MediaWikiServices; + /** * This class formats language change log entries. * @@ -48,9 +50,10 @@ class PageLangLogFormatter extends LogFormatter { } // Convert language codes to names in user language - $logOld = Language::fetchLanguageName( $oldLang, $userLang ) + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); + $logOld = $languageNameUtils->getLanguageName( $oldLang, $userLang ) . ' (' . $oldLang . ')'; - $logNew = Language::fetchLanguageName( $newLang, $userLang ) + $logNew = $languageNameUtils->getLanguageName( $newLang, $userLang ) . ' (' . $newLang . ')'; // Add the default message to languages if required diff --git a/includes/media/FormatMetadata.php b/includes/media/FormatMetadata.php index c87b5dd5d691..36ca85b23630 100644 --- a/includes/media/FormatMetadata.php +++ b/includes/media/FormatMetadata.php @@ -978,7 +978,9 @@ class FormatMetadata extends ContextSource { break; case 'LanguageCode': - $lang = Language::fetchLanguageName( strtolower( $val ), $this->getLanguage()->getCode() ); + $lang = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageName( strtolower( $val ), $this->getLanguage()->getCode() ); $val = htmlspecialchars( $lang ?: $val ); break; @@ -1186,11 +1188,12 @@ class FormatMetadata extends ContextSource { } $lowLang = strtolower( $lang ); - $langName = Language::fetchLanguageName( $lowLang ); + $languageNameUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); + $langName = $languageNameUtils->getLanguageName( $lowLang ); if ( $langName === '' ) { // try just the base language name. (aka en-US -> en ). $langPrefix = explode( '-', $lowLang, 2 )[0]; - $langName = Language::fetchLanguageName( $langPrefix ); + $langName = $languageNameUtils->getLanguageName( $langPrefix ); if ( $langName === '' ) { // give up. $langName = $lang; @@ -1893,8 +1896,9 @@ class FormatMetadata extends ContextSource { * @since 1.23 */ protected function getPriorityLanguages() { - $priorityLanguages = - Language::getFallbacksIncludingSiteLanguage( $this->getLanguage()->getCode() ); + $priorityLanguages = MediaWikiServices::getInstance() + ->getLanguageFallback() + ->getAllIncludingSiteLanguage( $this->getLanguage()->getCode() ); $priorityLanguages = array_merge( (array)$this->getLanguage()->getCode(), $priorityLanguages[0], diff --git a/includes/media/SvgHandler.php b/includes/media/SvgHandler.php index 98c22a32dd76..41e78adf27db 100644 --- a/includes/media/SvgHandler.php +++ b/includes/media/SvgHandler.php @@ -21,6 +21,7 @@ * @ingroup Media */ +use MediaWiki\MediaWikiServices; use MediaWiki\Shell\Shell; use Wikimedia\ScopedCallback; @@ -547,7 +548,10 @@ class SvgHandler extends ImageHandler { return ( $value > 0 ); } elseif ( $name == 'lang' ) { // Validate $code - if ( $value === '' || !Language::isValidCode( $value ) ) { + if ( $value === '' + || !MediaWikiServices::getInstance()->getLanguageNameUtils() + ->isValidCode( $value ) + ) { return false; } diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php index ffd506ce3425..e6b18db991a5 100644 --- a/includes/page/ImagePage.php +++ b/includes/page/ImagePage.php @@ -1102,7 +1102,9 @@ EOT */ private function createXmlOptionStringForLanguage( $lang, $selected ) { $code = LanguageCode::bcp47( $lang ); - $name = Language::fetchLanguageName( $code, $this->getContext()->getLanguage()->getCode() ); + $name = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageName( $code, $this->getContext()->getLanguage()->getCode() ); if ( $name !== '' ) { $display = $this->getContext()->msg( 'img-lang-opt', $code, $name )->text(); } else { diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 3515d11fa2a7..5be36041299d 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -902,7 +902,9 @@ class CoreParserFunctions { public static function language( $parser, $code = '', $inLanguage = '' ) { $code = strtolower( $code ); $inLanguage = strtolower( $inLanguage ); - $lang = Language::fetchLanguageName( $code, $inLanguage ); + $lang = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageName( $code, $inLanguage ); return $lang !== '' ? $lang : LanguageCode::bcp47( $code ); } diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 432073dfe311..08fcd092fe5c 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -23,6 +23,7 @@ use MediaWiki\BadFileLookup; use MediaWiki\Config\ServiceOptions; use MediaWiki\Languages\LanguageConverterFactory; +use MediaWiki\Languages\LanguageNameUtils; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\Linker\LinkTarget; @@ -2529,8 +2530,13 @@ class Parser { # Interwikis if ( $iw && $this->mOptions->getInterwikiMagic() && $nottalk && ( - Language::fetchLanguageName( $iw, null, 'mw' ) || - in_array( $iw, $this->svcOptions->get( 'ExtraInterlanguageLinkPrefixes' ) ) + MediaWikiServices::getInstance()->getLanguageNameUtils() + ->getLanguageName( + $iw, + LanguageNameUtils::AUTONYMS, + LanguageNameUtils::DEFINED + ) + || in_array( $iw, $this->svcOptions->get( 'ExtraInterlanguageLinkPrefixes' ) ) ) ) { # T26502: filter duplicates diff --git a/includes/preferences/DefaultPreferencesFactory.php b/includes/preferences/DefaultPreferencesFactory.php index 459b4ce56924..10c918d14748 100644 --- a/includes/preferences/DefaultPreferencesFactory.php +++ b/includes/preferences/DefaultPreferencesFactory.php @@ -36,6 +36,7 @@ use LanguageConverter; use MediaWiki\Auth\AuthManager; use MediaWiki\Auth\PasswordAuthenticationRequest; use MediaWiki\Config\ServiceOptions; +use MediaWiki\Languages\LanguageNameUtils; use MediaWiki\Linker\LinkRenderer; use MediaWiki\MediaWikiServices; use MediaWiki\Permissions\PermissionManager; @@ -70,6 +71,9 @@ class DefaultPreferencesFactory implements PreferencesFactory { /** @var Language The wiki's content language. */ protected $contLang; + /** @var LanguageNameUtils */ + protected $languageNameUtils; + /** @var AuthManager */ protected $authManager; @@ -126,6 +130,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { * @param NamespaceInfo $nsInfo * @param PermissionManager $permissionManager * @param ILanguageConverter|null $languageConverter + * @param LanguageNameUtils|null $languageNameUtils */ public function __construct( ServiceOptions $options, @@ -134,7 +139,8 @@ class DefaultPreferencesFactory implements PreferencesFactory { LinkRenderer $linkRenderer, NamespaceInfo $nsInfo, PermissionManager $permissionManager, - ILanguageConverter $languageConverter = null + ILanguageConverter $languageConverter = null, + LanguageNameUtils $languageNameUtils = null ) { $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); @@ -144,6 +150,8 @@ class DefaultPreferencesFactory implements PreferencesFactory { $this->linkRenderer = $linkRenderer; $this->nsInfo = $nsInfo; $this->permissionManager = $permissionManager; + $this->languageNameUtils = $languageNameUtils ?? + MediaWikiServices::getInstance()->getLanguageNameUtils(); $this->logger = new NullLogger(); $this->languageConverter = DeprecationHelper::newArgumentWithDeprecation( __METHOD__, @@ -448,7 +456,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { ]; } - $languages = $services->getLanguageNameUtils()->getLanguageNames( null, 'mwfile' ); + $languages = $this->languageNameUtils->getLanguageNames( null, 'mwfile' ); $languageCode = $this->options->get( 'LanguageCode' ); if ( !array_key_exists( $languageCode, $languages ) ) { $languages[$languageCode] = $languageCode; diff --git a/includes/site/Site.php b/includes/site/Site.php index 401f6e48292d..4eb06c287e99 100644 --- a/includes/site/Site.php +++ b/includes/site/Site.php @@ -1,5 +1,7 @@ <?php +use MediaWiki\MediaWikiServices; + /** * Represents a single site. * @@ -463,7 +465,11 @@ class Site implements Serializable { * @param string|null $languageCode */ public function setLanguageCode( $languageCode ) { - if ( $languageCode !== null && !Language::isValidCode( $languageCode ) ) { + if ( $languageCode !== null + && !MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->isValidCode( $languageCode ) + ) { throw new InvalidArgumentException( "$languageCode is not a valid language code." ); } $this->languageCode = $languageCode; diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index c34ca43ba39c..9d4325b114ec 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -93,7 +93,9 @@ class SkinTemplate extends Skin { $ilInterwikiCode = $this->mapInterwikiToLanguage( $languageLinkTitle->getInterwiki() ); - $ilLangName = Language::fetchLanguageName( $ilInterwikiCode ); + $ilLangName = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageName( $ilInterwikiCode ); if ( strval( $ilLangName ) === '' ) { $ilDisplayTextMsg = wfMessage( "interlanguage-link-$ilInterwikiCode" ); @@ -111,7 +113,7 @@ class SkinTemplate extends Skin { // CLDR extension or similar is required to localize the language name; // otherwise we'll end up with the autonym again. - $ilLangLocalName = Language::fetchLanguageName( + $ilLangLocalName = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageName( $ilInterwikiCode, $userLang->getCode() ); diff --git a/includes/specials/SpecialMyLanguage.php b/includes/specials/SpecialMyLanguage.php index 408bd9288342..229602d69cbc 100644 --- a/includes/specials/SpecialMyLanguage.php +++ b/includes/specials/SpecialMyLanguage.php @@ -65,6 +65,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle { * @return Title|null */ public function findTitle( $subpage ) { + $services = MediaWikiServices::getInstance(); // base = title without language code suffix // provided = the title as it was given $base = $provided = null; @@ -76,7 +77,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle { $pos = strrpos( $subpage, '/' ); $basepage = substr( $subpage, 0, $pos ); $code = substr( $subpage, $pos + 1 ); - if ( strlen( $code ) && Language::isKnownLanguageTag( $code ) ) { + if ( strlen( $code ) && $services->getLanguageNameUtils()->isKnownLanguageTag( $code ) ) { $base = Title::newFromText( $basepage ); } } @@ -93,7 +94,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle { } $uiLang = $this->getLanguage(); - $contLang = MediaWikiServices::getInstance()->getContentLanguage(); + $contLang = $services->getContentLanguage(); if ( $uiLang->equals( $contLang ) ) { // Short circuit when the current UI language is the diff --git a/includes/specials/SpecialPageLanguage.php b/includes/specials/SpecialPageLanguage.php index bc6de005ae5b..9f99dcdced4b 100644 --- a/includes/specials/SpecialPageLanguage.php +++ b/includes/specials/SpecialPageLanguage.php @@ -87,7 +87,9 @@ class SpecialPageLanguage extends FormSpecialPage { // Building a language selector $userLang = $this->getLanguage()->getCode(); - $languages = Language::fetchLanguageNames( $userLang, 'mwfile' ); + $languages = MediaWikiServices::getInstance() + ->getLanguageNameUtils() + ->getLanguageNames( $userLang, 'mwfile' ); $options = []; foreach ( $languages as $code => $name ) { $options["$code - $name"] = $code; diff --git a/includes/specials/pagers/AllMessagesTablePager.php b/includes/specials/pagers/AllMessagesTablePager.php index 85b60e83b4ce..d388c27f9630 100644 --- a/includes/specials/pagers/AllMessagesTablePager.php +++ b/includes/specials/pagers/AllMessagesTablePager.php @@ -110,7 +110,9 @@ class AllMessagesTablePager extends TablePager { } function getAllMessages( $descending ) { - $messageNames = Language::getLocalisationCache()->getSubitemList( 'en', 'messages' ); + $messageNames = MediaWikiServices::getInstance() + ->getLocalisationCache() + ->getSubitemList( 'en', 'messages' ); // Normalise message names so they look like page titles and sort correctly - T86139 $messageNames = array_map( [ $this->lang, 'ucfirst' ], $messageNames ); |