From 07760f579914c2e9bd07b8e1bad2728950b58c5c Mon Sep 17 00:00:00 2001 From: Max Semenik Date: Mon, 2 Aug 2010 20:16:36 +0000 Subject: [PATCH] Follow-up to r64587: * Use WebRequest::getAcceptLang() instead of home-brewed code (and in LanguageConverter too). * Refactored that function to use getHeader() --- includes/WebRequest.php | 5 +++-- includes/installer/WebInstaller.php | 24 +++++------------------- languages/LanguageConverter.php | 20 ++------------------ 3 files changed, 10 insertions(+), 39 deletions(-) diff --git a/includes/WebRequest.php b/includes/WebRequest.php index 58247cdec2..144dab480c 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -733,14 +733,15 @@ class WebRequest { */ public function getAcceptLang() { // Modified version of code found at http://www.thefutureoftheweb.com/blog/use-accept-language-header - if ( !isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) { + $acceptLang = $this->getHeader( 'Accept-Language' ); + if ( !$acceptLang ) { return array(); } // Break up string into pieces (languages and q factors) $lang_parse = null; preg_match_all( '/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0(\.[0-9]+))?)?/i', - $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse ); + $acceptLang, $lang_parse ); if ( !count( $lang_parse[1] ) ) { return array(); diff --git a/includes/installer/WebInstaller.php b/includes/installer/WebInstaller.php index 408fc528bf..bcef6f31f4 100644 --- a/includes/installer/WebInstaller.php +++ b/includes/installer/WebInstaller.php @@ -444,28 +444,14 @@ class WebInstaller extends CoreInstaller { * @return string */ public function getAcceptLanguage() { - global $wgLanguageCode; + global $wgLanguageCode, $wgRequest; $mwLanguages = Language::getLanguageNames(); - $langs = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + $headerLanguages = array_keys( $wgRequest->getAcceptLang() ); - foreach ( explode( ';', $langs ) as $splitted ) { - foreach ( explode( ',', $splitted ) as $lang ) { - $lang = trim( strtolower( $lang ) ); - - if ( $lang == '' || $lang[0] == 'q' ) { - continue; - } - - if ( isset( $mwLanguages[$lang] ) ) { - return $lang; - } - - $lang = preg_replace( '/^(.*?)(?=-[^-]*)$/', '\\1', $lang ); - - if ( $lang != '' && isset( $mwLanguages[$lang] ) ) { - return $lang; - } + foreach ( $headerLanguages as $lang ) { + if ( isset( $mwLanguages[$lang] ) ) { + return $lang; } } diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 956cecf5d6..e0081de661 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -233,29 +233,13 @@ class LanguageConverter { // see if some supported language variant is set in the // http header. - $acceptLanguage = $wgRequest->getHeader( 'Accept-Language' ); - if ( !$acceptLanguage ) { + $languages = array_keys( $wgRequest->getAcceptLang() ); + if ( empty( $languages ) ) { return null; } - // explode by comma - $result = StringUtils::explode( ',', strtolower( $acceptLanguage ) ); - $languages = array(); - - foreach ( $result as $elem ) { - // if $elem likes 'zh-cn;q=0.9' - if ( ( $posi = strpos( $elem, ';' ) ) !== false ) { - // get the real language code likes 'zh-cn' - $languages[] = substr( $elem, 0, $posi ); - } else { - $languages[] = $elem; - } - } - $fallback_languages = array(); foreach ( $languages as $language ) { - // strip whitespace - $language = trim( $language ); $this->mHeaderVariant = $this->validateVariant( $language ); if ( $this->mHeaderVariant ) { break; -- 2.20.1