From 8959f2a9b02a333c5961ee1199b5bcaed9c10359 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Mon, 30 Jul 2012 14:02:22 +0530 Subject: [PATCH] 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 --- UniversalLanguageSelector.hooks.php | 33 +++++++++++++++++++++++++++++ UniversalLanguageSelector.php | 1 + 2 files changed, 34 insertions(+) diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index fc57bdf4..015ae9dd 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -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 diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index bc485f48..83f05e78 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -60,6 +60,7 @@ $wgHooks['PersonalUrls'][] = 'UniversalLanguageSelectorHooks::addTrigger'; $wgHooks['SkinAfterContent'][] = 'UniversalLanguageSelectorHooks::addTemplate'; $wgHooks['ResourceLoaderTestModules'][] = 'UniversalLanguageSelectorHooks::addTestModules'; $wgAPIModules['languagesearch'] = 'ApiLanguageSearch'; +$wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLanguage'; $wgResourceModules['ext.uls.init'] = array( 'scripts' => 'resources/ext.uls.init.js',