[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [websites/wiki-kde-org/develop] extensions/LanguageSelector: update languageselector extension
From:       Ingo Malchow <imalchow () kde ! org>
Date:       2012-03-31 21:17:17
Message-ID: 20120331211717.7243CA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit 4ee4350219ea7bbdd4049635e21262b8d981f007 by Ingo Malchow.
Committed on 31/03/2012 at 23:17.
Pushed by imalchow into branch 'develop'.

update languageselector extension

M  +122  -28   extensions/LanguageSelector/LanguageSelector.i18n.php
M  +2    -2    extensions/LanguageSelector/LanguageSelector.js
M  +141  -174  extensions/LanguageSelector/LanguageSelector.php

http://commits.kde.org/websites/wiki-kde-org/4ee4350219ea7bbdd4049635e21262b8d981f007

diff --git a/extensions/LanguageSelector/LanguageSelector.i18n.php \
b/extensions/LanguageSelector/LanguageSelector.i18n.php index df2b504..ab3013d 100644
--- a/extensions/LanguageSelector/LanguageSelector.i18n.php
+++ b/extensions/LanguageSelector/LanguageSelector.i18n.php
@@ -29,6 +29,27 @@ $messages['qqq'] = array(
 	'languageselector-setlang' => 'Part of the "LanguageSelector" extension. This is \
the text of a submit button to select your user interface language. Mostly the button \
is not shown, but sometimes it appears next to the language selector (a dropdown box \
like in your [[Special:Preferences|user preferences]]).',  );
 
+/** Goan Konkani (Latin script) (Konknni)
+ * @author The Discoverer
+ */
+$messages['gom-latn'] = array(
+	'languageselector' => 'Bhas',
+);
+
+/** толышә зывон (толышә зывон)
+ * @author Гусейн
+ */
+$messages['tly'] = array(
+	'languageselector' => 'Зывон',
+);
+
+/** Ṫuroyo (Ṫuroyo)
+ * @author Ariyo
+ */
+$messages['tru'] = array(
+	'languageselector' => 'Leşono',
+);
+
 /** Abkhazian (Аҧсуа)
  * @author Temuri rajavi
  */
@@ -106,7 +127,15 @@ $messages['ast'] = array(
 	'languageselector-setlang' => 'establecer',
 );
 
-/** Bashkir (Башҡорт)
+/** Azerbaijani (Azərbaycanca)
+ * @author Proger
+ */
+$messages['az'] = array(
+	'languageselector' => 'Dil',
+	'languageselector-setlang' => 'Seç',
+);
+
+/** Bashkir (Башҡортса)
  * @author Assele
  * @author  устам Нурыев
  */
@@ -118,14 +147,15 @@ $messages['ba'] = array(
 
 /** Bavarian (Boarisch)
  * @author Man77
+ * @author Mucalexx
  */
 $messages['bar'] = array(
-	'languageselector' => 'Språch',
-	'languageselector-desc' => 'Språchnauswåih auf jeda Seitn, aa fia Bsuacha',
-	'languageselector-setlang' => 'setzn',
+	'languageselector' => 'Sprooch',
+	'languageselector-desc' => 'Sproochnauswoi auf jeeder Seiten, aa fyr Bsuacher',
+	'languageselector-setlang' => 'sétzen',
 );
 
-/** Belarusian (Taraškievica orthography) (Беларуская \
(тарашкевіца)) +/** Belarusian (Taraškievica orthography) \
                (‪Беларуская (тарашкевіца)‬)
  * @author Jim-by
  * @author Red Winged Duck
  */
@@ -142,6 +172,14 @@ $messages['bg'] = array(
 	'languageselector' => 'Език',
 );
 
+/** Bhojpuri (भोजपुरी)
+ * @author Anshumangupta21
+ */
+$messages['bho'] = array(
+	'languageselector' => 'भाषा',
+	'languageselector-setlang' => 'गुट',
+);
+
 /** Bengali (বাংলা)
  * @author Bellayet
  */
@@ -151,6 +189,15 @@ $messages['bn'] = array(
 	'languageselector-setlang' => 'স্থাপন',
 );
 
+/** Tibetan (བོད་ཡིག)
+ * @author Freeyak
+ */
+$messages['bo'] = array(
+	'languageselector' => 'སྐད་རིགས།',
+	'languageselector-desc' => 'ཤོག་ངོས་སོ་སོ \
ི་སྐད་རིགས་ དེམས་ཚན་དང་། \
གཞན་ལྟ་ཀློག་བྱེད་མཁན་གྱི་ཆེད་དུ \
ང་ཡིན།', +	'languageselector-setlang' => 'སྒྲིག',
+);
+
 /** Breton (Brezhoneg)
  * @author Fulup
  */
@@ -169,6 +216,13 @@ $messages['bs'] = array(
 	'languageselector-setlang' => 'postavi',
 );
 
+/** Буряад (Буряад)
+ * @author ОйЛ
+ */
+$messages['bxr'] = array(
+	'languageselector' => 'Хэлэн',
+);
+
 /** Catalan (Catal )
  * @author Jordi Roqué
  * @author SMP
@@ -225,9 +279,12 @@ $messages['cy'] = array(
 
 /** Danish (Dansk)
  * @author Jon Harald Søby
+ * @author Peter Alberti
  */
 $messages['da'] = array(
 	'languageselector' => 'Sprog',
+	'languageselector-desc' => 'Sprogvælger på alle sider, også for gæster',
+	'languageselector-setlang' => 'vælg',
 );
 
 /** German (Deutsch)
@@ -528,13 +585,13 @@ $messages['kk-arab'] = array(
 	'languageselector-setlang' => 'انىقتاۋ',
 );
 
-/** Kazakh (Cyrillic) (Қазақша (Cyrillic)) */
+/** Kazakh (Cyrillic script) (‪Қазақша (кирил)‬) */
 $messages['kk-cyrl'] = array(
 	'languageselector' => 'Тіл',
 	'languageselector-setlang' => 'анықтау',
 );
 
-/** Kazakh (Latin) (Қазақша (Latin)) */
+/** Kazakh (Latin script) (‪Qazaqşa (latın)‬) */
 $messages['kk-latn'] = array(
 	'languageselector' => 'Til',
 	'languageselector-setlang' => 'anıqtaw',
@@ -583,7 +640,14 @@ $messages['ksh'] = array(
 	'languageselector-setlang' => 'Setze',
 );
 
-/** Cornish (Kernewek)
+/** Kurdish (Latin script) (‪Kurdî (latînî)‬)
+ * @author George Animal
+ */
+$messages['ku-latn'] = array(
+	'languageselector' => 'Ziman',
+);
+
+/** Cornish (Kernowek)
  * @author Kw-Moon
  */
 $messages['kw'] = array(
@@ -638,6 +702,7 @@ $messages['lt'] = array(
  */
 $messages['ltg'] = array(
 	'languageselector' => 'Volūda',
+	'languageselector-setlang' => 'nūstateit',
 );
 
 /** Macedonian (Македонски)
@@ -698,9 +763,19 @@ $messages['myv'] = array(
 
 /** Nahuatl (Nāhuatl)
  * @author Fluence
+ * @author Teòtlalili
  */
 $messages['nah'] = array(
-	'languageselector' => 'Tlahtōlli',
+	'languageselector' => 'Tlâtòlli',
+);
+
+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+ * @author Jon Harald Søby
+ */
+$messages['nb'] = array(
+	'languageselector' => 'Språk',
+	'languageselector-desc' => 'Valg av språk på alle sider, også for gjester',
+	'languageselector-setlang' => 'sett',
 );
 
 /** Low German (Plattdüütsch)
@@ -730,15 +805,6 @@ $messages['nn'] = array(
 	'languageselector-setlang' => 'set',
 );
 
-/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
- * @author Jon Harald Søby
- */
-$messages['no'] = array(
-	'languageselector' => 'Språk',
-	'languageselector-desc' => 'Valg av språk på alle sider, også for gjester',
-	'languageselector-setlang' => 'sett',
-);
-
 /** Northern Sotho (Sesotho sa Leboa)
  * @author Mohau
  */
@@ -755,7 +821,16 @@ $messages['oc'] = array(
 	'languageselector-setlang' => 'Definir',
 );
 
-/** Ossetic (Иронау)
+/** Oriya (ଓଡ଼ିଆ)
+ * @author Jnanaranjan Sahu
+ */
+$messages['or'] = array(
+	'languageselector' => 'ଭାଷା',
+	'languageselector-desc' => 'ଭାଷା ଚୟନକାରୀ ସବୁ \
ପୃଷ୍ ାରେ, ଅତିଥି ମାନଙ୍କ ପାଇଁ \
ମଧ୍ୟ', +	'languageselector-setlang' => 'ସେଟ କରନ୍ତୁ',
+);
+
+/** Ossetic (Ирон)
  * @author Amikeco
  */
 $messages['os'] = array(
@@ -862,7 +937,16 @@ $messages['ru'] = array(
 	'languageselector-setlang' => 'установить',
 );
 
-/** Yakut (Саха тыла)
+/** Rusyn ( усиньскый)
+ * @author Gazeb
+ */
+$messages['rue'] = array(
+	'languageselector' => 'Язык',
+	'languageselector-desc' => 'Выбер языка на каждій \
сторінцї і тыж про навщівників', \
+	'languageselector-setlang' => 'становити', +);
+
+/** Sakha (Саха тыла)
  * @author HalanTul
  */
 $messages['sah'] = array(
@@ -871,7 +955,7 @@ $messages['sah'] = array(
 	'languageselector-setlang' => 'туруор',
 );
 
-/** Tachelhit (Tašlḥiyt)
+/** Tachelhit (Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ)
  * @author Zanatos
  */
 $messages['shi'] = array(
@@ -916,7 +1000,7 @@ $messages['sli'] = array(
 	'languageselector-setlang' => 'setza',
 );
 
-/** Serbian Cyrillic ekavian (Српски (ћирилица))
+/** Serbian (Cyrillic script) (‪Српски (ћирилица)‬)
  * @author Sasa Stefanovic
  * @author Михајло Анђелковић
  */
@@ -926,7 +1010,7 @@ $messages['sr-ec'] = array(
 	'languageselector-setlang' => 'постави',
 );
 
-/** Serbian Latin ekavian (Srpski (latinica))
+/** Serbian (Latin script) (‪Srpski (latinica)‬)
  * @author Michaello
  */
 $messages['sr-el'] = array(
@@ -963,6 +1047,15 @@ $messages['sv'] = array(
 	'languageselector-setlang' => 'välj',
 );
 
+/** Tamil (தமிழ்)
+ * @author Karthi.dr
+ * @author Mahir78
+ */
+$messages['ta'] = array(
+	'languageselector' => 'மொழி',
+	'languageselector-setlang' => 'அமை',
+);
+
 /** Telugu (తెలుగు)
  * @author Veeven
  */
@@ -981,7 +1074,7 @@ $messages['tet'] = array(
 	'languageselector-setlang' => 'hili',
 );
 
-/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
+/** Tajik (Cyrillic script) (Тоҷикӣ)
  * @author Ibrahim
  */
 $messages['tg-cyrl'] = array(
@@ -989,7 +1082,7 @@ $messages['tg-cyrl'] = array(
 	'languageselector-desc' => 'Забон интихобкунанда дар ҳар \
саҳифа, барои ташрифоварандагон низ',  );
 
-/** Tajik (Latin) (Тоҷикӣ (Latin))
+/** Tajik (Latin script) (tojikī)
  * @author Liangent
  */
 $messages['tg-latn'] = array(
@@ -1030,7 +1123,7 @@ $messages['tr'] = array(
 	'languageselector-setlang' => 'ayar',
 );
 
-/** Tatar (Cyrillic) (Татарча/Tatarça (Cyrillic))
+/** Tatar (Cyrillic script) (Татарча)
  * @author Ильнар
  */
 $messages['tt-cyrl'] = array(
@@ -1038,7 +1131,7 @@ $messages['tt-cyrl'] = array(
 	'languageselector-setlang' => 'урнаштыру',
 );
 
-/** Uighur (Latin) (ئۇيغۇرچە / Uyghurche‎ (Latin))
+/** Uyghur (Latin script) (Uyghurche‎)
  * @author Jose77
  */
 $messages['ug-latn'] = array(
@@ -1117,11 +1210,12 @@ $messages['zh-hans'] = array(
 
 /** Traditional Chinese (‪中文(繁體)‬)
  * @author Liangent
+ * @author Mark85296341
  * @author Shinjiman
  */
 $messages['zh-hant'] = array(
 	'languageselector' => '語言',
-	'languageselector-desc' => '在每一 面上添 語言選擇 \
,對匿名訪問者亦有效', +	'languageselector-desc' => '在每一 面上 \
入語言選擇 ,對匿名訪問者亦有效',  'languageselector-setlang' => \
'設定',  );
 
diff --git a/extensions/LanguageSelector/LanguageSelector.js \
b/extensions/LanguageSelector/LanguageSelector.js index 860ca95..34665e2 100644
--- a/extensions/LanguageSelector/LanguageSelector.js
+++ b/extensions/LanguageSelector/LanguageSelector.js
@@ -1,4 +1,4 @@
-addOnloadHook(function() { 
+$( function() {
 	var i = 1;
 	while ( true ) {
 		var btn = document.getElementById("languageselector-commit-"+i);
@@ -21,4 +21,4 @@ addOnloadHook(function() {
 
 		i++;
 	}
-});
\ No newline at end of file
+});
diff --git a/extensions/LanguageSelector/LanguageSelector.php \
b/extensions/LanguageSelector/LanguageSelector.php index e334035..dd05a96 100644
--- a/extensions/LanguageSelector/LanguageSelector.php
+++ b/extensions/LanguageSelector/LanguageSelector.php
@@ -44,8 +44,7 @@ $wgLanguageSelectorDetectLanguage = \
LANGUAGE_SELECTOR_PREFER_CLIENT_LANG;  
 /**
 * Languages to offer in the language selector. Per default, this includes all \
                languages MediaWiki knows
-* about by virtue of $wgLanguageNames. A shorter list may be more usable, though.
-* If the Polyglot extension is installed, $wgPolyglotLanguages is used as fallback.
+* about by virtue of languages/Names.php. A shorter list may be more usable, though.
 */
 $wgLanguageSelectorLanguages = null;
 
@@ -75,150 +74,177 @@ $wgHooks['AddNewAccount'][] = \
'wfLanguageSelectorAddNewAccount';  $wgHooks['BeforePageDisplay'][] = \
'wfLanguageSelectorBeforePageDisplay';  $wgHooks['GetCacheVaryCookies'][] = \
'wfLanguageSelectorGetCacheVaryCookies';  $wgHooks['ParserFirstCallInit'][] = \
'wfLanguageSelectorSetHook'; +$wgHooks['UserGetLanguageObject'][] = \
'wfLanguageSelectorGetLanguageCode';  
 $wgExtensionFunctions[] = 'wfLanguageSelectorExtension';
 
 $wgParserOutputHooks['languageselector'] = 'wfLanguageSelectorAddJavascript';
 
-$wgLanguageSelectorRequestedLanguage = null;
-$wgLanguageSelectorFormUsed = false;
-
+$wgResourceModules['ext.languageSelector'] = array(
+	'scripts' => 'LanguageSelector.js',
+	'localBasePath' => dirname( __FILE__ ),
+	'remoteExtPath' => 'LanguageSelector'
+);
 
 $dir = dirname(__FILE__) . '/';
 $wgExtensionMessagesFiles['LanguageSelector'] = $dir . 'LanguageSelector.i18n.php';
 $wgJSAutoloadClasses['LanguageSelector'] = \
'extensions/LanguageSelector/LanguageSelector.js';  
-function wfLanguageSelectorSetHook() {
-	global $wgParser;
-	$wgParser->setHook( 'languageselector', 'wfLanguageSelectorTag' );
+/**
+ * @param  $parser Parser
+ * @return bool
+ */
+function wfLanguageSelectorSetHook( $parser ) {
+	$parser->setHook( 'languageselector', 'wfLanguageSelectorTag' );
 	return true;
 }
 
 function wfLanguageSelectorExtension() {
-	wfLoadExtensionMessages( 'LanguageSelector' );
-	global $wgLanguageSelectorLanguages, $wgLanguageSelectorDetectLanguage,
-		$wgLanguageSelectorRequestedLanguage, $wgLanguageSelectorLocation,
-		$wgLanguageSelectorShowAll, $wgCommandLineMode;
-	global $wgUser, $wgLang, $wgRequest, $wgCookiePrefix, $wgCookiePath, $wgHooks;
+	global $wgLanguageSelectorLocation,
+		$wgLanguageSelectorShowAll, $wgHooks;
 
-	if ( $wgCommandLineMode ) {
-		return true;
-	}
+	// We'll probably be beaten to this by the call in \
wfLanguageSelectorGetLanguageCode(), +	// but just in case, call this to make sure \
the global is properly initialised +	wfGetLanguageSelectorLanguages();
 
-	if ( $wgLanguageSelectorLanguages === null ) {
-		$wgLanguageSelectorLanguages = @$GLOBALS['wgPolyglotLanguages'];
+	if ( $wgLanguageSelectorLocation != LANGUAGE_SELECTOR_MANUAL && \
$wgLanguageSelectorLocation != LANGUAGE_SELECTOR_AT_TOP_OF_TEXT ) { +		switch ( \
$wgLanguageSelectorLocation ) { +			case LANGUAGE_SELECTOR_IN_TOOLBOX:
+				$wgHooks['SkinTemplateToolboxEnd'][] = 'wfLanguageSelectorSkinHook';
+				break;
+			default:
+				$wgHooks['SkinTemplateOutputPageBeforeExec'][] = \
'wfLanguageSelectorSkinTemplateOutputPageBeforeExec'; +				break;
+		}
 	}
+}
 
+function wfGetLanguageSelectorLanguages(){
+	global $wgLanguageSelectorLanguages, $wgLanguageSelectorShowAll;
 	if ( $wgLanguageSelectorLanguages === null ) {
 		$wgLanguageSelectorLanguages = array_keys( Language::getLanguageNames( \
!$wgLanguageSelectorShowAll ) );  sort( $wgLanguageSelectorLanguages );
 	}
+	return $wgLanguageSelectorLanguages;
+}
+
+/**
+ * Hook to UserGetLanguageObject
+ * @param  $user User
+ * @param  $code String
+ * @return bool
+ */
+function wfLanguageSelectorGetLanguageCode( $user, &$code ) {
+	global $wgLanguageSelectorDetectLanguage,
+		$wgCommandLineMode, $wgRequest, $wgContLang;
+
+	if ( $wgCommandLineMode ) {
+		return true;
+	}
 
 	$setlang = $wgRequest->getVal( 'setlang' );
-	if ( $setlang && !in_array( $setlang, $wgLanguageSelectorLanguages ) )
-		$setlang = null; //ignore invalid
+	if ( $setlang && !in_array( $setlang, wfGetLanguageSelectorLanguages() ) ) {
+		$setlang = null; // ignore invalid
+	}
 
 	if ( $setlang ) {
-		setcookie( $wgCookiePrefix . 'LanguageSelectorLanguage', $setlang, 0, \
                $wgCookiePath );
-		$wgLanguageSelectorRequestedLanguage = $setlang;
+		$wgRequest->response()->setcookie( 'LanguageSelectorLanguage', $setlang );
+		$requestedLanguage = $setlang;
 	} else {
-		$wgLanguageSelectorRequestedLanguage = \
@$_COOKIE[$wgCookiePrefix.'LanguageSelectorLanguage']; +		$requestedLanguage = \
$wgRequest->getCookie( 'LanguageSelectorLanguage' );  }
 
-	if ( $setlang && !$wgUser->isAnon() ) {
-		if ( $setlang != $wgUser->getOption( 'language' ) ) {
-			$wgUser->setOption( 'language', $wgLanguageSelectorRequestedLanguage );
-			$wgUser->saveSettings();
-			// Reset $wgLang so that user's language is immediately changed
-			$wgLang = new StubUserLang;
+	if ( $setlang && !$user->isAnon() ) {
+		if ( $setlang != $user->getOption( 'language' ) ) {
+			$user->setOption( 'language', $requestedLanguage );
+			$user->saveSettings();
+			$code = $requestedLanguage;
 		}
 	}
 
-	if ( !$wgRequest->getVal( 'uselang' ) && $wgUser->isAnon() ) {
-
-		//NOTE: we need this for anons, so squids don't get confused.
-		//      but something is still wrong with caching...
-		header( 'Vary: Cookie', false ); //hrm, this is pretty BAD.
-		header( 'Vary: Accept-Language', false );
-
-		if ( $wgLanguageSelectorRequestedLanguage || $wgLanguageSelectorDetectLanguage != \
                LANGUAGE_SELECTOR_USE_CONTENT_LANG ) {
-
-			if ( !class_exists( 'StubAutoLang' ) ) {
-				class StubAutoLang extends StubObject {
-					function __construct() {
-						parent::__construct( 'wgLang' );
-					}
-				
-					function __call( $name, $args ) {
-						return $this->_call( $name, $args );
+	if ( !$wgRequest->getVal( 'uselang' ) && $user->isAnon() ) {
+		if ( $wgLanguageSelectorDetectLanguage != LANGUAGE_SELECTOR_USE_CONTENT_LANG ) {
+			if ( $requestedLanguage ) {
+				$code = $requestedLanguage;
+			} else {
+				$languages = $wgRequest->getAcceptLang();
+
+				// see if the content language is accepted by the client.
+				if ( $wgLanguageSelectorDetectLanguage != LANGUAGE_SELECTOR_PREFER_CONTENT_LANG
+					|| !array_key_exists( $wgContLang->getCode(), $languages ) )
+				{
+
+					$supported = wfGetLanguageSelectorLanguages();
+					// look for a language that is acceptable to the client
+					// and known to the wiki.
+					foreach( $languages as $reqCode => $q ) {
+						if ( in_array( $reqCode, $supported ) ) {
+							$code = $reqCode;
+							break;
+						}
 					}
-				
-					//partially copied from StubObject.php. There should be a better way...
-					function _newObject() {
-						global $wgContLanguageCode, $wgContLang, $wgLanguageSelectorDetectLanguage, \
                $wgLanguageSelectorRequestedLanguage;
-
-						$code = $wgLanguageSelectorRequestedLanguage;
-						if (!$code) $code = wfLanguageSelectorDetectLanguage( \
                $wgLanguageSelectorDetectLanguage );
-
-						if( $code == $wgContLanguageCode ) {
-							return $wgContLang;
-						} else {
-							$obj = Language::factory( $code );
-							return $obj;
+
+					// Apparently Safari sends stupid things like "de-de" only.
+					// Try again with stripped codes.
+					foreach( $languages as $reqCode => $q ) {
+						$stupidPHP = explode( '-', $reqCode, 2 );
+						$bareCode = array_shift( $stupidPHP );
+						if ( in_array( $bareCode, $supported ) ) {
+							$code = $bareCode;
+							break;
 						}
 					}
 				}
 			}
-	
-			$wgLang = new StubAutoLang;
-		}
-	}
-
-	if ( $wgLanguageSelectorLocation != LANGUAGE_SELECTOR_MANUAL && \
                $wgLanguageSelectorLocation != LANGUAGE_SELECTOR_AT_TOP_OF_TEXT ) {
-		switch ( $wgLanguageSelectorLocation ) {
-			case LANGUAGE_SELECTOR_IN_TOOLBOX:
-				$wgHooks['SkinTemplateToolboxEnd'][] = 'wfLanguageSelectorSkinHook';
-				break;
-			default:
-				$wgHooks['SkinTemplateOutputPageBeforeExec'][] = \
                'wfLanguageSelectorSkinTemplateOutputPageBeforeExec';
-				break;
 		}
 	}
 
+	return true;
 }
 
+/**
+ * @param  $out OutputPage
+ * @return bool
+ */
 function wfLanguageSelectorBeforePageDisplay( &$out ) {
-	global $wgExtensionAssetsPath, $wgLanguageSelectorLocation, \
$wgLanguageSelectorFormUsed; +	global $wgLanguageSelectorLocation;
+
+	if ( $wgLanguageSelectorLocation == LANGUAGE_SELECTOR_MANUAL ) {
+		return true;
+	}
 
 	if ( $wgLanguageSelectorLocation == LANGUAGE_SELECTOR_AT_TOP_OF_TEXT ) {
-		$html = wfLanguageSelectorHTML();
+		$html = wfLanguageSelectorHTML( $out->getTitle() );
 		$out->mBodytext = $html . $out->mBodytext;
 	}
 
-	if ( $wgLanguageSelectorFormUsed ||
-		$wgLanguageSelectorLocation != LANGUAGE_SELECTOR_MANUAL )
-	{
-		$out->addScriptFile( $wgExtensionAssetsPath .
-			'/LanguageSelector/LanguageSelector.js' );
-	}
+	$out->addModules( 'ext.languageSelector' );
 
 	return true;
 }
 
-function wfLanguageSelectorGetCacheVaryCookies( &$cookies ) {
+function wfLanguageSelectorGetCacheVaryCookies( $out, &$cookies ) {
 	global $wgCookiePrefix;
-
 	$cookies[] = $wgCookiePrefix.'LanguageSelectorLanguage';
-
 	return true;
 }
 
-function wfLanguageSelectorSkinHook( &$out ) {
-	$html = wfLanguageSelectorHTML();
+/**
+ * @param $skin Skin
+ * @return bool
+ */
+function wfLanguageSelectorSkinHook( &$skin ) {
+	$html = wfLanguageSelectorHTML( $skin->getTitle() );
 	print $html;
 	return true;
 }
 
+/**
+ * @param  $input String
+ * @param  $args Array
+ * @param  $parser Parser
+ * @return string
+ */
 function wfLanguageSelectorTag( $input, $args, $parser ) {
 	$style = @$args['style'];
 	$class = @$args['class'];
@@ -243,7 +269,7 @@ function wfLanguageSelectorTag( $input, $args, $parser ) {
 		$showcode = strtolower( $showcode );
 		if ( $showcode == "true" || $showcode == "yes" || $showcode == "on" ) {
 			$showcode = true;
-		} else if ( $showcode == "false" || $showcode == "no" || $showcode == "off" ) {
+		} elseif ( $showcode == "false" || $showcode == "no" || $showcode == "off" ) {
 			$showcode = false;
 		} else {
 			$showcode = null;
@@ -255,26 +281,31 @@ function wfLanguageSelectorTag( $input, $args, $parser ) {
 	# So that this also works with parser cache
 	$parser->getOutput()->addOutputHook( 'languageselector' );
 
-	return wfLanguageSelectorHTML( $style, $class, $selectorstyle, $buttonstyle, \
$showcode ); +	return wfLanguageSelectorHTML( $parser->getTitle(), $style, $class, \
$selectorstyle, $buttonstyle, $showcode );  }
 
+/**
+ * @param  $skin Skin
+ * @param  $tpl QuickTemplate
+ * @return bool
+ */
 function wfLanguageSelectorSkinTemplateOutputPageBeforeExec( &$skin, &$tpl ) {
-	global $wgLanguageSelectorLocation, $wgLanguageSelectorLanguages;
-	global $wgLang, $wgContLang, $wgTitle;
+	global $wgLanguageSelectorLocation;
+	global $wgLang, $wgContLang;
 
 	if ($wgLanguageSelectorLocation == LANGUAGE_SELECTOR_AS_PORTLET) {
 		$code = $wgLang->getCode();
 		$lines = array();
-		foreach ($wgLanguageSelectorLanguages as $ln) {
+		foreach ( wfGetLanguageSelectorLanguages() as $ln ) {
 			$lines[] = array(
-				$href = $wgTitle->getFullURL( 'setlang=' . $ln ),
+				$href = $skin->getTitle()->getFullURL( 'setlang=' . $ln ),
 				'text' => $wgContLang->getLanguageName($ln),
 				'href' => $href,
 				'id' => 'n-languageselector',
 				'active' => ($ln == $code),
 			);
 		}
-		
+
 		$tpl->data['sidebar']['languageselector'] = $lines;
 		return true;
 	}
@@ -287,85 +318,19 @@ function wfLanguageSelectorSkinTemplateOutputPageBeforeExec( \
&$skin, &$tpl ) {  case LANGUAGE_SELECTOR_INTO_SUBTITLE: $key = 'subtitle'; break;
 		case LANGUAGE_SELECTOR_INTO_CATLINKS: $key = 'catlinks'; break;
 	}
-	
+
 	if ($key) {
-		$html = wfLanguageSelectorHTML();
+		$html = wfLanguageSelectorHTML( $skin->getTitle() );
 		$tpl->set( $key, $tpl->data[ $key ] . $html );
 	}
 
 	return true;
 }
 
-function wfLanguageSelectorDetectLanguage( $mode ) {
-	global $wgContLang, $wgLanguageSelectorLanguages;
-
-	$contLang = $wgContLang->getCode();
-
-	if ( !$mode || $mode == LANGUAGE_SELECTOR_USE_CONTENT_LANG ) {
-		return $contLang;
-	}
-
-	/**
-	* get accepted languages from Accept-Languages
-	* HTTP header.
-	*/
-	$accept = @$_SERVER["HTTP_ACCEPT_LANGUAGE"];
-
-	if ( empty( $accept ) )
-		return $contLang;
-
-	$accept = explode( ',', $accept );
-
-	/**
-	* normalize accepted languages
-	*/
-	$languages = array();
-	foreach ( $accept as $lan ) {
-		@list( $value, $qpart ) = explode( ';', trim( $lan ) );
-		$match = array();
-		if( !isset( $qpart ) ) {
-			$languages[$value] = 1.0;
-		} elseif( preg_match( '/q\s*=\s*(\d*\.\d+)/', $qpart, $match ) ) {
-			$languages[$value] = floatval( $match[1] );
-		}
-	}
-
-	/**
-	* see if the content language is accepted by the
-	* client.
-	*/
-	if ( $mode == LANGUAGE_SELECTOR_PREFER_CONTENT_LANG && array_key_exists( $contLang, \
                $languages ) ) {
-		return $contLang;
-	}
-
-	arsort( $languages, SORT_NUMERIC );
-
-	/**
-	* look for a language that is acceptable to the client
-	* and known to the wiki.
-	*/
-	foreach( $languages as $code => $q ) {
-		/**
-		* TODO: only accept languages for which an implementation exists.
-		*       this is disabled, because it's slow. Note that this code is
-		*       executed for every page request!
-		*/
-		/*
-		global $IP;
-		$langfile="$IP/languages/Language".str_replace('-', '_', ucfirst($code)).".php";
-		if(!file_exists($langfile)) {
-			continue;
-		}
-		*/
-
-		if ( in_array( $code, $wgLanguageSelectorLanguages ) ) {
-			return $code;
-		}
-	}
-
-	return $contLang;
-}
-
+/**
+ * @param  $u User
+ * @return bool
+ */
 function wfLanguageSelectorAddNewAccount( $u ) {
 	global $wgUser, $wgLang;
 
@@ -380,20 +345,23 @@ function wfLanguageSelectorAddNewAccount( $u ) {
 	return true;
 }
 
+/**
+ * @param  $outputPage OutputPage
+ * @param  $parserOutput ParserOutput
+ * @param  $data
+ * @return void
+ */
 function wfLanguageSelectorAddJavascript( $outputPage, $parserOutput, $data ) {
-	global $wgLanguageSelectorFormUsed;
-
-	$wgLanguageSelectorFormUsed = true;
+	$outputPage->addModules( 'ext.languageSelector' );
 }
 
-function wfLanguageSelectorHTML( $style = null, $class = null, $selectorstyle = \
                null, $buttonstyle = null, $showCode = null ) {
-	global $wgLanguageSelectorLanguages, $wgTitle, $wgLang, $wgContLang, $wgScript,
-		$wgLanguageSelectorShowCode, $wgLanguageSelectorFormUsed;
+function wfLanguageSelectorHTML( Title $title, $style = null, $class = null, \
$selectorstyle = null, $buttonstyle = null, $showCode = null ) { +	global $wgLang, \
$wgContLang, $wgScript, +		$wgLanguageSelectorShowCode;
 
 	if ( $showCode === null ) {
 		$showCode = $wgLanguageSelectorShowCode;
 	}
-	$wgLanguageSelectorFormUsed = true;
 
 	static $id = 0;
 	$id += 1;
@@ -413,14 +381,14 @@ function wfLanguageSelectorHTML( $style = null, $class = null, \
$selectorstyle =  'action' => $wgScript,
 		'style' => 'display:inline;'
 	) );
-	$html .= Xml::hidden( 'title', $wgTitle->getPrefixedDBKey() );
+	$html .= Html::Hidden( 'title', $title->getPrefixedDBKey() );
 	$html .= Xml::openElement('select', array(
 		'name' => 'setlang',
 		'id' => 'languageselector-select-' . $id,
 		'style' => $selectorstyle
 	) );
 
-	foreach ( $wgLanguageSelectorLanguages as $ln ) {
+	foreach ( wfGetLanguageSelectorLanguages() as $ln ) {
 		$name = $wgContLang->getLanguageName( $ln );
 		if ( $showCode ) $name = wfBCP47( $ln ) . ' - ' . $name;
 
@@ -435,4 +403,3 @@ function wfLanguageSelectorHTML( $style = null, $class = null, \
$selectorstyle =  
 	return $html;
 }
-


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic