Language Stickiness

* use setlang parameter to change language preference
* language preference will be persistant for all users
* for anonymous users, cookie 'language' will be used
* for logged in users, preference 'language' will be used
* uselang parameter can be used for temporary switching
* language codes will be sanitized.

Change-Id: I2472aee9a7dcd824b622edd38e83f20212f09945
This commit is contained in:
Santhosh Thottingal
2012-07-30 14:02:22 +05:30
parent 3d9807e7f2
commit 8959f2a9b0
2 changed files with 34 additions and 0 deletions

View File

@@ -60,6 +60,39 @@ class UniversalLanguageSelectorHooks {
) ) + $personal_urls;
return true;
}
/**
* Hook to UserGetLanguageObject
* @param $user User
* @param $code String
* @return bool
*/
public static function getLanguage( $user, &$code ) {
global $wgRequest;
if ( $wgRequest->getVal( 'uselang' ) ) {
// uselang can be used for temporary override of language preference
return true;
}
$setlang = $wgRequest->getVal( 'setlang' );
if ( $setlang ) {
if ( $user->isAnon() ) {
$wgRequest->response()->setcookie( 'language', $setlang );
} else {
$user->setOption( 'language', $setlang );
$user->saveSettings();
}
$code = $setlang;
} else {
if ( $user->isAnon() ) {
$code = $wgRequest->getCookie( 'language' );
} else {
$code = $user->getOption( 'language' );
}
}
$code = RequestContext::sanitizeLangCode( $code );
return true;
}
/**
* Add the template for the ULS to the body.
* Hooks: SkinAfterContent