X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fspecials%2FSpecialMyLanguage.php;h=37d96f47cc16ad9178dae81ac02df636b50994c5;hb=74426f3cf796b149f1ae445e41815bbe148640b2;hp=9cb6d4b52911c52c6adcaf7ef04e7c77619e402c;hpb=61898ad28ed69c5b391eb43e0db9386279b9612c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialMyLanguage.php b/includes/specials/SpecialMyLanguage.php index 9cb6d4b529..37d96f47cc 100644 --- a/includes/specials/SpecialMyLanguage.php +++ b/includes/specials/SpecialMyLanguage.php @@ -81,6 +81,7 @@ class SpecialMyLanguage extends RedirectSpecialArticle { } if ( !$base ) { + // No subpage provided or base page does not exist return null; } @@ -90,14 +91,38 @@ class SpecialMyLanguage extends RedirectSpecialArticle { } $uiCode = $this->getLanguage()->getCode(); + $wikiLangCode = $this->getConfig()->get( 'LanguageCode' ); + + if ( $uiCode === $wikiLangCode ) { + // Short circuit when the current UI language is the + // wiki's default language to avoid unnecessary page lookups. + return $base; + } + + // Check for a subpage in current UI language $proposed = $base->getSubpage( $uiCode ); - if ( $proposed && $proposed->exists() && $uiCode !== $base->getPageLanguage()->getCode() ) { + if ( $proposed && $proposed->exists() ) { return $proposed; - } elseif ( $provided && $provided->exists() ) { + } + + if ( $provided !== $base && $provided->exists() ) { + // Explicit language code given and the page exists return $provided; - } else { - return $base; } + + // Check for fallback languages specified by the UI language + $possibilities = Language::getFallbacksFor( $uiCode ); + foreach ( $possibilities as $lang ) { + if ( $lang !== $wikiLangCode ) { + $proposed = $base->getSubpage( $lang ); + if ( $proposed && $proposed->exists() ) { + return $proposed; + } + } + } + + // When all else has failed, return the base page + return $base; } /**