Merge "Update formatting and docs"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 7 Apr 2013 15:32:52 +0000 (15:32 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 7 Apr 2013 15:32:52 +0000 (15:32 +0000)
193 files changed:
RELEASE-NOTES-1.21
RELEASE-NOTES-1.22
includes/AutoLoader.php
includes/DefaultSettings.php
includes/Exception.php
includes/ExternalUser.php [deleted file]
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/HttpFunctions.php
includes/OutputPage.php
includes/Preferences.php
includes/Skin.php
includes/SkinLegacy.php
includes/Title.php
includes/User.php
includes/WikiPage.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiImageRotate.php
includes/api/ApiMain.php
includes/api/ApiPageSet.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryRecentChanges.php
includes/db/Database.php
includes/db/LoadBalancer.php
includes/debug/Debug.php
includes/diff/DifferenceEngine.php
includes/extauth/Hardcoded.php [deleted file]
includes/extauth/MediaWiki.php [deleted file]
includes/extauth/vB.php [deleted file]
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/lockmanager/LockManager.php
includes/installer/Installer.i18n.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/job/Job.php
includes/job/JobQueue.php
includes/job/JobQueueAggregatorRedis.php
includes/job/JobQueueDB.php
includes/job/JobQueueRedis.php
includes/objectcache/SqlBagOStuff.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialProtectedtitles.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialStatistics.php
includes/specials/SpecialUserlogin.php
includes/upload/UploadBase.php
languages/Language.php
languages/messages/MessagesAf.php
languages/messages/MessagesAr.php
languages/messages/MessagesAst.php
languages/messages/MessagesAzb.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDv.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHsb.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesJv.php
languages/messages/MessagesKa.php
languages/messages/MessagesKo.php
languages/messages/MessagesKsh.php
languages/messages/MessagesLa.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesLv.php
languages/messages/MessagesMap_bms.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMyv.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesSi.php
languages/messages/MessagesSl.php
languages/messages/MessagesSq.php
languages/messages/MessagesSv.php
languages/messages/MessagesTe.php
languages/messages/MessagesTh.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/archives/patch-eu_local_id.sql [deleted file]
maintenance/archives/patch-external_user.sql [deleted file]
maintenance/archives/patch-img_media_mime-index.sql [new file with mode: 0644]
maintenance/archives/patch-iwl_prefix_title_from-non-unique.sql [new file with mode: 0644]
maintenance/archives/patch-iwlinks-from-title-index.sql [new file with mode: 0644]
maintenance/archives/patch-kill-iwl_pft.sql [deleted file]
maintenance/language/messageTypes.inc
maintenance/language/messages.inc
maintenance/mergeMessageFileList.php
maintenance/mssql/tables.sql
maintenance/oracle/tables.sql
maintenance/postgres/archives/patch-external_user.sql [deleted file]
maintenance/postgres/archives/patch-kill-iwl_pft.sql [deleted file]
maintenance/postgres/archives/patch-rename-iwl_prefix.sql
maintenance/postgres/tables.sql
maintenance/showJobs.php
maintenance/sqlite/archives/patch-kill-iwl_pft.sql [deleted file]
maintenance/sqlite/archives/patch-rename-iwl_prefix.sql
maintenance/tables.sql
maintenance/updateCollation.php
resources/Resources.php
resources/jquery/jquery.makeCollapsible.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.user.js
resources/mediawiki/mediawiki.util.js
resources/startup.js
skins/Chick.php [deleted file]
skins/MySkin.php [deleted file]
skins/Nostalgia.php [deleted file]
skins/Simple.php [deleted file]
skins/Standard.php [deleted file]
skins/chick/IE60Fixes.css [deleted file]
skins/chick/main.css [deleted file]
skins/monobook/main.css
skins/myskin/main.css [deleted file]
skins/nostalgia/screen.css [deleted file]
skins/simple/discussionitem_icon.gif [deleted file]
skins/simple/external.png [deleted file]
skins/simple/file_icon.gif [deleted file]
skins/simple/link_icon.gif [deleted file]
skins/simple/lock_icon.gif [deleted file]
skins/simple/mail_icon.gif [deleted file]
skins/simple/main.css [deleted file]
skins/standard/main.css [deleted file]
skins/vector/screen.css
tests/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/AutoLoaderTest.php
tests/phpunit/data/db/sqlite/tables-1.16.sql
tests/phpunit/data/db/sqlite/tables-1.17.sql
tests/phpunit/data/db/sqlite/tables-1.18.sql
tests/qunit/QUnitTestResources.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/startup.test.js [new file with mode: 0644]

index 1824910..25401dc 100644 (file)
@@ -328,7 +328,7 @@ changes to languages because of Bugzilla reports.
   were using it, you have to either copy it to your extension, or install the
   Vector extension (and possibly disable its features using config settings if
   you don't want them).
-* Experimental IBM DB2 support was removed due to lack of interest and maintainership
+* Experimental IBM DB2 support was removed due to lack of interest and maintainership.
 * BREAKING CHANGE: Filenames of maintenance scripts were standardized into
   lowerCamelCase format, and made more explicit:
   - clear_stats.php -> clearCacheStats.php
@@ -344,7 +344,7 @@ changes to languages because of Bugzilla reports.
   - ShowStats -> ShowSiteStats.
 * BREAKING CHANGE: (bug 38244) Removed the mediawiki.api.titleblacklist module
   and moved it to the TitleBlacklist extension.
-* The Special:ActiveUsers special page was removed
+* The Special:ActiveUsers special page was removed.
 * BREAKING CHANGE: Implementation of MediaWiki's JS and JSON value encoding
   has changed:
 ** MediaWiki no longer supports PHP installations in which the native JSON
@@ -354,11 +354,13 @@ changes to languages because of Bugzilla reports.
 ** The sets of characters escaped by default, along with the precise escape
    sequences used, have changed (except for the Xml::escapeJsString()
    function, which is now deprecated).
-* BREAKING CHANGE: The Services_JSON class has been removed; if necessary,
+* BREAKING CHANGE: The Services_JSON class has been removed. If necessary,
   be sure to upgrade affected extensions at the same time (e.g. Collection).
 * Calling Linker methods using a skin will now output deprecation warnings.
 * Pages with a returnto (such as the page when you login or logout), no
   longer have a rel="next" link tag.
+* The Quickbar feature of the legacy skin model and the last remnants of it
+  throughout the code base have been removed.
 
 == Compatibility ==
 
index beecf18..1d48023 100644 (file)
@@ -25,6 +25,16 @@ changes to languages because of Bugzilla reports.
 
 === Other changes in 1.22 ===
 * redirect.php was removed. It was unused.
+* ClickTracking integration was dropped from the mediaWiki.user.bucket
+  JavaScript function. The 'tracked' option is now ignored.
+* BREAKING CHANGE: Legacy skins Simple, MySkin and Standard were all removed.
+  Nostalgia was moved to an extension.
+* Event namespace used by jquery.makeCollapsible has been changed from
+  'mw-collapse' to 'mw-collapsible' for consistency with the module name.
+* BREAKING CHANGE: The "ExternalAuth" authentication subsystem was removed, along
+  with its associated globals of $wgExternalAuthType, $wgExternalAuthConf,
+  $wgAutocreatePolicy and $wgAllowPrefChange. Affected users are encouraged to
+  use AuthPlugin for external authentication/authorization needs.
 
 == Compatibility ==
 
index 9ef3165..33a244b 100644 (file)
@@ -96,7 +96,6 @@ $wgAutoloadLocalClasses = array(
        'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
        'ExternalStoreMedium' => 'includes/externalstore/ExternalStoreMedium.php',
        'ExternalStoreMwstore' => 'includes/externalstore/ExternalStoreMwstore.php',
-       'ExternalUser' => 'includes/ExternalUser.php',
        'FakeTitle' => 'includes/FakeTitle.php',
        'Fallback' => 'includes/Fallback.php',
        'FatalError' => 'includes/Exception.php',
@@ -156,7 +155,6 @@ $wgAutoloadLocalClasses = array(
        'LCStore_CDB' => 'includes/cache/LocalisationCache.php',
        'LCStore_DB' => 'includes/cache/LocalisationCache.php',
        'LCStore_Null' => 'includes/cache/LocalisationCache.php',
-       'LegacyTemplate' => 'includes/SkinLegacy.php',
        'License' => 'includes/Licenses.php',
        'Licenses' => 'includes/Licenses.php',
        'Linker' => 'includes/Linker.php',
@@ -229,7 +227,6 @@ $wgAutoloadLocalClasses = array(
        'SiteStatsInit' => 'includes/SiteStats.php',
        'SiteStatsUpdate' => 'includes/SiteStats.php',
        'Skin' => 'includes/Skin.php',
-       'SkinLegacy' => 'includes/SkinLegacy.php',
        'SkinTemplate' => 'includes/SkinTemplate.php',
        'SpecialCreateAccount' => 'includes/SpecialPage.php',
        'SpecialListAdmins' => 'includes/SpecialPage.php',
@@ -545,11 +542,6 @@ $wgAutoloadLocalClasses = array(
        'WikiDiff3' => 'includes/diff/WikiDiff3.php',
        'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
 
-       # includes/extauth
-       'ExternalUser_Hardcoded' => 'includes/extauth/Hardcoded.php',
-       'ExternalUser_MediaWiki' => 'includes/extauth/MediaWiki.php',
-       'ExternalUser_vB' => 'includes/extauth/vB.php',
-
        # includes/filebackend
        'FileBackendGroup' => 'includes/filebackend/FileBackendGroup.php',
        'FileBackend' => 'includes/filebackend/FileBackend.php',
@@ -1089,17 +1081,10 @@ $wgAutoloadLocalClasses = array(
        'CologneBlueTemplate' => 'skins/CologneBlue.php',
        'ModernTemplate' => 'skins/Modern.php',
        'MonoBookTemplate' => 'skins/MonoBook.php',
-       'NostalgiaTemplate' => 'skins/Nostalgia.php',
-       'SkinChick' => 'skins/Chick.php',
        'SkinCologneBlue' => 'skins/CologneBlue.php',
        'SkinModern' => 'skins/Modern.php',
        'SkinMonoBook' => 'skins/MonoBook.php',
-       'SkinMySkin' => 'skins/MySkin.php',
-       'SkinNostalgia' => 'skins/Nostalgia.php',
-       'SkinSimple' => 'skins/Simple.php',
-       'SkinStandard' => 'skins/Standard.php',
        'SkinVector' => 'skins/Vector.php',
-       'StandardTemplate' => 'skins/Standard.php',
        'VectorTemplate' => 'skins/Vector.php',
 );
 
index 8a5a222..d660f50 100644 (file)
@@ -3672,7 +3672,6 @@ $wgDefaultUserOptions = array(
        'numberheadings' => 0,
        'previewonfirst' => 0,
        'previewontop' => 1,
-       'quickbar' => 5,
        'rcdays' => 7,
        'rclimit' => 50,
        'rememberpassword' => 0,
@@ -3724,63 +3723,6 @@ $wgInvalidUsernameCharacters = '@';
  */
 $wgUserrightsInterwikiDelimiter = '@';
 
-/**
- * Use some particular type of external authentication.  The specific
- * authentication module you use will normally require some extra settings to
- * be specified.
- *
- * null indicates no external authentication is to be used.  Otherwise,
- * $wgExternalAuthType must be the name of a non-abstract class that extends
- * ExternalUser.
- *
- * Core authentication modules can be found in includes/extauth/.
- */
-$wgExternalAuthType = null;
-
-/**
- * Configuration for the external authentication.  This may include arbitrary
- * keys that depend on the authentication mechanism.  For instance,
- * authentication against another web app might require that the database login
- * info be provided.  Check the file where your auth mechanism is defined for
- * info on what to put here.
- */
-$wgExternalAuthConf = array();
-
-/**
- * When should we automatically create local accounts when external accounts
- * already exist, if using ExternalAuth?  Can have three values: 'never',
- * 'login', 'view'.  'view' requires the external database to support cookies,
- * and implies 'login'.
- *
- * TODO: Implement 'view' (currently behaves like 'login').
- */
-$wgAutocreatePolicy = 'login';
-
-/**
- * Policies for how each preference is allowed to be changed, in the presence
- * of external authentication.  The keys are preference keys, e.g., 'password'
- * or 'emailaddress' (see Preferences.php et al.).  The value can be one of the
- * following:
- *
- * - local: Allow changes to this pref through the wiki interface but only
- * apply them locally (default).
- * - semiglobal: Allow changes through the wiki interface and try to apply them
- * to the foreign database, but continue on anyway if that fails.
- * - global: Allow changes through the wiki interface, but only let them go
- * through if they successfully update the foreign database.
- * - message: Allow no local changes for linked accounts; replace the change
- * form with a message provided by the auth plugin, telling the user how to
- * change the setting externally (maybe providing a link, etc.).  If the auth
- * plugin provides no message for this preference, hide it entirely.
- *
- * Accounts that are not linked to an external account are never affected by
- * this setting.  You may want to look at $wgHiddenPrefs instead.
- * $wgHiddenPrefs supersedes this option.
- *
- * TODO: Implement message, global.
- */
-$wgAllowPrefChange = array();
-
 /**
  * This is to let user authenticate using https when they come from http.
  * Based on an idea by George Herbert on wikitech-l:
index dc34320..21952bb 100644 (file)
@@ -247,7 +247,7 @@ class MWException extends Exception {
         * It will be either HTML or plain text based on isCommandLine().
         */
        function report() {
-               global $wgLogExceptionBacktrace;
+               global $wgLogExceptionBacktrace, $wgMimeType;
                $log = $this->getLogMessage();
 
                if ( $log ) {
@@ -267,6 +267,7 @@ class MWException extends Exception {
                } else {
                        header( "HTTP/1.1 500 MediaWiki exception" );
                        header( "Status: 500 MediaWiki exception", true );
+                       header( "Content-Type: $wgMimeType; charset=utf-8", true );
 
                        $this->reportHTML();
                }
diff --git a/includes/ExternalUser.php b/includes/ExternalUser.php
deleted file mode 100644 (file)
index 580b989..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-/**
- * Authentication with a foreign database
- *
- * Copyright © 2009 Aryeh Gregor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * @defgroup ExternalUser ExternalUser
- */
-
-/**
- * A class intended to supplement, and perhaps eventually replace, AuthPlugin.
- * See: http://www.mediawiki.org/wiki/ExternalAuth
- *
- * The class represents a user whose data is in a foreign database.  The
- * database may have entirely different conventions from MediaWiki, but it's
- * assumed to at least support the concept of a user id (possibly not an
- * integer), a user name (possibly not meeting MediaWiki's username
- * requirements), and a password.
- *
- * @ingroup ExternalUser
- */
-abstract class ExternalUser {
-       protected function __construct() {}
-
-       /**
-        * Wrappers around initFrom*().
-        */
-
-       /**
-        * @param $name string
-        * @return mixed ExternalUser, or false on failure
-        */
-       public static function newFromName( $name ) {
-               global $wgExternalAuthType;
-               if ( is_null( $wgExternalAuthType ) ) {
-                       return false;
-               }
-               $obj = new $wgExternalAuthType;
-               if ( !$obj->initFromName( $name ) ) {
-                       return false;
-               }
-               return $obj;
-       }
-
-       /**
-        * @param $id string
-        * @return mixed ExternalUser, or false on failure
-        */
-       public static function newFromId( $id ) {
-               global $wgExternalAuthType;
-               if ( is_null( $wgExternalAuthType ) ) {
-                       return false;
-               }
-               $obj = new $wgExternalAuthType;
-               if ( !$obj->initFromId( $id ) ) {
-                       return false;
-               }
-               return $obj;
-       }
-
-       /**
-        * @return mixed ExternalUser, or false on failure
-        */
-       public static function newFromCookie() {
-               global $wgExternalAuthType;
-               if ( is_null( $wgExternalAuthType ) ) {
-                       return false;
-               }
-               $obj = new $wgExternalAuthType;
-               if ( !$obj->initFromCookie() ) {
-                       return false;
-               }
-               return $obj;
-       }
-
-       /**
-        * Creates the object corresponding to the given User object, assuming the
-        * user exists on the wiki and is linked to an external account.  If either
-        * of these is false, this will return false.
-        *
-        * This is a wrapper around newFromId().
-        *
-        * @param $user User
-        * @return ExternalUser|bool False on failure
-        */
-       public static function newFromUser( $user ) {
-               global $wgExternalAuthType;
-               if ( is_null( $wgExternalAuthType ) ) {
-                       # Short-circuit to avoid database query in common case so no one
-                       # kills me
-                       return false;
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-               $id = $dbr->selectField( 'external_user', 'eu_external_id',
-                       array( 'eu_local_id' => $user->getId() ), __METHOD__ );
-               if ( $id === false ) {
-                       return false;
-               }
-               return self::newFromId( $id );
-       }
-
-       /**
-        * Given a name, which is a string exactly as input by the user in the
-        * login form but with whitespace stripped, initialize this object to be
-        * the corresponding ExternalUser.  Return true if successful, otherwise
-        * false.
-        *
-        * @param $name string
-        * @return bool Success?
-        */
-       abstract protected function initFromName( $name );
-
-       /**
-        * Given an id, which was at some previous point in history returned by
-        * getId(), initialize this object to be the corresponding ExternalUser.
-        * Return true if successful, false otherwise.
-        *
-        * @param $id string
-        * @return bool Success?
-        */
-       abstract protected function initFromId( $id );
-
-       /**
-        * Try to magically initialize the user from cookies or similar information
-        * so he or she can be logged in on just viewing the wiki.  If this is
-        * impossible to do, just return false.
-        *
-        * TODO: Actually use this.
-        *
-        * @return bool Success?
-        */
-       protected function initFromCookie() {
-               return false;
-       }
-
-       /**
-        * This must return some identifier that stably, uniquely identifies the
-        * user.  In a typical web application, this could be an integer
-        * representing the "user id".  In other cases, it might be a string.  In
-        * any event, the return value should be a string between 1 and 255
-        * characters in length; must uniquely identify the user in the foreign
-        * database; and, if at all possible, should be permanent.
-        *
-        * This will only ever be used to reconstruct this ExternalUser object via
-        * newFromId().  The resulting object in that case should correspond to the
-        * same user, even if details have changed in the interim (e.g., renames or
-        * preference changes).
-        *
-        * @return string
-        */
-       abstract public function getId();
-
-       /**
-        * This must return the name that the user would normally use for login to
-        * the external database.  It is subject to no particular restrictions
-        * beyond rudimentary sanity, and in particular may be invalid as a
-        * MediaWiki username.  It's used to auto-generate an account name that
-        * *is* valid for MediaWiki, either with or without user input, but
-        * basically is only a hint.
-        *
-        * @return string
-        */
-       abstract public function getName();
-
-       /**
-        * Is the given password valid for the external user?  The password is
-        * provided in plaintext.
-        *
-        * @param $password string
-        * @return bool
-        */
-       abstract public function authenticate( $password );
-
-       /**
-        * Retrieve the value corresponding to the given preference key.  The most
-        * important values are:
-        *
-        * - emailaddress
-        * - language
-        *
-        * The value must meet MediaWiki's requirements for values of this type,
-        * and will be checked for validity before use.  If the preference makes no
-        * sense for the backend, or it makes sense but is unset for this user, or
-        * is unrecognized, return null.
-        *
-        * $pref will never equal 'password', since passwords are usually hashed
-        * and cannot be directly retrieved.  authenticate() is used for this
-        * instead.
-        *
-        * TODO: Currently this is only called for 'emailaddress'; generalize!  Add
-        * some config option to decide which values are grabbed on user
-        * initialization.
-        *
-        * @param $pref string
-        * @return mixed
-        */
-       public function getPref( $pref ) {
-               return null;
-       }
-
-       /**
-        * Return an array of identifiers for all the foreign groups that this user
-        * has.  The identifiers are opaque objects that only need to be
-        * specifiable by the administrator in LocalSettings.php when configuring
-        * $wgAutopromote.  They may be, for instance, strings or integers.
-        *
-        * TODO: Support this in $wgAutopromote.
-        *
-        * @return array
-        */
-       public function getGroups() {
-               return array();
-       }
-
-       /**
-        * Given a preference key (e.g., 'emailaddress'), provide an HTML message
-        * telling the user how to change it in the external database.  The
-        * administrator has specified that this preference cannot be changed on
-        * the wiki, and may only be changed in the foreign database.  If no
-        * message is available, such as for an unrecognized preference, return
-        * false.
-        *
-        * TODO: Use this somewhere.
-        *
-        * @param $pref string
-        * @return mixed String or false
-        */
-       public static function getPrefMessage( $pref ) {
-               return false;
-       }
-
-       /**
-        * Set the given preference key to the given value.  Two important
-        * preference keys that you might want to implement are 'password' and
-        * 'emailaddress'.  If the set fails, such as because the preference is
-        * unrecognized or because the external database can't be changed right
-        * now, return false.  If it succeeds, return true.
-        *
-        * If applicable, you should make sure to validate the new value against
-        * any constraints the external database may have, since MediaWiki may have
-        * more limited constraints (e.g., on password strength).
-        *
-        * TODO: Untested.
-        *
-        * @param $key string
-        * @param $value string
-        * @return bool Success?
-        */
-       public static function setPref( $key, $value ) {
-               return false;
-       }
-
-       /**
-        * Create a link for future reference between this object and the provided
-        * user_id.  If the user was already linked, the old link will be
-        * overwritten.
-        *
-        * This is part of the core code and is not overridable by specific
-        * plugins.  It's in this class only for convenience.
-        *
-        * @param int $id user_id
-        */
-       final public function linkToLocal( $id ) {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'external_user',
-                       array( 'eu_local_id', 'eu_external_id' ),
-                       array( 'eu_local_id' => $id,
-                               'eu_external_id' => $this->getId() ),
-                       __METHOD__ );
-       }
-
-       /**
-        * Check whether this external user id is already linked with
-        * a local user.
-        * @return Mixed User if the account is linked, Null otherwise.
-        */
-       final public function getLocalUser() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow(
-                       'external_user',
-                       '*',
-                       array( 'eu_external_id' => $this->getId() )
-               );
-               return $row
-                       ? User::newFromId( $row->eu_local_id )
-                       : null;
-       }
-
-}
index 1a4b985..751f4af 100644 (file)
@@ -1093,16 +1093,29 @@ function wfDeprecated( $function, $version = false, $component = false, $callerO
 
 /**
  * Send a warning either to the debug log or in a PHP error depending on
- * $wgDevelopmentWarnings
+ * $wgDevelopmentWarnings. To log warnings in production, use wfLogWarning() instead.
  *
  * @param string $msg message to send
  * @param $callerOffset Integer: number of items to go back in the backtrace to
  *        find the correct caller (1 = function calling wfWarn, ...)
- * @param $level Integer: PHP error level; only used when $wgDevelopmentWarnings
- *        is true
+ * @param $level Integer: PHP error level; defaults to E_USER_NOTICE;
+ *        only used when $wgDevelopmentWarnings is true
  */
 function wfWarn( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
-       MWDebug::warning( $msg, $callerOffset + 1, $level );
+       MWDebug::warning( $msg, $callerOffset + 1, $level, 'auto' );
+}
+
+/**
+ * Send a warning as a PHP error and the debug log. This is intended for logging
+ * warnings in production. For logging development warnings, use WfWarn instead.
+ *
+ * @param $msg String: message to send
+ * @param $callerOffset Integer: number of items to go back in the backtrace to
+ *        find the correct caller (1 = function calling wfLogWarning, ...)
+ * @param $level Integer: PHP error level; defaults to E_USER_WARNING
+ */
+function wfLogWarning( $msg, $callerOffset = 1, $level = E_USER_WARNING ) {
+       MWDebug::warning( $msg, $callerOffset + 1, $level, 'production' );
 }
 
 /**
@@ -2536,8 +2549,7 @@ function wfMkdirParents( $dir, $mode = null, $caller = null ) {
 
        if( !$ok ) {
                // PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
-               trigger_error( sprintf( "%s: failed to mkdir \"%s\" mode 0%o", __FUNCTION__, $dir, $mode ),
-                       E_USER_WARNING );
+               wfLogWarning( sprintf( "failed to mkdir \"%s\" mode 0%o", $dir, $mode ) );
        }
        return $ok;
 }
@@ -3607,15 +3619,22 @@ function wfGetNull() {
  *
  * @param $maxLag Integer (deprecated)
  * @param $wiki mixed Wiki identifier accepted by wfGetLB
+ * @param $cluster string cluster name accepted by LBFactory
  */
-function wfWaitForSlaves( $maxLag = false, $wiki = false ) {
-       $lb = wfGetLB( $wiki );
+function wfWaitForSlaves( $maxLag = false, $wiki = false, $cluster = false ) {
+       $lb = ( $cluster !== false )
+               ? wfGetLBFactory()->getExternalLB( $cluster )
+               : wfGetLB( $wiki );
        // bug 27975 - Don't try to wait for slaves if there are none
        // Prevents permission error when getting master position
        if ( $lb->getServerCount() > 1 ) {
                $dbw = $lb->getConnection( DB_MASTER, array(), $wiki );
                $pos = $dbw->getMasterPos();
-               $lb->waitForAll( $pos );
+               // The DBMS may not support getMasterPos() or the whole
+               // load balancer might be fake (e.g. $wgAllDBsAreLocalhost).
+               if ( $pos !== false ) {
+                       $lb->waitForAll( $pos );
+               }
        }
 }
 
index 816ea16..e204087 100644 (file)
@@ -128,6 +128,7 @@ class HTMLForm extends ContextSource {
 
        protected $mFieldTree;
        protected $mShowReset = false;
+       protected $mShowSubmit = true;
        public $mFieldData;
 
        protected $mSubmitCallback;
@@ -683,23 +684,26 @@ class HTMLForm extends ContextSource {
         */
        function getButtons() {
                $html = '';
-               $attribs = array();
 
-               if ( isset( $this->mSubmitID ) ) {
-                       $attribs['id'] = $this->mSubmitID;
-               }
+               if ( $this->mShowSubmit ) {
+                       $attribs = array();
 
-               if ( isset( $this->mSubmitName ) ) {
-                       $attribs['name'] = $this->mSubmitName;
-               }
+                       if ( isset( $this->mSubmitID ) ) {
+                               $attribs['id'] = $this->mSubmitID;
+                       }
 
-               if ( isset( $this->mSubmitTooltip ) ) {
-                       $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
-               }
+                       if ( isset( $this->mSubmitName ) ) {
+                               $attribs['name'] = $this->mSubmitName;
+                       }
 
-               $attribs['class'] = 'mw-htmlform-submit';
+                       if ( isset( $this->mSubmitTooltip ) ) {
+                               $attribs += Linker::tooltipAndAccesskeyAttribs( $this->mSubmitTooltip );
+                       }
+
+                       $attribs['class'] = 'mw-htmlform-submit';
 
-               $html .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
+                       $html .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n";
+               }
 
                if ( $this->mShowReset ) {
                        $html .= Html::element(
@@ -851,6 +855,21 @@ class HTMLForm extends ContextSource {
                return $this;
        }
 
+       /**
+        * Stop a default submit button being shown for this form. This implies that an
+        * alternate submit method must be provided manually.
+        *
+        * @since 1.22
+        *
+        * @param bool $suppressSubmit Set to false to re-enable the button again
+        *
+        * @return HTMLForm $this for chaining calls
+        */
+       function suppressDefaultSubmit( $suppressSubmit = true ) {
+               $this->mShowSubmit = !$suppressSubmit;
+               return $this;
+       }
+
        /**
         * @param string $id DOM id for the form
         * @return HTMLForm $this for chaining calls (since 1.20)
@@ -2526,14 +2545,17 @@ class HTMLSubmitField extends HTMLFormField {
        }
 
        public function getInputHTML( $value ) {
-               return Xml::submitButton(
-                       $value,
-                       array(
-                               'class' => 'mw-htmlform-submit ' . $this->mClass,
-                               'name' => $this->mName,
-                               'id' => $this->mID,
-                       )
+               $attr = array(
+                       'class' => 'mw-htmlform-submit ' . $this->mClass,
+                       'name' => $this->mName,
+                       'id' => $this->mID,
                );
+
+               if ( !empty( $this->mParams['disabled'] ) ) {
+                       $attr['disabled'] = 'disabled';
+               }
+
+               return Xml::submitButton( $value, $attr );
        }
 
        protected function needsLabel() {
index 4730a97..acf9baa 100644 (file)
@@ -305,7 +305,7 @@ class MWHttpRequest {
 
        /**
         * Set the parameters of the request
-
+        *
         * @param $args Array
         * @todo overload the args param
         */
@@ -696,11 +696,6 @@ class MWHttpRequest {
 class CurlHttpRequest extends MWHttpRequest {
        const SUPPORTS_FILE_POSTS = true;
 
-       static $curlMessageMap = array(
-               6 => 'http-host-unreachable',
-               28 => 'http-timed-out'
-       );
-
        protected $curlOptions = array();
        protected $headerText = "";
 
@@ -780,13 +775,7 @@ class CurlHttpRequest extends MWHttpRequest {
                }
 
                if ( false === curl_exec( $curlHandle ) ) {
-                       $code = curl_error( $curlHandle );
-
-                       if ( isset( self::$curlMessageMap[$code] ) ) {
-                               $this->status->fatal( self::$curlMessageMap[$code] );
-                       } else {
-                               $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
-                       }
+                       $this->status->fatal( 'http-curl-error', curl_error( $curlHandle ) );
                } else {
                        $this->headerList = explode( "\r\n", $this->headerText );
                }
index 942f9bd..4e4b739 100644 (file)
@@ -2637,8 +2637,7 @@ $templates
                                || ( $module->getOrigin() > $this->getAllowedModules( ResourceLoaderModule::TYPE_STYLES )
                                        && $only == ResourceLoaderModule::TYPE_STYLES )
                                || ( $this->mTarget && !in_array( $this->mTarget, $module->getTargets() ) )
-                               )
-                       {
+                       ) {
                                continue;
                        }
 
@@ -2684,13 +2683,9 @@ $templates
                        if ( count( $emptyModules ) > 0 && $only !== ResourceLoaderModule::TYPE_STYLES ) {
                                // If we're only getting the styles, we don't need to do anything for empty modules.
                                $links .= Html::inlineScript(
-
                                                ResourceLoader::makeLoaderConditionalScript(
-
                                                                ResourceLoader::makeLoaderStateScript( $emptyModules )
-
                                                )
-
                                ) . "\n";
                        }
 
@@ -2872,8 +2867,8 @@ $templates
                        );
                        $defaultModules['site'] = 'loading';
                } else {
-                       // The wiki is configured to not allow a site module.
-                       $defaultModules['site'] = 'missing';
+                       // Site module is empty, save request by marking ready in advance (bug 46857)
+                       $defaultModules['site'] = 'ready';
                }
 
                // Add user JS if enabled
@@ -2899,15 +2894,14 @@ $templates
                                }
                                $defaultModules['user'] = 'loading';
                        } else {
-                               // Non-logged-in users have no user module. Treat it as empty and 'ready' to avoid
-                               // blocking default gadgets that might depend on it. Although arguably default-enabled
-                               // gadgets should not depend on the user module, it's harmless and less error-prone to
-                               // handle this case.
+                               // Non-logged-in users have an empty user module.
+                               // Save request by marking ready in advance (bug 46857)
                                $defaultModules['user'] = 'ready';
                        }
                } else {
-                       // User JS disabled
-                       $defaultModules['user'] = 'missing';
+                       // User modules are disabled on this wiki.
+                       // Save request by marking ready in advance (bug 46857)
+                       $defaultModules['user'] = 'ready';
                }
 
                // Group JS is only enabled if site JS is enabled.
@@ -2918,13 +2912,13 @@ $templates
                                );
                                $defaultModules['user.groups'] = 'loading';
                        } else {
-                               // Non-logged-in users have no user.groups module. Treat it as empty and 'ready' to
-                               // avoid blocking gadgets that might depend upon the module.
+                               // Non-logged-in users have no user.groups module.
+                               // Save request by marking ready in advance (bug 46857)
                                $defaultModules['user.groups'] = 'ready';
                        }
                } else {
                        // Site (and group JS) disabled
-                       $defaultModules['user.groups'] = 'missing';
+                       $defaultModules['user.groups'] = 'ready';
                }
 
                $loaderInit = '';
index 56dba05..8edf60a 100644 (file)
@@ -546,18 +546,6 @@ class Preferences {
                                'section' => 'rendering/skin',
                        );
                }
-
-               $selectedSkin = $user->getOption( 'skin' );
-               if ( in_array( $selectedSkin, array( 'cologneblue', 'standard' ) ) ) {
-                       $settings = array_flip( $context->getLanguage()->getQuickbarSettings() );
-
-                       $defaultPreferences['quickbar'] = array(
-                               'type' => 'radio',
-                               'options' => $settings,
-                               'section' => 'rendering/skin',
-                               'label-message' => 'qbsettings',
-                       );
-               }
        }
 
        /**
index a4cb9f4..117e6e2 100644 (file)
@@ -131,7 +131,6 @@ abstract class Skin extends ContextSource {
                // in the user preferences.
                $fallback = array(
                        0 => $wgDefaultSkin,
-                       1 => 'nostalgia',
                        2 => 'cologneblue'
                );
 
index b17abc2..9d657f7 100644 (file)
@@ -36,46 +36,6 @@ class SkinLegacy extends SkinTemplate {
        public function commonPrintStylesheet() {
                return true;
        }
-
-       /**
-        * This was for the old skins and for users with 640x480 screen.
-        * Please note old skins are still used and might prove useful for
-        * users having old computers or visually impaired.
-        */
-       var $mSuppressQuickbar = false;
-
-       /**
-        * Suppress the quickbar from the output, only for skin supporting
-        * the quickbar
-        */
-       public function suppressQuickbar() {
-               $this->mSuppressQuickbar = true;
-       }
-
-       /**
-        * Return whether the quickbar should be suppressed from the output
-        *
-        * @return Boolean
-        */
-       public function isQuickbarSuppressed() {
-               return $this->mSuppressQuickbar;
-       }
-
-       function qbSetting() {
-               global $wgUser;
-               if ( $this->isQuickbarSuppressed() ) {
-                       return 0;
-               }
-               $q = $wgUser->getOption( 'quickbar', 0 );
-               if( $q == 5 ) {
-                       # 5 is the default, which chooses the setting
-                       # depending on the directionality of your interface language
-                       global $wgLang;
-                       return $wgLang->isRTL() ? 2 : 1;
-               }
-               return $q;
-       }
-
 }
 
 class LegacyTemplate extends BaseTemplate {
index 5ce742c..a40e444 100644 (file)
@@ -4501,23 +4501,30 @@ class Title {
         */
        public function invalidateCache() {
                global $wgMemc;
+
                if ( wfReadOnly() ) {
                        return false;
                }
+
                $dbw = wfGetDB( DB_MASTER );
-               $success = $dbw->update(
-                       'page',
-                       array( 'page_touched' => $dbw->timestamp() ),
-                       $this->pageCond(),
-                       __METHOD__
-               );
+               $conds = $this->pageCond();
+               $dbw->onTransactionIdle( function() use ( $dbw, $conds ) {
+                       $dbw->update(
+                               'page',
+                               array( 'page_touched' => $dbw->timestamp() ),
+                               $conds,
+                               __METHOD__
+                       );
+               } );
                HTMLFileCache::clearFileCache( $this );
 
                // Clear page info.
                $revision = WikiPage::factory( $this )->getRevision();
-               if( $revision !== null ) {
+               if ( $revision !== null ) {
                        $memcKey = wfMemcKey( 'infoaction', $this->getPrefixedText(), $revision->getId() );
-                       $success = $success && $wgMemc->delete( $memcKey );
+                       $success = $wgMemc->delete( $memcKey );
+               } else {
+                       $success = true;
                }
 
                return $success;
index dc68502..0ac79d6 100644 (file)
@@ -921,22 +921,12 @@ class User {
         * @return Bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
-               global $wgExternalAuthType, $wgAutocreatePolicy;
-
                $result = null;
                wfRunHooks( 'UserLoadFromSession', array( $this, &$result ) );
                if ( $result !== null ) {
                        return $result;
                }
 
-               if ( $wgExternalAuthType && $wgAutocreatePolicy == 'view' ) {
-                       $extUser = ExternalUser::newFromCookie();
-                       if ( $extUser ) {
-                               # TODO: Automatically create the user here (or probably a bit
-                               # lower down, in fact)
-                       }
-               }
-
                $request = $this->getRequest();
 
                $cookieId = $request->getCookie( 'UserID' );
@@ -1969,28 +1959,29 @@ class User {
         * for reload on the next hit.
         */
        public function invalidateCache() {
-               if( wfReadOnly() ) {
+               if ( wfReadOnly() ) {
                        return;
                }
                $this->load();
-               if( $this->mId ) {
+               if ( $this->mId ) {
                        $this->mTouched = self::newTouchedTimestamp();
 
                        $dbw = wfGetDB( DB_MASTER );
-
-                       // Prevent contention slams by checking user_touched first
-                       $now = $dbw->timestamp( $this->mTouched );
-                       $needsPurge = $dbw->selectField( 'user', '1',
-                               array( 'user_id' => $this->mId, 'user_touched < ' . $dbw->addQuotes( $now ) )
-                       );
-                       if ( $needsPurge ) {
-                               $dbw->update( 'user',
-                                       array( 'user_touched' => $now ),
-                                       array( 'user_id' => $this->mId, 'user_touched < ' . $dbw->addQuotes( $now ) ),
-                                       __METHOD__
-                               );
-                       }
-
+                       $userid = $this->mId;
+                       $touched = $this->mTouched;
+                       $dbw->onTransactionIdle( function() use ( $dbw, $userid, $touched ) {
+                               // Prevent contention slams by checking user_touched first
+                               $encTouched = $dbw->addQuotes( $dbw->timestamp( $touched ) );
+                               $needsPurge = $dbw->selectField( 'user', '1',
+                                       array( 'user_id' => $userid, 'user_touched < ' . $encTouched ) );
+                               if ( $needsPurge ) {
+                                       $dbw->update( 'user',
+                                               array( 'user_touched' => $dbw->timestamp( $touched ) ),
+                                               array( 'user_id' => $userid, 'user_touched < ' . $encTouched ),
+                                               __METHOD__
+                                       );
+                               }
+                       } );
                        $this->clearSharedCache();
                }
        }
@@ -4408,8 +4399,6 @@ class User {
         * @todo document
         */
        protected function saveOptions() {
-               global $wgAllowPrefChange;
-
                $this->loadOptions();
 
                // Not using getOptions(), to keep hidden preferences in database
@@ -4421,7 +4410,6 @@ class User {
                        return;
                }
 
-               $extuser = ExternalUser::newFromUser( $this );
                $userId = $this->getId();
                $insert_rows = array();
                foreach( $saveOptions as $key => $value ) {
@@ -4436,16 +4424,6 @@ class User {
                                                'up_value' => $value,
                                        );
                        }
-                       if ( $extuser && isset( $wgAllowPrefChange[$key] ) ) {
-                               switch ( $wgAllowPrefChange[$key] ) {
-                                       case 'local':
-                                       case 'message':
-                                               break;
-                                       case 'semiglobal':
-                                       case 'global':
-                                               $extuser->setPref( $key, $value );
-                               }
-                       }
                }
 
                $dbw = wfGetDB( DB_MASTER );
index f4d2e23..e1e55fd 100644 (file)
@@ -1161,7 +1161,6 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Invalidate the cache
                $this->mTitle->invalidateCache();
-               $this->clear();
 
                if ( $wgUseSquid ) {
                        // Commit the transaction before the purge is sent
index 741e908..f386a8a 100644 (file)
@@ -445,7 +445,7 @@ abstract class ApiBase extends ContextSource {
                                                                $hintPipeSeparated = false;
                                                                break;
                                                        case 'limit':
-                                                               $desc .= $paramPrefix . "No more than {$paramSettings[self :: PARAM_MAX]}";
+                                                               $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}";
                                                                if ( isset( $paramSettings[self::PARAM_MAX2] ) ) {
                                                                        $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)";
                                                                }
@@ -1081,7 +1081,7 @@ abstract class ApiBase extends ContextSource {
 
                if ( !$allowMultiple && count( $valuesList ) != 1 ) {
                        // Bug 33482 - Allow entries with | in them for non-multiple values
-                       if ( in_array( $value, $allowedValues ) ) {
+                       if ( in_array( $value, $allowedValues, true ) ) {
                                return $value;
                        }
 
@@ -1165,7 +1165,7 @@ abstract class ApiBase extends ContextSource {
        /**
         * Validate and normalize of parameters of type 'user'
         * @param string $value Parameter value
-        * @param string $encParamName Parameter value
+        * @param string $encParamName Parameter name
         * @return string Validated and normalized parameter
         */
        private function validateUser( $value, $encParamName ) {
index a521346..278ea29 100644 (file)
@@ -52,6 +52,10 @@ class ApiCreateAccount extends ApiBase {
                        $this->dieUsageMsg( 'noemail' );
                }
 
+               if ( $params['language'] && !Language::isSupportedLanguage( $params['language'] ) ) {
+                       $this->dieUsage( 'Invalid language parameter', 'langinvalid' );
+               }
+
                $context = new DerivativeContext( $this->getContext() );
                $context->setRequest( new DerivativeRequest(
                        $this->getContext()->getRequest(),
@@ -78,12 +82,10 @@ class ApiCreateAccount extends ApiBase {
                $result = array();
                if( $status->isGood() ) {
                        // Success!
+                       global $wgEmailAuthentication;
                        $user = $status->getValue();
 
-                       // If we showed up language selection links, and one was in use, be
-                       // smart (and sensible) and save that language as the user's preference
-                       global $wgLoginLanguageSelector, $wgEmailAuthentication;
-                       if( $wgLoginLanguageSelector && $params['language'] ) {
+                       if( $params['language'] ) {
                                $user->setOption( 'language', $params['language'] );
                        }
 
@@ -273,6 +275,10 @@ class ApiCreateAccount extends ApiBase {
                        'code' => 'aborted',
                        'info' => 'Account creation aborted by hook (info may vary)'
                );
+               $errors[] = array(
+                       'code' => 'langinvalid',
+                       'info' => 'Invalid language parameter'
+               );
 
                // 'passwordtooshort' has parameters. :(
                global $wgMinimalPasswordLength;
index 5aa41ea..db82805 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 class ApiImageRotate extends ApiBase {
-
        private $mPageSet = null;
 
        public function __construct( $main, $action ) {
@@ -151,7 +150,8 @@ class ApiImageRotate extends ApiBase {
 
        /**
         * Checks that the user has permissions to perform rotations.
-        * @param $user User The user to check.
+        * @param User $user The user to check
+        * @param Title $title
         * @return string|null Permission error message, or null if there is no error
         */
        protected function checkPermissions( $user, $title ) {
index a6813e3..abd47b2 100644 (file)
@@ -1048,6 +1048,7 @@ class ApiMain extends ApiBase {
                        'servedby' => 'Include the hostname that served the request in the results. Unconditionally shown on error',
                        'origin' => array(
                                'When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain.',
+                               'This must be included in any pre-flight request, and therefore must be part of the request URI (not the POST body).',
                                'This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org .',
                                'If this parameter does not match the Origin: header, a 403 response will be returned.',
                                'If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.',
index c76e22b..0645edb 100644 (file)
@@ -69,6 +69,9 @@ class ApiPageSet extends ApiBase {
        private $mFakePageId = -1;
        private $mCacheMode = 'public';
        private $mRequestedPageFields = array();
+       /**
+        * @var int
+        */
        private $mDefaultNamespace = NS_MAIN;
 
        /**
index 69a6441..b2d3b1e 100644 (file)
@@ -49,7 +49,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
        /**
         * @param $resultPageSet ApiPageSet
-        * @return
         */
        private function run( $resultPageSet = null ) {
                if ( $this->getPageSet()->getGoodTitleCount() == 0 ) {
@@ -174,7 +173,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
                                        break;
                                }
 
-                               $titles[] = Title :: makeTitle( NS_CATEGORY, $row->cl_to );
+                               $titles[] = Title::makeTitle( NS_CATEGORY, $row->cl_to );
                        }
                        $resultPageSet->populateFromTitles( $titles );
                }
index 18dcba8..7f73631 100644 (file)
@@ -48,8 +48,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        /**
-        * @param $resultPageSet ApiPageSet
-        * @return
+        * @param ApiPageSet $resultPageSet
         */
        private function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
index fc77b4e..6f03bbe 100644 (file)
@@ -81,8 +81,8 @@ class ApiQueryIWLinks extends ApiQueryBase {
                                $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                               'iwl_title' . $sort,
-                                               'iwl_from' . $sort
+                                               'iwl_from' . $sort,
+                                               'iwl_title' . $sort
                                ));
                        }
                } else {
@@ -92,7 +92,8 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        } else {
                                $this->addOption( 'ORDER BY', array (
                                                'iwl_from' . $sort,
-                                               'iwl_prefix' . $sort
+                                               'iwl_prefix' . $sort,
+                                               'iwl_title' . $sort
                                ));
                        }
                }
index 556f147..b2ef048 100644 (file)
@@ -547,7 +547,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
         * Returns the descriptions for the properties provided by getPropertyNames()
         *
         * @param array $filter List of properties to filter out
-        *
+        * @param string $modulePrefix
         * @return array
         */
        public static function getPropertyDescriptions( $filter = array(), $modulePrefix = '' ) {
index ac65d2d..e6b02d7 100644 (file)
@@ -67,18 +67,15 @@ class ApiQueryLangLinks extends ApiQueryBase {
                        );
                }
 
-                       $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
-                       if ( isset( $params['lang'] ) ) {
+               // Note that, since (ll_from, ll_lang) is a unique key, we don't need
+               // to sort by ll_title to ensure deterministic ordering.
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               if ( isset( $params['lang'] ) ) {
                        $this->addWhereFld( 'll_lang', $params['lang'] );
                        if ( isset( $params['title'] ) ) {
                                $this->addWhereFld( 'll_title', $params['title'] );
-                               $this->addOption( 'ORDER BY', 'll_from' . $sort );
-                       } else {
-                               $this->addOption( 'ORDER BY', array(
-                                                       'll_title' . $sort,
-                                                       'll_from' . $sort
-                               ));
                        }
+                       $this->addOption( 'ORDER BY', 'll_from' . $sort );
                } else {
                        // Don't order by ll_from if it's constant in the WHERE clause
                        if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
index 72e80b8..8aceab2 100644 (file)
@@ -159,15 +159,20 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                        $timestamp = $this->getDB()->addQuotes( wfTimestamp( TS_MW, $cont[0] ) );
                        $id = intval( $cont[1] );
-                       $op = $params['dir'] == 'descending' ? '<' : '>';
+                       $op = $params['dir'] === 'older' ? '<' : '>';
 
                        $this->addWhere(
                                "rc_timestamp $op $timestamp OR " .
                                "(rc_timestamp = $timestamp AND " .
-                               "rc_id <= $id)"
+                               "rc_id $op= $id)"
                        );
                }
 
+               $order = $params['dir'] === 'older' ? 'DESC' : 'ASC';
+               $this->addOption( 'ORDER BY', array(
+                       "rc_timestamp $order",
+                       "rc_id $order",
+               ) );
 
                $this->addWhereFld( 'rc_namespace', $params['namespace'] );
                $this->addWhereFld( 'rc_deleted', 0 );
index d0b877f..7392f96 100644 (file)
@@ -714,7 +714,6 @@ abstract class DatabaseBase implements DatabaseType {
         * an extension, et cetera). Do not use this to connect to the MediaWiki
         * database. Example uses in core:
         * @see LoadBalancer::reallyOpenConnection()
-        * @see ExternalUser_MediaWiki::initFromCond()
         * @see ForeignDBRepo::getMasterDB()
         * @see WebInstaller_DBConnect::execute()
         *
index 187870f..57d48f4 100644 (file)
@@ -348,7 +348,7 @@ class LoadBalancer {
         * Set the master wait position
         * If a DB_SLAVE connection has been opened already, waits
         * Otherwise sets a variable telling it to wait if such a connection is opened
-        * @param $pos int
+        * @param $pos DBMasterPos
         */
        public function waitFor( $pos ) {
                wfProfileIn( __METHOD__ );
@@ -366,7 +366,7 @@ class LoadBalancer {
 
        /**
         * Set the master wait position and wait for ALL slaves to catch up to it
-        * @param $pos int
+        * @param $pos DBMasterPos
         */
        public function waitForAll( $pos ) {
                wfProfileIn( __METHOD__ );
@@ -399,7 +399,7 @@ class LoadBalancer {
         * @param $open bool
         * @return bool
         */
-       function doWait( $index, $open = false ) {
+       protected function doWait( $index, $open = false ) {
                # Find a connection to wait on
                $conn = $this->getAnyOpenConnection( $index );
                if ( !$conn ) {
index 8c39e1a..582b3ac 100644 (file)
@@ -135,10 +135,24 @@ class MWDebug {
         * @since 1.19
         * @param $msg string
         * @param $callerOffset int
-        * @param int $level A PHP error level. See sendWarning()
+        * @param $level int A PHP error level. See sendWarning()
+        * @param $log string: 'production' will always trigger a php error, 'auto'
+        *        will trigger an error if $wgDevelopmentWarnings is true, and 'debug'
+        *        will only write to the debug log(s).
+        *
         * @return mixed
         */
-       public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
+       public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE, $log = 'auto' ) {
+               global $wgDevelopmentWarnings;
+
+               if ( $log === 'auto' && !$wgDevelopmentWarnings ) {
+                       $log = 'debug';
+               }
+
+               if ( $log === 'debug' ) {
+                       $level = false;
+               }
+
                $callerDescription = self::getCallerDescription( $callerOffset );
 
                self::sendWarning( $msg, $callerDescription, $level );
@@ -212,7 +226,8 @@ class MWDebug {
                }
 
                if ( $sendToLog ) {
-                       self::sendWarning( $msg, $callerDescription, E_USER_DEPRECATED );
+                       global $wgDevelopmentWarnings; // we could have a more specific $wgDeprecationWarnings setting.
+                       self::sendWarning( $msg, $callerDescription, $wgDevelopmentWarnings ? E_USER_DEPRECATED : false );
                }
 
                if ( self::$enabled ) {
@@ -267,23 +282,21 @@ class MWDebug {
        }
 
        /**
-        * Send a warning either to the debug log or by triggering an user PHP
-        * error depending on $wgDevelopmentWarnings.
+        * Send a warning to the debug log and optionally also trigger a PHP
+        * error, depending on the $level argument.
         *
-        * @param string $msg Message to send
-        * @param array $caller caller description get from getCallerDescription()
-        * @param $level error level to use if $wgDevelopmentWarnings is true
+        * @param $msg string Message to send
+        * @param $caller array caller description get from getCallerDescription()
+        * @param $level int|bool error level to use; set to false to not trigger an error
         */
        private static function sendWarning( $msg, $caller, $level ) {
-               global $wgDevelopmentWarnings;
-
                $msg .= ' [Called from ' . $caller['func'] . ' in ' . $caller['file'] . ']';
 
-               if ( $wgDevelopmentWarnings ) {
+               if ( $level !== false ) {
                        trigger_error( $msg, $level );
-               } else {
-                       wfDebug( "$msg\n" );
                }
+
+               wfDebug( "$msg\n" );
        }
 
        /**
index d44c050..d03a5be 100644 (file)
@@ -279,11 +279,6 @@ class DifferenceEngine extends ContextSource {
                } else {
                        wfRunHooks( 'DiffViewHeader', array( $this, $this->mOldRev, $this->mNewRev ) );
 
-                       $sk = $this->getSkin();
-                       if ( method_exists( $sk, 'suppressQuickbar' ) ) {
-                               $sk->suppressQuickbar();
-                       }
-
                        if ( $this->mNewPage->equals( $this->mOldPage ) ) {
                                $out->setPageTitle( $this->msg( 'difference-title', $this->mNewPage->getPrefixedText() ) );
                                $samePage = true;
diff --git a/includes/extauth/Hardcoded.php b/includes/extauth/Hardcoded.php
deleted file mode 100644 (file)
index dfb4674..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * External authentication with hardcoded user names and passwords
- *
- * Copyright © 2009 Aryeh Gregor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * This class supports external authentication from a literal array dumped in
- * LocalSettings.php.  It's mostly useful for testing.  Example configuration:
- *
- *   $wgExternalAuthType = 'ExternalUser_Hardcoded';
- *   $wgExternalAuthConf = array(
- *       'Bob Smith' => array(
- *           'password' => 'literal string',
- *           'emailaddress' => 'bob@example.com',
- *       ),
- *   );
- *
- * Multiple names may be provided.  The keys of the inner arrays can be either
- * 'password', or the name of any preference.
- *
- * @ingroup ExternalUser
- */
-class ExternalUser_Hardcoded extends ExternalUser {
-       private $mName;
-
-       protected function initFromName( $name ) {
-               global $wgExternalAuthConf;
-
-               if ( isset( $wgExternalAuthConf[$name] ) ) {
-                       $this->mName = $name;
-                       return true;
-               }
-               return false;
-       }
-
-       protected function initFromId( $id ) {
-               return $this->initFromName( $id );
-       }
-
-       public function getId() {
-               return $this->mName;
-       }
-
-       public function getName() {
-               return $this->mName;
-       }
-
-       public function authenticate( $password ) {
-               global $wgExternalAuthConf;
-
-               return isset( $wgExternalAuthConf[$this->mName]['password'] )
-                       && $wgExternalAuthConf[$this->mName]['password'] == $password;
-       }
-
-       public function getPref( $pref ) {
-               global $wgExternalAuthConf;
-
-               if ( isset( $wgExternalAuthConf[$this->mName][$pref] ) ) {
-                       return $wgExternalAuthConf[$this->mName][$pref];
-               }
-               return null;
-       }
-
-       # TODO: Implement setPref() via regex on LocalSettings.  (Just kidding.)
-}
diff --git a/includes/extauth/MediaWiki.php b/includes/extauth/MediaWiki.php
deleted file mode 100644 (file)
index c7f6a20..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-<?php
-/**
- * External authentication with external MediaWiki database.
- *
- * Copyright © 2009 Aryeh Gregor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * This class supports authentication against an external MediaWiki database,
- * probably any version back to 1.5 or something.  Example configuration:
- *
- *   $wgExternalAuthType = 'ExternalUser_MediaWiki';
- *   $wgExternalAuthConf = array(
- *       'DBtype' => 'mysql',
- *       'DBserver' => 'localhost',
- *       'DBname' => 'wikidb',
- *       'DBuser' => 'quasit',
- *       'DBpassword' => 'a5Cr:yf9u-6[{`g',
- *       'DBprefix' => '',
- *   );
- *
- * All fields must be present.  These mean the same things as $wgDBtype,
- * $wgDBserver, etc.  This implementation is quite crude; it could easily
- * support multiple database servers, for instance, and memcached, and it
- * probably has bugs.  Kind of hard to reuse code when things might rely on who
- * knows what configuration globals.
- *
- * If either wiki uses the UserComparePasswords hook, password authentication
- * might fail unexpectedly unless they both do the exact same validation.
- * There may be other corner cases like this where this will fail, but it
- * should be unlikely.
- *
- * @ingroup ExternalUser
- */
-class ExternalUser_MediaWiki extends ExternalUser {
-       private $mRow;
-
-       /**
-        * @var DatabaseBase
-        */
-       private $mDb;
-
-       /**
-        * @param $name string
-        * @return bool
-        */
-       protected function initFromName( $name ) {
-               # We might not need the 'usable' bit, but let's be safe.  Theoretically
-               # this might return wrong results for old versions, but it's probably
-               # good enough.
-               $name = User::getCanonicalName( $name, 'usable' );
-
-               if ( !is_string( $name ) ) {
-                       return false;
-               }
-
-               return $this->initFromCond( array( 'user_name' => $name ) );
-       }
-
-       /**
-        * @param $id int
-        * @return bool
-        */
-       protected function initFromId( $id ) {
-               return $this->initFromCond( array( 'user_id' => $id ) );
-       }
-
-       /**
-        * @param $cond array
-        * @return bool
-        */
-       private function initFromCond( $cond ) {
-               global $wgExternalAuthConf;
-
-               $this->mDb = DatabaseBase::factory( $wgExternalAuthConf['DBtype'],
-                       array(
-                               'host'        => $wgExternalAuthConf['DBserver'],
-                               'user'        => $wgExternalAuthConf['DBuser'],
-                               'password'    => $wgExternalAuthConf['DBpassword'],
-                               'dbname'      => $wgExternalAuthConf['DBname'],
-                               'tablePrefix' => $wgExternalAuthConf['DBprefix'],
-                       )
-               );
-
-               $row = $this->mDb->selectRow(
-                       'user',
-                       array(
-                               'user_name', 'user_id', 'user_password', 'user_email',
-                               'user_email_authenticated'
-                       ),
-                       $cond,
-                       __METHOD__
-               );
-               if ( !$row ) {
-                       return false;
-               }
-               $this->mRow = $row;
-
-               return true;
-       }
-
-       # TODO: Implement initFromCookie().
-
-       public function getId() {
-               return $this->mRow->user_id;
-       }
-
-       /**
-        * @return string
-        */
-       public function getName() {
-               return $this->mRow->user_name;
-       }
-
-       public function authenticate( $password ) {
-               # This might be wrong if anyone actually uses the UserComparePasswords hook
-               # (on either end), so don't use this if you those are incompatible.
-               return User::comparePasswords( $this->mRow->user_password, $password,
-                       $this->mRow->user_id );
-       }
-
-       public function getPref( $pref ) {
-               # @todo FIXME: Return other prefs too.  Lots of global-riddled code that does
-               # this normally.
-               if ( $pref === 'emailaddress'
-               && $this->row->user_email_authenticated !== null ) {
-                       return $this->mRow->user_email;
-               }
-               return null;
-       }
-
-       /**
-        * @return array
-        */
-       public function getGroups() {
-               # @todo FIXME: Untested.
-               $groups = array();
-               $res = $this->mDb->select(
-                       'user_groups',
-                       'ug_group',
-                       array( 'ug_user' => $this->mRow->user_id ),
-                       __METHOD__
-               );
-               foreach ( $res as $row ) {
-                       $groups[] = $row->ug_group;
-               }
-               return $groups;
-       }
-
-       # TODO: Implement setPref().
-}
diff --git a/includes/extauth/vB.php b/includes/extauth/vB.php
deleted file mode 100644 (file)
index 0565a2e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * External authentication with a vBulletin database.
- *
- * Copyright © 2009 Aryeh Gregor
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * This class supports the proprietary vBulletin forum system
- * <http://www.vbulletin.com>, versions 3.5 and up.  It calls no functions or
- * code, only reads from the database.  Example lines to put in
- * LocalSettings.php:
- *
- *   $wgExternalAuthType = 'ExternalUser_vB';
- *   $wgExternalAuthConf = array(
- *       'server' => 'localhost',
- *       'username' => 'forum',
- *       'password' => 'udE,jSqDJ<""p=fI.K9',
- *       'dbname' => 'forum',
- *       'tablePrefix' => '',
- *       'cookieprefix' => 'bb'
- *   );
- *
- * @ingroup ExternalUser
- */
-class ExternalUser_vB extends ExternalUser {
-       private $mRow;
-
-       protected function initFromName( $name ) {
-               return $this->initFromCond( array( 'username' => $name ) );
-       }
-
-       protected function initFromId( $id ) {
-               return $this->initFromCond( array( 'userid' => $id ) );
-       }
-
-       protected function initFromCookie() {
-               # Try using the session table.  It will only have a row if the user has
-               # an active session, so it might not always work, but it's a lot easier
-               # than trying to convince PHP to give us vB's $_SESSION.
-               global $wgExternalAuthConf, $wgRequest;
-               if ( !isset( $wgExternalAuthConf['cookieprefix'] ) ) {
-                       $prefix = 'bb';
-               } else {
-                       $prefix = $wgExternalAuthConf['cookieprefix'];
-               }
-               if ( $wgRequest->getCookie( 'sessionhash', $prefix ) === null ) {
-                       return false;
-               }
-
-               $db = $this->getDb();
-
-               $row = $db->selectRow(
-                       array( 'session', 'user' ),
-                       $this->getFields(),
-                       array(
-                               'session.userid = user.userid',
-                               'sessionhash' => $wgRequest->getCookie( 'sessionhash', $prefix ),
-                       ),
-                       __METHOD__
-               );
-               if ( !$row ) {
-                       return false;
-               }
-               $this->mRow = $row;
-
-               return true;
-       }
-
-       private function initFromCond( $cond ) {
-               $db = $this->getDb();
-
-               $row = $db->selectRow(
-                       'user',
-                       $this->getFields(),
-                       $cond,
-                       __METHOD__
-               );
-               if ( !$row ) {
-                       return false;
-               }
-               $this->mRow = $row;
-
-               return true;
-       }
-
-       private function getDb() {
-               global $wgExternalAuthConf;
-               return DatabaseBase::factory( 'mysql',
-                       array(
-                               'host' => $wgExternalAuthConf['server'],
-                               'user' => $wgExternalAuthConf['username'],
-                               'password' => $wgExternalAuthConf['password'],
-                               'dbname' => $wgExternalAuthConf['dbname'],
-                               'tablePrefix' => $wgExternalAuthConf['tablePrefix'],
-                       )
-               );
-       }
-
-       private function getFields() {
-               return array( 'user.userid', 'username', 'password', 'salt', 'email',
-                       'usergroupid', 'membergroupids' );
-       }
-
-       public function getId() { return $this->mRow->userid; }
-       public function getName() { return $this->mRow->username; }
-
-       public function authenticate( $password ) {
-               # vBulletin seemingly strips whitespace from passwords
-               $password = trim( $password );
-               return $this->mRow->password == md5( md5( $password )
-                       . $this->mRow->salt );
-       }
-
-       public function getPref( $pref ) {
-               if ( $pref == 'emailaddress' && $this->mRow->email ) {
-                       # TODO: only return if validated?
-                       return $this->mRow->email;
-               }
-               return null;
-       }
-
-       public function getGroups() {
-               $groups = array( $this->mRow->usergroupid );
-               $groups = array_merge( $groups, explode( ',', $this->mRow->membergroupids ) );
-               $groups = array_unique( $groups );
-               return $groups;
-       }
-}
index d0020da..d505d6f 100644 (file)
@@ -682,6 +682,8 @@ abstract class FileBackend {
         * The 'noAccess' and 'noListing' parameters works the same as in secure(),
         * except they are only applied *if* the directory/container had to be created.
         * These flags should always be set for directories that have private files.
+        * However, setting them is not guaranteed to actually do anything.
+        * Additional server configuration may be needed to achieve the desired effect.
         *
         * @param array $params
         * $params include:
@@ -709,7 +711,9 @@ abstract class FileBackend {
         * the container it belongs to. FS backends might add .htaccess
         * files whereas key/value store backends might revoke container
         * access to the storage user representing end-users in web requests.
-        * This is not guaranteed to actually do anything.
+        *
+        * This is not guaranteed to actually make files or listings publically hidden.
+        * Additional server configuration may be needed to achieve the desired effect.
         *
         * @param array $params
         * $params include:
@@ -739,6 +743,9 @@ abstract class FileBackend {
         * access to the storage user representing end-users in web requests.
         * This essentially can undo the result of secure() calls.
         *
+        * This is not guaranteed to actually make files or listings publically viewable.
+        * Additional server configuration may be needed to achieve the desired effect.
+        *
         * @param array $params
         * $params include:
         *   - dir            : storage directory
index be0d502..1356ebe 100644 (file)
@@ -277,7 +277,7 @@ abstract class FileBackendStore extends FileBackend {
        protected function doMoveInternal( array $params ) {
                unset( $params['async'] ); // two steps, won't work here :)
                $nsrc = FileBackend::normalizeStoragePath( $params['src'] );
-               $ndst = Filebackend::normalizeStoragePath( $params['dst'] );
+               $ndst = FileBackend::normalizeStoragePath( $params['dst'] );
                // Copy source to dest
                $status = $this->copyInternal( $params );
                if ( $nsrc !== $ndst && $status->isOK() ) {
index 0512a01..f534eff 100644 (file)
@@ -88,11 +88,22 @@ abstract class LockManager {
         *
         * @param array $paths List of resource names
         * @param $type integer LockManager::LOCK_* constant
+        * @param integer $timeout Timeout in seconds (0 means non-blocking) (since 1.21)
         * @return Status
         */
-       final public function lock( array $paths, $type = self::LOCK_EX ) {
+       final public function lock( array $paths, $type = self::LOCK_EX, $timeout = 0 ) {
                wfProfileIn( __METHOD__ );
-               $status = $this->doLock( array_unique( $paths ), $this->lockTypeMap[$type] );
+               $msleep = array( 0, 50, 100, 300, 500 ); // retry backoff times
+               $start = microtime( true );
+               do {
+                       $status = $this->doLock( array_unique( $paths ), $this->lockTypeMap[$type] );
+                       $elapsed = microtime( true ) - $start;
+                       if ( $status->isOK() || $elapsed >= $timeout || $elapsed < 0 ) {
+                               break; // success, timeout, or clock set back
+                       }
+                       usleep( 1e3 * ( next( $msleep ) ?: 1000 ) ); // use 1 sec after enough times
+                       $elapsed = microtime( true ) - $start;
+               } while ( $elapsed < $timeout && $elapsed >= 0 );
                wfProfileOut( __METHOD__ );
                return $status;
        }
index 5e36a60..745bcdd 100644 (file)
@@ -3710,6 +3710,8 @@ Tento adresář by ideálně neměl být dostupný z webu.',
        'config-logo-help' => 'Základní vzhled MediaWiki zahrnuje místo pro logo o velikosti 135×160 pixelů nad bočním menu.
 Načtěte obrázek odpovídající velikosti a zadejte sem jeho URL.
 
+Pokud je vaše logo umístěno relativně vůči $wgStylePath nebo $wgScriptPath, můžete zde tyto proměnné použít.
+
 Pokud logo nechcete, ponechte toto pole prázdné.',
        'config-instantcommons' => 'Zapnout Instant Commons',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] je funkce, která umožňuje wiki používat obrázky, zvuky a další mediální soubory ze serveru [//commons.wikimedia.org/wiki/Hlavn%C3%AD_strana Wikimedia Commons].
@@ -4307,6 +4309,8 @@ Idealerweise sollte es nicht über das Internet zugänglich sein.',
        'config-logo-help' => 'Die Standardoberfläche von MediaWiki verfügt links oberhalb der Seitenleiste über Platz für eine Logo mit den Maßen 135x160 Pixel.
 Bitte ein Logo in entsprechender Größe hochladen und die zugehörige URL an dieser Stelle angeben.
 
+Du kannst $wgStylePath oder $wgScriptPath verwenden, falls dein Logo relativ zu diesen Pfaden ist.
+
 Sofern kein Logo benötigt wird, kann dieses Datenfeld leer bleiben.',
        'config-instantcommons' => '„InstantCommons“ aktivieren',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons] ist eine Funktion, die es Wikis ermöglicht, Bild-, Klang- und andere Mediendateien zu nutzen, die auf der Website [//commons.wikimedia.org/ Wikimedia Commons] verfügbar sind.
@@ -4630,6 +4634,7 @@ $messages['eo'] = array(
 
 /** Spanish (español)
  * @author Armando-Martin
+ * @author Ciencia Al Poder
  * @author Crazymadlover
  * @author Danke7
  * @author Locos epraix
@@ -5071,14 +5076,14 @@ Para obtener más información, lea la [//www.mediawiki.org/wiki/Manual:Security
 
 Para habilitar la carga de archivos, cambie el modo en el subdirectorio <code>images</code> bajo el directorio raíz de MediaWiki para que el servidor web pueda escribir en él.
 A continuación, habilite esta opción.',
-       'config-upload-deleted' => '*Directório para los archivos eliminados:',
+       'config-upload-deleted' => '*Directorio para los archivos eliminados:',
        'config-upload-deleted-help' => 'Elige un directorio en el que guardar los archivos eliminados.
 Lo ideal es una carpeta no accesible desde la red.',
        'config-logo' => 'URL del logo :',
        'config-logo-help' => 'La apariencia por defecto de MediaWiki incluye espacio para un logotipo de 135x160 píxeles encima del menú de la barra lateral.
 Cargue una imagen de tamaño adecuado e introduzca la dirección URL aquí.
 
-Si no desea un logotipo, deje esta casilla en blanco.',
+Si no desea un logotipo, deje esta casilla en blanco.', # Fuzzy
        'config-instantcommons' => 'Habilitar Instant Commons',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] es una característica que permite que los wikis puedan utilizar imágenes, sonidos y otros archivos multimedia que se encuentran en el sitio [//commons.wikimedia.org/ Wikimedia Commons].
 Para ello, MediaWiki requiere acceso a Internet.
@@ -6093,10 +6098,12 @@ Ensuite, activez cette option.",
        'config-upload-deleted-help' => 'Choisissez un répertoire qui servira à archiver les fichiers supprimés.
 Idéalement, il ne devrait pas être accessible depuis le web.',
        'config-logo' => 'URL du logo :',
-       'config-logo-help' => "L'habillage (''skin'') par défaut de MediaWiki comprend l'espace pour un logo de 135x160 pixels dans le coin supérieur gauche.
-Téléchargez une image de la taille appropriée, et entrez l'URL ici.
+       'config-logo-help' => 'L’habillage par défaut de MediaWiki comprend l’espace pour un logo de 135x160 pixels au-dessus de la barre de menu latérale.
+Téléchargez une image de la taille appropriée, et entrez son URL ici.
+
+Vous pouvez utiliser $wgStylePath ou $wgScriptPath si votre logo est relatif à ces chemins.
 
-Si vous ne voulez pas d'un logo, laissez cette case vide.",
+Si vous ne voulez pas de logo, laissez cette case vide.',
        'config-instantcommons' => "Activer ''InstantCommons''",
        'config-instantcommons-help' => "[//www.mediawiki.org/wiki/InstantCommons InstantCommons] est un service qui permet d'utiliser les images, les sons et les autres médias disponibles sur le site [//commons.wikimedia.org/ Wikimedia Commons].
 Pour se faire, il faut que MediaWiki accède à Internet.
@@ -6912,6 +6919,8 @@ O ideal é que non sexa accesible desde a web.',
        'config-logo-help' => 'A aparencia de MediaWiki por defecto inclúe espazo para un logo de 135x160 píxeles por riba do menú lateral.
 Cargue unha imaxe do tamaño axeitado e introduza o enderezo URL aquí.
 
+Pode utilizar $wgStylePath ou $wgScriptPath se o seu logo está relacionado con esas rutas.
+
 Se non quere un logo, deixe esta caixa en branco.',
        'config-instantcommons' => 'Activar Instant Commons',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons] é unha característica que permite aos wikis usar imaxes, sons e outros ficheiros multimedia atopados no sitio da [//commons.wikimedia.org/wiki/Portada_galega Wikimedia Commons].
@@ -10527,10 +10536,12 @@ GFDLは有効なライセンスですが、内容を理解するのは困難で
        'config-upload-deleted-help' => '削除されるファイルを保存するためのディレクトリを選択してください。
 これがウェブからアクセスできないことが理想です。',
        'config-logo' => 'ロゴ のURL:',
-       'config-logo-help' => 'MediaWikiの既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
-適切なサイズの画像をアップロードして、そのURLをここに入力してください。
+       'config-logo-help' => 'MediaWiki の既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
+適切なサイズの画像をアップロードして、その URL をここに入力してください。
+
+ロゴが相対パスの場合は、$wgStylePath や $wgScriptPath を使用できます。
 
-ロゴが不要の場合は、このボックスを空白のままにしてください。',
+ロゴが不要の場合は、このを空白のままにしてください。',
        'config-instantcommons' => 'Instant Commons 機能を有効にする',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトにある画像、音声、その他のメディアをウィキ上で利用できるようにする機能です。
 これを使用するには、MediaWiki がインターネットに接続できる必要があります。
@@ -12956,8 +12967,9 @@ chmod a+w $3</pre>',
        'config-upload-deleted-help' => 'Одберете во која папка да се архивираат избришаните податотеки.
 Најдобро би било ако таа не е достапна преку интернет.',
        'config-logo' => 'URL за логото:',
-       'config-logo-help' => 'Матичното руво на МедијаВики има простор за лого од 135 x 160 пиксели над страничната лента.
-Подигнете слика со соодветна големина, и тука внесете ја URL-адресата.
+       'config-logo-help' => 'Матичното руво на МедијаВики има простор за лого од 135x160 пиксели над страничната лента.
+
+Можете да употребите $wgStylePath или $wgScriptPath ако вашето лого е релативно на тие патеки.
 
 Ако не сакате да имате лого, тогаш оставете го ова поле празно.',
        'config-instantcommons' => 'Овозможи Instant Commons',
@@ -14438,7 +14450,7 @@ Idealiter is deze map niet via het web te benaderen.',
        'config-logo-help' => 'Het standaarduiterlijk van MediaWiki bevat ruimte voor een logo van 135x160 pixels boven het menu.
 Upload een afbeelding met de juiste afmetingen en voer de URL hier in.
 
-Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.',
+Als u geen logo wilt gebruiken, kunt u dit veld leeg laten.', # Fuzzy
        'config-instantcommons' => 'Instant Commons inschakelen',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] is functie die het mogelijk maakt om afbeeldingen, geluidsbestanden en andere mediabestanden te gebruiken van de website [//commons.wikimedia.org/ Wikimedia Commons].
 Hiervoor heeft MediaWiki toegang nodig tot Internet.
index cf45dcb..c9ebc7e 100644 (file)
@@ -335,7 +335,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 \$wgUpgradeKey = \"{$this->values['wgUpgradeKey']}\";
 
 ## Default skin: you can change the default skin. Use the internal symbolic
-## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook', 'vector':
+## names, ie 'cologneblue', 'monobook', 'vector':
 \$wgDefaultSkin = \"{$this->values['wgDefaultSkin']}\";
 
 ## For attaching licensing metadata to pages, and displaying an
index 9978a92..df1f610 100644 (file)
@@ -165,12 +165,10 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'doLogUsertextPopulation' ), # listed separately from the previous update because 1.16 was released without this update
                        array( 'doLogSearchPopulation' ),
                        array( 'addTable', 'l10n_cache',                        'patch-l10n_cache.sql' ),
-                       array( 'addTable', 'external_user',                     'patch-external_user.sql' ),
                        array( 'addIndex', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
                        array( 'addIndex', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
                        array( 'addField', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
                        array( 'doUpdateTranscacheField' ),
-                       array( 'renameEuWikiId' ),
                        array( 'doUpdateMimeMinorField' ),
 
                        // 1.17
@@ -179,7 +177,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'updatelog',     'ul_value',         'patch-ul_value.sql' ),
                        array( 'addField', 'interwiki',     'iw_api',           'patch-iw_api_and_wikiid.sql' ),
                        array( 'dropIndex', 'iwlinks',      'iwl_prefix',       'patch-kill-iwl_prefix.sql' ),
-                       array( 'dropIndex', 'iwlinks',      'iwl_prefix_from_title', 'patch-kill-iwl_pft.sql' ),
                        array( 'addField', 'categorylinks', 'cl_collation',     'patch-categorylinks-better-collation.sql' ),
                        array( 'doClFieldsUpdate' ),
                        array( 'doCollationUpdate' ),
@@ -229,6 +226,11 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
                        array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                        array( 'addIndex', 'page_props', 'pp_propname_page',  'patch-page_props-propname-page-index.sql' ),
+                       array( 'addIndex', 'image', 'img_media_mime', 'patch-img_media_mime-index.sql' ),
+
+                       // 1.22
+                       array( 'doIwlinksIndexNonUnique' ),
+                       array( 'addIndex', 'iwlinks', 'iwl_prefix_from_title',  'patch-iwlinks-from-title-index.sql' ),
                );
        }
 
@@ -846,15 +848,6 @@ class MysqlUpdater extends DatabaseUpdater {
                return $this->applyPatch( 'patch-pl-tl-il-unique.sql', false, "Making pl_namespace, tl_namespace and il_to indices UNIQUE" );
        }
 
-       protected function renameEuWikiId() {
-               if ( $this->db->fieldExists( 'external_user', 'eu_local_id', __METHOD__ ) ) {
-                       $this->output( "...eu_wiki_id already renamed to eu_local_id.\n" );
-                       return;
-               }
-
-               $this->applyPatch( 'patch-eu_local_id.sql', false, "Renaming eu_wiki_id -> eu_local_id" );
-       }
-
        protected function doUpdateMimeMinorField() {
                if ( $this->updateRowExists( 'mime_minor_length' ) ) {
                        $this->output( "...*_mime_minor fields are already long enough.\n" );
@@ -901,4 +894,18 @@ class MysqlUpdater extends DatabaseUpdater {
 
                $this->applyPatch( 'patch-user-newtalk-timestamp-null.sql', false, "Making user_last_timestamp nullable" );
        }
+
+       protected function doIwlinksIndexNonUnique() {
+               $info = $this->db->indexInfo( 'iwlinks', 'iwl_prefix_title_from' );
+               if ( is_array( $info ) && $info[0]->Non_unique ) {
+                       $this->output( "...iwl_prefix_title_from index is already non-UNIQUE.\n" );
+                       return true;
+               }
+               if ( $this->skipSchema ) {
+                       $this->output( "...skipping schema change (making iwl_prefix_title_from index non-UNIQUE).\n" );
+                       return false;
+               }
+
+               return $this->applyPatch( 'patch-iwl_prefix_title_from-non-unique.sql', false, "Making iwl_prefix_title_from index non-UNIQUE" );
+       }
 }
index 17285c5..08797b2 100644 (file)
@@ -89,7 +89,6 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addTable', 'module_deps',       'patch-module_deps.sql' ),
                        array( 'addTable', 'uploadstash',       'patch-uploadstash.sql' ),
                        array( 'addTable', 'user_former_groups','patch-user_former_groups.sql' ),
-                       array( 'addTable', 'external_user',     'patch-external_user.sql' ),
                        array( 'addTable', 'sites',             'patch-sites.sql' ),
 
                        # Needed before new field
@@ -232,6 +231,7 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addPgIndex', 'watchlist',     'wl_user',                '(wl_user)' ),
                        array( 'addPgIndex', 'logging',       'logging_user_type_time', '(log_user, log_type, log_timestamp)' ),
                        array( 'addPgIndex', 'logging',       'logging_page_id_time',   '(log_page,log_timestamp)' ),
+                       array( 'addPgIndex', 'iwlinks',       'iwl_prefix_from_title',  '(iwl_prefix, iwl_from, iwl_title)' ),
                        array( 'addPgIndex', 'iwlinks',       'iwl_prefix_title_from',  '(iwl_prefix, iwl_title, iwl_from)' ),
                        array( 'addPgIndex', 'job',           'job_timestamp_idx',      '(job_timestamp)' ),
                        array( 'addPgIndex', 'job',           'job_sha1',               '(job_sha1)' ),
@@ -251,6 +251,12 @@ class PostgresUpdater extends DatabaseUpdater {
                                array( 'cl_from', 'int4_ops', 'btree', 0 ),
                        ),
                        'CREATE INDEX cl_sortkey ON "categorylinks" USING "btree" ("cl_to", "cl_sortkey", "cl_from")' ),
+                       array( 'checkIndex', 'iwl_prefix_title_from', array(
+                               array('iwl_prefix', 'text_ops', 'btree', 0),
+                               array('iwl_title', 'text_ops', 'btree', 0),
+                               array('iwl_from', 'int4_ops', 'btree', 0),
+                       ),
+                       'CREATE INDEX iwl_prefix_title_from ON "iwlinks" USING "btree" ("iwl_prefix", "iwl_title", "iwl_from")' ),
                        array( 'checkIndex', 'logging_times', array(
                                array( 'log_timestamp', 'timestamptz_ops', 'btree', 0 ),
                        ),
@@ -770,7 +776,7 @@ END;
 
        protected function checkIwlPrefix() {
                if ( $this->db->indexExists( 'iwlinks', 'iwl_prefix' ) ) {
-                       $this->applyPatch( 'patch-rename-iwl_prefix.sql', false, "Replacing index 'iwl_prefix' with 'iwl_prefix_from_title'" );
+                       $this->applyPatch( 'patch-rename-iwl_prefix.sql', false, "Replacing index 'iwl_prefix' with 'iwl_prefix_title_from'" );
                }
        }
 
index 47650b6..28d8d66 100644 (file)
@@ -49,7 +49,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'doLogUsertextPopulation' ), # listed separately from the previous update because 1.16 was released without this update
                        array( 'doLogSearchPopulation' ),
                        array( 'addTable', 'l10n_cache',                        'patch-l10n_cache.sql' ),
-                       array( 'addTable', 'external_user',                     'patch-external_user.sql' ),
                        array( 'addIndex', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
                        array( 'addIndex', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
                        array( 'addField', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
@@ -62,7 +61,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'updatelog', 'ul_value',             'patch-ul_value.sql' ),
                        array( 'addField', 'interwiki',     'iw_api',           'patch-iw_api_and_wikiid.sql' ),
                        array( 'dropIndex', 'iwlinks', 'iwl_prefix',            'patch-kill-iwl_prefix.sql' ),
-                       array( 'dropIndex', 'iwlinks', 'iwl_prefix_from_title', 'patch-kill-iwl_pft.sql' ),
                        array( 'addField', 'categorylinks', 'cl_collation',     'patch-categorylinks-better-collation.sql' ),
                        array( 'doCollationUpdate' ),
                        array( 'addTable', 'msg_resource',                      'patch-msg_resource.sql' ),
@@ -109,6 +107,8 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ),
                        array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase-255.sql' ),
                        array( 'addIndex', 'page_props', 'pp_propname_page',  'patch-page_props-propname-page-index.sql' ),
+                       array( 'addIndex', 'image', 'img_media_mime', 'patch-img_media_mime-index.sql' ),
+                       array( 'addIndex', 'iwlinks', 'iwl_prefix_from_title',  'patch-iwlinks-from-title-index.sql' ),
                );
        }
 
index 7e2fbf5..64925f7 100644 (file)
@@ -195,15 +195,20 @@ abstract class Job {
 
        /**
         * @return bool Whether this job can be retried on failure by job runners
+        * @since 1.21
         */
        public function allowRetries() {
                return true;
        }
 
        /**
-        * Subclasses may need to override this to make duplication detection work
+        * Subclasses may need to override this to make duplication detection work.
+        * The resulting map conveys everything that makes the job unique. This is
+        * only checked if ignoreDuplicates() returns true, meaning that duplicate
+        * jobs are supposed to be ignored.
         *
         * @return Array Map of key/values
+        * @since 1.21
         */
        public function getDeduplicationInfo() {
                $info = array(
@@ -223,8 +228,10 @@ abstract class Job {
        }
 
        /**
+        * @see JobQueue::deduplicateRootJob()
         * @param string $key A key that identifies the task
         * @return Array
+        * @since 1.21
         */
        public static function newRootJobParams( $key ) {
                return array(
@@ -234,7 +241,9 @@ abstract class Job {
        }
 
        /**
+        * @see JobQueue::deduplicateRootJob()
         * @return Array
+        * @since 1.21
         */
        public function getRootJobParams() {
                return array(
@@ -247,6 +256,16 @@ abstract class Job {
                );
        }
 
+       /**
+        * @see JobQueue::deduplicateRootJob()
+        * @return bool
+        * @since 1.22
+        */
+       public function hasRootJobParams() {
+               return isset( $this->params['rootJobSignature'] )
+                       && isset( $this->params['rootJobTimestamp'] );
+       }
+
        /**
         * Insert a single job into the queue.
         * @return bool true on success
index 09ca67c..17a1338 100644 (file)
@@ -238,6 +238,30 @@ abstract class JobQueue {
                return 0; // not implemented
        }
 
+       /**
+        * Get the number of acquired jobs that can no longer be attempted.
+        * Queue classes should use caching if they are any slower without memcached.
+        *
+        * If caching is used, this number might be out of date for a minute.
+        *
+        * @return integer
+        * @throws MWException
+        */
+       final public function getAbandonedCount() {
+               wfProfileIn( __METHOD__ );
+               $res = $this->doGetAbandonedCount();
+               wfProfileOut( __METHOD__ );
+               return $res;
+       }
+
+       /**
+        * @see JobQueue::getAbandonedCount()
+        * @return integer
+        */
+       protected function doGetAbandonedCount() {
+               return 0; // not implemented
+       }
+
        /**
         * Push a single jobs into the queue.
         * This does not require $wgJobClasses to be set for the given job type.
@@ -403,12 +427,11 @@ abstract class JobQueue {
        protected function doDeduplicateRootJob( Job $job ) {
                global $wgMemc;
 
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
+               if ( !$job->hasRootJobParams() ) {
+                       throw new MWException( "Cannot register root job; missing parameters." );
                }
+               $params = $job->getRootJobParams();
+
                $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
                // Callers should call batchInsert() and then this function so that if the insert
                // fails, the de-duplication registration will be aborted. Since the insert is
@@ -449,13 +472,10 @@ abstract class JobQueue {
        protected function doIsRootJobOldDuplicate( Job $job ) {
                global $wgMemc;
 
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
+               if ( !$job->hasRootJobParams() ) {
                        return false; // job has no de-deplication info
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       trigger_error( "Cannot check root job; missing 'rootJobTimestamp'." );
-                       return false;
                }
+               $params = $job->getRootJobParams();
 
                // Get the last time this root job was enqueued
                $timestamp = $wgMemc->get( $this->getRootJobCacheKey( $params['rootJobSignature'] ) );
@@ -543,7 +563,7 @@ abstract class JobQueue {
         * This does not include jobs that are currently acquired or delayed.
         * This should only be called on a queue that is no longer being popped.
         *
-        * @return Iterator|Traversable|Array
+        * @return Iterator
         * @throws MWException
         */
        abstract public function getAllQueuedJobs();
@@ -552,12 +572,12 @@ abstract class JobQueue {
         * Get an iterator to traverse over all delayed jobs in this queue.
         * This should only be called on a queue that is no longer being popped.
         *
-        * @return Iterator|Traversable|Array
+        * @return Iterator
         * @throws MWException
         * @since 1.22
         */
        public function getAllDelayedJobs() {
-               return array(); // not implemented
+               return new ArrayIterator( array() ); // not implemented
        }
 
        /**
index aae800e..c6a799d 100644 (file)
@@ -101,8 +101,18 @@ class JobQueueAggregatorRedis extends JobQueueAggregator {
                                        $pendingDBs[$type][] = $wiki;
                                }
                        } else { // cache miss
+                               // Avoid duplicated effort
+                               $conn->multi( Redis::MULTI );
+                               $conn->setnx( $this->getReadyQueueKey() . ":lock", 1 );
+                               $conn->expire( $this->getReadyQueueKey() . ":lock", 3600 );
+                               if ( $conn->exec() !== array( true, true ) ) { // lock
+                                       return array(); // already in progress
+                               }
+
                                $pendingDBs = $this->findPendingWikiQueues(); // (type => list of wikis)
 
+                               $conn->delete( $this->getReadyQueueKey() . ":lock" ); // unlock
+
                                $now = time();
                                $map = array();
                                foreach ( $pendingDBs as $type => $wikis ) {
index d6e96ef..ae4576c 100644 (file)
@@ -136,6 +136,39 @@ class JobQueueDB extends JobQueue {
                return $count;
        }
 
+       /**
+        * @see JobQueue::doGetAbandonedCount()
+        * @return integer
+        * @throws MWException
+        */
+       protected function doGetAbandonedCount() {
+               global $wgMemc;
+
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+
+               $key = $this->getCacheKey( 'abandonedcount' );
+
+               $count = $wgMemc->get( $key );
+               if ( is_int( $count ) ) {
+                       return $count;
+               }
+
+               list( $dbr, $scope ) = $this->getSlaveDB();
+               $count = (int)$dbr->selectField( 'job', 'COUNT(*)',
+                       array(
+                               'job_cmd' => $this->type,
+                               "job_token != {$dbr->addQuotes( '' )}",
+                               "job_attempts >= " . $dbr->addQuotes( $this->maxTries )
+                       ),
+                       __METHOD__
+               );
+               $wgMemc->set( $key, $count, self::CACHE_TTL_SHORT );
+
+               return $count;
+       }
+
        /**
         * @see JobQueue::doBatchPush()
         * @param array $jobs
index 706d42d..26a9b72 100644 (file)
@@ -154,6 +154,23 @@ class JobQueueRedis extends JobQueue {
                }
        }
 
+       /**
+        * @see JobQueue::doGetAbandonedCount()
+        * @return integer
+        * @throws MWException
+        */
+       protected function doGetAbandonedCount() {
+               if ( $this->claimTTL <= 0 ) {
+                       return 0; // no acknowledgements
+               }
+               $conn = $this->getConnection();
+               try {
+                       return $conn->zSize( $this->getQueueKey( 'z-abandoned' ) );
+               } catch ( RedisException $e ) {
+                       $this->throwRedisException( $this->server, $conn, $e );
+               }
+       }
+
        /**
         * @see JobQueue::doBatchPush()
         * @param array $jobs
@@ -424,12 +441,11 @@ LUA;
         * @throws MWException
         */
        protected function doDeduplicateRootJob( Job $job ) {
-               $params = $job->getParams();
-               if ( !isset( $params['rootJobSignature'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobSignature'." );
-               } elseif ( !isset( $params['rootJobTimestamp'] ) ) {
-                       throw new MWException( "Cannot register root job; missing 'rootJobTimestamp'." );
+               if ( !$job->hasRootJobParams() ) {
+                       throw new MWException( "Cannot register root job; missing parameters." );
                }
+               $params = $job->getRootJobParams();
+
                $key = $this->getRootJobCacheKey( $params['rootJobSignature'] );
 
                $conn = $this->getConnection();
@@ -598,8 +614,9 @@ LUA;
                        local released,abandoned,pruned = 0,0,0
                        -- Get all non-dead jobs that have an expired claim on them.
                        -- The score for each item is the last claim timestamp (UNIX).
-                       local staleClaims = redis.call('zRangeByScore',KEYS[1],0,ARGV[1],'WITHSCORES')
-                       for id,timestamp in ipairs(staleClaims) do
+                       local staleClaims = redis.call('zRangeByScore',KEYS[1],0,ARGV[1])
+                       for k,id in ipairs(staleClaims) do
+                               local timestamp = redis.call('zScore',KEYS[1],id)
                                local attempts = redis.call('hGet',KEYS[2],id)
                                if attempts < ARGV[3] then
                                        -- Claim expired and retries left: re-enqueue the job
@@ -615,8 +632,8 @@ LUA;
                        end
                        -- Get all of the dead jobs that have been marked as dead for too long.
                        -- The score for each item is the last claim timestamp (UNIX).
-                       local deadClaims = redis.call('zRangeByScore',KEYS[5],0,ARGV[2],'WITHSCORES')
-                       for id,timestamp in ipairs(deadClaims) do
+                       local deadClaims = redis.call('zRangeByScore',KEYS[5],0,ARGV[2])
+                       for k,id in ipairs(deadClaims) do
                                -- Stale and out of retries: remove any traces of the job
                                redis.call('zRem',KEYS[5],id)
                                redis.call('hDel',KEYS[2],id)
index 87f787d..b6bf3f8 100644 (file)
@@ -222,8 +222,8 @@ class SqlBagOStuff extends BagOStuff {
 
                $dataRows = array();
                foreach ( $keysByTable as $serverIndex => $serverKeys ) {
-                       $db = $this->getDB( $serverIndex );
                        try {
+                               $db = $this->getDB( $serverIndex );
                                foreach ( $serverKeys as $tableName => $tableKeys ) {
                                        $res = $db->select( $tableName,
                                                array( 'keyname', 'value', 'exptime' ),
@@ -244,10 +244,10 @@ class SqlBagOStuff extends BagOStuff {
                        if ( isset( $dataRows[$key] ) ) { // HIT?
                                $row = $dataRows[$key];
                                $this->debug( "get: retrieved data; expiry time is " . $row->exptime );
-                               $db = $this->getDB( $row->serverIndex );
-                               if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
-                                       $this->debug( "get: key has expired, deleting" );
-                                       try {
+                               try {
+                                       $db = $this->getDB( $row->serverIndex );
+                                       if ( $this->isExpired( $db, $row->exptime ) ) { // MISS
+                                               $this->debug( "get: key has expired, deleting" );
                                                $db->begin( __METHOD__ );
                                                # Put the expiry time in the WHERE condition to avoid deleting a
                                                # newly-inserted value
@@ -255,12 +255,12 @@ class SqlBagOStuff extends BagOStuff {
                                                        array( 'keyname' => $key, 'exptime' => $row->exptime ),
                                                        __METHOD__ );
                                                $db->commit( __METHOD__ );
-                                       } catch ( DBQueryError $e ) {
-                                               $this->handleWriteError( $e, $row->serverIndex );
+                                               $values[$key] = false;
+                                       } else { // HIT
+                                               $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
                                        }
-                                       $values[$key] = false;
-                               } else { // HIT
-                                       $values[$key] = $this->unserialize( $db->decodeBlob( $row->value ) );
+                               } catch ( DBQueryError $e ) {
+                                       $this->handleWriteError( $e, $row->serverIndex );
                                }
                        } else { // MISS
                                $values[$key] = false;
index 62c0822..14c75e9 100644 (file)
@@ -286,8 +286,12 @@ class ResourceLoader {
 
                // Add the testrunner (which configures QUnit) to the dependencies.
                // Since it must be ready before any of the test suites are executed.
-               foreach( $testModules['qunit'] as $moduleName => $moduleProps ) {
-                       $testModules['qunit'][$moduleName]['dependencies'][] = 'mediawiki.tests.qunit.testrunner';
+               foreach( $testModules['qunit'] as &$module ) {
+                       // Make sure all test modules are top-loading so that when QUnit starts
+                       // on document-ready, it will run once and finish. If some tests arrive
+                       // later (possibly after QUnit has already finished) they will be ignored.
+                       $module['position'] = 'top';
+                       $module['dependencies'][] = 'mediawiki.tests.qunit.testrunner';
                }
 
                foreach( $testModules as $id => $names ) {
@@ -594,7 +598,7 @@ class ResourceLoader {
                                // no matter how often we call ob_get_clean(), so instead of doing
                                // the more intuitive while ( ob_get_level() > 0 ) ob_get_clean();
                                // we have to be safe here and avoid an infinite loop.
-                               for ( $i = 0; $i < ob_get_level(); $i++ ) {
+                               for ( $i = 0, $len = ob_get_level(); $i < $len; $i++ ) {
                                        ob_end_clean();
                                }
 
@@ -671,8 +675,8 @@ class ResourceLoader {
         * @return String: Response data
         */
        public function makeModuleResponse( ResourceLoaderContext $context,
-               array $modules, $missing = array() )
-       {
+               array $modules, $missing = array()
+       {
                $out = '';
                $exceptions = '';
                if ( $modules === array() && $missing === array() ) {
@@ -894,7 +898,7 @@ class ResourceLoader {
                        // ResourceLoaderFileModule::getStyle can return the styles
                        // as a string or an array of strings. This is to allow separation in
                        // the front-end.
-                       $styles = (array) $styles;
+                       $styles = (array)$styles;
                        foreach ( $styles as $style ) {
                                $style = trim( $style );
                                // Don't output an empty "@media print { }" block (bug 40498)
@@ -986,12 +990,12 @@ class ResourceLoader {
         * @return string
         */
        public static function makeLoaderRegisterScript( $name, $version = null,
-               $dependencies = null, $group = null, $source = null )
-       {
+               $dependencies = null, $group = null, $source = null
+       {
                if ( is_array( $name ) ) {
                        return Xml::encodeJsCall( 'mw.loader.register', array( $name ) );
                } else {
-                       $version = (int) $version > 1 ? (int) $version : 1;
+                       $version = (int)$version > 1 ? (int)$version : 1;
                        return Xml::encodeJsCall( 'mw.loader.register',
                                array( $name, $version, $dependencies, $group, $source ) );
                }
index cedb5dc..2718bcb 100644 (file)
@@ -187,8 +187,8 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @endcode
         */
        public function __construct( $options = array(), $localBasePath = null,
-               $remoteBasePath = null )
-       {
+               $remoteBasePath = null
+       {
                global $IP, $wgScriptPath, $wgResourceBasePath;
                $this->localBasePath = $localBasePath === null ? $IP : $localBasePath;
                if ( $remoteBasePath !== null ) {
@@ -209,7 +209,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                case 'debugScripts':
                                case 'loaderScripts':
                                case 'styles':
-                                       $this->{$member} = (array) $option;
+                                       $this->{$member} = (array)$option;
                                        break;
                                // Collated lists of file paths
                                case 'languageScripts':
@@ -228,26 +228,26 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                                                "'$key' given, string expected."
                                                        );
                                                }
-                                               $this->{$member}[$key] = (array) $value;
+                                               $this->{$member}[$key] = (array)$value;
                                        }
                                        break;
                                // Lists of strings
                                case 'dependencies':
                                case 'messages':
                                case 'targets':
-                                       $this->{$member} = (array) $option;
+                                       $this->{$member} = (array)$option;
                                        break;
                                // Single strings
                                case 'group':
                                case 'position':
                                case 'localBasePath':
                                case 'remoteBasePath':
-                                       $this->{$member} = (string) $option;
+                                       $this->{$member} = (string)$option;
                                        break;
                                // Single booleans
                                case 'debugRaw':
                                case 'raw':
-                                       $this->{$member} = (bool) $option;
+                                       $this->{$member} = (bool)$option;
                                        break;
                        }
                }
@@ -481,7 +481,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         */
        protected static function collateFilePathListByOption( array $list, $option, $default ) {
                $collatedFiles = array();
-               foreach ( (array) $list as $key => $value ) {
+               foreach ( (array)$list as $key => $value ) {
                        if ( is_int( $key ) ) {
                                // File name as the value
                                if ( !isset( $collatedFiles[$default] ) ) {
index 03f3cc3..f6a7114 100644 (file)
@@ -319,7 +319,7 @@ abstract class ResourceLoaderModule {
                        ), __METHOD__
                );
                if ( !is_null( $deps ) ) {
-                       $this->fileDeps[$skin] = (array) FormatJson::decode( $deps, true );
+                       $this->fileDeps[$skin] = (array)FormatJson::decode( $deps, true );
                } else {
                        $this->fileDeps[$skin] = array();
                }
index 1cc5c1a..340d7df 100644 (file)
@@ -37,15 +37,19 @@ class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
         * @return Array: List of pages
         */
        protected function getPages( ResourceLoaderContext $context ) {
-               global $wgHandheldStyle;
+               global $wgUseSiteJs, $wgUseSiteCss, $wgHandheldStyle;
 
-               $pages = array(
-                       'MediaWiki:Common.js' => array( 'type' => 'script' ),
-                       'MediaWiki:Common.css' => array( 'type' => 'style' ),
-                       'MediaWiki:' . ucfirst( $context->getSkin() ) . '.js' => array( 'type' => 'script' ),
-                       'MediaWiki:' . ucfirst( $context->getSkin() ) . '.css' => array( 'type' => 'style' ),
-                       'MediaWiki:Print.css' => array( 'type' => 'style', 'media' => 'print' ),
-               );
+               $pages = array();
+               if ( $wgUseSiteJs ) {
+                       $pages['MediaWiki:Common.js'] = array( 'type' => 'script' );
+                       $pages['MediaWiki:' . ucfirst( $context->getSkin() ) . '.js'] = array( 'type' => 'script' );
+               }
+               if ( $wgUseSiteCss ) {
+                       $pages['MediaWiki:Common.css'] = array( 'type' => 'style' );
+                       $pages['MediaWiki:' . ucfirst( $context->getSkin() ) . '.css'] = array( 'type' => 'style' );
+
+               }
+               $pages['MediaWiki:Print.css'] = array( 'type' => 'style', 'media' => 'print' );
                if ( $wgHandheldStyle ) {
                        $pages['MediaWiki:Handheld.css'] = array(
                                'type' => 'style',
index bdb240e..9795cd0 100644 (file)
@@ -56,43 +56,44 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
        public function getStyles( ResourceLoaderContext $context ) {
                global $wgAllowUserCssPrefs, $wgUser;
 
-               if ( $wgAllowUserCssPrefs ) {
-                       $options = $wgUser->getOptions();
+               if ( !$wgAllowUserCssPrefs ) {
+                       return array();
+               }
 
-                       // Build CSS rules
-                       $rules = array();
+               $options = $wgUser->getOptions();
 
-                       // Underline: 2 = browser default, 1 = always, 0 = never
-                       if ( $options['underline'] < 2 ) {
-                               $rules[] = "a { text-decoration: " .
-                                       ( $options['underline'] ? 'underline' : 'none' ) . "; }";
-                       } else {
-                               # The scripts of these languages are very hard to read with underlines
-                               $rules[] = 'a:lang(ar), a:lang(ckb), a:lang(fa),a:lang(kk-arab), ' .
-                               'a:lang(mzn), a:lang(ps), a:lang(ur) { text-decoration: none; }';
-                       }
-                       if ( $options['justify'] ) {
-                               $rules[] = "#article, #bodyContent, #mw_content { text-align: justify; }\n";
-                       }
-                       if ( !$options['showtoc'] ) {
-                               $rules[] = "#toc { display: none; }\n";
-                       }
-                       if ( !$options['editsection'] ) {
-                               $rules[] = ".editsection { display: none; }\n";
-                       }
-                       if ( $options['editfont'] !== 'default' ) {
-                               // Double-check that $options['editfont'] consists of safe characters only
-                               if ( preg_match( '/^[a-zA-Z0-9_, -]+$/', $options['editfont'] ) ) {
-                                       $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
-                               }
-                       }
-                       $style = implode( "\n", $rules );
-                       if ( $this->getFlip( $context ) ) {
-                               $style = CSSJanus::transform( $style, true, false );
+               // Build CSS rules
+               $rules = array();
+
+               // Underline: 2 = browser default, 1 = always, 0 = never
+               if ( $options['underline'] < 2 ) {
+                       $rules[] = "a { text-decoration: " .
+                               ( $options['underline'] ? 'underline' : 'none' ) . "; }";
+               } else {
+                       # The scripts of these languages are very hard to read with underlines
+                       $rules[] = 'a:lang(ar), a:lang(ckb), a:lang(fa),a:lang(kk-arab), ' .
+                       'a:lang(mzn), a:lang(ps), a:lang(ur) { text-decoration: none; }';
+               }
+               if ( $options['justify'] ) {
+                       $rules[] = "#article, #bodyContent, #mw_content { text-align: justify; }\n";
+               }
+               if ( !$options['showtoc'] ) {
+                       $rules[] = "#toc { display: none; }\n";
+               }
+               if ( !$options['editsection'] ) {
+                       $rules[] = ".editsection { display: none; }\n";
+               }
+               if ( $options['editfont'] !== 'default' ) {
+                       // Double-check that $options['editfont'] consists of safe characters only
+                       if ( preg_match( '/^[a-zA-Z0-9_, -]+$/', $options['editfont'] ) ) {
+                               $rules[] = "textarea { font-family: {$options['editfont']}; }\n";
                        }
-                       return array( 'all' => $style );
                }
-               return array();
+               $style = implode( "\n", $rules );
+               if ( $this->getFlip( $context ) ) {
+                       $style = CSSJanus::transform( $style, true, false );
+               }
+               return array( 'all' => $style );
        }
 
        /**
index 1316f42..7586bb7 100644 (file)
@@ -33,12 +33,15 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
         * @return array
         */
        protected function getPages( ResourceLoaderContext $context ) {
-               global $wgUser;
+               global $wgUser, $wgUseSiteJs, $wgUseSiteCss;
 
                $userName = $context->getUser();
                if ( $userName === null ) {
                        return array();
                }
+               if ( !$wgUseSiteJs && !$wgUseSiteCss ) {
+                       return array();
+               }
 
                // Use $wgUser is possible; allows to skip a lot of code
                if ( is_object( $wgUser ) && $wgUser->getName() == $userName ) {
@@ -55,8 +58,12 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
                        if ( in_array( $group, array( '*', 'user' ) ) ) {
                                continue;
                        }
-                       $pages["MediaWiki:Group-$group.js"] = array( 'type' => 'script' );
-                       $pages["MediaWiki:Group-$group.css"] = array( 'type' => 'style' );
+                       if ( $wgUseSiteJs ) {
+                               $pages["MediaWiki:Group-$group.js"] = array( 'type' => 'script' );
+                       }
+                       if ( $wgUseSiteCss ) {
+                               $pages["MediaWiki:Group-$group.css"] = array( 'type' => 'style' );
+                       }
                }
                return $pages;
        }
index 177302c..7a04e47 100644 (file)
@@ -35,11 +35,15 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
         * @return array
         */
        protected function getPages( ResourceLoaderContext $context ) {
+               global $wgAllowUserJs, $wgAllowUserCss;
                $username = $context->getUser();
 
                if ( $username === null ) {
                        return array();
                }
+               if ( !$wgAllowUserJs && !$wgAllowUserCss ) {
+                       return array();
+               }
 
                // Get the normalized title of the user's user page
                $userpageTitle = Title::makeTitleSafe( NS_USER, $username );
@@ -50,14 +54,15 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
 
                $userpage = $userpageTitle->getPrefixedDBkey(); // Needed so $excludepages works
 
-               $pages = array(
-                       "$userpage/common.js" => array( 'type' => 'script' ),
-                       "$userpage/" . $context->getSkin() . '.js' =>
-                               array( 'type' => 'script' ),
-                       "$userpage/common.css" => array( 'type' => 'style' ),
-                       "$userpage/" . $context->getSkin() . '.css' =>
-                               array( 'type' => 'style' ),
-               );
+               $pages = array();
+               if ( $wgAllowUserJs ) {
+                       $pages["$userpage/common.js"] = array( 'type' => 'script' );
+                       $pages["$userpage/" . $context->getSkin() . '.js'] = array( 'type' => 'script' );
+               }
+               if ( $wgAllowUserCss ) {
+                       $pages["$userpage/common.css"] = array( 'type' => 'style' );
+                       $pages["$userpage/" . $context->getSkin() . '.css'] = array( 'type' => 'style' );
+               }
 
                // Hack for bug 26283: if we're on a preview page for a CSS/JS page,
                // we need to exclude that page from this module. In that case, the excludepage
index f3090dd..92ebbe9 100644 (file)
@@ -35,10 +35,9 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
        /**
         * Fetch the tokens for the current user.
         *
-        * @param $context ResourceLoaderContext: Context object
-        * @return Array: List of tokens keyed by token type
+        * @return array: List of tokens keyed by token type
         */
-       protected function contextUserTokens( ResourceLoaderContext $context ) {
+       protected function contextUserTokens() {
                global $wgUser;
 
                return array(
@@ -54,7 +53,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall( 'mw.user.tokens.set',
-                       array( $this->contextUserTokens( $context ) ),
+                       array( $this->contextUserTokens() ),
                        ResourceLoader::inDebugMode()
                );
        }
index e374979..901c7f9 100644 (file)
@@ -30,10 +30,15 @@ class DeletedContribsPager extends IndexPager {
        var $messages, $target;
        var $namespace = '', $mDb;
 
+       /**
+        * @var string Navigation bar with paging links.
+        */
+       protected $mNavigationBar;
+
        function __construct( IContextSource $context, $target, $namespace = false ) {
                parent::__construct( $context );
                $msgs = array( 'deletionlog', 'undeleteviewlink', 'diff' );
-               foreach( $msgs as $msg ) {
+               foreach ( $msgs as $msg ) {
                        $this->messages[$msg] = $this->msg( $msg )->escaped();
                }
                $this->target = $target;
@@ -52,17 +57,17 @@ class DeletedContribsPager extends IndexPager {
                $conds = array_merge( $userCond, $this->getNamespaceCond() );
                $user = $this->getUser();
                // Paranoia: avoid brute force searches (bug 17792)
-               if( !$user->isAllowed( 'deletedhistory' ) ) {
+               if ( !$user->isAllowed( 'deletedhistory' ) ) {
                        $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::DELETED_USER ) . ' = 0';
-               } elseif( !$user->isAllowed( 'suppressrevision' ) ) {
+               } elseif ( !$user->isAllowed( 'suppressrevision' ) ) {
                        $conds[] = $this->mDb->bitAnd( 'ar_deleted', Revision::SUPPRESSED_USER ) .
                                ' != ' . Revision::SUPPRESSED_USER;
                }
                return array(
                        'tables' => array( 'archive' ),
                        'fields' => array(
-                               'ar_rev_id', 'ar_namespace', 'ar_title', 'ar_timestamp', 'ar_comment', 'ar_minor_edit',
-                               'ar_user', 'ar_user_text', 'ar_deleted'
+                               'ar_rev_id', 'ar_namespace', 'ar_title', 'ar_timestamp', 'ar_comment',
+                               'ar_minor_edit', 'ar_user', 'ar_user_text', 'ar_deleted'
                        ),
                        'conds' => $conds,
                        'options' => array( 'USE INDEX' => $index )
@@ -107,8 +112,17 @@ class DeletedContribsPager extends IndexPager {
                $lang = $this->getLanguage();
                $limits = $lang->pipeList( $limitLinks );
 
-               $this->mNavigationBar = "(" . $lang->pipeList( array( $pagingLinks['first'], $pagingLinks['last'] ) ) . ") " .
-                       $this->msg( 'viewprevnext' )->rawParams( $pagingLinks['prev'], $pagingLinks['next'], $limits )->escaped();
+               $firstLast = $lang->pipeList( array( $pagingLinks['first'], $pagingLinks['last'] ) );
+               $firstLast = $this->msg( 'parentheses' )->rawParams( $firstLast )->escaped();
+               $prevNext = $this->msg( 'viewprevnext' )
+                       ->rawParams(
+                               $pagingLinks['prev'],
+                               $pagingLinks['next'],
+                               $limits
+                       )->escaped();
+               $separator = $this->msg( 'word-separator' )->escaped();
+               $this->mNavigationBar = $firstLast . $separator . $prevNext;
+
                return $this->mNavigationBar;
        }
 
@@ -138,15 +152,15 @@ class DeletedContribsPager extends IndexPager {
                $page = Title::makeTitle( $row->ar_namespace, $row->ar_title );
 
                $rev = new Revision( array(
-                               'title'      => $page,
-                               'id'         => $row->ar_rev_id,
-                               'comment'    => $row->ar_comment,
-                               'user'       => $row->ar_user,
-                               'user_text'  => $row->ar_user_text,
-                               'timestamp'  => $row->ar_timestamp,
-                               'minor_edit' => $row->ar_minor_edit,
-                               'deleted'    => $row->ar_deleted,
-                               ) );
+                       'title' => $page,
+                       'id' => $row->ar_rev_id,
+                       'comment' => $row->ar_comment,
+                       'user' => $row->ar_user,
+                       'user_text' => $row->ar_user_text,
+                       'timestamp' => $row->ar_timestamp,
+                       'minor_edit' => $row->ar_minor_edit,
+                       'deleted' => $row->ar_deleted,
+               ) );
 
                $undelete = SpecialPage::getTitleFor( 'Undelete' );
 
@@ -168,7 +182,7 @@ class DeletedContribsPager extends IndexPager {
 
                $user = $this->getUser();
 
-               if( $user->isAllowed( 'deletedtext' ) ) {
+               if ( $user->isAllowed( 'deletedtext' ) ) {
                        $last = Linker::linkKnown(
                                $undelete,
                                $this->messages['diff'],
@@ -184,9 +198,10 @@ class DeletedContribsPager extends IndexPager {
                }
 
                $comment = Linker::revComment( $rev );
-               $date = htmlspecialchars( $this->getLanguage()->userTimeAndDate( $rev->getTimestamp(), $user ) );
+               $date = $this->getLanguage()->userTimeAndDate( $rev->getTimestamp(), $user );
+               $date = htmlspecialchars( $date );
 
-               if( !$user->isAllowed( 'undelete' ) || !$rev->userCan( Revision::DELETED_TEXT, $user ) ) {
+               if ( !$user->isAllowed( 'undelete' ) || !$rev->userCan( Revision::DELETED_TEXT, $user ) ) {
                        $link = $date; // unusable link
                } else {
                        $link = Linker::linkKnown(
@@ -200,7 +215,7 @@ class DeletedContribsPager extends IndexPager {
                        );
                }
                // Style deleted items
-               if( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+               if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
                        $link = '<span class="history-deleted">' . $link . '</span>';
                }
 
@@ -210,7 +225,7 @@ class DeletedContribsPager extends IndexPager {
                        array( 'class' => 'mw-changeslist-title' )
                );
 
-               if( $rev->isMinor() ) {
+               if ( $rev->isMinor() ) {
                        $mflag = ChangesList::flag( 'minor' );
                } else {
                        $mflag = '';
@@ -218,7 +233,9 @@ class DeletedContribsPager extends IndexPager {
 
                // Revision delete link
                $del = Linker::getRevDeleteLink( $user, $rev, $page );
-               if ( $del ) $del .= ' ';
+               if ( $del ) {
+                       $del .= ' ';
+               }
 
                $tools = Html::rawElement(
                        'span',
@@ -231,7 +248,7 @@ class DeletedContribsPager extends IndexPager {
                $ret = "{$del}{$link} {$tools} {$separator} {$mflag} {$pagelink} {$comment}";
 
                # Denote if username is redacted for this edit
-               if( $rev->isDeleted( Revision::DELETED_USER ) ) {
+               if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
                        $ret .= " <strong>" . $this->msg( 'rev-deleted-user-contribs' )->escaped() . "</strong>";
                }
 
@@ -254,7 +271,7 @@ class DeletedContribsPager extends IndexPager {
 class DeletedContributionsPage extends SpecialPage {
        function __construct() {
                parent::__construct( 'DeletedContributions', 'deletedhistory',
-               /*listed*/ true, /*function*/ false, /*file*/ false );
+               /*listed*/true, /*function*/false, /*file*/false );
        }
 
        /**
@@ -265,6 +282,7 @@ class DeletedContributionsPage extends SpecialPage {
         */
        function execute( $par ) {
                global $wgQueryPageDefaultLimit;
+
                $this->setHeaders();
                $this->outputHeader();
 
@@ -321,23 +339,27 @@ class DeletedContributionsPage extends SpecialPage {
 
                # Show a message about slave lag, if applicable
                $lag = wfGetLB()->safeGetLag( $pager->getDatabase() );
-               if( $lag > 0 )
+               if ( $lag > 0 ) {
                        $out->showLagWarning( $lag );
+               }
 
                $out->addHTML(
                        '<p>' . $pager->getNavigationBar() . '</p>' .
-                       $pager->getBody() .
-                       '<p>' . $pager->getNavigationBar() . '</p>' );
+                               $pager->getBody() .
+                               '<p>' . $pager->getNavigationBar() . '</p>' );
 
                # If there were contributions, and it was a valid user or IP, show
                # the appropriate "footer" message - WHOIS tools, etc.
-               if( $target != 'newbies' ) {
+               if ( $target != 'newbies' ) {
                        $message = IP::isIPAddress( $target )
                                ? 'sp-contributions-footer-anon'
                                : 'sp-contributions-footer';
 
-                       if( !$this->msg( $message )->isDisabled() ) {
-                               $out->wrapWikiMsg( "<div class='mw-contributions-footer'>\n$1\n</div>", array( $message, $target ) );
+                       if ( !$this->msg( $message )->isDisabled() ) {
+                               $out->wrapWikiMsg(
+                                       "<div class='mw-contributions-footer'>\n$1\n</div>",
+                                       array( $message, $target )
+                               );
                        }
                }
        }
@@ -358,11 +380,12 @@ class DeletedContributionsPage extends SpecialPage {
                $nt = $userObj->getUserPage();
                $id = $userObj->getID();
                $talk = $nt->getTalkPage();
-               if( $talk ) {
+               if ( $talk ) {
                        # Talk page link
                        $tools[] = Linker::link( $talk, $this->msg( 'sp-contributions-talk' )->escaped() );
-                       if( ( $id !== null ) || ( $id === null && IP::isIPAddress( $nt->getText() ) ) ) {
-                               if( $this->getUser()->isAllowed( 'block' ) ) { # Block / Change block / Unblock links
+                       if ( ( $id !== null ) || ( $id === null && IP::isIPAddress( $nt->getText() ) ) ) {
+                               # Block / Change block / Unblock links
+                               if ( $this->getUser()->isAllowed( 'block' ) ) {
                                        if ( $userObj->isBlocked() ) {
                                                $tools[] = Linker::linkKnown( # Change block link
                                                        SpecialPage::getTitleFor( 'Block', $nt->getDBkey() ),
@@ -377,8 +400,8 @@ class DeletedContributionsPage extends SpecialPage {
                                                                'ip' => $nt->getDBkey()
                                                        )
                                                );
-                                       }
-                                       else { # User is not blocked
+                                       } else {
+                                               # User is not blocked
                                                $tools[] = Linker::linkKnown( # Block link
                                                        SpecialPage::getTitleFor( 'Block', $nt->getDBkey() ),
                                                        $this->msg( 'blocklink' )->escaped()
@@ -419,7 +442,7 @@ class DeletedContributionsPage extends SpecialPage {
                        # Add a link to change user rights for privileged users
                        $userrightsPage = new UserrightsPage();
                        $userrightsPage->setContext( $this->getContext() );
-                       if( $userrightsPage->userCanChangeRights( $userObj ) ) {
+                       if ( $userrightsPage->userCanChangeRights( $userObj ) ) {
                                $tools[] = Linker::linkKnown(
                                        SpecialPage::getTitleFor( 'Userrights', $nt->getDBkey() ),
                                        $this->msg( 'sp-contributions-userrights' )->escaped()
@@ -432,7 +455,8 @@ class DeletedContributionsPage extends SpecialPage {
 
                        // Show a note if the user is blocked and display the last block log entry.
                        if ( $userObj->isBlocked() ) {
-                               $out = $this->getOutput(); // LogEventsList::showLogExtract() wants the first parameter by ref
+                               // LogEventsList::showLogExtract() wants the first parameter by ref
+                               $out = $this->getOutput();
                                LogEventsList::showLogExtract(
                                        $out,
                                        'block',
@@ -458,9 +482,9 @@ class DeletedContributionsPage extends SpecialPage {
                $oldMsg = $this->msg( 'contribsub' );
                if ( $oldMsg->exists() ) {
                        return $oldMsg->rawParams( "$user ($links)" );
-               } else {
-                       return $this->msg( 'contribsub2' )->rawParams( $user, $links );
                }
+
+               return $this->msg( 'contribsub2' )->rawParams( $user, $links );
        }
 
        /**
@@ -499,27 +523,38 @@ class DeletedContributionsPage extends SpecialPage {
                        $f .= "\t" . Html::hidden( $name, $value ) . "\n";
                }
 
-               $f .= Xml::openElement( 'fieldset' ) .
-                       Xml::element( 'legend', array(), $this->msg( 'sp-contributions-search' )->text() ) .
-                       Xml::tags( 'label', array( 'for' => 'target' ), $this->msg( 'sp-contributions-username' )->parse() ) . ' ' .
-                       Html::input( 'target', $options['target'], 'text', array(
+               $f .= Xml::openElement( 'fieldset' );
+               $f .= Xml::element( 'legend', array(), $this->msg( 'sp-contributions-search' )->text() );
+               $f .= Xml::tags(
+                       'label',
+                       array( 'for' => 'target' ),
+                       $this->msg( 'sp-contributions-username' )->parse()
+               ) . ' ';
+               $f .= Html::input(
+                       'target',
+                       $options['target'],
+                       'text',
+                       array(
                                'size' => '20',
                                'required' => ''
-                       ) + ( $options['target'] ? array() : array( 'autofocus' ) ) ) . ' '.
-                       Html::namespaceSelector(
-                               array(
-                                       'selected' => $options['namespace'],
-                                       'all' => '',
-                                       'label' => $this->msg( 'namespace' )->text()
-                               ), array(
-                                       'name'  => 'namespace',
-                                       'id'    => 'namespace',
-                                       'class' => 'namespaceselector',
-                               )
-                       ) . ' ' .
-                       Xml::submitButton( $this->msg( 'sp-contributions-submit' )->text() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' );
+                       ) + ( $options['target'] ? array() : array( 'autofocus' ) )
+               ) . ' ';
+               $f .= Html::namespaceSelector(
+                       array(
+                               'selected' => $options['namespace'],
+                               'all' => '',
+                               'label' => $this->msg( 'namespace' )->text()
+                       ),
+                       array(
+                               'name' => 'namespace',
+                               'id' => 'namespace',
+                               'class' => 'namespaceselector',
+                       )
+               ) . ' ';
+               $f .= Xml::submitButton( $this->msg( 'sp-contributions-submit' )->text() );
+               $f .= Xml::closeElement( 'fieldset' );
+               $f .= Xml::closeElement( 'form' );
+
                return $f;
        }
 
index bc4f3bb..5927851 100644 (file)
@@ -84,6 +84,7 @@ class SpecialProtectedpages extends SpecialPage {
 
                $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
                if( !$title ) {
+                       wfProfileOut( __METHOD__ );
                        return Html::rawElement( 'li', array(),
                                Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
                                        Linker::getInvalidTitleDescription( $this->getContext(), $row->page_namespace, $row->page_title ) ) ) . "\n";
index a9d9cff..ab53bb5 100644 (file)
@@ -82,6 +82,7 @@ class SpecialProtectedtitles extends SpecialPage {
 
                $title = Title::makeTitleSafe( $row->pt_namespace, $row->pt_title );
                if( !$title ) {
+                       wfProfileOut( __METHOD__ );
                        return Html::rawElement( 'li', array(),
                                Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
                                        Linker::getInvalidTitleDescription( $this->getContext(), $row->pt_namespace, $row->pt_title ) ) ) . "\n";
index 008678f..d9145b8 100644 (file)
@@ -66,7 +66,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Create a FormOptions object with options as specified by the user
         *
-        * @param $parameters array
+        * @param array $parameters
         *
         * @return FormOptions
         */
@@ -91,7 +91,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Get custom show/hide filters
         *
-        * @return Array Map of filter URL param names to properties (msg/default)
+        * @return array Map of filter URL param names to properties (msg/default)
         */
        protected function getCustomFilters() {
                if ( $this->customFilters === null ) {
@@ -132,7 +132,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Main execution point
         *
-        * @param $subpage String
+        * @param string $subpage
         */
        public function execute( $subpage ) {
                $this->rcSubpage = $subpage;
@@ -172,6 +172,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                }
                if( $feedFormat ) {
                        list( $changesFeed, $formatter ) = $this->getFeedObject( $feedFormat );
+                       /** @var ChangesFeed $changesFeed */
                        $changesFeed->execute( $formatter, $rows, $lastmod, $opts );
                } else {
                        $this->webOutput( $rows, $opts );
@@ -183,7 +184,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Return an array with a ChangesFeed object and ChannelFeed object
         *
-        * @return Array
+        * @param string $feedFormat Feed's format (either 'rss' or 'atom')
+        * @return array
         */
        public function getFeedObject( $feedFormat ) {
                $changesFeed = new ChangesFeed( $feedFormat, 'rcfeed' );
@@ -199,8 +201,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * Process $par and put options found if $opts
         * Mainly used when including the page
         *
-        * @param $par String
-        * @param $opts FormOptions
+        * @param string $par
+        * @param FormOptions $opts
         */
        public function parseParameters( $par, FormOptions $opts ) {
                $bits = preg_split( '/\s*,\s*/', trim( $par ) );
@@ -252,8 +254,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * Don't use this if we are using the patrol feature, patrol changes don't
         * update the timestamp
         *
-        * @param $feedFormat String
-        * @return String or false
+        * @param string $feedFormat
+        * @return string|bool
         */
        public function checkLastModified( $feedFormat ) {
                $dbr = wfGetDB( DB_SLAVE );
@@ -270,7 +272,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Return an array of conditions depending of options set in $opts
         *
-        * @param $opts FormOptions
+        * @param FormOptions $opts
         * @return array
         */
        public function buildMainQueryConds( FormOptions $opts ) {
@@ -362,9 +364,9 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Process the query
         *
-        * @param $conds Array
-        * @param $opts FormOptions
-        * @return bool|ResultWrapper result or false (for Recentchangeslinked only)
+        * @param array $conds
+        * @param FormOptions $opts
+        * @return bool|ResultWrapper Result or false (for Recentchangeslinked only)
         */
        public function doMainQuery( $conds, $opts ) {
                $tables = array( 'recentchanges' );
@@ -468,8 +470,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Send output to the OutputPage object, only called if not used feeds
         *
-        * @param array $rows of database rows
-        * @param $opts FormOptions
+        * @param array $rows Database rows
+        * @param FormOptions $opts
         */
        public function webOutput( $rows, $opts ) {
                global $wgRCShowWatchingUsers, $wgShowUpdatedMarker, $wgAllowCategorizedRecentChanges;
@@ -567,8 +569,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Return the text to be displayed above the changes
         *
-        * @param $opts FormOptions
-        * @return String: XHTML
+        * @param FormOptions $opts
+        * @return string XHTML
         */
        public function doHeader( $opts ) {
                global $wgScript;
@@ -629,8 +631,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Get options to be displayed in a form
         *
-        * @param $opts FormOptions
-        * @return Array
+        * @param FormOptions $opts
+        * @return array
         */
        function getExtraOptions( $opts ) {
                $extraOpts = array();
@@ -653,7 +655,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Send the text to be displayed above the options
         *
-        * @param $opts FormOptions
+        * @param FormOptions $opts Unused
         */
        function setTopText( FormOptions $opts ) {
                global $wgContLang;
@@ -675,7 +677,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * Send the text to be displayed after the options, for use in
         * Recentchangeslinked
         *
-        * @param $opts FormOptions
+        * @param FormOptions $opts
         */
        function setBottomText( FormOptions $opts ) {}
 
@@ -683,8 +685,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
         * Creates the choose namespace selection
         *
         * @todo Uses radio buttons (HASHAR)
-        * @param $opts FormOptions
-        * @return String
+        * @param FormOptions $opts
+        * @return string
         */
        protected function namespaceFilterForm( FormOptions $opts ) {
                $nsSelect = Html::namespaceSelector(
@@ -708,8 +710,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Create a input to filter changes by categories
         *
-        * @param $opts FormOptions
-        * @return Array
+        * @param FormOptions $opts
+        * @return array
         */
        protected function categoryFilterForm( FormOptions $opts ) {
                list( $label, $input ) = Xml::inputLabelSep( $this->msg( 'rc_categories' )->text(),
@@ -724,8 +726,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Filter $rows by categories set in $opts
         *
-        * @param array $rows of database rows
-        * @param $opts FormOptions
+        * @param array $rows Database rows
+        * @param FormOptions $opts
         */
        function filterByCategories( &$rows, FormOptions $opts ) {
                $categories = array_map( 'trim', explode( '|', $opts['categories'] ) );
@@ -788,10 +790,10 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Makes change an option link which carries all the other options
         *
-        * @param $title Title
-        * @param array $override options to override
-        * @param array $options current options
-        * @param $active Boolean: whether to show the link in bold
+        * @param string $title Title
+        * @param array $override Options to override
+        * @param array $options Current options
+        * @param bool $active Whether to show the link in bold
         * @return string
         */
        function makeOptionsLink( $title, $override, $options, $active = false ) {
@@ -816,8 +818,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        /**
         * Creates the options panel.
         *
-        * @param $defaults Array
-        * @param $nondefaults Array
+        * @param array $defaults
+        * @param array $nondefaults
         * @return string
         */
        function optionsPanel( $defaults, $nondefaults ) {
@@ -849,6 +851,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $wgRCLinkDays = array_unique( $wgRCLinkDays );
 
                // limit links
+               $cl = array();
                foreach( $wgRCLinkLimits as $value ) {
                        $cl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'limit' => $value ), $nondefaults, $value == $options['limit'] );
@@ -856,6 +859,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
                $cl = $lang->pipeList( $cl );
 
                // day links, reset 'from' to none
+               $dl = array();
                foreach( $wgRCLinkDays as $value ) {
                        $dl[] = $this->makeOptionsLink( $lang->formatNum( $value ),
                                array( 'days' => $value, 'from' => '' ), $nondefaults, $value == $options['days'] );
index bc1b600..ec924b0 100644 (file)
@@ -171,11 +171,7 @@ class SpecialStatistics extends SpecialPage {
                                $this->formatRow( $this->msg( 'statistics-users' )->parse(),
                                                $this->getLanguage()->formatNum( $this->users ),
                                                array( 'class' => 'mw-statistics-users' ) ) .
-                               $this->formatRow( $this->msg( 'statistics-users-active' )->parse() . ' ' .
-                                                       Linker::linkKnown(
-                                                               SpecialPage::getTitleFor( 'Activeusers' ),
-                                                               $this->msg( 'listgrouprights-members' )->escaped()
-                                                       ),
+                               $this->formatRow( $this->msg( 'statistics-users-active' )->parse(),
                                                $this->getLanguage()->formatNum( $this->activeUsers ),
                                                array( 'class' => 'mw-statistics-users-active' ),
                                                'statistics-users-active-desc',
index eef6691..17c8ec9 100644 (file)
@@ -51,11 +51,6 @@ class LoginForm extends SpecialPage {
        var $mAbortLoginErrorMsg = 'login-abort-generic';
        private $mLoaded = false;
 
-       /**
-        * @var ExternalUser
-        */
-       private $mExtUser = null;
-
        /**
         * @ var WebRequest
         */
@@ -480,14 +475,6 @@ class LoginForm extends SpecialPage {
 
                $wgAuth->initUser( $u, $autocreate );
 
-               if ( $this->mExtUser ) {
-                       $this->mExtUser->linkToLocal( $u->getId() );
-                       $email = $this->mExtUser->getPref( 'emailaddress' );
-                       if ( $email && !$this->mEmail ) {
-                               $u->setEmail( $email );
-                       }
-               }
-
                $u->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
                $u->saveSettings();
 
@@ -550,10 +537,6 @@ class LoginForm extends SpecialPage {
                        return self::SUCCESS;
                }
 
-               $this->mExtUser = ExternalUser::newFromName( $this->mUsername );
-
-               # TODO: Allow some magic here for invalid external names, e.g., let the
-               # user choose a different wiki name.
                $u = User::newFromName( $this->mUsername );
                if( !( $u instanceof User ) || !User::isUsableName( $u->getName() ) ) {
                        return self::ILLEGAL;
@@ -568,16 +551,6 @@ class LoginForm extends SpecialPage {
                                $isAutoCreated = true;
                        }
                } else {
-                       global $wgExternalAuthType, $wgAutocreatePolicy;
-                       if ( $wgExternalAuthType && $wgAutocreatePolicy != 'never'
-                               && is_object( $this->mExtUser )
-                               && $this->mExtUser->authenticate( $this->mPassword )
-                       ) {
-                               # The external user and local user have the same name and
-                               # password, so we assume they're the same.
-                               $this->mExtUser->linkToLocal( $u->getID() );
-                       }
-
                        $u->load();
                }
 
@@ -696,40 +669,22 @@ class LoginForm extends SpecialPage {
         * @return integer Status code
         */
        function attemptAutoCreate( $user ) {
-               global $wgAuth, $wgAutocreatePolicy;
+               global $wgAuth;
 
                if ( $this->getUser()->isBlockedFromCreateAccount() ) {
                        wfDebug( __METHOD__ . ": user is blocked from account creation\n" );
                        return self::CREATE_BLOCKED;
                }
-
-               /**
-                * If the external authentication plugin allows it, automatically cre-
-                * ate a new account for users that are externally defined but have not
-                * yet logged in.
-                */
-               if ( $this->mExtUser ) {
-                       # mExtUser is neither null nor false, so use the new ExternalAuth
-                       # system.
-                       if ( $wgAutocreatePolicy == 'never' ) {
-                               return self::NOT_EXISTS;
-                       }
-                       if ( !$this->mExtUser->authenticate( $this->mPassword ) ) {
-                               return self::WRONG_PLUGIN_PASS;
-                       }
-               } else {
-                       # Old AuthPlugin.
-                       if ( !$wgAuth->autoCreate() ) {
-                               return self::NOT_EXISTS;
-                       }
-                       if ( !$wgAuth->userExists( $user->getName() ) ) {
-                               wfDebug( __METHOD__ . ": user does not exist\n" );
-                               return self::NOT_EXISTS;
-                       }
-                       if ( !$wgAuth->authenticate( $user->getName(), $this->mPassword ) ) {
-                               wfDebug( __METHOD__ . ": \$wgAuth->authenticate() returned false, aborting\n" );
-                               return self::WRONG_PLUGIN_PASS;
-                       }
+               if ( !$wgAuth->autoCreate() ) {
+                       return self::NOT_EXISTS;
+               }
+               if ( !$wgAuth->userExists( $user->getName() ) ) {
+                       wfDebug( __METHOD__ . ": user does not exist\n" );
+                       return self::NOT_EXISTS;
+               }
+               if ( !$wgAuth->authenticate( $user->getName(), $this->mPassword ) ) {
+                       wfDebug( __METHOD__ . ": \$wgAuth->authenticate() returned false, aborting\n" );
+                       return self::WRONG_PLUGIN_PASS;
                }
 
                $abortError = '';
index 78c64e1..34af8ca 100644 (file)
@@ -331,7 +331,7 @@ abstract class UploadBase {
         * @return mixed true if valid, otherwise and array with 'status'
         * and other keys
         **/
-       protected function validateName() {
+       public function validateName() {
                $nt = $this->getTitle();
                if( is_null( $nt ) ) {
                        $result = array( 'status' => $this->mTitleError );
index 57d456a..dd8a314 100644 (file)
@@ -742,20 +742,6 @@ class Language {
                return $this->getNsText( NS_SPECIAL ) . ':' . $name;
        }
 
-       /**
-        * @return array
-        */
-       function getQuickbarSettings() {
-               return array(
-                       $this->getMessage( 'qbsettings-none' ),
-                       $this->getMessage( 'qbsettings-fixedleft' ),
-                       $this->getMessage( 'qbsettings-fixedright' ),
-                       $this->getMessage( 'qbsettings-floatingleft' ),
-                       $this->getMessage( 'qbsettings-floatingright' ),
-                       $this->getMessage( 'qbsettings-directionality' )
-               );
-       }
-
        /**
         * @return array
         */
index 175a304..9082fca 100644 (file)
@@ -1833,7 +1833,6 @@ Vir veiligheidsredes is img_auth.php gedeaktiveer.",
 'http-read-error' => 'Fout met die lees van HTTP.',
 'http-timed-out' => 'HTTP-versoek se tyd is verstreke.',
 'http-curl-error' => 'Fout met die ophaal van URL: $1',
-'http-host-unreachable' => 'Die URL is nie bereikbaar nie.',
 'http-bad-status' => "Daar was 'n probleem tydens die HTTP-versoek: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3043,8 +3042,6 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'pageinfo-category-files' => 'Aantal lêers',
 
 # Skin names
-'skinname-standard' => 'Standaard',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Keulen blou',
 
 # Patrolling
index 08fee10..d586e8e 100644 (file)
@@ -2126,7 +2126,6 @@ $1',
 'http-read-error' => 'خطأ قراءة HTTP.',
 'http-timed-out' => 'انتهت مهلة طلب HTTP.',
 'http-curl-error' => 'فشل جلب المسار: $1',
-'http-host-unreachable' => 'تعذر الوصول إلى المسار.',
 'http-bad-status' => 'ثمة مشكلة أثناء طلب HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2752,7 +2751,7 @@ $UNWATCHURL
 'undeletereset' => 'أعد الضبط',
 'undeleteinvert' => 'اعكس الاختيار',
 'undeletecomment' => 'السبب:',
-'undeletedrevisions' => 'تم استرجاع {{PLURAL:$1|تعديل واحد|تعديلين|$1 تعديلات|$1 تعديل|$1 تعديلا}}',
+'undeletedrevisions' => 'تم استرجاع {{PLURAL:$1||تعديل واحد|تعديلين|$1 تعديلات|$1 تعديلا|$1 تعديل}}',
 'undeletedrevisions-files' => 'أسترجعت {{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}  و{{PLURAL:$2||ملف واحد|ملفان|$2 ملفات|$2 ملفًا|$2 ملف}}',
 'undeletedfiles' => 'أسترجع {{PLURAL:$1||ملف واحد|ملفان|$1 ملفات|$1 ملفًا|$1 ملف}}',
 'cannotundelete' => 'فشل الاسترجاع؛
@@ -3277,13 +3276,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* ستؤثر الأنماط المتراصة (CSS) المعروضة هنا على كل الواجهات */',
-'standard.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة ستاندرد */',
-'nostalgia.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة نوستالشيا */',
 'cologneblue.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة كولون بلو */',
 'monobook.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مونوبوك */',
-'myskin.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة ماي سكين */',
-'chick.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة تشيك */',
-'simple.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة سيمبل */',
 'modern.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة مودرن */',
 'vector.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على مستخدمي واجهة فكتور */',
 'print.css' => '/* الأنماط المتراصة CSS المعروضة هنا ستؤثر على ناتج الطباعة */',
@@ -3296,13 +3290,8 @@ $1',
 
 # Scripts
 'common.js' => '/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */',
-'standard.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة ستاندرد */',
-'nostalgia.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة نوستالشيا */',
 'cologneblue.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة كولون بلو */',
 'monobook.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مونوبوك */',
-'myskin.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة ماي سكين */',
-'chick.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة تشيك */',
-'simple.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة سيمبل */',
 'modern.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة مودرن */',
 'vector.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين الذين يستعملون واجهة فكتور */',
 'group-autoconfirmed.js' => '/* أي جافاسكريبت هنا سيتم تحميلها للمستخدمين المؤكدين تلقائيا فقط */',
@@ -3382,13 +3371,8 @@ $1',
 'pageinfo-category-files' => 'عدد الملفات',
 
 # Skin names
-'skinname-standard' => 'كلاسيك',
-'skinname-nostalgia' => 'نوستالجيا',
 'skinname-cologneblue' => 'كولون بلو',
 'skinname-monobook' => 'مونوبوك',
-'skinname-myskin' => 'ماي سكين',
-'skinname-chick' => 'تشيك',
-'skinname-simple' => 'سيمبل',
 'skinname-modern' => 'مودرن',
 'skinname-vector' => 'فكتور',
 
index 0c87946..c33d55f 100644 (file)
@@ -1715,7 +1715,6 @@ Pa una meyor seguridá, img_auth.php ta desactiváu.",
 'http-read-error' => 'Error de llectura HTTP.',
 'http-timed-out' => "La llamada HTTP escosó'l tiempu.",
 'http-curl-error' => 'Error al baxar la URL: $1',
-'http-host-unreachable' => 'Nun se pudo acceder a la URL.',
 'http-bad-status' => 'Hebo un problema demientres la llamada HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2841,13 +2840,8 @@ Pues ver el so códigu fonte.',
 
 # Stylesheets
 'common.css' => "/* Los CSS allugaos equí s'aplicarán a tolos aspeutos */",
-'standard.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Standard */',
-'nostalgia.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Nostalgia */',
 'cologneblue.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Cologne Blue */',
 'monobook.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Monobook */',
-'myskin.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu MySkin */',
-'chick.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Chick */',
-'simple.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Simple */',
 'modern.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Modern */',
 'vector.css' => '/* Los CSS allugaos equí afeutarán a los usuarios del aspeutu Vector */',
 'print.css' => '/* Los CSS allugaos equí afeutarán a la salida pola imprentadora */',
@@ -2860,13 +2854,8 @@ Pues ver el so códigu fonte.',
 
 # Scripts
 'common.js' => '/* Cualesquier JavaScript que tea equí se cargará pa tolos usuarios en cada carga de páxina. */',
-'standard.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Standard */',
-'nostalgia.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Nostalgia */',
 'cologneblue.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Cologne Blue */',
 'monobook.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MonoBook */',
-'myskin.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu MySkin */',
-'chick.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Chick */',
-'simple.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Simple */',
 'modern.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Modern */',
 'vector.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios del aspeutu Vector */',
 'group-autoconfirmed.js' => '/* Cualesquier JavaScript que tea equí se cargará pa los usuarios autoconfirmaos namái */',
@@ -2946,10 +2935,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-category-files' => 'Númberu de ficheros',
 
 # Skin names
-'skinname-standard' => 'Clásicu',
-'skinname-nostalgia' => 'Señardá',
 'skinname-cologneblue' => 'Azul Colonia',
-'skinname-myskin' => 'MySkin',
 'skinname-modern' => 'Modernu',
 
 # Patrolling
index 06c0044..5eca5f1 100644 (file)
@@ -1697,7 +1697,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization صحیفه‌‌سین
 'http-read-error' => 'اچ‌تی‌تی‌پی اوخوما ختاسی',
 'http-timed-out' => 'اچ‌تی‌تی‌پی ایستیی‌نین واختی بیتدی.',
 'http-curl-error' => 'مراجعت نشانی ده یانلیش : $1',
-'http-host-unreachable' => 'آدرسه چاتماق اولمادی (خطا).',
 'http-bad-status' => 'اچ‌تی‌تی‌پی مراجعتین یوخلانماسی زامانی پروبلئم آشکارلانمیش‌دیر: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2516,6 +2515,7 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'sorbsreason' => 'ای پی عنوانینیز، {{SITENAME}} سایتی طرفین‌دن ایستیفاده ائدیلن DNSBL آچیق پروکسی اولا‌راق اولونموش.',
 'sorbs_create_account_reason' => 'ایپ اونوانینیز {{SITENAME}} سایتی طرفین‌دن ایستیفاده ائدیلن DNSBL آچیق پروکسی اولا‌راق اولونموش.
 حساب میدانا گتیره بیلمز',
+'xffblockreason' => 'X-Forwarded-For باشلیغیندا، سیزین یا بیر ایشلتدیگینیز پروکسی خیدمتچی‌نین بلوکلانمیش آی‌پی آدرسی وار. ایلکین بلوکلاما سببی: $1',
 'cant-block-while-blocked' => 'سیز ائنگئللیيکئن باشقا ایستیفاده‌چیلری مانعه تؤره‌ده بیلمزسینیز.',
 'cant-see-hidden-user' => 'قارشیسینی آلماق ایسته‌دیگینیز ایستیفاده‌چی اونسوز دا مانعه تؤره‌دیلمیش و گیزلنمیش. کوللانیجیگیزلئ ایجازه‌نیز اولمادیغی اوچون، ایستیفاده‌چی‌نین قارشیسی‌نین آلینماسینی گؤره بیلمز يا دا ديَیشدیره.',
 'ipbblocked' => 'دیگر ایستیفاده‌چیلری مانعه تؤره‌ده بیلمز يا دا مانعه تؤرتمه‌سینی قالدیرا بیلمز، چونکی اؤزونوز ائنگئللئنمیشسیز',
@@ -2895,9 +2895,6 @@ $1 آدلی ایستیفاده‌چی‌نین باغلانما سببی: "$2"',
 'pageinfo-category-subcats' => 'آلت‌بؤلمه‌لرین سایی',
 'pageinfo-category-files' => 'فایل‌لارین سایی',
 
-# Skin names
-'skinname-myskin' => 'منیم قابیغیم',
-
 # Patrolling
 'markaspatrolleddiff' => 'ایداره ائدیلمیش اولا‌راق ایشاره‌له',
 'markaspatrolledtext' => 'صحیفنی پاتروللانمیش کیمی ایشاره‌له',
@@ -3701,13 +3698,13 @@ $5
 'logentry-delete-restore' => '$1، $3 صحیفه‌سینی {{GENDER:$2|قایتاردی}}',
 'logentry-delete-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4',
 'logentry-delete-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4',
-'logentry-delete-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی دَییشدیردی',
-'logentry-delete-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی دَییشدیردی',
-'logentry-suppress-delete' => '$1، $3 صحیفه‌سینی یاتیردی',
-'logentry-suppress-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه دَییشدیردی: $4',
-'logentry-suppress-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه دَییشدیردی: $4',
-'logentry-suppress-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی گیزلینجه دَییشدیردی',
-'logentry-suppress-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی گیزلینجه دَییشدیردی',
+'logentry-delete-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی {{GENDER:$2|دَییشدیردی}}',
+'logentry-delete-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی {{GENDER:$2|دَییشدیردی}}',
+'logentry-suppress-delete' => '$1، $3 صحیفه‌سینی {{GENDER:$2|یاتیردی}}',
+'logentry-suppress-event' => '$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه {{GENDER:$2|دَییشدیردی}}: $4',
+'logentry-suppress-revision' => '$1، $3 صحیفه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} گیزلینجه {{GENDER:$2|دَییشدیردی}}: $4',
+'logentry-suppress-event-legacy' => '$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی گیزلینجه {{GENDER:$2|دَییشدیردی}}',
+'logentry-suppress-revision-legacy' => '$1، $3 صحیفه‌سینده نوسخه‌لرین گؤرونوشلرینی گیزلینجه {{GENDER:$2|دَییشدیردی}}',
 'revdelete-content-hid' => 'ایچینده‌کیلر گیزلی‌دیر',
 'revdelete-summary-hid' => 'دَییشیکلیک قیساسی گیزلی‌دیر',
 'revdelete-uname-hid' => 'ایستیفاده‌چی آدی گیزلی‌دیر',
@@ -3716,20 +3713,20 @@ $5
 'revdelete-uname-unhid' => 'ایستیفاده‌چی آدی گیزلیلیک‌دن چیخدی',
 'revdelete-restricted' => 'ایداره‌چیلره محدودیت قویدو',
 'revdelete-unrestricted' => 'ایداره‌چیلرین محدودیتلرینی گؤتوردو',
-'logentry-move-move' => '$1، $3 صحیفه‌سینی $4-ه آپاردی',
-'logentry-move-move-noredirect' => '$1، $3 صحیفه‌سینی، یول‌لاندیرما قویماماق‌لا، $4-ه آپاردی',
-'logentry-move-move_redir' => '$1، $3 صحیفه‌سینی، $4-ده یول‌لاندیرما اوستونه آپاردی',
-'logentry-move-move_redir-noredirect' => '$1، $3 صحیفه‌سینی، یول‌لاندیرما قویماماق‌لا، یول‌لاندیرما اولان $4 اوستونه آپاردی',
-'logentry-patrol-patrol' => '$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، نظارتلنمیش نیشانلادی',
-'logentry-patrol-patrol-auto' => '$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، اوتوماتیک اولاراق نظارتلنمیش نیشانلادی',
-'logentry-newusers-newusers' => ' بیر ایستیفاده‌چی حسابی $1 یاراتدی',
-'logentry-newusers-create' => 'بیر ایستیفاده‌چی حسابی $1 یاراتدی',
-'logentry-newusers-create2' => 'بیر ایستیفاده‌چی $1 حسابی $3 یاراتدی',
-'logentry-newusers-byemail' => '$3 ایستیفاده‌چی حسابی، $1 ایله یارادیلیب و رمز، ایمیل ایله گؤندریلیب‌دیر',
-'logentry-newusers-autocreate' => '$1 Ø­Ø³Ø§Ø¨Û\8c Ø§Ù\88تÙ\88Ù\85اتÛ\8cÚ© Û\8cارادÛ\8cÙ\84دÛ\8c',
-'logentry-rights-rights' => '$1 $3-ین قروپ عوضولوگونو $4-دن $5-ه دَییشدیردی',
-'logentry-rights-rights-legacy' => '$1، $3-ین قروپ عوضولوگونو دَییشدیردی',
-'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه آرتیریلدی',
+'logentry-move-move' => '$1، $3 صحیفه‌سینی $4-ه {{GENDER:$2|آپاردی}}',
+'logentry-move-move-noredirect' => '$1، $3 صحیفه‌سینی، یول‌لاندیرما قویماماق‌لا، $4-ه {{GENDER:$2|آپاردی}}',
+'logentry-move-move_redir' => '$1، $3 صحیفه‌سینی، $4-ده یول‌لاندیرما اوستونه {{GENDER:$2|آپاردی}}',
+'logentry-move-move_redir-noredirect' => '$1، $3 صحیفه‌سینی، یول‌لاندیرما قویماماق‌لا، یول‌لاندیرما اولان $4 اوستونه {{GENDER:$2|آپاردی}}',
+'logentry-patrol-patrol' => '$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، نظارتلنمیش {{GENDER:$2|نیشانلادی}}',
+'logentry-patrol-patrol-auto' => '$1، $3 صحیفه‌سینین $4 نوسخه‌سینی، اوتوماتیک اولاراق نظارتلنمیش {{GENDER:$2|نیشانلادی}}',
+'logentry-newusers-newusers' => ' بیر ایستیفاده‌چی حسابی $1 {{GENDER:$2|یاراتدی}}',
+'logentry-newusers-create' => 'بیر ایستیفاده‌چی حسابی $1 {{GENDER:$2|یاراتدی}}',
+'logentry-newusers-create2' => '$1 ایستیفاده‌چی، $3 حسابی {{GENDER:$2|یاراتدی}}',
+'logentry-newusers-byemail' => '$3 ایستیفاده‌چی حسابی، $1 ایله {{GENDER:$2|یارادیلیب}} و رمز، ایمیل ایله گؤندریلیب‌دیر',
+'logentry-newusers-autocreate' => '$1 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø­Ø³Ø§Ø¨Û\8c Ø§Ù\88تÙ\88Ù\85اتÛ\8cÚ© {{GENDER:$2|Û\8cارادÛ\8cÙ\84دÛ\8c}}',
+'logentry-rights-rights' => '$1، $3-ین قروپ عوضولوگونو $4-دن $5-ه {{GENDER:$2|دَییشدیردی}}',
+'logentry-rights-rights-legacy' => '$1، $3-ین قروپ عوضولوگونو {{GENDER:$2|دَییشدیردی}}',
+'logentry-rights-autopromote' => '$1-ین مقامی اوتوماتیک $4-دن $5-ه {{GENDER:$2|آرتیریلدی}}',
 'rightsnone' => '(هئچ)',
 
 # Feedback
index 3344394..0d4a64e 100644 (file)
@@ -1867,7 +1867,6 @@ $1',
 'http-read-error' => 'Памылка чытаньня HTTP.',
 'http-timed-out' => 'Скончыўся час чаканьня HTTP-запыту.',
 'http-curl-error' => 'Памылка выбаркі URL-адрасу: $1',
-'http-host-unreachable' => 'Немагчыма дасягнуць URL-адрас',
 'http-bad-status' => 'Адбылася памылка пад час выкананьня HTTP-запыту: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3073,13 +3072,8 @@ $1',
 'pageinfo-category-files' => 'Колькасьць файлаў',
 
 # Skin names
-'skinname-standard' => 'Клясычнае',
-'skinname-nostalgia' => 'Настальгія',
 'skinname-cologneblue' => 'Кёльнскі смутак',
 'skinname-monobook' => 'Монакніга',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Цыпа',
-'skinname-simple' => 'Простае',
 'skinname-modern' => 'Сучаснае',
 'skinname-vector' => 'Вэктар',
 
index 2262e63..3efb191 100644 (file)
@@ -1780,7 +1780,6 @@ $1',
 'http-read-error' => 'HTTP грешка при четене.',
 'http-timed-out' => 'Пресрочено време за HTTP заявка.',
 'http-curl-error' => 'Грешка при извличането на URL: $1',
-'http-host-unreachable' => 'Недостъпен URL.',
 'http-bad-status' => 'Настъпи проблем по време на HTTP заявката: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2906,13 +2905,8 @@ $1',
 'pageinfo-category-files' => 'Брой файлове',
 
 # Skin names
-'skinname-standard' => 'Класика',
-'skinname-nostalgia' => 'Носталгия',
 'skinname-cologneblue' => 'Кьолнско синьо',
 'skinname-monobook' => 'Монобук',
-'skinname-myskin' => 'Моят облик',
-'skinname-chick' => 'Пиленце',
-'skinname-simple' => 'Семпъл',
 'skinname-modern' => 'Модерен',
 
 # Patrolling
index 417838d..20e80fb 100644 (file)
@@ -264,8 +264,8 @@ $messages = array(
 'category-subcat-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|sub-tumbung|$1 sub-tutumbung}} barikut.',
 'category-article-count' => '{{PLURAL:$2|Tumbung ni baisi asa tungkaran barikut haja.|Tutumbung ngini baisi {{PLURAL:$1|tungkaran|$1 tutungkaran}}, matan $2 sabarataan.}}',
 'category-article-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|asa tungkaran|$1 tutungkaran}} barikut.',
-'category-file-count' => '{{PLURAL:$2|Tumbung ngini hanya baisi asa barakas barikut.|Tumbung ngini baisi {{PLURAL:$1|barakas|$1 babarakas}} barikut, matan $2 sabarataan.}}',
-'category-file-count-limited' => 'Tumbung ini baisi {{PLURAL:$1|barakas|$1 barakas}} barikut.',
+'category-file-count' => '{{PLURAL:$2|Tumbung ngini wastu baisi satu barakas barikut.|Tumbung ngini baisi {{PLURAL:$1|barakas|$1 babarakas}} barikut, matan $2 sabarataan.}}',
+'category-file-count-limited' => 'Tumbung ngini baisi {{PLURAL:$1|barakas|$1 barakas}} barikut.',
 'listingcontinuesabbrev' => 'samb.',
 'index-category' => 'Tungkaran tasusun bapadalakan kata',
 'noindex-category' => 'Tungkaran kada tasusun bapadalakan kata',
@@ -807,11 +807,11 @@ atawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} mambabak tungkaran ngini]</span>
 'noarticletext-nopermission' => 'Parhatan ni kadada naskah di tungkaran ngini.
 Pian kawa [[Special:Search/{{PAGENAME}}|manggagai gasan judul ngini]] pintang tungkaran lain,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} manggagai log barait].</span>.',
-'userpage-userdoesnotexist' => 'Akun pamuruk "<nowiki>$1</nowiki>" kada tadaptar.
-Muhun pariksa amun Pian handak maulah/mambabak tungkaran ini.',
-'userpage-userdoesnotexist-view' => 'Akun pamuruk "$1" kada tadaptar.',
-'blocked-notice-logextract' => 'Pamuruk nangini parhatan ini diblukir.
-Log blukir pahabisannya tasadia di bawah ini gasan rujukan:',
+'userpage-userdoesnotexist' => 'Akun pamakai "<nowiki>$1</nowiki>" kada tadaptar.
+Muhun pariksa/ditukui amun Pian handak maulah/mambabak tungkaran ngini.',
+'userpage-userdoesnotexist-view' => 'Akun pamakai "$1" kada tadaptar.',
+'blocked-notice-logextract' => 'Pamakai nangini parhatan diblukir.
+Log blukir pahabisannya tasadia di bawah ngini gasan rujukan:',
 'clearyourcache' => "x'''Catatan: Habis manyimpan, Pian harus malingarakan cache panjalajah web Pian hagan malihat paubahan.'''
 *'''Firefox/Safari:''' tahan ''Shift'' parhatan klik ''Reload'', atawa picik ''Ctrl-F5'' atawa ''Ctrl-R'' (''Command-R'' pada sabuting Mac);
 * '''Google Chrome:''' picik ''Ctrl-Shift-R'' (''Command-Shift-R''  pada sabuting Mac)
@@ -878,15 +878,15 @@ Nangini kada kawa disimpan.",
 Pian kawa amun handak cut-n-paste naskah ka sabuah barakas naskah wan simpan ini gasan kaina.
 
 Pambakal nang manyunduk manjalasakan kaini: $1",
-'protectedpagewarning' => "'''Paringatan: Tungkaran ini sudah dilindungi laluai pamuruk awan hak istimiwa pambakal nang kawa mambabak ini.'''
-Log masuk pauncitan disadiakan di bawah gasan rujukan:",
-'semiprotectedpagewarning' => "'''Catatan:''' Tungkaran ini sudah dilindungi laluai pamuruk tadaptar haja nang kawa mambabak.
-Log masuk pauncitan disadiakan di bawah gasan rujukan:",
-'cascadeprotectedwarning' => "'''Paringatan:''' Tungkaran ini sudah dilindungi laluai pamuruk awan hak istimiwa pambakal haja nang kawa mambabak, karana ini tamasuk dalam baumpat parlindungan barénténg {{PLURAL: $1|tungkaran|tutungkaran}}:",
-'titleprotectedwarning' => "'''Paringatan: Tungkaran ini sudah dilindungi laluai [[Special:ListGroupRights|hak khas]] diparluakan hagan maulah ini.'''
-Log masuk pauncitan disadiakan di bawah gasan rujukan:",
-'templatesused' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di tungkaran ini:',
-'templatesusedpreview' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di titilikan ini:',
+'protectedpagewarning' => "'''Paringatan: Tungkaran ngini sudah dilindungi nang akibatnya pamakai awan hak istimiwa pambakal nang kawa mambabak ini.'''
+Log masuk pauncitnya disadiakan di bawah gasan rujukan:",
+'semiprotectedpagewarning' => "'''Catatan:''' Tungkaran ngini sudah dilindungi nang akibatnya pamakai tadaptar haja nang kawa mambabak.
+Log masuk pauncitnya disadiakan di bawah gasan rujukan:",
+'cascadeprotectedwarning' => "'''Paringatan:''' Tungkaran ngini sudah dilindungi nang akibatnya pamakai awan hak istimiwa pambakal haja nang kawa mambabak, sualnya ngini tamasuk dalam baumpat parlindungan barénténg {{PLURAL: $1|tungkaran|tutungkaran}}:",
+'titleprotectedwarning' => "'''Paringatan: Tungkaran ngini sudah dilindungi nang akibatnya [[Special:ListGroupRights|hak khas]] diparluakan hagan maulah ngini.'''
+Log masuk pauncitnya disadiakan di bawah gasan rujukan:",
+'templatesused' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di tungkaran ngini:',
+'templatesusedpreview' => '{{PLURAL:$1|Citakan|Citakan}} nang digunakan di titilikan ngini:',
 'templatesusedsection' => "{{PLURAL:$1|Citakan|Cicitakan}} nang diguna'akan di hagian ini:",
 'template-protected' => '(dilindungi)',
 'template-semiprotected' => '(semi-dilindungi)',
@@ -1373,7 +1373,7 @@ Amun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan ga
 'right-edit' => 'Mambaiki tungkaran',
 'right-createpage' => 'Ulah tutungkaran (nang lainan tutungkaran pamandiran)',
 'right-createtalk' => 'Maulah tutungkaran pamandiran',
-'right-createaccount' => 'Ulah akun pamuruk hanyar',
+'right-createaccount' => 'Ulah akun pamakai hanyar',
 'right-minoredit' => 'Tandai bababakan sawagai sapalih',
 'right-move' => 'Mamindahakan tungkaran',
 'right-move-subpages' => 'Ugahakan tutungkaran awan subtumgkaran-nya',
@@ -1735,11 +1735,10 @@ Gasan kaamanan baik, img_auth.php dipajahakan.',
 # HTTP errors
 'http-invalid-url' => 'URL kada sah: $1',
 'http-invalid-scheme' => 'URL lawan skema "$1" kada disukung.',
-'http-request-error' => 'Parmintaan HTTP gagal karana kasalah kada dikatahui.',
+'http-request-error' => 'Maminta HTTP gagal karana kasalah kada dikatahui.',
 'http-read-error' => 'Kasalahan baca HTTP.',
-'http-timed-out' => 'Parmintaan HTTP habis wayahnya.',
+'http-timed-out' => 'Maminta HTTP habis waktunya.',
 'http-curl-error' => 'Kasalahan pas maambil URL: $1',
-'http-host-unreachable' => 'Kada kawa mancapai URL.',
 'http-bad-status' => 'Ada sabuah masalah pas maminta HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1949,13 +1948,13 @@ File-file berikut digunakan tapi tidak ada. File dari repositori asing dapat ter
 'mostinterwikis' => 'Tutungkaran lawan interwiki pambanyaknya',
 'mostrevisions' => 'Tutungkaran lawan paubahan pambanyaknya',
 'prefixindex' => 'Samunyaan tungkaran wan awalan',
-'prefixindex-namespace' => 'Samunyaan tutungkaran baawalan ($1 ngaran-kamar)',
+'prefixindex-namespace' => 'Samunyaan tutungkaran nang ba-awalan (ruang-ngaran $1)',
 'shortpages' => 'Tutungkaran handap',
 'longpages' => 'Tutungkaran panjang',
 'deadendpages' => 'Tutungkaran buntu',
 'deadendpagestext' => 'Tutungkaran barikut kada bataut ka tutungkaran lain pada {{SITENAME}}.',
 'protectedpages' => 'Tutungkaran nang dilindungi',
-'protectedpages-indef' => 'Hanya gasan palindungan lawan jangka waktu kada tabatas',
+'protectedpages-indef' => 'Wastu gasan palindungan lawan jangka waktu kada bawatas',
 'protectedpages-cascade' => 'Palindungan barénténg haja',
 'protectedpagestext' => 'Tutungkaran barikut dilindungi matan pamindahan atawa pambabakan',
 'protectedpagesempty' => 'Kadada tutungkaran nang masih dilindungi awan paramitir ngitu.',
@@ -1968,7 +1967,7 @@ File-file berikut digunakan tapi tidak ada. File dari repositori asing dapat ter
 'usereditcount' => '$1 {{PLURAL:$1|babakan|bababakan}}',
 'usercreated' => '{{GENDER:$3|Diulah}} pada $1 pukul $2',
 'newpages' => 'Tungkaran hanyar',
-'newpages-username' => 'Ngaran pamuruk:',
+'newpages-username' => 'Ngaran pamakai:',
 'ancientpages' => 'Tutungkaran panuhanya',
 'move' => 'Pindahakan',
 'movethispage' => 'Pindahakan tungkaran ini',
@@ -2011,15 +2010,15 @@ Pian kada mawatasi tiringan lawan mamilih sabuah macam log, ngaran-pamuruk (sans
 'allpagesto' => 'Manampaiakan ujung pahabisan tungkaran:',
 'allarticles' => 'Samunyaan tungkaran',
 'allinnamespace' => 'Sabarataan tutungkaran (ngaran-kamar $1)',
-'allnotinnamespace' => 'Sabarataan tutungkaran (lainan di ngaran-kamar $1)',
+'allnotinnamespace' => 'Sabarataan tutungkaran (lainan di ruang-ngaran $1)',
 'allpagesprev' => 'Sabalumnya',
 'allpagesnext' => 'Dudi',
 'allpagessubmit' => 'Tulak',
 'allpagesprefix' => 'Tampilakan tutungkaran bamula lawan:',
 'allpagesbadtitle' => 'Judul tungkaran nang dibari kada sah atawa baisi sabuah awalan antar-bahasa atawa antar-wiki.
 Nangini bisa baisi satu atawa labih karaktir nang saharusnya kadada di judul.',
-'allpages-bad-ns' => '{{SITENAME}} kada baisi ngaran-kamar "$1".',
-'allpages-hide-redirects' => 'Sambunyiakan paalihan',
+'allpages-bad-ns' => '{{SITENAME}} kada baisi ruang-ngaran "$1".',
+'allpages-hide-redirects' => 'Sungkupakan paugahan',
 
 # SpecialCachedPage
 'cachedspecial-refresh-now' => 'Itihi ralatan pahanyarnya.',
@@ -2041,7 +2040,7 @@ Janaki jua [[Special:WantedCategories|tutumbung nang dihandaki]].',
 # Special:LinkSearch
 'linksearch' => 'Manggagai tautan luar',
 'linksearch-pat' => 'Gagai bapola:',
-'linksearch-ns' => 'Ngaran-kamar:',
+'linksearch-ns' => 'Ruang-ngaran:',
 'linksearch-ok' => 'Gagai',
 'linksearch-text' => 'Kartu liar nangkaya "*.wikipedia.org" hingkat diguna\'akan.
 Mamarlukan sadikitnya asa ranah tingkat atas, misalnya "*.org".<br />
@@ -2258,8 +2257,8 @@ Janaki [[Special:ProtectedPages|daptar tungkaran talindungi]] gasan daptar palin
 'protect-title' => 'Malindungi "$1"',
 'protect-title-notallowed' => 'Tiringi tingkat parlindungan matan "$1"',
 'prot_1movedto2' => '[[$1]] dipindahakan ka [[$2]]',
-'protect-badnamespace-title' => 'Ngaran-kamar nang kada-dilindungi',
-'protect-badnamespace-text' => 'Tutungkaran dalam ngaran-kamar ngini kada kawa dilindungi.',
+'protect-badnamespace-title' => 'Ruang-ngaran nang kada-dilindungi',
+'protect-badnamespace-text' => 'Tutungkaran dalam ruang-ngaran ngini kada kawa dilindungi.',
 'protect-norestrictiontypes-text' => 'Tungkaran ngini kada kawa dilindungi marga kadada janis pambatasan nang tasadia.',
 'protect-norestrictiontypes-title' => 'Tungkaran kada-dilindungi',
 'protect-legend' => 'Konpirmasi palindungan',
@@ -2278,9 +2277,9 @@ Di sia adalah pangaturan wayah ini gasan tungkaran '''$1''':",
 'protect-cascadeon' => 'Tungkaran ini rahatan dilindungi lantaran diumpatakan dalam {{PLURAL:$1|tungkaran|tungkaran-tungkaran}} barikut nang sudah aktip palindungan barénténgnya.
 Pian kawa maubah tingkatan palindungan gasan tungkaran ini, tagal ini kada pacang mangaruhi palindungan barénténg.',
 'protect-default' => 'Bulihakan samua pamuruk',
-'protect-fallback' => 'Hanya gasan pamakai lawan ijin "$1"',
+'protect-fallback' => 'Wastu gasan pamakai lawan ijin "$1"',
 'protect-level-autoconfirmed' => 'Blukir pamakai hanyar wan kada tadaptar',
-'protect-level-sysop' => 'Hanya pambakal',
+'protect-level-sysop' => 'Wastu pambakal',
 'protect-summary-cascade' => 'barénténg',
 'protect-expiring' => 'kadaluwarsa $1 (UTC)',
 'protect-expiring-local' => 'kadaluwarsa $1',
@@ -2371,11 +2370,11 @@ $1',
 'undelete-show-file-submit' => 'Iya-ai',
 
 # Namespace form on various pages
-'namespace' => 'Ngaran-kamar:',
+'namespace' => 'Ruang-ngaran:',
 'invert' => 'Bulikakan pilihan',
 'tooltip-invert' => 'Pariksa kutak ngini hagan manyungkupakan paubahan tutungkaran dalam ruang-ngaran tapilih (wan ruang-ngaran tarait jaka dipariksa)',
-'namespace_association' => 'Ngaran-kamat tarait',
-'tooltip-namespace_association' => 'Pariksa kutak ngini hagan maumpatakan jua ngarn-kamar pamandiran atawa judul tarait awan ngaran-kamar tapilih',
+'namespace_association' => 'Ruang-ngaran tarait',
+'tooltip-namespace_association' => 'Pariksa kutak ngini hagan maumpatakan jua ruang-ngaran pamandiran atawa judul tarait awan ruang-ngaran tapilih',
 'blanknamespace' => '(Tatambaian)',
 
 # Contributions
@@ -2390,7 +2389,7 @@ $1',
 
 'sp-contributions-newbies' => 'Tampaiakan sumbangan papamakai hanyar haja',
 'sp-contributions-newbies-sub' => 'Gasan akun hanyar',
-'sp-contributions-newbies-title' => 'Sumbangan pamuruk gasan akun hanyar',
+'sp-contributions-newbies-title' => 'Sumbangan pamakai gasan akun hanyar',
 'sp-contributions-blocklog' => 'Log blukir',
 'sp-contributions-deleted' => 'Tahapus sumbangan pamuruk',
 'sp-contributions-uploads' => 'hunggahan',
@@ -2403,7 +2402,7 @@ Log blukir pahabisannya tasadia di bawah ni gasan rujukan:',
 Log blukir pahabisannya tasadia di bawah ngini gasan rujukan:',
 'sp-contributions-search' => 'Gagai gasan sumbangan',
 'sp-contributions-username' => 'Alamat IP atawa ngaran-pamakai:',
-'sp-contributions-toponly' => 'Tampaiakan hanya ralatan tauncit',
+'sp-contributions-toponly' => 'Tampaiakan wastu ralatan nang paling atas (pauncitnya)',
 'sp-contributions-submit' => 'Gagai',
 
 # What links here
@@ -2412,7 +2411,7 @@ Log blukir pahabisannya tasadia di bawah ngini gasan rujukan:',
 'whatlinkshere-page' => 'Tungkaran:',
 'linkshere' => "Tungkaran-tungkaran barikut batautan ka '''[[:$1]]''':",
 'nolinkshere' => "Kadada tutungkaran tataut ka '''[[:$1]]'''.",
-'nolinkshere-ns' => "Kadada tutungkaran tataut ka '''[[:$1]]''' dalam ngaran-kamar nang dipilih.",
+'nolinkshere-ns' => "Kadada tutungkaran tataut ka '''[[:$1]]''' dalam ruang-ngaran nang dipilih.",
 'isredirect' => 'tungkaran paugahan',
 'istemplate' => 'transklusi',
 'isimage' => 'tautan barakas',
@@ -2678,7 +2677,7 @@ Dalam kasus pahanyarnya Pian kawa jua mamuruk sabuah tautanm gasan cuntuh [[{{#S
 'export-submit' => 'Pangaluar',
 'export-addcattext' => 'Tambahi tutungkaran matan tumbung:',
 'export-addcat' => 'Tambahi',
-'export-addnstext' => 'Tambahi tutungkaran matan ngaran-kamar:',
+'export-addnstext' => 'Tambahi tutungkaran matan ruang-ngaran:',
 'export-addns' => 'Tambahi',
 'export-download' => 'Simpan sawagai barakas',
 'export-templates' => 'Tamasuk cicitakan',
@@ -2689,8 +2688,8 @@ Dalam kasus pahanyarnya Pian kawa jua mamuruk sabuah tautanm gasan cuntuh [[{{#S
 'allmessagesname' => 'Ngaran',
 'allmessagesdefault' => 'Naskah baku pasan',
 'allmessagescurrent' => 'Naskah pasan wayahini.',
-'allmessagestext' => 'Ngini adalah sabuah daptar pasan sistem tasadia dalam ngaran-kamar MediaWiki.
-Muhun ilangi [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan ganarik MediaWiki.',
+'allmessagestext' => 'Ngini adalah sabuah daptar pasan sistem tasadia dalam ruang-ngaran MediaWiki.
+Muhun ilangi [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] wan [//translatewiki.net translatewiki.net] amun Pian hakun manyumbang palukalan umum MediaWiki.',
 'allmessagesnotsupportedDB' => "Tungkaran ngini kada kawa dipuruk karana '''\$wgUseDatabaseMessages''' sudah dipajahakan.",
 'allmessages-filter-legend' => 'Saringan',
 'allmessages-filter' => 'Saringan lawan kaadaan kustom:',
@@ -2725,7 +2724,7 @@ Samunyaan gawi impur transwiki akan dicatat pada [[Special:Log/import|log impur]
 'import-interwiki-history' => 'Salin sabarataan halam raralatan gasan tungkaran ngini',
 'import-interwiki-templates' => 'Tamasuk samunyaan cicitakan',
 'import-interwiki-submit' => 'Impur',
-'import-interwiki-namespace' => 'Ngaran-kamar tujuan:',
+'import-interwiki-namespace' => 'Ruang-ngaran tujuan:',
 'import-interwiki-rootpage' => 'Tungkaran turunan tujuan (opsional):',
 'import-upload-filename' => 'Ngaran barakas:',
 'import-comment' => 'Kumintar:',
index f389cd0..a511381 100644 (file)
@@ -26,6 +26,7 @@
  * @author Pasqual (ca)
  * @author Paucabot
  * @author PerroVerd
+ * @author Pintor Smeargle
  * @author Pitort
  * @author Pérez
  * @author Qllach
@@ -915,11 +916,10 @@ A més a més, en enviar el vostre text, doneu fe que és vostra l'autoria, o b
 '''No feu servir textos amb drets d'autor sense permís!'''",
 'longpageerror' => "'''Error: El text que heu introduït és {{PLURAL:$1|d'un kilobyte|de $1 kilobytes}} i sobrepassa el màxim permès de {{PLURAL:$2|one kilobyte|$2 kilobytes}}.'''
 No es pot desar.",
-'readonlywarning' => "'''ADVERTÈNCIA: La base de dades està tancada per manteniment
-i no podeu desar les vostres contribucions en aquests moments. Podeu retallar i enganxar el codi
-en un fitxer de text i desar-lo més tard.'''
+'readonlywarning' => "'''Avís: La base de dades està tancada per manteniment, de manera que no podreu desar els canvis ara mateix.'''
+És possible que vulgueu copiar i enganxar el text en un arxiu de text i desar-ho més tard.
 
-L'administrador que l'ha tancada n'ha donat aquesta justificació: $1",
+L'administrador que l'ha bloquejada ha donat la següent explicació: $1",
 'protectedpagewarning' => "'''ATENCIÓ: Aquesta pàgina està bloquejada i només els usuaris amb drets d'administrador la poden modificar.
 A continuació es mostra la darrera entrada del registre com a referència:",
 'semiprotectedpagewarning' => "'''Avís:''' Aquesta pàgina està bloquejada i només pot ser modificada per usuaris registrats.
@@ -1223,7 +1223,7 @@ Es pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{F
 'search-interwiki-default' => '$1 resultats:',
 'search-interwiki-more' => '(més)',
 'search-relatedarticle' => 'Relacionat',
-'mwsuggest-disable' => 'Inhabilita els suggeriments en AJAX',
+'mwsuggest-disable' => 'Desactivar suggeriments de cerca',
 'searcheverything-enable' => 'Cerca a tots els espais de noms',
 'searchrelated' => 'relacionat',
 'searchall' => 'tots',
@@ -1785,7 +1785,6 @@ Per seguretat, img_auth.php està desactivat.",
 'http-read-error' => 'Error de lectura HTTP.',
 'http-timed-out' => 'La petició HTTP ha expirat.',
 'http-curl-error' => "Error en recuperar l'URL: $1",
-'http-host-unreachable' => "No s'ha pogut accedir a l'URL.",
 'http-bad-status' => 'Hi ha hagut un problema durant la petició HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2331,9 +2330,9 @@ Ací hi ha els paràmetres actuals de la pàgina '''$1''':",
 Ací es troben els paràmetres actuals de la pàgina '''$1''':",
 'protect-cascadeon' => "Aquesta pàgina es troba protegida perquè està inclosa en {{PLURAL:$1|la següent pàgina que té|les següents pàgines que tenen}} activada una protecció en cascada. Podeu canviar el nivell de protecció d'aquesta pàgina però això no afectarà la protecció en cascada.",
 'protect-default' => 'Permet tots els usuaris',
-'protect-fallback' => 'Cal el permís de «$1»',
-'protect-level-autoconfirmed' => 'Bloca els usuaris novells i no registrats',
-'protect-level-sysop' => 'Bloqueja tots els usuaris excepte administradors',
+'protect-fallback' => 'Permetre només a usuaris amb permisos de "$1"',
+'protect-level-autoconfirmed' => 'Permetre només usuaris autoconfirmats',
+'protect-level-sysop' => 'Permetre només administradors',
 'protect-summary-cascade' => 'en cascada',
 'protect-expiring' => 'expira el dia $1 (UTC)',
 'protect-expiring-local' => 'caduca el $1',
@@ -2638,7 +2637,7 @@ Podeu actualitzar automàticament les redireccions que apuntin al títol origina
 Si no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].
 Serà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.
 
-Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una redirecció sense més historial.
+Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció sense més historial.
 Això significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.
 
 '''Atenció!'''
@@ -2649,13 +2648,13 @@ El títol anterior es convertirà en una pàgina de redirecció al nou títol.
 Assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].
 És responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. 
 
-Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, a no ser que sigui una redirecció i no tingui més historial. 
+Tingueu en compte que la pàgina '''no''' serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. 
 Això significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.
  
 '''Atenció!''' 
 Això pot ser un canvi dràstic i inesperat per una pàgina popular; 
 assegureu-vos que sabeu el que feu abans de continuar.",
-'movepagetalktext' => "La pàgina de discussió associada també serà traslladada automàticament '''a no ser que''':
+'movepagetalktext' => "La pàgina de discussió associada també serà traslladada automàticament '''tret que''':
 * Ja existeix una pàgina de discussió no buida amb el nou nom, o
 * Desactiveu la opció de més avall.
 
@@ -2961,6 +2960,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-robot-noindex' => 'No indexable',
 'pageinfo-views' => 'Número de visites',
 'pageinfo-watchers' => "Número d'usuaris que vigilen la pàgina",
+'pageinfo-few-watchers' => 'Menys de $1 {{PLURAL:$1|observador|observadors}}',
 'pageinfo-redirects-name' => 'Redireccions a aquesta pàgina',
 'pageinfo-subpages-name' => "Subpàgines d'aquesta pàgina",
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecció|redireccions}}; $3 {{PLURAL:$3|no redireció|no redireccions}})',
@@ -2975,6 +2975,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Paraula clau|Paraules clau}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categories ocultes}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|plantilla inclosa|plantilles incloses}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pàgina|Pàgines}} incloses en ($1)',
 'pageinfo-toolboxlink' => 'Informació de la pàgina',
 'pageinfo-redirectsto' => 'Redirigeix a',
 'pageinfo-redirectsto-info' => 'info',
@@ -2983,10 +2984,12 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-protect-cascading' => "Proteccions en cascada des d'aquí",
 'pageinfo-protect-cascading-yes' => 'Sí',
 'pageinfo-protect-cascading-from' => 'Proteccions en cascada des de',
+'pageinfo-category-info' => 'Informació de categoria',
+'pageinfo-category-pages' => 'Nombre de pàgines',
+'pageinfo-category-subcats' => 'ombre de subcategories',
+'pageinfo-category-files' => "Nombre d'arxius",
 
 # Skin names
-'skinname-standard' => 'Clàssic',
-'skinname-nostalgia' => 'Nostàlgia',
 'skinname-cologneblue' => 'Colònia blava',
 
 # Patrolling
@@ -3065,6 +3068,8 @@ Si l'executeu, podeu comprometre la seguretat del vostre sistema.",
 'minutes' => '{{PLURAL:$1|$1 minut|$1 minuts}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 hores}}',
 'days' => '{{PLURAL:$1|$1 dia|$1 dies}}',
+'months' => '{{PLURAL:$1|$1 mes|$1 mesos}}',
+'years' => '{{PLURAL:$1|$1 any|$1 anys}}',
 'ago' => 'fa $1',
 'just-now' => 'ara mateix',
 
@@ -3725,7 +3730,7 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'specialpages-group-highuse' => "Pàgines d'alt ús",
 'specialpages-group-pages' => 'Llistes de pàgines',
 'specialpages-group-pagetools' => "Pàgines d'eines",
-'specialpages-group-wiki' => 'Eines i dades del wiki',
+'specialpages-group-wiki' => 'Dades i eines',
 'specialpages-group-redirects' => 'Pàgines especials de redirecció',
 'specialpages-group-spam' => 'Eines de spam',
 
@@ -3794,13 +3799,13 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'sqlite-no-fts' => '$1, sense supor de búsqueda de text íntegre',
 
 # New logging system
-'logentry-delete-delete' => '$1 ha esborrat la pàgina $3',
-'logentry-delete-restore' => '$1 ha restaurat la pàgina $3',
+'logentry-delete-delete' => '$1 ha esborrat $3',
+'logentry-delete-restore' => '$1 ha restaurat $3',
 'logentry-delete-event' => "$1 ha canviat la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
 'logentry-delete-revision' => "$1 ha canviat la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
 'logentry-delete-event-legacy' => "$1 ha canviat la visibilitat d'esdeveniments al registre de $3",
 'logentry-delete-revision-legacy' => '$1 ha canviat la visibilitat de revisions a la pàgina $3',
-'logentry-suppress-delete' => '$1 ha suprimit la pàgina $3',
+'logentry-suppress-delete' => '$1 ha suprimit $3',
 'logentry-suppress-event' => "$1 secretament ha canviat la visibilitat {{PLURAL:$5|d'un esdeveniment al registre|de $5 esdeveniments al registre}} de $3: $4",
 'logentry-suppress-revision' => "$1 secretament ha canviat la visibilitat {{PLURAL:$5|d'una revisió|de $5 revisions}} a la pàgina $3: $4",
 'logentry-suppress-event-legacy' => "$1 secretament ha canviat la visibilitat d'esdeveniments al registre de $3",
@@ -3813,11 +3818,11 @@ Les imatges es mostren en plena resolució; altres tipus de fitxer s'inicien dir
 'revdelete-uname-unhid' => "ha revelat un nom d'usuari que era ocult",
 'revdelete-restricted' => 'ha aplicat restriccions als administradors',
 'revdelete-unrestricted' => 'ha tret les restriccions als administradors',
-'logentry-move-move' => '$1 ha desplaçat la pàgina $3 a $4',
-'logentry-move-move-noredirect' => '$1 ha desplaçat la pàgina $3 a $4 sense deixar cap redirecció',
-'logentry-move-move_redir' => '$1 ha desplaçat la pàgina $3 a $4, on hi havia una redirecció',
+'logentry-move-move' => '$1 ha mogut $3 a $4',
+'logentry-move-move-noredirect' => '$1 ha mogut $3 a $4 sense deixar una redirecció',
+'logentry-move-move_redir' => '$1 ha mogut $3 a $4 sobre una redirecció',
 'logentry-move-move_redir-noredirect' => '$1 ha desplaçat la pàgina $3 a $4 on hi havia una redirecció i sense crear una nova redirecció',
-'logentry-patrol-patrol' => '$1 ha marcat la versió $4 de la pàgina $3 com a patrullada',
+'logentry-patrol-patrol' => '1 $ va marcar la revisió $ 4 de "$ 3" com a supervisada',
 'logentry-patrol-patrol-auto' => '$1 ha marcat automàticament la versió $4 de la pàgina $3 com a patrullada',
 'logentry-newusers-newusers' => "El compte d'usuari $1 {{GENDER:$2|ha estat creat}}",
 'logentry-newusers-create' => "El compte d'usuari $1 {{GENDER:$2|ha estat creat}}",
index 08620c8..9ea5299 100644 (file)
@@ -150,8 +150,8 @@ $messages = array(
 'tog-underline' => 'ھێڵ ھێنان بەژێر بەستەرەکان:',
 'tog-justify' => 'پەرەگرافەکان پڕاوپر نیشان بدە',
 'tog-hideminor' => 'دەستکارییە بچووکەکان لە دوایین گۆڕانکارییەکاندا بشارەوە',
-'tog-hidepatrolled' => 'Ù\84Û\95 Ø¯Ù\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\95کاÙ\86Ø\8c Ø¯Û\95ستکارÛ\8cÛ\95 Ù¾Ø§Ø±Û\8eزراÙ\88Û\95کاÙ\86 Ø¯Ø§Ø´Ø§Ø±ە',
-'tog-newpageshidepatrolled' => 'Ù\84Û\95 Ù\84Û\8cستÛ\8c Ù\84اپÛ\95Ú\95Û\95 Ù\86Ù\88Û\8eکاÙ\86Ø\8c Ù\84اپÛ\95Ú\95Û\95 Ù¾Ø§Ø±Û\8eزراÙ\88Û\95کاÙ\86 Ø¯Ø§Ø´Ø§Ø±ە',
+'tog-hidepatrolled' => 'Ù\84Û\95 Ø¯Ù\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86دا Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95 Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88Û\95کاÙ\86 Ø¨Ø´Ø§Ø±Û\95Ù\88ە',
+'tog-newpageshidepatrolled' => 'Ù\84Û\95 Ù¾Û\8eرستÛ\8c Ù¾Û\95Ú\95Û\95 Ù\86Ù\88Û\8eکاÙ\86دا Ù¾Û\95Ú\95Û\95 Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88Û\95کاÙ\86 Ø¨Ø´Ø§Ø±Û\95Ù\88ە',
 'tog-extendwatchlist' => 'لیستی چاودێری درێژبکەرەوە بۆ نیشان دانی ھەموو گۆڕانکارییەکان، نەک تەنھا دوایینەکان.',
 'tog-usenewrc' => 'گۆڕانکارییەکان لە دوایین گۆڕانکارییەکان و لیستی چاودێریدا بە پێی پەڕە پۆلێن بکە (پێویستی بە جاڤاسکریپتە)',
 'tog-numberheadings' => 'ژمارەکردنی خۆکاری سەردێڕەکان',
@@ -180,13 +180,13 @@ $messages = array(
 'tog-externaldiff' => 'لە پرۆگرامێکی دەرەکی بۆ بینینی جیاوازیەکان کەڵک وەرگرە لە دیفاڵتدا (تەنها بۆ شارەزایان، ڕێکخستنی تایبەتی پێویستە لە سەر کۆمپیوتەرەکەت. [//www.mediawiki.org/wiki/Manual:External_editors زانیاریی زۆرتر.])',
 'tog-showjumplinks' => 'ڕێگە بدە بۆ بەستەرەکانی «{{int:jumpto}}»',
 'tog-uselivepreview' => 'لە پێشبینینی زیندوو کەڵک وەرگرە (جاڤاسکریپت پێویستە) (تاقیکاری‌)',
-'tog-forceeditsummary' => 'ئەگەر پوختەی دەستکاریم نەنووسی پێم بڵێ',
+'tog-forceeditsummary' => 'ئەگەر کورتەی دەستکاریم نەنووسی پێم بڵێ',
 'tog-watchlisthideown' => 'دەستکارییەکانم بشارەوە لە پێرستی چاودێری',
 'tog-watchlisthidebots' => 'دەستکارییەکانی بات بشارەوە لە لیستی چاودێری',
 'tog-watchlisthideminor' => 'دەستکارییە بچووکەکان لە لیستی چاودێریدا بشارەوە',
 'tog-watchlisthideliu' => 'دەستکارییەکانی ئەو بەکارهێنەرانەی لە ژوورەوەن بشارەوە لە لیستی چاودێری',
 'tog-watchlisthideanons' => 'دەستکارییەکانی بەکارهێنەرانی نەناسراو بشارەوە لە لیستی چاودێری',
-'tog-watchlisthidepatrolled' => 'Ù\84Û\95 Ù\84Û\8cستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\95کاÙ\86Ø\8c Ø¯Û\95ستکارÛ\8cÛ\95 Ù¾Ø§Ø±Û\8eزراÙ\88Û\95کاÙ\86 Ø¯Ø§Ø´Ø§Ø±ە',
+'tog-watchlisthidepatrolled' => 'Ù\84Û\95 Ù¾Û\8eرستÛ\8c Ú\86اÙ\88دÛ\8eرÛ\8cÛ\8cÛ\95کاÙ\86دا Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95 Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88Û\95کاÙ\86 Ø¨Ø´Ø§Ø±Û\95Ù\88ە',
 'tog-ccmeonemails' => 'کۆپییەک لەو ئیمەیلانە کە بۆ بەکارھێنەرانی تر دەنێرم بۆ خۆشم بنێرە',
 'tog-diffonly' => 'ناوەرۆکی پەڕە لە ژێرەوەی جیاوازییەکاندا نیشان مەدە',
 'tog-showhiddencats' => 'ھاوپۆلە شاراوەکان نیشان بدە',
@@ -1101,7 +1101,7 @@ $1",
 'mergehistory-reason' => 'هۆکار:',
 
 # Merge log
-'mergelog' => 'لۆگی یەککردن',
+'mergelog' => 'لۆگی کردنەیەک',
 'pagemerge-logentry' => '[[$1]] خرایە سەر [[$2]] (پێداچوونەوەکان تا $3)',
 'revertmerge' => 'لەیەک جیاکردنەوە',
 'mergelogpagetext' => 'لە خوارەوە دوایین مێژووی‌لاپەڕە خستنە سەر لاپەڕەیەکی‌تر، دەبینی.',
@@ -1403,12 +1403,12 @@ $1",
 'right-markbotedits' => 'نیشان‌کردنی دەستکاریە گەڕێنراوەکان وەک دەستکاریەکانی بۆت (bot)',
 'right-noratelimit' => 'کاریگەری وەرنەگرتن لە سنوورەکانی ئاست',
 'right-import' => 'هێنانەناوەی لاپەڕە لە ویکی‌یەکانی دیکە',
-'right-importupload' => 'هێنانەناوەی لاپەڕە لە پەڕگەیەکی بارکراو',
-'right-patrol' => 'Ù\84Û\95Ú\98Û\8eرÚ\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\8cشاÙ\86â\80\8cکردÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95ساÙ\86Û\8câ\80\8cتر',
-'right-autopatrol' => 'Ø®Û\86کار Ù\84Û\95Ú\98Û\8eرÚ\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\8cشاÙ\86â\80\8cکردÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95سÛ\8eÚ© Ø¨Û\86Ø®Û\86Û\8c',
-'right-patrolmarks' => 'دیتنی دوایین دەستکاریەکان وا لەژێرچاودێری نیشان‌کراون',
-'right-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù\84Û\8cستÛ\8eÚ© Ù\84Û\95Ù\88 Ù\84اپÛ\95Ú\95اÙ\86Û\95Û\8c Ú\86اÙ\88دÛ\8eرÛ\8c Ù\86اکرÛ\8eن',
-'right-mergehistory' => 'سەریەک‌خستنی میژووی لاپەڕەکان',
+'right-importupload' => 'ھاوردنی پەڕەکان لە پەڕگەیەکی بارکراو',
+'right-patrol' => 'Ù\86Û\8cشاÙ\86کردÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95ساÙ\86Û\8c ØªØ± Ù\88Û\95Ú© Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88',
+'right-autopatrol' => 'دÛ\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95سÛ\8eÚ© Ø¨Û\95 Ø´Û\8eÙ\88Û\95Û\8c Ø®Û\86Ú¯Û\95Ú\95 Ù\88Û\95Ú© Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88 Ù\86Û\8cشاÙ\86 Ø¨Ú©Ø±Û\8e',
+'right-patrolmarks' => 'دیتنی نیشان کراوەکان وەک پاس دراو لە دوایین گۆڕانکارییەکاندا',
+'right-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù¾Û\8eرستÛ\8eÚ© Ù\84Û\95 Ù¾Û\95Ú\95Û\95 Ú\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\95کراÙ\88Û\95کان',
+'right-mergehistory' => 'میژووی پەڕەکان بکە یەک',
 'right-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران',
 'right-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا',
 'right-siteadmin' => 'داخستن و کردنەوەی بنکەدراو',
@@ -1450,11 +1450,11 @@ $1",
 'action-protect' => 'گۆڕانی ئاستی پارێزراوی بۆ ئەم لاپەڕە',
 'action-import' => 'هێنانەناوەی ئەم لاپەڕە لە ویکی‌یەکی دیکە',
 'action-importupload' => 'هێنانەناوەی ئەم لاپەڕە لە پەڕگەیەکی بارکراو',
-'action-patrol' => 'Ù\84Û\95Ú\98Û\8eرÚ\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\8cشاÙ\86â\80\8cکردÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95ساÙ\86Û\8câ\80\8cتر',
-'action-autopatrol' => 'دÛ\95ستکارÛ\8cÛ\95کاÙ\86ت Ù\88Û\95Ú© Ù\84Û\95Ú\98Û\8eرÚ\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\8cشاÙ\86 Ú©Ø±Ø§Ù\88Ù\86',
-'action-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù¾Û\8eرستÛ\8c Ø¦Û\95Ù\88 Ù¾Û\95Ú\95اÙ\86Û\95Û\8c Ú\86اÙ\88دÛ\8eرÛ\8c Ù\86اکرÛ\8eن',
-'action-mergehistory' => 'سەریەک‌خستنی میژووی ئەم لاپەڕە',
-'action-userrights' => 'دەستکاری مافەکانی هەموو بەکارهێنەران',
+'action-patrol' => 'Ù\86Û\8cشاÙ\86کردÙ\86Û\8c Ø¯Û\95ستکارÛ\8cÛ\95کاÙ\86Û\8c Ú©Û\95ساÙ\86Û\8c ØªØ± Ù\88Û\95Ú© Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88',
+'action-autopatrol' => 'دÛ\95ستکارÛ\8cÛ\8cÛ\95کاÙ\86ت Ù\88Û\95Ú© Ù¾Ø§Ø³ Ø¯Ø±Ø§Ù\88 Ù\86Û\8cشاÙ\86 Ø¨Ú©Ø±Û\8e',
+'action-unwatchedpages' => 'دÛ\8cتÙ\86Û\8c Ù¾Û\8eرستÛ\8eÚ© Ù\84Û\95 Ù¾Û\95Ú\95Û\95 Ú\86اÙ\88دÛ\8eرÛ\8c Ù\86Û\95کراÙ\88Û\95کان',
+'action-mergehistory' => 'میژووی پەڕەکان بکە یەک',
+'action-userrights' => 'دەستکاریی مافەکانی ھەموو بەکارھێنەران',
 'action-userrights-interwiki' => 'دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا',
 'action-siteadmin' => 'داخستن یا کردنەوەی بنکەدراو',
 'action-sendemail' => 'ناردنی ئیمەیلەکان',
@@ -1466,9 +1466,9 @@ $1",
 'recentchanges-summary' => 'لەم پەڕەیەدا شوێنی دوایین گۆڕانکارییەکانی ویکی بکەوە.',
 'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.',
 'recentchanges-label-newpage' => 'ئەم دەستکارییە لاپەڕەیەکی نوێی دروستکرد',
-'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە',
+'recentchanges-label-minor' => 'ئÛ\95Ù\85Û\95 Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95Ú©Û\8c Ø¨Ú\86Ù\88Ù\88Ú©Û\95',
 'recentchanges-label-bot' => 'ئەم دەستکاریە لە لایەن بۆتەوە پێک هاتووە',
-'recentchanges-label-unpatrolled' => 'ئÛ\95Ù\85 Ø¯Û\95ستکارÛ\8cÛ\95 Ù\87Û\8eشتا Ù\86Û\95Ú\95Û\86شتÛ\95تÛ\95 Ú\98Û\8eر Ú\86اÙ\88دÛ\8eرÛ\8c',
+'recentchanges-label-unpatrolled' => 'ئÛ\95Ù\85 Ø¯Û\95ستکارÛ\8cÛ\8cÛ\95 Ú¾Û\8eشتا Ù¾Ø§Ø³ Ù\86Û\95دراÙ\88Û\95',
 'rcnote' => "لە خوارەوەدا {{PLURAL:$1|'''۱''' گۆڕانکاری |دوایین '''$1''' گۆڕانکارییەکان}} لە دوایین {{PLURAL:$2|ڕۆژ|'''$2''' ڕۆژەوە}} ، تا $5، $4 دەبینن.",
 'rcnotefrom' => "ئەوی‌ خوارەوە گۆڕانکارییەکانە لە '''$2'''ەوە (ھەتا '''$1''' نیشاندراو).",
 'rclistfrom' => 'گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $1',
@@ -1476,7 +1476,7 @@ $1",
 'rcshowhidebots' => 'بۆتەکان $1',
 'rcshowhideliu' => 'بەکارھێنەرە تۆمارکراوەکان $1',
 'rcshowhideanons' => 'بەکارھێنەرە نەناسراوەکان $1',
-'rcshowhidepatr' => 'گۆرانکارییە چاودێریکراوەکان $1',
+'rcshowhidepatr' => 'گۆرانکارییە پاس دراوەکان $1',
 'rcshowhidemine' => 'دەستکارییەکانم $1',
 'rclinks' => 'دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3',
 'diff' => 'جیاوازی',
@@ -1654,9 +1654,6 @@ $1',
 'img-auth-nofile' => 'فایلی "$1" بوونی نیه‌',
 'img-auth-isdir' => 'هه‌وڵ ده‌ده‌ی بۆ کردنه‌وه‌ی بوخچه‌ی "$1" له‌ کاتێکدا ته‌نیا کردنه‌وه‌ی فایل رێپێدراوه‌',
 
-# HTTP errors
-'http-host-unreachable' => 'توانای دەست‌پێ‌گەیشتنی URL نیە',
-
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'توانای دەست‌پێ‌گەیشتنی URL نیە',
 'upload-curl-error6-text' => 'ئەو URL کە ڕاچاوت کردووە توانای دەست‌پێ‌گەیشتنی نییە.
@@ -1910,6 +1907,7 @@ $1',
 بینینەکە سنووردار بکەیتەوە.',
 'logempty' => 'هیچ بابەتێکی هاوتا لە لۆگەکاندا نەدۆزرایەوە.',
 'log-title-wildcard' => 'گەڕانی ئەو سەرناوانە بەم دەقەوە دەست پێدەکەن',
+'showhideselectedlogentries' => 'بابەتەکانی ھەڵبژێردراوی لۆگ نیشان بدە/بشارەوە',
 
 # Special:AllPages
 'allpages' => 'ھەموو پەڕەکان',
@@ -2179,8 +2177,8 @@ $UNWATCHURL
 'protect-cascadeon' => 'ھەنووکە ئەم پەڕە پارێزراوە بۆ ئەوەی کە لە نێو ئەم {{PLURAL:$1|پەڕە کە پاراستنی تاڤگەییی|پەڕانە کە پاراستنی تاڤگەیییان}} بۆ چالاککراوە، ھێنراوە.
 دەتوانی ئاستی پاراستنی ئەم پەڕە بگۆڕی، بەڵام ھیچ کاریگەرییەکی نابێت لە سەر پاراستنی تاڤگەیی',
 'protect-default' => 'بە ھەموو بەکارھێنەران ڕێگە بدە',
-'protect-fallback' => 'پێویستی بە ئیزنی «$1» ھەیە',
-'protect-level-autoconfirmed' => 'بÛ\95کارھÛ\8eÙ\86Û\95راÙ\86Û\8c Ù\86Ù\88Û\8e Ù\88 ØªÛ\86Ù\85ارÙ\86Û\95کراÙ\88 Ø¦Ø§Ø³ØªÛ\95Ù\86Ú¯ Ø¨Ú©ە',
+'protect-fallback' => 'تەنیا بە بەکارھێنەران بە مافی «$1» ڕێگە بدە',
+'protect-level-autoconfirmed' => 'تÛ\95Ù\86Û\8cا Ø¨Û\95 Ø¨Û\95کارھÛ\8eÙ\86Û\95راÙ\86Û\8c Ù¾Û\95سÙ\86دکراÙ\88 Ú\95Û\8eÚ¯Û\95 Ø¨Ø¯ە',
 'protect-level-sysop' => 'تەنیا بەڕێوەبەران',
 'protect-summary-cascade' => 'تاڤگەیی',
 'protect-expiring' => 'بەسەردەچێ لە ڕێکەوتی $1 (UTC)',
@@ -2599,9 +2597,9 @@ $1',
 # Special:Import
 'import' => 'ھاوردنی پەڕەکان',
 'importinterwiki' => 'هێنانەناوەی ترانس‌ویکی',
-'import-interwiki-text' => 'بۆ هێنانە‌ناوە ویکی‌یەک و سەردێڕێکی لاپەڕە هەڵبژێرە.
-ڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاری‌کەرەکان دەپارێزدرێت.
-هەموو کردوەکانی هێنانەناوەی ترانس‌ویکی لە [[Special:Log/import|لۆگی هێنانەناوە]] لۆگ دەکرێت.',
+'import-interwiki-text' => 'بۆ ھاوردن ویکییەک و سەردێڕێکی پەڕە ھەڵبژێرە.
+ڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاریکەرەکان دەپارێزرێت.
+هەموو کردەوەکانی ھاوردنی ترانسویکی لە [[Special:Log/import|لۆگی ھاوردن]]دا تۆمار دەکرێت.',
 'import-interwiki-source' => 'سەرچاوەی ویکی\\لاپەڕە :',
 'import-interwiki-history' => 'ڕوونووس‌کردنی هەموو مێژووی پێداچوونەوەکانی ئەم لاپەڕە',
 'import-interwiki-templates' => 'لەخۆگرتنی هەموو داڕێژەکان',
@@ -2639,7 +2637,7 @@ $1',
 'import-invalid-interwiki' => 'لە ویکی‌ دیاری‌کراوە ناهێنڕێتەوە ناوە.',
 
 # Import log
-'importlogpage' => 'Ù\87Û\8eÙ\86اÙ\86Û\95Ù\86اÙ\88Û\95Û\8c Ù\84Û\86Ú¯',
+'importlogpage' => 'Ù\84Û\86Ú¯Û\8c Ú¾Ø§Ù\88ردÙ\86',
 'importlogpagetext' => 'ھاوردنی پەڕەکان لەگەڵ مێژووی دەستکاری لە ویکییەکانی ترەوە.',
 'import-logentry-upload' => 'ھاوردنی [[$1]] بە بارکردنی پەڕگە',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}',
@@ -2781,30 +2779,28 @@ $1',
 'pageinfo-category-files' => 'ژمارەی پەڕگەکان',
 
 # Skin names
-'skinname-standard' => 'کلاسیک',
-'skinname-nostalgia' => 'غەریبی',
 'skinname-cologneblue' => 'شینی کۆلۆن',
 'skinname-monobook' => 'مۆنۆ',
-'skinname-myskin' => 'پێستی خۆم',
-'skinname-chick' => 'جووچک',
-'skinname-simple' => 'ساکار',
 'skinname-modern' => 'مۆدێڕن',
 'skinname-vector' => 'ڤێکتۆر',
 
 # Patrolling
-'markaspatrolleddiff' => 'وەک چاودێری‌کراو نیشان‌کردن',
-'markaspatrolledtext' => 'ئەم لاپەڕە وەک چاودێری‌کراو نیشان بکە',
-'markedaspatrolled' => 'وەک چاودێری‌کراو نیشان‌کرا',
-'markedaspatrolledtext' => 'پێداچوونەوەی هەڵبژێراوی [[:$1]] وەک چاودێریکراو نیشان‌کرا.',
-'rcpatroldisabled' => 'چاودێری دوایین گۆڕانکاریەکان لەکار خسترا',
-'rcpatroldisabledtext' => 'تایبەتمەندی چاودێری دوایین گۆڕانکاریەکان ئێستا لەکار خستراوە.',
-'markedaspatrollederror' => 'ناکرێ وه‌ک چاودێری‌کراو نیشان بکرێت',
-'markedaspatrollederror-noautopatrol' => 'ڕێگەت پێ‌نەدراوە گۆڕانکاریەکانی خۆت وەک چاودێری‌کراو نیشان بکەیت.',
+'markaspatrolleddiff' => 'وەک پاس دراو نشان بکە',
+'markaspatrolledtext' => 'ئەم پەڕەیە وەک پاس دراو نیشان بکە',
+'markedaspatrolled' => 'وەک پاس دراو نیشان کرا',
+'markedaspatrolledtext' => 'پێداچوونەوەی هەڵبژێردراوی [[:$1]] وەک پاس دراو نیشان کرا.',
+'rcpatroldisabled' => 'پاسدەریی دوایین گۆڕانکاریەکان ناچالاک کرا',
+'rcpatroldisabledtext' => 'تایبەتمەندیی پاسدەریی دوایین گۆڕانکارییەکان ئێستا ناچالاک کراوە.',
+'markedaspatrollederror' => 'وه‌ک پاس دراو نیشان نەکرا',
+'markedaspatrollederrortext' => 'دەبێ پێداچوونەوەیەک دەستنیشان بکەی ھەتا وەک پاس دراو نیشان بکرێ.',
+'markedaspatrollederror-noautopatrol' => 'ناتوانی گۆڕانکارییەکانی خۆت وەک پاس دراو نیشان بکەی.',
+'markedaspatrollednotify' => 'ئەم گۆڕانکارییە لەسەر $1 وەک پاس دراو نیشان کرا.',
+'markedaspatrollederrornotify' => 'نیشانکردن وەک پاس دراو سەرکەوتوو نەبوو.',
 
 # Patrol log
-'patrol-log-page' => 'لۆگی چاودێری',
-'patrol-log-header' => 'ئەمە لۆگێکی چاودێری پێداچوونەوەکانە.',
-'log-show-hide-patrol' => 'لۆگی چاودێری $1',
+'patrol-log-page' => 'لۆگی پاسدەری',
+'patrol-log-header' => 'ئەمە لۆگێکی پێداچوونەوە پاس دراوەکانە.',
+'log-show-hide-patrol' => 'لۆگی پاسدەری $1',
 
 # Image deletion
 'deletedrevision' => 'پێداچوونەوەی کۆنی سڕاوە $1',
@@ -3435,10 +3431,10 @@ $5
 'htmlform-selectorother-other' => 'دیکە',
 
 # New logging system
-'logentry-delete-delete' => '$1 پەڕەی $3ی سڕییەوە',
-'logentry-delete-restore' => '$1 پەڕەی $3ی ھێنایەوە',
-'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی گۆڕیی: $4',
-'logentry-suppress-delete' => '$1 پەڕەی $3 بەرگری کرد.',
+'logentry-delete-delete' => '$1 پەڕەی $3ی {{GENDER:$2|سڕییەوە}}',
+'logentry-delete-restore' => '$1 پەڕەی $3ی {{GENDER:$2|ھێنایەوە}}',
+'logentry-delete-revision' => '$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی {{GENDER:$2|گۆڕیی}}: $4',
+'logentry-suppress-delete' => '$1 پەڕەی $3 {{GENDER:$2|بەرگری کرد}}.',
 'revdelete-content-hid' => 'ناوەرۆک شاردراوە',
 'revdelete-summary-hid' => 'کورتەی دەستکاری شاردراوە',
 'revdelete-uname-hid' => 'ناوی بەکارهێنەری شاراوە',
@@ -3447,14 +3443,16 @@ $5
 'revdelete-uname-unhid' => 'ناوی بەکارهێنەری نیشان درا',
 'revdelete-restricted' => 'ئەو سنووری بەرگریانەی خستراوەتە سەر بەڕێوبەران',
 'revdelete-unrestricted' => 'ئەو سنووری بەرگریانەی لابردراوە لە سەر بەڕێوبەران',
-'logentry-move-move' => '$1 پەڕەی $3ی گواستەوە بۆ $4',
-'logentry-move-move-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ $4',
-'logentry-move-move_redir' => '$1 پەڕەی $3 گواستەوە بۆ $4 کە پێشتر ڕەوانەکەر بوو',
-'logentry-move-move_redir-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک گواستەوە بۆ $4 کە پێشتر ڕەوانەکەر بوو',
-'logentry-newusers-newusers' => 'ھەژماری بەکارھێنەریی $1 دروست کرا',
-'logentry-newusers-create' => 'ھەژماری بەکارھێنەریی $1 دروست کرا',
-'logentry-newusers-create2' => 'ھەژماری بەکارھێنەریی $3 لە لایەن $1 دروست کرا',
-'logentry-newusers-autocreate' => 'ھەژماری $1 بە شێوەی خۆگەڕ دروستکرا',
+'logentry-move-move' => '$1 پەڕەی $3ی {{GENDER:$2|گواستەوە}} بۆ $4',
+'logentry-move-move-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک {{GENDER:$2|گواستەوە}} بۆ $4',
+'logentry-move-move_redir' => '$1 پەڕەی $3 {{GENDER:$2|گواستەوە}} بۆ $4 کە پێشتر ڕەوانەکەر بوو',
+'logentry-move-move_redir-noredirect' => '$1 پەڕەی $3 بەبێ بەجێھشتنی ڕەوانەکەرێک {{GENDER:$2|گواستەوە}} بۆ $4 کە پێشتر ڕەوانەکەر بوو',
+'logentry-patrol-patrol' => '$1 پێداچوونەوەی $4ی پەڕەی $3 وەک پاس دراو {{GENDER:$2|نیشان کرد}}',
+'logentry-patrol-patrol-auto' => '$1 بە شێوەی خۆگەڕ پێداچوونەوەی $4ی پەڕەی $3 وەک پاس دراو {{GENDER:$2|نیشان کرد}}',
+'logentry-newusers-newusers' => 'ھەژماری بەکارھێنەریی $1 {{GENDER:$2|دروست کرا}}',
+'logentry-newusers-create' => 'ھەژماری بەکارھێنەریی $1 {{GENDER:$2|دروست کرا}}',
+'logentry-newusers-create2' => 'ھەژماری بەکارھێنەریی $3 لە لایەن $1 {{GENDER:$2|دروست کرا}}',
+'logentry-newusers-autocreate' => 'ھەژماری بەکارھێنەریی $1 بە شێوەی خۆگەڕ {{GENDER:$2|دروست کرا}}',
 'rightsnone' => '(ھیچ)',
 
 # Feedback
index 07f90c6..d70860d 100644 (file)
@@ -1964,7 +1964,6 @@ Z bezpečnostních důvodů je img_auth.php vypnuto.',
 'http-read-error' => 'Chyba při čtení HTTP.',
 'http-timed-out' => 'Čas pro HTTP požadavek vypršel.',
 'http-curl-error' => 'Chyba při čtení z URL: $1',
-'http-host-unreachable' => 'Nepodařilo se kontaktovat URL',
 'http-bad-status' => 'Při provádění HTTP požadavku nastal problém: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2767,6 +2766,7 @@ Vizte též [[Special:BlockList|seznam všech probíhajících bloků]].',
 'proxyblocksuccess' => 'Hotovo.',
 'sorbsreason' => 'Vaše IP adresa je uvedena na seznamu DNSBL jako otevřený proxy server.',
 'sorbs_create_account_reason' => 'Vaše IP adresa je uvedena na seznamu DNSBL jako otevřený proxy server. Z této adresy si nemůžete založit účet',
+'xffblockreason' => 'IP adresa uvedená v hlavičce X-Forwarded-For, ať už vaše, nebo patřící proxy serveru, který používáte, byla zablokována. Zdůvodnění tohoto zablokování: $1',
 'cant-block-while-blocked' => 'Nemůžete blokovat jiné uživatele, když jste zablokován(a).',
 'cant-see-hidden-user' => 'Uživatel, kterého se snažíte blokovat, už byl zablokován a skryt. Jelikož nemáte oprávnění hideuser, nemůžete si nastavení bloku tohoto uživatele prohlédnout ani ho změnit.',
 'ipbblocked' => 'Nemůžete blokovat nebo odblokovávat jiné uživatele, {{GENDER:|sám|sama|sám}} jste {{GENDER:|zablokován|zablokována|zablokován}}',
@@ -3070,13 +3070,8 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 
 # Stylesheets
 'common.css' => '/* Zde uvedené CSS bude ovlivňovat všechny styly */',
-'standard.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Klasický“  */',
-'nostalgia.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Nostalgie“  */',
 'cologneblue.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kolínská modř“  */',
 'monobook.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Monobook“ */',
-'myskin.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Můj vzhled“ */',
-'chick.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Kuře“ */',
-'simple.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Jednoduchý“ */',
 'modern.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Moderní“ */',
 'vector.css' => '/* Zde uvedené CSS bude ovlivňovat pouze styl „Vektor“ */',
 'print.css' => '/* Zde uvedené CSS bude ovlivňovat tiskový výstup */',
@@ -3089,13 +3084,8 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 
 # Scripts
 'common.js' => '/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky.  */',
-'standard.js' => '/* JavaScript pro uživatele používající vzhled „Klasický“ */',
-'nostalgia.js' => '/* JavaScript pro uživatele používající vzhled „Nostalgie“  */',
 'cologneblue.js' => '/* JavaScript pro uživatele používající vzhled „Kolínská modř“  */',
 'monobook.js' => '/* JavaScript pro uživatele používající vzhled MonoBook */',
-'myskin.js' => '/* JavaScript pro uživatele používající vzhled „Můj vzhled“ */',
-'chick.js' => '/* JavaScript pro uživatele používající vzhled „Kuře“ */',
-'simple.js' => '/* JavaScript pro uživatele používající vzhled „Jednoduchý“ */',
 'modern.js' => '/* JavaScript pro uživatele používající vzhled „Moderní“ */',
 'vector.js' => '/* JavaScript pro uživatele používající vzhled „Vektor“ */',
 'group-autoconfirmed.js' => '/* Zde uvedený JavaScript bude použit pouze pro automaticky schválené uživatele */',
@@ -3174,12 +3164,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-category-files' => 'Počet souborů',
 
 # Skin names
-'skinname-standard' => 'Klasický',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Kolínská modř',
-'skinname-myskin' => 'Můj vzhled',
-'skinname-chick' => 'Kuře',
-'skinname-simple' => 'Jednoduchý',
 'skinname-modern' => 'Moderní',
 'skinname-vector' => 'Vektor',
 
index 49f0363..650a0c0 100644 (file)
@@ -1709,7 +1709,6 @@ Er mwyn sicrhau'r diogelwch gorau posib, analluogwyd img_auth.php.",
 'http-read-error' => 'Cafwyd gwall wrth ddarllen yr HTTP.',
 'http-timed-out' => 'Goroedi wedi digwydd ar y cais HTTP.',
 'http-curl-error' => 'Cafwyd gwall wrth nôl yr URL: $1',
-'http-host-unreachable' => 'Wedi methu cyrraedd yr URL.',
 'http-bad-status' => 'Cafwyd trafferth yn ystod y cais HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2526,6 +2525,7 @@ Gallwch weld rhestr y rhwystrau a'r gwaharddiadau sydd yn weithredol ar hyn o br
 'sorbsreason' => 'Mae eich cyfeiriad IP wedi cael ei osod ymhlith y dirprwyon agored ar y Rhestr DNS Gwaharddedig a ddefnyddir gan {{SITENAME}}.',
 'sorbs_create_account_reason' => 'Mae eich cyfeiriad IP wedi cael ei osod ymhlith y dirprwyon agored ar y Rhestr DNS Gwaharddedig a ddefnyddir gan {{SITENAME}}.
 Ni allwch greu cyfrif',
+'xffblockreason' => "Mae un o'r cyfeiriadau IP yn y pennyn 'X-Forwarded-For' wedi cael ei atal; naill ai eich cyfeiriad chi neu un o'r gweinyddion dirprwyol a ddefnyddiwyd gennych. Y rheswm gwreiddiol dros atal oedd: $1",
 'cant-block-while-blocked' => 'Ni allwch flocio defnyddwyr eraill tra bod rhwystr arnoch chithau.',
 'cant-see-hidden-user' => "Mae'r defnyddiwr yr ydych yn ceisio'i rwystro wedi ei rwystro a'i guddio'n barod.
 Gan nad yw'r gallu i guddio defnyddwyr gennych, ni allwch weld y rhwystr sydd ar y defnyddiwr na'i olygu.",
@@ -2746,6 +2746,7 @@ Mae ffolder dros dro yn eisiau.',
 'import-error-interwiki' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni wedi ei neilltuo at ddiben cysylltu\'n allanol (rhyngwici).',
 'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
 'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
+'import-error-unserialize' => "Ni allwyd ddad-gyfresu'r diwygiad $2 o'r dudalen '$1'. Adroddwyd bod y diwygiad yn defnyddio'r model cynnwys $3, wedi ei gyfresu fel $4.",
 'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Mae teitl y dudalen wraidd a roddir yn annilys.',
 'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.',
@@ -2910,8 +2911,6 @@ Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr wahardd
 'pageinfo-category-files' => 'Nifer y ffeiliau',
 
 # Skin names
-'skinname-standard' => 'Safonol',
-'skinname-nostalgia' => 'Hiraeth',
 'skinname-cologneblue' => 'Glas Cwlen',
 
 # Patrolling
@@ -3738,7 +3737,7 @@ Dangosir delweddau ar eu maint llawn, dechreuir ffeiliau o fathau eraill yn unio
 'logentry-newusers-autocreate' => '{{GENDER:$2|Crëwyd}} y cyfrif $1 yn awtomatig',
 'logentry-rights-rights' => '{{GENDER:$2|Newidiodd}} $1 y grwpiau y mae $3 yn aelod ohonynt o $4 i $5',
 'logentry-rights-rights-legacy' => '{{GENDER:$2|Newidiodd}} $1 y grwpiau y mae $3 yn aelod ohonynt',
-'logentry-rights-autopromote' => 'Dyrchafwyd $1 yn awtomatig o $4 i $5',
+'logentry-rights-autopromote' => '{{GENDER:$2|Dyrchafwyd}} $1 yn awtomatig o $4 i $5',
 'rightsnone' => '(dim)',
 
 # Feedback
index 611b744..a5c7209 100644 (file)
@@ -18,6 +18,7 @@
  * @author Froztbyte
  * @author Gorbi
  * @author H92
+ * @author HenrikKbh
  * @author Hylle
  * @author Jan Friberg
  * @author Jon Harald Søby
@@ -1798,7 +1799,6 @@ For optimal sikkerhed er img_auth.php deaktiveret.",
 'http-read-error' => 'HTTP-læsefejl.',
 'http-timed-out' => 'HTTP-forespørgslen tog for lang tid.',
 'http-curl-error' => 'Fejl under hentning af URL: $1',
-'http-host-unreachable' => 'Webadresse er ikke tilgængelig.',
 'http-bad-status' => 'Der opstod et problem under HTTP-forespørgslen: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2608,6 +2608,7 @@ Se [[Special:BlockList|blokeringslisten]] for den nuværende liste med aktuelle
 'proxyblocksuccess' => 'Færdig.',
 'sorbsreason' => 'IP-adressen er opført i DNSBL på {{SITENAME}} som åben PROXY.',
 'sorbs_create_account_reason' => 'IP-adressen er opført i DNSBL på {{SITENAME}} som åben PROXY. Oprettelse af nye brugere er ikke mulig.',
+'xffblockreason' => 'En IP-adresse der er indeholdt i X-Fremsendt-Til hovedet, enten din egen eller en på en proxy-server, du bruger, er blevet blokeret. Den oprindelige grund til blokeringen var:$1',
 'cant-block-while-blocked' => 'Du kan ikke blokkere andre brugere mens du selv er blokkeret.',
 'cant-see-hidden-user' => 'Brugeren du prøver at blokerer er allerede blokeret og skjult. Siden du ikke har rettigheden til at skjule brugere, kan du ikke se eller ændre brugerens blokering.',
 'ipbblocked' => 'Du kan ikke ændre blokeringer, da du selv er blokeret',
@@ -2992,13 +2993,8 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
-'skinname-standard' => 'Klassik',
-'skinname-nostalgia' => 'Nostalgi',
 'skinname-cologneblue' => 'Kølnerblå',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Eget udseende',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Enkelt',
 'skinname-modern' => 'Moderne',
 
 # Patrolling
index ab11353..d38b50e 100644 (file)
@@ -2025,7 +2025,6 @@ Aus Sicherheitsgründen ist img_auth.php deaktiviert.',
 'http-read-error' => 'HTTP-Lesefehler.',
 'http-timed-out' => 'Zeitüberschreitung bei der HTTP-Anfrage.',
 'http-curl-error' => 'Fehler beim Abruf der URL: $1',
-'http-host-unreachable' => 'URL konnte nicht erreicht werden.',
 'http-bad-status' => 'Während der HTTP-Anfrage ist ein Fehler aufgetreten: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3132,13 +3131,8 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 
 # Stylesheets
 'common.css' => '/* Das folgende CSS wird für alle Benutzeroberflächen geladen. */',
-'standard.css' => '/* Das folgende CSS wird für Benutzer der Klassik-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
-'nostalgia.css' => '/* Das folgende CSS wird für Benutzer der Nostalgie-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
 'cologneblue.css' => '/* Das folgende CSS wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
 'monobook.css' => '/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */',
-'myskin.css' => '/* Das folgende CSS wird für Benutzer der MySkin-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
-'chick.css' => '/* Das folgende CSS wird für Benutzer der Küken-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
-'simple.css' => '/* Das folgende CSS wird für Benutzer der Einfach-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
 'modern.css' => '/* Das folgende CSS wird für Benutzer der Modern-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte MediaWiki:Common.css bearbeiten. */',
 'vector.css' => '/* Das folgende CSS wird für Benutzer der Vector-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
 'print.css' => '/* Das folgende CSS wird in der Druckausgabe geladen. */',
@@ -3151,13 +3145,8 @@ Diese auf dem lokalen Rechner speichern und danach hier hochladen.',
 
 # Scripts
 'common.js' => '/* Das folgende JavaScript wird für alle Benutzer geladen. */',
-'standard.js' => '/* Das folgende JavaScript wird für Benutzer der Klassik-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
-'nostalgia.js' => '/* Das folgende JavaScript wird für Benutzer der Nostalgie-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
 'cologneblue.js' => '/* Das folgende JavaScript wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
 'monobook.js' => '/* Das folgende JavaScript wird für Benutzer der MonoBook-Benutzeroberfläche geladen */',
-'myskin.js' => '/* Das folgende JavaScript wird für Benutzer der MySkin-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
-'chick.js' => '/* Das folgende JavaScript wird für Benutzer der Küken-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
-'simple.js' => '/* Das folgende JavaScript wird für Benutzer der Einfach-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
 'modern.js' => '/* Das folgende JavaScript wird für Benutzer der Modern-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
 'vector.js' => '/* Das folgende JavaScript wird für Benutzer der Vector-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
 'group-autoconfirmed.js' => '/* Das folgende JavaScript wird nur für automatisch bestätigte Benutzer geladen. */',
@@ -3238,13 +3227,8 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-category-files' => 'Anzahl der Dateien',
 
 # Skin names
-'skinname-standard' => 'Klassik',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Kölnisch Blau',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Küken',
-'skinname-simple' => 'Einfach',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vector',
 
index 3b125a8..1bda694 100644 (file)
@@ -1906,7 +1906,7 @@ Kontrolê emeleyey oyo veş nêbeno.',
 'img-auth-accessdenied' => 'Cıresnayış vındarnayo.',
 'img-auth-nopathinfo' => 'PATH_INFO kemiyo.
 Teqdimkerê şıma seba ravurnayışê nê melumati eyar nêkerdo.
-Beno ke be CGI-bıngeyın bo u img_auth rê destek nêbeno.
+Beno ke be CGI-bıngeyın bo u img_auth rê desteg nêbeno.
 https://www.mediawiki.org/wiki/Manual:Image_Authorization Selahiyetê resımi bıvêne.',
 'img-auth-notindir' => 'Patikayê ke ti wazeno direktorê bar biyayişî de çin o.',
 'img-auth-badtitle' => '"$1" ra nieşkeno yew seroğê raştî virazî.',
@@ -1928,7 +1928,6 @@ qey pawıtışi, img_auth.php battal verdiyayo.",
 'http-read-error' => 'Wendişê HTTP de xeta esta.',
 'http-timed-out' => 'Waştişê HTTP qediya.',
 'http-curl-error' => 'Xetayê URLi: $1',
-'http-host-unreachable' => 'URL rê niresa.',
 'http-bad-status' => 'Waştişê tu HTTP yew problem biya: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3130,13 +3129,8 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-category-files' => 'Amarê dosyeyan',
 
 # Skin names
-'skinname-standard' => 'Klasik',
-'skinname-nostalgia' => 'Nostalciya',
 'skinname-cologneblue' => 'Cologne Blue',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Şıq',
-'skinname-simple' => 'Rehat',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vektor',
 
@@ -3342,7 +3336,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-artist' => 'Nuştoğ',
 'exif-copyright' => 'Wahirê copyrighti',
 'exif-exifversion' => 'Versiyonê Exif',
-'exif-flashpixversion' => 'Versiyonê Flashpix destek bike',
+'exif-flashpixversion' => 'Versiyonê Flashpix rê biyo desteg',
 'exif-colorspace' => 'Cayê rengi',
 'exif-componentsconfiguration' => 'manayê qisimê hemi',
 'exif-compressedbitsperpixel' => 'Modê komprasyonê resimi',
index 580b3ab..d4c0237 100644 (file)
@@ -1739,7 +1739,6 @@ Za optimalnu wěstotu img_auth.php jo znjemóžnjony.',
 'http-read-error' => 'Cytańska zmólka HTTP.',
 'http-timed-out' => 'HTTP-napšašowanje jo cas pśekšocyło.',
 'http-curl-error' => 'Zmólka pśi wótwółowanju URL: $1',
-'http-host-unreachable' => 'URL njejo był pśistupny.',
 'http-bad-status' => 'Wob cas HTTP-napšašowanje jo problem był: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2912,13 +2911,8 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-category-files' => 'Licba datajow',
 
 # Skin names
-'skinname-standard' => 'Klasiski',
-'skinname-nostalgia' => 'Nostalgiski',
 'skinname-cologneblue' => 'Kölnski Módry',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Mój šat',
-'skinname-chick' => 'Kurjetko',
-'skinname-simple' => 'Jadnorje',
 'skinname-modern' => 'Moderny',
 
 # Patrolling
index 6b1f0a7..999b906 100644 (file)
@@ -455,6 +455,7 @@ $1',
 'revdel-restore-visible' => 'ފާޅު ނުސްހާތައް',
 
 # Diffs
+'history-title' => '"$1"ގެ ތާރީޚް',
 'lineno' => 'ފޮޅުވަތް $1:',
 'compareselectedversions' => 'އިހުތިޔާރު ކުރެވިފައިވާ ނުސްހާތައް އަޅައިކިޔުއްވާ',
 'editundo' => 'ކުރީގެ ނުސްހާއަށް ބަދަލުކުރައްވާ',
index d95f195..c5dba69 100644 (file)
@@ -1805,15 +1805,6 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
 # OpenSearch description
 'opensearch-desc' => '{{SITENAME}} ({{CONTENTLANGUAGE}})', # do not translate or duplicate this message to other languages
 
-# Quickbar
-'qbsettings'                => 'Quickbar',
-'qbsettings-none'           => 'None',
-'qbsettings-fixedleft'      => 'Fixed left',
-'qbsettings-fixedright'     => 'Fixed right',
-'qbsettings-floatingleft'   => 'Floating left',
-'qbsettings-floatingright'  => 'Floating right',
-'qbsettings-directionality' => 'Fixed, depending on the script directionality of your language',
-
 # Preferences page
 'preferences'                   => 'Preferences',
 'preferences-summary'           => '', # do not translate or duplicate this message to other languages
@@ -2397,7 +2388,6 @@ For optimal security, img_auth.php is disabled.',
 'http-read-error'       => 'HTTP read error.',
 'http-timed-out'        => 'HTTP request timed out.',
 'http-curl-error'       => 'Error fetching URL: $1',
-'http-host-unreachable' => 'Could not reach URL.',
 'http-bad-status'       => 'There was a problem during the HTTP request: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3692,13 +3682,8 @@ You can view its source',
 
 # Stylesheets
 'common.css'              => '/* CSS placed here will be applied to all skins */', # only translate this message to other languages if you have to change it
-'standard.css'            => '/* CSS placed here will affect users of the Standard skin */', # only translate this message to other languages if you have to change it
-'nostalgia.css'           => '/* CSS placed here will affect users of the Nostalgia skin */', # only translate this message to other languages if you have to change it
 'cologneblue.css'         => '/* CSS placed here will affect users of the Cologne Blue skin */', # only translate this message to other languages if you have to change it
 'monobook.css'            => '/* CSS placed here will affect users of the MonoBook skin */', # only translate this message to other languages if you have to change it
-'myskin.css'              => '/* CSS placed here will affect users of the MySkin skin */', # only translate this message to other languages if you have to change it
-'chick.css'               => '/* CSS placed here will affect users of the Chick skin */', # only translate this message to other languages if you have to change it
-'simple.css'              => '/* CSS placed here will affect users of the Simple skin */', # only translate this message to other languages if you have to change it
 'modern.css'              => '/* CSS placed here will affect users of the Modern skin */', # only translate this message to other languages if you have to change it
 'vector.css'              => '/* CSS placed here will affect users of the Vector skin */', # only translate this message to other languages if you have to change it
 'print.css'               => '/* CSS placed here will affect the print output */', # only translate this message to other languages if you have to change it
@@ -3711,13 +3696,8 @@ You can view its source',
 
 # Scripts
 'common.js'              => '/* Any JavaScript here will be loaded for all users on every page load. */', # only translate this message to other languages if you have to change it
-'standard.js'            => '/* Any JavaScript here will be loaded for users using the Standard skin */', # only translate this message to other languages if you have to change it
-'nostalgia.js'           => '/* Any JavaScript here will be loaded for users using the Nostalgia skin */', # only translate this message to other languages if you have to change it
 'cologneblue.js'         => '/* Any JavaScript here will be loaded for users using the Cologne Blue skin */', # only translate this message to other languages if you have to change it
 'monobook.js'            => '/* Any JavaScript here will be loaded for users using the MonoBook skin */', # only translate this message to other languages if you have to change it
-'myskin.js'              => '/* Any JavaScript here will be loaded for users using the MySkin skin */', # only translate this message to other languages if you have to change it
-'chick.js'               => '/* Any JavaScript here will be loaded for users using the Chick skin */', # only translate this message to other languages if you have to change it
-'simple.js'              => '/* Any JavaScript here will be loaded for users using the Simple skin */', # only translate this message to other languages if you have to change it
 'modern.js'              => '/* Any JavaScript here will be loaded for users using the Modern skin */', # only translate this message to other languages if you have to change it
 'vector.js'              => '/* Any JavaScript here will be loaded for users using the Vector skin */', # only translate this message to other languages if you have to change it
 'group-autoconfirmed.js' => '/* Any JavaScript here will be loaded for autoconfirmed users only */', # only translate this message to other languages if you have to change it
@@ -3800,13 +3780,8 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-category-files'         => 'Number of files',
 
 # Skin names
-'skinname-standard'    => 'Classic', # only translate this message to other languages if you have to change it
-'skinname-nostalgia'   => 'Nostalgia', # only translate this message to other languages if you have to change it
 'skinname-cologneblue' => 'Cologne Blue', # only translate this message to other languages if you have to change it
 'skinname-monobook'    => 'MonoBook', # only translate this message to other languages if you have to change it
-'skinname-myskin'      => 'MySkin', # only translate this message to other languages if you have to change it
-'skinname-chick'       => 'Chick', # only translate this message to other languages if you have to change it
-'skinname-simple'      => 'Simple', # only translate this message to other languages if you have to change it
 'skinname-modern'      => 'Modern', # only translate this message to other languages if you have to change it
 'skinname-vector'      => 'Vector', # only translate this message to other languages if you have to change it
 
index 56de52f..50cae1b 100644 (file)
@@ -1990,7 +1990,6 @@ Para óptima seguridad, img_auth.php está desactivado.',
 'http-read-error' => 'Error de lectura HTTP.',
 'http-timed-out' => 'La solicitud HTTP ha expirado.',
 'http-curl-error' => 'Error al recuperar el URL: $1',
-'http-host-unreachable' => 'No fue posible acceder a la URL.',
 'http-bad-status' => 'Ha habido un problema durante la solicitud HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3110,13 +3109,8 @@ Permite añadir una razón al resumen de edición.',
 
 # Stylesheets
 'common.css' => '/* El CSS colocado en esta página sera aplicado a todas las pieles (skins) */',
-'standard.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Standard" */',
-'nostalgia.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Nostalgia" */',
 'cologneblue.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Cologne Blue" */',
 'monobook.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "MonoBook" */',
-'myskin.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "MySkin" */',
-'chick.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel ""Chick" */',
-'simple.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Simple" */',
 'modern.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Modern" */',
 'vector.css' => '/* El CSS colocado en esta página afectará a los usuarios que usen la piel "Vector" */',
 'print.css' => '/* Los estilos CSS colocados aquí afectarán la impresión */',
@@ -3129,13 +3123,8 @@ Permite añadir una razón al resumen de edición.',
 
 # Scripts
 'common.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios en cada carga de página */',
-'standard.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Estandar */',
-'nostalgia.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Nostalgia. */',
 'cologneblue.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Colonia azul */',
 'monobook.js' => '/* El código JavaScript que se ponga aquí será cargado por los usuarios de la piel MonoBook */',
-'myskin.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Mi piel */',
-'chick.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Pollito */',
-'simple.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Simple */',
 'modern.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Moderna */',
 'vector.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios que usen la piel Vector */',
 'group-autoconfirmed.js' => '/* Cualquier código JavaScript escrito aquí se cargará para todos los usuarios del grupo Usuarios autoconfirmados */',
@@ -3216,13 +3205,8 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-category-files' => 'Número de archivos',
 
 # Skin names
-'skinname-standard' => 'Estándar',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Colonia azul',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Mi piel',
-'skinname-chick' => 'Pollito',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Moderna',
 'skinname-vector' => 'Vector',
 
index 118397b..5873721 100644 (file)
@@ -1872,7 +1872,6 @@ Turvakaalutlustel on img_auth.php kasutus keelatud.',
 'http-read-error' => 'HTTP-lugemistõrge.',
 'http-timed-out' => 'HTTP-päring aegus.',
 'http-curl-error' => 'Tõrge URL-i $1 lugemisel',
-'http-host-unreachable' => 'Internetiaadress pole kättesaadav.',
 'http-bad-status' => 'HTTP-päringu ajal ilmnes tõrge: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3000,7 +2999,6 @@ Samuti võimaldab see resümee reale põhjenduse lisamist.',
 
 # Stylesheets
 'common.css' => '/* Siin olevat CSS-i kasutavad kõik kujundused. */',
-'standard.css' => '/* Siin olev CSS puudutab Standard-kujunduse kasutajaid. */',
 
 # Scripts
 'common.js' => '/* Siinne JavaScript laaditakse igale kasutajatele igal laaditud leheküljel. */',
@@ -3076,13 +3074,8 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-category-files' => 'Failide arv',
 
 # Skin names
-'skinname-standard' => 'Algeline',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Kölni sinine',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Minu kujundus',
-'skinname-chick' => 'Tibu',
-'skinname-simple' => 'Lihtne',
 'skinname-modern' => 'Uudne',
 'skinname-vector' => 'Vektor',
 
index 70329a1..b3dd722 100644 (file)
@@ -244,9 +244,9 @@ $messages = array(
 'hidden-category-category' => 'Kategoria ezkutuak',
 'category-subcat-count' => '{{PLURAL:$2|Kategoria honek beste honako azpikategoria baino ez du.|Kategoria honek honako {{PLURAL:$1|azpikategoria du|$1 azpikategoriak ditu}}, guztira dauden $2tik.}}',
 'category-subcat-count-limited' => 'Kategoria honek {{PLURAL:$1|azpikategoria hau du|$1 azpikategoria hauek ditu}}.',
-'category-article-count' => '{{PLURAL:$2|Kategoria honek ondorengo orri hau baino ez du.|Ondorengo {{PLURAL:$1|orri hau kategoria honetan dago|$1 orriak kategoria honetan daude}}. Guztira $2 orri dira kategoria honetan.}}',
+'category-article-count' => '{{PLURAL:$2|Kategoria honek ondorengo orri hau baino ez du.|Ondorengo {{PLURAL:$1|orri hau kategoria honetan dago|$1 orriak kategoria honetan daude}}, eta guztira $2 orri dira kategoria honetan.}}',
 'category-article-count-limited' => 'Ondorengo {{PLURAL:$1|orri hau kategoria honetan dago.|$1 orri hauek kategoria honetan daude.}}',
-'category-file-count' => '{{PLURAL:$2|Kategoria honek ondorengo fitxategi hau baino ez du.|Ondorengo {{PLURAL:$1|fitxategi hau kategoria honetan dago|$1 fitxategiak kategoria honetan daude}}. Guztira $2 fitxategi dira kategoria honetan.}}',
+'category-file-count' => '{{PLURAL:$2|Kategoria honek ondorengo fitxategi hau baino ez du.|Ondorengo {{PLURAL:$1|fitxategi hau kategoria honetan dago|$1 fitxategiak kategoria honetan daude}}, eta guztira $2 fitxategi dira kategoria honetan.}}',
 'category-file-count-limited' => 'Ondorengo {{PLURAL:$1|fitxategia kategoria honetan dago.|$1 fitxategiak kategoria honetan daude.}}',
 'listingcontinuesabbrev' => 'jarr.',
 'index-category' => 'Indexatutako orrialdeak',
@@ -1582,7 +1582,6 @@ Fitxategien sarbidea baino ez da onartzen.',
 'http-read-error' => 'HTTP irakurketa-akatsa.',
 'http-timed-out' => 'HTTP eskaera iraungi da.',
 'http-curl-error' => 'Errorea URLa bilatzerakoan: $1',
-'http-host-unreachable' => 'Ezin da URL-a atzeman.',
 'http-bad-status' => 'Arazo bat egon da HTTP eskaera bitartean: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1875,14 +1874,6 @@ Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// h
 'listusers-noresult' => 'Ez da erabiltzailerik aurkitu.',
 'listusers-blocked' => '(blokeatua)',
 
-# Special:ActiveUsers
-'activeusers' => 'Lankide aktiboen zerrenda',
-'activeusers-count' => '{{PLURAL:$1|Ekintza berri bat|$1 ekintza berri}} azken {{PLURAL:$3|egunean|$3 egunetan}}',
-'activeusers-from' => 'Bilatu honela hasten diren lankideak:',
-'activeusers-hidebots' => 'Ezkutatu bot-ak',
-'activeusers-hidesysops' => 'Ezkutatu administratzaileak',
-'activeusers-noresult' => 'Ez da lankiderik aurkitu.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Erabiltzaile talde eskumenak',
 'listgrouprights-summary' => 'Ondorengo zerrendak wikian dauden lankide taldeak agertzen dira, beraien eskubideekin.
@@ -2657,10 +2648,7 @@ Baliteke zerrenda beltzean dagoen kanpo lotura batek sortzea arazo hori.',
 'pageinfo-protect-cascading-from' => 'Serieko babesak aktibatuta. Sorburua:',
 
 # Skin names
-'skinname-standard' => 'Lehenetsia',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Cologne Blue',
-'skinname-simple' => 'Arrunta',
 'skinname-modern' => 'Modernoa',
 
 # Patrolling
index 7af960c..fd2ebd6 100644 (file)
@@ -2079,7 +2079,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'http-read-error' => 'خطای خواندن اچ‌تی‌تی‌پی.',
 'http-timed-out' => 'مهلت درخواست اچ‌تی‌تی‌پی به سر رسید.',
 'http-curl-error' => 'خطا در آوردن نشانی اینترنتی: $1',
-'http-host-unreachable' => 'دسترسی به نشانی اینترنتی ممکن نشد.',
 'http-bad-status' => 'در حین درخواست اچ‌تی‌تی‌پی خطایی رخ داد: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2636,7 +2635,7 @@ $PAGEINTRO $NEWPAGE
 شما می‌توانید سطح محافظت این صفحه را تغییر بدهید اما این کار تاثیری بر محافظت آبشاری صفحه نخواهد گذاشت.',
 'protect-default' => 'همهٔ کاربرها',
 'protect-fallback' => 'فقط به کاربرهایی که دسترسی «$1» دارند، اجازه داده می‌شود',
-'protect-level-autoconfirmed' => 'اجازÙ\87 Ù\81Ù\82Ø· Ø¨Ø±Ø§Û\8c Ø¨Ù\87 Ú©Ø§Ø±Ø¨Ø±Ù\87اÛ\8c تائیدشده',
+'protect-level-autoconfirmed' => 'تÙ\86Ù\87ا Ú©Ø§Ø±Ø¨Ø±Ø§Ù\86 تائیدشده',
 'protect-level-sysop' => 'فقط مدیران',
 'protect-summary-cascade' => 'آبشاری',
 'protect-expiring' => 'زمان سرآمدن $1 (UTC)',
@@ -3299,13 +3298,8 @@ $1',
 'pageinfo-category-files' => 'تعداد پرونده‌ها',
 
 # Skin names
-'skinname-standard' => 'کلاسیک',
-'skinname-nostalgia' => 'نوستالژی',
 'skinname-cologneblue' => 'آبی کلن',
 'skinname-monobook' => 'مونوبوک',
-'skinname-myskin' => 'پوستهٔ من',
-'skinname-chick' => 'شیک',
-'skinname-simple' => 'ساده',
 'skinname-modern' => 'مدرن',
 'skinname-vector' => 'برداری',
 
index cab9319..4a123aa 100644 (file)
@@ -1880,7 +1880,6 @@ Parhaan turvallisuuden vuoksi img_auth.php on poissa käytöstä.',
 'http-read-error' => 'HTTP-lukuvirhe.',
 'http-timed-out' => 'HTTP-pyyntö aikakatkaistiin.',
 'http-curl-error' => 'Virhe noudettaessa verkko-osoitetta: $1',
-'http-host-unreachable' => 'Ei voitu tavoittaa verkko-osoitetta',
 'http-bad-status' => 'HTTP-pyynnön aikana oli ongelma: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2974,13 +2973,8 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 
 # Stylesheets
 'common.css' => '/* Tämä sivu sisältää koko sivustoa muuttavia tyylejä. */',
-'standard.css' => '/* Tämä sivu sisältää Perus-ulkoasua muuttavia tyylejä. */',
-'nostalgia.css' => '/* Tämä sivu sisältää Nostalgia-ulkoasua muuttavia tyylejä. */',
 'cologneblue.css' => '/* Tämä sivu sisältää Kölnin sininen -ulkoasua muuttavia tyylejä. */',
 'monobook.css' => '/* Tämä sivu sisältää Monobook-ulkoasua muuttavia tyylejä. */',
-'myskin.css' => '/* Tämä sivu sisältää Oma tyylisivu -ulkoasua muuttavia tyylejä. */',
-'chick.css' => '/* Tämä sivu sisältää Chick-ulkoasua muuttavia tyylejä. */',
-'simple.css' => '/* Tämä sivu sisältää Yksinkertainen-ulkoasua muuttavia tyylejä. */',
 'modern.css' => '/* Tämä sivu sisältää Moderni-ulkoasua muuttavia tyylejä. */',
 'vector.css' => '/* Tämä sivu sisältää Vector-ulkoasua muuttavia tyylejä. */',
 'print.css' => '/* Tämä sivu sisältää tulostettua sivua muuttavia tyylejä */',
@@ -2992,13 +2986,8 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 
 # Scripts
 'common.js' => '/* Tämän sivun JavaScript-koodi liitetään jokaiseen sivulataukseen */',
-'standard.js' => '/* Tämän sivun JavaScript-koodi liitetään Perus-tyyliin */',
-'nostalgia.js' => '/* Tämän sivun JavaScript-koodi liitetään Nostalgia-tyyliin */',
 'cologneblue.js' => '/* Tämän sivun JavaScript-koodi liitetään Kölnin sininen -tyyliin */',
 'monobook.js' => '/* Tämän sivun JavaScript-koodi liitetään Monobook-tyyliin */',
-'myskin.js' => '/* Tämän sivun JavaScript-koodi liitetään Oma tyylisivu -tyyliin */',
-'chick.js' => '/* Tämän sivun JavaScript-koodi liitetään Chick-tyyliin */',
-'simple.js' => '/* Tämän sivun JavaScript-koodi liitetään Yksinkertaistettuun tyyliin */',
 'modern.js' => '/* Tämän sivun JavaScript-koodi liitetään Moderni-tyyliin */',
 'vector.js' => '/* Tämän sivun JavaScript-koodi liitetään Vector-tyyliin */',
 'group-autoconfirmed.js' => '/* Tämän sivun JavaScript-koodi liitetään vain automaattisesti hyväksytyille käyttäjille */',
@@ -3074,13 +3063,8 @@ Tallenna tiedot koneellesi ja tuo ne tällä sivulla.',
 'pageinfo-category-files' => 'Tiedostojen määrä',
 
 # Skin names
-'skinname-standard' => 'Perus',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Kölnin sininen',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Oma tyylisivu',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Yksinkertainen',
 'skinname-modern' => 'Moderni',
 
 # Patrolling
index e104dc9..bd9c737 100644 (file)
@@ -1374,7 +1374,7 @@ Vous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page
 'searchresulttext' => "Pour plus d'informations sur la recherche dans {{SITENAME}}, voir [[{{MediaWiki:Helppage}}|{{int:help}}]].",
 'searchsubtitle' => "Vous avez recherché « '''[[:$1]]''' » ([[Special:Prefixindex/$1|toutes les pages commençant par « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|toutes les pages qui ont un lien vers « $1 »]])",
 'searchsubtitleinvalid' => "Vous avez recherché « '''$1''' »",
-'toomanymatches' => "Un trop grand nombre d'occurrences a été renvoyé, veuillez soumettre une requête différente.",
+'toomanymatches' => 'Un trop grand nombre d’occurrences a été renvoyé, veuillez soumettre une requête différente.',
 'titlematches' => 'Correspondances dans les titres des pages',
 'notitlematches' => 'Aucun titre de page ne correspond à la recherche.',
 'textmatches' => 'Correspondances dans le texte des pages',
@@ -1995,7 +1995,6 @@ Pour une sécurité optimale, img_auth.php est désactivé.",
 'http-read-error' => 'Erreur de lecture HTTP.',
 'http-timed-out' => 'La requête HTTP a expiré.',
 'http-curl-error' => "Erreur lors de la récupération de l'URL : $1",
-'http-host-unreachable' => "Impossible d'atteindre l'URL.",
 'http-bad-status' => 'Il y a eu un problème lors de la requête HTTP : $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3119,22 +3118,17 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-watchlistedit-normal-submit' => 'Enlever les titres',
 'tooltip-watchlistedit-raw-submit' => 'Mise à jour de la liste de suivi',
 'tooltip-recreate' => 'Recréer la page même si celle-ci a été effacée',
-'tooltip-upload' => "Démarrer l'import",
+'tooltip-upload' => 'Démarrer l’import',
 'tooltip-rollback' => '« Révoquer » annule en un clic la ou les modification(s) de cette page par son dernier contributeur.',
-'tooltip-undo' => "« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
-Permet de rétablir la version précédente et d'ajouter un motif dans la boîte de résumé.",
+'tooltip-undo' => '« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
+Permet de rétablir la version précédente et d’ajouter un motif dans la boîte de résumé.',
 'tooltip-preferences-save' => 'Sauvegarder les préférences',
 'tooltip-summary' => 'Entrez un bref résumé',
 
 # Stylesheets
 'common.css' => '/* Le CSS placé ici sera appliqué à tous les habillages. */',
-'standard.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Standard. */',
-'nostalgia.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Nostalgia. */',
 'cologneblue.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Cologne Blue. */',
 'monobook.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Monobook. */',
-'myskin.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage MySkin. */',
-'chick.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Chick. */',
-'simple.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Simple. */',
 'modern.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Modern. */',
 'vector.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Vector. */',
 'print.css' => '/* Le CSS placé ici affectera les impressions */',
@@ -3147,13 +3141,8 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 
 # Scripts
 'common.js' => '/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */',
-'standard.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Standard uniquement */',
-'nostalgia.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Nostalgie uniquement */',
 'cologneblue.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Bleu de cologne uniquement */',
 'monobook.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage MonoBook uniquement. */',
-'myskin.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Mon habillage uniquement */',
-'chick.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Poussin uniquement */',
-'simple.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Simple uniquement */',
 'modern.js' => '/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage Moderne uniquement */',
 'vector.js' => '/* Tout code JavaScript placé ici sera chargé pour les utilisateurs de l’habillage Vector */',
 'group-autoconfirmed.js' => '/* Le JavaScript inclus ici n’affectera que les utilisateurs auto-confirmés */',
@@ -3232,13 +3221,8 @@ Permet de rétablir la version précédente et d'ajouter un motif dans la boîte
 'pageinfo-category-files' => 'Nombre de fichiers',
 
 # Skin names
-'skinname-standard' => 'Standard',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Bleu de Cologne',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Mon Interface',
-'skinname-chick' => 'Poussin',
-'skinname-simple' => 'Simple',
 'skinname-modern' => 'Moderne',
 'skinname-vector' => 'Vector',
 
index 52bb351..d7c8a82 100644 (file)
@@ -1898,7 +1898,6 @@ Para unha seguridade óptima, img_auth.php está desactivado.',
 'http-read-error' => 'Erro de lectura HTTP.',
 'http-timed-out' => 'O pedido HTTP expirou.',
 'http-curl-error' => 'Ocorreu un erro ao acceder ao URL: $1',
-'http-host-unreachable' => 'Non se puido acceder ao URL.',
 'http-bad-status' => 'Houbo un problema durante a solicitude HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -1974,7 +1973,7 @@ Poida que queira editar a descrición da [$2 páxina de descrición do ficheiro]
 'upload-disallowed-here' => 'Non pode sobrescribir este ficheiro.',
 
 # File reversion
-'filerevert' => 'Reverter $1',
+'filerevert' => 'Reverter "$1"',
 'filerevert-legend' => 'Reverter o ficheiro',
 'filerevert-intro' => 'Está a piques de reverter o ficheiro "\'\'\'[[Media:$1|$1]]\'\'\'" ata a [$4 versión do $2 ás $3].',
 'filerevert-comment' => 'Motivo:',
@@ -3031,13 +3030,8 @@ Pode ver o código fonte.',
 
 # Stylesheets
 'common.css' => '/** O CSS que se coloque aquí será aplicado a todas as aparencias */',
-'standard.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Clásica */',
-'nostalgia.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Morriña */',
 'cologneblue.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Azul colonial */',
 'monobook.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Monobook */',
-'myskin.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia A miña aparencia */',
-'chick.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Parrulo */',
-'simple.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Sinxela */',
 'modern.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Moderna */',
 'vector.css' => '/* O CSS que se coloque aquí afectará a quen use a aparencia Vector */',
 'print.css' => '/* O CSS que se coloque aquí afectará ás impresións */',
@@ -3050,13 +3044,8 @@ Pode ver o código fonte.',
 
 # Scripts
 'common.js' => '/* Calquera JavaScript que haxa aquí será cargado para todos os usuarios en cada páxina que vexan. */',
-'standard.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Clásica */',
-'nostalgia.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Morriña */',
 'cologneblue.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Azul colonial */',
 'monobook.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia MonoBook */',
-'myskin.js' => '/* O JavaScript que se coloque aquí afectará a quen use a aparencia A miña aparencia */',
-'chick.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Parrulo */',
-'simple.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Sinxela */',
 'modern.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Moderna */',
 'vector.js' => '/* Calquera JavaScript que haxa aquí será cargado para os usuarios que usen a aparencia Vector */',
 'group-autoconfirmed.js' => '/* Calquera JavaScript que haxa aquí será cargado soamente para os usuarios autoconfirmados */',
@@ -3136,13 +3125,8 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-category-files' => 'Número de ficheiros',
 
 # Skin names
-'skinname-standard' => 'Clásica',
-'skinname-nostalgia' => 'Morriña',
 'skinname-cologneblue' => 'Azul colonial',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'A miña aparencia',
-'skinname-chick' => 'Parrulo',
-'skinname-simple' => 'Sinxela',
 'skinname-modern' => 'Moderna',
 
 # Patrolling
index 6ef8213..8427c06 100644 (file)
@@ -1991,7 +1991,6 @@ $1',
 'http-read-error' => 'שגיאת קריאה של HTTP.',
 'http-timed-out' => 'עבר זמן ההמתנה של בקשת ה־HTTP.',
 'http-curl-error' => 'שגיאה בקבלת כתובת ה־URL‏: $1',
-'http-host-unreachable' => 'לא ניתן להגיע לכתובת ה־URL.',
 'http-bad-status' => 'הייתה בעיה בשליחת בקשת ה־HTTP‏: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3120,13 +3119,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* הסגנונות הנכתבים כאן ישפיעו על כל העיצובים */',
-'standard.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Standard בלבד */',
-'nostalgia.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Nostalgia בלבד */',
 'cologneblue.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב CologneBlue בלבד */',
 'monobook.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MonoBook בלבד */',
-'myskin.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MySkin בלבד */',
-'chick.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Chick בלבד */',
-'simple.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Simple בלבד */',
 'modern.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Modern בלבד */',
 'vector.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Vector בלבד */',
 'print.css' => '/* הסגנונות הנכתבים כאן ישפיעו על הפלט בהדפסה בלבד */',
@@ -3139,13 +3133,8 @@ $1',
 
 # Scripts
 'common.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ עבור כל המשתמשים בכל טעינת עמוד */',
-'standard.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Standard */',
-'nostalgia.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Nostalgia */',
 'cologneblue.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב CologneBlue */',
 'monobook.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Monobook */',
-'myskin.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב MySkin */',
-'chick.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Chick */',
-'simple.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Simple */',
 'modern.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Modern */',
 'vector.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור המשתמשים בעיצוב Vector */',
 'group-autoconfirmed.js' => '/* כל סקריפט JavaScript שנכתב כאן ירוץ רק עבור משתמשים ותיקים */',
@@ -3225,13 +3214,8 @@ $1',
 'pageinfo-category-files' => 'מספר הקבצים',
 
 # Skin names
-'skinname-standard' => 'קלאסי',
-'skinname-nostalgia' => 'נוסטלגיה',
 'skinname-cologneblue' => 'מים כחולים',
 'skinname-monobook' => 'מונובוק',
-'skinname-myskin' => 'העיצוב שלי',
-'skinname-chick' => "צ'יק",
-'skinname-simple' => 'פשוט',
 'skinname-modern' => 'מודרני',
 'skinname-vector' => 'וקטור',
 
index d71f2b5..78161f3 100644 (file)
@@ -1655,7 +1655,6 @@ Puura surakchha ke khatir, img_auth.php ke band kar dewa gais hae.',
 'http-read-error' => 'HTTP ke parrhe me galti hae',
 'http-timed-out' => 'HTTP ke khatir time nai hae.',
 'http-curl-error' => 'URL ke laawe me galti hoe gais hae: $1',
-'http-host-unreachable' => 'URL pahunche nai sakaa hae',
 'http-bad-status' => 'HTTP ke maange ke time kuch garrbarr hoe gais hae: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
index 71ad45e..b07d6e7 100644 (file)
@@ -1744,7 +1744,6 @@ Za optimalnu wěstotu je img_auth.php znjemóžnjeny.',
 'http-read-error' => 'Čitanski zmylk HTTP.',
 'http-timed-out' => 'Naprašowanje HTTP je čas překročiło.',
 'http-curl-error' => 'Zmylk při wołanju URL: $1',
-'http-host-unreachable' => 'URL njeda so docpěć.',
 'http-bad-status' => 'Problem je za HTTP-naprašowanje wustupił: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2909,13 +2908,8 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-category-files' => 'Ličba datajow',
 
 # Skin names
-'skinname-standard' => 'Klasiski',
-'skinname-nostalgia' => 'Nostalgija',
 'skinname-cologneblue' => 'Kölnjanska módrina',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Ćipka',
-'skinname-simple' => 'Jednory',
 'skinname-modern' => 'Moderny',
 
 # Patrolling
index 864ce5c..49dc2a6 100644 (file)
@@ -12,6 +12,7 @@
  * @author Aldnonymous
  * @author Anakmalaysia
  * @author ArdWar
+ * @author Bawoor
  * @author Bennylin
  * @author Borgx
  * @author Dosmiin Barsbold
@@ -1825,7 +1826,7 @@ Jika Anda tetap ingin memuatkan berkas Anda, harap kembali dan gunakan nama lain
 'uploadjava' => 'Berkas ini adalah berkas ZIP yang mengnadung berkas .class Java.
 Penggunggahan berkas Java tidak diperbolehkan karena dapat menyebabkan pengabaian batasan keamanan.',
 'upload-source' => 'Berkas sumber',
-'sourcefilename' => 'Nama berkas sumber:',
+'sourcefilename' => 'Jeneng berkas sumber:',
 'sourceurl' => 'URL sumber:',
 'destfilename' => 'Nama berkas tujuan:',
 'upload-maxfilesize' => 'Ukuran berkas maksimum: $1',
@@ -1956,7 +1957,6 @@ Untuk pilihan keamanan, img_auth.php dinonaktifkan.',
 'http-read-error' => 'Kesalahan pembacaan HTTP',
 'http-timed-out' => 'Permintaan HTTP lewat tenggat.',
 'http-curl-error' => 'Kesalahan saat mengambil URL: $1',
-'http-host-unreachable' => 'Tidak dapat mencapai URL.',
 'http-bad-status' => 'Ada masalah saat permintaan halaman HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3076,13 +3076,8 @@ Simpan ke komputer Anda dan unggah ke sini.',
 
 # Stylesheets
 'common.css' => '/* CSS yang ada di sini akan diterapkan pada semua kulit. */',
-'standard.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Standar. */',
-'nostalgia.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Nostalgia. */',
 'cologneblue.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Cologne Blue. */',
 'monobook.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Monobook. */',
-'myskin.css' => '/* CSS yang ada di sini akan diterapkan pada kulit MySkin. */',
-'chick.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Chick. */',
-'simple.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Sederhana. */',
 'modern.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Modern. */',
 'vector.css' => '/* CSS yang ada di sini akan diterapkan pada kulit Vektor. */',
 'print.css' => '/* CSS yang ada di sini akan diterapkan pada tampilan cetak. */',
@@ -3095,13 +3090,8 @@ Simpan ke komputer Anda dan unggah ke sini.',
 
 # Scripts
 'common.js' => '/* JavaScript yang ada di sini akan diterapkan untuk semua kulit. */',
-'standard.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Standard */',
-'nostalgia.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Nostalgia */',
 'cologneblue.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Cologne Blue */',
 'monobook.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit MonoBook */',
-'myskin.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit MySkin */',
-'chick.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Chick */',
-'simple.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Simple */',
 'modern.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Modern */',
 'vector.js' => '/* Semua JavaScript di sini akan dimuatkan untuk para pengguna yang menggunakan kulit Vector */',
 'group-autoconfirmed.js' => '/* Semua JavaScript di sini hanya dimuatkan untuk pengguna terkonfirmasi otomatis */',
@@ -3182,13 +3172,8 @@ Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hit
 'pageinfo-category-files' => 'Jumlah berkas',
 
 # Skin names
-'skinname-standard' => 'Klasik',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Biru Köln',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Sederhana',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vektor',
 
index 3258d5c..bc66a9e 100644 (file)
@@ -1690,7 +1690,6 @@ Para iti kangatuan a talinaay, nabaldado ti img_auth.php.',
 'http-read-error' => 'Biddut ti panagbasa ti HTTP.',
 'http-timed-out' => 'Nagsardeng ti panagtulod ti HTTP.',
 'http-curl-error' => 'Biddut ti panagala ti URL: $1',
-'http-host-unreachable' => 'Di madanon ti URL',
 'http-bad-status' => 'Adda pakirut idi las-ud ti panagkiddaw ti HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
index 0e7e82d..959b271 100644 (file)
@@ -713,8 +713,8 @@ halda áfram að nota gamla lykilorðið.',
 Vinsamlegast skráðu þig inn á ný þegar þú hefur móttekið það.',
 'blocked-mailpassword' => 'Þér er ekki heimilt að gera breytingar frá þessu netfangi og  því getur þú ekki fengið nýtt lykilorð í pósti.  Þetta er gert til þess að koma í veg fyrir skemmdarverk.',
 'eauthentsent' => 'Staðfestingarpóstur hefur verið sendur á uppgefið netfang. Þú verður að fylgja leiðbeiningunum í póstinum til þess að virkja netfangið og staðfesta að það sé örugglega þitt.',
-'throttled-mailpassword' => 'Áminning fyrir lykilorð hefur nú þegar verið send, innan við {{PLURAL:$1|síðasta klukkutímans|$1 síðustu klukkutímanna}}.
-Til að koma í veg fyrir misnotkun, er aðeins ein áminning send {{PLURAL:$1|hvern klukkutíma|hverja $1 klukkutíma}}.',
+'throttled-mailpassword' => 'Tölvupóstur til að endursetja lykilorðið hefur þegar verið sent, innan við {{PLURAL:$1|síðasta klukkutímans|$1 síðustu klukkutímanna}}.
+Til að koma í veg fyrir misnotkun, er aðeins einn tölvupóstur sendur {{PLURAL:$1|hvern klukkutíma|hverja $1 klukkutíma}}.',
 'mailerror' => 'Upp kom villa við sendingu tölvupósts: $1',
 'acct_creation_throttle_hit' => 'Því miður, hafa verið búnir til {{PLURAL:$1|1 aðgang|$1 aðganga}} nýr aðgangar í dag sem er hámarksfjöldi nýskráninga á einum degi.
 Þú getur því miður ekki búið til nýjan aðgang frá þessari IP-tölu að svo stöddu.',
@@ -766,7 +766,7 @@ Til að klára að skrá þig inn, verður þú að endurstilla lykilorðið hé
 
 # Special:PasswordReset
 'passwordreset' => 'Endurstilla lykilorð',
-'passwordreset-text' => 'Fylltu út þennan reit til að fá tölvupóst um áminningu um notendauplýsingarnar þínar.',
+'passwordreset-text' => 'Fylltu út þennan reit til að endursetja lykilorðið þitt.',
 'passwordreset-legend' => 'Endurstilla lykilorð',
 'passwordreset-disabled' => 'Lokað hefur verið fyrir að endurstilla lykilorð á þessum wiki.',
 'passwordreset-pretext' => '{{PLURAL:$1||Sláðu inn einn hluta gagnanna hér fyrir neðan}}',
@@ -776,14 +776,15 @@ Til að klára að skrá þig inn, verður þú að endurstilla lykilorðið hé
 'passwordreset-capture-help' => 'Ef þú hakar við þennan reit verður tölvupósturinn (með tímabundna lykilorðinu) sýndur þér og einnig sendur notandanum.',
 'passwordreset-email' => 'Netfang:',
 'passwordreset-emailtitle' => 'Notendaupplýsingar á {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Einhver (líklegast þú, á vistfanginu $1) hefur beðið um notendaupplýsingar þínar fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:
+'passwordreset-emailtext-ip' => 'Einhver (líklegast þú, á vistfanginu $1) hefur beðið um 
+endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:
 
 $2
 
 Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt lykilorð. {{PLURAL:$3|Tímabundna lykilorð|Tímabundnu lykilorðin}} renna út eftir {{PLURAL:$5|einn dag|$5 daga}}.
 
 Ef það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.',
-'passwordreset-emailtext-user' => 'Notandinn $1 á {{SITENAME}} hefur beðið um notendaupplýsingar þínar fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:
+'passwordreset-emailtext-user' => 'Notandinn $1 á {{SITENAME}} hefur beðið um endursetningu lykilorðsins þíns fyrir {{SITENAME}} ($4). Aðgangur eftirfarandi {{PLURAL:$3|notanda er|notendum eru}} tengd þessu netfangi:
 
 $2
 
@@ -792,9 +793,9 @@ Ef þetta er það sem þú vildir, þarftu að skrá þig inn og velja nýtt ly
 Ef það varst ekki þú sem fórst fram á þetta, eða ef þú mannst lykilorðið þitt, og villt ekki lengur breyta því, skaltu hunsa þessi skilaboð og halda áfram að nota gamla lykilorðið.',
 'passwordreset-emailelement' => 'Notendanafn: $1
 Tímabundið lykilorð: $2',
-'passwordreset-emailsent' => 'Áminning hefur verið send í tölvupósti.',
-'passwordreset-emailsent-capture' => 'Áminning hefur verið send í tölvupósti, sem er sýnd hér fyrir neðan.',
-'passwordreset-emailerror-capture' => 'Áminning var búin til, sem er sýnd hér fyrir neðan, en ekki tókst að senda hana til notandans: $1',
+'passwordreset-emailsent' => 'Töluvpóstur til að endursetja lykilorðið hefur verið sendur.',
+'passwordreset-emailsent-capture' => 'Tölvupóstur til að endursetja lykilorðið hefur verið sendur í tölvupósti, sem er sýndur hér fyrir neðan.',
+'passwordreset-emailerror-capture' => 'Tölvupóstur til að endursetja lykilorðið var búinn til, sem er sýndur hér fyrir neðan, en ekki tókst að senda hana til notandans: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Breyting netfangs',
@@ -1853,7 +1854,6 @@ Vegna öryggissjónarmiða er img_auth.php óvirkt.',
 'http-read-error' => 'HTTP lesturs villa.',
 'http-timed-out' => 'Tímamörk HTTP beiðni rann út.',
 'http-curl-error' => 'Villa við að sækja vefslóð: $1',
-'http-host-unreachable' => 'Gat ekki náð í vefslóðina',
 'http-bad-status' => 'Mistök við HTTP beiðnina: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2175,15 +2175,6 @@ Leitin þarf að minnsta kosti að innihalda rótarlén, eins og "*.org"
 'listusers-noresult' => 'Enginn notandi fannst.',
 'listusers-blocked' => '(bannaður)',
 
-# Special:ActiveUsers
-'activeusers' => 'Virkir notendur',
-'activeusers-intro' => 'Þetta er listi yfir notendur sem hafa verið virkir {{PLURAL:$1|síðasta|síðustu}} $1 {{PLURAL:$1|dag|daga}}.',
-'activeusers-count' => '$1 {{PLURAL:$1|aðgerð|aðgerðir}} á {{PLURAL:$3|síðastliðnum degi|síðustu $3 dögum}}',
-'activeusers-from' => 'Sýna notendur sem byrja á:',
-'activeusers-hidebots' => 'Fela vélmenni',
-'activeusers-hidesysops' => 'Fela möppudýr',
-'activeusers-noresult' => 'Enginn notandi fannst.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Notandahópréttindi',
 'listgrouprights-summary' => 'Hér er listi yfir notendahópa á þessum wiki, með þeirra réttindum. 
@@ -3069,13 +3060,8 @@ Vinsamlegast reyndu aftur.',
 'pageinfo-category-files' => 'Fjöldi skráa',
 
 # Skin names
-'skinname-standard' => 'Sígilt',
-'skinname-nostalgia' => 'Gamaldags',
 'skinname-cologneblue' => 'Kölnarblátt',
 'skinname-monobook' => 'EinBók',
-'skinname-myskin' => 'Mitt þema',
-'skinname-chick' => 'Gella',
-'skinname-simple' => 'Einfalt',
 'skinname-modern' => 'Nútímalegt',
 
 # Patrolling
@@ -3822,17 +3808,17 @@ Tæknilegir örðugleikar eru á þessari síðu.',
 'sqlite-no-fts' => '$1 án fullum texta leitar stuðningi',
 
 # New logging system
-'logentry-delete-delete' => '$1 eyddi síðunni $3',
-'logentry-delete-restore' => '$1 endurvakti $3',
-'logentry-delete-event' => '$1 breytti sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4',
-'logentry-delete-revision' => '$1 breytti sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4',
-'logentry-delete-event-legacy' => '$1 breytti sýnileika færslna á $3',
-'logentry-delete-revision-legacy' => '$1 breytti sýnileika útgáfna á $3',
-'logentry-suppress-delete' => '$1 bældi niður síðuna $3',
-'logentry-suppress-event' => '$1 breytti leynilega sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4',
-'logentry-suppress-revision' => '$1 breytti leynilega sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4',
-'logentry-suppress-event-legacy' => '$1 breytti leynilega sýnileika færslna á $3',
-'logentry-suppress-revision-legacy' => '$1 breytti leynilega sýnileika útgáfna á $3',
+'logentry-delete-delete' => '$1 {{GENDER:$2|eyddi}} síðunni $3',
+'logentry-delete-restore' => '$1 {{GENDER:$2|endurvakti}} $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|breytti}} sýnileika færslna á $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|breytti}} sýnileika útgáfna á $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|bældi niður}} síðuna $3',
+'logentry-suppress-event' => '$1 {{GENDER:$2|breytti}} leynilega sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4',
+'logentry-suppress-revision' => '$1 {{GENDER:$2|breytti}} leynilega sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4',
+'logentry-suppress-event-legacy' => '$1 {{GENDER:$2|breytti}} leynilega sýnileika færslna á $3',
+'logentry-suppress-revision-legacy' => '$1 {{GENDER:$2|breytti}} leynilega sýnileika útgáfna á $3',
 'revdelete-content-hid' => 'efni falið',
 'revdelete-summary-hid' => 'breytingarágrip falið',
 'revdelete-uname-hid' => 'notandanafn falið',
@@ -3841,20 +3827,20 @@ Tæknilegir örðugleikar eru á þessari síðu.',
 'revdelete-uname-unhid' => 'notandanafn birt',
 'revdelete-restricted' => 'hömlur settar á stjórnendur',
 'revdelete-unrestricted' => 'fjarlægja hömlur á stjórnendur',
-'logentry-move-move' => '$1 færði $3 á $4',
-'logentry-move-move-noredirect' => '$1 færði $3 á $4 án þess að skilja eftir tilvísun',
-'logentry-move-move_redir' => '$1 færði $3 á $4 yfir tilvísun',
-'logentry-move-move_redir-noredirect' => '$1 færði $3 á $4 yfir tilvísun, án þess að skilja eftir tilvísun',
-'logentry-patrol-patrol' => '$1 merkti útgáfu $3 frá $4 sem yfirfarna',
-'logentry-patrol-patrol-auto' => '$1 merkti sjálfvirkt útgáfu $3 frá $4 sem yfirfarna',
-'logentry-newusers-newusers' => 'Notandaaðgangurinn $1 var stofnaður',
-'logentry-newusers-create' => 'Notandaaðgangurinn $1 var stofnaður',
-'logentry-newusers-create2' => '$1 stofnaði notandaaðganginn $3',
-'logentry-newusers-byemail' => 'Notandaaðgangurinn $3 var búinn til af $1 og lykilorðið var sent með tölvupósti',
-'logentry-newusers-autocreate' => 'Aðgangurinn $1 var stofnaður sjálfvirkt',
-'logentry-rights-rights' => '$1 breytti réttindum $3 frá $4 í $5',
-'logentry-rights-rights-legacy' => '$1 breytti réttindum $3',
-'logentry-rights-autopromote' => '$1 fékk sjálfvirkt aukin réttindi frá $4 til $5',
+'logentry-move-move' => '$1 {{GENDER:$2|færði}} $3 á $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$2|færði}} $3 á $4 án þess að skilja eftir tilvísun',
+'logentry-move-move_redir' => '$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|færði}} $3 á $4 yfir tilvísun, án þess að skilja eftir tilvísun',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|merkti}} útgáfu $3 frá $4 sem yfirfarna',
+'logentry-patrol-patrol-auto' => '$1 {{GENDER:$2|merkti}} sjálfvirkt útgáfu $3 frá $4 sem yfirfarna',
+'logentry-newusers-newusers' => 'Notandaaðgangurinn $1 var {{GENDER:$2|stofnaður}}',
+'logentry-newusers-create' => 'Notandaaðgangurinn $1 var {{GENDER:$2|stofnaður}}',
+'logentry-newusers-create2' => '$1 {{GENDER:$2|stofnaði}} notandaaðganginn $3',
+'logentry-newusers-byemail' => 'Notandaaðgangurinn $3 var {{GENDER:$2|búinn til}} af $1 og lykilorðið var sent með tölvupósti',
+'logentry-newusers-autocreate' => 'Aðgangurinn $1 var {{GENDER:$2|stofnaður}} sjálfvirkt',
+'logentry-rights-rights' => '$1 {{GENDER:$2|breytti}} réttindum $3 frá $4 í $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|breytti}} réttindum $3',
+'logentry-rights-autopromote' => '$1 fékk sjálfvirkt {{GENDER:$2|aukin}} réttindi frá $4 til $5',
 'rightsnone' => '(engum)',
 
 # Feedback
@@ -3930,4 +3916,7 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'duration-centuries' => '$1 {{PLURAL:$1|öld|aldir}}',
 'duration-millennia' => '$1 {{PLURAL:$1|árþúsund}}',
 
+# Image rotation
+'rotate-comment' => 'Myndinni var snúið um $1 {{PLURAL:$1|gráðu|gráður}} réttsælis',
+
 );
index c663628..f768e7b 100644 (file)
@@ -577,6 +577,7 @@ $1',
 'site-atom-feed' => 'Feed Atom di $1',
 'page-rss-feed' => 'Feed RSS per "$1"',
 'page-atom-feed' => 'Feed Atom per "$1"',
+'feed-rss' => 'RSS',
 'red-link-title' => '$1 (la pagina non esiste)',
 'sort-descending' => 'Ordinamento decrescente',
 'sort-ascending' => 'Ordinamento crescente',
@@ -1869,7 +1870,6 @@ Per una sicurezza ottimale, img_auth.php è disattivato.',
 'http-read-error' => 'Errore di lettura HTTP.',
 'http-timed-out' => 'Richiesta HTTP scaduta.',
 'http-curl-error' => "Errore durante il recupero dell'URL: $1",
-'http-host-unreachable' => 'URL non raggiungibile.',
 'http-bad-status' => "C'è stato un problema durante la richiesta HTTP: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2968,13 +2968,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 
 # Stylesheets
 'common.css' => '/* Gli stili CSS inseriti qui si applicano a tutte le skin */',
-'standard.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Standard */',
-'nostalgia.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Nostalgia */',
 'cologneblue.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Cologne Blue */',
 'monobook.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Monobook */',
-'myskin.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin MySkin */',
-'chick.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Chick */',
-'simple.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Simple */',
 'modern.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Modern */',
 'vector.css' => '/* Gli stili CSS inseriti qui si applicano agli utenti che usano la skin Vector */',
 'print.css' => "/* Gli stili CSS inseriti qui si applicano all'output in stampa */",
@@ -2987,13 +2982,8 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 
 # Scripts
 'common.js' => '/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */',
-'standard.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Standard */',
-'nostalgia.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Nostalgia */',
 'cologneblue.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Cologne Blue */',
 'monobook.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin MonoBook */',
-'myskin.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin MySkin */',
-'chick.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Chick */',
-'simple.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Simple */',
 'modern.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Modern */',
 'vector.js' => '/* Il codice JavaScript inserito qui viene caricato dagli utenti che usano la skin Vector */',
 'group-autoconfirmed.js' => '/ * Il codice JavaScript inserito qui viene caricato solo per gli utenti autoconvalidati * /',
index fe96f9c..2a675b3 100644 (file)
@@ -2048,7 +2048,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization をご覧ください
 'http-read-error' => 'HTTP読み込みエラーです。',
 'http-timed-out' => 'HTTP要求がタイムアウトしました。',
 'http-curl-error' => 'URLからの取得に失敗しました: $1',
-'http-host-unreachable' => 'URLに到達できません。',
 'http-bad-status' => 'HTTP リクエストで問題が発生しました: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2064,7 +2063,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'license-header' => 'ライセンス',
 'nolicense' => '選択なし',
 'license-nopreview' => '(プレビューはありません)',
-'upload_source_url' => '(有効かつ一般に公開されているURL)',
+'upload_source_url' => '(有効かつ一般に公開されている URL)',
 'upload_source_file' => '(あなたのコンピューター上のファイル)',
 
 # Special:ListFiles
@@ -2718,8 +2717,8 @@ $1',
 'contribsub2' => '利用者: $1 ($2)',
 'nocontribs' => 'これらの条件に一致する変更は見つかりませんでした。',
 'uctop' => '(最新)',
-'month' => 'ã\81\93ã\82\8c以å\89\8dã\81®æ\9c\88:',
-'year' => 'ã\81\93ã\82\8c以å\89\8dã\81®å¹´:',
+'month' => 'ã\81\93ã\81®æ\9c\88以å\89\8d:',
+'year' => 'ã\81\93ã\81®å¹´ä»¥å\89\8d:',
 
 'sp-contributions-newbies' => '新規利用者の投稿のみ表示',
 'sp-contributions-newbies-sub' => '新規利用者のみ',
@@ -2884,6 +2883,7 @@ $1 のブロックの理由は「''$2''」です。",
 'sorbsreason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。',
 'sorbs_create_account_reason' => 'ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。
 アカウント作成はできません',
+'xffblockreason' => 'X-Forwarded-For ヘッダーに含まれている IP アドレスがブロックされています。これはあなたのものか、あなたが利用しているプロキシサーバーのものです。元のブロックの理由は: $1',
 'cant-block-while-blocked' => 'ブロックされている間は、他の利用者をブロックできません。',
 'cant-see-hidden-user' => 'ブロックしようとしている利用者は、既にブロックされ隠されています。
 あなたには hideuser 権限がないため、この利用者のブロックの閲覧/編集はできません。',
@@ -3203,13 +3203,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 
 # Stylesheets
 'common.css' => '/* ここに記述したCSSはすべての外装に反映されます */',
-'standard.css' => '/* ここに記述したCSSはスタンダード外装の利用者に影響します */',
-'nostalgia.css' => '/* ここに記述したCSSはノスタルジア外装の利用者に影響します */',
 'cologneblue.css' => '/* ここに記述したCSSはケルンブルー外装の利用者に影響します */',
 'monobook.css' => '/* ここに記述したCSSはモノブック外装の利用者に影響します */',
-'myskin.css' => '/* ここに記述したCSSはマイスキン外装の利用者に影響します */',
-'chick.css' => '/* ここに記述したCSSはチック外装の利用者に影響します */',
-'simple.css' => '/* ここに記述したCSSはシンプル外装の利用者に影響します */',
 'modern.css' => '/* ここに記述したCSSはモダン外装の利用者に影響します */',
 'vector.css' => '/* ここに記述したCSSはベクター外装の利用者に影響します */',
 'print.css' => '/* ここに記述したCSSは印刷出力に影響します */',
@@ -3222,13 +3217,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 
 # Scripts
 'common.js' => '/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */',
-'standard.js' => '/* ここにあるすべてのJavaScriptは、スタンダード外装を使用している利用者に対して読み込まれます */',
-'nostalgia.js' => '/* ここにあるすべてのJavaScriptは、ノスタルジア外装を使用している利用者に対して読み込まれます */',
 'cologneblue.js' => '/* ここにあるすべてのJavaScriptは、ケルンブルー外装を使用している利用者に対して読み込まれます */',
 'monobook.js' => '/* ここにあるすべてのJavaScriptは、モノブック外装を使用している利用者に対して読み込まれます */',
-'myskin.js' => '/* ここにあるすべてのJavaScriptは、マイスキン外装を使用している利用者に対して読み込まれます */',
-'chick.js' => '/* ここにあるすべてのJavaScriptは、チック外装を使用している利用者に対して読み込まれます */',
-'simple.js' => '/* ここにあるすべてのJavaScriptは、シンプル外装を使用している利用者に対して読み込まれます */',
 'modern.js' => '/* ここにあるすべてのJavaScriptは、モダン外装を使用している利用者に対して読み込まれます */',
 'vector.js' => '/* ここにあるすべてのJavaScriptは、ベクター外装を使用している利用者に対して読み込まれます */',
 'group-autoconfirmed.js' => '/* ここにあるすべてのJavaScriptは、自動承認された利用者に対して読み込まれます */',
@@ -3309,13 +3299,8 @@ MediaWiki 全般のローカライズ (地域化) に貢献したい場合は、
 'pageinfo-category-files' => 'ファイル数',
 
 # Skin names
-'skinname-standard' => 'クラシック',
-'skinname-nostalgia' => 'ノスタルジア',
 'skinname-cologneblue' => 'ケルンブルー',
 'skinname-monobook' => 'モノブック',
-'skinname-myskin' => 'マイスキン',
-'skinname-chick' => 'チック',
-'skinname-simple' => 'シンプル',
 'skinname-modern' => 'モダン',
 'skinname-vector' => 'ベクター',
 
index ad74744..5d155cc 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Anggoro
+ * @author Bawoor
  * @author Bennylin
  * @author Helix84
  * @author Hoo
@@ -1499,7 +1500,7 @@ Mangga priksa panyetèlan pangunggahan berkas.',
 'uploadjava' => 'Berkas kuwi berkas ZIP sing kaisi berkas .class Java.
 Ngungga berkas Java ora dililakaké amarga bisa nyebabaké ngluwèhaké wates kamanan.',
 'upload-source' => 'Berkas sumber',
-'sourcefilename' => 'Jeneng berkas sumber',
+'sourcefilename' => 'Jeneng berkas sumber:',
 'sourceurl' => 'URL sumber:',
 'destfilename' => 'Jeneng berkas sing dituju',
 'upload-maxfilesize' => 'Ukuran maksimal berkas: $1',
@@ -1616,7 +1617,6 @@ Kanggo kamanan paling apik, img_auth.php dipatèni.',
 'http-read-error' => 'Kasalahan maca HTTP.',
 'http-timed-out' => 'Panjalukan HTTP kliwat wates wektu.',
 'http-curl-error' => 'Kasalahan nalika njupuk URL: $1',
-'http-host-unreachable' => 'Ora bisa ngranggèh URL.',
 'http-bad-status' => 'Ana masalah nalika njaluk HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
index a514af7..d803edf 100644 (file)
@@ -1801,7 +1801,6 @@ $1',
 'http-read-error' => 'HTTP წაკითხვის შეცდომა.',
 'http-timed-out' => 'HTTP მოთხოვნის დრო გავიდა.',
 'http-curl-error' => 'შეცდომა URL: $1-ის მოთხოვნისას',
-'http-host-unreachable' => 'URL მიუწვდომელია',
 'http-bad-status' => 'HTTP მოთხოვნისას აღმოჩენილია შეცდომა - $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2628,6 +2627,7 @@ $1',
 'sorbs' => 'DNSBL',
 'sorbsreason' => 'თქვენი IP-მისამართი მიჩნევა ღია პროქსიდ DNSBL-ის თანახმად.',
 'sorbs_create_account_reason' => 'თქვენი IP-მისამართი ითვლება ღია პროქსიდ DNSBL-ის ანახმად. თქვენ ვერ შექმნით ანგარიშს.',
+'xffblockreason' => 'დაიბლოკა IP-მისამართი, რომელიც იმყოფებოდა X-Forwarded-For-ის სათაურში და რომელიც გეკუთვნით თქვენ ან თქვენ მიერ გამოყენებულ პროქსი-სერვერს. დაბლოკვის თავდაპირველი მიზეზი იყო: $1',
 'cant-block-while-blocked' => 'თქვენ ვერ დაბლოკავთ სხვა მომხმარებლებს, რადგანაც თავად ხართ დაბლოკილი.',
 'cant-see-hidden-user' => 'მომხმარებელი, რომლის დაბლოკვასაც ცდილოთ, უკვე დაბლოკილია და დამალულია. რადგანაც თქვენ არ გაქვთ დამალულ მომხმარებლებთან მუშაობის ნებართვა, თქვენ ვერ შეცვლით ამ ბლოკს.',
 'ipbblocked' => 'თქვენ ვერ დაბლოკავთ ან მოხსნით ბლოკს სხვა მომხმარებლებს, რადგანაც თავად ხართ დაბლოკილი.',
@@ -2932,13 +2932,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/** აქ ჩასმული CSS გამოყენებული იქნება გაფორმების ყველა გარეკანზე */',
-'standard.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება სტანდარტული გაფორმების თემაში */',
-'nostalgia.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება ნოსტალგიური გაფორმების თემაში */',
 'cologneblue.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება კელნის ლურჯი გაფორმების თემაში */',
 'monobook.css' => '/* აქ ჩასმული CSS გავლენას იქონიებს Monobook ინტერფეისის მომხმარებლებზე */',
-'myskin.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება ჩემი იერსახის გაფორმების თემაში */',
-'chick.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება წიწილის გაფორმების თემაში */',
-'simple.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება მარტივი გაფორმების თემაში */',
 'modern.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება თანამედროვე გაფორმების თემაში */',
 'vector.css' => '/* აქ ჩასმული CSS გამოყენებული იქნება ვექტორული გაფორმების თემაში */',
 'group-autoconfirmed.css' => '/* აქ განთავსებული CSS გამოყენებული იქნება მხოლოდ ავტომატურად დადასტურებული მომხმარებლებისათვის */',
@@ -3022,13 +3017,8 @@ $1',
 'pageinfo-category-files' => 'ფაილების რაოდენობა',
 
 # Skin names
-'skinname-standard' => 'კლასიკური',
-'skinname-nostalgia' => 'ნოსტალგია',
 'skinname-cologneblue' => 'კელნის ლურჯი',
 'skinname-monobook' => 'მონობუკი',
-'skinname-myskin' => 'საკუთარი',
-'skinname-chick' => 'წიწილა',
-'skinname-simple' => 'მარტივი',
 'skinname-modern' => 'თანამედროვე',
 'skinname-vector' => 'ვექტორული',
 
index d196105..2792c7a 100644 (file)
@@ -2008,7 +2008,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오
 'http-read-error' => 'HTTP 읽기 오류.',
 'http-timed-out' => 'HTTP 요청 시간 초과.',
 'http-curl-error' => 'URL 열기 오류: $1',
-'http-host-unreachable' => 'URL에 접근하지 못했습니다.',
 'http-bad-status' => 'HTTP 요청 중 오류 발생: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3159,13 +3158,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Stylesheets
 'common.css' => '/* 이 CSS 설정은 모든 스킨에 동일하게 적용됩니다 */',
-'standard.css' => '/* 이 CSS 설정은 스탠다드 스킨을 사용하는 사용자에게 적용됩니다 */',
-'nostalgia.css' => '/* 이 CSS 설정은 노스탤지아 스킨을 사용하는 사용자에게 적용됩니다 */',
 'cologneblue.css' => '/* 이 CSS 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */',
 'monobook.css' => '/* 이 CSS 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */',
-'myskin.css' => '/* 이 CSS 설정은 마이스킨 스킨을 사용하는 사용자에게 적용됩니다 */',
-'chick.css' => '/* 이 CSS 설정은 치크 스킨을 사용하는 사용자에게 적용됩니다 */',
-'simple.css' => '/* 이 CSS 설정은 심플 스킨을 사용하는 사용자에게 적용됩니다 */',
 'modern.css' => '/* 이 CSS 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */',
 'vector.css' => '/* 이 CSS 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */',
 'print.css' => '/* 이 CSS 설정은 인쇄 출력 화면에 적용됩니다 */',
@@ -3178,13 +3172,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Scripts
 'common.js' => '/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. */',
-'standard.js' => '/* 이 자바스크립트 설정은 스탠다드 스킨을 사용하는 사용자에게 적용됩니다 */',
-'nostalgia.js' => '/* 이 자바스크립트 설정은 노스탤지아 스킨을 사용하는 사용자에게 적용됩니다 */',
 'cologneblue.js' => '/* 이 자바스크립트 설정은 쾰른 블루 스킨을 사용하는 사용자에게 적용됩니다 */',
 'monobook.js' => '/* 이 자바스크립트 설정은 모노북 스킨을 사용하는 사용자에게 적용됩니다 */',
-'myskin.js' => '/* 이 자바스크립트 설정은 마이스킨 스킨을 사용하는 사용자에게 적용됩니다 */',
-'chick.js' => '/* 이 자바스크립트 설정은 치크 스킨을 사용하는 사용자에게 적용됩니다 */',
-'simple.js' => '/* 이 자바스크립트 설정은 심플 스킨을 사용하는 사용자에게 적용됩니다 */',
 'modern.js' => '/* 이 자바스크립트 설정은 모던 스킨을 사용하는 사용자에게 적용됩니다 */',
 'vector.js' => '/* 이 자바스크립트 설정은 벡터 스킨을 사용하는 사용자에게 적용됩니다 */',
 'group-autoconfirmed.js' => '/* 이 자바스크립트 설정은 자동 인증된 사용자에만 적용됩니다 */',
@@ -3265,13 +3254,8 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-category-files' => '파일 수',
 
 # Skin names
-'skinname-standard' => '클래식',
-'skinname-nostalgia' => '노스탤지아',
 'skinname-cologneblue' => '쾰른 블루',
 'skinname-monobook' => '모노북',
-'skinname-myskin' => '마이스킨',
-'skinname-chick' => '치크',
-'skinname-simple' => '심플',
 'skinname-modern' => '모던',
 'skinname-vector' => '벡터',
 
index 331925d..55b4dd4 100644 (file)
@@ -1973,7 +1973,6 @@ Dröm es <code lang="en">img_auth.php</code> zor Sisherheit heh affjeschalldt.',
 'http-read-error' => 'Et Lässe beim <code lang="en">HTTP</code> es donävve jeange.',
 'http-timed-out' => 'Di <code lang="en">HTTP</code>-Aanforderung hät zoh lang jebruch.',
 'http-curl-error' => 'Ene Fähler es opjetrodde beim Holle vun däm <code lang="en">URL</code>: $1',
-'http-host-unreachable' => 'Mer sen nit noh dämm <i lang="en">URL</i> dorschjekumme.',
 'http-bad-status' => 'Bei dä <code lang="en">HTTP</code>-Aanforderung es e Problem opjetrodde: Fähler&nbsp;$1 — $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3156,13 +3155,8 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 
 # Stylesheets
 'common.css' => '/* CSS heh aan dä Stell hät Uswirkunge op all Ovverflääsche */',
-'standard.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Klassesch“ */',
-'nostalgia.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Nostaljesch“ */',
 'cologneblue.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Kölsch Blau“ */',
 'monobook.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Monobooch“ */',
-'myskin.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Ming Skin“ */',
-'chick.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Höhnsche“ */',
-'simple.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Eijfach“ */',
 'modern.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Modern“ */',
 'vector.css' => '/* CSS heh aan dä Stell wirrek nur op de Ovverflääsch „Vector“ */',
 'print.css' => '/* CSS heh aan dä Stell wirrek nur op et Sigge Drökke */',
@@ -3175,13 +3169,8 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 
 # Scripts
 'common.js' => '/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */',
-'standard.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Klassesch" jescheck */',
-'nostalgia.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Nostaljesch" jescheck */',
 'cologneblue.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Kölsch Blou" jescheck */',
 'monobook.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Monnobooch" jescheck */',
-'myskin.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Ming Skin" jescheck */',
-'chick.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Höhnsche" jescheck */',
-'simple.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Eijfach" jescheck */',
 'modern.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Modern" jescheck */',
 'vector.js' => '/* De JavaSkrippte fun hee krijje alle Sigge met de Ovverflääsch "Vector" jescheck */',
 'group-autoconfirmed.js' => '/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */',
@@ -3245,6 +3234,7 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 'pageinfo-magic-words' => '{{PLURAL:$1|Ei Zauberwoot|$1 Zauberwööter|Kein Zauberwööter}}',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Ein verstoche Saachjropp|$1 verstoche Saachjroppe|Kein verstoche Saachjropp}}',
 'pageinfo-templates' => '{{PLURAL:$1|Ein Schablohn|$1 Schablohne|Kein Schablohn}} opjerohfe',
+'pageinfo-transclusions' => 'En {{PLURAL:$1|ein Sigk|$1 Sigge|kein Sigk}} enjeföösch',
 'pageinfo-toolboxlink' => 'Övver heh di Sigg',
 'pageinfo-redirectsto' => 'Leidt öm op',
 'pageinfo-redirectsto-info' => 'Aanjaabe övver di Sigg',
@@ -3259,13 +3249,8 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 'pageinfo-category-files' => 'De Aanzahl Dateie',
 
 # Skin names
-'skinname-standard' => 'Klassesch',
-'skinname-nostalgia' => 'Nostaljesch',
 'skinname-cologneblue' => 'Kölsch Blau',
 'skinname-monobook' => 'MonoBoch',
-'skinname-myskin' => 'Ming Skin',
-'skinname-chick' => 'Höhnche',
-'skinname-simple' => 'Eifach',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vektor',
 
@@ -3346,6 +3331,8 @@ $1',
 'minutes' => '{{PLURAL:$1|eine Menutt|$1 Menutte|keine Menutt}}',
 'hours' => '{{PLURAL:$1|ein Schtundt|$1 Schtunde|kein Schtundt}}',
 'days' => '{{PLURAL:$1|einem Daach|$1 Dääsch|keinem Daach}}',
+'months' => '{{PLURAL:$1|Eine&nbsp;Monhnd|$1&nbsp;Mohnde|Keine&nbsp;Monhnd}}',
+'years' => '{{PLURAL:$1|Ein&nbsp;Jonhr|$1&nbsp;Johre|Kei&nbsp;Jonhr}}',
 'ago' => 'vür $1',
 'just-now' => 'jraad äävens',
 
@@ -3946,7 +3933,7 @@ Wells Do jetz met en neu Version die Sigg widder neu aanläje?',
 'bitrate-yottabits' => '$1&nbps;Ybps',
 
 # Live preview
-'livepreview-loading' => 'Ben am Lade …',
+'livepreview-loading' => 'Ben aam Laade{{int:ellipsis}}',
 'livepreview-ready' => 'Fädesch jelaade.',
 'livepreview-failed' => 'De lebendije Vör-Ansich klapp jrad nit.
 Don de nomaale Vör-Ansich nemme.',
@@ -4188,6 +4175,7 @@ die De häs han welle. Se künnt jet ällder un nit mieh aktoäll sin.',
 |De $1 wood als en neue Metmaacherėn
 |Dat $1 wood als ene neue Metmaacher}} aanjelaat.',
 'logentry-newusers-create2' => '{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $3 wood {{GENDER:$2|vum|vum|vumm Metmaacher|vun dä|vum}} $1 aanjelaat.',
+'logentry-newusers-byemail' => '{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} aanjelaat un {{GENDER:$4|sing|em sing|däm sing|dä iehr|däm sing}} Paßwoot met der <i lang="en>e-mail</i> verscheck.',
 'logentry-newusers-autocreate' => '{{GENDER:$4|Dä|Dat|Dä Metmaacher|De|Dat}} $1 wood automattesch {{GENDER:$4|als Metmaacher|als Metmaacher||als Metmaacher|als Metmaacher}} aanjelaat.',
 'logentry-rights-rights' => '{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.',
 'logentry-rights-rights-legacy' => '{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.',
@@ -4247,6 +4235,7 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'api-error-ok-but-empty' => 'Fähler: Mer krijje kein Antwoot vum ẞööver.',
 'api-error-overwrite' => 'En Dattei ze övverschrieve es nit zohjelohße.',
 'api-error-stashfailed' => 'Fähler: Dä ẞööver hät kein Datteije zweschejeschpeischert.',
+'api-error-publishfailed' => 'Ene Fähler es em  server opjetrodde. En zweschejescheischerte Dattei kunnt nit öffentlesch jemaat wääde.',
 'api-error-timeout' => 'Dä ẞööver hät en dä jewennde Zick nit jeantwoot.',
 'api-error-unclassified' => 'Ene Fähler es opjetrodde, der mer nit kenne.',
 'api-error-unknown-code' => 'Nit bekannte Fähler: „$1“',
@@ -4257,15 +4246,15 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'api-error-verification-error' => 'Di Dattei künnt kappott sin, udder en verkehte Endong em Naame han.',
 
 # Durations
-'duration-seconds' => '{{PLURAL:$1|ein Sekund|$1 Sekunde|kein Sekund}}',
-'duration-minutes' => '{{PLURAL:$1|ein Menutt|$1 Menutte|kein Menutt}}',
-'duration-hours' => '{{PLURAL:$1|en Stund|$1 Stunde|kein Shtund}}',
-'duration-days' => '{{PLURAL:$1|ene Daach|$1 Dääsch|keine Daach}}',
-'duration-weeks' => '{{PLURAL: $1|en Woch|$1 Woche|kein Woch}}',
-'duration-years' => '{{PLURAL:$1|e Johr|$1 Johre|kei Johr}}',
-'duration-decades' => '{{PLURAL:$1|zehn Johre|$1 Johrzehnte|kei Johrzehnt}}',
-'duration-centuries' => '{{PLURAL:$1|e Johrhondert|$1 Johrhonderte|kei Johrhondert}}',
-'duration-millennia' => '{{PLURAL:$1|e Johrdousend|$1 Johrdousende|kei Johrdousend}}',
+'duration-seconds' => '{{PLURAL:$1|ein&nbsp;Sekond|$1&nbsp;Sekonde|kein&nbsp;Sekond}}',
+'duration-minutes' => '{{PLURAL:$1|ein&nbsp;Menot|$1&nbsp;Menotte|kein&nbsp;Menot}}',
+'duration-hours' => '{{PLURAL:$1|en&nbsp;Schtond|$1&nbsp;Schtonde|kein&nbsp;Schtond}}',
+'duration-days' => '{{PLURAL:$1|ene&nbsp;Daach|$1&nbsp;Dääsch|keine&nbsp;Daach}}',
+'duration-weeks' => '{{PLURAL: $1|en&nbsp;Woch|$1&nbsp;Woche|kein&nbsp;Woch}}',
+'duration-years' => '{{PLURAL:$1|e&nbsp;Johr|$1&nbsp;Johre|kei&nbsp;Johr}}',
+'duration-decades' => '{{PLURAL:$1|zehn&nbsp;Johre|$1&nbsp;Johzehnte|kei&nbsp;Johzehnt}}',
+'duration-centuries' => '{{PLURAL:$1|e&nbsp;Johhondert|$1&nbsp;Johhonderte|kei&nbsp;Johhondert}}',
+'duration-millennia' => '{{PLURAL:$1|e&nbsp;Johdousend|$1&nbsp;Johdousende|kei&nbsp;Johdousend}}',
 
 # Image rotation
 'rotate-comment' => 'Dat Beld wood öm {{PLURAL:$1|$1 Jraad}} esu eröm jedrieht, wi der Ohrzeijer leuf.',
index 4df4ce5..8ef59d4 100644 (file)
@@ -188,8 +188,8 @@ $messages = array(
 'tog-shownumberswatching' => 'Numerum usorum custodientium monstrare',
 'tog-oldsig' => 'Subscriptio ad tempus adhibita:',
 'tog-fancysig' => 'Subscriptio vicitext (sine nexu automatico)',
-'tog-externaleditor' => 'Editore externo semper uti (periti tantum:  necesse est organa propria in ordinatore habere. [//www.mediawiki.org/wiki/Manual:External_editors adiutatum (anglice)]',
-'tog-externaldiff' => 'Editore dissimilitudinum externo semper uti (periti tantum:  necesse est organa propria in ordinatore habere. [//www.mediawiki.org/wiki/Manial:External_editors adiudatum (anglice)]',
+'tog-externaleditor' => 'Editore externo semper uti (periti tantum: necesse est organa propria in computatro habere. [//www.mediawiki.org/wiki/Manual:External_editors adiutatum (Anglice)])',
+'tog-externaldiff' => 'Editore dissimilitudinum externo semper uti (periti tantum: necesse est organa propria in computatro habere. [//www.mediawiki.org/wiki/Manual:External_editors adiutatum (Anglice)])',
 'tog-showjumplinks' => 'Sinere nexus ostendi forma "salire ad" monstrata',
 'tog-uselivepreview' => 'Praevisum viventem adhibere (JavaScript)',
 'tog-forceeditsummary' => 'Si recensionem non summatim descripsero, me roga si continuare velim',
@@ -1981,7 +1981,6 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 'pageinfo-toolboxlink' => 'De hac pagina',
 
 # Skin names
-'skinname-standard' => 'Norma',
 'skinname-cologneblue' => 'Caerulus Colonia',
 
 # Patrolling
index e5ddc84..e3539a0 100644 (file)
@@ -268,7 +268,7 @@ $messages = array(
 'january-gen' => 'Enero',
 'february-gen' => 'Hevrero',
 'march-gen' => 'Março',
-'april-gen' => 'Avril',
+'april-gen' => 'Abril',
 'may-gen' => 'Mayo',
 'june-gen' => 'Juño',
 'july-gen' => 'Jullo',
@@ -280,7 +280,7 @@ $messages = array(
 'jan' => 'Ene',
 'feb' => 'Hev',
 'mar' => 'Mar',
-'apr' => 'Avr',
+'apr' => 'Abr',
 'may' => 'May',
 'jun' => 'Juñ',
 'jul' => 'Jull',
index 4437b3c..e84ecab 100644 (file)
@@ -1772,7 +1772,6 @@ Fir eng oprimal Sécherheet ass img_auth.php ausgeschalt.",
 'http-read-error' => 'HTTP-Feeler beim Liesen.',
 'http-timed-out' => 'HTTP-Ufro huet ze laang gebraucht (time out).',
 'http-curl-error' => 'Feeler beim Ofruff vun der URL: $1',
-'http-host-unreachable' => "D'URL konnt net erreecht ginn.",
 'http-bad-status' => 'Et gouf e Problem bäi der HTTP-Ufro: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2891,13 +2890,8 @@ Erlaabt et e Grond an de Resumé derbäizesetzen.',
 
 # Stylesheets
 'common.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Chick''  */",
-'standard.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Klassesch''  */",
-'nostalgia.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Nostalgie''  */",
 'cologneblue.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Köln Blo''  */",
 'monobook.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Monobook''  */",
-'myskin.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''MySkin''  */",
-'chick.css' => '/* Dës CSS huet nëmmen Afloss op de Skin "Chick" */',
-'simple.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Einfach''  */",
 'modern.css' => "/* Dës CSS huet nëmmen Afloss op de Skin ''Modern''  */",
 
 # Scripts
@@ -2975,13 +2969,8 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-category-files' => 'Zuel vun de Fichieren',
 
 # Skin names
-'skinname-standard' => 'Klassesch',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Köln Blo',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Einfach',
 'skinname-modern' => 'Modern',
 
 # Patrolling
index 90ebad7..3b3c9b5 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Admresdeserv.
  * @author Dark Eagle
  * @author FnTmLV
  * @author Geimeris
@@ -122,8 +123,8 @@ $messages = array(
 'thu' => 'Ce',
 'fri' => 'Pk',
 'sat' => 'Se',
-'january' => 'janvārī',
-'february' => 'februārī',
+'january' => 'Janvārs',
+'february' => 'Februārs',
 'march' => 'martā',
 'april' => 'aprīlī',
 'may_long' => 'maijā',
@@ -247,7 +248,7 @@ $messages = array(
 'unprotectthispage' => 'Mainīt šīs lapas aizsardzību',
 'newpage' => 'Jauna lapa',
 'talkpage' => 'Diskusija par šo lapu',
-'talkpagelinktext' => 'diskusija',
+'talkpagelinktext' => 'Diskusija',
 'specialpage' => 'Īpašā Lapa',
 'personaltools' => 'Lietotāja rīki',
 'postcomment' => 'Pievienot komentāru',
@@ -645,7 +646,7 @@ Ja tu esi anonīms lietotājs un uzskati, ka tev ir adresēti neatbilstoši kome
 'noarticletext' => 'Šajā lapā šobrīd nav nekāda teksta, tu vari [[Special:Search/{{PAGENAME}}|meklēt citās lapās pēc šīs lapas nosaukuma]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītos reģistru ierakstos] vai arī [{{fullurl:{{FULLPAGENAME}}|action=edit}} sākt rediģēt šo lapu]</span>.',
 'noarticletext-nopermission' => 'Šajā lapā pašlaik nav nekāda teksta.
 Tu vari [[Special:Search/{{PAGENAME}}|meklēt šīs lapas nosaukumu]] citās lapās,
-vai <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>.',
+vai <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} meklēt saistītus reģistru ierakstus]</span>, bet jums nav atļauja izveidot si lapu.',
 'userpage-userdoesnotexist' => 'Lietotājs "<nowiki>$1</nowiki>" nav reģistrēts.
 Lūdzu, pārliecinies vai vēlies izveidot/izmainīt šo lapu.',
 'userpage-userdoesnotexist-view' => 'Lietotājs "$1" nav reģistrēts.',
@@ -757,6 +758,8 @@ Tā jau eksistē.',
 'post-expand-template-inclusion-warning' => "'''Brīdinājums:''' iekļauto veidņu izmērs ir par lielu.
 Dažas veidnes netiks iekļautas.",
 'post-expand-template-inclusion-category' => 'Lapas, kurām pārsniegts iekļauto veidņu apjoms',
+'post-expand-template-argument-warning' => "'''Brīdinājums:''' Šī lapa satur vairāk neka vienu veidni argumentu, kas ir pārāk liels pec paplašināšanas.
+Šie argumenti ir izlaists.",
 'post-expand-template-argument-category' => 'Lapas, kurās ir izlaisti veidņu argumenti',
 'parser-template-loop-warning' => 'Veidne ir ievietota tādā pašā veidnē: [[$1]]',
 
@@ -1063,6 +1066,7 @@ Norādītā parametra vērtība būs publiski pieejama.',
 'prefs-help-realname' => 'Īstais vārds nav obligāti jānorāda.
 Ja tu izvēlies to norādīt, tas tiks izmantots, lai identificētu tavu darbu (ieguldījumu {{grammar:lokatīvs|{{SITENAME}}}}).',
 'prefs-help-email' => 'E-pasta adrese nav obligāta, bet ir nepieciešama nozaudētas paroles atjaunošanai.',
+'prefs-help-email-others' => 'Jus ari variet izvelties ka citi jus var kontaktēt uz jusu lietotajā sarunas lapu, neatklājot jus identitāti.',
 'prefs-help-email-required' => 'E-pasta adrese ir obligāta.',
 'prefs-info' => 'Pamatinformācija',
 'prefs-i18n' => 'Internacionalizācija',
@@ -1448,7 +1452,6 @@ Atļauta ir tikai failu piekļuve.',
 # HTTP errors
 'http-invalid-url' => 'Nederīgs URL: $1',
 'http-read-error' => 'HTTP nolasīšanas kļūda.',
-'http-host-unreachable' => 'URL nevarēja sasniegt.',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'URL nevarēja sasniegt',
@@ -1779,6 +1782,7 @@ Tā e-pasta adrese, kuru tu esi norādījis [[Special:Preferences|savā izvēļu
 # Watchlist
 'watchlist' => 'Mani uzraugāmie raksti',
 'mywatchlist' => 'Uzraugāmie raksti',
+'watchlistfor2' => 'Priekš $1 ($2)',
 'nowatchlist' => 'Tavā uzraugāmo rakstu sarakstā nav neviena raksta.',
 'watchlistanontext' => 'Lūdzu $1, lai apskatītu vai labotu savu uzraugāmo rakstu saraksta saturu.',
 'watchnologin' => 'Neesi iegājis',
@@ -2978,6 +2982,7 @@ Var arī lietot [[Special:EditWatchlist|standarta izmainīšanas lapu]].',
 
 # Core parser functions
 'unknown_extension_tag' => 'Nezināma paplašinājuma iezīme "$1"',
+'duplicate-defaultsort' => '\'\'\'Brīdinājums:\'\'\' Noklusējuma kārtošanas atslēga "$2" ignorē kārtošanas atslēga "$1".',
 
 # Special:Version
 'version' => 'Versija',
index 8df81a7..c57fa66 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Bawoor
  * @author Slamet Serayu (on map-bms.wikipedia.org)
  * @author StefanusRA
  * @author לערי ריינהארט
@@ -45,8 +46,8 @@ $messages = array(
 'tog-shownumberswatching' => 'Tidhokna jumlah pangawas',
 'tog-oldsig' => 'Tapak asma sekiye:',
 'tog-fancysig' => 'Tapak asma dianggep dadi teks wiki (ora nganggo pranala otomatis)',
-'tog-externaleditor' => 'Gunakna editor eksternal secara gawan (kanggo sing ahli thok, perlu pengaturan mligi nang komputere rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkape.])',
-'tog-externaldiff' => 'Gunakna diff eksternal secara gawan (kanggo sing ahli thok, perlu pengaturan mligi nang komputere rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkape.])',
+'tog-externaleditor' => 'Gunakna editor eksternal sekang gawan (kanggo sing ahli thok, merlokna setelan kusus neng komputeré rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapé.])',
+'tog-externaldiff' => 'Gunakna diff eksternal sekang gawan (kanggo sing ahli thok, merlokna setèlan kusus nang komputeré rika. [//www.mediawiki.org/wiki/Manual:External_editors Informasi selengkapé.])',
 'tog-showjumplinks' => 'Aktifna pranala pitulung "mlumpat maring"',
 'tog-uselivepreview' => 'Gunakna pratayang langsung (mbutuhna JavaScript) (egin jajalan)',
 'tog-forceeditsummary' => 'Emutna inyong anggere durung ngisi kotak ringkesan suntingan',
@@ -185,7 +186,7 @@ $messages = array(
 'errorpagetitle' => 'Kasalahan',
 'returnto' => 'Bali maring $1.',
 'tagline' => 'Sekang {{SITENAME}}',
-'help' => 'Rewang',
+'help' => 'Réwang',
 'search' => 'golet tulisan',
 'searchbutton' => 'Goleti',
 'go' => 'golet',
@@ -291,7 +292,7 @@ Deleng [[Special:Version|kaca versi]].',
 'viewsourcelink' => 'deleng sumbere',
 'editsectionhint' => 'Sunting bagian: $1',
 'toc' => 'Isi',
-'showtoc' => 'tidokna',
+'showtoc' => 'tidhokna',
 'hidetoc' => 'umpetna',
 'collapsible-collapse' => 'Umpetna',
 'collapsible-expand' => 'Tidokna',
@@ -588,12 +589,12 @@ Tembung sandhi sauntara: $2',
 'summary' => 'Ringkesan:',
 'subject' => 'Subyek/judhul:',
 'minoredit' => 'Kiye suntingan cilik',
-'watchthis' => 'Awasana kaca kiye',
+'watchthis' => 'Awasi kaca kiyé',
 'savearticle' => 'Simpen',
 'preview' => 'Pra tayang',
 'showpreview' => 'Pra tayang',
 'showlivepreview' => 'Pratayang langsung',
-'showdiff' => 'Deleng beda',
+'showdiff' => 'Ndeleng bedané',
 'anoneditwarning' => 'Rika ora kadaftar mlebu.
 Alamat IP-ne Rika bakal dicatet nang sajarah panyuntingane kaca kiye.',
 'anonpreviewwarning' => "''Rika durung mlebu log. Nyimpen kaca bakal nyatetna alamat IP-ne Rika nang riwayat suntingan kaca kiye.''",
@@ -1200,7 +1201,7 @@ Aja kuatir, alamat imele Rika ora ditidokna dong pangganggo sejen ngontak Rika.'
 'diff' => 'bédane',
 'hist' => 'versi',
 'hide' => 'Umpetna',
-'show' => 'Tidokna',
+'show' => 'Tidhokna',
 'minoreditletter' => 'c',
 'newpageletter' => 'A',
 'boteditletter' => 'b',
@@ -1471,12 +1472,12 @@ Rika teyeng mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sensitif
 'emailuserfooter' => 'Layang kiye dikirimna sekang $1 ming $2 nggunakna fungsi "Layangpanganggo" nang {{SITENAME}}.',
 
 # Watchlist
-'watchlist' => 'Daftar pangawasane inyong',
-'mywatchlist' => 'Daptar pangawasane inyong',
+'watchlist' => 'Daftar sawangané inyong',
+'mywatchlist' => 'Daftar sawangané inyong',
 'watchlistfor2' => 'Kanggo $1 $2',
 'watch' => 'Pantau',
 'unwatch' => 'Batalna pantauan',
-'watchlist-details' => 'Ana {{PLURAL:$1|$1 kaca|$1 kaca}} nang daftar pangawasane Rika, ningen ora ngitung kaca dhiskusi.',
+'watchlist-details' => 'Ana {{PLURAL:$1|$1 kaca|$1 kaca}} nang daftar pangawasané Rika, ningèn kaca dhiskusiné ora mélu diétung.',
 'wlshowlast' => 'Tidokna $1 jam $2 dina $3 pungkasan',
 'watchlist-options' => 'Opsi daftar pangawasan',
 
@@ -1793,6 +1794,9 @@ Sing liyane bakal diumpetna sacara ''default''.
 # Core parser functions
 'duplicate-defaultsort' => "'''Pènget:''' Kunci baku sing nggo ngurutna (''Default sort key'') yakuwe \"\$2\" wis nggantèkna kunci baku sing nggo ngurutna sedurungé \"\$1\".",
 
+# Special:FilePath
+'filepath-submit' => 'Golèti',
+
 # Special:SpecialPages
 'specialpages' => 'Kaca-kaca khusus',
 
index 2006c56..6332ba5 100644 (file)
@@ -1786,9 +1786,9 @@ $1",
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.jpg]]</nowiki></code>''' за верзија на сликата во целосна големина
 * '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Податотека.png|200px|thumb|left|опис]]</nowiki></code>''' за верзија на сликата со големина од 200 пиксели прикажана во соодветна кутија, со опис како што е наведено во '''опис'''
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Податотека.ogg]]</nowiki></code>''' за директно поврзување со податотеката без нејзино прикажување",
-'upload-permitted' => 'Ð\94озволени Ñ\82ипови Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки: $1.',
-'upload-preferred' => 'Ð\9fÑ\80еÑ\84еÑ\80иÑ\80ани Ñ\82ипови Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки: $1.',
-'upload-prohibited' => 'Ð\97абÑ\80анеÑ\82и Ñ\82ипови Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки: $1.',
+'upload-permitted' => 'Ð\94опÑ\83Ñ\88Ñ\82ени Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еÑ\87ни Ñ\82ипови: $1.',
+'upload-preferred' => 'Ð\9fÑ\80еÑ\82поÑ\87иÑ\82ани Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еÑ\87ни Ñ\82ипови: $1.',
+'upload-prohibited' => 'Ð\9dедопÑ\83Ñ\88Ñ\82ени Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еÑ\87ни Ñ\82ипови: $1.',
 'uploadlog' => 'дневник на подигања',
 'uploadlogpage' => 'Дневник на подигања',
 'uploadlogpagetext' => 'Наведен е список на најновите подигања на податотеки.
@@ -1810,8 +1810,8 @@ $1",
 'filetype-mime-mismatch' => 'Податотечната наставка „.$1“ не одговара на утврдениот MIME-тип на податотеката ($2).',
 'filetype-badmime' => 'Податотеките од MIME-тип „$1“ не се дозволени за подигање.',
 'filetype-bad-ie-mime' => 'Не може да се подигне оваа податотека бидејќи Internet Explorer би можел да го препознае како „$1“, што е оневозможен и потенцијално опасен тип на податотека.',
-'filetype-unwanted-type' => "'''„.$1“''' е непосакуван тип на податотека.
-{{PLURAL:$3|Ð\9fÑ\80еÑ\82поÑ\87иÑ\82ан Ñ\82ип Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ðµ|Ð\9fÑ\80еÑ\82поÑ\87иÑ\82ани Ñ\82ипови Ð½Ð° Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82еки Ñ\81е}} $2.",
+'filetype-unwanted-type' => "'''„.$1“''' е непосакуван податотечен тип.
+{{PLURAL:$3|Се Ð¿Ñ\80еÑ\82поÑ\87иÑ\82а Ñ\82ипоÑ\82|Се Ð¿Ñ\80еÑ\82поÑ\87иÑ\82ааÑ\82 Ñ\82иповиÑ\82е}} $2.",
 'filetype-banned-type' => "'''„.$1“''' не е допуштен тип на податотека.
 {{PLURAL:$3|Допуштен тип е|Допуштени типови се}} $2.",
 'filetype-missing' => 'Податотеката нема наставка (на пр. „.jpg“).',
@@ -2005,7 +2005,6 @@ $1',
 'http-read-error' => 'Грешка при читањето на HTTP.',
 'http-timed-out' => 'HTTP-барањето истече.',
 'http-curl-error' => 'Грешка при добивањето на URL: $1',
-'http-host-unreachable' => 'Не можев да пристапам до URL-адресата',
 'http-bad-status' => 'Се појави проблем во текот на обработката на HTTP-барањето: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2489,7 +2488,7 @@ $UNWATCHURL
 'historywarning' => "'''Предупредување:''' Страницата што сакате да ја избришете има историја со околу $1 {{PLURAL:$1|ревизија|ревизии}}:",
 'confirmdeletetext' => 'На пат сте трајно да избришете страница заедно со нејзината историја.
 Потврдете дека имате намера да го направите ова, дека ги разбирате последиците од тоа, дека го правите ова во согласност со [[{{MediaWiki:Policy-url}}|политиката]].',
-'actioncomplete' => 'Дејството е спроведено',
+'actioncomplete' => 'Дејството е извршено',
 'actionfailed' => 'Неуспешно дејство',
 'deletedtext' => '„$1“ е избришана. Евиденција на скорешните бришења ќе најдете на $2.',
 'dellogpage' => 'Дневник на бришења',
@@ -2911,7 +2910,7 @@ $1',
 'movepagebtn' => 'Премести страница',
 'pagemovedsub' => 'Успешно преместување',
 'movepage-moved' => "'''„$1“ е преместена под името „$2“'''",
-'movepage-moved-redirect' => 'Ð\91еÑ\88е Ð½Ð°Ð¿Ñ\80авено пренасочување.',
+'movepage-moved-redirect' => 'Ð\9dапÑ\80авено Ðµ пренасочување.',
 'movepage-moved-noredirect' => 'Создавањето на пренасочување е оневозможено.',
 'articleexists' => 'Веќе постои страница со тоа име, или името што го одбравте е неважечко.
 Изберете друго име.',
@@ -2939,8 +2938,8 @@ $1',
 Дали сакате да ја избришете за да ослободите место за преместувањето?',
 'delete_and_move_confirm' => 'Да, избриши ја страницата',
 'delete_and_move_reason' => 'Избришано за да се ослободи место за преместувањето од „[[$1]]“',
-'selfmove' => 'СÑ\82Ñ\80аниÑ\86аÑ\82а Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ñ\86елниоÑ\82 Ð½Ð°Ñ\81лов Ñ\81е Ñ\81овпаÑ\93а Ñ\81о Ð¿Ñ\80вобиÑ\82ниоÑ\82 Ð½Ð°Ñ\81лов;
-не Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¿Ñ\80емеÑ\81Ñ\82и Ñ\81Ñ\82Ñ\80аниÑ\86а Ð²Ð¾ Ñ\81амаÑ\82а Ñ\81ебе.',
+'selfmove' => 'Ð\9fоÑ\98довнаÑ\82а Ð¸ Ñ\86елнаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81е Ð¸Ñ\81Ñ\82овеÑ\82ни;
+не Ð¼Ð¾Ð¶Ð°Ð¼ Ð´Ð° Ð¿Ñ\80емеÑ\81Ñ\82ам.',
 'immobile-source-namespace' => 'Не може да се преместуваат страници во именскиот простор „$1“',
 'immobile-target-namespace' => 'Не може да се преместуваат страници во именскиот простор „$1“',
 'immobile-target-namespace-iw' => 'Меѓувики-врска не може да се користи за преименување на страници.',
@@ -3156,13 +3155,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* Тука поставениот CSS ќе се применува врз сите рува */',
-'standard.css' => '/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Стандардно“ */',
-'nostalgia.css' => '/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Носталгија“ */',
 'cologneblue.css' => '/* Тука поставениот CSS ќе се применува врз корисниците што го избрале рувото „Келнско сино“ */',
 'monobook.css' => '/* Тука поставениот CSS ќе се применува врз корисниците на рувото „Монобук“ */',
-'myskin.css' => '/* Тука поставениот CSS се однесува на корисниците на рувото „Мое руво“ */',
-'chick.css' => '/* Тука поставениот CSS се однесува на корисниците на рувото „Шик“ */',
-'simple.css' => '/* Тука поставениот CSS се однесува на корисниците на рувото „Просто“ */',
 'modern.css' => '/* Тука поставениот CSS се однесува на корисниците на рувото „Современо“ */',
 'vector.css' => '/* Тука поставениот CSS се однесува на корисниците на рувото „Векторско“ */',
 'print.css' => '/* Тука поставениот CSS ќе се применува во верзијата за печатење */',
@@ -3175,13 +3169,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Тука поставениот JavaScript ќе им се вчитува на сите корисници при отворањето на секоја страница. */',
-'standard.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат стандардното руво */',
-'nostalgia.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Носталгија“ */',
 'cologneblue.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Келнско сино“ */',
 'monobook.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Монобук“ */',
-'myskin.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што користат „Мое руво“ */',
-'chick.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Шик“ */',
-'simple.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Просто“ */',
 'modern.js' => '/* Било која Јава скрипта поставена овде ќе биде вчитана за сите корисници што го користат рувото Современо */',
 'vector.js' => '/* Тука поставениот JavaScript  ќе им се вчитува на корисниците што го користат рувото „Векторско“ */',
 'group-autoconfirmed.js' => '/* Тука поставениот JavaScript  ќе им се вчитува само на автопотврдените корисници */',
@@ -3262,13 +3251,8 @@ $1',
 'pageinfo-category-files' => 'Број на податотеки',
 
 # Skin names
-'skinname-standard' => 'Класично',
-'skinname-nostalgia' => 'Носталгија',
 'skinname-cologneblue' => 'Келнско сино',
 'skinname-monobook' => 'Монобук',
-'skinname-myskin' => 'Мое руво',
-'skinname-chick' => 'Шик',
-'skinname-simple' => 'Просто',
 'skinname-modern' => 'Современо',
 'skinname-vector' => 'Векторско',
 
index 5fa63c1..3286020 100644 (file)
@@ -1922,7 +1922,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'http-read-error' => 'എച്ച്.റ്റി.റ്റി.പി. വിവരം പ്രദർശിപ്പിക്കുന്നതിൽ പിഴവ്.',
 'http-timed-out' => 'എച്ച്.റ്റി.റ്റി.പി. അഭ്യർത്ഥന സമയം കഴിഞ്ഞു.',
 'http-curl-error' => 'യു.ആർ.എൽ. ശേഖരിക്കുന്നതിൽ പിഴവ്: $1',
-'http-host-unreachable' => 'യു.ആർ.എൽ.-ല്‍ എത്തിപ്പെടാന്‍ സാധിച്ചില്ല',
 'http-bad-status' => 'എച്ച്.റ്റി.റ്റി.പി. അഭ്യർത്ഥനാ വേളയിൽ ഒരു പിഴവുണ്ടായി: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3047,11 +3046,7 @@ $1',
 
 # Stylesheets
 'common.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എല്ലാ ദൃശ്യരൂപങ്ങൾക്കും ബാധകമായിരിക്കും */',
-'standard.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. സാർവത്രികം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
-'nostalgia.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ഗൃഹാതുരത്വം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'monobook.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. മോണോബുക്ക് ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
-'myskin.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. എന്റിഷ്ടം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
-'chick.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. സുന്ദരി ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'modern.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. നവീനം ദൃശ്യരൂപം ഉപയോഗിക്കുന്നവർക്ക് ബാധകമായിരിക്കും */',
 'vector.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. വെക്റ്റർ ദൃശ്യരൂപത്തിനു ബാധകമായിരിക്കും*/',
 'noscript.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്., ജാവാസ്ക്രിപ്റ്റ് സജ്ജമാക്കിയിട്ടില്ലാത്ത ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */',
@@ -3142,13 +3137,8 @@ $1',
 'pageinfo-category-files' => 'പ്രമാണങ്ങളുടെ എണ്ണം',
 
 # Skin names
-'skinname-standard' => 'സാർവത്രികം',
-'skinname-nostalgia' => 'ഗൃഹാതുരത്വം',
 'skinname-cologneblue' => 'ക്ലോൺ നീല',
 'skinname-monobook' => 'മോണോബുക്ക്',
-'skinname-myskin' => 'എന്റിഷ്ടം',
-'skinname-chick' => 'സുന്ദരി',
-'skinname-simple' => 'ലളിതം',
 'skinname-modern' => 'നവീനം',
 'skinname-vector' => 'വെക്റ്റർ',
 
index 6b5f3b8..9507703 100644 (file)
@@ -1847,7 +1847,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization कृपया हे
 'http-read-error' => 'एचटीटीपी वाचन त्रुटी.',
 'http-timed-out' => 'विनंती वेळ सपला आहे',
 'http-curl-error' => 'आंतरजालपत्ता पकडताना चूक: $1',
-'http-host-unreachable' => 'आंतरजाल पत्त्यापाशी पोहोचले नाही',
 'http-bad-status' => 'एचटीटीपी मागणीदरम्यान एक चूक उद्भवली: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2987,13 +2986,8 @@ $1',
 'pageinfo-category-files' => 'संचिकांची संख्या',
 
 # Skin names
-'skinname-standard' => 'अभिजात',
-'skinname-nostalgia' => 'रम्य',
 'skinname-cologneblue' => 'सुरेखनीळी',
 'skinname-monobook' => 'मोनोबुक',
-'skinname-myskin' => 'माझीकांती',
-'skinname-chick' => 'मस्त',
-'skinname-simple' => 'साधी',
 'skinname-modern' => 'आधुनिक',
 'skinname-vector' => 'सदिश',
 
index db5517c..3092f51 100644 (file)
@@ -1801,7 +1801,6 @@ Untuk keselamatan optimum, img_auth.php telah dilumpuhkan.',
 'http-read-error' => 'Ralat baca HTTP.',
 'http-timed-out' => 'Permintaan HTTP melebihi waktu tamat.',
 'http-curl-error' => 'Ralat mendapatkan URL: $1',
-'http-host-unreachable' => 'URL tidak dapat dicapai.',
 'http-bad-status' => 'Berlaku masalah ketika permintaan HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2932,13 +2931,8 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 
 # Stylesheets
 'common.css' => '/* CSS yang terletak di sini akan digunakan pada semua kulit */',
-'standard.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Klasik */',
-'nostalgia.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Nostalgia */',
 'cologneblue.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Cologne Blue */',
 'monobook.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Monobook */',
-'myskin.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit MySkin */',
-'chick.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Chick */',
-'simple.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Ringkas */',
 'modern.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Moden */',
 'vector.css' => '/* CSS yang terletak di sini akan mempengaruhi pengguna kulit Vector */',
 
@@ -3013,13 +3007,8 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-category-files' => 'Bilangan fail',
 
 # Skin names
-'skinname-standard' => 'Klasik',
-'skinname-nostalgia' => 'Nostalgia',
 'skinname-cologneblue' => 'Cologne Blue',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MySkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Ringkas',
 'skinname-modern' => 'Moden',
 'skinname-vector' => 'Vector',
 
index 05f5854..3546379 100644 (file)
@@ -460,6 +460,8 @@ $messages = array(
 'page-rss-feed' => '«$1» RSS максовкс',
 'page-atom-feed' => '«$1» Atom максовкс',
 'red-link-title' => '$1 (истямо лопа арась)',
+'sort-descending' => 'Аравтомс лувс Я-А',
+'sort-ascending' => 'Аравтомс лувс А-Я',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Лопа',
@@ -546,7 +548,7 @@ $messages = array(
 'gotaccount' => "Совамотаркат ули? '''$1'''.",
 'gotaccountlink' => 'Совамс',
 'userlogin-resetlink' => 'Совамо эрявикстнэнь стувтыть?',
-'createaccountmail' => 'е-Ñ\81Ñ\91Ñ\80маÑ\81о',
+'createaccountmail' => 'ТейÑ\82Ñ\8c ÐºÐ¾Ð´Ð°Ð¼Ð¾ Ð¿Ð¾Ð½Ð³Ñ\81Ñ\8c Ñ\81алаванÑ\8c Ð²Ð°Ð», ÐºÑ\83Ñ\87ик Ñ\81онзÑ\8d Ð°Ð»Ð¾ Ð¼Ð°ÐºÑ\81озÑ\8c Ðµ-Ñ\81Ñ\91Ñ\80мапаÑ\80гонÑ\82енÑ\8c',
 'createaccountreason' => 'Тувталось:',
 'badretype' => 'Сёрмадыть салава валот кавксть: сынь аволь вейкеть.',
 'userexists' => 'Те лемесь уш саезь.
@@ -593,7 +595,7 @@ $messages = array(
 'accountcreatedtext' => '$1-нь совицянь таркась теевсь-шкавсь.',
 'loginlanguagelabel' => 'Кель: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'Терявтыть кучомс е-сёрма е-сёрмапарговтомо.',
 
 # Change password dialog
@@ -698,6 +700,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 Мусак [[Special:Search/{{PAGENAME}}|вешнемс  файлань те коняксонть]] лия сёрмадовкстнэстэ эли
 <span class="plainlinks">
 [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} вешнемс малавикс журналтнэстэ]</span>. Ялатеке тонеть а мерить шкамс те лопанть.',
+'userpage-userdoesnotexist-view' => 'Совамотарка  "$1" апак сёрмадсто.',
 'updated' => '(Одолгавтозь)',
 'note' => "'''Явт мель:'''",
 'previewnote' => "'''Кирдтяя мельсэ, те ансяк васнянь невтевкс.'''
@@ -774,6 +777,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'history-feed-title' => 'Лиякстомтомань тевде',
 'history-feed-description' => 'Викинь тевате лопанть лиякстомтомань тевдензэ',
 'history-feed-item-nocomment' => '$1 $2-зэ',
+'history-feed-empty' => 'Лопа, кона вешнить, арась. Кизды нардавсь wikiстэ эли одов лемдявсь. Варчак [[Special:Search|wiki-ва вешнема]] эрявикс од лопанть муемга.',
 
 # Revision deletion
 'rev-deleted-comment' => '(витнемадо-петнемадо арсемась-мелесь нардазь)',
@@ -881,8 +885,8 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'search-nonefound' => 'Те вешнема лангс мезеяк эзь муеве.',
 'powersearch' => 'Седеяк вешнемс',
 'powersearch-legend' => 'Седе келейстэ вешнема',
-'powersearch-ns' => 'Вешнемс не лем потмотнестэ:',
-'powersearch-redir' => 'Лия таркав йутавтоматнень сёрмалема',
+'powersearch-ns' => 'Вешнемс не лемпотмотнестэ:',
+'powersearch-redir' => 'Лия таркав ютавтоматнень сёрмалема',
 'powersearch-field' => 'Вешнемс',
 'powersearch-toggleall' => 'Весе',
 'powersearch-togglenone' => 'Арась мезе невтемс',
@@ -897,24 +901,26 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'qbsettings-floatingright' => 'Вить ёнга уи',
 
 # Preferences page
-'preferences' => 'Ð\9bиÑ\8f Ñ\8eÑ\82кÑ\81Ñ\82о Ñ\8fвома',
+'preferences' => 'Ð\90Ñ\80авÑ\82омаÑ\82',
 'mypreferences' => 'Аравтомат',
 'prefs-edits' => 'Зяроксть витнезь-петнезь:',
 'prefsnologin' => 'Эзить сова',
+'prefsnologintext' => 'Эряви <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} совамс]</span> аравтоматнень ладсемга.',
 'changepassword' => 'Салавань валонь полавтома',
 'prefs-skin' => 'Неемань ладсема',
 'skin-preview' => 'Васнянь неевтезэ',
 'datedefault' => 'Икелькс вешема арась',
 'prefs-beta' => 'Бета ёнкст-мезть',
-'prefs-datetime' => 'Чи ды шка',
+'prefs-datetime' => 'Чить-шкат',
+'prefs-labs' => 'Варчамонь ёнкст-тевть',
 'prefs-user-pages' => 'Теицянть лопанзо',
 'prefs-personal' => 'Теицядо',
-'prefs-rc' => 'Чиень полавтнемат',
+'prefs-rc' => 'Чиень полавтнемат-лиякстомтомат',
 'prefs-watchlist' => 'Ванома лемрисьме',
 'prefs-watchlist-days-max' => 'Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}',
 'prefs-watchlist-edits-max' => 'Весемеде покш цётось: 1000',
 'prefs-misc' => 'Минеть-сюнот',
-'prefs-resetpass' => 'Салава валонь полавтома',
+'prefs-resetpass' => 'Салавань валонь полавтома',
 'prefs-changeemail' => 'Полавтомс е-сёрмапаргот',
 'prefs-setemail' => 'Путомс е-сёрмапарго',
 'prefs-email' => 'Е-сёрмат-мезть',
@@ -924,13 +930,18 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'restoreprefs' => 'Велявтомс мекев весе ушодкс ладсематнень',
 'prefs-editing' => 'Витнема-петнема',
 'prefs-edit-boxsize' => 'Витнема-петнема вальманть сэрензэ-келензэ.',
-'rows' => 'Вал чилькстнэ (строкатне):',
+'rows' => 'Валчилькстнэ (строкатне):',
 'columns' => 'Палманть:',
-'searchresultshead' => 'Вешнэма',
+'searchresultshead' => 'Вешнема',
 'resultsperpage' => 'Зяроксть вастневи ве лопасо:',
-'recentchangesdays-max' => '(максимумось $1 {{PLURAL:$1|чи|чить}})',
+'recentchangesdays' => 'Зяро чить невтемс чиень полавтнематнесэ-лиякстомтоматнесэ:',
+'recentchangesdays-max' => 'Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}',
+'recentchangescount' => 'Васень аравтоматнень коряс зяро витнемат-петнемат невтемс:',
+'prefs-help-recentchangescount' => 'Тезэнь совавтозь чиень полавтнемат-лиякстомтомат, лопань лувт-путовкст, журналт.',
 'timezonelegend' => 'Шкань зонась:',
 'localtime' => 'Теицянь шкась:',
+'timezoneuseserverdefault' => 'Нолдамс тевс викинь ($1) аравтнематнень',
+'timezoneoffset' => 'Офсет¹:',
 'servertime' => 'Серверэнь шкась:',
 'guesstimezone' => 'Пештемс интернет икельксстэть',
 'timezoneregion-africa' => 'Африка',
@@ -969,7 +980,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'prefs-dateformat' => 'Ков чинь форматозо',
 'prefs-diffs' => 'Мейсэ явовить верзиятне',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Е-сёрмапаргот маряви маштови',
 
 # User rights
@@ -1402,12 +1413,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'listusers-noresult' => 'Совицязо а муеви',
 'listusers-blocked' => '(саймас саезь)',
 
-# Special:ActiveUsers
-'activeusers' => 'Активной теицятнеде списка',
-'activeusers-hidebots' => 'Кекшемс ботатнень',
-'activeusers-hidesysops' => 'Кекшемс администратортнэнь',
-'activeusers-noresult' => 'Якинзэ-пакинзэ арасть',
-
 # Special:ListGroupRights
 'listgrouprights' => 'Теиця куронть видечинзэ',
 'listgrouprights-group' => 'Куро',
@@ -1416,7 +1421,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'listgrouprights-addgroup-all' => 'Поладомс весе куротнень',
 'listgrouprights-removegroup-all' => 'Весе куротнень нардамс',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Кучомс сёрма парго арась',
 'emailuser' => 'Кучомс е-сёрма те теицянтень',
 'emailpage' => 'Кучт э-сёрма теицянтень',
@@ -1845,10 +1850,6 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'pageinfo-authors' => 'Весемезэ зяро авторонзо',
 
 # Skin names
-'skinname-standard' => 'Классикань',
-'skinname-nostalgia' => 'ОдПингеньМазы',
-'skinname-myskin' => 'ЭсьМелемКоряс',
-'skinname-simple' => 'Шожда',
 'skinname-modern' => 'НееньШкань',
 
 # Patrolling
@@ -2105,7 +2106,7 @@ IP-тешкстэть — $3, саймас совавтоманть ID-сь —
 'monthsall' => 'весе',
 'limitall' => 'весе',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Кемекстамс е-почтань сёрмапаргот',
 'confirmemail_send' => 'Кучомс е-сёрмасо кемекстамонь код',
 'confirmemail_loggedin' => 'Е-сёрма паргот апак кемекста.',
index b0ae88e..d7cd514 100644 (file)
@@ -671,9 +671,9 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'default' => 'ic default',
 'prefs-files' => 'Tlahcuilōlli',
 'youremail' => 'Maltzinteyōtl netitlanizyeyāntli:',
-'username' => 'Tlatequitiltilīltōcāitl:',
-'uid' => 'Tlatequitiltilīlli ID:',
-'prefs-memberingroups' => 'Tlācatl {{PLURAL:$1|olōlco|olōlco}}:',
+'username' => '{{GENDER:$1|Tlatequitiltilīltōcāitl}}:',
+'uid' => '{{GENDER:$1|Tlatequitiltilīlli}} ID:',
+'prefs-memberingroups' => '{{GENDER:$2|Tlacotōncayōtl}} in {{PLURAL:$1|tēolōlolli|tēolōloltin}}',
 'yourrealname' => 'Melāhuac motōcā:',
 'yourlanguage' => 'Tlâtòlli:',
 'yournick' => 'Motōcātlaliz:',
@@ -1030,32 +1030,31 @@ Nò mà mỏta in tlèn [[Special:WantedCategories|ìpan kineki tlaìxmatkàtlà
 
 'enotif_impersonal_salutation' => 'tlatequitiltilīlli īpan {{SITENAME}}',
 'enotif_anon_editor' => 'ahtōcātlatequitiltilīlli $1',
-'enotif_body' => 'Māhuizzoh $WATCHINGUSERNAME,
+'enotif_body' => 'Māhuiztic $WATCHINGUSERNAME,
 
-In {{SITENAME}} āmatl "$PAGETITLE" $CHANGEDORCREATED in tlatequitiltilīlli $PAGEEDITOR īpan $PAGEEDITDATE.
-In āxcān tlachiyaliztli onca īpan $PAGETITLE_URL
+$PAGEINTRO $NEWPAGE
 
-$NEWPAGE
+Tlapatlani ītlahtōlpehuallo:  $PAGESUMMARY $PAGEMINOREDIT
 
-In tlapatlaliztli īxtlamatiliztli cah: $PAGESUMMARY $PAGEMINOREDIT
 Xicnotzāz in tlapatlani:
-Correo electrónico: {{canonicalurl:Special:Emailuser|target=$PAGEEDITOR}}
-Huiqui: {{canonicalurl:User:$PAGEEDITOR}}
+īnetitlanizyeyān:$PAGEEDITOR_EMAIL
+īhuiqui:$PAGEEDITOR_WIKI
 
-Ahmo onyez occē tēmachitīliztli ītech occē tlapatlaliztli, zan mā tiquihitta inīn āmoxtli yancuīcān.
-Nō tihuelīti quitlahtlālīz, in tēmachitīliztli in mochi tlachixqui mozāzanilhuīc in motlachiyaliz āmatl.
+Ahmo occēppa mitztlamachiztīz intlā yancuīc tlapatlaliztli, zā mā tiquittaz inīn āmatl. Tihueliti ticcencahulīz in tēmachiztīlizpāmitl in mochintin motlachixāmatl in motlachiyaliz.
 
-       In {{SITENAME}} tēmachitīliztli sistema.
+In {{SITENAME}} icnīuhtīliztica motēmachiztīliztlacentetilīz.
 
---
-Ic ticpatlaz in tlachiyaliztli motlapōhualāma, xiquihitta:
+Intlā ticnequi ticpatlaz in maltzinteyōtl monetitlanizyeyān, xiquihitta:
+{{canonicalurl:{{#special:Preferences}}}}
+
+
+Intlā ticnequi ticpatlaz in motlachiyaliz tlaēlēhuiliztli, xiquihitta:
 {{canonicalurl:{{#special:EditWatchlist}}}}
 
-Ic ticpolōz in āmatl in tlachiyaliztli motlapōhualāma, xiquihitta:
+Intlā ticnequi ticpolōz in āmatl ītech motlachiyaliz, xiquihitta:
 $UNWATCHURL
 
-Tētlamachītīliztli īhuān oc yeh tēpalehuiliztli:
+Motlahtōlcaquiliztīlōni īhuān ocachi tēpalēhuiliztli, xiquihitta:
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 'created' => 'ōmochīuh',
 'changed' => 'ōmotlacuep',
@@ -1090,8 +1089,8 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'protect_expiry_invalid' => 'Ahcualli tlamiliztli cāhuitl.',
 'protect-default' => 'Ticmācāhuaz mochintin in tlatequitiltilīltin',
 'protect-fallback' => 'Zan momācāhuazqueh tlatequitiltilīltin in tēmācāhualiztica «$1»',
-'protect-level-autoconfirmed' => 'Tiquinquīxtīz yancuīc tlatequitiltilīltin īhuan in ahmo ōmocalacqueh',
-'protect-level-sysop' => 'Zan tētlamahmacanih',
+'protect-level-autoconfirmed' => 'Zan momācāhuaz moneltilīlli tlatequitiltilīltin',
+'protect-level-sysop' => 'Zan momācāhuaz tētlamahmacanimeh',
 'protect-expiring' => 'motlamīz $1 (UTC)',
 'protect-expiry-options' => '1 hora:1 hour,1 tōnalli:1 day,1 chicuēyilhuitl:1 week,2 chicuēyilhuitl:2 weeks,1 mētztli:1 month,3 mētztli:3 months,6 mētztli:6 months,1 xihuitl:1 year,mochipa:infinite',
 'restriction-type' => 'Mācāhualiztli:',
@@ -1121,7 +1120,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'blanknamespace' => '(Tāchcāuh)',
 
 # Contributions
-'contributions' => 'Ītlahcuilōl',
+'contributions' => 'In {{GENDER:$1|tlatequitiltilīlli}} ītlahcuilōl',
 'contributions-title' => 'Tlatequitiltilīlli $1 ītlahcuilōl',
 'mycontris' => 'Notlahcuilōl',
 'contribsub2' => '$1 ($2)',
index 7257f69..1007899 100644 (file)
@@ -1937,7 +1937,6 @@ For best mulig sikkerhet er img_auth.php slått av.',
 'http-read-error' => 'HTTP-lesefeil.',
 'http-timed-out' => 'Tidsavbrudd på HTTP-forespørsel.',
 'http-curl-error' => 'Feil under henting av adresse: $1',
-'http-host-unreachable' => 'Kunne ikke nå adressen.',
 'http-bad-status' => 'Det var et problem under HTTP-forespørselen: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2093,6 +2092,9 @@ En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[
 
 'pageswithprop' => 'Sider med sideverdi',
 'pageswithprop-legend' => 'Sider med en sideverdi',
+'pageswithprop-text' => 'Denne siden lister opp sider som bruker en viss sideverdi.',
+'pageswithprop-prop' => 'Verdinavn:',
+'pageswithprop-submit' => 'Gå',
 
 'doubleredirects' => 'Doble omdirigeringer',
 'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
@@ -2733,6 +2735,7 @@ Skjulingsloggen vises nedenfor.',
 'proxyblocksuccess' => 'Utført.',
 'sorbsreason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}.',
 'sorbs_create_account_reason' => 'Din IP-adresse angis som en åpen proxy i DNSBL-en brukt av {{SITENAME}}. Du kan ikke opprette en konto',
+'xffblockreason' => 'En IP-adresse som er tilstede i X-Forwarded-For-headeren, enten din eller en som tilhører en proxyserver du bruker, har blitt blokkert. Den opprinnelige blokkeringsgrunnen var: $1',
 'cant-block-while-blocked' => 'Du kan ikke blokkere andre mens du selv er blokkert.',
 'cant-see-hidden-user' => 'Brukeren du prøver å blokkere har allerede blitt blokkert og skjult. Ettersom du ikke har rett til å skjule brukere (hideuser), kan du ikke se eller endre brukerens blokkering.',
 'ipbblocked' => 'Du kan ikke blokkere eller avblokkere andre brukere, siden du selv er blokkert',
@@ -3046,24 +3049,14 @@ Du kan se på kildeteksten',
 
 # Stylesheets
 'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utseender. */',
-'standard.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Standard */',
-'nostalgia.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Nostalgia */',
 'cologneblue.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Kølnerblå */',
 'monobook.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Monobook */',
-'myskin.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta MySkin */',
-'chick.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Chick */',
-'simple.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Simple */',
 'modern.css' => '/* CSS i denne fila vil gjelde alle som bruker drakta Modern */',
 
 # Scripts
 'common.js' => '/* Javascript i denne fila vil gjelde for alle drakter. */',
-'standard.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Standard */',
-'nostalgia.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Nostalgia */',
 'cologneblue.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Kølnerblå */',
 'monobook.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Monobook */',
-'myskin.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta MySkin */',
-'chick.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Chick */',
-'simple.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Simple */',
 'modern.js' => '/* Javascript i denne fila vil gjelde for brukere av drakta Modern */',
 
 # Metadata
@@ -3108,6 +3101,7 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-robot-noindex' => 'Ikke indekserbar',
 'pageinfo-views' => 'Antall visninger',
 'pageinfo-watchers' => 'Antall overvåkere av siden',
+'pageinfo-few-watchers' => 'Færre enn $1 {{PLURAL:$1|overvåker|overvåkere}}',
 'pageinfo-redirects-name' => 'Omdirigeringer til siden',
 'pageinfo-subpages-name' => 'Undersider av siden',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringer}}; $3 {{PLURAL:$3|ikke-omdirigering|ikke-omdirigeringer}})',
@@ -3137,12 +3131,8 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-category-files' => 'Antall filer',
 
 # Skin names
-'skinname-standard' => 'Standard',
-'skinname-nostalgia' => 'Nostalgi',
 'skinname-cologneblue' => 'Kølnerblå',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Eget utseende',
-'skinname-simple' => 'Enkel',
 'skinname-modern' => 'Moderne',
 
 # Patrolling
@@ -4077,4 +4067,7 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
+# Image rotation
+'rotate-comment' => 'Bildet snudd $1{{PLURAL:°}} med klokka',
+
 );
index d7a5a18..94ea535 100644 (file)
@@ -2518,10 +2518,7 @@ All Transwiki-Import-Akschonen staht later ok in dat [[Special:Log/import|Import
 'pageinfo-category-subcats' => 'TAll vun Ünnerkategorien',
 
 # Skin names
-'skinname-standard' => 'Klassik',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Kölsch Blau',
-'skinname-chick' => 'Küken',
 
 # Patrolling
 'markaspatrolleddiff' => 'As nakeken marken',
index d7d7d13..bc3f602 100644 (file)
@@ -2028,7 +2028,6 @@ Om beveiligingsreden is img_auth.php uitgeschakeld.',
 'http-read-error' => 'Fout bij het lezen van HTTP.',
 'http-timed-out' => 'Timeout bij het HTTP-verzoek.',
 'http-curl-error' => 'Fout bij het ophalen van URL: $1',
-'http-host-unreachable' => 'De URL is niet bereikbaar.',
 'http-bad-status' => 'Er is een probleem opgetreden bij het HTTP-verzoek: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2862,7 +2861,7 @@ Neem contact op met uw internetprovider of uw helpdesk en stel die op de hoogte
 'sorbsreason' => 'Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.',
 'sorbs_create_account_reason' => 'Uw IP-adres staat bekend als open proxyserver in de DNS-blacklist die {{SITENAME}} gebruikt.
 U kunt geen gebruiker registreren.',
-'xffblockreason' => 'Een IP-adres aanwezig in de X-Forwarded-For header, jou of die van een proxyserver die u gebruikt, heeft geblokkeerd. De oorspronkelijke blok reden was:$1',
+'xffblockreason' => 'Een IP-adres dat u gebruikt is geblokkeerd. Dit staat de X-Forwarded-For van de header. De oorspronkelijke blokkadereden is: $1',
 'cant-block-while-blocked' => 'U kunt andere gebruikers niet blokkeren terwijl u zelf geblokkeerd bent.',
 'cant-see-hidden-user' => 'De gebruiker die u probeert te blokken is al geblokkeerd en verborgen.
 Omdat u het recht "hideuser" niet hebt, kunt u de blokkade van de gebruiker niet bekijken of bewerken.',
@@ -3181,13 +3180,8 @@ U kunt wel de broncode bekijken.',
 
 # Stylesheets
 'common.css' => '/** CSS die hier wordt geplaatst heeft invloed op alle skins */',
-'standard.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Standard */',
-'nostalgia.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Nostalgie */',
 'cologneblue.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Keuls blauw */',
 'monobook.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Monobook */',
-'myskin.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin MijnSkin */',
-'chick.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Chick */',
-'simple.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Eenvoudig */',
 'modern.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Modern */',
 'vector.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de skin Vector */',
 'print.css' => '/* CSS die hier wordt geplaatst heeft alleen invloed op de printuitvoer */',
@@ -3200,13 +3194,8 @@ U kunt wel de broncode bekijken.',
 
 # Scripts
 'common.js' => "/* JavaScript die hier wordt geplaatst heeft invloed op alle pagina's voor alle gebruikers */",
-'standard.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Standaard gebruiken */',
-'nostalgia.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Nostalgie gebruiken */',
 'cologneblue.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Keuls blauw gebruiken */',
 'monobook.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Monobook gebruiken */',
-'myskin.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin MijnSkin gebruiken */',
-'chick.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Chick gebruiken */',
-'simple.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Eenvoudig gebruiken */',
 'modern.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Modern gebruiken */',
 'vector.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op gebruikers die de skin Vector gebruiken */',
 'group-autoconfirmed.js' => '/* JavaScript die hier wordt geplaatst heeft alleen invloed op automatisch bevestigde gebruikers */',
@@ -3286,13 +3275,8 @@ Meestal wordt dit door een externe koppeling op een zwarte lijst veroorzaakt.',
 'pageinfo-category-files' => 'Aantal bestanden',
 
 # Skin names
-'skinname-standard' => 'Klassiek',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Keuls blauw',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'MijnSkin',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Eenvoudig',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vector',
 
index 268b5da..0c410fe 100644 (file)
@@ -1891,7 +1891,6 @@ For best tryggleik, er img_auth.php sett ut av funksjon.',
 'http-read-error' => 'HTTP-lesefeil.',
 'http-timed-out' => 'Tidsavbrot på HTTP-førespurnad.',
 'http-curl-error' => 'Feil under henting av nettadressa: $1',
-'http-host-unreachable' => 'Kunne ikkje nå nettadressa',
 'http-bad-status' => 'Det var eit problem under HTTP-førespurnaden: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2980,26 +2979,16 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 
 # Stylesheets
 'common.css' => '/* CSS plassert i denne fila vil gjelde for alle utsjånader. */',
-'standard.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Standard */',
-'nostalgia.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Nostalgia */',
 'cologneblue.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Kølnerblå */',
 'monobook.css' => '/* CSS-tekst som vert plassert her, endrar utsjånaden til sidedrakta Monobook */',
-'myskin.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta MySkin */',
-'chick.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Chick */',
-'simple.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Simple */',
 'modern.css' => '/* CSS i denne fila vil gjelde alle som nyttar drakta Modern */',
 'print.css' => '/* CSS i denne fila vil påverke utskriftsversjonen */',
 'handheld.css' => '/* CSS i denne fila vil gjelde alle handheldte innretnigar konfigurert i $wgHandheldStyle */',
 
 # Scripts
 'common.js' => '/* Javascript i denne fila vil gjelde for alle drakter. */',
-'standard.js' => '/* Javascript i denne fila vil gjelde for brukarar av drakta Standard */',
-'nostalgia.js' => '/* Javascript i denne fila vil gjelde for brukarar av drakta Nostalgia */',
 'cologneblue.js' => '/* Javascript i denne fila vil gjelde for brukarar av drakta Kølnerblå */',
 'monobook.js' => '/* Javascript i denne fila vil gjelde for brukarar av drakta Monobook */',
-'myskin.js' => '* Javascript i denne fila vil gjelde for brukarar av drakta MySkin */',
-'chick.js' => '* Javascript i denne fila vil gjelde for brukarar av drakta Chick */',
-'simple.js' => '* Javascript i denne fila vil gjelde for brukarar av drakta Simple */',
 'modern.js' => '* Javascript i denne fila vil gjelde for brukarar av drakta Modern */',
 
 # Metadata
@@ -3073,13 +3062,8 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-category-files' => 'Tal filer',
 
 # Skin names
-'skinname-standard' => 'Klassisk',
-'skinname-nostalgia' => 'Nostalgi',
 'skinname-cologneblue' => 'Kölnerblå',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'MiDrakt',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Enkel',
 'skinname-modern' => 'Moderne',
 
 # Patrolling
index 932c13a..069d949 100644 (file)
@@ -710,7 +710,7 @@ $2
 ਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਨਵਾਂ ਪਾਸਵਰਡ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਕਿਸੇ ਹੋਰ ਨੇ ਇਹ ਬੇਨਤੀ ਕੀਤੀ ਸੀ ਜਾਂ ਜੇ ਤੁਹਾਨੂੰ ਆਪਣਾ ਪਾਸਵਰਡ ਯਾਦ ਹੈ ਅਤੇ ਤੁਸੀਂ ਇਸਨੂੰ ਬਦਲਣਾ ਨਹੀਂ ਚਾਹੁੰਦੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਸੁਨੇਹੇ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਕੇ ਆਪਣਾ ਪੁਰਾਣਾ ਪਾਸਵਰਡ ਵਰਤਣਾ ਜਾਰੀ ਰੱਖ ਸਕਦੇ ਹੋ।',
 'passwordreset-emailelement' => 'ਮੈਂਬਰ-ਨਾਂ: $1
 ਆਰਜ਼ੀ ਪਾਸਵਰਡ: $2',
-'passwordreset-emailsent' => 'à¨\87ੱà¨\95 à¨¯à¨¾à¨¦-ਦਹਾਨà©\80 ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।',
+'passwordreset-emailsent' => 'à¨\87ੱà¨\95 à¨ªà¨¾à¨¸à¨µà¨°à¨¡ à¨®à©\81à©\9c-ਸà©\88ੱà¨\9f ਈ-ਮੇਲ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।',
 'passwordreset-emailsent-capture' => 'ਇੱਕ ਯਾਦ-ਦਹਾਨੀ ਈ-ਮੇਲ, ਜਿਹੜੀ ਕਿ ਹੇਠਾਂ ਦਿੱਸ ਰਹੀ ਹੈ, ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।',
 
 # Special:ChangeEmail
@@ -721,6 +721,7 @@ $2
 'changeemail-oldemail' => 'ਚਾਲੂ ਈ-ਮੇਲ ਪਤਾ:',
 'changeemail-newemail' => 'ਨਵਾਂ ਈ-ਮੇਲ ਪਤਾ:',
 'changeemail-none' => '(ਕੋਈ ਨਹੀਂ)',
+'changeemail-password' => 'ਤੁਹਾਡਾ {{SITENAME}} ਪਾਸਵਰਡ:',
 'changeemail-submit' => 'ਈ-ਮੇਲ ਬਦਲੋ',
 'changeemail-cancel' => 'ਰੱਦ ਕਰੋ',
 
@@ -1141,12 +1142,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-emailconfirm-label' => 'ਈ-ਮੇਲ ਤਸਦੀਕ:',
 'prefs-textboxsize' => 'ਸੋਧ ਖਿੜਕੀ ਦਾ ਅਕਾਰ',
 'youremail' => 'ਈ-ਮੇਲ:',
-'username' => 'ਵਰਤੋਂਕਾਰਨਾਮ:',
-'uid' => 'ਵਰਤੋਂਕਾਰ ID:',
+'username' => '{{GENDER:$1|ਯੂਜ਼ਰਨਾਂ}}:',
+'uid' => '{{GENDER:$1|User}} ਆਈਡੀ:',
 'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
 'prefs-registration' => 'ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਵਕਤ:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
 'yourlanguage' => 'ਭਾਸ਼ਾ:',
+'yourvariant' => 'ਸਮੱਗਰੀ ਭਾਸ਼ਾ ਰੂਪ:',
 'yournick' => 'ਛੋਟਾ ਨਾਂ:',
 'prefs-help-signature' => 'ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ ਉੱਤੇ ਟਿੱਪਣੀਆਂ ਦੇ ਆਖ਼ਰ ਵਿਚ "<nowiki>~~~~</nowiki>" ਲਾਓ ਜੋ ਤੁਹਾਡੇ ਦਸਤਖ਼ਤ ਅਤੇ ਵਕਤ ਦੀ ਮੋਹਰ ਵਿਚ ਤਬਦੀਲ ਹੋ ਜਾਵੇਗਾ।',
 'badsiglength' => 'ਦਸਤਖ਼ਤ ਬਹੁਤ ਲੰਬਾ ਹੋ ਗਿਆ ਹੈ। ਇਹ {{PLURAL:$1|ਅੱਖਰ|ਅੱਖਰਾਂ}} ਤੋਂ ਲੰਬਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ।',
@@ -1161,6 +1163,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 ਜਦੋਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਤੁਹਾਨੂੰ ਈ-ਮੇਲ ਭੇਜਦੇ ਹਨ ਤਾਂ ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਜ਼ਾਹਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।',
 'prefs-help-email-required' => 'ਈ-ਮੇਲ ਪਤਾ ਚਾਹੀਦਾ ਹੈ।',
 'prefs-info' => 'ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ',
+'prefs-i18n' => 'ਅੰਤਰਰਾਸ਼ਟਰੀਕਰਨ',
 'prefs-signature' => 'ਦਸਤਖ਼ਤ',
 'prefs-dateformat' => 'ਤਾਰੀਖ਼ ਅੰਦਾਜ਼',
 'prefs-advancedediting' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
@@ -1168,6 +1171,9 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'prefs-advancedrendering' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
 'prefs-advancedsearchoptions' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
 'prefs-advancedwatchlist' => 'ਤਕਨੀਕੀ ਚੋਣਾਂ',
+'prefs-displayrc' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
+'prefs-displaysearchoptions' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
+'prefs-displaywatchlist' => 'ਵੇਖਾਉਣ ਚੋਣਾਂ',
 'prefs-diffs' => 'ਫ਼ਰਕ',
 
 # User preference: email validation using jQuery
@@ -1179,7 +1185,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'userrights-lookup-user' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਦੇਖਭਾਲ',
 'userrights-user-editname' => 'ਇੱਕ ਯੂਜ਼ਰ ਨਾਂ ਦਿਓ:',
 'editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
-'editinguser' => '<b>$1</b> ਵਰਤੋਂਕਾਰ ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ ([[User talk:$1|{{int:talkpagelinktext}}]] | [[Special:Contributions/$1|{{int:contribslink}}]])',
+'editinguser' => "'''[[User:$1|$1]]''' $2 ਯੂਜ਼ਰ ਦੇ ਯੂਜ਼ਰ ਹੱਕ ਬਦਲੇ ਜਾ ਰਹੇ ਹਨ",
 'userrights-editusergroup' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੋਧ',
 'saveusergroups' => 'ਯੂਜ਼ਰ ਗਰੁੱਪ ਸੰਭਾਲੋ',
 'userrights-groupsmember' => 'ਇਸ ਦਾ ਮੈਂਬਰ:',
@@ -1193,6 +1199,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'group-user' => 'ਮੈਂਬਰ',
 'group-autoconfirmed' => 'ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ',
 'group-bot' => 'ਬੋਟ',
+'group-sysop' => 'ਪਰਸ਼ਾਸ਼ਕ',
 'group-all' => '(ਸਭ)',
 
 'group-user-member' => '{{GENDER:$1|ਮੈਂਬਰ}}',
@@ -1210,6 +1217,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'right-move' => 'ਸਫ਼ੇ ਭੇਜਣਾ',
 'right-movefile' => 'ਫ਼ਾਈਲਾਂ ਦੇ ਨਾਂ ਬਦਲਣਾ',
 'right-upload' => 'ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨਾ',
+'right-upload_by_url' => 'URL ਤੋਂ ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ',
 'right-autoconfirmed' => 'ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ',
 'right-delete' => 'ਸਫ਼ੇ ਹਟਾਓ',
 'right-bigdelete' => 'ਵੱਡੇ ਅਤੀਤਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਮਿਟਾਉਣੇ',
@@ -1334,15 +1342,22 @@ to upload files.',
 'overwroteimage' => '"[[$1]]" ਦਾ ਨਵਾਂ ਰੂਪ ਅੱਪਲੋਡ ਕਰੋ',
 'uploaddisabled' => 'ਅੱਪਲੋਡ ਆਯੋਗ ਹੈ',
 'uploadvirus' => 'ਇਹ ਫਾਇਲ ਵਿੱਚ ਵਾਇਰਸ ਹੈ! ਵੇਰਵੇ ਲਈ ਵੇਖੋ: $1',
+'upload-source' => 'ਸਰੋਤ ਫਾਇਲ',
 'sourcefilename' => 'ਸੋਰਸ ਫਾਇਲ ਨਾਂ:',
+'sourceurl' => 'ਸਰੋਤ URL:',
+'destfilename' => 'ਟਿਕਾਣਾ ਫਾਇਲ-ਨਾਂ:',
 'upload-maxfilesize' => 'ਫ਼ਾਈਲ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਅਕਾਰ: $1',
 'upload-description' => 'ਫ਼ਾਈਲ ਦਾ ਵੇਰਵਾ',
+'upload-options' => 'ਅੱਪਲੋਡ ਚੋਣਾਂ',
 'watchthisupload' => 'ਇਸ ਫ਼ਾਈਲ ’ਤੇ ਨਜ਼ਰ ਰੱਖੋ',
 'upload-success-subj' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ',
+'upload-failure-subj' => 'ਅੱਪਲੋਡ ਸਮੱਸਿਆ',
 'upload-warning-subj' => 'ਅੱਪਲੋਡ ਚੇਤਾਵਨੀ',
 
+'upload-proto-error' => 'ਗਲਤ ਪਰੋਟੋਕਾਲ',
 'upload-file-error' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ',
 'upload-misc-error' => 'ਅਣਜਾਣ ਅੱਪਲੋਡ ਗਲਤੀ',
+'upload-unknown-size' => 'ਅਣਜਾਣ ਆਕਾਰ',
 
 # File backend
 'backend-fail-notexists' => 'ਫ਼ਾਈਲ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
@@ -1478,6 +1493,8 @@ to upload files.',
 
 'disambiguationspage' => 'Template:ਗੁੰਝਲ ਖੋਲ੍ਹ',
 
+'pageswithprop-submit' => 'ਜਾਉ',
+
 'doubleredirects' => 'ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ',
 
 'brokenredirectstext' => 'ਇਹ ਰਿਡਿਰੈਕਟ ਨਾ-ਮੌਜੂਦ ਸਫ਼ਿਆਂ ’ਤੇ ਜੋੜਦੇ ਹਨ:',
@@ -1586,15 +1603,6 @@ to upload files.',
 'listusers-noresult' => 'ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਲੱਭਿਆ।',
 'listusers-blocked' => '(ਪਾਬੰਦੀਸ਼ੁਦਾ)',
 
-# Special:ActiveUsers
-'activeusers' => 'ਚੁਸਤ ਮੈਂਬਰਾਂ ਦੀ ਲਿਸਟ',
-'activeusers-intro' => 'ਇਹ ਓਹਨਾਂ ਮੈਂਬਰਾਂ ਦੀ ਲਿਸਟ ਹੈ ਜਿੰਨ੍ਹਾਂ ਨੇ ਆਖ਼ਰੀ $1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਵਿਚ ਕਿਸੇ ਤਰ੍ਹਾਂ ਦਾ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।',
-'activeusers-count' => 'ਆਖ਼ਰੀ {{PLURAL:$3|ਦਿਨ|$3 ਦਿਨਾਂ}} ਵਿਚ $1 {{PLURAL:$1|ਸੋਧ|ਸੋਧਾਂ}}',
-'activeusers-from' => 'ਇਸਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੇ ਮੈਂਬਰ ਵਖਾਓ:',
-'activeusers-hidebots' => 'ਬੋਟਾਂ ਨੂੰ ਲੁਕਾਓ',
-'activeusers-hidesysops' => 'ਐਡਮਨਿਸਟ੍ਰੇਟਰ ਲੁਕਾਓ',
-'activeusers-noresult' => 'ਕੋਈ ਮੈਂਬਰ ਨਹੀਂ ਲੱਭਿਆ।',
-
 # Special:ListGroupRights
 'listgrouprights-group' => 'ਗਰੁੱਪ',
 'listgrouprights-rights' => 'ਹੱਕ',
@@ -1632,7 +1640,7 @@ to upload files.',
 'emailuserfooter' => 'ਇਹ ਈ-ਮੇਲ $1 ਨੇ {{SITENAME}} ’ਤੇ "ਇਸ ਮੈਂਬਰ ਨੂੰ ਈ-ਮੇਲ ਭੇਜੋ" ਸਹੂਲਤ ਜ਼ਰੀਏ $2 ਨੂੰ ਭੇਜੀ ਸੀ।',
 
 # Watchlist
-'watchlist' => 'ਮà©\87ਰà©\80 à¨§à¨¿à¨\86ਨਸੂਚੀ',
+'watchlist' => 'ਨਿà¨\97ਰਾਨ-ਸੂਚੀ',
 'mywatchlist' => 'ਧਿਆਨਸੂਚੀ',
 'watchlistfor2' => '$1 $2 ਲਈ',
 'nowatchlist' => 'ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਕੋਈ ਚੀਜ਼ ਨਹੀਂ ਹੈ।',
@@ -1648,6 +1656,7 @@ to upload files.',
 'watchthispage' => 'ਇਹ ਪੇਜ ਵਾਚ ਕਰੋ',
 'unwatch' => 'ਧਿਆਨ ਹਟਾਓ',
 'unwatchthispage' => 'ਨਜ਼ਰ ਰੱਖਣੀ ਬੰਦ ਕਰੋ',
+'notanarticle' => 'ਕੋਈ ਸਮੱਗਰੀ ਸਫ਼ਾ ਨਹੀਂ ਹੈ',
 'notvisiblerev' => 'ਇੱਕ ਵੱਖਰੇ ਮੈਂਬਰ ਦੀ ਬਣਾਈ ਆਖ਼ਰੀ ਰੀਵਿਜ਼ਨ ਮਿਟਾਈ ਜਾ ਚੁੱਕੀ ਹੈ',
 'watchnochange' => 'ਵਖਾਏ ਜਾ ਰਹੇ ਸਮੇਂ ਅੰਦਰ ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚਲਾ ਕੋਈ ਵੀ ਸਫ਼ਾ ਸੋਧਿਆ ਨਹੀਂ ਗਿਆ।',
 'watchlist-details' => 'ਚਰਚਾ ਪੰਨੇ ਨਾ ਗਿਣਦੇ ਹੋਏ, ਤੁਹਾਡੀ ਧਿਆਨਸੂਚੀ ਵਿੱਚ{{PLURAL:$1|$1 ਪੰਨਾ ਹੈ|$1 ਪੰਨੇ ਹਨ}}।',
@@ -1721,7 +1730,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'protect-default' => 'ਸਭ ਯੂਜ਼ਰ ਮਨਜ਼ੂਰ',
 'protect-fallback' => '"$1" ਅਧਿਕਾਰ ਲੋੜੀਦਾ ਹੈ',
 'protect-level-autoconfirmed' => 'ਨਵੇਂ ਤੇ ਗੈਰ-ਰਜਿਸਟਰ ਵਰਤੋਂਕਾਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ',
-'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà©\8dਰਬੰਧà¨\95',
+'protect-level-sysop' => 'à¨\95à©\87ਵਲ à¨ªà¨°à¨¸à¨¼à¨¾à¨¸à¨¼à¨\95 à¨¹à©\80 à¨®à¨¨à¨\9c਼à©\82ਰ',
 'protect-summary-cascade' => 'ਕਾਸਕੇਡਿੰਗ',
 'protect-cascade' => 'ਇਸ ਸਫ਼ੇ ਵਿਚ ਸ਼ਾਮਲ ਸਫ਼ੇ ਸੁਰੱਖਿਅਤ ਕਰੋ (ਕਾਸਕੇਡਿੰਗ ਸੁਰੱਖਿਆ)',
 'protect-cantedit' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸੁਰੱਖਿਆ ਦਰਜਾ ਨਹੀਂ ਬਦਲ ਸਕਦੇ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਇਸਨੂੰ ਸੋਧਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
@@ -1733,6 +1742,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'protect-edit-reasonlist' => 'ਸੁਰੱਖਿਆ ਦੇ ਕਾਰਨ ਸੋਧੋ',
 'protect-expiry-options' => '੧ ਘੰਟਾ:1 hour,੧ ਦਿਨ:1 day,੧ ਹਫ਼ਤਾ:1 week,੨ ਹਫ਼ਤੇ:2 weeks,੧ ਮਹੀਨਾ:1 month,੩ ਮਹੀਨੇ:3 months,੬ ਮਹੀਨੇ:6 months,੧ ਸਾਲ:1 year,ਬੇਹੱਦ:infinite',
 'restriction-type' => 'ਅਧਿਕਾਰ:',
+'restriction-level' => 'ਪਾਬੰਦੀ ਪੱਧਰ:',
 'minimum-size' => 'ਘੱਟੋ-ਘੱਟ ਆਕਾਰ',
 'maximum-size' => 'ਵੱਧੋ-ਵੱਧ ਆਕਾਰ',
 'pagesize' => '(ਬਾਈਟ)',
@@ -1758,7 +1768,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'undeletelink' => 'ਵੇਖੋ/ਮੁੜ ਬਹਾਲ ਕਰੋ',
 'undeleteviewlink' => 'ਵੇਖੋ',
 'undeletereset' => 'ਰੀ-ਸੈੱਟ',
-'undeletecomment' => 'à¨\9fਿੱਪਣà©\80:',
+'undeletecomment' => 'à¨\95ਾਰਨ:',
 'undelete-header' => 'ਤਾਜ਼ੇ ਹਟਾਏ ਗਏ ਪੰਨਿਆਂ ਲਈ [[Special:Log/
 delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'undelete-search-title' => 'ਮਿਟਾਏ ਹੋਏ ਸਫ਼ੇ ਖੋਜੋ',
@@ -2029,11 +2039,7 @@ delete|ਹਟਾਉਣ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'pageinfo-edits' => 'ਕੁੱਲ ਸੋਧਾਂ',
 
 # Skin names
-'skinname-standard' => 'ਕਲਾਸਿਕ',
 'skinname-monobook' => 'ਮੋਨੋਬੁੱਕ',
-'skinname-myskin' => 'ਮੇਰੀਸਕਿਨ',
-'skinname-chick' => 'ਚੀਚਕ',
-'skinname-simple' => 'ਸੈਂਪਲ',
 
 # Browsing diffs
 'previousdiff' => '← ਇਸ ਤੋਂ ਪੁਰਾਣਾ ਬਦਲਾਵ',
index ef518b2..831b4b5 100644 (file)
@@ -517,7 +517,7 @@ $messages = array(
 'otherlanguages' => 'W innych językach',
 'redirectedfrom' => '(Przekierowano z $1)',
 'redirectpagesub' => 'Strona przekierowująca',
-'lastmodifiedat' => 'Tę stronę ostatnio zmodyfikowano $2, $1.',
+'lastmodifiedat' => 'Tę stronę ostatnio zmodyfikowano $2, $1.',
 'viewcount' => 'Tę stronę obejrzano {{PLURAL:$1|tylko raz|$1 razy}}.',
 'protectedpage' => 'Strona zabezpieczona',
 'jumpto' => 'Skocz do:',
@@ -1936,7 +1936,6 @@ Ponieważ ta wiki została skonfigurowana jako publiczna dla zapewnienia optymal
 'http-read-error' => 'Błąd odczytu HTTP.',
 'http-timed-out' => 'Przekroczony czas żądania HTTP.',
 'http-curl-error' => 'Błąd pobierania z adresu $1',
-'http-host-unreachable' => 'Adres jest nieosiągalny.',
 'http-bad-status' => 'Wystąpił problem z realizacją żądania HTTP $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2458,8 +2457,8 @@ Naciśnij „wstecz” w przeglądarce, przeładuj stronę, po czym ponownie wyd
 'protectlogpage' => 'Zabezpieczone',
 'protectlogtext' => 'Poniżej znajduje się lista zmian w zabezpieczeniu pojedynczych stron.
 Wszystkie aktywne zabezpieczenia odnajdziesz na liście [[Special:ProtectedPages|zabezpieczonych stron]].',
-'protectedarticle' => '{{GENDER:$2|zabezpieczył|zabezpieczyła}} [[$1]]',
-'modifiedarticleprotection' => '{{GENDER:$2|zmienił|zmieniła}} poziom zabezpieczenia [[$1]]',
+'protectedarticle' => 'zabezpieczono "[[$1]]"',
+'modifiedarticleprotection' => 'zmieniono poziom zabezpieczenia "[[$1]]"',
 'unprotectedarticle' => 'odbezpieczył [[$1]]',
 'movedarticleprotection' => 'przeniósł ustawienia zabezpieczeń z [[$2]] do [[$1]]',
 'protect-title' => 'Zmiana poziomu zabezpieczenia „$1”',
@@ -2724,7 +2723,7 @@ Przyczyna blokady $1 to: „$2”',
 'blocklogtext' => 'Poniżej znajduje się lista blokad założonych i zdjętych z poszczególnych adresów IP.
 Na liście nie znajdą się adresy IP, które zablokowano w sposób automatyczny.
 By przejrzeć listę obecnie aktywnych blokad, przejdź na stronę [[Special:BlockList|zablokowanych adresów i użytkowników]].',
-'unblocklogentry' => '{{GENDER:$2|zdjął|zdjęła}} blokadę $1',
+'unblocklogentry' => 'zdjęto blokadę z $1',
 'block-log-flags-anononly' => 'tylko anonimowi',
 'block-log-flags-nocreate' => 'blokada tworzenia konta',
 'block-log-flags-noautoblock' => 'automatyczne blokowanie wyłączone',
@@ -2754,6 +2753,7 @@ O tym poważnym problemie dotyczącym bezpieczeństwa należy poinformować dost
 'sorbsreason' => 'Twój adres IP znajduje się na liście serwerów open proxy w DNSBL, używanej przez {{GRAMMAR:B.lp|{{SITENAME}}}}.',
 'sorbs_create_account_reason' => 'Twój adres IP znajduje się na liście serwerów open proxy w DNSBL, używanej przez {{GRAMMAR:B.lp|{{SITENAME}}}}.
 Nie możesz utworzyć konta',
+'xffblockreason' => 'Adres IP obecny w nagłówku X-Forwarded-For – twój lub serwera proxy, z którego korzystasz – został zablokowany. Powód blokady to: $1',
 'cant-block-while-blocked' => 'Nie możesz zablokować innych użytkowników, kiedy sam jesteś zablokowany.',
 'cant-see-hidden-user' => 'Konto użytkownika, które próbujesz zablokować, zostało już zablokowane oraz ukryte. Bez uprawnienia do ukrywania kont nie możesz zobaczyć oraz modyfikować blokady tego użytkownika.',
 'ipbblocked' => 'Nie możesz blokować i odblokowywać innych użytkowników, ponieważ sam jesteś zablokowany',
@@ -3067,13 +3067,8 @@ Pozwala na wpisanie powodu w opisie zmian.',
 
 # Stylesheets
 'common.css' => '/* Umieszczony tutaj kod CSS zostanie zastosowany we wszystkich skórkach */',
-'standard.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Standardowa */',
-'nostalgia.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Tęsknota */',
 'cologneblue.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Błękit */',
 'monobook.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Książka */',
-'myskin.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Moja skórka */',
-'chick.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Kurczaczek */',
-'simple.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Prosta */',
 'modern.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Nowoczesna */',
 'vector.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd skórki Wektor */',
 'print.css' => '/* Umieszczony tutaj kod CSS wpłynie na wygląd wydruku */',
@@ -3086,13 +3081,8 @@ Pozwala na wpisanie powodu w opisie zmian.',
 
 # Scripts
 'common.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany przez każdego użytkownika, podczas każdego ładowania strony. */',
-'standard.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Standardowa */',
-'nostalgia.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Tęsknota */',
 'cologneblue.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Błękit */',
 'monobook.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Książka */',
-'myskin.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Moja skórka */',
-'chick.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Kurczaczek */',
-'simple.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Prosta */',
 'modern.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Nowoczesna */',
 'vector.js' => '/* Umieszczony tutaj kod JavaScript zostanie załadowany wyłącznie przez użytkowników korzystających ze skórki Wektor */',
 
@@ -3168,13 +3158,8 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-category-files' => 'Liczba plików',
 
 # Skin names
-'skinname-standard' => 'Standardowa',
-'skinname-nostalgia' => 'Tęsknota',
 'skinname-cologneblue' => 'Błękit',
 'skinname-monobook' => 'Książka',
-'skinname-myskin' => 'Moja skórka',
-'skinname-chick' => 'Kurczaczek',
-'skinname-simple' => 'Prosta',
 'skinname-modern' => 'Nowoczesna',
 'skinname-vector' => 'Wektor',
 
@@ -4045,7 +4030,7 @@ Grafiki są pokazywane w pełnej rozdzielczości. Inne typy plików są otwieran
 'logentry-delete-revision' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4',
 'logentry-delete-event-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność zdarzeń w rejestrze strony $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|zmienił|zmieniła}} widoczność wersji strony $3',
-'logentry-suppress-delete' => '$1 ukrywa stronę $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|ukrył|ukryła}} stronę $3',
 'logentry-suppress-event' => '$1 potajemnie zmienia widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w $3, wykonano następujące operacje: $4',
 'logentry-suppress-revision' => '$1 potajemnie zmienia widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4',
 'logentry-suppress-event-legacy' => '$1 potajemnie zmienia widoczność zdarzenia w rejestrze $3',
index 7d32438..a44381d 100644 (file)
@@ -48,17 +48,17 @@ $messages = array(
 'tog-hidepatrolled' => "Stërmé le modìfiche dzorvejà ant j'ùltime modìfiche",
 'tog-newpageshidepatrolled' => 'Stërmé le pàgine dzorvejà da la lista dle pàgine neuve',
 'tog-extendwatchlist' => "Slarghé la lista ëd ròba che as ten sot-euj an manera che a la smon-a tute le modìfiche, nen mach j'ùltime",
-'tog-usenewrc' => "Deuvra j'ùltime modìfiche ameliorà (a-i và JavaScript)",
+'tog-usenewrc' => "Argropré le modìfiche për pàgina ant j'ùltime modìfiche e ant la lista dla ròba ch'as ten sot-euj (a-i và JavaScript)",
 'tog-numberheadings' => 'Tìtoj ëd paràgraf<br />che as nùmero daspërlor',
-'tog-showtoolbar' => "Mostra la bara dj'utiss (a-i va Javascript)",
-'tog-editondblclick' => "Dobia sgnacà për modifiché l'artìcol<br />(a-i va JavaScript)",
-'tog-editsection' => "Abìlita la modìfica dle session con j'anliure [modìfica]",
-'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima<br />  al tìtol col tast drit dël rat (a-i va Javascript)',
-'tog-showtoc' => "Buta le tàole dij contnù<br />(për j'artìcoj che l'han pì che 3 session)",
-'tog-rememberpassword' => "Visesse ëd mia ciav ansima a 's navigador (për al pi $1 {{PLURAL:$1|di|di}})",
-'tog-watchcreations' => "Gionta le pàgine che i creo mi e j'archivi che i cario mi a la lista ëd lòn che im ten-o sot euj",
-'tog-watchdefault' => "Gionta le pàgine che i modìfico mi a la lista dle ròbe ch'i ten-o sot-euj",
-'tog-watchmoves' => "Gionta le pàgine e j'archivi che i tramudo a lòn che im ten-o sot euj",
+'tog-showtoolbar' => "Smon-e la bara dj'utiss ëd modìfica (a-i va Javascript)",
+'tog-editondblclick' => "Dobia sgnacà për modifiché l'artìcol (a-i va JavaScript)",
+'tog-editsection' => "Abilité le modìfiche ëd session con j'anliure [modifiché]",
+'tog-editsectiononrightclick' => 'Abilité la modìfica dle session ën sgnacand-je ansima al tìtol col tast drit dël rat (a-i va Javascript)',
+'tog-showtoc' => "Smon-e la tàula dij contnù (për le pàgine che l'han pì che 3 session)",
+'tog-rememberpassword' => "Visesse ëd mia ciav ansima a 's navigador (për al pi $1 {{PLURAL:$1|di}})",
+'tog-watchcreations' => "Gionté le pàgine che i creo mi e j'archivi che i cario mi a la lista ëd lòn che im ten-o sot-euj",
+'tog-watchdefault' => "Gionté le pàgine e j'archivi che i modìfico mi a la lista dle ròbe ch'i ten-o sot-euj",
+'tog-watchmoves' => "Gionté le pàgine e j'archivi che i tramudo a lòn che im ten-o sot-euj",
 'tog-watchdeletion' => "Gionta le pàgine e j'archivi che i scancelo via a la lista ëd lòn che im ten-o sot euj",
 'tog-minordefault' => 'Marca tute le modìfice coma cite<br />(mach coma predefinission dla casela)',
 'tog-previewontop' => 'Smon-e la preuva dzora al quàder ëd modìfica dël test e nen sota',
@@ -1664,7 +1664,6 @@ Për na sicurëssa otimal, img_auth.php a l'é disabilità.",
 'http-read-error' => 'Eror ëd letura HTTP.',
 'http-timed-out' => "L'arcesta HTTP a l'ha finì sò temp.",
 'http-curl-error' => "Eror an sërcand d'arcuperé l'adrëssa dl'aragnà: $1.",
-'http-host-unreachable' => "L'anliura a rispond pa.",
 'http-bad-status' => "A l'é staje un problema durant l'arcesta HTTP: $1 $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
index 490e4ce..71ea46b 100644 (file)
@@ -654,7 +654,7 @@ $1',
 'passwordreset-emailtitle' => 'د {{SITENAME}} د ګڼون څرګندنې',
 'passwordreset-emailelement' => 'کارن-نوم: $1
 لنډمهاله پټنوم: $2',
-'passwordreset-emailsent' => 'يو يادښتي برېښليک ولېږل شو.',
+'passwordreset-emailsent' => 'د پټنوم بيا پرځای کېدنې لپاره برېښليک درولېږل شو.',
 'passwordreset-emailsent-capture' => 'د يادونې لپاره يو برېښليک ولېږل شو، برېښليک په لاندې توګه ښودل شوی.',
 
 # Special:ChangeEmail
@@ -1578,15 +1578,6 @@ $1',
 'listusers-noresult' => 'هېڅ کوم کارن و نه موندل شو.',
 'listusers-blocked' => '(بنديز لګېدلی)',
 
-# Special:ActiveUsers
-'activeusers' => 'د فعالو کارنانو لړليک',
-'activeusers-intro' => 'دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.',
-'activeusers-count' => 'په {{PLURAL:$3|تېرې ورځ|تېرو $3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
-'activeusers-from' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
-'activeusers-hidebots' => 'روباټونه پټول',
-'activeusers-hidesysops' => 'پازوالان پټول',
-'activeusers-noresult' => 'کارن و نه موندل شو.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'د کارن ډلو رښتې',
 'listgrouprights-group' => 'ډله',
@@ -2165,13 +2156,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'pageinfo-protect-cascading-yes' => 'هو',
 
 # Skin names
-'skinname-standard' => 'کلاسيک',
-'skinname-nostalgia' => 'نوستالژي',
 'skinname-cologneblue' => 'شين کلون',
 'skinname-monobook' => 'مونوبوک',
-'skinname-myskin' => 'زمابڼه',
-'skinname-chick' => 'شيک',
-'skinname-simple' => 'ساده',
 'skinname-modern' => 'نوی',
 'skinname-vector' => 'وېکټور',
 
index d481aea..725d911 100644 (file)
@@ -1,5 +1,8 @@
 <?php
-/** Message documentation (Message documentation)
+/** Message documentation (This is the name of the message documentation language code (qqq). Follow the rules of your languages and use small first letter if it doesn't capitalize language names always.
+
+It might be easier to translate it as "translation guidelines" or "translation help".
+{{Identical|Message documentation}})
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -610,7 +613,8 @@ For explanation of 'lock' see [[w:Lock_(computer_science)|wikipedia]].",
 'pool-queuefull' => 'Part of {{msg-mw|view-pool-error}}
 
 "Pool" refers to a pool of processes.',
-'pool-errorunknown' => 'Part of {{msg-mw|view-pool-error}}.',
+'pool-errorunknown' => 'Part of {{msg-mw|view-pool-error}}.
+{{Identical|Unknown error}}',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Used as the label of the link that appears at the footer of every page on the wiki (in most of  the skins) and leads to the page that contains the site description. The link target is {{msg-mw|aboutpage}}.
@@ -2328,15 +2332,6 @@ In this sentence, "their indexes" refers to "Google\'s indexes".
 
 Shown on [[Special:Search]] when the internal search is disabled.',
 
-# Quickbar
-'qbsettings' => 'The title of the section in [[Special:Preferences]], only shown when using the skins "Standard/Classic" or "Cologne Blue". The quicbar is the same as the sidebar.',
-'qbsettings-none' => '{{Identical|None}}',
-'qbsettings-fixedleft' => 'Position of the quickbar (sidebar). Used in the preferences.',
-'qbsettings-fixedright' => 'Position of the quickbar (sidebar). Used in the preferences.',
-'qbsettings-floatingleft' => 'Position of the quickbar (sidebar). Used in the preferences.',
-'qbsettings-floatingright' => 'Position of the quickbar (sidebar). Used in the preferences.',
-'qbsettings-directionality' => '"Fixed", as in the position "fixed left or right". For left-to-right languages, the quickbar will be positioned at the left, for right-to-left languages at the right.',
-
 # Preferences page
 'preferences' => 'Title of the [[Special:Preferences]] page.
 {{Identical|Preferences}}',
@@ -3584,12 +3579,6 @@ See also:
 Known messages are:
 * {{msg-mw|http-host-unreachable}}
 * {{msg-mw|http-timed-out}}',
-'http-host-unreachable' => 'Used as error message when executing HTTP request.
-
-See also:
-* {{msg-mw|Http-request-error}}
-* {{msg-mw|Http-read-error}}
-* {{msg-mw|Http-timed-out|28}}',
 'http-bad-status' => 'Parameters:
 * $1 - an HTTP error code (e.g. 404)
 * $2 - the HTTP error message (e.g. File Not Found)',
@@ -3835,7 +3824,8 @@ See also:
 
 See also:
 * {{msg-mw|Mimesearch|page title}}
-* {{msg-mw|Ilsubmit|Submit button text}}',
+* {{msg-mw|Ilsubmit|Submit button text}}
+{{Identical|MIME type}}',
 'download' => 'Direct download link in each line returned by [[Special:MIMESearch]]. Points to the actual file, rather than the image description page.
 {{Identical|Download}}',
 
@@ -6585,14 +6575,9 @@ See also:
 # Stylesheets
 'common.css' => '{{optional}}
 CSS applied to all users.',
-'standard.css' => '{{optional}}',
-'nostalgia.css' => '{{optional}}',
 'cologneblue.css' => '{{optional}}',
 'monobook.css' => '{{optional}}
 CSS applied to users using Monobook skin.',
-'myskin.css' => '{{optional}}',
-'chick.css' => '{{optional}}',
-'simple.css' => '{{optional}}',
 'modern.css' => '{{optional}}',
 'vector.css' => '{{optional}}',
 'print.css' => '{{optional}}',
@@ -6607,14 +6592,9 @@ Style that can be applied on [[w:handheld devices|handheld devices]] (e.g. mobil
 # Scripts
 'common.js' => '{{optional}}
 JS for all users.',
-'standard.js' => '{{optional}}',
-'nostalgia.js' => '{{optional}}',
 'cologneblue.js' => '{{optional}}',
 'monobook.js' => '{{optional}}
 JS for users using Monobook skin.',
-'myskin.js' => '{{optional}}',
-'chick.js' => '{{optional}}',
-'simple.js' => '{{optional}}',
 'modern.js' => '{{optional}}',
 'vector.js' => '{{optional}}',
 'group-autoconfirmed.js' => '{{doc-group|autoconfirmed|js}}',
@@ -6800,14 +6780,8 @@ See also:
 * {{msg-mw|Pageinfo-category-subcats}}',
 
 # Skin names
-'skinname-standard' => '{{optional}}
-{{Identical|Classic}}',
-'skinname-nostalgia' => '{{optional}}',
 'skinname-cologneblue' => '{{optional}}',
 'skinname-monobook' => '{{optional}}',
-'skinname-myskin' => '{{optional}}',
-'skinname-chick' => '{{optional}}',
-'skinname-simple' => '{{optional}}',
 'skinname-modern' => '{{optional}}',
 'skinname-vector' => '{{optional}}',
 
@@ -7902,7 +7876,8 @@ See also:
 {{Related|Exif-gpsdop}}',
 'exif-gpsdop-moderate' => 'Parameters:
 * $1 - the actual HDOP/PDOP value (5-10 for moderate). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
-{{Related|Exif-gpsdop}}',
+{{Related|Exif-gpsdop}}
+{{Identical|Moderate}}',
 'exif-gpsdop-fair' => 'Parameters:
 * $1 - the actual HDOP/PDOP value (10-20 for fair). See http://en.wikipedia.org/wiki/Dilution_of_precision_(GPS)
 {{Related|Exif-gpsdop}}',
index 21bad44..bd4c75d 100644 (file)
@@ -1915,7 +1915,6 @@ Pentru securitate optimă, img_auth.php este dezactivat.',
 'http-read-error' => 'S-a produs o eroare în timpul citirii HTTP.',
 'http-timed-out' => 'Cererea HTTP a expirat.',
 'http-curl-error' => 'Eroare la preluarea adresei URL: $1',
-'http-host-unreachable' => 'Adresa URL nu a putut fi accesată.',
 'http-bad-status' => 'A apărut o problemă în timpul solicitării HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3060,13 +3059,8 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 
 # Stylesheets
 'common.css' => '/** CSS plasate aici vor fi aplicate tuturor aparițiilor */',
-'standard.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Standard */',
-'nostalgia.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Nostalgia  */',
 'cologneblue.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Cologne Blue */',
 'monobook.css' => '/* modificați acest fișier pentru a adapta înfățișarea monobook-ului pentru tot situl*/',
-'myskin.css' => '/* CSS plasate aici vor afecta utilizatorii stilului MySkin */',
-'chick.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Chick */',
-'simple.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Simple */',
 'modern.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Modern */',
 'vector.css' => '/* CSS plasate aici vor afecta utilizatorii stilului Vector */',
 'print.css' => '/* CSS plasate aici vor afecta modul în care paginile vor fi imprimate */',
@@ -3142,13 +3136,8 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-category-files' => 'Număr de fișiere',
 
 # Skin names
-'skinname-standard' => 'Clasic',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Albastru de Cologne',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'StilulMeu',
-'skinname-chick' => 'Șic',
-'skinname-simple' => 'Simplu',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vector',
 
index 8e90166..c7debb5 100644 (file)
@@ -1702,7 +1702,6 @@ Pe 'na securezze a uerre proprie, img_auth.php jè disabbilitate.",
 'http-read-error' => "Errore jndr'à letture de l' HTTP",
 'http-timed-out' => 'Richieste HTTP fore timbe.',
 'http-curl-error' => "Errore analizzanne l'URL: $1",
-'http-host-unreachable' => "Non ge riesche a raggiungere l'URL",
 'http-bad-status' => "Ha state 'nu probbleme duranne 'a richieste HTTP: $1, $2",
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2541,6 +2540,7 @@ Pe piacere condatte 'u provider de Indernette tue o 'u supporte tecniche e 'mbor
 'sorbsreason' => "L'indirizze IP tue jè elegate cumme a 'nu proxy apirte jndr'à DNSBL ausate da {{SITENAME}}.",
 'sorbs_create_account_reason' => "L'indirizze IP tue jè elegate cumme a 'nu proxy apirte jndr'à DNSBL ausate da {{SITENAME}}.
 Tu nonge puè ccrejà 'nu cunde utende",
+'xffblockreason' => "'N'indirizze IP presende jndr'à testate X-Forwarded-For, tutte e doje le tune o 'nu server proxy ca ste ause, onne state bloccate. 'U mutive d'u blocche origgenale ere: $1",
 'cant-block-while-blocked' => 'Tu non ge puè bloccà otre utinde quanne tu si blocchete.',
 'cant-see-hidden-user' => "L'utende ca tu ste pruève a bloccà ha state già bloccate e scunnute. Ce tu non ge tine le deritte ''hideuser'', tu non ge puè vedè o cangià 'u blocche de l'utende.",
 'ipbblocked' => 'Tu non ge puè bloccà o sbloccà otre utinde, purcé tu sì ppure bloccate',
@@ -2861,13 +2861,8 @@ Permette de aggiungere 'nu mutive jndr'à 'u riepileghe",
 
 # Stylesheets
 'common.css' => "/* 'U CSS ca se iacchie aqquà avène applicate a tutte le masckere */",
-'standard.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Standard */",
-'nostalgia.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Nostalgie */",
 'cologneblue.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Blu Cologne */",
 'monobook.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Monobook */",
-'myskin.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Personalizzate */",
-'chick.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Purecine */",
-'simple.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Semblice */",
 'modern.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Moderne */",
 'vector.css' => "/* 'U CSS ca se iacchie aqquà 'u 'ndrucane le utinde d'a masckere Vettore */",
 'print.css' => "/* 'U CSS ca se iacchie aqquà avène applicate a 'u resultate d'a stambe */",
@@ -2880,12 +2875,8 @@ Permette de aggiungere 'nu mutive jndr'à 'u riepileghe",
 
 # Scripts
 'common.js' => '/* Ogne JavaScript aqquà avène carecate pe tutte le utinde sus a ogne pàgene carecate. */',
-'standard.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Standard */",
-'nostalgia.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Nostalgie */",
 'cologneblue.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Blu Cologne */",
 'monobook.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere MonoBook */",
-'myskin.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Personalizzate */",
-'chick.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Purecine */",
 'modern.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Moderne */",
 'vector.js' => "/* Ogne JavaScript aqquà avène carecate pe le utinde ca ausane 'a masckere Vettore */",
 'group-autoconfirmed.js' => '/* Ogne JavaScript aqquà avène carecate pe le utinde autoconfirmatarie */',
@@ -2966,13 +2957,8 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-category-files' => 'Numere de file',
 
 # Skin names
-'skinname-standard' => 'Classeche',
-'skinname-nostalgia' => 'Nostalgie',
 'skinname-cologneblue' => 'Blu Cologne',
 'skinname-monobook' => 'MonoBook',
-'skinname-myskin' => 'Personalizzate',
-'skinname-chick' => 'Purecine',
-'skinname-simple' => 'Semblice',
 'skinname-modern' => 'Moderne',
 'skinname-vector' => 'Vettore',
 
index c389c14..95abcd6 100644 (file)
@@ -30,6 +30,7 @@
  * @author Daniyar
  * @author Dim Grits
  * @author Don Alessandro
+ * @author Ekulikovdo
  * @author Eleferen
  * @author Erdemaslancan
  * @author EugeneZelenko
@@ -2035,7 +2036,6 @@ $1',
 'http-read-error' => 'Ошибка чтения HTTP.',
 'http-timed-out' => 'Истекло время ожидания HTTP-запроса.',
 'http-curl-error' => 'Ошибка обращения к URL: $1',
-'http-host-unreachable' => 'Невозможно обратиться по указанному URL.',
 'http-bad-status' => 'Во время обработки HTTP-запроса обнаружена проблема: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2846,6 +2846,7 @@ $1',
 'proxyblocksuccess' => 'Выполнено.',
 'sorbsreason' => 'Ваш IP-адрес числится как открытый прокси в DNSBL.',
 'sorbs_create_account_reason' => 'Ваш IP-адрес числится как открытый прокси в DNSBL. Вы не можете создать учётную запись.',
+'xffblockreason' => 'Был заблокирован IP-адрес, присутствующий в заголовке X-Forwarded-For и принадлежащий либо вам, либо используемому вами прокси-серверу. Первоначальная причина блокировки была следующей: $1',
 'cant-block-while-blocked' => 'Вы не можете блокировать других участников, пока вы сами заблокированы.',
 'cant-see-hidden-user' => 'Участник, которого вы пытаетесь заблокировать, уже заблокирован и скрыт. Поскольку у вас нет разрешения на работу по сокрытию участников, вы не можете просмотреть или изменить данную блокировку.',
 'ipbblocked' => 'Вы не можете блокировать или разблокировать других участников, так как вы сами заблокированы',
@@ -3160,13 +3161,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* Размещённый здесь CSS будет применяться ко всем темам оформления */',
-'standard.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Standard */',
-'nostalgia.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Nostalgia */',
 'cologneblue.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Cologne Blue */',
 'monobook.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Monobook */',
-'myskin.css' => '/* Размещённый здесь CSS будет применяться к теме оформления MySkin */',
-'chick.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Chick */',
-'simple.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Simple */',
 'modern.css' => '/* Размещённый здесь CSS будет применяться к теме оформления Modern */',
 'vector.css' => '/* Размещённый здесь CSS будет применяться к векторной теме оформления  */',
 'print.css' => '/* Размещённый здесь CSS будет применяться к версии для печати */',
@@ -3179,13 +3175,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */',
-'standard.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Standard */',
-'nostalgia.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Nostalgia */',
 'cologneblue.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Cologne Blue */',
 'monobook.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MonoBook */',
-'myskin.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MySkin  */',
-'chick.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Chick */',
-'simple.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Simple */',
 'modern.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Modern */',
 'vector.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Vector */',
 'group-autoconfirmed.js' => '/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус автоподтверждённых (autoconfirmed) */',
@@ -3267,12 +3258,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-category-files' => 'Количество файлов',
 
 # Skin names
-'skinname-standard' => 'Классическое',
-'skinname-nostalgia' => 'Ностальгия',
 'skinname-cologneblue' => 'Кёльнская тоска',
-'skinname-myskin' => 'Своё',
-'skinname-chick' => 'Цыпа',
-'skinname-simple' => 'Простое',
 'skinname-modern' => 'Современное',
 'skinname-vector' => 'Векторное',
 
index 39d0b19..10337e8 100644 (file)
@@ -1856,7 +1856,6 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'http-read-error' => 'HTTP पठनदोषः।',
 'http-timed-out' => 'HTTP अभ्यर्थनं कालातीतम् ।',
 'http-curl-error' => 'दोषाहरणस्य URL: $1',
-'http-host-unreachable' => 'URL प्राप्तुं न शक्यते ।',
 'http-bad-status' => 'HTTP : $1 $2अभ्यर्थने समस्या आसीत् ।',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3041,12 +3040,8 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'pageinfo-category-files' => 'सञ्चिकानां सङ्ख्या',
 
 # Skin names
-'skinname-standard' => 'पूर्व',
-'skinname-nostalgia' => 'पुराण',
 'skinname-cologneblue' => 'नील',
 'skinname-monobook' => 'पुस्तक',
-'skinname-myskin' => 'मे चर्मन्',
-'skinname-chick' => 'Chick',
 
 # Patrolling
 'markaspatrolleddiff' => 'आरक्षितमिति अङ्कयतु ।',
index 1474df1..5ad7fd2 100644 (file)
@@ -1219,7 +1219,7 @@ $1",
 'search-interwiki-default' => '$1 වෙතින් ප්‍රතිඵල:',
 'search-interwiki-more' => '(තවත්)',
 'search-relatedarticle' => 'සහසම්බන්ධිත',
-'mwsuggest-disable' => 'AJAX ඇඟවිලි අක්‍රීය කරන්න',
+'mwsuggest-disable' => 'සෙවුම් යෝජනා අක්‍රීය කරන්න',
 'searcheverything-enable' => 'සියළු නාමඅවකාශයන්හි ගවේෂණය කරන්න',
 'searchrelated' => 'ආශ්‍රිත',
 'searchall' => 'සියල්ල',
@@ -1799,7 +1799,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization බලන්න.',
 'http-read-error' => 'HTTP කියැවුම් දෝෂය.',
 'http-timed-out' => 'HTTP අයැදුම සඳහා වූ කාලය ඉක්මව ඇත.',
 'http-curl-error' => 'අන්තර්ජාල ලිපිනය පමුණුවාගෙන ඒමේ දෝෂය : $1',
-'http-host-unreachable' => 'අන්තර්ජාල ලිපිනය වෙත සේන්දු විය නොහැකි විය',
 'http-bad-status' => 'HTTP ආයාචනයෙහිදී ගැටළුවක් පැන නැගුනි: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2110,15 +2109,6 @@ When filtered by user, only files where that user uploaded the most recent versi
 'listusers-noresult' => 'පරිශීලකයෙකු සොයාගත නොහැකි විය.',
 'listusers-blocked' => '(වාරණය කොට)',
 
-# Special:ActiveUsers
-'activeusers' => 'සක්‍රීය පරිශීලකයන් ලැයිස්තුව',
-'activeusers-intro' => 'මෙය පසුගිය $1 {{PLURAL:$1|දිනය|දින}}තුළ යම් ක්‍රියාකාරකමක් කළ පරිශීලකයන්ගේ ලැයිස්තුවකි.',
-'activeusers-count' => '{{PLURAL:$1|එක් සංස්කරණයක්|සංස්කරණ $1 ක්}} අවසන් {{PLURAL:$3|දිනය|දින $3}} තුළ',
-'activeusers-from' => 'මෙයින් ඇරඹෙන පරිශීලකයන් පෙන්වන්න:',
-'activeusers-hidebots' => ' bots සඟවන්න',
-'activeusers-hidesysops' => 'පරිපාලකයින් සඟවන්න',
-'activeusers-noresult' => 'කිසිදු පරිශීලකයෙකු හමුනොවිණි.',
-
 # Special:ListGroupRights
 'listgrouprights' => 'පරිශීලක කාණ්ඩ හිමිකම්',
 'listgrouprights-summary' => 'මෙම විකියේ අර්ථදක්වා ඇති පරිශීලක කාණ්ඩ ලැයිස්තුවක් ඔවුනට අදාළ ප්‍රවේශ හිමිකම්ද සමගින් මෙහි පහත ලැයිස්තුගත කොට ඇත.
@@ -2174,7 +2164,7 @@ When filtered by user, only files where that user uploaded the most recent versi
 'usermessage-editor' => 'පද්ධති පණිවුඩ කරු',
 
 # Watchlist
-'watchlist' => 'මà\9cà·\9a à¶¸à·\94ර-ලැයිස්තුව',
+'watchlist' => 'මà·\94රලැයිස්තුව',
 'mywatchlist' => 'මුර-ලැයිස්තුව',
 'watchlistfor2' => '$1 සඳහා ($2)',
 'nowatchlist' => 'ඔබගේ මුර-ලැයිස්තුවේ කිසිදු අයිතමයක් නොමැත.',
@@ -2915,26 +2905,16 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 
 # Stylesheets
 'common.css' => '/* මෙහි CSS  බහාලීම සියළු ඡවියයන් භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
-'standard.css' => '/* මෙහි CSS  බහාලීම සම්මත ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
-'nostalgia.css' => '/* මෙහි CSS  බහාලීම පිළිසැමරුම් ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
 'cologneblue.css' => '/* මෙහි CSS  බහාලීම "Cologne Blue" ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
 'monobook.css' => '/* මෙහි CSS  බහාලීම ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
-'myskin.css' => '/* මෙහි CSS  බහාලීම මගේ-ඡවිය ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
-'chick.css' => '/* මෙහි CSS  බහාලීම හැඩකාරී ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
-'simple.css' => '/* මෙහි CSS  බහාලීම සරල ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
 'modern.css' => '/* මෙහි CSS  බහාලීම නූතන ඡවිය භාවිතා කරන පරිශීලකයන් හට බලපෑම් සිදු කල හැක */',
 'print.css' => '/* මෙහි CSS  බහාලීම මුද්‍රණ ප්‍රතිදානයට බලපෑම් සිදු කල හැක */',
 'handheld.css' => '/* මෙහි බහාලන CSS විසින් $wgHandheldStyle හි වින්‍යාසකෙරෙන ජවිය මත පදනම් වූ අතේ ගෙන යා හැකි උපකරණ වලට බලපෑම් කල හැක*/',
 
 # Scripts
 'common.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සෑම පිටු ප්‍රවේශනයකදීම සියළු පරිශීලකයන්හට ප්‍රවේශනය කෙරේ. */',
-'standard.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සම්මත ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
-'nostalgia.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් පිළි සැමරුම් ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
 'cologneblue.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සිහිල්-සුවඳ-පැන් ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
 'monobook.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් ඒකායන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
-'myskin.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් මගේ-ඡවිය ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
-'chick.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් හැඩකාරී ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
-'simple.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් සරල ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
 'modern.js' => '/* මෙහි ඕනෑම ජාවාස්ක්‍රිප්ට් එකක් නූතන ඡවිය භාවිතා කරන පරිශීලකයන්හට ප්‍රවේශනය කෙරේ */',
 
 # Metadata
index 98e6858..4a78c09 100644 (file)
@@ -1838,7 +1838,6 @@ Za optimalno varnost je img_auth.php onemogočen.',
 'http-read-error' => 'Napaka branja HTTP.',
 'http-timed-out' => 'Zahteva HTTP je potekla.',
 'http-curl-error' => 'Napaka pri doseganju URL: $1',
-'http-host-unreachable' => 'Ni mogoče doseči URL.',
 'http-bad-status' => 'Med zahtevo HTTP je prišlo do težave: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
index ff4e4da..84a2763 100644 (file)
@@ -1795,7 +1795,6 @@ Për siguri optimale, img_auth.php është çaktivizuar.',
 'http-read-error' => 'Gabim në leximin e HTTP.',
 'http-timed-out' => 'Kërkesës HTTP i kaloi koha.',
 'http-curl-error' => 'Gabim gjatë gjetjes së URL-së: $1',
-'http-host-unreachable' => 'Nuk mund të lidheni me adresën URL.',
 'http-bad-status' => 'Ndodhi një problem gjatë kërkesës HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2949,8 +2948,6 @@ Ju lutemi provoni përsëri.',
 'pageinfo-authors' => 'Numri i autorëve të veçantë',
 
 # Skin names
-'skinname-standard' => 'Standarte',
-'skinname-nostalgia' => 'Nostalgjike',
 'skinname-cologneblue' => 'Kolonjë Blu',
 
 # Patrolling
index c82505d..e7e50f6 100644 (file)
@@ -1942,7 +1942,6 @@ För optimal säkerhet, har img_auth.php blivit avaktiverad.',
 'http-read-error' => 'HTTP-läsfel.',
 'http-timed-out' => 'Time out för HTTP-begäran.',
 'http-curl-error' => 'Fel vid hämtning av URL: $1',
-'http-host-unreachable' => 'URL:en kunde inte nås.',
 'http-bad-status' => 'Det uppstod ett problem under HTTP-begäran: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2753,6 +2752,7 @@ Se [[Special:BlockList|blockeringslistan]] för en översikt av gällande blocke
 'sorbsreason' => 'Din IP-adress är listad som öppen proxy i den DNSBL {{SITENAME}} använder.',
 'sorbs_create_account_reason' => 'Din IP-adress är listad som en öppen proxy i den DNSBL som används av {{SITENAME}}.
 Du får inte skapa ett användarkonto',
+'xffblockreason' => 'En IP-adress i sidhuvudet X-Forwarded-For, antingen din adress eller en proxyserver som du använder, har blockerats. Den ursprungliga anledningen till blockeringen var: $1',
 'cant-block-while-blocked' => 'Du kan inte blockera andra användare medan du är blockerad.',
 'cant-see-hidden-user' => 'Användaren du försöker blockera är redan blockerad och gömd. Eftersom du inte har hideuser-rättigheter, kan du inte se eller redigera användarens blockering.',
 'ipbblocked' => 'Du kan inte blockera eller avblockera andra användare, eftersom du själv är blockerad',
@@ -3065,13 +3065,8 @@ Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
 
 # Stylesheets
 'common.css' => '/* CSS som skrivs här påverkar alla skal */',
-'standard.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Standard */',
-'nostalgia.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Nostalgi */',
 'cologneblue.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Cologne blå */',
 'monobook.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Monobook */',
-'myskin.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Mitt utseende */',
-'chick.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Chick */',
-'simple.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Enkel */',
 'modern.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Modern */',
 'vector.css' => '/* CSS som skrivs här kommer att påverka alla användare av skalet Vector */',
 'print.css' => '/* CSS som skrivs här kommer att påverka utskriftsversionen */',
@@ -3084,13 +3079,8 @@ Ger möjlighet att skriva en motivering i redigeringssammanfattningen',
 
 # Scripts
 'common.js' => '/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */',
-'standard.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Standard */',
-'nostalgia.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Nostalgi */',
 'cologneblue.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Cologne blå */',
 'monobook.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Monobook */',
-'myskin.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Mitt utseende */',
-'chick.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Chick */',
-'simple.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Enkel */',
 'modern.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Modern */',
 'vector.js' => '/* JavaScript här kommer att laddas för dem som använder skalet Vector */',
 'group-autoconfirmed.js' => '/* JavaScript här kommer att laddas för bekräftade användare */',
@@ -3170,13 +3160,8 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-category-files' => 'Antal filer',
 
 # Skin names
-'skinname-standard' => 'Standard',
-'skinname-nostalgia' => 'Nostalgi',
 'skinname-cologneblue' => 'Cologne blå',
 'skinname-monobook' => 'Monobook',
-'skinname-myskin' => 'Mitt utseende',
-'skinname-chick' => 'Chick',
-'skinname-simple' => 'Enkel',
 'skinname-modern' => 'Modern',
 'skinname-vector' => 'Vector',
 
index 7dd1250..05f81b7 100644 (file)
@@ -1659,7 +1659,6 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'http-read-error' => 'HTTP చదువుటలో పొరపాటు.',
 'http-timed-out' => 'HTTP అభ్యర్థనకి కాలం చెల్లింది.',
 'http-curl-error' => 'URLని తేవడంలో పొరపాటు: $1',
-'http-host-unreachable' => 'URLని చేరలేకపోయాం.',
 'http-bad-status' => 'HTTP అభ్యర్ధన చేస్తున్నప్పుడు సమస్య ఉంది: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2747,13 +2746,8 @@ $UNWATCHURL కి వెళ్ళండి.
 'pageinfo-category-pages' => 'పేజీల సంఖ్య',
 
 # Skin names
-'skinname-standard' => 'సంప్రదాయ',
-'skinname-nostalgia' => 'నాస్టాల్జియా',
 'skinname-cologneblue' => 'కలోన్ నీలం',
 'skinname-monobook' => 'మోనోబుక్',
-'skinname-myskin' => 'నాఅలంకారం',
-'skinname-chick' => 'చిక్',
-'skinname-simple' => 'సరళ',
 'skinname-modern' => 'ఆధునిక',
 'skinname-vector' => 'వెక్టర్',
 
index ee840eb..10e08a3 100644 (file)
@@ -716,7 +716,7 @@ $1',
 
 # Special:PasswordReset
 'passwordreset' => 'ตั้งรหัสผ่านใหม่',
-'passwordreset-text' => 'à¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อรัà¸\9aà¸\95ัวà¹\80à¸\95ือà¸\99อีà¹\80มลรายละà¹\80อียà¸\94à¸\9aัà¸\8dà¸\8aีà¸\82อà¸\87à¸\84ุà¸\93',
+'passwordreset-text' => 'à¸\81รอà¸\81à¹\81à¸\9aà¸\9aà¸\99ีà¹\89à¹\80à¸\9eืà¹\88อà¸\95ัà¹\89à¸\87รหัสà¸\9cà¹\88าà¸\99à¹\83หมà¹\88',
 'passwordreset-legend' => 'เปลี่ยนรหัสผ่าน',
 'passwordreset-disabled' => 'การตั้งรหัสผ่านใหม่ปิดใช้งานบนวิกินี้',
 'passwordreset-username' => 'ชื่อผู้ใช้:',
@@ -1734,7 +1734,6 @@ $1',
 'http-read-error' => 'การอ่านข้อมูล HTTP ผิดพลาด',
 'http-timed-out' => 'คำขอข้อมูล HTTP เกินเวลาที่กำหนด',
 'http-curl-error' => 'เกิดข้อผิดพลาดในการเรียกข้อมูลจาก URL: $1',
-'http-host-unreachable' => 'ไม่สามารถเข้าถึง URL',
 'http-bad-status' => 'พบปัญหาในระหว่างการข้อข้อมูล HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2818,13 +2817,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทุกสกิน */',
-'standard.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินคลาสสิก */',
-'nostalgia.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินนอสตัลเจีย */',
 'cologneblue.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโคโลญจ์บลู */',
 'monobook.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */',
-'myskin.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินมายสกิน */',
-'chick.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินชิก */',
-'simple.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินซิมเปิล */',
 'modern.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินโมเดิร์น */',
 'vector.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */',
 'print.css' => '/* สไตล์ชีตในหน้านี้จะส่งผลแก่ข้อมูลส่งออกเป็นสิ่งพิมพ์ */',
@@ -2837,13 +2831,8 @@ $1',
 
 # Scripts
 'common.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทุกคนในทุกหน้า */',
-'standard.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินคลาสสิก */',
-'nostalgia.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินนอสตัลเจีย */',
 'cologneblue.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโคโลญจ์บลู */',
 'monobook.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมโนบุ๊ก */',
-'myskin.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินมายสกิน */',
-'chick.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินชิก */',
-'simple.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินซิมเปิล */',
 'modern.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินโมเดิร์น */',
 'vector.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ที่ใช้สกินเวกเตอร์ */',
 'group-autoconfirmed.js' => '/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทั่วไปเท่านั้น */',
@@ -2916,13 +2905,8 @@ $1',
 'pageinfo-category-files' => 'จำนวนไฟล์',
 
 # Skin names
-'skinname-standard' => 'คลาสสิก',
-'skinname-nostalgia' => 'นอสตัลเจีย',
 'skinname-cologneblue' => 'โคโลญจ์บลู',
 'skinname-monobook' => 'โมโนบุ๊ก',
-'skinname-myskin' => 'มายสกิน',
-'skinname-chick' => 'ชิก',
-'skinname-simple' => 'ซิมเปิล',
 'skinname-modern' => 'โมเดิร์น',
 'skinname-vector' => 'เวกเตอร์',
 
index 5b067ff..cab8bb7 100644 (file)
@@ -920,7 +920,7 @@ $2
 'passwordreset-emailelement' => "Ім'я користувача: $1
 Тимчасовий пароль: $2",
 'passwordreset-emailsent' => 'Електронний лист для відновлення пароля відправлений.',
-'passwordreset-emailsent-capture' => 'Електронний лист-нагадування був надісланий, як показано нижче.',
+'passwordreset-emailsent-capture' => 'Електронний лист скидання паролю було надіслано, як показано нижче.',
 'passwordreset-emailerror-capture' => 'Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання користувачеві $1 не вдалося.',
 
 # Special:ChangeEmail
@@ -2006,7 +2006,6 @@ $1',
 'http-read-error' => 'Помилка читання HTTP.',
 'http-timed-out' => 'Перевищення часу очікування HTTP-запиту.',
 'http-curl-error' => 'Помилка звертання до URL: $1',
-'http-host-unreachable' => 'Неможливо досягнути вказану URL-адресу.',
 'http-bad-status' => 'Під час HTTP-запиту виникла проблема: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3131,8 +3130,6 @@ $1',
 
 # Stylesheets
 'common.css' => '/** Розміщений тут CSS буде застосовуватися до всіх тем оформлення */',
-'standard.css' => '/* Розміщений тут CSS-код буде використаний для користувачів з налаштованою темою оформлення Стандартне */',
-'nostalgia.css' => '/* Розміщений тут CSS-код буде використаний для користувачів з налаштованою темою оформлення Ностальгія */',
 'cologneblue.css' => '/* Розміщений тут CSS-код буде використаний для користувачів з налаштованою темою оформлення Кельнське блакитне */',
 'monobook.css' => '/* Розміщений тут CSS буде застосовуватися до всіх тем оформлення Monobook */
 
@@ -3147,9 +3144,6 @@ $1',
     padding-right: 0em;
     font-weight: bold;
 }',
-'myskin.css' => '/* Розміщений тут CSS-код буде використаний в темі оформлення Власне */',
-'chick.css' => '/* Розміщений тут CSS-код буде використаний в темі оформлення Курча */',
-'simple.css' => '/* Розміщений тут CSS-код буде використаний в темі оформлення Просте */',
 'modern.css' => '/* Розміщений тут CSS-код буде використаний в темі оформлення Сучасне */',
 'vector.css' => '/* Розміщений тут CSS-код буде використаний в темі оформлення Векторне */',
 'print.css' => '/* Розміщений тут CSS-код буде використаний для друкованої версії */',
@@ -3162,13 +3156,8 @@ $1',
 
 # Scripts
 'common.js' => '/* Розміщений тут код JavaScript буде завантажений всім користувачам при зверненні до будь-якої сторінки */',
-'standard.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують стандартну тему оформлення */',
-'nostalgia.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Ностальгія */',
 'cologneblue.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Кельнське синє */',
 'monobook.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Моно-книга */',
-'myskin.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують власну тему оформлення */',
-'chick.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Курча */',
-'simple.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують просту тему оформлення */',
 'modern.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують тему оформлення Сучасне */',
 'vector.js' => '/* Розміщений тут код JavaScript буде завантажений для всіх користувачів, що використовують векторну тему оформлення */',
 'group-autoconfirmed.js' => '/* Розміщений тут код JavaScript буде завантажений тільки для автопідтверджених користувачів */',
@@ -3249,13 +3238,8 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-category-files' => 'Кількість файлів',
 
 # Skin names
-'skinname-standard' => 'Стандартне',
-'skinname-nostalgia' => 'Ностальгія',
 'skinname-cologneblue' => 'Кельнське синє',
 'skinname-monobook' => 'Моно-книга',
-'skinname-myskin' => 'Своє',
-'skinname-chick' => 'Курча',
-'skinname-simple' => 'Просте',
 'skinname-modern' => 'Сучасне',
 'skinname-vector' => 'Векторне',
 
@@ -4236,15 +4220,15 @@ MediaWiki поширюється в надії, що вона буде кори
 # New logging system
 'logentry-delete-delete' => '$1 {{GENDER:$2|вилучив|вилучила}} сторінку $3',
 'logentry-delete-restore' => '$1 {{GENDER:$2|відновив|відновила}} сторінку $3',
-'logentry-delete-event' => '$1 змінив видимість {{PLURAL:$5 запису журнала|$5 записів журналу}} на $3: $4',
-'logentry-delete-revision' => '$1 змінив видимість {{PLURAL:$5 версії|$5 версій}} на сторінці $3: $4',
-'logentry-delete-event-legacy' => '$1 змінив видимість записів журналу подій $3',
+'logentry-delete-event' => '$1 {{GENDER:$2|змінив|змінила}} видимість {{PLURAL:$5 запису журналу|$5 записів журналу}} на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$2|змінив|змінила}} видимість {{PLURAL:$5 версії|$5 версій}} на сторінці $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$2|змінив|змінила}} видимість записів журналу подій $3',
 'logentry-delete-revision-legacy' => '$1 {{GENDER:$2|змінив|змінила}} видимість версій на сторінці $3',
-'logentry-suppress-delete' => '$1 подавив сторінку $3',
-'logentry-suppress-event' => '$1 приховано змінив видимість для {{PLURAL:$5|запису|$5 записів}} журналу на $3: $4',
-'logentry-suppress-revision' => '$1 приховано змінив видимість для {{PLURAL:$5 версії|$5 версій}} на сторінці $3: $4',
-'logentry-suppress-event-legacy' => '$1 приховано змінив видимість записів журналу $3',
-'logentry-suppress-revision-legacy' => '$1 приховано змінив видимість версій на сторінці $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$2|подавив|подавила}} сторінку $3',
+'logentry-suppress-event' => '$1 приховано {{GENDER:$2|змінив|змінила}} видимість для {{PLURAL:$5|$5 запису|$5 записів}} журналу на $3: $4',
+'logentry-suppress-revision' => '$1 приховано {{GENDER:$2|змінив|змінила}} видимість для {{PLURAL:$5 версії|$5 версій}} на сторінці $3: $4',
+'logentry-suppress-event-legacy' => '$1 приховано {{GENDER:$2|змінив|змінила}} видимість записів журналу $3',
+'logentry-suppress-revision-legacy' => '$1 приховано {{GENDER:$2|змінив|змінила}} видимість версій на сторінці $3',
 'revdelete-content-hid' => 'вміст приховано',
 'revdelete-summary-hid' => 'опис редагування приховано',
 'revdelete-uname-hid' => "ім'я користувача приховано",
@@ -4257,8 +4241,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'logentry-move-move-noredirect' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 без створення перенаправлення',
 'logentry-move-move_redir' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку з $3 на $4 поверх перенаправлення',
 'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$2|перейменував|перейменувала}} сторінку $3 на $4 поверх перенаправлення і без залишення перенаправлення',
-'logentry-patrol-patrol' => '$1 відпатрулював версію $4 сторінки $3',
-'logentry-patrol-patrol-auto' => '$1 автоматично відпатрулював версію $4 сторінки $3',
+'logentry-patrol-patrol' => '$1 {{GENDER:$2|відпатрулював|відпатрулювала}} версію $4 сторінки $3',
+'logentry-patrol-patrol-auto' => '$1 автоматично {{GENDER:$2|відпатрулював|відпатрулювала}} версію $4 сторінки $3',
 'logentry-newusers-newusers' => 'Створено обліковий запис $1',
 'logentry-newusers-create' => '$1 — створено обліковий запис',
 'logentry-newusers-create2' => '$1 {{GENDER:$2|створив|створила}} обліковий запис {{GENDER:$4|користувача|користувачки}} $3',
index 65066ab..1c5ebd4 100644 (file)
@@ -1557,12 +1557,7 @@ Umumiy omborda [[:$1]] mavjud. Faylning bu nomga qayta nomlanishi faylning umumi
 'pageinfo-redirectsto' => 'Qayta yoʻnaltirish',
 
 # Skin names
-'skinname-standard' => 'Klassik',
-'skinname-nostalgia' => "Sog'inch",
 'skinname-cologneblue' => "Kyolncha sog'inch",
-'skinname-myskin' => "O'zimniki",
-'skinname-chick' => "Jo'ja",
-'skinname-simple' => 'Oddiy',
 'skinname-modern' => 'Zamonaviy',
 'skinname-vector' => 'Vektor',
 
index 4466c6b..701270c 100644 (file)
@@ -984,9 +984,9 @@ Nó chưa được lưu!'''",
 Các thay đổi của bạn vẫn chưa được lưu!",
 'continue-editing' => 'Đi đến hộp sửa đổi',
 'previewconflict' => 'Phần xem thử này là kết quả của văn bản trong vùng soạn thảo phía trên và nó sẽ xuất hiện như vậy nếu bạn chọn lưu trang.',
-'session_fail_preview' => "'''Những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.
+'session_fail_preview' => "'''Rất tiếc, những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.'''
 Xin hãy thử lần nữa.
-Nếu vẫn không thành công, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.'''",
+Nếu vẫn không thành công, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại.",
 'session_fail_preview_html' => "'''Những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.'''
 
 ''Do {{SITENAME}} cho phép dùng mã HTML, trang xem thử được ẩn đi để đề phòng bị tấn công bằng JavaScript.''
@@ -1911,7 +1911,6 @@ Vì lý do bảo mật, img_auth.php đã bị tắt.',
 'http-read-error' => 'Lỗi đọc HTTP.',
 'http-timed-out' => 'Hết thời gian yêu cầu HTTP.',
 'http-curl-error' => 'Có lỗi khi truy xuất URL: $1',
-'http-host-unreachable' => 'Không thể truy cập URL',
 'http-bad-status' => 'Có vấn đề khi yêu cầu HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -3030,13 +3029,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 
 # Stylesheets
 'common.css' => '/* Mã CSS đặt ở đây sẽ áp dụng cho mọi hình dạng */',
-'standard.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Cổ điển */',
-'nostalgia.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Vọng cổ */',
 'cologneblue.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Xanh Cologne */',
 'monobook.css' => '/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng MonoBook */',
-'myskin.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Cá nhân */',
-'chick.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Chick */',
-'simple.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Đơn giản */',
 'modern.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến những người dùng sử dụng hình dạng Hiện đại */',
 'vector.css' => '/* Mã CSS đặt ở đây sẽ ảnh hưởng đến thành viên sử dụng hình dạng Vectơ */',
 'print.css' => '/* Mã CSS tại đây sẽ ảnh hưởng đến bản để in */',
@@ -3049,13 +3043,8 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 
 # Scripts
 'common.js' => '/* Bất kỳ mã JavaScript ở đây sẽ được tải cho tất cả các thành viên khi tải một trang nào đó lên. */',
-'standard.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng hình dạng Cổ điển */',
-'nostalgia.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng hình dạng Vọng cổ */',
 'cologneblue.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng hình dạng Xanh Cologne */',
 'monobook.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài MonoBook */',
-'myskin.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Cá nhân */',
-'chick.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Chick */',
-'simple.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Đơn giản */',
 'modern.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Hiện đại */',
 'vector.js' => '/* Mã JavaScript tại đây sẽ được tải khi người dùng sử dụng bề ngoài Vectơ */',
 'group-autoconfirmed.js' => '/* Mã JavaScript tại đây sẽ chỉ được tải cho các thành viên tự động xác nhận */',
@@ -3136,11 +3125,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-category-files' => 'Số tập tin',
 
 # Skin names
-'skinname-standard' => 'Cổ điển',
-'skinname-nostalgia' => 'Vọng cổ',
 'skinname-cologneblue' => 'Xanh Cologne',
-'skinname-myskin' => 'Cá nhân',
-'skinname-simple' => 'Đơn giản',
 'skinname-modern' => 'Hiện đại',
 'skinname-vector' => 'Vectơ',
 
@@ -3787,7 +3772,7 @@ Xin hãy xác nhận bạn thực sự muốn tạo lại trang này.",
 'recreate' => 'Tạo ra lại',
 
 # action=purge
-'confirm_purge_button' => 'Làm mới',
+'confirm_purge_button' => 'Làm tươi',
 'confirm-purge-top' => 'Làm sạch vùng nhớ đệm của trang này?',
 'confirm-purge-bottom' => 'Làm mới một trang sẽ giúp xóa bộ đệm và buộc hiển thị phiên bản gần nhất.',
 
index f0ad26c..8a7c25b 100644 (file)
@@ -2880,13 +2880,8 @@ $1',
 
 # Stylesheets
 'common.css' => '/* CSS געשריבן דא וועט אפילירן און באיינפלוסן אלע סקינס */',
-'standard.css' => '/* CSS געשטעלט דא ווירקט אויפן סטאנדארט סקין */',
-'nostalgia.css' => '/* CSS געשטעלט דא ווירקט נאר אויפן נאסטאלגיע סקין */',
 'cologneblue.css' => '/* CSS געשטעלט דא ווירקט נאר אויפן קעלנישן־בלוי סקין */',
 'monobook.css' => '/* סטייל דא געלייגט וועט באאיינפלוסן דעם Monobook סקין */',
-'myskin.css' => '/* CSS געשטעלט דא ווירקט אויפן MySkin סקין */',
-'chick.css' => '/* CSS געשטעלט דא ווירקט אויפן טשיק סקין */',
-'simple.css' => '/* CSS געשטעלט דא ווירקט אויפן איינפאך סקין */',
 'modern.css' => '/* CSS געשטעלט דא ווירקט אויפן מאדערנעם סקין */',
 'vector.css' => '/* CSS געשטעלט דא ווירקט נאר אויפן וועקטאר סקין */',
 
@@ -2962,13 +2957,8 @@ $1',
 'pageinfo-category-files' => 'צאָל טעקעס',
 
 # Skin names
-'skinname-standard' => 'קלאסיש',
-'skinname-nostalgia' => 'נאסטאלגיע',
 'skinname-cologneblue' => 'קעלניש בלוי',
 'skinname-monobook' => 'מאנאבוק',
-'skinname-myskin' => 'מיין סקין',
-'skinname-chick' => 'טשיק',
-'skinname-simple' => 'איינפֿאַך',
 'skinname-modern' => 'מאדערן',
 'skinname-vector' => 'וועקטאר',
 
index a6404e1..29ef2a2 100644 (file)
@@ -1347,7 +1347,7 @@ $1",
 # Preferences page
 'preferences' => '参数设置',
 'mypreferences' => '系统设置',
-'prefs-edits' => '编辑数:',
+'prefs-edits' => '编辑数:',
 'prefsnologin' => '未登录',
 'prefsnologintext' => '您必须先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登录]</span>才能设置个人参数。',
 'changepassword' => '更改密码',
@@ -1867,7 +1867,6 @@ $1',
 'http-read-error' => 'HTTP读取错误。',
 'http-timed-out' => 'HTTP请求已过时。',
 'http-curl-error' => '撷取URL时出错:$1',
-'http-host-unreachable' => '无法到达URL。',
 'http-bad-status' => '进行HTTP请求时出现问题:$1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2656,6 +2655,7 @@ $1被封禁的理由是:“$2”',
 'proxyblocksuccess' => '完成。',
 'sorbsreason' => '在{{SITENAME}}使用的DNSBL中,您的IP地址被列为公开代理。',
 'sorbs_create_account_reason' => '在{{SITENAME}}使用的DNSBL中,您的IP地址被列为公开代理,因此您不能创建新账户。',
+'xffblockreason' => '您或您正在使用的代理服务器呈现在X-Forwarded-For数据包头的一个IP地址已被封禁。封禁原因为:$1',
 'cant-block-while-blocked' => '您无法在封禁期内封禁其他用户。',
 'cant-see-hidden-user' => '您尝试封禁的用户已被封禁并隐藏。
 由于您尚无隐藏用户的权限,您无法查看或编辑此用户的封禁。',
@@ -2961,13 +2961,8 @@ $1被封禁的理由是:“$2”',
 
 # Stylesheets
 'common.css' => '/* 此处的 CSS 将应用于所有的皮肤 */',
-'standard.css' => '/* 此处的 CSS 将影响使用标准皮肤的用户 */',
-'nostalgia.css' => '/* 此处的 CSS 将影响使用怀旧皮肤的用户 */',
 'cologneblue.css' => '/* 此处的 CSS 将影响使用科隆香水蓝皮肤的用户 */',
 'monobook.css' => '/* 此处的 CSS 将影响使用 Monobook 皮肤的用户 */',
-'myskin.css' => '/* 此处的 CSS 将影响使用 MySkin 皮肤的用户 */',
-'chick.css' => '/* 此处的 CSS 将影响使用 Chick 皮肤的用户 */',
-'simple.css' => '/* 此处的 CSS 将影响使用 Simple 皮肤的用户 */',
 'modern.css' => '/* 此处的 CSS 将影响使用 Modern 皮肤的用户 */',
 'vector.css' => '/* 此处的 CSS 将影响使用 Vector 皮肤的用户 */',
 'print.css' => '/* 此处的 CSS 将影响打印输出 */',
@@ -2980,13 +2975,8 @@ $1被封禁的理由是:“$2”',
 
 # Scripts
 'common.js' => '/* 此处的JavaScript将加载于所有用户每一个页面。 */',
-'standard.js' => '/* 此处的JavaScript将加载于使用标准皮肤的用户 */',
-'nostalgia.js' => '/* 此处的JavaScript将加载于使用怀旧皮肤的用户 */',
 'cologneblue.js' => '/* 此处的JavaScript将加载于使用科隆香水蓝皮肤的用户 */',
 'monobook.js' => '/* 此处的JavaScript将加载于使用Monobook皮肤的用户 */',
-'myskin.js' => '/* 此处的JavaScript将加载于使用MySkin皮肤的用户 */',
-'chick.js' => '/* 此处的JavaScript将加载于使用Chick皮肤的用户 */',
-'simple.js' => '/* 此处的JavaScript将加载于使用Simple皮肤的用户 */',
 'modern.js' => '/* 此处的JavaScript将加载于使用Modern皮肤的用户 */',
 'vector.js' => '/* 此处的JavaScript将加载于使用Vector皮肤的用户 */',
 'group-autoconfirmed.js' => '/* 此处的JavaScript将仅加载于自动确认用户 */',
@@ -3066,10 +3056,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-category-files' => '文件数',
 
 # Skin names
-'skinname-standard' => '标准',
-'skinname-nostalgia' => '怀旧',
 'skinname-cologneblue' => '科隆香水蓝',
-'skinname-simple' => '简单',
 'skinname-modern' => '现代',
 
 # Patrolling
index fc66eb9..829a0ab 100644 (file)
@@ -1826,7 +1826,6 @@ $1',
 'http-read-error' => 'HTTP讀取錯誤。',
 'http-timed-out' => 'HTTP請求已過時。',
 'http-curl-error' => '擷取URL時出錯:$1',
-'http-host-unreachable' => '無法到達URL。',
 'http-bad-status' => '進行HTTP請求時出現問題:$1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
@@ -2230,7 +2229,7 @@ Template:消除歧義',
 'notanarticle' => '不是頁面',
 'notvisiblerev' => '上次由不同用戶所作的修訂版本已經刪除',
 'watchnochange' => '在顯示的時間段內您所監視的頁面沒有更改。',
-'watchlist-details' => 'ä¸\8då\8c\85å\90«è¨\8eè«\96é \81ï¼\8cæ\9c\89 $1 é \81å\9c¨æ\82¨ç\9a\84ç\9b£è¦\96å\88\97表ä¸\8a。',
+'watchlist-details' => 'ä¸\8då\8c\85å\90«è¨\8eè«\96é \81ï¼\8cæ\82¨ç\9a\84ç\9b£è¦\96å\88\97表ä¸\8aæ\9c\89 $1 å\80\8bé \81é\9d¢。',
 'wlheader-enotif' => '* 已經啟動電子郵件通知功能。',
 'wlheader-showupdated' => "* 在{{GENDER:|你|妳|你}}上次檢視後有被修改過的頁面會顯示為'''粗體'''",
 'watchmethod-recent' => '檢查被監視頁面的最近編輯',
@@ -2950,13 +2949,8 @@ $1被封禁的理由是“$2”',
 
 # Stylesheets
 'common.css' => '/* 此處的 CSS 將應用於所有的面板 */',
-'standard.css' => '/* 此處的 CSS 將影響使用標準面板的用戶 */',
-'nostalgia.css' => '/* 此處的 CSS 將影響使用懷舊面板的用戶 */',
 'cologneblue.css' => '/* 此處的 CSS 將影響使用科隆香水藍面板的用戶 */',
 'monobook.css' => '/* 此處的 CSS 將影響使用 Monobook 面板的用戶 */',
-'myskin.css' => '/* 此處的 CSS 將影響使用 MySkin 面板的用戶 */',
-'chick.css' => '/* 此處的 CSS 將影響使用 Chick 面板的用戶 */',
-'simple.css' => '/* 此處的 CSS 將影響使用 Simple 面板的用戶 */',
 'modern.css' => '/* 此處的 CSS 將影響使用 Modern 面板的用戶 */',
 'vector.css' => '/* 此處的 CSS 將影響使用 Vector 面板的用戶 */',
 'print.css' => '/* 此處的 CSS 將影響打印輸出 */',
@@ -2969,13 +2963,8 @@ $1被封禁的理由是“$2”',
 
 # Scripts
 'common.js' => '/* 此處的JavaScript將載入於所有用戶每一個頁面。 */',
-'standard.js' => '/* 此處的JavaScript將載入於使用標準面板的用戶 */',
-'nostalgia.js' => '/* 此處的JavaScript將載入於使用懷舊面板的用戶 */',
 'cologneblue.js' => '/* 此處的JavaScript將載入於使用科隆香水藍面板的用戶 */',
 'monobook.js' => '/* 此處的JavaScript將載入於使用Monobook面板的用戶 */',
-'myskin.js' => '/* 此處的JavaScript將載入於使用MySkin面板的用戶 */',
-'chick.js' => '/* 此處的JavaScript將載入於使用Chick面板的用戶 */',
-'simple.js' => '/* 此處的JavaScript將載入於使用Simple面板的用戶 */',
 'modern.js' => '/* 此處的JavaScript將載入於使用Modern面板的用戶 */',
 'vector.js' => '/* 此處的JavaScript將載入於使用Vector面板的用戶 */',
 
@@ -3051,10 +3040,7 @@ $1被封禁的理由是“$2”',
 'pageinfo-category-files' => '編輯數量',
 
 # Skin names
-'skinname-standard' => '標準',
-'skinname-nostalgia' => '懷舊',
 'skinname-cologneblue' => '科隆香水藍',
-'skinname-simple' => '簡單',
 'skinname-modern' => '現代',
 
 # Patrolling
diff --git a/maintenance/archives/patch-eu_local_id.sql b/maintenance/archives/patch-eu_local_id.sql
deleted file mode 100644 (file)
index bb59d06..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ALTER TABLE /*_*/external_user
-CHANGE COLUMN eu_wiki_id
-eu_local_id int unsigned NOT NULL;
diff --git a/maintenance/archives/patch-external_user.sql b/maintenance/archives/patch-external_user.sql
deleted file mode 100644 (file)
index 176b46d..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CREATE TABLE /*_*/external_user (
-  -- Foreign key to user_id
-  eu_local_id int unsigned NOT NULL PRIMARY KEY,
-
-  -- Some opaque identifier provided by the external database
-  eu_external_id varchar(255) binary NOT NULL
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
diff --git a/maintenance/archives/patch-img_media_mime-index.sql b/maintenance/archives/patch-img_media_mime-index.sql
new file mode 100644 (file)
index 0000000..bfaf84f
--- /dev/null
@@ -0,0 +1,4 @@
+-- New index on image table to allow searches for types i.e. video webm
+-- Added 2013-01-08
+
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
diff --git a/maintenance/archives/patch-iwl_prefix_title_from-non-unique.sql b/maintenance/archives/patch-iwl_prefix_title_from-non-unique.sql
new file mode 100644 (file)
index 0000000..bff63c7
--- /dev/null
@@ -0,0 +1,5 @@
+--
+-- Makes the iwl_prefix_title_from index for the iwlinks table non-unique
+--
+DROP INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks;
+CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
diff --git a/maintenance/archives/patch-iwlinks-from-title-index.sql b/maintenance/archives/patch-iwlinks-from-title-index.sql
new file mode 100644 (file)
index 0000000..8b73f9e
--- /dev/null
@@ -0,0 +1,4 @@
+--
+-- Recreates the iwl_prefix_from_title index for the iwlinks table
+--
+CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
diff --git a/maintenance/archives/patch-kill-iwl_pft.sql b/maintenance/archives/patch-kill-iwl_pft.sql
deleted file mode 100644 (file)
index 96e1435..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Kill the old iwl_prefix_from_title index, which may be present on some
--- installs if they ran update.php between it being added and being renamed
---
-
-DROP INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks;
-
index 5eb8c5c..f5bcb5d 100644 (file)
@@ -296,23 +296,13 @@ $wgOptionalMessages = array(
        'resetpass_text',
        'image_sample',
        'media_sample',
-       'skinname-standard',
-       'skinname-nostalgia',
        'skinname-cologneblue',
        'skinname-monobook',
-       'skinname-myskin',
-       'skinname-chick',
-       'skinname-simple',
        'skinname-modern',
        'skinname-vector',
        'common.css',
-       'standard.css',
-       'nostalgia.css',
        'cologneblue.css',
        'monobook.css',
-       'myskin.css',
-       'chick.css',
-       'simple.css',
        'modern.css',
        'vector.css',
        'print.css',
@@ -323,13 +313,8 @@ $wgOptionalMessages = array(
        'group-sysop.css',
        'group-bureaucrat.css',
        'common.js',
-       'standard.js',
-       'nostalgia.js',
        'cologneblue.js',
        'monobook.js',
-       'myskin.js',
-       'chick.js',
-       'simple.js',
        'modern.js',
        'vector.js',
        'group-autoconfirmed.js',
index 6d6e95c..33628b6 100644 (file)
@@ -947,15 +947,6 @@ $wgMessageStructure = array(
        'opensearch' => array(
                'opensearch-desc',
        ),
-       'quickbar' => array(
-               'qbsettings',
-               'qbsettings-none',
-               'qbsettings-fixedleft',
-               'qbsettings-fixedright',
-               'qbsettings-floatingleft',
-               'qbsettings-floatingright',
-               'qbsettings-directionality',
-       ),
        'preferences' => array(
                'preferences',
                'preferences-summary',
@@ -1480,7 +1471,6 @@ $wgMessageStructure = array(
                'http-read-error',
                'http-timed-out',
                'http-curl-error',
-               'http-host-unreachable',
                'http-bad-status',
        ),
 
@@ -2625,13 +2615,8 @@ $wgMessageStructure = array(
        ),
        'stylesheets' => array(
                'common.css',
-               'standard.css',
-               'nostalgia.css',
                'cologneblue.css',
                'monobook.css',
-               'myskin.css',
-               'chick.css',
-               'simple.css',
                'modern.css',
                'vector.css',
                'print.css',
@@ -2644,13 +2629,8 @@ $wgMessageStructure = array(
        ),
        'scripts' => array(
                'common.js',
-               'standard.js',
-               'nostalgia.js',
                'cologneblue.js',
                'monobook.js',
-               'myskin.js',
-               'chick.js',
-               'simple.js',
                'modern.js',
                'vector.js',
                'group-autoconfirmed.js',
@@ -2732,13 +2712,8 @@ $wgMessageStructure = array(
                'pageinfo-category-files'
        ),
        'skin' => array(
-               'skinname-standard',
-               'skinname-nostalgia',
                'skinname-cologneblue',
                'skinname-monobook',
-               'skinname-myskin',
-               'skinname-chick',
-               'skinname-simple',
                'skinname-modern',
                'skinname-vector',
        ),
@@ -3894,7 +3869,6 @@ XHTML id names.",
        'diffs'               => 'Diffs',
        'search'              => 'Search results',
        'opensearch'          => 'OpenSearch description',
-       'quickbar'            => 'Quickbar',
        'preferences'         => 'Preferences page',
        'preferences-email'   => 'User preference: email validation using jQuery',
        'userrights'          => 'User rights',
index 62596b2..fbba977 100644 (file)
@@ -98,7 +98,10 @@ foreach ( $mmfl['setupFiles'] as $fileName ) {
        if ( empty( $mmfl['quiet'] ) ) {
                fwrite( STDERR, "Loading data from $fileName\n" );
        }
-       include_once( $fileName );
+       if ( !include_once( $fileName ) ) {
+               fwrite( STDERR, "Unable to read $fileName\n" );
+               exit( 1 );
+       }
 }
 fwrite( STDERR, "\n" );
 $s =
index ad99617..b76f57c 100644 (file)
@@ -305,17 +305,6 @@ CREATE TABLE /*$wgDBprefix*/externallinks (
 -- Maximum key length ON SQL Server is 900 bytes
 CREATE INDEX /*$wgDBprefix*/externallinks_index   ON /*$wgDBprefix*/externallinks(el_index);
 
---
--- Track external user accounts, if ExternalAuth is used
---
-CREATE TABLE /*$wgDBprefix*/external_user (
-       -- Foreign key to user_id
-       eu_local_id INT NOT NULL PRIMARY KEY,
-       -- opaque identifier provided by the external database
-       eu_external_id NVARCHAR(255) NOT NULL,
-);
-CREATE UNIQUE INDEX /*$wgDBprefix*/eu_external_idx ON /*$wgDBprefix*/external_user(eu_external_id);
-
 --
 -- Track INTerlanguage links
 --
index b5b3b07..c5bf569 100644 (file)
@@ -218,13 +218,6 @@ CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from,
 CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from);
 CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index);
 
-CREATE TABLE &mw_prefix.external_user (
-  eu_local_id NUMBER NOT NULL,
-  eu_external_id varchar2(255) NOT NULL
-);
-ALTER TABLE &mw_prefix.external_user ADD CONSTRAINT &mw_prefix.external_user_pk PRIMARY KEY (eu_local_id);
-CREATE UNIQUE INDEX &mw_prefix.external_user_u01 ON &mw_prefix.external_user (eu_external_id);
-
 CREATE TABLE &mw_prefix.langlinks (
   ll_from    NUMBER  NOT NULL,
   ll_lang    VARCHAR2(20),
diff --git a/maintenance/postgres/archives/patch-external_user.sql b/maintenance/postgres/archives/patch-external_user.sql
deleted file mode 100644 (file)
index 6058a70..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE TABLE external_user (
-  eu_local_id     INTEGER  NOT NULL  PRIMARY KEY,
-  eu_external_id TEXT
-);
-
-CREATE UNIQUE INDEX eu_external_id ON external_user (eu_external_id);
diff --git a/maintenance/postgres/archives/patch-kill-iwl_pft.sql b/maintenance/postgres/archives/patch-kill-iwl_pft.sql
deleted file mode 100644 (file)
index 4419d9e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Kill the old iwl_prefix_from_title index, which may be present on some
--- installs if they ran update.php between it being added and being renamed
---
-
-DROP INDEX iwl_prefix_from_title;
-
index a4bdb6a..0eb792e 100644 (file)
@@ -1,2 +1,2 @@
 DROP INDEX iwl_prefix;
-CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_from, iwl_title);
+CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_title, iwl_from);
index 9cbabfd..30a8e1b 100644 (file)
@@ -232,13 +232,6 @@ CREATE TABLE externallinks (
 CREATE INDEX externallinks_from_to ON externallinks (el_from,el_to);
 CREATE INDEX externallinks_index   ON externallinks (el_index);
 
-CREATE TABLE external_user (
-  eu_local_id     INTEGER  NOT NULL  PRIMARY KEY,
-  eu_external_id TEXT
-);
-
-CREATE UNIQUE INDEX eu_external_id ON external_user (eu_external_id);
-
 CREATE TABLE langlinks (
   ll_from    INTEGER  NOT NULL  REFERENCES page (page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
   ll_lang    TEXT,
@@ -679,6 +672,7 @@ CREATE TABLE iwlinks (
 );
 CREATE UNIQUE INDEX iwl_from ON iwlinks (iwl_from, iwl_prefix, iwl_title);
 CREATE UNIQUE INDEX iwl_prefix_title_from ON iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE UNIQUE INDEX iwl_prefix_from_title ON iwlinks (iwl_prefix, iwl_from, iwl_title);
 
 CREATE TABLE msg_resource (
   mr_resource   TEXT         NOT NULL,
index 8b49517..831746d 100644 (file)
@@ -47,8 +47,13 @@ class ShowJobs extends Maintenance {
                                $queue   = $group->get( $type );
                                $pending = $queue->getSize();
                                $claimed = $queue->getAcquiredCount();
+                               $abandoned = $queue->getAbandonedCount();
+                               $active = ( $claimed - $abandoned );
                                if ( ( $pending + $claimed ) > 0 ) {
-                                       $this->output( "{$type}: $pending queued; $claimed acquired\n" );
+                                       $this->output(
+                                               "{$type}: $pending queued; " .
+                                               "$claimed claimed ($active active, $abandoned abandoned)\n"
+                                       );
                                }
                        }
                } else {
diff --git a/maintenance/sqlite/archives/patch-kill-iwl_pft.sql b/maintenance/sqlite/archives/patch-kill-iwl_pft.sql
deleted file mode 100644 (file)
index 8fc4b5c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Kill the old iwl_prefix_from_title index, which may be present on some
--- installs if they ran update.php between it being added and being renamed
---
-
-DROP INDEX IF EXISTS /*i*/iwl_prefix;
-
index fd4c9ec..6d5b1bf 100644 (file)
@@ -2,4 +2,4 @@
 -- Recreates the iwl_prefix for the iwlinks table
 --
 DROP INDEX IF EXISTS /*i*/iwl_prefix;
-CREATE INDEX IF NOT EXISTS /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
+CREATE INDEX IF NOT EXISTS /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
index 4307c0c..19c740b 100644 (file)
@@ -626,21 +626,6 @@ CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
 CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
 CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
 
-
---
--- Track external user accounts, if ExternalAuth is used
---
-CREATE TABLE /*_*/external_user (
-  -- Foreign key to user_id
-  eu_local_id int unsigned NOT NULL PRIMARY KEY,
-
-  -- Some opaque identifier provided by the external database
-  eu_external_id varchar(255) binary NOT NULL
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
-
-
 --
 -- Track interlanguage links
 --
@@ -674,7 +659,8 @@ CREATE TABLE /*_*/iwlinks (
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
-CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
+CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
 
 
 --
@@ -862,6 +848,8 @@ CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
 CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
 -- Used in API and duplicate search
 CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
+-- Used to get media of one type
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
 
 
 --
index a76a1ee..8118f68 100644 (file)
@@ -82,6 +82,10 @@ TEXT;
                        $collation = Collation::singleton();
                }
 
+               // Collation sanity check: in some cases the constructor will work,
+               // but this will raise an exception, breaking all category pages
+               $collation->getFirstLetterData();
+
                $options = array(
                        'LIMIT' => self::BATCH_SIZE,
                        'ORDER BY' => 'cl_to, cl_type, cl_from',
index 4374b09..0db3e20 100644 (file)
@@ -60,12 +60,6 @@ return array(
         *
         * See Vector for an example.
         */
-
-       'skins.chick' => array(
-               'styles' => array( 'chick/main.css' => array( 'media' => 'screen, handheld' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
        'skins.cologneblue' => array(
                'styles' => array( 'cologneblue/screen.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
@@ -89,21 +83,6 @@ return array(
                'remoteBasePath' => $GLOBALS['wgStylePath'],
                'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
-       'skins.nostalgia' => array(
-               'styles' => array( 'nostalgia/screen.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'skins.simple' => array(
-               'styles' => array( 'simple/main.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
-       'skins.standard' => array(
-               'styles' => array( 'standard/main.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
-       ),
        'skins.vector' => array(
                // Keep in sync with WebInstallerOutput::getCSS()
                'styles' => array(
index 630002d..f07f1b7 100644 (file)
@@ -24,7 +24,7 @@
         * @param {Object|undefined} options
         */
        function toggleElement( $collapsible, action, $defaultToggle, options ) {
-               var $collapsibleContent, $containers;
+               var $collapsibleContent, $containers, hookCallback;
                options = options || {};
 
                // Validate parameters
                        return;
                }
 
+               // Trigger a custom event to allow callers to hook to the collapsing/expanding,
+               // allowing the module to be testable, and making it possible to
+               // e.g. implement persistence via cookies
+               $collapsible.trigger( action === 'expand' ? 'beforeExpand.mw-collapsible' : 'beforeCollapse.mw-collapsible' );
+               hookCallback = function () {
+                       $collapsible.trigger( action === 'expand' ? 'afterExpand.mw-collapsible' : 'afterCollapse.mw-collapsible' );
+               };
+
                // Handle different kinds of elements
 
                if ( !options.plainMode && $collapsible.is( 'table' ) ) {
                                // http://stackoverflow.com/questions/467336#920480
                                if ( options.instantHide ) {
                                        $containers.hide();
+                                       hookCallback();
                                } else {
-                                       $containers.stop( true, true ).fadeOut();
+                                       $containers.stop( true, true ).fadeOut( hookCallback );
                                }
                        } else {
-                               $containers.stop( true, true ).fadeIn();
+                               $containers.stop( true, true ).fadeIn( hookCallback );
                        }
 
                } else if ( !options.plainMode && ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) ) {
                        if ( action === 'collapse' ) {
                                if ( options.instantHide ) {
                                        $containers.hide();
+                                       hookCallback();
                                } else {
-                                       $containers.stop( true, true ).slideUp();
+                                       $containers.stop( true, true ).slideUp( hookCallback );
                                }
                        } else {
-                               $containers.stop( true, true ).slideDown();
+                               $containers.stop( true, true ).slideDown( hookCallback );
                        }
 
                } else {
                                if ( action === 'collapse' ) {
                                        if ( options.instantHide ) {
                                                $collapsibleContent.hide();
+                                               hookCallback();
                                        } else {
-                                               $collapsibleContent.slideUp();
+                                               $collapsibleContent.slideUp( hookCallback );
                                        }
                                } else {
-                                       $collapsibleContent.slideDown();
+                                       $collapsibleContent.slideDown( hookCallback );
                                }
 
                        // Otherwise assume this is a customcollapse with a remote toggle
                                if ( action === 'collapse' ) {
                                        if ( options.instantHide ) {
                                                $collapsible.hide();
+                                               hookCallback();
                                        } else {
                                                if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                                       $collapsible.fadeOut();
+                                                       $collapsible.fadeOut( hookCallback );
                                                } else {
-                                                       $collapsible.slideUp();
+                                                       $collapsible.slideUp( hookCallback );
                                                }
                                        }
                                } else {
                                        if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
-                                               $collapsible.fadeIn();
+                                               $collapsible.fadeIn( hookCallback );
                                        } else {
-                                               $collapsible.slideDown();
+                                               $collapsible.slideDown( hookCallback );
                                        }
                                }
                        }
                                                .parent()
                                                .prepend( '&nbsp;[' )
                                                .append( ']&nbsp;' )
-                                               .on( 'click.mw-collapse', function ( e, opts ) {
+                                               .on( 'click.mw-collapsible', function ( e, opts ) {
                                                        opts = $.extend( { toggleText: { collapseText: collapsetext, expandText: expandtext } }, options, opts );
                                                        toggleLinkDefault( $(this), e, opts );
                                                } );
 
                        // Bind the custom togglers
                        if ( $customTogglers && $customTogglers.length ) {
-                               $customTogglers.on( 'click.mw-collapse', function ( e, opts ) {
+                               $customTogglers.on( 'click.mw-collapsible', function ( e, opts ) {
                                        opts = $.extend( {}, options, opts );
                                        toggleLinkCustom( $(this), e, opts, $collapsible );
                                } );
                                        if ( !$toggle.length ) {
                                                $firstItem.eq(-1).prepend( $toggleLink );
                                        } else {
-                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                               $toggleLink = $toggle.off( 'click.mw-collapsible' ).on( 'click.mw-collapsible', function ( e, opts ) {
                                                        opts = $.extend( {}, options, opts );
                                                        toggleLinkPremade( $toggle, e, opts );
                                                } );
                                                }
                                                $collapsible.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
                                        } else {
-                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                               $toggleLink = $toggle.off( 'click.mw-collapsible' ).on( 'click.mw-collapsible', function ( e, opts ) {
                                                        opts = $.extend( {}, options, opts );
                                                        toggleLinkPremade( $toggle, e, opts );
                                                } );
                                        if ( !$toggle.length ) {
                                                $collapsible.prepend( $toggleLink );
                                        } else {
-                                               $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e, opts ) {
+                                               $toggleLink = $toggle.off( 'click.mw-collapsible' ).on( 'click.mw-collapsible', function ( e, opts ) {
                                                        opts = $.extend( {}, options, opts );
                                                        toggleLinkPremade( $toggle, e, opts );
                                                } );
index d1cb41d..0da9d87 100644 (file)
@@ -32,8 +32,8 @@ var mw = ( function ( $, undefined ) {
                 *
                 * If called with no arguments, all values will be returned.
                 *
-                * @param selection mixed String key or array of keys to get values for.
-                * @param fallback mixed Value to use in case key(s) do not exist (optional).
+                * @param {string|Array} selection String key or array of keys to get values for.
+                * @param {Mixed} [fallback] Value to use in case key(s) do not exist.
                 * @return mixed If selection was a string returns the value or null,
                 *  If selection was an array, returns an object of key/values (value is null if not found),
                 *  If selection was not passed or invalid, will return the 'values' object member (be careful as
@@ -73,8 +73,8 @@ var mw = ( function ( $, undefined ) {
                /**
                 * Sets one or multiple key/value pairs.
                 *
-                * @param selection {mixed} String key or array of keys to set values for.
-                * @param value {mixed} Value to set (optional, only in use when key is a string)
+                * @param {string|Object} selection String key to set value for, or object mapping keys to values.
+                * @param {Mixed} [value] Value to set (optional, only in use when key is a string)
                 * @return {Boolean} This returns true on success, false on failure.
                 */
                set: function ( selection, value ) {
@@ -96,7 +96,7 @@ var mw = ( function ( $, undefined ) {
                /**
                 * Checks if one or multiple keys exist.
                 *
-                * @param selection {mixed} String key or array of keys to check
+                * @param {Mixed} selection String key or array of keys to check
                 * @return {boolean} Existence of key(s)
                 */
                exists: function ( selection ) {
@@ -134,8 +134,7 @@ var mw = ( function ( $, undefined ) {
 
        Message.prototype = {
                /**
-                * Simple message parser, does $N replacement, HTML-escaping (only for
-                * 'escaped' format), and nothing else.
+                * Simple message parser, does $N replacement and nothing else.
                 *
                 * This may be overridden to provide a more complex message parser.
                 *
@@ -649,7 +648,7 @@ var mw = ( function ( $, undefined ) {
                         *
                         * @private
                         * @param {string|string[]} states Module states to filter by
-                        * @param {Array} modules List of module names to filter (optional, by default the entire
+                        * @param {Array} [modules] List of module names to filter (optional, by default the entire
                         * registry is used)
                         * @return {Array} List of filtered module names
                         */
@@ -1267,12 +1266,12 @@ var mw = ( function ( $, undefined ) {
                                 * Registers a module, letting the system know about it and its
                                 * properties. Startup modules contain calls to this function.
                                 *
-                                * @param module {String}: Module name
-                                * @param version {Number}: Module version number as a timestamp (falls backs to 0)
-                                * @param dependencies {String|Array|Function}: One string or array of strings of module
+                                * @param {string} module Module name
+                                * @param {number} version Module version number as a timestamp (falls backs to 0)
+                                * @param {string|Array|Function} dependencies One string or array of strings of module
                                 *  names on which this module depends, or a function that returns that array.
-                                * @param group {String}: Group which the module is in (optional, defaults to null)
-                                * @param source {String}: Name of the source. Defaults to local.
+                                * @param {string} [group=null] Group which the module is in
+                                * @param {string} [source='local'] Name of the source
                                 */
                                register: function ( module, version, dependencies, group, source ) {
                                        var m;
@@ -1374,10 +1373,10 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Executes a function as soon as one or more required modules are ready
                                 *
-                                * @param dependencies {String|Array} Module name or array of modules names the callback
+                                * @param {string|Array} dependencies Module name or array of modules names the callback
                                 *  dependends on to be ready before executing
-                                * @param ready {Function} callback to execute when all dependencies are ready (optional)
-                                * @param error {Function} callback to execute when if dependencies have a errors (optional)
+                                * @param {Function} [ready] callback to execute when all dependencies are ready
+                                * @param {Function} [error] callback to execute when if dependencies have a errors
                                 */
                                using: function ( dependencies, ready, error ) {
                                        var tod = typeof dependencies;
@@ -1411,15 +1410,15 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Loads an external script or one or more modules for future use
                                 *
-                                * @param modules {mixed} Either the name of a module, array of modules,
+                                * @param {string|Array} modules Either the name of a module, array of modules,
                                 *  or a URL of an external script or style
-                                * @param type {String} mime-type to use if calling with a URL of an
+                                * @param {string} [type='text/javascript'] mime-type to use if calling with a URL of an
                                 *  external script or style; acceptable values are "text/css" and
                                 *  "text/javascript"; if no type is provided, text/javascript is assumed.
-                                * @param async {Boolean} (optional) If true, load modules asynchronously
-                                *  even if document ready has not yet occurred. If false (default),
-                                *  block before document ready and load async after. If not set, true will
-                                *  be assumed if loading a URL, and false will be assumed otherwise.
+                                * @param {boolean} [async] If true, load modules asynchronously
+                                *  even if document ready has not yet occurred. If false, block before
+                                *  document ready and load async after. If not set, true will be
+                                *  assumed if loading a URL, and false will be assumed otherwise.
                                 */
                                load: function ( modules, type, async ) {
                                        var filtered, m, module, l;
@@ -1491,8 +1490,8 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Changes the state of a module
                                 *
-                                * @param module {String|Object} module name or object of module name/state pairs
-                                * @param state {String} state name
+                                * @param {string|Object} module module name or object of module name/state pairs
+                                * @param {string} state state name
                                 */
                                state: function ( module, state ) {
                                        var m;
@@ -1520,7 +1519,7 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Gets the version of a module
                                 *
-                                * @param module string name of module to get version for
+                                * @param {string} module name of module to get version for
                                 */
                                getVersion: function ( module ) {
                                        if ( registry[module] !== undefined && registry[module].version !== undefined ) {
@@ -1539,7 +1538,7 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Gets the state of a module
                                 *
-                                * @param module string name of module to get state for
+                                * @param {string} module name of module to get state for
                                 */
                                getState: function ( module ) {
                                        if ( registry[module] !== undefined && registry[module].state !== undefined ) {
@@ -1617,9 +1616,9 @@ var mw = ( function ( $, undefined ) {
                                /**
                                 * Create an HTML element string, with safe escaping.
                                 *
-                                * @param name The tag name.
-                                * @param attrs An object with members mapping element names to values
-                                * @param contents The contents of the element. May be either:
+                                * @param {string} name The tag name.
+                                * @param {Object} attrs An object with members mapping element names to values
+                                * @param {Mixed} contents The contents of the element. May be either:
                                 *  - string: The string is escaped.
                                 *  - null or undefined: The short closing form is used, e.g. <br/>.
                                 *  - this.Raw: The value attribute is included without escaping.
index 308e4ad..9f3ccf4 100644 (file)
                 * must have at least one pair)
                 * @param options.version Number: Version of bucket test, changing this forces rebucketing
                 * (optional, default: 0)
-                * @param options.tracked Boolean: Track the event of bucketing through the API module of
-                * the ClickTracking extension (optional, default: false)
                 * @param options.expires Number: Length of time (in days) until the user gets rebucketed
                 * (optional, default: 30)
                 * @return String: Bucket name - the randomly chosen key of the options.buckets object
                 *     mw.user.bucket( 'test', {
                 *         'buckets': { 'ignored': 50, 'control': 25, 'test': 25 },
                 *         'version': 1,
-                *         'tracked': true,
                 *         'expires': 7
                 *     } );
                 */
                        options = $.extend( {
                                buckets: {},
                                version: 0,
-                               tracked: false,
                                expires: 30
                        }, options || {} );
 
                                                break;
                                        }
                                }
-                               if ( options.tracked ) {
-                                       mw.loader.using( 'jquery.clickTracking', function () {
-                                               $.trackAction(
-                                                       'mediaWiki.user.bucket:' + key + '@' + version + ':' + bucket
-                                               );
-                                       } );
-                               }
                                $.cookie(
                                        'mediaWiki.user.bucket:' + key,
                                        version + ':' + bucket,
index 5211b0d..1bd7430 100644 (file)
                                $link.attr( 'title', tooltip );
                        }
 
-                       // Some skins don't have any portlets
-                       // just add it to the bottom of their 'sidebar' element as a fallback
-                       switch ( mw.config.get( 'skin' ) ) {
-                       case 'standard':
-                               $( '#quickbar' ).append( $link.after( '<br/>' ) );
-                               return $link[0];
-                       case 'nostalgia':
-                               $( '#searchform' ).before( $link ).before( ' &#124; ' );
-                               return $link[0];
-                       default: // Skins like chick, modern, monobook, myskin, simple, vector...
-
-                               // Select the specified portlet
-                               $portlet = $( '#' + portlet );
-                               if ( $portlet.length === 0 ) {
-                                       return null;
-                               }
-                               // Select the first (most likely only) unordered list inside the portlet
-                               $ul = $portlet.find( 'ul' ).eq( 0 );
-
-                               // If it didn't have an unordered list yet, create it
-                               if ( $ul.length === 0 ) {
-
-                                       $ul = $( '<ul>' );
+                       // Select the specified portlet
+                       $portlet = $( '#' + portlet );
+                       if ( $portlet.length === 0 ) {
+                               return null;
+                       }
+                       // Select the first (most likely only) unordered list inside the portlet
+                       $ul = $portlet.find( 'ul' ).eq( 0 );
 
-                                       // If there's no <div> inside, append it to the portlet directly
-                                       if ( $portlet.find( 'div:first' ).length === 0 ) {
-                                               $portlet.append( $ul );
-                                       } else {
-                                               // otherwise if there's a div (such as div.body or div.pBody)
-                                               // append the <ul> to last (most likely only) div
-                                               $portlet.find( 'div' ).eq( -1 ).append( $ul );
-                                       }
-                               }
-                               // Just in case..
-                               if ( $ul.length === 0 ) {
-                                       return null;
-                               }
+                       // If it didn't have an unordered list yet, create it
+                       if ( $ul.length === 0 ) {
 
-                               // Unhide portlet if it was hidden before
-                               $portlet.removeClass( 'emptyPortlet' );
+                               $ul = $( '<ul>' );
 
-                               // Wrap the anchor tag in a list item (and a span if $portlet is a Vector tab)
-                               // and back up the selector to the list item
-                               if ( $portlet.hasClass( 'vectorTabs' ) ) {
-                                       $item = $link.wrap( '<li><span></span></li>' ).parent().parent();
+                               // If there's no <div> inside, append it to the portlet directly
+                               if ( $portlet.find( 'div:first' ).length === 0 ) {
+                                       $portlet.append( $ul );
                                } else {
-                                       $item = $link.wrap( '<li></li>' ).parent();
+                                       // otherwise if there's a div (such as div.body or div.pBody)
+                                       // append the <ul> to last (most likely only) div
+                                       $portlet.find( 'div' ).eq( -1 ).append( $ul );
                                }
+                       }
+                       // Just in case..
+                       if ( $ul.length === 0 ) {
+                               return null;
+                       }
 
-                               // Implement the properties passed to the function
-                               if ( id ) {
-                                       $item.attr( 'id', id );
-                               }
-                               if ( accesskey ) {
-                                       $link.attr( 'accesskey', accesskey );
-                                       tooltip += ' [' + accesskey + ']';
-                                       $link.attr( 'title', tooltip );
-                               }
-                               if ( accesskey && tooltip ) {
-                                       util.updateTooltipAccessKeys( $link );
-                               }
+                       // Unhide portlet if it was hidden before
+                       $portlet.removeClass( 'emptyPortlet' );
 
-                               // Where to put our node ?
-                               // - nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
-                               if ( nextnode && nextnode.parentNode === $ul[0] ) {
-                                       $(nextnode).before( $item );
+                       // Wrap the anchor tag in a list item (and a span if $portlet is a Vector tab)
+                       // and back up the selector to the list item
+                       if ( $portlet.hasClass( 'vectorTabs' ) ) {
+                               $item = $link.wrap( '<li><span></span></li>' ).parent().parent();
+                       } else {
+                               $item = $link.wrap( '<li></li>' ).parent();
+                       }
 
-                               // - nextnode is a CSS selector for jQuery
-                               } else if ( typeof nextnode === 'string' && $ul.find( nextnode ).length !== 0 ) {
-                                       $ul.find( nextnode ).eq( 0 ).before( $item );
+                       // Implement the properties passed to the function
+                       if ( id ) {
+                               $item.attr( 'id', id );
+                       }
+                       if ( accesskey ) {
+                               $link.attr( 'accesskey', accesskey );
+                               tooltip += ' [' + accesskey + ']';
+                               $link.attr( 'title', tooltip );
+                       }
+                       if ( accesskey && tooltip ) {
+                               util.updateTooltipAccessKeys( $link );
+                       }
 
-                               // If the jQuery selector isn't found within the <ul>,
-                               // or if nextnode was invalid or not passed at all,
-                               // then just append it at the end of the <ul> (this is the default behavior)
-                               } else {
-                                       $ul.append( $item );
-                               }
+                       // Where to put our node ?
+                       // - nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
+                       if ( nextnode && nextnode.parentNode === $ul[0] ) {
+                               $(nextnode).before( $item );
 
+                       // - nextnode is a CSS selector for jQuery
+                       } else if ( typeof nextnode === 'string' && $ul.find( nextnode ).length !== 0 ) {
+                               $ul.find( nextnode ).eq( 0 ).before( $item );
 
-                               return $item[0];
+                       // If the jQuery selector isn't found within the <ul>,
+                       // or if nextnode was invalid or not passed at all,
+                       // then just append it at the end of the <ul> (this is the default behavior)
+                       } else {
+                               $ul.append( $item );
                        }
+
+                       return $item[0];
                },
 
                /**
index deff7e6..6397cd6 100644 (file)
  * This function will be deleted after it's used, so do not expand it to be
  * generally useful beyond startup.
  *
- * MediaWiki & jQuery compatibility:
- * - Internet Explorer 6.0+
- * - Firefox 10+
- * - Safari 5.0+
- * - Opera 11+
- * - Chrome
+ * See also:
+ * - https://www.mediawiki.org/wiki/Compatibility#Browser
+ * - http://jquery.com/browser-support/
  */
 
 /*jshint unused: false */
-function isCompatible() {
-       // IE < 6.0
-       if ( navigator.appVersion.indexOf( 'MSIE' ) !== -1
-               && parseFloat( navigator.appVersion.split( 'MSIE' )[1] ) < 6 )
-       {
-               return false;
+function isCompatible( ua ) {
+       if ( ua === undefined ) {
+               ua = navigator.userAgent;
        }
-       return true;
+
+       // MediaWiki JS or jQuery is known to have issues with:
+       return !(
+               // Internet Explorer < 6
+               ( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 6 ) ||
+                       // Firefox < 4
+                       ( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 4 )
+       );
 }
 
 /**
diff --git a/skins/Chick.php b/skins/Chick.php
deleted file mode 100644 (file)
index 75b807a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Chick: A lightweight Monobook skin with no sidebar, the sidebar links are
- * given at the bottom of the page instead, as in the unstyled MySkin.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Skins
- */
-
-if( !defined( 'MEDIAWIKI' ) )
-       die( -1 );
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @ingroup Skins
- */
-class SkinChick extends SkinTemplate {
-       var $skinname = 'chick', $stylename = 'chick',
-       $template = 'MonoBookTemplate', $useHeadElement = true;
-
-       /**
-        * @param $out OutputPage
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $out->addModuleStyles( 'skins.chick' );
-
-               // TODO: Migrate all of these to RL
-               $out->addStyle( 'chick/IE60Fixes.css', 'screen,handheld', 'IE 6' );
-       }
-}
diff --git a/skins/MySkin.php b/skins/MySkin.php
deleted file mode 100644 (file)
index fb49b88..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * MySkin: Monobook without the CSS. The idea is that you
- * customise it using user or site CSS.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Skins
- */
-
-if( !defined( 'MEDIAWIKI' ) )
-       die( -1 );
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @ingroup Skins
- */
-class SkinMySkin extends SkinTemplate {
-       var $skinname = 'myskin', $stylename = 'myskin',
-               $template = 'MonoBookTemplate', $useHeadElement = true;
-}
diff --git a/skins/Nostalgia.php b/skins/Nostalgia.php
deleted file mode 100644 (file)
index 3028915..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * Nostalgia: A skin which looks like Wikipedia did in its first year (2001).
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Skins
- */
-
-if( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class SkinNostalgia extends SkinLegacy {
-       var $skinname = 'nostalgia', $stylename = 'nostalgia',
-               $template = 'NostalgiaTemplate';
-
-       /**
-        * @param $out OutputPage
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-               $out->addModuleStyles( 'skins.nostalgia' );
-       }
-
-}
-
-class NostalgiaTemplate extends LegacyTemplate {
-
-       /**
-        * @return string
-        */
-       function doBeforeContent() {
-               $s = "\n<div id='content'>\n<div id='top'>\n";
-               $s .= '<div id="logo">' . $this->getSkin()->logoText( 'right' ) . '</div>';
-
-               $s .= $this->pageTitle();
-               $s .= $this->pageSubtitle() . "\n";
-
-               $s .= '<div id="topbar">';
-               $s .= $this->topLinks() . "\n<br />";
-
-               $notice = $this->getSkin()->getSiteNotice();
-               if( $notice ) {
-                       $s .= "\n<div id='siteNotice'>$notice</div>\n";
-               }
-               $s .= $this->pageTitleLinks();
-
-               $ol = $this->otherLanguages();
-               if( $ol ) {
-                       $s .= '<br />' . $ol;
-               }
-
-               $s .= $this->getSkin()->getCategories();
-
-               $s .= "<br clear='all' /></div><hr />\n</div>\n";
-               $s .= "\n<div id='article'>";
-
-               return $s;
-       }
-
-       /**
-        * @return string
-        */
-       function topLinks() {
-               $sep = " |\n";
-
-               $s = $this->getSkin()->mainPageLink() . $sep
-                 . Linker::specialLink( 'Recentchanges' );
-
-               if ( $this->data['isarticle'] ) {
-                       $s .= $sep . '<strong>' . $this->editThisPage() . '</strong>' . $sep . $this->talkLink() .
-                                       $sep . $this->historyLink();
-               }
-
-               /* show links to different language variants */
-               $s .= $this->variantLinks();
-               $s .= $this->extensionTabLinks();
-               if ( !$this->data['loggedin'] ) {
-                       $s .= $sep . Linker::specialLink( 'Userlogin' );
-               } else {
-                       /* show user page and user talk links */
-                       $user = $this->getSkin()->getUser();
-                       $s .= $sep . Linker::link( $user->getUserPage(), wfMessage( 'mypage' )->escaped() );
-                       $s .= $sep . Linker::link( $user->getTalkPage(), wfMessage( 'mytalk' )->escaped() );
-                       if ( $user->getNewtalk() ) {
-                               $s .= ' *';
-                       }
-                       /* show watchlist link */
-                       $s .= $sep . Linker::specialLink( 'Watchlist' );
-                       /* show my contributions link */
-                       $s .= $sep . Linker::link(
-                               SpecialPage::getSafeTitleFor( 'Contributions', $this->data['username'] ),
-                               wfMessage( 'mycontris' )->escaped() );
-                       /* show my preferences link */
-                       $s .= $sep . Linker::specialLink( 'Preferences' );
-                       /* show upload file link */
-                       if( UploadBase::isEnabled() && UploadBase::isAllowed( $user ) === true ) {
-                               $s .= $sep . $this->getUploadLink();
-                       }
-
-                       /* show log out link */
-                       $s .= $sep . Linker::specialLink( 'Userlogout' );
-               }
-
-               $s .= $sep . $this->specialPagesList();
-
-               return $s;
-       }
-
-       /**
-        * @return string
-        */
-       function doAfterContent() {
-               $s = "\n</div><br clear='all' />\n";
-
-               $s .= "\n<div id='footer'><hr />";
-
-               $s .= $this->bottomLinks();
-               $s .= "\n<br />" . $this->pageStats();
-               $s .= "\n<br />" . $this->getSkin()->mainPageLink()
-                               . ' | ' . $this->getSkin()->aboutLink()
-                               . ' | ' . $this->searchForm();
-
-               $s .= "\n</div>\n</div>\n";
-
-               return $s;
-       }
-}
diff --git a/skins/Simple.php b/skins/Simple.php
deleted file mode 100644 (file)
index 9a3ab94..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- * Simple: A lightweight skin with a simple white-background sidebar and no
- * top bar.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Skins
- */
-
-if( !defined( 'MEDIAWIKI' ) )
-       die( -1 );
-
-/** */
-require_once( __DIR__ . '/MonoBook.php' );
-
-/**
- * Inherit main code from SkinTemplate, set the CSS and template filter.
- * @ingroup Skins
- */
-class SkinSimple extends SkinTemplate {
-       var $skinname = 'simple', $stylename = 'simple',
-               $template = 'MonoBookTemplate', $useHeadElement = true;
-
-       /**
-        * @param $out OutputPage
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-
-               $out->addModuleStyles( 'skins.simple' );
-
-               /* Add some userprefs specific CSS styling */
-               $rules = array();
-               $underline = "";
-
-               if ( $this->getUser()->getOption( 'underline' ) < 2 ) {
-                       $underline = "text-decoration: " . $this->getUser()->getOption( 'underline' ) ? 'underline !important' : 'none' . ";";
-               }
-               $style = implode( "\n", $rules );
-               $out->addInlineStyle( $style, 'flip' );
-
-       }
-}
diff --git a/skins/Standard.php b/skins/Standard.php
deleted file mode 100644 (file)
index 5b358e0..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-/**
- * Standard (a.k.a. Classic) skin: old MediaWiki default skin
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- *
- * @file
- * @ingroup Skins
- */
-
-if( !defined( 'MEDIAWIKI' ) ) {
-       die( -1 );
-}
-
-/**
- * @todo document
- * @ingroup Skins
- */
-class SkinStandard extends SkinLegacy {
-       var $skinname = 'standard', $stylename = 'standard',
-               $template = 'StandardTemplate';
-
-       /**
-        * @param $out OutputPage
-        */
-       function setupSkinUserCss( OutputPage $out ) {
-               parent::setupSkinUserCss( $out );
-               $out->addModuleStyles( 'skins.standard' );
-
-               $qb = $this->qbSetting();
-               $rules = array();
-
-               if ( 2 == $qb ) { # Right
-                       $rules[] = "/* @noflip */#quickbar { position: absolute; top: 4px; right: 4px; border-left: 2px solid #000000; }";
-                       $rules[] = "/* @noflip */#article, #mw-data-after-content { margin-left: 4px; margin-right: 152px; }";
-                       $rules[] = "/* @noflip */#topbar, #footer { margin-right: 152px; }";
-               } elseif ( 1 == $qb || 3 == $qb ) {
-                       $rules[] = "/* @noflip */#quickbar { position: absolute; top: 4px; left: 4px; border-right: 1px solid gray; }";
-                       $rules[] = "/* @noflip */#article, #mw-data-after-content { margin-left: 152px; margin-right: 4px; }";
-                       $rules[] = "/* @noflip */#topbar, #footer { margin-left: 152px; }";
-                       if( 3 == $qb ) {
-                               $rules[] = "/* @noflip */#quickbar { position: fixed; padding: 4px; }";
-                       }
-               } elseif ( 4 == $qb ) {
-                       $rules[] = "/* @noflip */#quickbar { position: fixed; right: 0; top: 0; padding: 4px; }";
-                       $rules[] = "/* @noflip */#quickbar { border-right: 1px solid gray; }";
-                       $rules[] = "/* @noflip */#article, #mw-data-after-content { margin-right: 152px; margin-left: 4px; }";
-                       $rules[] = "/* @noflip */#topbar, #footer { margin-right: 152px; }";
-               }
-               $style = implode( "\n", $rules );
-               $out->addInlineStyle( $style, 'flip' );
-       }
-
-}
-
-class StandardTemplate extends LegacyTemplate {
-
-       /**
-        * @return string
-        */
-       function doAfterContent() {
-               wfProfileIn( __METHOD__ );
-               wfProfileIn( __METHOD__ . '-1' );
-
-               $s = "\n</div><br style=\"clear:both\" />\n";
-               $s .= "\n<div id='footer'>";
-               $s .= '<table cellspacing="0"><tr>';
-
-               wfProfileOut( __METHOD__ . '-1' );
-               wfProfileIn( __METHOD__ . '-2' );
-               $l = $this->getSkin()->getLanguage()->alignStart();
-               $s .= "<td class='bottom' style='text-align: $l; vertical-align: top;'>";
-
-               $s .= $this->bottomLinks();
-               $s .= "\n<br />" . $this->getSkin()->getLanguage()->pipeList( array(
-                       $this->getSkin()->mainPageLink(),
-                       $this->getSkin()->aboutLink(),
-                       Linker::specialLink( 'Recentchanges' ),
-                       $this->searchForm() ) )
-                       . '<br /><span id="pagestats">' . $this->pageStats() . '</span>';
-
-               $s .= '</td>';
-               $s .= "</tr></table>\n</div>\n</div>\n";
-
-               wfProfileOut( __METHOD__ . '-2' );
-               wfProfileIn( __METHOD__ . '-3' );
-               if ( $this->getSkin()->qbSetting() != 0 ) {
-                       $s .= $this->quickBar();
-               }
-               wfProfileOut( __METHOD__ . '-3' );
-               wfProfileOut( __METHOD__ );
-               return $s;
-       }
-
-       /**
-        * @return string
-        */
-       function quickBar() {
-               global $wgContLang;
-
-               wfProfileIn( __METHOD__ );
-
-               $action = $this->getSkin()->getRequest()->getText( 'action' );
-               $wpPreview = $this->getSkin()->getRequest()->getBool( 'wpPreview' );
-               $title = $this->getSkin()->getTitle();
-               $tns = $title->getNamespace();
-
-               $s = "\n<div id='quickbar'>";
-               $s .= "\n" . $this->getSkin()->logoText() . "\n<hr class='sep' />";
-
-               $sep = "\n<br />";
-
-               # Use the first heading from the Monobook sidebar as the "browse" section
-               $bar = $this->getSkin()->buildSidebar();
-               unset( $bar['SEARCH'] );
-               unset( $bar['LANGUAGES'] );
-               unset( $bar['TOOLBOX'] );
-
-               $barnumber = 1;
-               foreach ( $bar as $browseLinks ) {
-                       if ( is_array( $browseLinks ) ) {
-                               if ( $barnumber > 1 ) {
-                                       $s .= "\n<hr class='sep' />";
-                               }
-                               foreach ( $browseLinks as $link ) {
-                                       if ( $link['text'] != '-' ) {
-                                               $s .= "<a href=\"{$link['href']}\">" .
-                                                       htmlspecialchars( $link['text'] ) . '</a>' . $sep;
-                                       }
-                               }
-                       }
-                       if ( $barnumber == 1 ) {
-                               // only show watchlist link if logged in
-                               if( $this->data['loggedin'] ) {
-                                       $s.= Linker::specialLink( 'Watchlist' ) ;
-                                       $s .= $sep . Linker::linkKnown(
-                                               SpecialPage::getTitleFor( 'Contributions' ),
-                                               wfMessage( 'mycontris' )->escaped(),
-                                               array(),
-                                               array( 'target' => $this->data['username'] )
-                                       );
-                               }
-                       }
-                       $barnumber = $barnumber + 1;
-               }
-
-               $s .= "\n<hr class='sep' />";
-               $articleExists = $title->getArticleID();
-               if ( $this->data['isarticle'] || $action == 'edit' || $action == 'history' || $wpPreview ) {
-                       if( $this->data['isarticle'] ) {
-                               $s .= '<strong>' . $this->editThisPage() . '</strong>';
-                       } else { # backlink to the article in edit or history mode
-                               if( $articleExists ){ # no backlink if no article
-                                       switch( $tns ) {
-                                               case NS_TALK:
-                                               case NS_USER_TALK:
-                                               case NS_PROJECT_TALK:
-                                               case NS_FILE_TALK:
-                                               case NS_MEDIAWIKI_TALK:
-                                               case NS_TEMPLATE_TALK:
-                                               case NS_HELP_TALK:
-                                               case NS_CATEGORY_TALK:
-                                                       $text = wfMessage('viewtalkpage');
-                                                       break;
-                                               case NS_MAIN:
-                                                       $text = wfMessage( 'articlepage' );
-                                                       break;
-                                               case NS_USER:
-                                                       $text = wfMessage( 'userpage' );
-                                                       break;
-                                               case NS_PROJECT:
-                                                       $text = wfMessage( 'projectpage' );
-                                                       break;
-                                               case NS_FILE:
-                                                       $text = wfMessage( 'imagepage' );
-                                                       break;
-                                               case NS_MEDIAWIKI:
-                                                       $text = wfMessage( 'mediawikipage' );
-                                                       break;
-                                               case NS_TEMPLATE:
-                                                       $text = wfMessage( 'templatepage' );
-                                                       break;
-                                               case NS_HELP:
-                                                       $text = wfMessage( 'viewhelppage' );
-                                                       break;
-                                               case NS_CATEGORY:
-                                                       $text = wfMessage( 'categorypage' );
-                                                       break;
-                                               default:
-                                                       $text = wfMessage( 'articlepage' );
-                                       }
-
-                                       $link = $title->getText();
-                                       $nstext = $wgContLang->getNsText( $tns );
-                                       if( $nstext ) { # add namespace if necessary
-                                               $link = $nstext . ':' . $link;
-                                       }
-
-                                       $s .= Linker::link( Title::newFromText( $link ), $text->escaped() );
-                               } elseif( $title->getNamespace() != NS_SPECIAL ) {
-                                       # we just throw in a "New page" text to tell the user that he's in edit mode,
-                                       # and to avoid messing with the separator that is prepended to the next item
-                                       $s .= '<strong>' . wfMessage( 'newpage' )->escaped() . '</strong>';
-                               }
-                       }
-
-                       # "Post a comment" link
-                       if( ( $title->isTalkPage() || $this->getSkin()->getOutput()->showNewSectionLink() ) && $action != 'edit' && !$wpPreview )
-                               $s .= '<br />' . Linker::link(
-                                       $title,
-                                       wfMessage( 'postcomment' )->escaped(),
-                                       array(),
-                                       array(
-                                               'action' => 'edit',
-                                               'section' => 'new'
-                                       )
-                               );
-
-                       /**
-                        * Watching could cause problems in edit mode:
-                        * if user edits article, then loads "watch this article" in background and then saves
-                        * article with "Watch this article" checkbox disabled, the article is transparently
-                        * unwatched. Therefore we do not show the "Watch this page" link in edit mode.
-                        */
-                       if ( $this->data['loggedin'] && $articleExists ) {
-                               if( $action != 'edit' && $action != 'submit' ) {
-                                       $s .= $sep . $this->watchThisPage();
-                               }
-                               if ( $title->userCan( 'edit' ) )
-                                       $s .= $sep . $this->moveThisPage();
-                       }
-                       if ( $this->getSkin()->getUser()->isAllowed( 'delete' ) && $articleExists ) {
-                               $s .= $sep . $this->deleteThisPage() .
-                               $sep . $this->protectThisPage();
-                       }
-                       $s .= $sep . $this->talkLink();
-                       if( $articleExists && $action != 'history' ) {
-                               $s .= $sep . $this->historyLink();
-                       }
-                       $s .= $sep . $this->whatLinksHere();
-
-                       if( $this->getSkin()->getOutput()->isArticleRelated() ) {
-                               $s .= $sep . $this->watchPageLinksLink();
-                       }
-
-                       if (
-                               NS_USER == $title->getNamespace() ||
-                               $title->getNamespace() == NS_USER_TALK
-                       ) {
-
-                               $id = User::idFromName( $title->getText() );
-                               $ip = User::isIP( $title->getText() );
-
-                               if( $id || $ip ){
-                                       $s .= $sep . $this->userContribsLink();
-                               }
-                               if( $this->getSkin()->showEmailUser( $id ) ) {
-                                       $s .= $sep . $this->emailUserLink();
-                               }
-                       }
-                       $s .= "\n<br /><hr class='sep' />";
-               }
-
-               if( UploadBase::isEnabled() && UploadBase::isAllowed( $this->getSkin()->getUser() ) === true ) {
-                       $s .= $this->getUploadLink() . $sep;
-               }
-
-               $s .= Linker::specialLink( 'Specialpages' );
-
-               global $wgSiteSupportPage;
-               if( $wgSiteSupportPage ) {
-                       $s .= "\n<br /><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
-                       '" class="internal">' . wfMessage( 'sitesupport' )->escaped() . '</a>';
-               }
-
-               $s .= "\n<br /></div>\n";
-               wfProfileOut( __METHOD__ );
-               return $s;
-       }
-}
diff --git a/skins/chick/IE60Fixes.css b/skins/chick/IE60Fixes.css
deleted file mode 100644 (file)
index 18e9655..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* 6.0 - only fixes */
-/* content area */
-/* workaround for various ie float bugs */
-#column-content {
-    float: none;
-    margin-left: 0;
-    height: 1%;
-}
-#column-content #content {
-    margin-left: 12.2em;
-    margin-top: 3em;
-    height: 1%;
-}
-#column-one {
-    position: absolute;
-    top: 0;
-    left: 0;
-    z-index: 4;
-}
-#footer {
-    margin-left: 13.6em;
-    border-left: 1px solid #fabd23;
-}
-
-/* the tabs */
-
-#p-cactions {
-    z-index: 3;
-}
-
-#p-cactions li {
-    padding-bottom: 0 !important;
-    border: none;
-    background-color: transparent;
-    cursor: default;
-    float: none !important;
-}
-#p-cactions li a {
-    display: inline-block !important;
-    vertical-align: top;
-    padding-bottom: 0;
-    border: solid #aaa;
-    border-width: 1px 1px 0;
-}
-#p-cactions li.selected a {
-    border-color: #fabd23;
-    padding-bottom: 0.17em;
-}
-#p-cactions li a:hover {
-    padding-bottom: 0.17em;
-}
-#portal-personaltools {
-    padding-bottom: 0.1em;
-}
-#bodyContent a.external {
-    background: url(external.png) center right no-repeat;
-    padding-right: 13px;
-}
-
-/* show the hand */
-#p-logo a,
-#p-logo a:hover {
-    cursor: pointer;
-}
-div.visualClear {
-    width:100%;
-    line-height: 0;
-}
-textarea {
-    width: 96%;
-}
-
-div.editsection,
-#catlinks,
-div.tright,
-div.tleft {
-    position: relative;
-}
-/*{ border:1px solid Red !important;}*/
diff --git a/skins/chick/main.css b/skins/chick/main.css
deleted file mode 100644 (file)
index 5e2a2e7..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
-** MediaWiki 'chick' style sheet for PDAs or other small-screen devices.
-** Copyright Timwi
-** License: GPL (http://www.gnu.org/copyleft/gpl.html)
-**
-** Loosely based on Monobook by Gabriel Wicke
-*/
-
-body {
-       font-family: sans-serif;
-       color: black;
-       background: white;
-       margin: 0;
-       padding: 0.3em;
-}
-
-a { color: #002bb8; }
-a:visited { color: #5a3696; }
-a:active { color: #ffa500; }
-a.stub { color: #772233; }
-a.new,
-#p-personal a.new { color:#ba0000; }
-a.new:visited,
-#p-personal a.new:visited { color:#a55858; }
-
-img {
-       border: none;
-       vertical-align: middle;
-}
-p {
-       margin: 0.4em 0em 0.5em 0em;
-       line-height: 1.5em;
-}
-
-p img { margin: 0; }
-
-hr {
-       height: 1px;
-       color: #aaaaaa;
-       background-color: #aaaaaa;
-       border: 0;
-       margin: 0.2em 0 0.2em 0;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       color: black;
-       background: none;
-       font-weight: normal;
-       margin: 0;
-       overflow: hidden;
-       padding-top: 0.5em;
-       padding-bottom: 0.17em;
-       border-bottom: 1px solid #aaaaaa;
-}
-.editsection {
-       font-weight: normal;
-}
-h1 { font-size: 188%; }
-h1 .editsection { font-size: 53.2%; }
-h2 { font-size: 150%; }
-h2 .editsection { font-size: 66.7%; }
-h3, h4, h5, h6 {
-       border-bottom: none;
-       font-weight: bold;
-}
-h3 { font-size: 132%; }
-h3 .editsection { font-size: 75.8%; }
-h4 { font-size: 116%; }
-h4 .editsection { font-size: 86.2%; }
-h5 { font-size: 100%; }
-h6 { font-size: 80%;  }
-h6 .editsection { font-size: 125%; }
-
-ul {
-       line-height: 1.5em;
-       margin: 0.3em 0 0 1.5em;
-       padding:0;
-}
-ol {
-       line-height: 1.5em;
-       margin: 0.3em 0 0 3.2em;
-       padding:0;
-       list-style-image: none;
-}
-li { margin-bottom: 0.1em; }
-dt {
-       font-weight: bold;
-       margin-bottom: 0.1em;
-}
-dl{
-       margin-top: 0.2em;
-       margin-bottom: 0.5em;
-}
-dd {
-       line-height: 1.5em;
-       margin-left: 2em;
-       margin-bottom: 0.1em;
-}
-
-fieldset {
-       border: 1px solid #2f6fab;
-       margin: 1em 0em 1em 0em;
-       padding: 0em 1em 1em 1em;
-       line-height: 1.5em;
-}
-legend {
-       background: white;
-       padding: 0.5em;
-       font-size: 95%;
-}
-form {
-       border: none;
-       margin: 0;
-}
-
-textarea {
-       border: 1px solid #2f6fab;
-       color: black;
-       background-color: white;
-       width: 100%;
-       padding: 0.1em;
-       overflow: auto;
-}
-/* hide this from ie/mac and konq2.2 */
-@media All {
-       head:first-child+body input {
-               visibility: visible;
-               border: 1px solid #2f6fab;
-               color: black;
-               background-color: white;
-               vertical-align: middle;
-               padding: 0.2em;
-       }
-}
-input.historysubmit {
-       padding: 0 0.3em 0.3em 0.3em !important;
-       font-size: 94%;
-       cursor: pointer;
-       height: 1.7em !important;
-       margin-left: 1.6em;
-}
-input[type="radio"],
-input[type="checkbox"] { border:none; }
-select {
-       border: 1px solid #2f6fab;
-       color: black;
-       vertical-align: top;
-}
-q {
-       font-family: Times, "Times New Roman", serif;
-       font-style: italic;
-}
-code { background-color: #f9f9f9; }
-pre, .mw-code {
-       padding: 1em;
-       border: 1px dashed #2f6fab;
-       color: black;
-       background-color: #f9f9f9;
-       line-height: 1.1em;
-}
-
-/*
-** the main content area
-*/
-
-span.subpages { display: block; }
-
-/* Some space under the headers in the content area */
-#bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; }
-#bodyContent h3,
-#bodyContent h4,
-#bodyContent h5 {
-       margin-bottom: 0.3em;
-}
-#firstHeading { margin-bottom:0.1em; }
-
-/* user notification thing */
-.usermessage {
-       background-color: #ffce7b;
-       border: 1px solid #ffa500;
-       color: black;
-       font-weight: bold;
-       margin: 0.1em 0 0 0;
-       padding: 2px 5px;
-       vertical-align: middle;
-}
-#siteNotice {
-       text-align: center;
-       font-size: 95%;
-       padding: 0 0.9em 0 0.9em;
-}
-#siteNotice p { margin: 0; padding: 0; }
-.error {
-       color: red;
-       font-size: larger;
-}
-.catlinks {
-       border:1px solid #aaaaaa;
-       background-color:#f9f9f9;
-       padding: 2px 5px;
-       margin: 0.1em 0 0 0;
-       clear: both;
-}
-.catlinks { margin: 0; padding: 0; }
-
-/* emulate center */
-.center {
-       width: 100%;
-       text-align: center;
-}
-*.center * {
-       margin-left: auto;
-       margin-right: auto;
-}
-/* small for tables and similar */
-.small { font-size: 94%; }
-table.small { font-size: 100% }
-
-/*
-** content styles
-*/
-
-#toc {
-       /*border:1px solid #2f6fab;*/
-       border:1px solid #aaaaaa;
-       background-color:#f9f9f9;
-       padding:5px;
-       font-size: 95%;
-}
-#toc ul { margin: 0 2em; }
-#toc .toctoggle { font-size: 94%; }
-#toc .editsection {
-       margin-top: 0.7em;
-       font-size: 94%;
-}
-
-/* images */
-/* @noflip */div.floatright, table.floatright {
-       margin: 0;
-       border: 0.5em solid white;
-       border-width: 0.5em 0 0.8em 1.4em;
-}
-div.floatright p { font-style: italic; }
-/* @noflip */div.floatleft, table.floatleft {
-       margin: 0.3em 0.5em 0.5em 0;
-       border: 0.5em solid white;
-       border-width: 0.5em 1.4em 0.8em 0;
-}
-div.floatleft p { font-style: italic; }
-/* thumbnails */
-div.thumb {
-       margin-bottom: 0.5em;
-       width: auto;
-}
-div.thumbinner {
-       border:1px solid #cccccc;
-       padding: 3px !important;
-       background-color:#f9f9f9;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-html .thumbimage {
-       border:1px solid #cccccc;
-}
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4em;
-       padding: 0.3em 0 0.1em 0;
-}
-div.magnify {
-       float: right;
-       border: none !important;
-       background: none !important;
-}
-div.magnify a, div.magnify img {
-       display: block;
-       border: none !important;
-       background: none !important;
-}
-/* @noflip */div.tright {
-       margin: 0.5em 0 1.3em 1.4em;
-}
-/* @noflip */div.tleft {
-       margin: 0.5em 1.4em 1.3em 0;
-}
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/*
-** classes for special content elements like town boxes
-** intended to be referenced directly from the wiki src
-*/
-
-/*
-** User styles
-*/
-/* table standards */
-table.rimage {
-       float:right;
-       position:relative;
-       margin-left:1em;
-       margin-bottom:1em;
-       text-align:center;
-}
-.toccolours {
-       border:1px solid #aaaaaa;
-       background-color:#f9f9f9;
-       padding:5px;
-       font-size: 95%;
-}
-
-/*
-** edit views etc
-*/
-.special li {
-       line-height: 1.4em;
-       margin: 0;
-       padding: 0;
-}
-
-a.external { color: #3366bb; }
-div#footer { text-align: center; }
-ul#f-list li { list-style: none;  text-align: center; }
-div.portlet { margin: 0.5em 0; }
-
-.redirectText {
-       font-size:150%;
-       margin:5px;
-}
-
-ul.special li.not-patrolled, ol.special li.not-patrolled {
-       background-color: #ffa;
-}
-div.patrollink {
-       font-size: 75%;
-       text-align: right;
-}
-
-span.updatedmarker {
-       color:black;
-       background-color:#00FF00;
-}
-
-div.gallerybox {
-       width:  150px;
-}
-
-#xjump-to-nav {
-       display: none;
-}
-
-.templatesUsed { margin-top: 1.5em; }
-
-#footer {
-       background-color: white;
-       border-top: 1px solid #fabd23;
-       border-bottom: 1px solid #fabd23;
-       margin: .6em 0 1em 0;
-       padding: .4em 0 1.2em 0;
-       text-align: center;
-       font-size: 90%;
-}
-#f-poweredbyico, #f-copyrightico {
-       display: inline;
-}
index 4b236b4..147cd15 100644 (file)
@@ -17,7 +17,7 @@ div#column-content {
 }
 div#content {
        margin: 2.8em 0 0 12.2em;
-       padding: 0 1em 1em 1em;
+       padding: 1em;
        position: relative;
        z-index: 2;
 }
@@ -93,6 +93,9 @@ pre, .mw-code {
        line-height: 1.1em;
 }
 
+#firstHeading {
+       padding-top: 0;
+}
 /*
 ** the main content area
 */
diff --git a/skins/myskin/main.css b/skins/myskin/main.css
deleted file mode 100644 (file)
index f3ab020..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/* this file must be empty */
diff --git a/skins/nostalgia/screen.css b/skins/nostalgia/screen.css
deleted file mode 100644 (file)
index aed5715..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-body {
-       /* background color is set separately on page type */
-       color: black;
-}
-
-#specialform {
-       display: inline;
-}
-
-#powersearch {
-       background: #DDEEFF;
-       border-style: solid;
-       border-width: 1px;
-       padding: 2px;
-}
-
-a.new {
-       color: #ba0000;
-}
-
-a.interwiki,
-a.external {
-       color: #3366BB;
-}
-
-a.printable {
-       text-decoration: underline;
-}
-
-a.stub {
-       color: #772233;
-       text-decoration: none;
-}
-
-h1.pagetitle {
-       padding-top: 0;
-       margin-top: 0;
-       padding-bottom: 0;
-       margin-bottom: 0;
-}
-
-h2, h3, h4, h5, h6 {
-       margin-bottom: 0;
-}
-
-textarea {
-       overflow: auto;
-}
-
-p.subtitle {
-       padding-top: 0;
-       margin-top: 0;
-}
-div.sitenotice {
-       clear: both;
-}
diff --git a/skins/simple/discussionitem_icon.gif b/skins/simple/discussionitem_icon.gif
deleted file mode 100644 (file)
index e3ca6d9..0000000
Binary files a/skins/simple/discussionitem_icon.gif and /dev/null differ
diff --git a/skins/simple/external.png b/skins/simple/external.png
deleted file mode 100644 (file)
index acf260f..0000000
Binary files a/skins/simple/external.png and /dev/null differ
diff --git a/skins/simple/file_icon.gif b/skins/simple/file_icon.gif
deleted file mode 100644 (file)
index 69dbeaf..0000000
Binary files a/skins/simple/file_icon.gif and /dev/null differ
diff --git a/skins/simple/link_icon.gif b/skins/simple/link_icon.gif
deleted file mode 100644 (file)
index 168c1a2..0000000
Binary files a/skins/simple/link_icon.gif and /dev/null differ
diff --git a/skins/simple/lock_icon.gif b/skins/simple/lock_icon.gif
deleted file mode 100644 (file)
index 8284403..0000000
Binary files a/skins/simple/lock_icon.gif and /dev/null differ
diff --git a/skins/simple/mail_icon.gif b/skins/simple/mail_icon.gif
deleted file mode 100644 (file)
index cf5680d..0000000
Binary files a/skins/simple/mail_icon.gif and /dev/null differ
diff --git a/skins/simple/main.css b/skins/simple/main.css
deleted file mode 100644 (file)
index edb1d7d..0000000
+++ /dev/null
@@ -1,427 +0,0 @@
-/**
- * For clarity, explicitly state some recommendations from
- * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right.
- */
-
-h1 {
-       font-size: 2em;
-}
-h2 {
-       font-size: 1.5em;
-}
-h3 {
-       font-size: 1.17em;
-}
-h5 {
-       font-size: .83em;
-}
-h6 {
-       font-size: .75em;
-}
-h1, h2, h3, h4, h5, h6 {
-       font-weight: bolder;
-}
-
-/* Now the custom parts */
-
-/* Make edit sections (which are inside h# tags) normal-sized */
-.editsection {
-       font-weight: normal;
-}
-h1 .editsection {
-       font-size: 50%;
-}
-h2 .editsection {
-       font-size: 66.7%;
-}
-h3 .editsection {
-       font-size: 85.5%;
-}
-h5 .editsection {
-       font-size: 120%;
-}
-h6 .editsection {
-       font-size: 133%;
-}
-
-#toolbar {
-       display: none;
-}
-
-div.center {
-       text-align: center;
-}
-
-#contentSub {
-       padding-left: 2em;
-}
-
-a {
-       text-decoration: none;
-}
-
-a:hover {
-       text-decoration: underline;
-}
-
-#column-content {
-       width: 100%;
-       float: right;
-       margin: 0 0 0.6em -12.2em;
-       padding: 0;
-}
-
-#content {
-       margin: 0em 0 0 12.2em;
-       padding: 0em 1em 1.5em 1em;
-       border-left: 1px solid #959595;
-       line-height: 1.5em;
-}
-
-#column-one {
-       position: absolute;
-       top: 0;
-       left: 0;
-}
-
-/* Hide, but keep accessible for screen-readers */
-#column-one h2 {
-       position: absolute;
-       top: -9999px;
-}
-
-body {
-       margin: 0;
-       padding: 0;
-}
-
-#globalWrapper {
-       width: 100%;
-       height: 100%;
-       margin: 0;
-       padding: 0;
-}
-.visualClear {
-       clear: both;
-}
-
-img {
-       border: none;
-}
-p {
-       margin: 0.4em 0em 0.5em 0em;
-       line-height: 1.5em;
-}
-p img {
-       margin: 0;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       margin: 0;
-       padding-top: 0.5em;
-       padding-bottom: 0.17em;
-}
-fieldset {
-       margin: 1em 0em 1em 0em;
-       padding: 0em 1em 1em 1em;
-}
-.usermessage {
-       background-color: #ffce7b;
-       border: 1px solid #ffa500;
-       color: black;
-       font-weight: bold;
-       margin: 2em 0em 1em 0em;
-       padding: 0.5em 1em;
-       vertical-align: middle;
-}
-.error {
-       color: red;
-       font-size: larger;
-}
-
-table.rimage {
-       float: right;
-       position: relative;
-       margin-left: 1em;
-       margin-bottom: 1em;
-       text-align: center;
-}
-
-.portlet {
-       border: none;
-       float: none;
-       padding: 0;
-       width: 11.8em;
-       overflow: hidden;
-}
-.portlet h4 {
-       font-weight: normal;
-       white-space: nowrap;
-}
-.portlet h5 {
-       padding: 0em 1em 0em 0.5em;
-       display: inline;
-       height: 1em;
-       font-weight: normal;
-       white-space: nowrap;
-}
-.portlet h6 {
-       padding: 0em 1em 0em 1em;
-       display: block;
-       height: 1.2em;
-       font-weight: normal;
-       white-space: nowrap;
-}
-.pBody {
-       border-collapse: collapse;
-       padding: 0 0.8em 0.3em 0.5em;
-}
-.portlet h1,
-.portlet h2,
-.portlet h3,
-.portlet h4 {
-       margin: 0;
-       padding: 0;
-       font-size: small;
-}
-
-#p-search .pBody {
-       text-align: center;
-}
-
-#searchInput {
-       width: 100%;
-       clear: both;
-       margin: 0 0 0 0;
-}
-
-input.searchButton {
-       margin-top: 1px;
-       padding: 0 0.4em;
-       cursor: pointer;
-}
-
-#p-search .pBody {
-       padding: 0.5em 0.4em 0.4em 0.4em;
-}
-
-/* feed links */
-a.feedlink {
-       background: url(../common/images/feed-icon.png) center left no-repeat;
-       padding-left: 16px;
-}
-
-textarea {
-       width: 100%;
-}
-
-.pBody li,
-.pBody ul {
-       padding-left: 0em;
-       margin-left: 0.5em;
-}
-
-pre, .mw-code {
-       margin: 2em;
-       border: solid 1px black;
-}
-
-h1.firstHeading,
-h2 {
-       border-bottom: solid 1px black;
-}
-#bodyContent a.external,
-#bodyContent a.external[href ^="gopher://"] {
-       background: url(external.png) center right no-repeat;
-       padding-right: 13px;
-}
-#bodyContent a.external[href ^="https://"],
-.link-https {
-       background: url(lock_icon.gif) center right no-repeat;
-       padding-right: 16px;
-}
-#bodyContent a.external[href ^="mailto:"],
-.link-mailto {
-       background: url(mail_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-#bodyContent a.external[href ^="news:"] {
-       background: url(news_icon.png) center right no-repeat;
-       padding-right: 18px;
-}
-#bodyContent a.external[href ^="ftp://"],
-.link-ftp {
-       background: url(file_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-#bodyContent a.external[href ^="irc://"],
-#bodyContent a.external[href ^="ircs://"],
-.link-irc {
-       background: url(discussionitem_icon.gif) center right no-repeat;
-       padding-right: 18px;
-}
-
-#bodyContent a.extiw,
-#bodyContent a.extiw:active {
-       color: #5E7CFF;
-}
-
-td.diff-addedline {
-       background-color: #B9FFB0;
-}
-
-td.diff-deletedline {
-       background-color: #f8ffaa;
-}
-
-.diffchange {
-       background-color: #FFCDF3;
-       text-decoration: none;
-}
-
-#pagehistory li {
-       border: none;
-}
-
-div.tocindent {
-       margin-left: 2em;
-}
-#toc {
-       text-align: left;
-       border-top: solid 1px black;
-       border-bottom: solid 1px black;
-}
-
-/* @noflip */div.floatright, table.floatright {
-       margin: 0;
-       border-width: 0.5em 0 0.8em 1.4em;
-}
-div.floatright p {
-       font-style: italic;
-}
-/* @noflip */div.floatleft, table.floatleft {
-       margin: 0.3em 0.5em 0.5em 0;
-       border-width: 0.5em 1.4em 0.8em 0;
-}
-div.floatleft p {
-       font-style: italic;
-}
-
-/* thumbnails */
-div.thumb {
-       margin-bottom: 0.5em;
-       width: auto;
-}
-div.thumbinner {
-       padding: 3px !important;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4;
-       padding: 0.3em 0 0.1em 0;
-}
-div.magnify {
-       float: right;
-       border: none !important;
-       background: none !important;
-}
-div.magnify a,
-div.magnify img {
-       display: block;
-       border: none !important;
-       background: none !important;
-}
-/* @noflip */div.tright {
-       border-width: 0.5em 0 0.8em 1.4em;
-}
-/* @noflip */div.tleft {
-       margin-right: 0.5em;
-       border-width: 0.5em 1.4em 0.8em 0;
-}
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-a.stub {
-       color: #772233;
-}
-a.new,
-#p-personal a.new {
-       color: #BA0000;
-       text-decoration: line-through;
-}
-li.new {
-       text-decoration: line-through;
-}
-/**
- * Overrides text justification (user preference)
- * See bug 31990
- */
-#catlinks {
-       text-align: center;
-}
-.catlinks {
-       text-align: center;
-       width: 80%;
-       margin-left: auto;
-       margin-right: auto;
-       padding: 3px;
-}
-
-#mytabs {
-       background-color: inherit;
-}
-#p-cactions {
-       background-color: inherit;
-}
-
-#footer {
-       padding-left: 11.8em;
-}
-
-#n-portal,
-#n-currentevents,
-#n-help,
-#n-sitesupport {
-       display: none;
-}
-
-#preftoc {
-       float: left;
-       margin: 1em;
-       width: 13em;
-}
-#preftoc li {
-}
-#preftoc li.selected {
-       border: 1px dashed #aaa;
-}
-#preftoc a,
-#preftoc a:active {
-       display: block;
-}
-div.htmlform-tip {
-       font-size: 95%;
-       margin-top: 1em;
-}
-
-#mw_trackbacks {
-       border-style: groove;
-}
-
-#jump-to-nav {
-       display: none;
-}
-
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-.templatesUsed {
-       margin-top: 1.5em;
-}
-
diff --git a/skins/standard/main.css b/skins/standard/main.css
deleted file mode 100644 (file)
index a4b03a8..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * This style sheet is used by the classic (aka standard) skin
- */
-
-#article {
-       padding: 4px;
-}
-
-#content {
-       margin: 0;
-       padding: 0;
-}
-
-#footer {
-       padding: 4px;
-       font-size: 95%;
-       clear: both;
-}
-
-#pagestats {
-       font-size: 9pt;
-}
-
-#powersearch {
-       background: #DDEEFF;
-       border-style: solid;
-       border-width: 1px;
-       padding: 2px;
-}
-
-#quickbar {
-       width: 140px;
-       height: 100%;
-       padding: 4px;
-       visibility: visible;
-       z-index: 99;
-       font-size: 95%;
-}
-
-#topbar {
-       padding: 4px;
-       font-size: 95%;
-}
-
-/* Table of contents */
-.toctoggle,
-.editsection {
-       font-size: smaller;
-}
-
-/* ... */
-#toolbar {
-       padding: 0;
-}
-
-#infobox {
-       background: #eeeeff;
-       color: black;
-}
-
-#editform {
-       margin-top: 1px;
-}
-
-a.interwiki,
-a.external {
-       color: #3366BB;
-}
-
-a.printable {
-       text-decoration: underline;
-}
-
-a.new {
-       color: #ba0000;
-}
-
-a.stub {
-       color: #772233;
-       text-decoration: none;
-}
-
-a:visited {
-       color: #5A3696;
-}
-
-body {
-       margin: 0;
-       padding: 4px;
-       color: black;
-}
-
-form.inline {
-       display: inline;
-}
-
-textarea {
-       overflow: auto;
-}
-
-h1.pagetitle {
-       padding-top: 0;
-       margin-top: 0;
-       padding-bottom: 0;
-       margin-bottom: 0;
-       font-size: 150%;
-}
-
-h1.pagetitle .editsection {
-       font-size: 66.7%;
-}
-
-h2 {
-       font-size: 120%;
-}
-
-h2 .editsection {
-       font-size: 83.3%;
-}
-
-h2, h3, h4, h5, h6 {
-       margin-bottom: 0;
-}
-
-h3 {
-       font-size: 106.25%;
-}
-
-h3 .editsection {
-       font-size: 94.1%;
-}
-
-h4 {
-       font-size: 103.125%;
-}
-
-h4 .editsection {
-       font-size: 97.0%;
-}
-
-h5 {
-       font-size: 100%;
-}
-
-h5 .editsection {
-       font-size: 100%;
-}
-
-h6 {
-       font-size: 95%;
-}
-
-h6 .editsection {
-       font-size: 105.3%;
-}
-
-hr.sep {
-       color: gray;
-       height: 1px;
-       background-color: gray;
-}
-
-p.subpages {
-       font-size: small;
-}
-
-p.subtitle {
-       padding-top: 0;
-       margin-top: 0;
-}
-
-.catlinks {
-       font-size: small;
-       margin-top: 0;
-       text-align:right;
-}
-
-td {
-       empty-cells: show;
-}
-
-td.bottom {
-       border-top: 1px solid gray;
-}
-
-td.top {
-       border-bottom: 1px solid gray;
-}
index 2e09ee1..cf0aaea 100644 (file)
@@ -709,7 +709,6 @@ pre, .mw-code {
 #firstHeading {
        padding-top: 0;
        margin-top: 0;
-       padding-top: 0;
        font-size: 1.6em;
 }
 div#content a.external,
index 264ba69..4341891 100644 (file)
@@ -48,9 +48,6 @@ $wgAutoloadClasses += array(
        //db
        'ORMTableTest' => "$testDir/phpunit/includes/db/ORMTableTest.php",
 
-       //Selenium
-       'SeleniumTestConstants' => "$testDir/selenium/SeleniumTestConstants.php",
-
        # tests/phpunit/includes/api
        'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
        'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php",
index d3bd6a5..1d4102c 100644 (file)
@@ -363,6 +363,16 @@ Italics and bold
 
 !! end
 
+# this example taken from the simple/Moon article
+!! test
+Italics and possessives
+!! input
+obtained by ''[[Lunar Prospector]]'''s gamma-ray spectrometer
+!! result
+<p>obtained by <i><a href="/index.php?title=Lunar_Prospector&amp;action=edit&amp;redlink=1" class="new" title="Lunar Prospector (page does not exist)">Lunar Prospector</a>'</i>s gamma-ray spectrometer
+</p>
+!! end
+
 ###
 ### 2-quote opening sequence tests
 ###
@@ -397,13 +407,26 @@ Italics and bold: 2-quote opening sequence: (2,4)
 
 
 !! test
-Italics and bold: 2-quote opening sequence: (2,5)
+Italics and bold: 2-quote opening sequence: (2,5) (php)
+!! options
+php
 !! input
 ''foo'''''
 !! result
 <p><i>foo</i>
 </p>
 !!end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+Italics and bold: 2-quote opening sequence: (2,5) (parsoid)
+!! options
+parsoid
+!! input
+''foo'''''
+!! result
+<p><i>foo</i><b></b>
+</p>
+!!end
 
 
 ###
@@ -441,13 +464,26 @@ Italics and bold: 3-quote opening sequence: (3,4)
 
 
 !! test
-Italics and bold: 3-quote opening sequence: (3,5)
+Italics and bold: 3-quote opening sequence: (3,5) (php)
+!! options
+php
 !! input
 '''foo'''''
 !! result
 <p><b>foo</b>
 </p>
 !!end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+Italics and bold: 3-quote opening sequence: (3,5) (parsoid)
+!! options
+parsoid
+!! input
+'''foo'''''
+!! result
+<p><b>foo<i></i></b>
+</p>
+!!end
 
 
 ###
@@ -485,13 +521,26 @@ Italics and bold: 4-quote opening sequence: (4,4)
 
 
 !! test
-Italics and bold: 4-quote opening sequence: (4,5)
+Italics and bold: 4-quote opening sequence: (4,5) (php)
+!! options
+php
 !! input
 ''''foo'''''
 !! result
 <p>'<b>foo</b>
 </p>
 !!end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+Italics and bold: 4-quote opening sequence: (4,5) (parsoid)
+!! options
+parsoid
+!! input
+''''foo'''''
+!! result
+<p>'<b>foo<i></i></b>
+</p>
+!!end
 
 
 ###
@@ -499,13 +548,26 @@ Italics and bold: 4-quote opening sequence: (4,5)
 ###
 
 !! test
-Italics and bold: 5-quote opening sequence: (5,2)
+Italics and bold: 5-quote opening sequence: (5,2) (php)
+!! options
+php
 !! input
 '''''foo''
 !! result
 <p><b><i>foo</i></b>
 </p>
 !!end
+# Parsoid reverses the nesting order, compared to the PHP parser
+!! test
+Italics and bold: 5-quote opening sequence: (5,2) (parsoid)
+!! options
+parsoid
+!! input
+'''''foo''
+!! result
+<p><i><b>foo</b></i>
+</p>
+!!end
 
 
 !! test
@@ -571,23 +633,49 @@ Italics and bold: multiple quote sequences: (2,4,4)
 
 
 !! test
-Italics and bold: multiple quote sequences: (3,4,2)
+Italics and bold: multiple quote sequences: (3,4,2) (php)
+!! options
+php
 !! input
 '''foo''''bar''
 !! result
 <p><b>foo'</b>bar
 </p>
 !!end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+Italics and bold: multiple quote sequences: (3,4,2) (parsoid)
+!! options
+parsoid
+!! input
+'''foo''''bar''
+!! result
+<p><b>foo'</b>bar<i></i>
+</p>
+!!end
 
 
 !! test
-Italics and bold: multiple quote sequences: (3,4,3)
+Italics and bold: multiple quote sequences: (3,4,3) (php)
+!! options
+php
 !! input
 '''foo''''bar'''
 !! result
 <p><b>foo'</b>bar
 </p>
 !!end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+Italics and bold: multiple quote sequences: (3,4,3) (parsoid)
+!! options
+parsoid
+!! input
+'''foo''''bar'''
+!! result
+<p><b>foo'</b>bar<b></b>
+</p>
+!!end
 
 ###
 ### other quote tests
@@ -622,14 +710,32 @@ Italics and bold: other quote tests: (3,2,3,2)
 !!end
 
 
+# The Parsoid team believes the PHP parser's output on this test is wrong.
+# It only checks for convert-to-bold-on-single-character-word when the word
+# matches with a bold tag ("'''") that is *odd* in the list of quote tokens.
+# This means that the bold token in position 2 (0-indexed) gets converted by
+# parsoid, but doesn't get changed by the PHP parser.
 !! test
-Italics and bold: other quote tests: (3,2,3,3)
+Italics and bold: other quote tests: (3,2,3,3) (php)
+!! options
+php
 !! input
 '''this is about ''foo'''s family'''
 !! result
 <p>'<i>this is about </i>foo<b>s family</b>
 </p>
 !!end
+# This is the output the Parsoid team believes to be correct.
+!! test
+Italics and bold: other quote tests: (3,2,3,3) (parsoid)
+!! options
+parsoid
+!! input
+'''this is about ''foo'''s family'''
+!! result
+<p><b>this is about <i>foo'</i>s family</b>
+</p>
+!!end
 
 
 !! test
@@ -2071,8 +2177,13 @@ Definition Lists: Nesting: Test 4
 !! end
 
 
+## The Parsoid team believes the following three test exposes a
+## bug in the PHP parser.  (Parsoid team thinks the PHP parser is
+## wrong to close the <dl> after the <dt> containing the <ul>.)
 !! test
-Definition Lists: Mixed Lists: Test 1
+Definition Lists: Mixed Lists: Test 1 (php)
+!! options
+php
 !! input
 :;* foo
 ::* bar
@@ -2087,7 +2198,19 @@ Definition Lists: Mixed Lists: Test 1
 </dd></dl>
 
 !! end
-
+!! test
+Definition Lists: Mixed Lists: Test 1 (parsoid)
+!! options
+parsoid
+!! input
+:;* foo
+::* bar
+:; baz
+!! result
+<dl><dd><dl><dt><ul><li> foo
+</li></ul></dt><dd><ul><li> bar
+</li></ul></dd><dt> baz</dt></dl></dd></dl>
+!! end
 
 !! test
 Definition Lists: Mixed Lists: Test 2
@@ -2219,9 +2342,15 @@ Definition Lists: Mixed Lists: Test 10
 
 !! end
 
+# The Parsoid team disagrees with the PHP parser's seemingly-random
+# rules regarding dd/dt on the next two tests.  Parsoid is more
+# consistent, and recognizes the shared nesting and keeps the
+# still-open tags around until the nesting is complete.
 
 !! test
-Definition Lists: Mixed Lists: Test 11
+Definition Lists: Mixed Lists: Test 11 (php)
+!! options
+php
 !! input
 *#*#;*;;foo :bar
 *#*#;boo :baz
@@ -2239,10 +2368,23 @@ Definition Lists: Mixed Lists: Test 11
 </li></ul>
 
 !! end
+!! test
+Definition Lists: Mixed Lists: Test 11 (parsoid)
+!! options
+parsoid
+!! input
+*#*#;*;;foo :bar
+*#*#;boo :baz
+!! result
+<ul><li><ol><li><ul><li><ol><li><dl><dt><ul><li><dl><dt><dl><dt>foo&nbsp;</dt><dd>bar
+</dd></dl></dt></dl></li></ul></dt><dt>boo&nbsp;</dt><dd>baz</dd></dl></li></ol></li></ul></li></ol></li></ul>
+!! end
 
 
 !! test
-Definition Lists: Weird Ones: Test 1
+Definition Lists: Weird Ones: Test 1 (php)
+!! options
+php
 !! input
 *#;*::;; foo : bar (who uses this?)
 !! result
@@ -2256,6 +2398,15 @@ Definition Lists: Weird Ones: Test 1
 </li></ol>
 </li></ul>
 
+!! end
+!! test
+Definition Lists: Weird Ones: Test 1 (parsoid)
+!! options
+parsoid
+!! input
+*#;*::;; foo : bar (who uses this?)
+!! result
+<ul><li><ol><li><dl><dt><ul><li><dl><dd><dl><dd><dl><dt><dl><dt> foo&nbsp;</dt><dd> bar (who uses this?)</dd></dl></dt></dl></dd></dl></dd></dl></li></ul></dt></dl></li></ol></li></ul>
 !! end
 
 ###
@@ -2932,7 +3083,9 @@ Normal text. '''''Bold italic text.''''' Normal text.
 
 
 !! test
-Unclosed and unmatched quotes
+Unclosed and unmatched quotes (php)
+!! options
+php
 !! input
 '''''Bold italic text '''with bold deactivated''' in between.'''''
 
@@ -2967,6 +3120,48 @@ Plain ''italic'''s plain
 </p><p>Plain <i>italic'</i>s plain
 </p>
 !! end
+# Parsoid inserts an empty bold tag pair at the end of the line, that the PHP
+# parser strips. The wikitext contains just the first half of the bold
+# quote pair. (There's also a case where Parsoid nests <b> and <i>
+# differently than the PHP parser.)
+!! test
+Unclosed and unmatched quotes (parsoid)
+!! options
+parsoid
+!! input
+'''''Bold italic text '''with bold deactivated''' in between.'''''
+
+'''''Bold italic text ''with italic deactivated'' in between.'''''
+
+'''Bold text..
+
+..spanning two paragraphs (should not work).'''
+
+'''Bold tag left open
+
+''Italic tag left open
+
+Normal text.
+
+<!-- Unmatching number of opening, closing tags: -->
+'''This year''''s election ''should'' beat '''last year''''s.
+
+''Tom'''s car is bigger than ''Susan'''s.
+
+Plain ''italic'''s plain
+!! result
+<p><i><b>Bold italic text </b>with bold deactivated<b> in between.</b></i>
+</p><p><i><b>Bold italic text </b></i><b>with italic deactivated<i> in between.</i></b>
+</p><p><b>Bold text..</b>
+</p><p>..spanning two paragraphs (should not work).<b></b>
+</p><p><b>Bold tag left open</b>
+</p><p><i>Italic tag left open</i>
+</p><p>Normal text.
+</p><p><b>This year'</b>s election <i>should</i> beat <b>last year'</b>s.
+</p><p><i>Tom<b>s car is bigger than </b></i><b>Susan</b>s.
+</p><p>Plain <i>italic'</i>s plain
+</p>
+!! end
 
 ###
 ### Tables
@@ -2978,16 +3173,30 @@ Plain ''italic'''s plain
 # is the bare minimun required by the spec, see:
 # http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
 !! test
-A table with no data.
+A table with no data. (php)
+!! options
+php
+!! input
+{||}
+!! result
+!! end
+# Parsoid team replies: empty table tags are legal in HTML5
+!! test
+A table with no data. (parsoid)
+!! options
+parsoid
 !! input
 {||}
 !! result
+<table></table>
 !! end
 
 # A table with nothing but a caption is invalid XHTML, we might want to render
 # this as <p>caption</p>
 !! test
-A table with nothing but a caption
+A table with nothing but a caption (php)
+!! options
+php
 !! input
 {|
 |+ caption
@@ -2997,6 +3206,18 @@ A table with nothing but a caption
 <caption> caption
 </caption><tr><td></td></tr></table>
 
+!! end
+# Parsoid team replies: table with only a caption is legal in HTML5
+!! test
+A table with nothing but a caption (parsoid)
+!! options
+parsoid
+!! input
+{|
+|+ caption
+|}
+!! result
+<table><caption> caption</caption></table>
 !! end
 
 !! test
@@ -3497,6 +3718,23 @@ b
 
 !! end
 
+!! test
+Table cell with a single comment
+!! input
+{|
+| <!-- c1 -->
+| a
+|}
+!! result
+<table>
+<tr>
+<td>
+</td>
+<td> a
+</td></tr></table>
+
+!! end
+
 # The expected HTML structure in this test is debatable. The PHP parser does
 # not parse this kind of table at all. The main focus for Parsoid is on
 # round-tripping, so this output is ok for now. TODO: revisit!
@@ -4619,6 +4857,26 @@ Multiple list tags generated by templates
 
 !!end
 
+!!test
+Single-comment whitespace lines dont break lists, but multi-comment whitespace lines do
+!!input
+*a
+<!--This line will NOT split the list-->
+*b
+ <!--This line will NOT split the list either-->
+*c
+ <!--foo--> <!--This line with more than 1 comment will split the list-->
+*d
+!!result
+<ul><li>a
+</li><li>b
+</li><li>c
+</li></ul>
+<ul><li>d
+</li></ul>
+
+!!end
+
 ###
 ### Magic Words
 ###
@@ -6006,6 +6264,15 @@ Templates: HTML Tag: 6. Generation of end piece of HTML attr value
 
 !!end
 
+!!test
+Templates: HTML Tag: 7. Generation of partial attribute key string
+!!input
+<div st{{echo|yle}}="color:red;">foo</div>
+!!result
+<div style="color:red;">foo</div>
+
+!!end
+
 !!test
 Templates: HTML Tables: 1. Generating start of a HTML table
 !!input
@@ -10655,11 +10922,23 @@ Handling of &#x0A; in URLs
 !!end
 
 !! test
-5 quotes, code coverage +1 line
+5 quotes, code coverage +1 line (php)
+!! options
+php
 !! input
 '''''
 !! result
 !! end
+# The PHP parser strips the empty tags out for giggles; parsoid doesn't.
+!! test
+5 quotes, code coverage +1 line (parsoid)
+!! options
+parsoid
+!! input
+'''''
+!! result
+<p><i><b></b></i></p>
+!! end
 
 !! test
 Special:Search page linking.
@@ -14203,6 +14482,93 @@ Empty table rows go away
 
 !! end
 
+###
+### Parsoid-centric tests for testing RTing of inter-element separators
+### Edge cases not tested by existing parser tests and specific to
+### Parsoid-specific serialization strategies.
+###
+
+!!test
+RT-ed inter-element separators should be valid separators
+!!input
+{|
+|- [[foo]]
+|}
+!!result
+<table>
+
+</table>
+
+!!end
+
+!!test
+Trailing newlines in a deep dom-subtree that ends a wikitext line should be migrated out
+(Parsoid-only since PHP parser relies on Tidy for correct output)
+!!options
+disabled parsoid
+!!input
+{|
+|<small>foo
+bar
+|}
+
+{|
+|<small>foo<small>
+|}
+!!result
+!!end
+
+!!test
+Empty TD followed by TD with tpl-generated attribute
+!!input
+{|
+|-
+|
+|{{echo|style='color:red'}}|foo
+|}
+!!result
+<table>
+
+<tr>
+<td>
+</td>
+<td>foo
+</td></tr></table>
+
+!!end
+
+!!test
+Empty TR followed by a template-generated TR
+(Parsoid-specific since PHP parser doesn't handle this mixed tbl-wikitext)
+!!options
+disabled parsoid
+!!input
+{|
+|-
+{{echo|<tr><td>foo</td></tr>}}
+|}
+!!result
+<table>
+<tbody>
+<tr>
+<td></td></tr>
+<tr>
+<td>foo</td></tr></tbody></table>
+!!end
+
+!!test
+Multi-line image caption generated by templates with/without trailing newlines
+!!options
+parsoid
+!!input
+[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}]]
+[[File:foo.jpg|thumb|300px|foo\n{{echo|A}}\n{{echo|B}}\n{{echo|C}}\n\n]]
+!!result
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC</div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/index.php?title=Special:Upload&amp;wpDestFile=Foo.jpg" class="new" title="File:Foo.jpg">File:Foo.jpg</a>  <div class="thumbcaption">foo\nA\nB\nC\n\n</div></div></div>
+
+!!end
+
 TODO:
 more images
 more tables
index c8f3868..e49ea6d 100644 (file)
@@ -12,7 +12,6 @@ class AutoLoaderTest extends MediaWikiTestCase {
 
        protected static function checkAutoLoadConf() {
                global $wgAutoloadLocalClasses, $wgAutoloadClasses, $IP;
-               static $supportsParsekit;
                $supportsParsekit = function_exists( 'parsekit_compile_file' );
 
                // wgAutoloadLocalClasses has precedence, just like in includes/AutoLoader.php
index 6e56add..7e8f30e 100644 (file)
@@ -146,11 +146,6 @@ CREATE TABLE /*_*/externallinks (
 CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
 CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
 CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
-CREATE TABLE /*_*/external_user (
-  eu_local_id int unsigned NOT NULL PRIMARY KEY,
-  eu_external_id varchar(255) binary NOT NULL
-) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
 CREATE TABLE /*_*/langlinks (
   ll_from int unsigned NOT NULL default 0,
   ll_lang varbinary(20) NOT NULL default '',
index 69ae376..e02e3e1 100644 (file)
@@ -151,11 +151,6 @@ CREATE TABLE /*_*/externallinks (
 CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
 CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
 CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
-CREATE TABLE /*_*/external_user (
-  eu_local_id int unsigned NOT NULL PRIMARY KEY,
-  eu_external_id varchar(255) binary NOT NULL
-) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
 CREATE TABLE /*_*/langlinks (
   ll_from int unsigned NOT NULL default 0,
   ll_lang varbinary(20) NOT NULL default '',
index b106d2b..8bfc28e 100644 (file)
@@ -157,11 +157,6 @@ CREATE TABLE /*_*/externallinks (
 CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from, el_to(40));
 CREATE INDEX /*i*/el_to ON /*_*/externallinks (el_to(60), el_from);
 CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index(60));
-CREATE TABLE /*_*/external_user (
-  eu_local_id int unsigned NOT NULL PRIMARY KEY,
-  eu_external_id varchar(255) binary NOT NULL
-) /*$wgDBTableOptions*/;
-CREATE UNIQUE INDEX /*i*/eu_external_id ON /*_*/external_user (eu_external_id);
 CREATE TABLE /*_*/langlinks (
   ll_from int unsigned NOT NULL default 0,
   ll_lang varbinary(20) NOT NULL default '',
index 01072d8..c874375 100644 (file)
@@ -6,6 +6,7 @@ return array(
 
        'mediawiki.tests.qunit.suites' => array(
                'scripts' => array(
+                       'tests/qunit/suites/resources/startup.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
@@ -16,6 +17,7 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.hidpi.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.highlightText.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.localize.test.js',
+                       'tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
@@ -45,6 +47,7 @@ return array(
                        'jquery.hidpi',
                        'jquery.highlightText',
                        'jquery.localize',
+                       'jquery.makeCollapsible',
                        'jquery.mwExtension',
                        'jquery.tabIndex',
                        'jquery.tablesorter',
@@ -61,6 +64,5 @@ return array(
                        'mediawiki.language',
                        'mediawiki.cldr',
                ),
-               'position' => 'top',
        )
 );
index a6f729b..3f3c899 100644 (file)
                assert.equal( mw.messages.get( 'testMsg' ), 'Foo.', 'messages object restored and re-applied after test()' );
        } );
 
+       QUnit.test( 'Loader status', 2, function ( assert ) {
+               var i, len, state,
+                       modules = mw.loader.getModuleNames(),
+                       error = [],
+                       missing = [];
+
+               for ( i = 0, len = modules.length; i < len; i++ ) {
+                       state = mw.loader.getState( modules[i] );
+                       if ( state === 'error' ) {
+                               error.push( modules[i] );
+                       } else if ( state === 'missing' ) {
+                               missing.push( modules[i] );
+                       }
+               }
+
+               assert.deepEqual( error, [], 'Modules in error state' );
+               assert.deepEqual( missing, [], 'Modules in missing state' );
+       } );
+
        QUnit.test( 'htmlEqual', 8, function ( assert ) {
                assert.htmlEqual(
                        '<div><p class="some classes" data-length="10">Child paragraph with <a href="http://example.com">A link</a></p>Regular text<span>A span</span></div>',
diff --git a/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js b/tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
new file mode 100644 (file)
index 0000000..9f34bee
--- /dev/null
@@ -0,0 +1,118 @@
+( function ( mw, $ ) {
+       var loremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit.';
+
+       QUnit.module( 'jquery.makeCollapsible', QUnit.newMwEnvironment() );
+
+       function prepareCollapsible( html, options ) {
+               return $( $.parseHTML( html ) )
+                       .appendTo( '#qunit-fixture' )
+                       // options might be undefined here - this is okay
+                       .makeCollapsible( options );
+       }
+
+       QUnit.asyncTest( 'testing hooks (triggers)', 4, function ( assert ) {
+               var $collapsible, $content, $toggle;
+               $collapsible = prepareCollapsible(
+                       '<div class="mw-collapsible">' + loremIpsum + '</div>'
+               );
+               $content = $collapsible.find( '.mw-collapsible-content' );
+               $toggle = $collapsible.find( '.mw-collapsible-toggle' );
+
+               // In one full collapse-expand cycle, each event will be fired once
+
+               // On collapse...
+               $collapsible.on( 'beforeCollapse.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':visible' ), 'first beforeCollapseExpand: content is visible' );
+               } );
+               $collapsible.on( 'afterCollapse.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':hidden' ), 'first afterCollapseExpand: content is hidden' );
+
+                       // On expand...
+                       $collapsible.on( 'beforeExpand.mw-collapsible', function () {
+                               assert.assertTrue( $content.is( ':hidden' ), 'second beforeCollapseExpand: content is hidden' );
+                       } );
+                       $collapsible.on( 'afterExpand.mw-collapsible', function () {
+                               assert.assertTrue( $content.is( ':visible' ), 'second afterCollapseExpand: content is visible' );
+
+                               QUnit.start();
+                       } );
+
+                       // ...expanding happens here
+                       $toggle.trigger( 'click' );
+               } );
+
+               // ...collapsing happens here
+               $toggle.trigger( 'click' );
+       } );
+
+       QUnit.asyncTest( 'basic operation', 3, function ( assert ) {
+               var $collapsible, $content;
+               $collapsible = prepareCollapsible(
+                       '<div class="mw-collapsible">' + loremIpsum + '</div>'
+               );
+               $content = $collapsible.find( '.mw-collapsible-content' );
+
+               assert.equal( $content.length, 1, 'content is present' );
+               assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
+
+               $collapsible.on( 'afterCollapse.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
+                       QUnit.start();
+               } );
+
+               $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
+       } );
+
+       QUnit.test( 'basic operation with instantHide (synchronous test)', 2, function ( assert ) {
+               var $collapsible, $content;
+               $collapsible = prepareCollapsible(
+                       '<div class="mw-collapsible">' + loremIpsum + '</div>',
+                       { instantHide: true }
+               );
+               $content = $collapsible.find( '.mw-collapsible-content' );
+
+               assert.assertTrue( $content.is( ':visible' ), 'content is visible' );
+
+               $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
+
+               assert.assertTrue( $content.is( ':hidden' ), 'after collapsing: content is hidden' );
+       } );
+
+       QUnit.asyncTest( 'initially collapsed - mw-collapsed class', 2, function ( assert ) {
+               var $collapsible, $content;
+               $collapsible = prepareCollapsible(
+                       '<div class="mw-collapsible mw-collapsed">' + loremIpsum + '</div>'
+               );
+               $content = $collapsible.find( '.mw-collapsible-content' );
+
+               // Synchronous - mw-collapsed should cause instantHide: true to be used on initial collapsing
+               assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
+
+               $collapsible.on( 'afterExpand.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':visible' ), 'after expanding: content is visible' );
+                       QUnit.start();
+               } );
+
+               $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
+       } );
+
+       QUnit.asyncTest( 'initially collapsed - options', 2, function ( assert ) {
+               var $collapsible, $content;
+               $collapsible = prepareCollapsible(
+                       '<div class="mw-collapsible">' + loremIpsum + '</div>',
+                       { collapsed: true }
+               );
+               $content = $collapsible.find( '.mw-collapsible-content' );
+
+               // Synchronous - collapsed: true should cause instantHide: true to be used on initial collapsing
+               assert.assertTrue( $content.is( ':hidden' ), 'content is hidden' );
+
+               $collapsible.on( 'afterExpand.mw-collapsible', function () {
+                       assert.assertTrue( $content.is( ':visible' ), 'after expanding: content is visible' );
+                       QUnit.start();
+               } );
+
+               $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
+       } );
+
+}( mediaWiki, jQuery ) );
index 0a9df96..697159c 100644 (file)
@@ -1,20 +1,11 @@
 ( function ( mw, $ ) {
-       var mwLanguageCache = {}, oldGetOuterHtml, formatnumTests, specialCharactersPageName,
+       var mwLanguageCache = {}, formatnumTests, specialCharactersPageName,
                expectedListUsers, expectedEntrypoints;
 
        QUnit.module( 'mediawiki.jqueryMsg', QUnit.newMwEnvironment( {
                setup: function () {
                        this.orgMwLangauge = mw.language;
                        mw.language = $.extend( true, {}, this.orgMwLangauge );
-                       oldGetOuterHtml = $.fn.getOuterHtml;
-                       $.fn.getOuterHtml = function () {
-                               var $div = $( '<div>' ), html;
-                               $div.append( $( this ).eq( 0 ).clone() );
-                               html = $div.html();
-                               $div.empty();
-                               $div = undefined;
-                               return html;
-                       };
 
                        // Messages that are reused in multiple tests
                        mw.messages.set( {
                                'external-link-replace': 'Foo [$1 bar]'
                        } );
 
+                       mw.config.set( {
+                               wgArticlePath: '/wiki/$1'
+                       } );
+
                        specialCharactersPageName = '"Who" wants to be a millionaire & live on \'Exotic Island\'?';
 
-                       expectedListUsers = '注册' + $( '<a>' ).attr( {
-                               title: 'Special:ListUsers',
-                               href: mw.util.wikiGetlink( 'Special:ListUsers' )
-                       } ).text( '用户' ).getOuterHtml();
+                       expectedListUsers = '注册<a title="Special:ListUsers" href="/wiki/Special:ListUsers">用户</a>';
 
                        expectedEntrypoints = '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>';
                },
                teardown: function () {
                        mw.language = this.orgMwLangauge;
-                       $.fn.getOuterHtml = oldGetOuterHtml;
                }
        } ) );
 
                 the bold was removed because it is not yet implemented.
                 */
 
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'jquerymsg-test-statistics-users' ),
                        expectedListUsers,
                        'Piped wikilink'
                );
 
                expectedDisambiguationsText = 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from ' +
-                       $( '<a>' ).attr( {
-                               title: 'MediaWiki:Disambiguationspage',
-                               href: mw.util.wikiGetlink( 'MediaWiki:Disambiguationspage' )
-                       } ).text( 'MediaWiki:Disambiguationspage' ).getOuterHtml() + '.';
+                       '<a title="MediaWiki:Disambiguationspage" href="/wiki/MediaWiki:Disambiguationspage">MediaWiki:Disambiguationspage</a>.';
+
                mw.messages.set( 'disambiguations-text', 'The following pages contain at least one link to a disambiguation page.\nThey may have to link to a more appropriate page instead.\nA page is treated as a disambiguation page if it uses a template that is linked from [[MediaWiki:Disambiguationspage]].' );
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'disambiguations-text' ),
                        expectedDisambiguationsText,
                        'Wikilink without pipe'
                );
 
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'jquerymsg-test-version-entrypoints-index-php' ),
                        expectedEntrypoints,
                        'External link'
                        'Pipe trick should return error string.'
                );
 
-               expectedMultipleBars = $( '<a>' ).attr( {
-                       title: 'Main Page',
-                       href: mw.util.wikiGetlink( 'Main Page' )
-               } ).text( 'Main|Page' ).getOuterHtml();
+               expectedMultipleBars = '<a title="Main Page" href="/wiki/Main_Page">Main|Page</a>';
                mw.messages.set( 'multiple-bars', '[[Main Page|Main|Page]]' );
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'multiple-bars' ),
                        expectedMultipleBars,
                        'Bar in anchor'
                );
 
-               expectedSpecialCharacters = $( '<a>' ).attr( {
-                       title: specialCharactersPageName,
-                       href: mw.util.wikiGetlink( specialCharactersPageName )
-               } ).text( specialCharactersPageName ).getOuterHtml();
+               expectedSpecialCharacters = '<a title="&quot;Who&quot; wants to be a millionaire &amp; live on &#039;Exotic Island&#039;?" href="/wiki/%22Who%22_wants_to_be_a_millionaire_%26_live_on_%27Exotic_Island%27%3F">&quot;Who&quot; wants to be a millionaire &amp; live on &#039;Exotic Island&#039;?</a>';
 
                mw.messages.set( 'special-characters', '[[' + specialCharactersPageName + ']]' );
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'special-characters' ),
                        expectedSpecialCharacters,
                        'Special characters'
                        mw.messages.get( 'jquerymsg-test-statistics-users' ),
                        'Internal link message unchanged when format is \'text\''
                );
-               assert.equal(
+               assert.htmlEqual(
                        formatParse( 'jquerymsg-test-statistics-users' ),
                        expectedListUsers,
                        'Internal link message parsed when format is \'parse\''
                        mw.messages.get( 'jquerymsg-test-version-entrypoints-index-php' ),
                        'External link message unchanged when format is \'text\''
                );
-               assert.equal(
+               assert.htmlEqual(
                        formatParse( 'jquerymsg-test-version-entrypoints-index-php' ),
                        expectedEntrypoints,
                        'External link message processed when format is \'parse\''
                        'Foo [http://example.com bar]',
                        'External link message only substitutes parameter when format is \'text\''
                );
-               assert.equal(
+               assert.htmlEqual(
                        formatParse( 'external-link-replace', 'http://example.com' ),
                        'Foo <a href="http://example.com">bar</a>',
                        'External link message processed when format is \'parse\''
        QUnit.test( 'Int', 4, function ( assert ) {
                var parser = mw.jqueryMsg.getMessageFunction(),
                        newarticletextSource = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the [[{{Int:Helppage}}|help page]] for more info). If you are here by mistake, click your browser\'s back button.',
-                       expectedNewarticletext;
+                       expectedNewarticletext,
+                       helpPageTitle = 'Help:Contents';
 
-               mw.messages.set( 'helppage', 'Help:Contents' );
+               mw.messages.set( 'helppage', helpPageTitle );
 
                expectedNewarticletext = 'You have followed a link to a page that does not exist yet. To create the page, start typing in the box below (see the ' +
-                       $( '<a>' ).attr( {
-                               title: mw.msg( 'helppage' ),
-                               href: mw.util.wikiGetlink( mw.msg( 'helppage' ) )
-                       } ).text( 'help page' ).getOuterHtml() + ' for more info). If you are here by mistake, click your browser\'s back button.';
+                       '<a title="Help:Contents" href="/wiki/Help:Contents">help page</a> for more info). If you are here by mistake, click your browser\'s back button.';
 
                mw.messages.set( 'newarticletext', newarticletextSource );
 
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'newarticletext' ),
                        expectedNewarticletext,
                        'Link with nested message'
                mw.messages.set( 'newarticletext-lowercase',
                        newarticletextSource.replace( 'Int:Helppage', 'int:helppage' ) );
 
-               assert.equal(
+               assert.htmlEqual(
                        parser( 'newarticletext-lowercase' ),
                        expectedNewarticletext,
                        'Link with nested message, lowercase include'
index e8663f8..7ae9826 100644 (file)
                                'gender-plural-msg': '{{GENDER:$1|he|she|they}} {{PLURAL:$2|is|are}} awesome',
                                'grammar-msg': 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}',
                                'formatnum-msg': '{{formatnum:$1}}',
-                               'int-msg': 'Some {{int:other-message}}'
+                               'int-msg': 'Some {{int:other-message}}',
+                               'mediawiki-test-version-entrypoints-index-php': '[https://www.mediawiki.org/wiki/Manual:index.php index.php]',
+                               'external-link-replace': 'Foo [$1 bar]'
                        } );
 
-                       // For formatnum tests
-                       mw.config.set( 'wgUserLanguage', 'en' );
+                       mw.config.set( {
+                               wgArticlePath: '/wiki/$1',
+
+                               // For formatnum tests
+                               wgUserLanguage: 'en'
+                       } );
 
                        specialCharactersPageName = '"Who" wants to be a millionaire & live on \'Exotic Island\'?';
                }
                assert.ok( mw.config instanceof mw.Map, 'mw.config instance of mw.Map' );
        } );
 
-       QUnit.test( 'mw.message & mw.messages', 54, function ( assert ) {
+       QUnit.test( 'mw.message & mw.messages', 68, function ( assert ) {
                var goodbye, hello;
 
                // Convenience method for asserting the same result for multiple formats
                assert.equal( hello.escaped(), 'Hello &lt;b&gt;awesome&lt;/b&gt; world', 'Message.escaped returns the escaped message' );
                assert.equal( hello.format, 'escaped', 'Message.escaped correctly updated the "format" property' );
 
-               assert.ok( mw.messages.set( 'escaped-with-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ) );
-               assert.equal( mw.message( 'escaped-with-curly-brace' ).escaped(), mw.html.escape( '"' + mw.config.get( 'wgSiteName' ) + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
+               assert.ok( mw.messages.set( 'multiple-curly-brace', '"{{SITENAME}}" is the home of {{int:other-message}}' ), 'mw.messages.set: Register' );
+               assertMultipleFormats( ['multiple-curly-brace'], ['text', 'parse'], '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message', 'Curly brace format works correctly' );
+               assert.equal( mw.message( 'multiple-curly-brace' ).plain(), mw.messages.get( 'multiple-curly-brace' ), 'Plain format works correctly for curly brace message' );
+               assert.equal( mw.message( 'multiple-curly-brace' ).escaped(), mw.html.escape( '"' + mw.config.get( 'wgSiteName') + '" is the home of Other Message' ), 'Escaped format works correctly for curly brace message' );
+
+               assert.ok( mw.messages.set( 'multiple-square-brackets-and-ampersand', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ), 'mw.messages.set: Register' );
+               assertMultipleFormats( ['multiple-square-brackets-and-ampersand'], ['plain', 'text'], mw.messages.get( 'multiple-square-brackets-and-ampersand' ), 'Square bracket message is not processed' );
+               assert.equal( mw.message( 'multiple-square-brackets-and-ampersand' ).escaped(), 'Visit the [[Project:Community portal|community portal]] &amp; [[Project:Help desk|help desk]]', 'Escaped format works correctly for square bracket message' );
+               assert.htmlEqual( mw.message( 'multiple-square-brackets-and-ampersand' ).parse(), 'Visit the ' +
+                       '<a title="Project:Community portal" href="/wiki/Project:Community_portal">community portal</a>' +
+                       ' &amp; <a title="Project:Help desk" href="/wiki/Project:Help_desk">help desk</a>', 'Internal links work with parse' );
+
+               assertMultipleFormats( ['mediawiki-test-version-entrypoints-index-php'], ['plain', 'text', 'escaped'], mw.messages.get( 'mediawiki-test-version-entrypoints-index-php' ), 'External link markup is unprocessed' );
+               assert.htmlEqual( mw.message( 'mediawiki-test-version-entrypoints-index-php' ).parse(), '<a href="https://www.mediawiki.org/wiki/Manual:index.php">index.php</a>', 'External link works correctly in parse mode' );
 
-               assert.ok( mw.messages.set( 'escaped-with-square-brackets', 'Visit the [[Project:Community portal|community portal]] & [[Project:Help desk|help desk]]' ) );
-               assert.equal( mw.message( 'escaped-with-square-brackets' ).escaped(), 'Visit the [[Project:Community portal|community portal]] &amp; [[Project:Help desk|help desk]]', 'Escaped format works correctly for square bracket message' );
+               assertMultipleFormats( ['external-link-replace', 'http://example.org/?x=y&z'], ['plain', 'text'] , 'Foo [http://example.org/?x=y&z bar]', 'Parameters are substituted but external link is not processed' );
+               assert.equal( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).escaped(), 'Foo [http://example.org/?x=y&amp;z bar]', 'In escaped mode, parameters are substituted and ampersand is escaped, but external link is not processed' );
+               assert.htmlEqual( mw.message( 'external-link-replace', 'http://example.org/?x=y&z' ).parse(), 'Foo <a href="http://example.org/?x=y&amp;z">bar</a>', 'External link with replacement works in parse mode without double-escaping' );
 
                hello.parse();
                assert.equal( hello.format, 'parse', 'Message.parse correctly updated the "format" property' );
                assert.ok( mw.messages.set( 'mediawiki-test-categorytree-collapse-bullet', '[<b>−</b>]' ), 'mw.messages.set: Register' );
                assert.equal( mw.message( 'mediawiki-test-categorytree-collapse-bullet' ).plain(), mw.messages.get( 'mediawiki-test-categorytree-collapse-bullet' ), 'Single square brackets unchanged in plain mode' );
 
-               assert.ok( mw.messages.set( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result', '<a href=\'#\' title=\'{{#special:mypage}}\'>Username</a> (<a href=\'#\' title=\'{{#special:mytalk}}\'>talk</a>)' ) );
+               assert.ok( mw.messages.set( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result', '<a href=\'#\' title=\'{{#special:mypage}}\'>Username</a> (<a href=\'#\' title=\'{{#special:mytalk}}\'>talk</a>)' ), 'mw.messages.set: Register' );
                assert.equal( mw.message( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ).plain(), mw.messages.get( 'mediawiki-test-wikieditor-toolbar-help-content-signature-result' ), 'HTML message with curly braces is not changed in plain mode' );
 
                assertMultipleFormats( ['gender-plural-msg', 'male', 1], ['text', 'parse', 'escaped'], 'he is awesome', 'Gender and plural are resolved' );
                assert.equal( mw.msg( 'hello' ), 'Hello <b>awesome</b> world', 'Gets message with default options (existing message)' );
                assert.equal( mw.msg( 'goodbye' ), '<goodbye>', 'Gets message with default options (nonexistent message)' );
 
-               assert.ok( mw.messages.set( 'plural-item', 'Found $1 {{PLURAL:$1|item|items}}' ) );
+               assert.ok( mw.messages.set( 'plural-item' , 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' );
                assert.equal( mw.msg( 'plural-item', 5 ), 'Found 5 items', 'Apply plural for count 5' );
                assert.equal( mw.msg( 'plural-item', 0 ), 'Found 0 items', 'Apply plural for count 0' );
                assert.equal( mw.msg( 'plural-item', 1 ), 'Found 1 item', 'Apply plural for count 1' );
diff --git a/tests/qunit/suites/resources/startup.test.js b/tests/qunit/suites/resources/startup.test.js
new file mode 100644 (file)
index 0000000..981452b
--- /dev/null
@@ -0,0 +1,86 @@
+/*global isCompatible: true */
+( function ( $ ) {
+       var testcases = {
+               // Supported: Compatible
+               gradeA: [
+                       // Chrome
+                       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16',
+                       // Firefox 4+
+                       'Mozilla/5.0 (Windows NT 6.1.1; rv:5.0) Gecko/20100101 Firefox/5.0',
+                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0',
+                       'Mozilla/5.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko/2012010317 Firefox/10.0a4',
+                       'Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0',
+                       'Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1',
+                       // Safari 5.0+
+                       'Mozilla/5.0 (Macintosh; I; Intel Mac OS X 10_6_7; ru-ru) AppleWebKit/534.31+ (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
+                       // Opera 11+
+                       'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10',
+                       // Internet Explorer 6+
+                       'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)',
+                       'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
+                       'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)',
+                       'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)',
+                       'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'
+               ],
+               // Supported: Uncompatible, serve basic content
+               gradeB: [
+                       // Internet Explorer < 6
+                       'Mozilla/2.0 (compatible; MSIE 3.03; Windows 3.1)',
+                       'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)',
+                       'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98;)',
+                       'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
+                       // Firefox < 4
+                       'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2',
+                       'Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.8.1.1) Gecko/20070311 Firefox/2.0.0.1',
+                       'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'
+
+               ],
+               // No special treatment blacklisting, benefit of doubt at own risk
+               gradeX: [
+                       // Gecko
+                       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060928 (Debian|Debian-1.8.0.7-1) Epiphany/2.14',
+                       'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.6) Gecko/20070817 IceWeasel/2.0.0.6-g2',
+                       // KHTML
+                       'Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.5 (like Gecko)',
+                       // Text browsers
+                       'Links (2.1pre33; Darwin 8.11.0 Power Macintosh; x)',
+                       'Links (6.9; Unix 6.9-astral sparc; 80x25)',
+                       'Lynx/2.8.6rel.4 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8g',
+                       'w3m/0.5.1',
+                       // Bots
+                       'Googlebot/2.1 (+http://www.google.com/bot.html)',
+                       'Mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html)',
+                       'Mozilla/5.0 (compatible; YandexBot/3.0)',
+                       // Scripts
+                       'curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5',
+                       'Wget/1.9',
+                       'Wget/1.10.1 (Red Hat modified)',
+                       // Unknown
+                       'I\'m an unknown browser',
+                       // Empty
+                       ''
+               ]
+       };
+
+       QUnit.module( 'startup', QUnit.newMwEnvironment() );
+
+       QUnit.test( 'isCompatible( Grade A )', testcases.gradeA.length, function ( assert ) {
+               $.each( testcases.gradeA, function ( i, ua ) {
+                               assert.strictEqual( isCompatible( ua ), true, ua );
+                       }
+               );
+       } );
+       QUnit.test( 'isCompatible( Grade B )', testcases.gradeB.length, function ( assert ) {
+               $.each( testcases.gradeB, function ( i, ua ) {
+                               assert.strictEqual( isCompatible( ua ), false, ua );
+                       }
+               );
+       } );
+       QUnit.test( 'isCompatible( Grade X )', testcases.gradeX.length, function ( assert ) {
+               $.each( testcases.gradeX, function ( i, ua ) {
+                               assert.strictEqual( isCompatible( ua ), true, ua );
+                       }
+               );
+       } );
+}( jQuery ) );
+