From 8ee09f0ba13519e2379020020c42dd244b8ac252 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 5 Sep 2018 15:38:27 -0700 Subject: [PATCH] Allow $wgULSLanguageDetection to work if $wgULSAnonCanChangeLanguage is false $wgULSAnonCanChangeLanguage is documented as just affecting setting of language for anonymous users via cookies and &setlang=. But currently it also affects the fallback to Accept-Language if $wgULSLanguageDetection is enabled. With this, $wgULSAnonCanChangeLanguage will now only control whether cookies and &setlang= can be used for anonymous users, and keeps $wgULSLanguageDetection independent. Bug: T203179 Change-Id: I6c664ad11dc18b66190dc0644352b91adf87c9e5 --- UniversalLanguageSelector.hooks.php | 30 ++++++++++++++--------------- extension.json | 2 +- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index dbaf6def..d7916425 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -261,25 +261,23 @@ class UniversalLanguageSelectorHooks { return; } - // Logged out users - less simple - if ( !$wgULSAnonCanChangeLanguage ) { - return; - } + // If using cookie storage for anons is OK, read/write from that + if ( $wgULSAnonCanChangeLanguage ) { + // Language change + if ( Language::isSupportedLanguage( $languageToSave ) ) { + $request->response()->setCookie( 'language', $languageToSave ); + $code = $languageToSave; - // Language change - if ( Language::isSupportedLanguage( $languageToSave ) ) { - $request->response()->setCookie( 'language', $languageToSave ); - $code = $languageToSave; + return; + } - return; - } + // Try cookie + $languageToUse = $request->getCookie( 'language', null, '' ); + if ( Language::isSupportedLanguage( $languageToUse ) ) { + $code = $languageToUse; - // Try cookie - $languageToUse = $request->getCookie( 'language', null, '' ); - if ( Language::isSupportedLanguage( $languageToUse ) ) { - $code = $languageToUse; - - return; + return; + } } // As last resort, try Accept-Language headers if allowed diff --git a/extension.json b/extension.json index 34e7ae77..88423ed1 100644 --- a/extension.json +++ b/extension.json @@ -67,7 +67,7 @@ "ULSEnableAnon": true, "@ULSAnonCanChangeLanguage": "Allow anonymous users to change language with cookie and setlang query parameter. Do not use if you are caching anonymous page views without taking cookies into account. Does not have any effect if either of $wgULSEnable or $wgULSEnableAnon is set to false. @since 2013.04", "ULSAnonCanChangeLanguage": true, - "@ULSLanguageDetection": "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. Does not have any effect if any of $wgULSEnable, $wgULSEnableAnon or $wgULSAnonCanChangeLanguage is set to false.", + "@ULSLanguageDetection": "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. Does not have any effect if any of $wgULSEnable, or $wgULSEnableAnon is set to false.", "ULSLanguageDetection": true, "@ULSIMEEnabled": "Enable the input methods feature for all users by default. Can be controlled by the user.", "ULSIMEEnabled": true,