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; ) ) + $personal_urls;
return true; 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. * Add the template for the ULS to the body.
* Hooks: SkinAfterContent * Hooks: SkinAfterContent

View File

@@ -60,6 +60,7 @@ $wgHooks['PersonalUrls'][] = 'UniversalLanguageSelectorHooks::addTrigger';
$wgHooks['SkinAfterContent'][] = 'UniversalLanguageSelectorHooks::addTemplate'; $wgHooks['SkinAfterContent'][] = 'UniversalLanguageSelectorHooks::addTemplate';
$wgHooks['ResourceLoaderTestModules'][] = 'UniversalLanguageSelectorHooks::addTestModules'; $wgHooks['ResourceLoaderTestModules'][] = 'UniversalLanguageSelectorHooks::addTestModules';
$wgAPIModules['languagesearch'] = 'ApiLanguageSearch'; $wgAPIModules['languagesearch'] = 'ApiLanguageSearch';
$wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLanguage';
$wgResourceModules['ext.uls.init'] = array( $wgResourceModules['ext.uls.init'] = array(
'scripts' => 'resources/ext.uls.init.js', 'scripts' => 'resources/ext.uls.init.js',