Liangent has uploaded a new change for review. https://gerrit.wikimedia.org/r/71280
Change subject: Special case for English in Utils::getLanguageFallbackChainFromContext() ...................................................................... Special case for English in Utils::getLanguageFallbackChainFromContext() This is in a separate patch because it requires some core code cleanup to distinguish explicit / compatible (en-gb -> en) vs. implicit / incompatible (ru -> en) fallback to English (currently it's mixed as long as final results look fine). Change-Id: If1c57e8f5ba41dee125ca626217193962c07aba2 --- M lib/includes/Utils.php 1 file changed, 25 insertions(+), 2 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/80/71280/1 diff --git a/lib/includes/Utils.php b/lib/includes/Utils.php index 6ce8af5..ac664f1 100644 --- a/lib/includes/Utils.php +++ b/lib/includes/Utils.php @@ -186,14 +186,37 @@ // Second pass to get other languages from system fallback chain foreach ( $babels as $languageCodes ) { foreach ( $languageCodes as $languageCode ) { - $chain = array_merge( $chain, self::getLanguageFallbackChainInternal( + // Special case for English: In Language::getFallbacksFor(), 'en' is always added + // to every fallback chain, but we want it to be the last one of the merged chain. + if ( isset( $fetched['en'] ) ) { // User has already explicitly chosen to see English. + $enWanted = true; + } else { + $mwFallbacks = Language::getLocalisationCache()->getItem( $languageCode, 'fallback' ); + $mwFallbacks = array_map( 'trim', explode( ',', $mwFallbacks ) ); + $enWanted = ( $mwFallbacks[count( $mwFallbacks ) - 1] === 'en' ); + } + + $languageChain = self::getLanguageFallbackChainInternal( Language::factory( $languageCode ), self::LANGUAGE_FALLBACK_OTHERS | self::LANGUAGE_FALLBACK_VARIANTS, $fetched - ) ); + ); + + if ( !$enWanted ) { + // The last item in $languageChain must be for English (not converted). + unset( $fetched['en'] ); + unset( $languageChain[count( $languageChain ) - 1] ); + } + + $chain = array_merge( $chain, $languageChain ); } } + // Add English back to the end of the chain if it's not already there (indicated by $fetched['en']). + $chain = array_merge( $chain, self::getLanguageFallbackChainInternal( + Language::factory( 'en' ), self::LANGUAGE_FALLBACK_ALL, $fetched + ) ); + $cache[$user->getName()] = $chain; return $chain; -- To view, visit https://gerrit.wikimedia.org/r/71280 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If1c57e8f5ba41dee125ca626217193962c07aba2 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Liangent <liang...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Denny Vrandecic <denny.vrande...@wikimedia.de> Gerrit-Reviewer: Liangent <liang...@gmail.com> Gerrit-Reviewer: jenkins-bot _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits