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

Reply via email to