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 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
|
* Hook to UserGetLanguageObject
|
||||||
* @param $user User
|
* @param $user User
|
||||||
@@ -78,7 +103,7 @@ class UniversalLanguageSelectorHooks {
|
|||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public static function getLanguage( $user, &$code ) {
|
public static function getLanguage( $user, &$code ) {
|
||||||
global $wgRequest;
|
global $wgRequest, $wgULSLanguageDetection;
|
||||||
if ( $wgRequest->getVal( 'uselang' ) ) {
|
if ( $wgRequest->getVal( 'uselang' ) ) {
|
||||||
// uselang can be used for temporary override of language preference
|
// uselang can be used for temporary override of language preference
|
||||||
return true;
|
return true;
|
||||||
@@ -101,12 +126,19 @@ class UniversalLanguageSelectorHooks {
|
|||||||
$languageToUse = $wgRequest->getCookie( 'language' );
|
$languageToUse = $wgRequest->getCookie( 'language' );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let the normal language loading mechanism decide if
|
// Check whether we got valid language from store or
|
||||||
// there is no cookie or setlang override.
|
// explicit language change.
|
||||||
if ( self::isSupportedLanguage( $languageToUse ) ) {
|
if ( self::isSupportedLanguage( $languageToUse ) ) {
|
||||||
$code = $languageToUse;
|
$code = $languageToUse;
|
||||||
|
} elseif ( $wgULSLanguageDetection ) {
|
||||||
|
$preferred = $wgRequest->getAcceptLang();
|
||||||
|
$default = self::getDefaultLanguage( $preferred );
|
||||||
|
if ( $default !== '' ) {
|
||||||
|
$code = $default;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fall back to content language
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,13 @@ $wgExtensionCredits['other'][] = array(
|
|||||||
*/
|
*/
|
||||||
$wgULSGeoService = 'http://freegeoip.net/json/';
|
$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__ ;
|
$dir = __DIR__ ;
|
||||||
|
|
||||||
// Internationalization
|
// Internationalization
|
||||||
|
|||||||
Reference in New Issue
Block a user