Page MenuHomePhabricator

UniversalLanguageSelector: HTTP Accept-Language BCP 47 language codes are not handled properly
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • Use 'zh-Hant-TW' in HTTP Accept-Language header
  • Check the UI language

What happens?:

  • It failed to map BCP 47 language code 'zh-hant-tw' as MediaWiki internal language code 'zh-tw'

What should have happened instead?:

  • It should handle BCP 47 language codes correctly

Software version (skip for WMF-hosted wikis like Wikipedia):

Other information (browser name/version, screenshots, etc.):

includes/Hooks.php#L273-300
/**
 * @param float[] $preferred
 * @return string
 */
protected function getDefaultLanguage( array $preferred ) {
	$supported = $this->languageNameUtils
		->getLanguageNames( LanguageNameUtils::AUTONYMS, LanguageNameUtils::SUPPORTED );

	// look for a language that is acceptable to the client
	// and known to the wiki.
	foreach ( $preferred as $code => $weight ) {
		if ( isset( $supported[$code] ) ) {
			return $code;
		}
	}

	// Some browsers might only send codes like de-de.
	// Try with bare code.
	foreach ( $preferred as $code => $weight ) {
		$parts = explode( '-', $code, 2 );
		$code = $parts[0];
		if ( isset( $supported[$code] ) ) {
			return $code;
		}
	}

	return '';
}

Event Timeline

Change 923642 had a related patch set uploaded (by Winston Sung; author: Winston Sung):

[mediawiki/extensions/UniversalLanguageSelector@master] UniversalLanguageSelector: Fix BCP 47 language code detection

https://gerrit.wikimedia.org/r/923642

Change 923642 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@master] UniversalLanguageSelector: Fix BCP 47 language code detection

https://gerrit.wikimedia.org/r/923642