uselang= hack with its values such as qqx and other nonstandard language codes understood by MediaWiki can leads to passing of such code as locale to NumberFormatter constructor.
A change in php-intl extension means this will now throw ValueError in PHP 8.4. (Upstream change https://github.com/php/php-src/commit/683e78786070ab77d33f7787598ac1b90d68390a)
It will pretty much affect a lot of things that gets merged into $wgDummyLanguageCodes during setup.
foreach( $wgDummyLanguageCodes as $code ) { try { new NumberFormatter( $code, NumberFormatter::DECIMAL ); } catch ( ValueError $e ) { print( $code . ': ' . $e->getMessage() . "\n" ); } } // qqq: NumberFormatter::__construct(): Argument #1 ($locale) "qqq" is invalid // qqx: NumberFormatter::__construct(): Argument #1 ($locale) "qqx" is invalid // cbk-zam: NumberFormatter::__construct(): Argument #1 ($locale) "cbk-zam" is invalid // eml: NumberFormatter::__construct(): Argument #1 ($locale) "eml" is invalid // map-bms: NumberFormatter::__construct(): Argument #1 ($locale) "map-bms" is invalid // nrm: NumberFormatter::__construct(): Argument #1 ($locale) "nrm" is invalid // roa-tara: NumberFormatter::__construct(): Argument #1 ($locale) "roa-tara" is invalid // x-xss: NumberFormatter::__construct(): Argument #1 ($locale) "x-xss" is invalid
Additionally, a lot of languages selectable via the interface at Special:Preferences will suffer from the same issue.
The first language shown on Special:Preferences language dropdown selector aae - Arbërisht is one prime example.
Users who selected that language cannot be able to use wiki running PHP 8.4. Selecting the language from the interface would be impossible for those who have not already done so.
// Usable languages per includes/preferences/DefaultPreferencesFactory.php $languageNameUtils = MediaWiki\MediaWikiServices::getInstance()->getLanguageNameUtils(); $languages = $languageNameUtils->getLanguageNames( $languageNameUtils::AUTONYMS, $languageNameUtils::SUPPORTED ); $i = 0; foreach( array_keys( $languages ) as $code ) { try { new NumberFormatter( $code, NumberFormatter::DECIMAL ); } catch ( ValueError $e ) { $i++; } } print($i); // 94