I18n#1473: Use preferred language for anonymous users
Change-Id: I25833bb4c35453bbb055b4782d996604c93ef7db
This commit is contained in:
committed by
Gerrit Code Review
parent
47e852f2e5
commit
b1fad2c1bb
@@ -71,6 +71,31 @@ class UniversalLanguageSelectorHooks {
|
||||
return isset( $supported[$language] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected static function getDefaultLanguage( array $preferred ) {
|
||||
$supported = Language::fetchLanguageNames( null, 'mwfile' );
|
||||
// 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 "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook to UserGetLanguageObject
|
||||
* @param $user User
|
||||
@@ -78,7 +103,7 @@ class UniversalLanguageSelectorHooks {
|
||||
* @return bool
|
||||
*/
|
||||
public static function getLanguage( $user, &$code ) {
|
||||
global $wgRequest;
|
||||
global $wgRequest, $wgULSLanguageDetection;
|
||||
if ( $wgRequest->getVal( 'uselang' ) ) {
|
||||
// uselang can be used for temporary override of language preference
|
||||
return true;
|
||||
@@ -101,12 +126,19 @@ class UniversalLanguageSelectorHooks {
|
||||
$languageToUse = $wgRequest->getCookie( 'language' );
|
||||
}
|
||||
|
||||
// Let the normal language loading mechanism decide if
|
||||
// there is no cookie or setlang override.
|
||||
// Check whether we got valid language from store or
|
||||
// explicit language change.
|
||||
if ( self::isSupportedLanguage( $languageToUse ) ) {
|
||||
$code = $languageToUse;
|
||||
} elseif ( $wgULSLanguageDetection ) {
|
||||
$preferred = $wgRequest->getAcceptLang();
|
||||
$default = self::getDefaultLanguage( $preferred );
|
||||
if ( $default !== '' ) {
|
||||
$code = $default;
|
||||
}
|
||||
}
|
||||
|
||||
// Fall back to content language
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,13 @@ $wgExtensionCredits['other'][] = array(
|
||||
*/
|
||||
$wgULSGeoService = 'http://freegeoip.net/json/';
|
||||
|
||||
/**
|
||||
* Try to use preferred interface language for anonymous users.
|
||||
* Do not use if you are caching anonymous page views without
|
||||
* taking Accept-Language into account.
|
||||
*/
|
||||
$wgULSLanguageDetection = true;
|
||||
|
||||
$dir = __DIR__ ;
|
||||
|
||||
// Internationalization
|
||||
|
||||
Reference in New Issue
Block a user