Merge "Make Maintenance::commitTransaction() do slave wait checks"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 5 Jan 2016 23:19:27 +0000 (23:19 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 5 Jan 2016 23:19:27 +0000 (23:19 +0000)
198 files changed:
RELEASE-NOTES-1.27
autoload.php
composer.json
docs/extension.schema.json
includes/DefaultSettings.php
includes/DerivativeRequest.php [new file with mode: 0644]
includes/FauxRequest.php [new file with mode: 0644]
includes/GlobalFunctions.php
includes/Linker.php
includes/OutputPage.php
includes/Title.php
includes/WebRequest.php
includes/api/ApiMain.php
includes/api/ApiQuery.php
includes/api/ApiQueryRecentChanges.php
includes/api/i18n/it.json
includes/changes/ChangesList.php
includes/filerepo/ForeignAPIRepo.php
includes/htmlform/HTMLButtonField.php
includes/htmlform/HTMLForm.php
includes/htmlform/HTMLFormField.php
includes/htmlform/OOUIHTMLForm.php
includes/import/WikiRevision.php
includes/installer/i18n/bg.json
includes/installer/i18n/el.json
includes/installer/i18n/uk.json
includes/logging/LogPage.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/search/SearchNearMatchResultSet.php [new file with mode: 0644]
includes/search/SearchResultSet.php
includes/search/SqlSearchResultSet.php [new file with mode: 0644]
includes/site/MediaWikiPageNameNormalizer.php [new file with mode: 0644]
includes/site/MediaWikiSite.php
includes/skins/Skin.php
includes/specialpage/QueryPage.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialChangePassword.php
includes/specials/SpecialComparePages.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialEmailInvalidate.php [new file with mode: 0644]
includes/specials/SpecialEmailuser.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialExport.php
includes/specials/SpecialUpload.php
includes/user/User.php
languages/classes/LanguageOs.php
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/kk-cyrl.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/lki.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/nap.json
languages/i18n/pl.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/sk.json
languages/i18n/sq.json
languages/i18n/sv.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/zh-hans.json
maintenance/archives/upgradeLogging.php
maintenance/attachLatest.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/benchmarkParse.php
maintenance/checkBadRedirects.php
maintenance/checkImages.php
maintenance/checkUsernames.php
maintenance/cleanupAncientTables.php
maintenance/cleanupBlocks.php
maintenance/cleanupImages.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupSpam.php
maintenance/cleanupTable.inc
maintenance/cleanupTitles.php
maintenance/cleanupWatchlist.php
maintenance/clearInterwikiCache.php
maintenance/convertLinks.php
maintenance/convertUserOptions.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteEqualMessages.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/deleteSelfExternals.php
maintenance/dumpLinks.php
maintenance/dumpUploads.php
maintenance/eraseArchivedFile.php
maintenance/fetchText.php
maintenance/fixDefaultJsonContentPages.php
maintenance/fixDoubleRedirects.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/fixTimestamps.php
maintenance/fixUserRegistration.php
maintenance/generateSitemap.php
maintenance/getSlaveServer.php
maintenance/getText.php
maintenance/importDump.php
maintenance/initEditCount.php
maintenance/initSiteStats.php
maintenance/migrateUserGroup.php
maintenance/moveBatch.php
maintenance/namespaceDupes.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/patchSql.php
maintenance/populateCategory.php
maintenance/populateContentModel.php
maintenance/populateFilearchiveSha1.php
maintenance/populateImageSha1.php
maintenance/populateParentId.php
maintenance/purgeList.php
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildall.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/refreshFileHeaders.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/renameDbPrefix.php
maintenance/resetUserTokens.php
maintenance/rollbackEdits.php
maintenance/runBatchedQuery.php
maintenance/showSiteStats.php
maintenance/sqlite.php
maintenance/storage/compressOld.php
maintenance/storage/dumpRev.php
maintenance/storage/fixBug20757.php
maintenance/storage/orphanStats.php
maintenance/storage/storageTypeStats.php
maintenance/storage/testCompression.php
maintenance/tidyUpBug37714.php
maintenance/update.php
maintenance/updateArticleCount.php
maintenance/updateDoubleWidthSearch.php
maintenance/updateRestrictions.php
maintenance/updateSearchIndex.php
maintenance/updateSpecialPages.php
maintenance/waitForSlave.php [deleted file]
phpcs.xml
resources/Resources.php
resources/src/jquery.tipsy/jquery.tipsy.css
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.messagePoster/mediawiki.messagePoster.MessagePoster.js
resources/src/mediawiki.special/mediawiki.special.blocklist.css [new file with mode: 0644]
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.inspect.js
resources/src/mediawiki/page/ready.js
tests/phpunit/includes/ImportLinkCacheIntegrationTest.php [deleted file]
tests/phpunit/includes/ImportTest.php [deleted file]
tests/phpunit/includes/import/ImportLinkCacheIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/import/ImportTest.php [new file with mode: 0644]
tests/phpunit/includes/page/WikiPageTest.php
tests/phpunit/includes/site/MediaWikiPageNameNormalizerTest.php [new file with mode: 0644]
tests/phpunit/tests/MediaWikiTestCaseTest.php

index 9860723..b5b5ae6 100644 (file)
@@ -144,6 +144,8 @@ production.
   ApiQueryBase::keyPartToTitle() all removed (deprecated since 1.24).
 * ApiQueryBase::checkRowCount() was removed (deprecated since 1.24).
 * ApiQueryBase::getDirectionDescription() was removed (deprecated since 1.25).
+* ApiQuery::getModules() was removed (deprecated since 1.21).
+* ApiMain::getModules() was removed (deprecated since 1.21).
 
 === Languages updated in 1.27 ===
 
@@ -196,6 +198,26 @@ changes to languages because of Phabricator reports.
   TextPassDumper classes have been removed.
 * The maintenance/backupTextPass.inc file was deleted. You should include
   maintenance/dumpTextPass.php instead.
+* WikiPage::getUsedTemplates() was removed (deprecated since 1.19).
+* wfEmptyMsg() was removed (deprecated since 1.18).
+* OutputPage::permissionRequired() was removed (deprecated since 1.18).
+* OutputPage::blockedPage() was removed (deprecated since 1.18).
+* User::getSkin() was removed (deprecated since 1.18).
+* OutputPage::includeJQuery() was removed (deprecated since 1.17).
+* WikiPage::updateRestrictions() was removed (deprecated since 1.19).
+* WikiPage::testPreSaveTransform() was removed (deprecated since 1.19).
+* LogPage::logName() was removed (deprecated since 1.19).
+* LogPage::logHeader() was removed (deprecated since 1.19).
+* wfCheckLimits() was removed (deprecated since 1.24).
+* Linker::makeKnownLinkObj() was removed (deprecated since 1.16).
+* Linker::makeLinkObj() was removed (deprecated since 1.16).
+* wfMsgForContentNoTrans() was removed (deprecated since 1.18).
+* ChangesList::usePatrol was removed (deprecated since 1.22).
+* wfMsgNoTrans() was removed (deprecated since 1.18).
+* Linker::makeImageLink2 was removed (deprecated since 1.20).
+* Title::userIsWatching() was removed (deprecated since 1.20).
+* Removed WaitForSlave maintenance script; use SELECT MASTER_POS_WAIT()
+  database function directly instead.
 
 == Compatibility ==
 
index 92c5436..49a3faf 100644 (file)
@@ -331,7 +331,7 @@ $wgAutoloadLocalClasses = array(
        'DeprecatedGlobal' => __DIR__ . '/includes/DeprecatedGlobal.php',
        'DeprecatedInterfaceFinder' => __DIR__ . '/maintenance/findDeprecated.php',
        'DerivativeContext' => __DIR__ . '/includes/context/DerivativeContext.php',
-       'DerivativeRequest' => __DIR__ . '/includes/WebRequest.php',
+       'DerivativeRequest' => __DIR__ . '/includes/DerivativeRequest.php',
        'DerivativeResourceLoaderContext' => __DIR__ . '/includes/resourceloader/DerivativeResourceLoaderContext.php',
        'DescribeFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
        'Diff' => __DIR__ . '/includes/diff/DairikiDiff.php',
@@ -377,7 +377,7 @@ $wgAutoloadLocalClasses = array(
        'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
        'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
        'EmailConfirmation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
-       'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
+       'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialEmailInvalidate.php',
        'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
        'EmaillingJob' => __DIR__ . '/includes/jobqueue/jobs/EmaillingJob.php',
        'EmptyBagOStuff' => __DIR__ . '/includes/libs/objectcache/EmptyBagOStuff.php',
@@ -417,7 +417,7 @@ $wgAutoloadLocalClasses = array(
        'FakeResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
        'Fallback' => __DIR__ . '/includes/Fallback.php',
        'FatalError' => __DIR__ . '/includes/exception/FatalError.php',
-       'FauxRequest' => __DIR__ . '/includes/WebRequest.php',
+       'FauxRequest' => __DIR__ . '/includes/FauxRequest.php',
        'FauxResponse' => __DIR__ . '/includes/WebResponse.php',
        'FeedItem' => __DIR__ . '/includes/Feed.php',
        'FeedUtils' => __DIR__ . '/includes/FeedUtils.php',
@@ -777,6 +777,7 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
        'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
        'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
+       'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
        'MediaWiki\\Tidy\\Html5Depurate' => __DIR__ . '/includes/tidy/Html5Depurate.php',
        'MediaWiki\\Tidy\\RaggettBase' => __DIR__ . '/includes/tidy/RaggettBase.php',
        'MediaWiki\\Tidy\\RaggettExternal' => __DIR__ . '/includes/tidy/RaggettExternal.php',
@@ -1101,7 +1102,7 @@ $wgAutoloadLocalClasses = array(
        'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
        'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
        'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
-       'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+       'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchNearMatchResultSet.php',
        'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
        'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
        'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
@@ -1213,7 +1214,7 @@ $wgAutoloadLocalClasses = array(
        'SpecialWhatLinksHere' => __DIR__ . '/includes/specials/SpecialWhatlinkshere.php',
        'SqlBagOStuff' => __DIR__ . '/includes/objectcache/SqlBagOStuff.php',
        'SqlDataUpdate' => __DIR__ . '/includes/deferred/SqlDataUpdate.php',
-       'SqlSearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+       'SqlSearchResultSet' => __DIR__ . '/includes/search/SqlSearchResultSet.php',
        'Sqlite' => __DIR__ . '/maintenance/sqlite.inc',
        'SqliteInstaller' => __DIR__ . '/includes/installer/SqliteInstaller.php',
        'SqliteMaintenance' => __DIR__ . '/maintenance/sqlite.php',
@@ -1354,7 +1355,6 @@ $wgAutoloadLocalClasses = array(
        'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
        'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
        'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/WANObjectCache.php',
-       'WaitForSlave' => __DIR__ . '/maintenance/waitForSlave.php',
        'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php',
        'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php',
        'WantedPagesPage' => __DIR__ . '/includes/specials/SpecialWantedpages.php',
index 9775823..89ad8a6 100644 (file)
                "wikimedia/running-stat": "1.1.0",
                "wikimedia/utfnormal": "1.0.3",
                "wikimedia/wrappedstring": "2.0.0",
-               "zordius/lightncandy": "0.21"
+               "zordius/lightncandy": "0.23"
        },
        "require-dev": {
-               "jakub-onderka/php-parallel-lint": "0.9",
+               "jakub-onderka/php-parallel-lint": "0.9.2",
                "justinrainbow/json-schema": "~1.3",
-               "mediawiki/mediawiki-codesniffer": "0.4.0",
+               "mediawiki/mediawiki-codesniffer": "0.5.1",
                "monolog/monolog": "~1.17.2",
                "nikic/php-parser": "1.4.1",
-               "nmred/kafka-php": "0.1.4",
+               "nmred/kafka-php": "0.1.5",
                "phpunit/phpunit": "3.7.37",
                "wikimedia/avro": "1.7.7"
        },
index 8c760cc..4218e8a 100644 (file)
                        "type": "object",
                        "description": "Registry of factory functions to create Config objects"
                },
+               "CentralIdLookupProviders": {
+                       "type": "object",
+                       "description": "Central ID lookup providers"
+               },
                "namespaces": {
                        "type": "array",
                        "description": "Method to add extra namespaces",
                "ValidSkinNames": {
                        "type": "object"
                },
+               "FeedClasses": {
+                       "type": "object",
+                       "description": "Available feeds objects"
+               },
                "SkinOOUIThemes": {
                        "type": "object"
                },
index a6d34b0..5e6e511 100644 (file)
@@ -7347,6 +7347,7 @@ $wgUseAjax = true;
 /**
  * List of Ajax-callable functions.
  * Extensions acting as Ajax callbacks must register here
+ * @deprecated (officially) since 1.27; use the API instead
  */
 $wgAjaxExportList = array();
 
diff --git a/includes/DerivativeRequest.php b/includes/DerivativeRequest.php
new file mode 100644 (file)
index 0000000..dda1358
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Deal with importing all those nasty globals and things
+ *
+ * Copyright © 2003 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * 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
+ */
+
+/**
+ * Similar to FauxRequest, but only fakes URL parameters and method
+ * (POST or GET) and use the base request for the remaining stuff
+ * (cookies, session and headers).
+ *
+ * @ingroup HTTP
+ * @since 1.19
+ */
+class DerivativeRequest extends FauxRequest {
+       private $base;
+
+       /**
+        * @param WebRequest $base
+        * @param array $data Array of *non*-urlencoded key => value pairs, the
+        *   fake GET/POST values
+        * @param bool $wasPosted Whether to treat the data as POST
+        */
+       public function __construct( WebRequest $base, $data, $wasPosted = false ) {
+               $this->base = $base;
+               parent::__construct( $data, $wasPosted );
+       }
+
+       public function getCookie( $key, $prefix = null, $default = null ) {
+               return $this->base->getCookie( $key, $prefix, $default );
+       }
+
+       public function checkSessionCookie() {
+               return $this->base->checkSessionCookie();
+       }
+
+       public function getHeader( $name, $flags = 0 ) {
+               return $this->base->getHeader( $name, $flags );
+       }
+
+       public function getAllHeaders() {
+               return $this->base->getAllHeaders();
+       }
+
+       public function getSessionData( $key ) {
+               return $this->base->getSessionData( $key );
+       }
+
+       public function setSessionData( $key, $data ) {
+               $this->base->setSessionData( $key, $data );
+       }
+
+       public function getAcceptLang() {
+               return $this->base->getAcceptLang();
+       }
+
+       public function getIP() {
+               return $this->base->getIP();
+       }
+
+       public function getProtocol() {
+               return $this->base->getProtocol();
+       }
+
+       public function getElapsedTime() {
+               return $this->base->getElapsedTime();
+       }
+}
diff --git a/includes/FauxRequest.php b/includes/FauxRequest.php
new file mode 100644 (file)
index 0000000..888f853
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Deal with importing all those nasty globals and things
+ *
+ * Copyright © 2003 Brion Vibber <brion@pobox.com>
+ * https://www.mediawiki.org/
+ *
+ * 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
+ */
+
+/**
+ * WebRequest clone which takes values from a provided array.
+ *
+ * @ingroup HTTP
+ */
+class FauxRequest extends WebRequest {
+       private $wasPosted = false;
+       private $session = array();
+       private $requestUrl;
+       protected $cookies = array();
+
+       /**
+        * @param array $data Array of *non*-urlencoded key => value pairs, the
+        *   fake GET/POST values
+        * @param bool $wasPosted Whether to treat the data as POST
+        * @param array|null $session Session array or null
+        * @param string $protocol 'http' or 'https'
+        * @throws MWException
+        */
+       public function __construct( $data = array(), $wasPosted = false,
+               $session = null, $protocol = 'http'
+       ) {
+               $this->requestTime = microtime( true );
+
+               if ( is_array( $data ) ) {
+                       $this->data = $data;
+               } else {
+                       throw new MWException( "FauxRequest() got bogus data" );
+               }
+               $this->wasPosted = $wasPosted;
+               if ( $session ) {
+                       $this->session = $session;
+               }
+               $this->protocol = $protocol;
+       }
+
+       /**
+        * Initialise the header list
+        */
+       protected function initHeaders() {
+               // Nothing to init
+       }
+
+       /**
+        * @param string $name
+        * @param string $default
+        * @return string
+        */
+       public function getText( $name, $default = '' ) {
+               # Override; don't recode since we're using internal data
+               return (string)$this->getVal( $name, $default );
+       }
+
+       /**
+        * @return array
+        */
+       public function getValues() {
+               return $this->data;
+       }
+
+       /**
+        * @return array
+        */
+       public function getQueryValues() {
+               if ( $this->wasPosted ) {
+                       return array();
+               } else {
+                       return $this->data;
+               }
+       }
+
+       public function getMethod() {
+               return $this->wasPosted ? 'POST' : 'GET';
+       }
+
+       /**
+        * @return bool
+        */
+       public function wasPosted() {
+               return $this->wasPosted;
+       }
+
+       public function getCookie( $key, $prefix = null, $default = null ) {
+               if ( $prefix === null ) {
+                       global $wgCookiePrefix;
+                       $prefix = $wgCookiePrefix;
+               }
+               $name = $prefix . $key;
+               return isset( $this->cookies[$name] ) ? $this->cookies[$name] : $default;
+       }
+
+       /**
+        * @since 1.26
+        * @param string $name Unprefixed name of the cookie to set
+        * @param string|null $value Value of the cookie to set
+        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
+        */
+       public function setCookie( $key, $value, $prefix = null ) {
+               $this->setCookies( array( $key => $value ), $prefix );
+       }
+
+       /**
+        * @since 1.26
+        * @param array $cookies
+        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
+        */
+       public function setCookies( $cookies, $prefix = null ) {
+               if ( $prefix === null ) {
+                       global $wgCookiePrefix;
+                       $prefix = $wgCookiePrefix;
+               }
+               foreach ( $cookies as $key => $value ) {
+                       $name = $prefix . $key;
+                       $this->cookies[$name] = $value;
+               }
+       }
+
+       public function checkSessionCookie() {
+               return false;
+       }
+
+       /**
+        * @since 1.25
+        */
+       public function setRequestURL( $url ) {
+               $this->requestUrl = $url;
+       }
+
+       /**
+        * @since 1.25 MWException( "getRequestURL not implemented" )
+        * no longer thrown.
+        */
+       public function getRequestURL() {
+               if ( $this->requestUrl === null ) {
+                       throw new MWException( 'Request URL not set' );
+               }
+               return $this->requestUrl;
+       }
+
+       public function getProtocol() {
+               return $this->protocol;
+       }
+
+       /**
+        * @param string $name
+        * @param string $val
+        */
+       public function setHeader( $name, $val ) {
+               $this->setHeaders( array( $name => $val ) );
+       }
+
+       /**
+        * @since 1.26
+        * @param array $headers
+        */
+       public function setHeaders( $headers ) {
+               foreach ( $headers as $name => $val ) {
+                       $name = strtoupper( $name );
+                       $this->headers[$name] = $val;
+               }
+       }
+
+       /**
+        * @param string $key
+        * @return array|null
+        */
+       public function getSessionData( $key ) {
+               if ( isset( $this->session[$key] ) ) {
+                       return $this->session[$key];
+               }
+               return null;
+       }
+
+       /**
+        * @param string $key
+        * @param array $data
+        */
+       public function setSessionData( $key, $data ) {
+               $this->session[$key] = $data;
+       }
+
+       /**
+        * @return array|mixed|null
+        */
+       public function getSessionArray() {
+               return $this->session;
+       }
+
+       /**
+        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
+        * @return string
+        */
+       public function getRawQueryString() {
+               return '';
+       }
+
+       /**
+        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
+        * @return string
+        */
+       public function getRawPostString() {
+               return '';
+       }
+
+       /**
+        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
+        * @return string
+        */
+       public function getRawInput() {
+               return '';
+       }
+
+       /**
+        * @param array $extWhitelist
+        * @return bool
+        */
+       public function checkUrlExtension( $extWhitelist = array() ) {
+               return true;
+       }
+
+       /**
+        * @return string
+        */
+       protected function getRawIP() {
+               return '127.0.0.1';
+       }
+}
index 47d086b..2b018d9 100644 (file)
@@ -1487,22 +1487,6 @@ function wfMsg( $key ) {
        return wfMsgReal( $key, $args );
 }
 
-/**
- * Same as above except doesn't transform the message
- *
- * @deprecated since 1.18
- *
- * @param string $key
- * @return string
- */
-function wfMsgNoTrans( $key ) {
-       wfDeprecated( __METHOD__, '1.21' );
-
-       $args = func_get_args();
-       array_shift( $args );
-       return wfMsgReal( $key, $args, true, false, false );
-}
-
 /**
  * Get a message from anywhere, for the current global language
  * set with $wgLanguageCode.
@@ -1543,29 +1527,6 @@ function wfMsgForContent( $key ) {
        return wfMsgReal( $key, $args, true, $forcontent );
 }
 
-/**
- * Same as above except doesn't transform the message
- *
- * @deprecated since 1.18
- *
- * @param string $key
- * @return string
- */
-function wfMsgForContentNoTrans( $key ) {
-       wfDeprecated( __METHOD__, '1.21' );
-
-       global $wgForceUIMsgAsContentMsg;
-       $args = func_get_args();
-       array_shift( $args );
-       $forcontent = true;
-       if ( is_array( $wgForceUIMsgAsContentMsg )
-               && in_array( $key, $wgForceUIMsgAsContentMsg )
-       ) {
-               $forcontent = false;
-       }
-       return wfMsgReal( $key, $args, true, $forcontent, false );
-}
-
 /**
  * Really get a message
  *
@@ -1778,22 +1739,6 @@ function wfMsgExt( $key, $options ) {
        return $string;
 }
 
-/**
- * Since wfMsg() and co suck, they don't return false if the message key they
- * looked up didn't exist but instead the key wrapped in <>'s, this function checks for the
- * nonexistence of messages by checking the MessageCache::get() result directly.
- *
- * @deprecated since 1.18. Use Message::isDisabled().
- *
- * @param string $key The message key looked up
- * @return bool True if the message *doesn't* exist.
- */
-function wfEmptyMsg( $key ) {
-       wfDeprecated( __METHOD__, '1.21' );
-
-       return MessageCache::singleton()->get( $key, /*useDB*/true, /*content*/false ) === false;
-}
-
 /**
  * Fetch server name for use in error reporting etc.
  * Use real server name if available, so we know which machine
@@ -2012,21 +1957,6 @@ function wfClientAcceptsGzip( $force = false ) {
        return $result;
 }
 
-/**
- * Obtain the offset and limit values from the request string;
- * used in special pages
- *
- * @param int $deflimit Default limit if none supplied
- * @param string $optionname Name of a user preference to check against
- * @return array
- * @deprecated since 1.24, just call WebRequest::getLimitOffset() directly
- */
-function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
-       global $wgRequest;
-       wfDeprecated( __METHOD__, '1.24' );
-       return $wgRequest->getLimitOffset( $deflimit, $optionname );
-}
-
 /**
  * Escapes the given text so that it may be output using addWikiText()
  * without any linking, formatting, etc. making its way through. This
index 5255b9a..80e4c62 100644 (file)
@@ -670,17 +670,6 @@ class Linker {
                return str_replace( "\n", ' ', $prefix . $s . $postfix );
        }
 
-       /**
-        * See makeImageLink()
-        * When this function is removed, remove if( $parser instanceof Parser ) check there too
-        * @deprecated since 1.20
-        */
-       public static function makeImageLink2( Title $title, $file, $frameParams = array(),
-               $handlerParams = array(), $time = false, $query = "", $widthOption = null ) {
-               return self::makeImageLink( null, $title, $file, $frameParams,
-                       $handlerParams, $time, $query, $widthOption );
-       }
-
        /**
         * Get the link parameters for MediaTransformOutput::toHtml() from given
         * frame parameters supplied by the Parser.
@@ -2315,73 +2304,6 @@ class Linker {
 
        /* Deprecated methods */
 
-       /**
-        * @deprecated since 1.16 Use link(); warnings since 1.21
-        *
-        * Make a link for a title which may or may not be in the database. If you need to
-        * call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each
-        * call to this will result in a DB query.
-        *
-        * @param Title $nt The title object to make the link from, e.g. from Title::newFromText.
-        * @param string $text Link text
-        * @param string $query Optional query part
-        * @param string $trail Optional trail. Alphabetic characters at the start of this string will
-        *   be included in the link text. Other characters will be appended after
-        *   the end of the link.
-        * @param string $prefix Optional prefix. As trail, only before instead of after.
-        * @return string
-        */
-       static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               $query = wfCgiToArray( $query );
-               list( $inside, $trail ) = self::splitTrail( $trail );
-               if ( $text === '' ) {
-                       $text = self::linkText( $nt );
-               }
-
-               $ret = self::link( $nt, "$prefix$text$inside", array(), $query ) . $trail;
-
-               return $ret;
-       }
-
-       /**
-        * @deprecated since 1.16 Use link(); warnings since 1.21
-        *
-        * Make a link for a title which definitely exists. This is faster than makeLinkObj because
-        * it doesn't have to do a database query. It's also valid for interwiki titles and special
-        * pages.
-        *
-        * @param Title $title Title object of target page
-        * @param string $text Text to replace the title
-        * @param string $query Link target
-        * @param string $trail Text after link
-        * @param string $prefix Text before link text
-        * @param string $aprops Extra attributes to the a-element
-        * @param string $style Style to apply - if empty, use getInternalLinkAttributesObj instead
-        * @return string The a-element
-        */
-       static function makeKnownLinkObj(
-               $title, $text = '', $query = '', $trail = '', $prefix = '', $aprops = '', $style = ''
-       ) {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               if ( $text == '' ) {
-                       $text = self::linkText( $title );
-               }
-               $attribs = Sanitizer::mergeAttributes(
-                       Sanitizer::decodeTagAttributes( $aprops ),
-                       Sanitizer::decodeTagAttributes( $style )
-               );
-               $query = wfCgiToArray( $query );
-               list( $inside, $trail ) = self::splitTrail( $trail );
-
-               $ret = self::link( $title, "$prefix$text$inside", $attribs, $query,
-                       array( 'known', 'noclasses' ) ) . $trail;
-
-               return $ret;
-       }
-
        /**
         * Returns the attributes for the tooltip and access key.
         * @param string $name
index 3e0564b..97165b4 100644 (file)
@@ -229,9 +229,6 @@ class OutputPage extends ContextSource {
        /** @var string */
        private $mPageTitleActionText = '';
 
-       /** @var array */
-       private $mParseWarnings = array();
-
        /** @var int Cache stuff. Looks like mEnableClientCache */
        protected $mCdnMaxage = 0;
        /** @var int Upper limit on mCdnMaxage */
@@ -1773,7 +1770,6 @@ class OutputPage extends ContextSource {
                $this->mNewSectionLink = $parserOutput->getNewSection();
                $this->mHideNewSectionLink = $parserOutput->getHideNewSection();
 
-               $this->mParseWarnings = $parserOutput->getWarnings();
                if ( !$parserOutput->isCacheable() ) {
                        $this->enableClientCache( false );
                }
@@ -2338,15 +2334,6 @@ class OutputPage extends ContextSource {
                print $ins;
        }
 
-       /**
-        * Produce a "user is blocked" page.
-        * @deprecated since 1.18
-        */
-       function blockedPage() {
-               wfDeprecated( __METHOD__, '1.18' );
-               throw new UserBlockedError( $this->getUser()->mBlock );
-       }
-
        /**
         * Prepare this object to display an error page; disable caching and
         * indexing, clear the current text and redirect, set the page's title
@@ -2488,17 +2475,6 @@ class OutputPage extends ContextSource {
                $this->returnToMain();
        }
 
-       /**
-        * Display an error page noting that a given permission bit is required.
-        * @deprecated since 1.18, just throw the exception directly
-        * @param string $permission Key required
-        * @throws PermissionsError
-        */
-       public function permissionRequired( $permission ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               throw new PermissionsError( $permission );
-       }
-
        /**
         * Format a list of error messages
         *
@@ -3953,20 +3929,6 @@ class OutputPage extends ContextSource {
                $this->addWikiText( $s );
        }
 
-       /**
-        * Include jQuery core. Use this to avoid loading it multiple times
-        * before we get a usable script loader.
-        *
-        * @param array $modules List of jQuery modules which should be loaded
-        * @return array The list of modules which were not loaded.
-        * @since 1.16
-        * @deprecated since 1.17
-        */
-       public function includeJQuery( array $modules = array() ) {
-               wfDeprecated( __METHOD__, '1.17' );
-               return array();
-       }
-
        /**
         * Enables/disables TOC, doesn't override __NOTOC__
         * @param bool $flag
index 35d9c6b..3f880f5 100644 (file)
@@ -130,12 +130,6 @@ class Title {
         */
        public $mDefaultNamespace = NS_MAIN;
 
-       /**
-        * @var bool Is $wgUser watching this page? null if unfilled, accessed
-        * through userIsWatching()
-        */
-       protected $mWatched = null;
-
        /** @var int The page length, 0 for special pages */
        protected $mLength = -1;
 
@@ -1875,25 +1869,6 @@ class Title {
                return $s;
        }
 
-       /**
-        * Is $wgUser watching this page?
-        *
-        * @deprecated since 1.20; use User::isWatched() instead.
-        * @return bool
-        */
-       public function userIsWatching() {
-               global $wgUser;
-
-               if ( is_null( $this->mWatched ) ) {
-                       if ( NS_SPECIAL == $this->mNamespace || !$wgUser->isLoggedIn() ) {
-                               $this->mWatched = false;
-                       } else {
-                               $this->mWatched = $wgUser->isWatched( $this );
-                       }
-               }
-               return $this->mWatched;
-       }
-
        /**
         * Can $user perform $action on this page?
         * This skips potentially expensive cascading permission checks
index 23eb63b..6cb39d8 100644 (file)
  * URL or via a POSTed form stripping illegal input characters and
  * normalizing Unicode sequences.
  *
- * Usually this is used via a global singleton, $wgRequest. You should
- * not create a second WebRequest object; make a FauxRequest object if
- * you want to pass arbitrary data to some function in place of the web
- * input.
- *
  * @ingroup HTTP
  */
 class WebRequest {
@@ -1175,294 +1170,3 @@ HTML;
                $this->ip = $ip;
        }
 }
-
-/**
- * WebRequest clone which takes values from a provided array.
- *
- * @ingroup HTTP
- */
-class FauxRequest extends WebRequest {
-       private $wasPosted = false;
-       private $session = array();
-       private $requestUrl;
-       protected $cookies = array();
-
-       /**
-        * @param array $data Array of *non*-urlencoded key => value pairs, the
-        *   fake GET/POST values
-        * @param bool $wasPosted Whether to treat the data as POST
-        * @param array|null $session Session array or null
-        * @param string $protocol 'http' or 'https'
-        * @throws MWException
-        */
-       public function __construct( $data = array(), $wasPosted = false,
-               $session = null, $protocol = 'http'
-       ) {
-               $this->requestTime = microtime( true );
-
-               if ( is_array( $data ) ) {
-                       $this->data = $data;
-               } else {
-                       throw new MWException( "FauxRequest() got bogus data" );
-               }
-               $this->wasPosted = $wasPosted;
-               if ( $session ) {
-                       $this->session = $session;
-               }
-               $this->protocol = $protocol;
-       }
-
-       /**
-        * Initialise the header list
-        */
-       protected function initHeaders() {
-               // Nothing to init
-       }
-
-       /**
-        * @param string $name
-        * @param string $default
-        * @return string
-        */
-       public function getText( $name, $default = '' ) {
-               # Override; don't recode since we're using internal data
-               return (string)$this->getVal( $name, $default );
-       }
-
-       /**
-        * @return array
-        */
-       public function getValues() {
-               return $this->data;
-       }
-
-       /**
-        * @return array
-        */
-       public function getQueryValues() {
-               if ( $this->wasPosted ) {
-                       return array();
-               } else {
-                       return $this->data;
-               }
-       }
-
-       public function getMethod() {
-               return $this->wasPosted ? 'POST' : 'GET';
-       }
-
-       /**
-        * @return bool
-        */
-       public function wasPosted() {
-               return $this->wasPosted;
-       }
-
-       public function getCookie( $key, $prefix = null, $default = null ) {
-               if ( $prefix === null ) {
-                       global $wgCookiePrefix;
-                       $prefix = $wgCookiePrefix;
-               }
-               $name = $prefix . $key;
-               return isset( $this->cookies[$name] ) ? $this->cookies[$name] : $default;
-       }
-
-       /**
-        * @since 1.26
-        * @param string $name Unprefixed name of the cookie to set
-        * @param string|null $value Value of the cookie to set
-        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
-        */
-       public function setCookie( $key, $value, $prefix = null ) {
-               $this->setCookies( array( $key => $value ), $prefix );
-       }
-
-       /**
-        * @since 1.26
-        * @param array $cookies
-        * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
-        */
-       public function setCookies( $cookies, $prefix = null ) {
-               if ( $prefix === null ) {
-                       global $wgCookiePrefix;
-                       $prefix = $wgCookiePrefix;
-               }
-               foreach ( $cookies as $key => $value ) {
-                       $name = $prefix . $key;
-                       $this->cookies[$name] = $value;
-               }
-       }
-
-       public function checkSessionCookie() {
-               return false;
-       }
-
-       /**
-        * @since 1.25
-        */
-       public function setRequestURL( $url ) {
-               $this->requestUrl = $url;
-       }
-
-       /**
-        * @since 1.25 MWException( "getRequestURL not implemented" )
-        * no longer thrown.
-        */
-       public function getRequestURL() {
-               if ( $this->requestUrl === null ) {
-                       throw new MWException( 'Request URL not set' );
-               }
-               return $this->requestUrl;
-       }
-
-       public function getProtocol() {
-               return $this->protocol;
-       }
-
-       /**
-        * @param string $name
-        * @param string $val
-        */
-       public function setHeader( $name, $val ) {
-               $this->setHeaders( array( $name => $val ) );
-       }
-
-       /**
-        * @since 1.26
-        * @param array $headers
-        */
-       public function setHeaders( $headers ) {
-               foreach ( $headers as $name => $val ) {
-                       $name = strtoupper( $name );
-                       $this->headers[$name] = $val;
-               }
-       }
-
-       /**
-        * @param string $key
-        * @return array|null
-        */
-       public function getSessionData( $key ) {
-               if ( isset( $this->session[$key] ) ) {
-                       return $this->session[$key];
-               }
-               return null;
-       }
-
-       /**
-        * @param string $key
-        * @param array $data
-        */
-       public function setSessionData( $key, $data ) {
-               $this->session[$key] = $data;
-       }
-
-       /**
-        * @return array|mixed|null
-        */
-       public function getSessionArray() {
-               return $this->session;
-       }
-
-       /**
-        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
-        * @return string
-        */
-       public function getRawQueryString() {
-               return '';
-       }
-
-       /**
-        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
-        * @return string
-        */
-       public function getRawPostString() {
-               return '';
-       }
-
-       /**
-        * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
-        * @return string
-        */
-       public function getRawInput() {
-               return '';
-       }
-
-       /**
-        * @param array $extWhitelist
-        * @return bool
-        */
-       public function checkUrlExtension( $extWhitelist = array() ) {
-               return true;
-       }
-
-       /**
-        * @return string
-        */
-       protected function getRawIP() {
-               return '127.0.0.1';
-       }
-}
-
-/**
- * Similar to FauxRequest, but only fakes URL parameters and method
- * (POST or GET) and use the base request for the remaining stuff
- * (cookies, session and headers).
- *
- * @ingroup HTTP
- * @since 1.19
- */
-class DerivativeRequest extends FauxRequest {
-       private $base;
-
-       /**
-        * @param WebRequest $base
-        * @param array $data Array of *non*-urlencoded key => value pairs, the
-        *   fake GET/POST values
-        * @param bool $wasPosted Whether to treat the data as POST
-        */
-       public function __construct( WebRequest $base, $data, $wasPosted = false ) {
-               $this->base = $base;
-               parent::__construct( $data, $wasPosted );
-       }
-
-       public function getCookie( $key, $prefix = null, $default = null ) {
-               return $this->base->getCookie( $key, $prefix, $default );
-       }
-
-       public function checkSessionCookie() {
-               return $this->base->checkSessionCookie();
-       }
-
-       public function getHeader( $name, $flags = 0 ) {
-               return $this->base->getHeader( $name, $flags );
-       }
-
-       public function getAllHeaders() {
-               return $this->base->getAllHeaders();
-       }
-
-       public function getSessionData( $key ) {
-               return $this->base->getSessionData( $key );
-       }
-
-       public function setSessionData( $key, $data ) {
-               $this->base->setSessionData( $key, $data );
-       }
-
-       public function getAcceptLang() {
-               return $this->base->getAcceptLang();
-       }
-
-       public function getIP() {
-               return $this->base->getIP();
-       }
-
-       public function getProtocol() {
-               return $this->base->getProtocol();
-       }
-
-       public function getElapsedTime() {
-               return $this->base->getElapsedTime();
-       }
-}
index 89ff19a..ef9f901 100644 (file)
@@ -1788,15 +1788,6 @@ class ApiMain extends ApiBase {
                $this->getModuleManager()->addModule( $name, 'format', $class );
        }
 
-       /**
-        * Get the array mapping module names to class names
-        * @deprecated since 1.21, Use getModuleManager()'s methods instead.
-        * @return array
-        */
-       function getModules() {
-               return $this->getModuleManager()->getNamesWithClasses( 'action' );
-       }
-
        /**
         * Returns the list of supported formats in form ( 'format' => 'ClassName' )
         *
index 902bca7..d12a68f 100644 (file)
@@ -184,17 +184,6 @@ class ApiQuery extends ApiBase {
                return $this->mPageSet;
        }
 
-       /**
-        * Get the array mapping module names to class names
-        * @deprecated since 1.21, use getModuleManager()'s methods instead
-        * @return array Array(modulename => classname)
-        */
-       public function getModules() {
-               wfDeprecated( __METHOD__, '1.21' );
-
-               return $this->getModuleManager()->getNamesWithClasses();
-       }
-
        /**
         * Get the generators array mapping module names to class names
         * @deprecated since 1.21, list of generators is maintained by ApiPageSet
index c99d87c..5426fb8 100644 (file)
@@ -224,7 +224,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->addWhereIf( 'page_is_redirect = 1', isset( $show['redirect'] ) );
 
                        if ( isset( $show['unpatrolled'] ) ) {
-                               // See ChangesList:isUnpatrolled
+                               // See ChangesList::isUnpatrolled
                                if ( $user->useRCPatrol() ) {
                                        $this->addWhere( 'rc_patrolled = 0' );
                                } elseif ( $user->useNPPatrol() ) {
index c4f7a3f..cfa1417 100644 (file)
        "api-help-param-continue": "Quando più risultati sono disponibili, usa questo per continuare.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
        "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
+       "api-help-permissions": "{{PLURAL:$1|Permesso|Permessi}}:",
        "api-credits-header": "Crediti"
 }
index 9567700..7eadcc8 100644 (file)
@@ -481,20 +481,6 @@ class ChangesList extends ContextSource {
                }
        }
 
-       /**
-        * Check whether to enable recent changes patrol features
-        *
-        * @deprecated since 1.22
-        * @return bool
-        */
-       public static function usePatrol() {
-               global $wgUser;
-
-               wfDeprecated( __METHOD__, '1.22' );
-
-               return $wgUser->useRCPatrol();
-       }
-
        /**
         * Returns the string which indicates the number of watching users
         * @param int $count Number of user watching a page
index f898bb6..debdeb5 100644 (file)
@@ -499,7 +499,7 @@ class ForeignAPIRepo extends FileRepo {
 
        /**
         * Like a Http:get request, but with custom User-Agent.
-        * @see Http:get
+        * @see Http::get
         * @param string $url
         * @param string $timeout
         * @param array $options
index 1d45e5f..b4849e5 100644 (file)
@@ -5,10 +5,24 @@
  * click handling code in JavaScript. Use a HTMLSubmitField if you merely
  * wish to add a submit button to a form.
  *
+ * Additional recognized configuration parameters include:
+ * - flags: OOUI flags for the button, see OOUI\\FlaggedElement
+ * - buttonlabel-message: Message to use for the button display text, instead
+ *   of the value from 'default'. Overrides 'buttonlabel' and 'buttonlabel-raw'.
+ * - buttonlabel: Text to display for the button display text, instead
+ *   of the value from 'default'. Overrides 'buttonlabel-raw'.
+ * - buttonlabel-raw: HTMLto display for the button display text, instead
+ *   of the value from 'default'.
+ *
+ * Note that the buttonlabel parameters are not supported on IE6 and IE7 due to
+ * bugs in those browsers. If detected, they will be served buttons using the
+ * value of 'default' as the button label.
+ *
  * @since 1.22
  */
 class HTMLButtonField extends HTMLFormField {
        protected $buttonType = 'button';
+       protected $buttonLabel = null;
 
        /** @var array $mFlags Flags to add to OOUI Button widget */
        protected $mFlags = array();
@@ -18,6 +32,30 @@ class HTMLButtonField extends HTMLFormField {
                if ( isset( $info['flags'] ) ) {
                        $this->mFlags = $info['flags'];
                }
+
+               # Generate the label from a message, if possible
+               if ( isset( $info['buttonlabel-message'] ) ) {
+                       $msgInfo = $info['buttonlabel-message'];
+
+                       if ( is_array( $msgInfo ) ) {
+                               $msg = array_shift( $msgInfo );
+                       } else {
+                               $msg = $msgInfo;
+                               $msgInfo = array();
+                       }
+
+                       $this->buttonLabel = $this->msg( $msg, $msgInfo )->parse();
+               } elseif ( isset( $info['buttonlabel'] ) ) {
+                       if ( $info['buttonlabel'] === '&#160;' ) {
+                               // Apparently some things set &nbsp directly and in an odd format
+                               $this->buttonLabel = '&#160;';
+                       } else {
+                               $this->buttonLabel = htmlspecialchars( $info['buttonlabel'] );
+                       }
+               } elseif ( isset( $info['buttonlabel-raw'] ) ) {
+                       $this->buttonLabel = $info['buttonlabel-raw'];
+               }
+
                parent::__construct( $info );
        }
 
@@ -37,9 +75,16 @@ class HTMLButtonField extends HTMLFormField {
                $attr = array(
                        'class' => 'mw-htmlform-submit ' . $this->mClass . $flags,
                        'id' => $this->mID,
+                       'type' => $this->buttonType,
+                       'name' => $this->mName,
+                       'value' => $value,
                ) + $this->getAttributes( array( 'disabled', 'tabindex' ) );
 
-               return Html::input( $this->mName, $value, $this->buttonType, $attr );
+               if ( $this->isBadIE() ) {
+                       return Html::element( 'input', $attr );
+               } else {
+                       return Html::rawElement( 'button', $attr, $this->buttonLabel ?: htmlspecialchars( $value ) );
+               }
        }
 
        /**
@@ -51,11 +96,14 @@ class HTMLButtonField extends HTMLFormField {
                return new OOUI\ButtonInputWidget( array(
                        'name' => $this->mName,
                        'value' => $value,
-                       'label' => $value,
+                       'label' => !$this->isBadIE() && $this->buttonLabel
+                               ? new OOUI\HtmlSnippet( $this->buttonLabel )
+                               : $value,
                        'type' => $this->buttonType,
                        'classes' => array( 'mw-htmlform-submit', $this->mClass ),
                        'id' => $this->mID,
                        'flags' => $this->mFlags,
+                       'useInputTag' => $this->isBadIE(),
                ) + $this->getAttributes( array( 'disabled', 'tabindex' ), array( 'tabindex' => 'tabIndex' ) ) );
        }
 
@@ -74,4 +122,15 @@ class HTMLButtonField extends HTMLFormField {
        public function validate( $value, $alldata ) {
                return true;
        }
+
+       /**
+        * IE<8 has bugs with <button>, so we'll need to avoid them.
+        * @return bool Whether the request is from a bad version of IE
+        */
+       private function isBadIE() {
+               $request = $this->mParent
+                       ? $this->mParent->getRequest()
+                       : RequestContext::getMain()->getRequest();
+               return preg_match( '/MSIE [1-7]\./i', $request->getHeader( 'User-Agent' ) );
+       }
 }
index b0d90af..8bb1bba 100644 (file)
@@ -526,6 +526,21 @@ class HTMLForm extends ContextSource {
                return false;
        }
 
+       /**
+        * Same as self::show with the difference, that the form will be
+        * added to the output, no matter, if the validation was good or not.
+        * @return bool|Status Whether submission was successful.
+        */
+       function showAlways() {
+               $this->prepareForm();
+
+               $result = $this->tryAuthorizedSubmit();
+
+               $this->displayForm( $result );
+
+               return $result;
+       }
+
        /**
         * Validate all the fields, and call the submission callback
         * function if everything is kosher.
@@ -855,15 +870,53 @@ class HTMLForm extends ContextSource {
        /**
         * Add a button to the form
         *
-        * @param string $name Field name.
-        * @param string $value Field value
-        * @param string $id DOM id for the button (default: null)
-        * @param array $attribs
-        *
+        * @since 1.27 takes an array as shown. Earlier versions accepted
+        *  'name', 'value', 'id', and 'attribs' as separate parameters in that
+        *  order.
+        * @note Custom labels ('label', 'label-message', 'label-raw') are not
+        *  supported for IE6 and IE7 due to bugs in those browsers. If detected,
+        *  they will be served buttons using 'value' as the button label.
+        * @param array $data Data to define the button:
+        *  - name: (string) Button name.
+        *  - value: (string) Button value.
+        *  - label-message: (string, optional) Button label message key to use
+        *    instead of 'value'. Overrides 'label' and 'label-raw'.
+        *  - label: (string, optional) Button label text to use instead of
+        *    'value'. Overrides 'label-raw'.
+        *  - label-raw: (string, optional) Button label HTML to use instead of
+        *    'value'.
+        *  - id: (string, optional) DOM id for the button.
+        *  - attribs: (array, optional) Additional HTML attributes.
+        *  - flags: (string|string[], optional) OOUI flags.
         * @return HTMLForm $this for chaining calls (since 1.20)
         */
-       public function addButton( $name, $value, $id = null, $attribs = null ) {
-               $this->mButtons[] = compact( 'name', 'value', 'id', 'attribs' );
+       public function addButton( $data ) {
+               if ( !is_array( $data ) ) {
+                       $args = func_get_args();
+                       if ( count( $args ) < 2 || count( $args ) > 4 ) {
+                               throw new InvalidArgumentException(
+                                       'Incorrect number of arguments for deprecated calling style'
+                               );
+                       }
+                       $data = array(
+                               'name' => $args[0],
+                               'value' => $args[1],
+                               'id' => isset( $args[2] ) ? $args[2] : null,
+                               'attribs' => isset( $args[3] ) ? $args[3] : null,
+                       );
+               } else {
+                       if ( !isset( $data['name'] ) ) {
+                               throw new InvalidArgumentException( 'A name is required' );
+                       }
+                       if ( !isset( $data['value'] ) ) {
+                               throw new InvalidArgumentException( 'A value is required' );
+                       }
+               }
+               $this->mButtons[] = $data + array(
+                       'id' => null,
+                       'attribs' => null,
+                       'flags' => null,
+               );
 
                return $this;
        }
@@ -1041,6 +1094,9 @@ class HTMLForm extends ContextSource {
                        ) . "\n";
                }
 
+               // IE<8 has bugs with <button>, so we'll need to avoid them.
+               $isBadIE = preg_match( '/MSIE [1-7]\./i', $this->getRequest()->getHeader( 'User-Agent' ) );
+
                foreach ( $this->mButtons as $button ) {
                        $attrs = array(
                                'type' => 'submit',
@@ -1048,6 +1104,16 @@ class HTMLForm extends ContextSource {
                                'value' => $button['value']
                        );
 
+                       if ( isset( $button['label-message'] ) ) {
+                               $label = $this->msg( $button['label-message'] )->parse();
+                       } elseif ( isset( $button['label'] ) ) {
+                               $label = htmlspecialchars( $button['label'] );
+                       } elseif ( isset( $button['label-raw'] ) ) {
+                               $label = $button['label-raw'];
+                       } else {
+                               $label = htmlspecialchars( $button['value'] );
+                       }
+
                        if ( $button['attribs'] ) {
                                $attrs += $button['attribs'];
                        }
@@ -1061,7 +1127,11 @@ class HTMLForm extends ContextSource {
                                $attrs['class'][] = 'mw-ui-button';
                        }
 
-                       $buttons .= Html::element( 'input', $attrs ) . "\n";
+                       if ( $isBadIE ) {
+                               $buttons .= Html::element( 'input', $attrs ) . "\n";
+                       } else {
+                               $buttons .= Html::rawElement( 'button', $attrs, $label ) . "\n";
+                       }
                }
 
                $html = Html::rawElement( 'span',
@@ -1152,6 +1222,8 @@ class HTMLForm extends ContextSource {
         */
        public function setSubmitDestructive() {
                $this->mSubmitFlags = array( 'destructive', 'primary' );
+
+               return $this;
        }
 
        /**
@@ -1160,6 +1232,8 @@ class HTMLForm extends ContextSource {
         */
        public function setSubmitProgressive() {
                $this->mSubmitFlags = array( 'progressive', 'primary' );
+
+               return $this;
        }
 
        /**
@@ -1396,6 +1470,7 @@ class HTMLForm extends ContextSource {
                $hasLabel = false;
 
                // Conveniently, PHP method names are case-insensitive.
+               // For grep: this can call getDiv, getRaw, getInline, getVForm, getOOUI
                $getFieldHtmlMethod = $displayFormat == 'table' ? 'getTableRow' : ( 'get' . $displayFormat );
 
                foreach ( $fields as $key => $value ) {
index d4a293e..3d9ec1f 100644 (file)
@@ -1054,8 +1054,8 @@ abstract class HTMLFormField {
 
                foreach ( $oldoptions as $text => $data ) {
                        $options[] = array(
-                               'data' => $data,
-                               'label' => $text,
+                               'data' => (string)$data,
+                               'label' => (string)$text,
                        );
                }
 
index c11449a..811eaf4 100644 (file)
@@ -50,6 +50,9 @@ class OOUIHTMLForm extends HTMLForm {
        function getButtons() {
                $buttons = '';
 
+               // IE<8 has bugs with <button>, so we'll need to avoid them.
+               $isBadIE = preg_match( '/MSIE [1-7]\./i', $this->getRequest()->getHeader( 'User-Agent' ) );
+
                if ( $this->mShowSubmit ) {
                        $attribs = array( 'infusable' => true );
 
@@ -70,6 +73,7 @@ class OOUIHTMLForm extends HTMLForm {
                        $attribs['label'] = $this->getSubmitText();
                        $attribs['value'] = $this->getSubmitText();
                        $attribs['flags'] = $this->mSubmitFlags;
+                       $attribs['useInputTag'] = $isBadIE;
 
                        $buttons .= new OOUI\ButtonInputWidget( $attribs );
                }
@@ -78,6 +82,7 @@ class OOUIHTMLForm extends HTMLForm {
                        $buttons .= new OOUI\ButtonInputWidget( array(
                                'type' => 'reset',
                                'label' => $this->msg( 'htmlform-reset' )->text(),
+                               'useInputTag' => $isBadIE,
                        ) );
                }
 
@@ -92,13 +97,27 @@ class OOUIHTMLForm extends HTMLForm {
                                $attrs['id'] = $button['id'];
                        }
 
+                       if ( $isBadIE ) {
+                               $label = $button['value'];
+                       } elseif ( isset( $button['label-message'] ) ) {
+                               $label = new OOUI\HtmlSnippet( $this->msg( $button['label-message'] )->parse() );
+                       } elseif ( isset( $button['label'] ) ) {
+                               $label = $button['label'];
+                       } elseif ( isset( $button['label-raw'] ) ) {
+                               $label = new OOUI\HtmlSnippet( $button['label-raw'] );
+                       } else {
+                               $label = $button['value'];
+                       }
+
                        $attrs['classes'] = isset( $attrs['class'] ) ? (array)$attrs['class'] : array();
 
                        $buttons .= new OOUI\ButtonInputWidget( array(
                                'type' => 'submit',
                                'name' => $button['name'],
                                'value' => $button['value'],
-                               'label' => $button['value'],
+                               'label' => $label,
+                               'flags' => $button['flags'],
+                               'useInputTag' => $isBadIE,
                        ) + $attrs );
                }
 
index 9b8c74c..90b048a 100644 (file)
@@ -463,7 +463,7 @@ class WikiRevision {
                $page = WikiPage::factory( $this->title );
                $page->loadPageData( 'fromdbmaster' );
                if ( !$page->exists() ) {
-                       # must create the page...
+                       // must create the page...
                        $pageId = $page->insertOn( $dbw );
                        $created = true;
                        $oldcountable = null;
@@ -486,7 +486,17 @@ class WikiRevision {
                        }
                }
 
+               if ( !$pageId ) {
+                       // This seems to happen if two clients simultaneously try to import the
+                       // same page
+                       wfDebug( __METHOD__ . ': got invalid $pageId when importing revision of [[' .
+                               $this->title->getPrefixedText() . ']], timestamp ' . $this->timestamp . "\n" );
+                       return false;
+               }
+
                // Select previous version to make size diffs correct
+               // @todo This assumes that multiple revisions of the same page are imported
+               // in order from oldest to newest.
                $prevId = $dbw->selectField( 'revision', 'rev_id',
                        array(
                                'rev_page' => $pageId,
@@ -613,8 +623,9 @@ class WikiRevision {
                        wfDebug( __METHOD__ . ": Could not fetch remote file.\n" );
                        return false;
                }
+               $sha1File = ltrim( sha1_file( $source ), '0' );
                $sha1 = $this->getSha1();
-               if ( $sha1 && ( $sha1 !== sha1_file( $source ) ) ) {
+               if ( $sha1 && ( $sha1 !== $sha1File ) ) {
                        if ( $flags & File::DELETE_SOURCE ) {
                                # Broken file; delete it if it is a temporary file
                                unlink( $source );
index 2023b64..27a5449 100644 (file)
@@ -62,7 +62,7 @@
        "config-magic-quotes-sybase": "'''Фатално: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
        "config-mbstring": "'''Фатално: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] е активирана!'''\nТова може да повреди непредвидимо въвеждането на данните.\nИнсталацията на МедияУики е невъзможна докато тази настройка не бъде изключена.",
        "config-safe-mode": "'''Предупреждение:''' PHP работи в [http://www.php.net/features.safe-mode безопасен режим].\nТова може да създаде проблеми, особено ако качването на файлове е разрешено, както и при поддръжката на <code>math</code>.",
-       "config-xml-bad": "Ð\9bипÑ\81ва XML Ð¼Ð¾Ð´Ñ\83лÑ\8aÑ\82 Ð½Ð° PHP.\nÐ\9cедиÑ\8fУики Ñ\81е Ð½Ñ\83ждае Ð¾Ñ\82 Ð½Ñ\8fкои Ñ\84Ñ\83нкÑ\86ии Ð¾Ñ\82 Ñ\82ози Ð¼Ð¾Ð´Ñ\83л Ð¸ Ð½Ñ\8fма Ð´Ð° Ñ\80абоÑ\82и Ð¿Ñ\80и Ð½Ð°Ð»Ð¸Ñ\87наÑ\82а ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\8f.\nÐ\9fÑ\80и Mandrake, Ð½ÐµÐ¾Ð±Ñ\85одимо Ðµ Ð´Ð° Ñ\81е Ð¸Ð½Ñ\81Ñ\82алиÑ\80а Ð¿Ð°ÐºÐµÑ\82Ñ\8aт php-xml.",
+       "config-xml-bad": "Ð\97а PHP Ð»Ð¸Ð¿Ñ\81ва XML Ð¼Ð¾Ð´Ñ\83л.\nÐ\9cедиÑ\8fÑ\83ики Ð½Ñ\8fма Ð´Ð° Ñ\80абоÑ\82и Ð² Ñ\82ази ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\8f, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ñ\81е Ð¸Ð·Ð¸Ñ\81ква Ñ\84Ñ\83нкÑ\86ионалноÑ\81Ñ\82 Ð½Ð° Ñ\82ози Ð¼Ð¾Ð´Ñ\83л.\nÐ\9cоже Ð±Ð¸ Ñ\89е Ñ\82Ñ\80Ñ\8fбва Ð´Ð° Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\82е RPM-пакет php-xml.",
        "config-pcre-old": "<strong>Фатална грешка:</strong> Изисква се PCRE версия $1 или по-нова.\nИзпълнимият файл на PHP е свързан с PCRE версия $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Повече информация за PCRE].",
        "config-pcre-no-utf8": "'''Фатално''': Модулът PCRE на PHP изглежда е компилиран без поддръжка на PCRE_UTF8.\nЗа да функционира правилно, МедияУики изисква поддръжка на UTF-8.",
        "config-memory-raised": "<code>memory_limit</code> на PHP е $1, увеличаване до $2.",
        "config-db-install-account": "Потребителска сметка за инсталацията",
        "config-db-username": "Потребителско име за базата от данни:",
        "config-db-password": "Парола за базата от данни:",
-       "config-db-password-empty": "Въведете парола за новия потребител на базата от данни: $1.\nВъпреки че е допустимо да се създават потребители без пароли, това е незащитено действие.",
-       "config-db-username-empty": "Необходимо е да се въведе стойност за „{{int:config-db-username}}“.",
        "config-db-install-username": "Въвежда се потребителско име, което ще се използва за свързване с базата от данни по време на процеса по инсталация.\nТова не е потребителско име за сметка в МедияУики; това е потребителско име за базата от данни.",
        "config-db-install-password": "Въвежда се парола, която ще бъде използвана за свързване с базата от данни по време на инсталационния процес.\nТова не е парола за сметка в МедияУики; това е парола за базата от данни.",
        "config-db-install-help": "Въвеждат се потребителско име и парола, които ще бъдат използвани за свързване с базата от данни по време на инсталационния процес.",
        "config-nofile": "Файлът „$1“ не може да бъде открит. Да не е бил изтрит?",
        "config-extension-link": "Знаете ли, че това уики поддържа [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions разширения]?\n\nМожете да разгледате [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category разширенията по категория] или [//www.mediawiki.org/wiki/Extension_Matrix Матрицата на разширенията] за пълен списък на разширенията.",
        "mainpagetext": "'''Уикито беше успешно инсталирано.'''",
-       "mainpagedocfooter": "Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на уики софтуера.\n\n== Първи стъпки ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Настройки за конфигуриране]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧЗВ за МедияУики]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локализиране на МедияУики]"
+       "mainpagedocfooter": "Разгледайте [//meta.wikimedia.org/wiki/Help:Contents ръководството] за подробна информация относно използването на уики софтуера.\n\n== Първи стъпки ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Настройки за конфигуриране]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧЗВ за МедияУики]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локализиране на МедияУики]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научете как да се справяте със спама във вашето уики]"
 }
index 58fccb5..6130399 100644 (file)
@@ -56,6 +56,8 @@
        "config-unicode-using-intl": "Χρησιμοποιώντας την [http://pecl.php.net/intl επέκταση intl PECL] για κανονικοποίηση Unicode.",
        "config-unicode-pure-php-warning": "<strong>Προειδοποίηση:</strong> Η [http://pecl.php.net/intl επέκταση intl PECL] δεν είναι διαθέσιμη για να χειριστεί την κανονικοποίηση Unicode, επιστρέφουμε στην αργή αμιγώς PHP εφαρμογή.\nΕάν λειτουργείτε έναν ιστότοπο υψηλής επισκεψιμότητας, θα πρέπει να ρίξετε μια ματιά στην [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations κανονικοποίηση Unicode].",
        "config-outdated-sqlite": "<strong>Προειδοποίηση:</strong> έχετε την SQLite $1, που είναι χαμηλότερα απαιτούμενη έκδοση $2. SQLite δεν θα είναι διαθέσιμη.",
+       "config-register-globals-error": "<strong>Σφάλμα: PHP <code>[http://php.net/register_globals τις register_globals]</code> η επιλογή είναι ενεργοποιημένη.\nΘα πρέπει να απενεργοποιηθεί για να συνεχίσετε με την εγκατάσταση.</strong>\nΔείτε [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] για βοήθεια σχετικά με το πώς να το κάνετε.",
+       "config-safe-mode": "<strong>Προειδοποίηση:</strong> Το  PHP [http://www.php.net/features.safe-mode safe mode] είναι ενεργό.\nΑυτό μπορεί να προκαλέσει προβλήματα, ιδιαίτερα εάν η χρήση αρχείων και  υποστήριξη <code>math</code>.",
        "config-xml-bad": "Το PHP XML module λείπει.\nΤο MediaWiki απαιτεί λειτουργίες σε αυτήν την ενότητα και δεν θα λειτουργήσει με αυτή την παραμετροποίηση. \nΜπορεί να χρειαστεί να εγκαταστήσετε το πακέτο php-xml RPM.",
        "config-pcre-no-utf8": "<strong>Κρίσιμο:</strong> Το PCRE module της PHP  φαίνεται να είναι μεταγλωτισμένο χωρίς υποσήριξη  PCRE_UTF8.\nΤο MediaWiki απαιτεί υποστήριξη UTF-8 για να λειτουργήσει σωστά.",
        "config-memory-raised": "Το  <code>memory_limit</code> της PHP είναι  $1 και αυξήθηκε σε  $2.",
        "config-db-install-account": "Λογαριασμός χρήστη για την εγκατάσταση",
        "config-db-username": "Όνομα χρήστη βάσης δεδομένων:",
        "config-db-password": "Κωδικός πρόσβασης βάσης δεδομένων:",
+       "config-db-install-help": "Εισάγετε το όνομα χρήστη και τον κωδικό πρόσβασης που θα χρησιμοποιηθεί για τη σύνδεση με τη βάση δεδομένων κατά τη διάρκεια της διαδικασίας εγκατάστασης.",
        "config-db-account-lock": "Χρησιμοποιήστε το ίδιο όνομα χρήστη και κωδικό πρόσβασης στη διάρκεια της κανονικής λειτουργίας",
        "config-db-wiki-account": "Λογαριασμός χρήστη για κανονική λειτουργία",
+       "config-db-wiki-help": "Εισάγετε το όνομα χρήστη και τον κωδικό πρόσβασης που θα χρησιμοποιηθεί για τη σύνδεση με τη βάση δεδομένων κατά τη διάρκεια της κανονικής λειτουργίας του wiki.\nΕάν ο λογαριασμός δεν υπάρχει, και o λογαριασμός εγκατάστασης  έχει επαρκή δικαιώματα, αυτός ο λογαριασμός χρήστη θα δημιουργηθεί με τα ελάχιστα δικαιώματα που απαιτούνται για να λειτουργήσετε το wiki.",
        "config-db-prefix": "Πρόθεμα πίνακα βάσης δεδομένων:",
        "config-db-prefix-help": "Εάν χρειάζεστε να μοιραστείτε μία βάση δεδομένων μεταξύ πολλαπλών wikis, ή μεταξύ του MediaWiki και μιας άλλης web εφαρμογής, μπορείτε να επιλέξετε να προσθέσετε ένα πρόθεμα όλα τα ονόματα πίνακα για να αποφεύγονται οι συγκρούσεις.\nΜην χρησιμοποιείτε κενά διαστήματα.\n\nΑυτό το πεδίο αφήνεται συνήθως άδειο.",
        "config-db-charset": "Σύνολο χαρακτήρων βάσης δεδομένων",
index ebd99ba..708536f 100644 (file)
        "config-oracle-temp-ts": "Тимчасовий простір таблиць:",
        "config-type-mysql": "MySQL (або сумісний)",
        "config-type-mssql": "Microsoft SQL Server",
-       "config-support-info": "MediaWiki підтримує таки системи баз даних:\n\n$1\n\nЯкщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.",
+       "config-support-info": "MediaWiki підтримує такі системи баз даних:\n\n$1\n\nЯкщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] є основною для MediaWiki і найкраще підтримується.  MediaWiki також працює із [{{int:version-db-mariadb-url}} MariaDB] та [{{int:version-db-percona-url}} Percona Server], які сумісні з MySQL.  ([http://www.php.net/manual/en/mysqli.installation.php як зібрати PHP з допомогою MySQL])",
        "config-dbsupport-postgres": "*  [{{int:version-db-postgres-url}} PostgreSQL] — популярна відкрита СУБД, альтернатива MySQL. Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]).",
        "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite] — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)",
index 2e28917..6b70cec 100644 (file)
@@ -211,42 +211,6 @@ class LogPage {
                return in_array( $type, LogPage::validTypes() );
        }
 
-       /**
-        * Get the name for the given log type
-        *
-        * @param string $type Log type
-        * @return string Log name
-        * @deprecated since 1.19, warnings in 1.21. Use getName()
-        */
-       public static function logName( $type ) {
-               global $wgLogNames;
-
-               wfDeprecated( __METHOD__, '1.21' );
-
-               if ( isset( $wgLogNames[$type] ) ) {
-                       return str_replace( '_', ' ', wfMessage( $wgLogNames[$type] )->text() );
-               } else {
-                       // Bogus log types? Perhaps an extension was removed.
-                       return $type;
-               }
-       }
-
-       /**
-        * Get the log header for the given log type
-        *
-        * @todo handle missing log types
-        * @param string $type Logtype
-        * @return string Header text of this logtype
-        * @deprecated since 1.19, warnings in 1.21. Use getDescription()
-        */
-       public static function logHeader( $type ) {
-               global $wgLogHeaders;
-
-               wfDeprecated( __METHOD__, '1.21' );
-
-               return wfMessage( $wgLogHeaders[$type] )->parse();
-       }
-
        /**
         * Generate text for a log entry.
         * Only LogFormatter should call this function.
index 8fb760d..00ac127 100644 (file)
@@ -3559,64 +3559,6 @@ class WikiPage implements Page, IDBAccessObject {
                }
        }
 
-       /**
-        * Return a list of templates used by this article.
-        * Uses the templatelinks table
-        *
-        * @deprecated since 1.19; use Title::getTemplateLinksFrom()
-        * @return array Array of Title objects
-        */
-       public function getUsedTemplates() {
-               return $this->mTitle->getTemplateLinksFrom();
-       }
-
-       /**
-        * This function is called right before saving the wikitext,
-        * so we can do things like signatures and links-in-context.
-        *
-        * @deprecated since 1.19; use Parser::preSaveTransform() instead
-        * @param string $text Article contents
-        * @param User $user User doing the edit
-        * @param ParserOptions $popts Parser options, default options for
-        *   the user loaded if null given
-        * @return string Article contents with altered wikitext markup (signatures
-        *      converted, {{subst:}}, templates, etc.)
-        */
-       public function preSaveTransform( $text, User $user = null, ParserOptions $popts = null ) {
-               global $wgParser, $wgUser;
-
-               wfDeprecated( __METHOD__, '1.19' );
-
-               $user = is_null( $user ) ? $wgUser : $user;
-
-               if ( $popts === null ) {
-                       $popts = ParserOptions::newFromUser( $user );
-               }
-
-               return $wgParser->preSaveTransform( $text, $this->mTitle, $user, $popts );
-       }
-
-       /**
-        * Update the article's restriction field, and leave a log entry.
-        *
-        * @deprecated since 1.19
-        * @param array $limit Set of restriction keys
-        * @param string $reason
-        * @param int &$cascade Set to false if cascading protection isn't allowed.
-        * @param array $expiry Per restriction type expiration
-        * @param User $user The user updating the restrictions
-        * @return bool True on success
-        */
-       public function updateRestrictions(
-               $limit = array(), $reason = '', &$cascade = 0, $expiry = array(), User $user = null
-       ) {
-               global $wgUser;
-
-               $user = is_null( $user ) ? $wgUser : $user;
-
-               return $this->doUpdateRestrictions( $limit, $expiry, $cascade, $reason, $user )->isOK();
-       }
-
        /**
         * Returns a list of updates to be performed when this page is deleted. The
         * updates should remove any information about this page from secondary data
index eaecedd..7b4a650 100644 (file)
@@ -5276,9 +5276,8 @@ class Parser {
        }
 
        /**
-        * @todo FIXME: Update documentation. makeLinkObj() is deprecated.
         * Replace "<!--LINK-->" link placeholders with actual links, in the buffer
-        * Placeholders created in Skin::makeLinkObj()
+        * Placeholders created in Linker::link()
         *
         * @param string $text
         * @param int $options
index 074a962..aac0c79 100644 (file)
@@ -23,6 +23,7 @@ class ExtensionProcessor implements Processor {
                'AvailableRights',
                'ContentHandlers',
                'ConfigRegistry',
+               'CentralIdLookupProviders',
                'RateLimits',
                'RecentChangesFlags',
                'MediaHandlers',
@@ -44,6 +45,7 @@ class ExtensionProcessor implements Processor {
                'APIPropModules',
                'APIListModules',
                'ValidSkinNames',
+               'FeedClasses',
        );
 
        /**
@@ -57,8 +59,7 @@ class ExtensionProcessor implements Processor {
                'wgGroupPermissions' => 'array_plus_2d',
                'wgRevokePermissions' => 'array_plus_2d',
                'wgHooks' => 'array_merge_recursive',
-               // credits are handled in the ExtensionRegistry
-               // 'wgExtensionCredits' => 'array_merge_recursive',
+               'wgExtensionCredits' => 'array_merge_recursive',
                'wgExtraGenderNamespaces' => 'array_plus',
                'wgNamespacesWithSubpages' => 'array_plus',
                'wgNamespaceContentModels' => 'array_plus',
@@ -321,6 +322,7 @@ class ExtensionProcessor implements Processor {
                }
 
                $this->credits[$name] = $credits;
+               $this->globals['wgExtensionCredits'][$credits['type']][] = $credits;
        }
 
        /**
index e37e7f5..86be86b 100644 (file)
@@ -29,7 +29,7 @@ class ExtensionRegistry {
        /**
         * Bump whenever the registration cache needs resetting
         */
-       const CACHE_VERSION = 2;
+       const CACHE_VERSION = 3;
 
        /**
         * Special key that defines the merge strategy
@@ -225,10 +225,6 @@ class ExtensionRegistry {
                $data = $processor->getExtractedInfo();
                // Need to set this so we can += to it later
                $data['globals']['wgAutoloadClasses'] = array();
-               foreach ( $data['credits'] as $credit ) {
-                       $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
-               }
-               $data['globals']['wgExtensionCredits'][self::MERGE_STRATEGY] = 'array_merge_recursive';
                $data['autoload'] = $autoloadClasses;
                $data['autoloaderPaths'] = $autoloaderPaths;
                return $data;
diff --git a/includes/search/SearchNearMatchResultSet.php b/includes/search/SearchNearMatchResultSet.php
new file mode 100644 (file)
index 0000000..cb4f81d
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+/**
+ * A SearchResultSet wrapper for SearchEngine::getNearMatch
+ */
+class SearchNearMatchResultSet extends SearchResultSet {
+       private $fetched = false;
+
+       /**
+        * @param Title|null $match Title if matched, else null
+        */
+       public function __construct( $match ) {
+               $this->result = $match;
+       }
+
+       public function numRows() {
+               return $this->result ? 1 : 0;
+       }
+
+       public function next() {
+               if ( $this->fetched || !$this->result ) {
+                       return false;
+               }
+               $this->fetched = true;
+               return SearchResult::newFromTitle( $this->result );
+       }
+}
index 8fb04e4..eccd36e 100644 (file)
@@ -171,89 +171,3 @@ class SearchResultSet {
                return $this->containedSyntax;
        }
 }
-
-/**
- * This class is used for different SQL-based search engines shipped with MediaWiki
- * @ingroup Search
- */
-class SqlSearchResultSet extends SearchResultSet {
-       protected $resultSet;
-       protected $terms;
-       protected $totalHits;
-
-       function __construct( $resultSet, $terms, $total = null ) {
-               $this->resultSet = $resultSet;
-               $this->terms = $terms;
-               $this->totalHits = $total;
-       }
-
-       function termMatches() {
-               return $this->terms;
-       }
-
-       function numRows() {
-               if ( $this->resultSet === false ) {
-                       return false;
-               }
-
-               return $this->resultSet->numRows();
-       }
-
-       function next() {
-               if ( $this->resultSet === false ) {
-                       return false;
-               }
-
-               $row = $this->resultSet->fetchObject();
-               if ( $row === false ) {
-                       return false;
-               }
-
-               return SearchResult::newFromTitle(
-                       Title::makeTitle( $row->page_namespace, $row->page_title )
-               );
-       }
-
-       function free() {
-               if ( $this->resultSet === false ) {
-                       return false;
-               }
-
-               $this->resultSet->free();
-       }
-
-       function getTotalHits() {
-               if ( !is_null( $this->totalHits ) ) {
-                       return $this->totalHits;
-               } else {
-                       // Special:Search expects a number here.
-                       return $this->numRows();
-               }
-       }
-}
-
-/**
- * A SearchResultSet wrapper for SearchEngine::getNearMatch
- */
-class SearchNearMatchResultSet extends SearchResultSet {
-       private $fetched = false;
-
-       /**
-        * @param Title|null $match Title if matched, else null
-        */
-       public function __construct( $match ) {
-               $this->result = $match;
-       }
-
-       public function numRows() {
-               return $this->result ? 1 : 0;
-       }
-
-       public function next() {
-               if ( $this->fetched || !$this->result ) {
-                       return false;
-               }
-               $this->fetched = true;
-               return SearchResult::newFromTitle( $this->result );
-       }
-}
diff --git a/includes/search/SqlSearchResultSet.php b/includes/search/SqlSearchResultSet.php
new file mode 100644 (file)
index 0000000..7a6aaf7
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * This class is used for different SQL-based search engines shipped with MediaWiki
+ * @ingroup Search
+ */
+class SqlSearchResultSet extends SearchResultSet {
+       protected $resultSet;
+       protected $terms;
+       protected $totalHits;
+
+       function __construct( $resultSet, $terms, $total = null ) {
+               $this->resultSet = $resultSet;
+               $this->terms = $terms;
+               $this->totalHits = $total;
+       }
+
+       function termMatches() {
+               return $this->terms;
+       }
+
+       function numRows() {
+               if ( $this->resultSet === false ) {
+                       return false;
+               }
+
+               return $this->resultSet->numRows();
+       }
+
+       function next() {
+               if ( $this->resultSet === false ) {
+                       return false;
+               }
+
+               $row = $this->resultSet->fetchObject();
+               if ( $row === false ) {
+                       return false;
+               }
+
+               return SearchResult::newFromTitle(
+                       Title::makeTitle( $row->page_namespace, $row->page_title )
+               );
+       }
+
+       function free() {
+               if ( $this->resultSet === false ) {
+                       return false;
+               }
+
+               $this->resultSet->free();
+       }
+
+       function getTotalHits() {
+               if ( !is_null( $this->totalHits ) ) {
+                       return $this->totalHits;
+               } else {
+                       // Special:Search expects a number here.
+                       return $this->numRows();
+               }
+       }
+}
diff --git a/includes/site/MediaWikiPageNameNormalizer.php b/includes/site/MediaWikiPageNameNormalizer.php
new file mode 100644 (file)
index 0000000..f358bd4
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+
+namespace MediaWiki\Site;
+
+use FormatJson;
+use Http;
+use UtfNormal\Validator;
+
+/**
+ * Service for normalizing a page name using a MediaWiki api.
+ *
+ * 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
+ *
+ * @since 1.27
+ *
+ * @license GNU GPL v2+
+ * @author John Erling Blad < jeblad@gmail.com >
+ * @author Daniel Kinzler
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Marius Hoch
+ */
+class MediaWikiPageNameNormalizer {
+
+       /**
+        * Returns the normalized form of the given page title, using the
+        * normalization rules of the given site. If the given title is a redirect,
+        * the redirect weill be resolved and the redirect target is returned.
+        *
+        * @note This actually makes an API request to the remote site, so beware
+        *   that this function is slow and depends on an external service.
+        *
+        * @see Site::normalizePageName
+        *
+        * @since 1.27
+        *
+        * @param string $pageName
+        * @param string $apiUrl
+        *
+        * @return string
+        * @throws \MWException
+        */
+       public function normalizePageName( $pageName, $apiUrl ) {
+
+               // Check if we have strings as arguments.
+               if ( !is_string( $pageName ) ) {
+                       throw new \MWException( '$pageName must be a string' );
+               }
+
+               // Go on call the external site
+
+               // Make sure the string is normalized into NFC (due to T42017)
+               // but do nothing to the whitespaces, that should work appropriately.
+               // @see https://phabricator.wikimedia.org/T42017
+               $pageName = Validator::cleanUp( $pageName );
+
+               // Build the args for the specific call
+               $args = array(
+                       'action' => 'query',
+                       'prop' => 'info',
+                       'redirects' => true,
+                       'converttitles' => true,
+                       'format' => 'json',
+                       'titles' => $pageName,
+                       // @todo options for maxlag and maxage
+                       // Note that maxlag will lead to a long delay before a reply is made,
+                       // but that maxage can avoid the extreme delay. On the other hand
+                       // maxage could be nice to use anyhow as it stops unnecessary requests.
+                       // Also consider smaxage if maxage is used.
+               );
+
+               $url = wfAppendQuery( $apiUrl, $args );
+
+               // Go on call the external site
+               // @todo we need a good way to specify a timeout here.
+               $ret = Http::get( $url, array(), __METHOD__ );
+
+               if ( $ret === false ) {
+                       wfDebugLog( "MediaWikiSite", "call to external site failed: $url" );
+                       return false;
+               }
+
+               $data = FormatJson::decode( $ret, true );
+
+               if ( !is_array( $data ) ) {
+                       wfDebugLog( "MediaWikiSite", "call to <$url> returned bad json: " . $ret );
+                       return false;
+               }
+
+               $page = static::extractPageRecord( $data, $pageName );
+
+               if ( isset( $page['missing'] ) ) {
+                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for a missing page title! "
+                               . $ret );
+                       return false;
+               }
+
+               if ( isset( $page['invalid'] ) ) {
+                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for an invalid page title! "
+                               . $ret );
+                       return false;
+               }
+
+               if ( !isset( $page['title'] ) ) {
+                       wfDebugLog( "MediaWikiSite", "call to <$url> did not return a page title! " . $ret );
+                       return false;
+               }
+
+               return $page['title'];
+       }
+
+       /**
+        * Get normalization record for a given page title from an API response.
+        *
+        * @param array $externalData A reply from the API on a external server.
+        * @param string $pageTitle Identifies the page at the external site, needing normalization.
+        *
+        * @return array|bool A 'page' structure representing the page identified by $pageTitle.
+        */
+       private static function extractPageRecord( $externalData, $pageTitle ) {
+               // If there is a special case with only one returned page
+               // we can cheat, and only return
+               // the single page in the "pages" substructure.
+               if ( isset( $externalData['query']['pages'] ) ) {
+                       $pages = array_values( $externalData['query']['pages'] );
+                       if ( count( $pages ) === 1 ) {
+                               return $pages[0];
+                       }
+               }
+               // This is only used during internal testing, as it is assumed
+               // a more optimal (and lossfree) storage.
+               // Make initial checks and return if prerequisites are not meet.
+               if ( !is_array( $externalData ) || !isset( $externalData['query'] ) ) {
+                       return false;
+               }
+               // Loop over the tree different named structures, that otherwise are similar
+               $structs = array(
+                       'normalized' => 'from',
+                       'converted' => 'from',
+                       'redirects' => 'from',
+                       'pages' => 'title'
+               );
+               foreach ( $structs as $listId => $fieldId ) {
+                       // Check if the substructure exist at all.
+                       if ( !isset( $externalData['query'][$listId] ) ) {
+                               continue;
+                       }
+                       // Filter the substructure down to what we actually are using.
+                       $collectedHits = array_filter(
+                               array_values( $externalData['query'][$listId] ),
+                               function ( $a ) use ( $fieldId, $pageTitle ) {
+                                       return $a[$fieldId] === $pageTitle;
+                               }
+                       );
+                       // If still looping over normalization, conversion or redirects,
+                       // then we need to keep the new page title for later rounds.
+                       if ( $fieldId === 'from' && is_array( $collectedHits ) ) {
+                               switch ( count( $collectedHits ) ) {
+                                       case 0:
+                                               break;
+                                       case 1:
+                                               $pageTitle = $collectedHits[0]['to'];
+                                               break;
+                                       default:
+                                               return false;
+                               }
+                       } elseif ( $fieldId === 'title' && is_array( $collectedHits ) ) {
+                               // If on the pages structure we should prepare for returning.
+
+                               switch ( count( $collectedHits ) ) {
+                                       case 0:
+                                               return false;
+                                       case 1:
+                                               return array_shift( $collectedHits );
+                                       default:
+                                               return false;
+                               }
+                       }
+               }
+               // should never be here
+               return false;
+       }
+
+}
index 029919c..0f7e5d7 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use MediaWiki\Site\MediaWikiPageNameNormalizer;
+
 /**
  * Class representing a MediaWiki site.
  *
@@ -96,13 +99,6 @@ class MediaWikiSite extends Site {
         * @throws MWException
         */
        public function normalizePageName( $pageName ) {
-
-               // Check if we have strings as arguments.
-               if ( !is_string( $pageName ) ) {
-                       throw new MWException( '$pageName must be a string' );
-               }
-
-               // Go on call the external site
                if ( defined( 'MW_PHPUNIT_TEST' ) ) {
                        // If the code is under test, don't call out to other sites, just
                        // normalize locally.
@@ -112,140 +108,17 @@ class MediaWikiSite extends Site {
                        $t = Title::newFromText( $pageName );
                        return $t->getPrefixedText();
                } else {
+                       static $mediaWikiPageNameNormalizer = null;
 
-                       // Make sure the string is normalized into NFC (due to T42017)
-                       // but do nothing to the whitespaces, that should work appropriately.
-                       // @see https://phabricator.wikimedia.org/T42017
-                       $pageName = UtfNormal\Validator::cleanUp( $pageName );
-
-                       // Build the args for the specific call
-                       $args = array(
-                               'action' => 'query',
-                               'prop' => 'info',
-                               'redirects' => true,
-                               'converttitles' => true,
-                               'format' => 'json',
-                               'titles' => $pageName,
-                               // @todo options for maxlag and maxage
-                               // Note that maxlag will lead to a long delay before a reply is made,
-                               // but that maxage can avoid the extreme delay. On the other hand
-                               // maxage could be nice to use anyhow as it stops unnecessary requests.
-                               // Also consider smaxage if maxage is used.
-                       );
-
-                       $url = wfAppendQuery( $this->getFileUrl( 'api.php' ), $args );
-
-                       // Go on call the external site
-                       // @todo we need a good way to specify a timeout here.
-                       $ret = Http::get( $url, array(), __METHOD__ );
-               }
-
-               if ( $ret === false ) {
-                       wfDebugLog( "MediaWikiSite", "call to external site failed: $url" );
-                       return false;
-               }
-
-               $data = FormatJson::decode( $ret, true );
-
-               if ( !is_array( $data ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> returned bad json: " . $ret );
-                       return false;
-               }
-
-               $page = static::extractPageRecord( $data, $pageName );
-
-               if ( isset( $page['missing'] ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for a missing page title! "
-                               . $ret );
-                       return false;
-               }
-
-               if ( isset( $page['invalid'] ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for an invalid page title! "
-                               . $ret );
-                       return false;
-               }
-
-               if ( !isset( $page['title'] ) ) {
-                       wfDebugLog( "MediaWikiSite", "call to <$url> did not return a page title! " . $ret );
-                       return false;
-               }
-
-               return $page['title'];
-       }
-
-       /**
-        * Get normalization record for a given page title from an API response.
-        *
-        * @since 1.21
-        *
-        * @param array $externalData A reply from the API on a external server.
-        * @param string $pageTitle Identifies the page at the external site, needing normalization.
-        *
-        * @return array|bool A 'page' structure representing the page identified by $pageTitle.
-        */
-       private static function extractPageRecord( $externalData, $pageTitle ) {
-               // If there is a special case with only one returned page
-               // we can cheat, and only return
-               // the single page in the "pages" substructure.
-               if ( isset( $externalData['query']['pages'] ) ) {
-                       $pages = array_values( $externalData['query']['pages'] );
-                       if ( count( $pages ) === 1 ) {
-                               return $pages[0];
-                       }
-               }
-               // This is only used during internal testing, as it is assumed
-               // a more optimal (and lossfree) storage.
-               // Make initial checks and return if prerequisites are not meet.
-               if ( !is_array( $externalData ) || !isset( $externalData['query'] ) ) {
-                       return false;
-               }
-               // Loop over the tree different named structures, that otherwise are similar
-               $structs = array(
-                       'normalized' => 'from',
-                       'converted' => 'from',
-                       'redirects' => 'from',
-                       'pages' => 'title'
-               );
-               foreach ( $structs as $listId => $fieldId ) {
-                       // Check if the substructure exist at all.
-                       if ( !isset( $externalData['query'][$listId] ) ) {
-                               continue;
+                       if ( $mediaWikiPageNameNormalizer === null ) {
+                               $mediaWikiPageNameNormalizer = new MediaWikiPageNameNormalizer();
                        }
-                       // Filter the substructure down to what we actually are using.
-                       $collectedHits = array_filter(
-                               array_values( $externalData['query'][$listId] ),
-                               function ( $a ) use ( $fieldId, $pageTitle ) {
-                                       return $a[$fieldId] === $pageTitle;
-                               }
+
+                       return $mediaWikiPageNameNormalizer->normalizePageName(
+                               $pageName,
+                               $this->getFileUrl( 'api.php' )
                        );
-                       // If still looping over normalization, conversion or redirects,
-                       // then we need to keep the new page title for later rounds.
-                       if ( $fieldId === 'from' && is_array( $collectedHits ) ) {
-                               switch ( count( $collectedHits ) ) {
-                                       case 0:
-                                               break;
-                                       case 1:
-                                               $pageTitle = $collectedHits[0]['to'];
-                                               break;
-                                       default:
-                                               return false;
-                               }
-                       }
-                       // If on the pages structure we should prepare for returning.
-                       elseif ( $fieldId === 'title' && is_array( $collectedHits ) ) {
-                               switch ( count( $collectedHits ) ) {
-                                       case 0:
-                                               return false;
-                                       case 1:
-                                               return array_shift( $collectedHits );
-                                       default:
-                                               return false;
-                               }
-                       }
                }
-               // should never be here
-               return false;
        }
 
        /**
index dbb7c7f..83f119d 100644 (file)
@@ -560,7 +560,7 @@ abstract class Skin extends ContextSource {
                        $classes .= ' catlinks-allhidden';
                }
 
-               return "<div id='catlinks' class='$classes'>{$catlinks}</div>";
+               return "<div id='catlinks' class='$classes' data-mw='interface'>{$catlinks}</div>";
        }
 
        /**
index 2d25710..27e645a 100644 (file)
@@ -275,11 +275,14 @@ abstract class QueryPage extends SpecialPage {
        }
 
        /**
-        * Some special pages (for example SpecialListusers) might not return the
+        * Some special pages (for example SpecialListusers used to) might not return the
         * current object formatted, but return the previous one instead.
         * Setting this to return true will ensure formatResult() is called
         * one more time to make sure that the very last result is formatted
         * as well.
+        *
+        * @deprecated since 1.27
+        *
         * @return bool
         */
        function tryLastResult() {
@@ -660,12 +663,9 @@ abstract class QueryPage extends SpecialPage {
                                // @codingStandardsIgnoreEnd
                                $line = $this->formatResult( $skin, $row );
                                if ( $line ) {
-                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
-                                               ? ' class="not-patrolled"'
-                                               : '';
                                        $html[] = $this->listoutput
                                                ? $line
-                                               : "<li{$attr}>{$line}</li>\n";
+                                               : "<li>{$line}</li>\n";
                                }
                        }
 
@@ -674,12 +674,9 @@ abstract class QueryPage extends SpecialPage {
                                $row = null;
                                $line = $this->formatResult( $skin, $row );
                                if ( $line ) {
-                                       $attr = ( isset( $row->usepatrol ) && $row->usepatrol && $row->patrolled == 0 )
-                                               ? ' class="not-patrolled"'
-                                               : '';
                                        $html[] = $this->listoutput
                                                ? $line
-                                               : "<li{$attr}>{$line}</li>\n";
+                                               : "<li>{$line}</li>\n";
                                }
                        }
 
index 9defaba..73a2774 100644 (file)
@@ -46,8 +46,7 @@ class SpecialBlockList extends SpecialPage {
                $out = $this->getOutput();
                $lang = $this->getLanguage();
                $out->setPageTitle( $this->msg( 'ipblocklist' ) );
-               $out->addModuleStyles( 'mediawiki.special' );
-               $out->addModules( 'mediawiki.userSuggest' );
+               $out->addModuleStyles( array( 'mediawiki.special', 'mediawiki.special.blocklist' ) );
 
                $request = $this->getRequest();
                $par = $request->getVal( 'ip', $par );
@@ -71,12 +70,11 @@ class SpecialBlockList extends SpecialPage {
                # Just show the block list
                $fields = array(
                        'Target' => array(
-                               'type' => 'text',
+                               'type' => 'user',
                                'label-message' => 'ipaddressorusername',
                                'tabindex' => '1',
                                'size' => '45',
                                'default' => $this->target,
-                               'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ),
                        'Options' => array(
                                'type' => 'multiselect',
@@ -104,7 +102,7 @@ class SpecialBlockList extends SpecialPage {
                );
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
-               $form = new HTMLForm( $fields, $context );
+               $form = HTMLForm::factory( 'ooui', $fields, $context );
                $form->setMethod( 'get' );
                $form->setWrapperLegendMsg( 'ipblocklist-legend' );
                $form->setSubmitTextMsg( 'ipblocklist-submit' );
index 91ac4e0..371ad19 100644 (file)
@@ -152,7 +152,10 @@ class SpecialChangePassword extends FormSpecialPage {
                                ? 'resetpass-submit-loggedin'
                                : 'resetpass_submit'
                );
-               $form->addButton( 'wpCancel', $this->msg( 'resetpass-submit-cancel' )->text() );
+               $form->addButton( array(
+                       'name' => 'wpCancel',
+                       'value' => $this->msg( 'resetpass-submit-cancel' )->text()
+               ) );
                $form->setHeaderText( $this->msg( 'resetpass_text' )->parseAsBlock() );
                if ( $this->mPreTextMessage instanceof Message ) {
                        $form->addPreText( $this->mPreTextMessage->parseAsBlock() );
index 0f8b729..50a48c3 100644 (file)
@@ -51,11 +51,10 @@ class SpecialComparePages extends SpecialPage {
                $this->outputHeader();
 
                # Form (.mw-searchInput enables suggestions)
-               $form = new HTMLForm( array(
+               $form = HTMLForm::factory( 'ooui', array(
                        'Page1' => array(
-                               'type' => 'text',
+                               'type' => 'title',
                                'name' => 'page1',
-                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page1',
                                'size' => '40',
                                'section' => 'page1',
@@ -70,9 +69,8 @@ class SpecialComparePages extends SpecialPage {
                                'validation-callback' => array( $this, 'checkExistingRevision' ),
                        ),
                        'Page2' => array(
-                               'type' => 'text',
+                               'type' => 'title',
                                'name' => 'page2',
-                               'cssclass' => 'mw-searchInput',
                                'label-message' => 'compare-page2',
                                'size' => '40',
                                'section' => 'page2',
index 147f67e..37d3636 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Implements Special:Confirmemail and Special:Invalidateemail
+ * Implements Special:Confirmemail
  *
  * 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
@@ -78,16 +78,37 @@ class EmailConfirmation extends UnlistedSpecialPage {
                $user = $this->getUser();
                $out = $this->getOutput();
 
-               if ( $this->getRequest()->wasPosted() &&
-                       $user->matchEditToken( $this->getRequest()->getText( 'token' ) )
-               ) {
-                       $status = $user->sendConfirmationMail();
-                       if ( $status->isGood() ) {
+               if ( !$user->isEmailConfirmed() ) {
+                       $descriptor = array();
+                       if ( $user->isEmailConfirmationPending() ) {
+                               $descriptor += array(
+                                       'pending' => array(
+                                               'type' => 'info',
+                                               'raw' => true,
+                                               'default' => "<div class=\"error mw-confirmemail-pending\">\n" .
+                                                       $this->msg( 'confirmemail_pending' )->escaped() .
+                                                       "\n</div>",
+                                       ),
+                               );
+                       }
+
+                       $out->addWikiMsg( 'confirmemail_text' );
+                       $form = HTMLForm::factory( 'ooui', $descriptor, $this->getContext() );
+                       $form
+                               ->setMethod( 'post' )
+                               ->setAction( $this->getPageTitle()->getLocalURL() )
+                               ->setSubmitTextMsg( 'confirmemail_send' )
+                               ->setSubmitCallback( array( $this, 'submitSend' ) );
+
+                       $retval = $form->show();
+
+                       if ( $retval === true ) {
+                               // should never happen, but if so, don't let the user without any message
                                $out->addWikiMsg( 'confirmemail_sent' );
-                       } else {
-                               $out->addWikiText( $status->getWikiText( 'confirmemail_sendfailed' ) );
+                       } elseif ( $retval instanceof Status && $retval->isGood() ) {
+                               $out->addWikiText( $retval->getValue() );
                        }
-               } elseif ( $user->isEmailConfirmed() ) {
+               } else {
                        // date and time are separate parameters to facilitate localisation.
                        // $time is kept for backward compat reasons.
                        // 'emailauthenticated' is also used in SpecialPreferences.php
@@ -97,23 +118,22 @@ class EmailConfirmation extends UnlistedSpecialPage {
                        $d = $lang->userDate( $emailAuthenticated, $user );
                        $t = $lang->userTime( $emailAuthenticated, $user );
                        $out->addWikiMsg( 'emailauthenticated', $time, $d, $t );
-               } else {
-                       if ( $user->isEmailConfirmationPending() ) {
-                               $out->wrapWikiMsg(
-                                       "<div class=\"error mw-confirmemail-pending\">\n$1\n</div>",
-                                       'confirmemail_pending'
-                               );
-                       }
+               }
+       }
 
-                       $out->addWikiMsg( 'confirmemail_text' );
-                       $form = Html::openElement(
-                               'form',
-                               array( 'method' => 'post', 'action' => $this->getPageTitle()->getLocalURL() )
-                       ) . "\n";
-                       $form .= Html::hidden( 'token', $user->getEditToken() ) . "\n";
-                       $form .= Xml::submitButton( $this->msg( 'confirmemail_send' )->text() ) . "\n";
-                       $form .= Html::closeElement( 'form' ) . "\n";
-                       $out->addHTML( $form );
+       /**
+        * Callback for HTMLForm send confirmation mail.
+        *
+        * @return Status Status object with the result
+        */
+       public function submitSend() {
+               $status = $this->getUser()->sendConfirmationMail();
+               if ( $status->isGood() ) {
+                       return Status::newGood( $this->msg( 'confirmemail_sent' )->text() );
+               } else {
+                       return Status::newFatal( new RawMessage(
+                               $status->getWikiText( 'confirmemail_sendfailed' )
+                       ) );
                }
        }
 
@@ -142,49 +162,3 @@ class EmailConfirmation extends UnlistedSpecialPage {
                }
        }
 }
-
-/**
- * Special page allows users to cancel an email confirmation using the e-mail
- * confirmation code
- *
- * @ingroup SpecialPage
- */
-class EmailInvalidation extends UnlistedSpecialPage {
-       public function __construct() {
-               parent::__construct( 'Invalidateemail', 'editmyprivateinfo' );
-       }
-
-       function execute( $code ) {
-               // Ignore things like master queries/connections on GET requests.
-               // It's very convenient to just allow formless link usage.
-               Profiler::instance()->getTransactionProfiler()->resetExpectations();
-
-               $this->setHeaders();
-               $this->checkReadOnly();
-               $this->checkPermissions();
-               $this->attemptInvalidate( $code );
-       }
-
-       /**
-        * Attempt to invalidate the user's email address and show success or failure
-        * as needed; if successful, link to main page
-        *
-        * @param string $code Confirmation code
-        */
-       function attemptInvalidate( $code ) {
-               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
-               if ( !is_object( $user ) ) {
-                       $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
-
-                       return;
-               }
-
-               $user->invalidateEmail();
-               $user->saveSettings();
-               $this->getOutput()->addWikiMsg( 'confirmemail_invalidated' );
-
-               if ( !$this->getUser()->isLoggedIn() ) {
-                       $this->getOutput()->returnToMain();
-               }
-       }
-}
diff --git a/includes/specials/SpecialEmailInvalidate.php b/includes/specials/SpecialEmailInvalidate.php
new file mode 100644 (file)
index 0000000..30f9d2e
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Implements Special:EmailInvalidation
+ *
+ * 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 SpecialPage
+ */
+
+/**
+ * Special page allows users to cancel an email confirmation using the e-mail
+ * confirmation code
+ *
+ * @ingroup SpecialPage
+ */
+class EmailInvalidation extends UnlistedSpecialPage {
+       public function __construct() {
+               parent::__construct( 'Invalidateemail', 'editmyprivateinfo' );
+       }
+
+       function execute( $code ) {
+               // Ignore things like master queries/connections on GET requests.
+               // It's very convenient to just allow formless link usage.
+               Profiler::instance()->getTransactionProfiler()->resetExpectations();
+
+               $this->setHeaders();
+               $this->checkReadOnly();
+               $this->checkPermissions();
+               $this->attemptInvalidate( $code );
+       }
+
+       /**
+        * Attempt to invalidate the user's email address and show success or failure
+        * as needed; if successful, link to main page
+        *
+        * @param string $code Confirmation code
+        */
+       function attemptInvalidate( $code ) {
+               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
+               if ( !is_object( $user ) ) {
+                       $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
+
+                       return;
+               }
+
+               $user->invalidateEmail();
+               $user->saveSettings();
+               $this->getOutput()->addWikiMsg( 'confirmemail_invalidated' );
+
+               if ( !$this->getUser()->isLoggedIn() ) {
+                       $this->getOutput()->returnToMain();
+               }
+       }
+}
index 618e700..3aeadc9 100644 (file)
@@ -85,7 +85,6 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        'Text' => array(
                                'type' => 'textarea',
                                'rows' => 20,
-                               'cols' => 80,
                                'label-message' => 'emailmessage',
                                'required' => true,
                        ),
@@ -99,12 +98,16 @@ class SpecialEmailUser extends UnlistedSpecialPage {
 
        public function execute( $par ) {
                $out = $this->getOutput();
+               $request = $this->getRequest();
                $out->addModuleStyles( 'mediawiki.special' );
 
                $this->mTarget = is_null( $par )
-                       ? $this->getRequest()->getVal( 'wpTarget', $this->getRequest()->getVal( 'target', '' ) )
+                       ? $request->getVal( 'wpTarget', '' )
                        : $par;
 
+               // make sure, that HTMLForm uses the correct target
+               $request->setVal( 'wpTarget', $this->mTarget );
+
                // This needs to be below assignment of $this->mTarget because
                // getDescription() needs it to determine the correct page title.
                $this->setHeaders();
@@ -135,41 +138,16 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                list( $title, $msg, $params ) = $error;
                                throw new ErrorPageError( $title, $msg, $params );
                }
-               // Got a valid target user name? Else ask for one.
-               $ret = self::getTarget( $this->mTarget );
-               if ( !$ret instanceof User ) {
-                       if ( $this->mTarget != '' ) {
-                               // Messages used here: notargettext, noemailtext, nowikiemailtext
-                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
-                               $out->wrapWikiMsg( "<p class='error'>$1</p>", $ret );
-                       }
-                       $out->addHTML( $this->userForm( $this->mTarget ) );
-
-                       return;
-               }
 
-               $this->mTargetObj = $ret;
-
-               $context = new DerivativeContext( $this->getContext() );
-               $context->setTitle( $this->getPageTitle() ); // Remove subpage
-               $form = new HTMLForm( $this->getFormFields(), $context );
-               // By now we are supposed to be sure that $this->mTarget is a user name
-               $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
-               $form->setSubmitTextMsg( 'emailsend' );
-               $form->setSubmitCallback( array( __CLASS__, 'uiSubmit' ) );
-               $form->setWrapperLegendMsg( 'email-legend' );
-               $form->loadData();
-
-               if ( !Hooks::run( 'EmailUserForm', array( &$form ) ) ) {
-                       return;
-               }
-
-               $result = $form->show();
-
-               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
-                       $out->setPageTitle( $this->msg( 'emailsent' ) );
-                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
-                       $out->returnToMain( false, $this->mTargetObj->getUserPage() );
+               // a little hack: HTMLForm will check $this->mTarget only, if the form was posted, not
+               // if the user opens Special:EmailUser/Florian (e.g.). So check, if the user did that,
+               // and show the "Send email to user" form directly, if so. Show the "enter username"
+               // form, otherwise.
+               $this->mTargetObj = self::getTarget( $this->mTarget );
+               if ( !$this->mTargetObj instanceof User ) {
+                       $this->userForm( $this->mTarget );
+               } else {
+                       $this->sendEmailForm();
                }
        }
 
@@ -260,31 +238,63 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * @return string Form asking for user name.
         */
        protected function userForm( $name ) {
-               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
-               $string = Xml::openElement(
-                       'form',
-                       array( 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' )
-               ) .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
-                       Xml::openElement( 'fieldset' ) .
-                       Html::rawElement( 'legend', null, $this->msg( 'emailtarget' )->parse() ) .
-                       Xml::inputLabel(
-                               $this->msg( 'emailusername' )->text(),
-                               'target',
-                               'emailusertarget',
-                               30,
-                               $name,
-                               array(
-                                       'class' => 'mw-autocomplete-user',  // used by mediawiki.userSuggest
-                                       'autofocus' => true,
-                               )
-                       ) .
-                       ' ' .
-                       Xml::submitButton( $this->msg( 'emailusernamesubmit' )->text() ) .
-                       Xml::closeElement( 'fieldset' ) .
-                       Xml::closeElement( 'form' ) . "\n";
-
-               return $string;
+               $form = HTMLForm::factory( 'ooui', array(
+                       'Target' => array(
+                               'type' => 'user',
+                               'exists' => true,
+                               'label' => $this->msg( 'emailusername' )->text(),
+                               'id' => 'emailusertarget',
+                               'autofocus' => true,
+                               'value' => $name,
+                       ),
+               ), $this->getContext() );
+
+               $form
+                       ->setMethod( 'post' )
+                       ->setSubmitCallback( array( $this, 'sendEmailForm' ) )
+                       ->setSubmitProgressive()
+                       ->setId( 'askusername' )
+                       ->addHiddenField( 'title', $this->getPageTitle()->getPrefixedText() )
+                       ->setWrapperLegendMsg( 'emailtarget' )
+                       ->setSubmitTextMsg( 'emailusernamesubmit' )
+                       ->show();
+       }
+
+       public function sendEmailForm() {
+               $out = $this->getOutput();
+
+               $ret = $this->mTargetObj;
+               if ( !$ret instanceof User ) {
+                       if ( $this->mTarget != '' ) {
+                               // Messages used here: notargettext, noemailtext, nowikiemailtext
+                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
+                               return Status::newFatal( $ret );
+                       }
+                       return false;
+               }
+
+               $context = new DerivativeContext( $this->getContext() );
+               $context->setTitle( $this->getPageTitle() ); // Remove subpage
+               $form = HTMLForm::factory( 'ooui', $this->getFormFields(), $context );
+               // By now we are supposed to be sure that $this->mTarget is a user name
+               $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
+               $form->setSubmitTextMsg( 'emailsend' );
+               $form->setSubmitCallback( array( __CLASS__, 'uiSubmit' ) );
+               $form->setWrapperLegendMsg( 'email-legend' );
+               $form->loadData();
+
+               if ( !Hooks::run( 'EmailUserForm', array( &$form ) ) ) {
+                       return false;
+               }
+
+               $result = $form->show();
+
+               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
+                       $out->setPageTitle( $this->msg( 'emailsent' ) );
+                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
+                       $out->returnToMain( false, $ret->getUserPage() );
+               }
+               return true;
        }
 
        /**
index 06eb276..17c224c 100644 (file)
@@ -95,8 +95,8 @@ class SpecialExpandTemplates extends SpecialPage {
                }
 
                $out = $this->getOutput();
-               $out->addWikiMsg( 'expand_templates_intro' );
-               $out->addHTML( $this->makeForm( $titleStr, $input ) );
+
+               $this->makeForm( $titleStr, $input );
 
                if ( $output !== false ) {
                        if ( $this->generateXML && strlen( $output ) > 0 ) {
@@ -130,6 +130,22 @@ class SpecialExpandTemplates extends SpecialPage {
                }
        }
 
+       /**
+        * Callback for the HTMLForm used in self::makeForm.
+        * Checks, if the input was given, and if not, returns a fatal Status
+        * object with an error message.
+        *
+        * @param array $values The values submitted to the HTMLForm
+        * @return Status
+        */
+       public function onSubmitInput( array $values ) {
+               $status = Status::newGood();
+               if ( !strlen( $values['input'] ) ) {
+                       $status = Status::newFatal( 'expand_templates_input_missing' );
+               }
+               return $status;
+       }
+
        /**
         * Generate a form allowing users to enter information
         *
@@ -138,69 +154,62 @@ class SpecialExpandTemplates extends SpecialPage {
         * @return string
         */
        private function makeForm( $title, $input ) {
-               $self = $this->getPageTitle();
-               $request = $this->getRequest();
-               $user = $this->getUser();
-
-               $form = Xml::openElement(
-                       'form',
-                       array( 'method' => 'post', 'action' => $self->getLocalUrl() )
-               );
-               $form .= "<fieldset><legend>" . $this->msg( 'expandtemplates' )->escaped() . "</legend>\n";
-
-               $form .= '<p>' . Xml::inputLabel(
-                       $this->msg( 'expand_templates_title' )->plain(),
-                       'wpContextTitle',
-                       'contexttitle',
-                       60,
-                       $title,
-                       array( 'autofocus' => '', 'class' => 'mw-ui-input-inline' )
-               ) . '</p>';
-               $form .= '<p>' . Xml::label(
-                       $this->msg( 'expand_templates_input' )->text(),
-                       'input'
-               ) . '</p>';
-               $form .= Xml::textarea(
-                       'wpInput',
-                       $input,
-                       10,
-                       10,
-                       array( 'id' => 'input' )
+               $fields = array(
+                       'contexttitle' => array(
+                               'type' => 'text',
+                               'label' => $this->msg( 'expand_templates_title' )->plain(),
+                               'name' => 'wpContextTitle',
+                               'id' => 'contexttitle',
+                               'size' => 60,
+                               'default' => $title,
+                               'autofocus' => true,
+                               'cssclass' => 'mw-ui-input-inline',
+                       ),
+                       'input' => array(
+                               'type' => 'textarea',
+                               'name' => 'wpInput',
+                               'label-message' => 'expand_templates_input',
+                               'rows' => 10,
+                               'default' => $input,
+                               'id' => 'input',
+                       ),
+                       'removecomments' => array(
+                               'type' => 'check',
+                               'label-message' => 'expand_templates_remove_comments',
+                               'name' => 'wpRemoveComments',
+                               'id' => 'removecomments',
+                               'default' => $this->removeComments,
+                       ),
+                       'removenowiki' => array(
+                               'type' => 'check',
+                               'label-message' => 'expand_templates_remove_nowiki',
+                               'name' => 'wpRemoveNowiki',
+                               'id' => 'removenowiki',
+                               'default' => $this->removeNowiki,
+                       ),
+                       'generate_xml' => array(
+                               'type' => 'check',
+                               'label-message' => 'expand_templates_generate_xml',
+                               'name' => 'wpGenerateXml',
+                               'id' => 'generate_xml',
+                               'default' => $this->generateXML,
+                       ),
+                       'generate_rawhtml' => array(
+                               'type' => 'check',
+                               'label-message' => 'expand_templates_generate_rawhtml',
+                               'name' => 'wpGenerateRawHtml',
+                               'id' => 'generate_rawhtml',
+                               'default' => $this->generateRawHtml,
+                       ),
                );
 
-               $form .= '<p>' . Xml::checkLabel(
-                       $this->msg( 'expand_templates_remove_comments' )->text(),
-                       'wpRemoveComments',
-                       'removecomments',
-                       $this->removeComments
-               ) . '</p>';
-               $form .= '<p>' . Xml::checkLabel(
-                       $this->msg( 'expand_templates_remove_nowiki' )->text(),
-                       'wpRemoveNowiki',
-                       'removenowiki',
-                       $this->removeNowiki
-               ) . '</p>';
-               $form .= '<p>' . Xml::checkLabel(
-                       $this->msg( 'expand_templates_generate_xml' )->text(),
-                       'wpGenerateXml',
-                       'generate_xml',
-                       $this->generateXML
-               ) . '</p>';
-               $form .= '<p>' . Xml::checkLabel(
-                       $this->msg( 'expand_templates_generate_rawhtml' )->text(),
-                       'wpGenerateRawHtml',
-                       'generate_rawhtml',
-                       $this->generateRawHtml
-               ) . '</p>';
-               $form .= '<p>' . Xml::submitButton(
-                       $this->msg( 'expand_templates_ok' )->text(),
-                       array( 'accesskey' => 's' )
-               ) . '</p>';
-               $form .= "</fieldset>\n";
-               $form .= Html::hidden( 'wpEditToken', $user->getEditToken( '', $request ) );
-               $form .= Xml::closeElement( 'form' );
-
-               return $form;
+               $form = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
+               $form
+                       ->setSubmitTextMsg( 'expand_templates_ok' )
+                       ->setWrapperLegendMsg( 'expandtemplates' )
+                       ->setHeaderText( $this->msg( 'expand_templates_intro' )->text() )
+                       ->setSubmitCallback( array( $this, 'onSubmitInput' ) )
+                       ->showAlways();
        }
 
        /**
index 91fef03..3ce9c76 100644 (file)
@@ -235,8 +235,8 @@ class SpecialExport extends SpecialPage {
                        'textarea' => array(
                                'class' => 'HTMLTextAreaField',
                                'name' => 'pages',
+                               'label-message' => 'export-manual',
                                'nodata' => true,
-                               'cols' => 40,
                                'rows' => 10,
                                'default' => $page,
                        ),
@@ -301,7 +301,7 @@ class SpecialExport extends SpecialPage {
                        );
                }
 
-               $htmlForm = HTMLForm::factory( 'div', $formDescriptor, $this->getContext() );
+               $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
                $htmlForm->setSubmitTextMsg( 'export-submit' );
                $htmlForm->prepareForm()->displayForm( false );
                $this->addHelpLink( 'Help:Export' );
index c8c4642..b4470f5 100644 (file)
@@ -405,8 +405,14 @@ class SpecialUpload extends SpecialPage {
 
                $form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
                $form->setSubmitText( $this->msg( 'upload-tryagain' )->text() );
-               $form->addButton( 'wpUploadIgnoreWarning', $this->msg( 'ignorewarning' )->text() );
-               $form->addButton( 'wpCancelUpload', $this->msg( 'reuploaddesc' )->text() );
+               $form->addButton( array(
+                       'name' => 'wpUploadIgnoreWarning',
+                       'value' => $this->msg( 'ignorewarning' )->text()
+               ) );
+               $form->addButton( array(
+                       'name' => 'wpCancelUpload',
+                       'value' => $this->msg( 'reuploaddesc' )->text()
+               ) );
 
                $this->showUploadForm( $form );
 
index 8fa430f..3e974e3 100644 (file)
@@ -3323,17 +3323,6 @@ class User implements IDBAccessObject {
                }
        }
 
-       /**
-        * Get the current skin, loading it if required
-        * @return Skin The current skin
-        * @todo FIXME: Need to check the old failback system [AV]
-        * @deprecated since 1.18 Use ->getSkin() in the most relevant outputting context you have
-        */
-       public function getSkin() {
-               wfDeprecated( __METHOD__, '1.18' );
-               return RequestContext::getMain()->getSkin();
-       }
-
        /**
         * Get a WatchedItem for this user and $title.
         *
index dbf4cce..d374c85 100644 (file)
@@ -71,15 +71,14 @@ class LanguageOs extends Language {
                if ( preg_match( '/тæ$/u', $word ) ) {
                        $word = mb_substr( $word, 0, -1 );
                        $end_allative = 'æм';
-               }
-               # Works if $word is in singular form.
-               # Checking if $word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
-               elseif ( preg_match( "/[аæеёиоыэюя]$/u", $word ) ) {
+               } elseif ( preg_match( "/[аæеёиоыэюя]$/u", $word ) ) {
+                       # Works if $word is in singular form.
+                       # Checking if $word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
                        $jot = 'й';
-               }
-               # Checking if $word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
-               # Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
-               elseif ( preg_match( "/у$/u", $word ) ) {
+               } elseif ( preg_match( "/у$/u", $word ) ) {
+                       # Checking if $word ends on 'у'. 'У'
+                       # can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
+                       # Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
                        if ( !preg_match( "/[аæеёиоыэюя]$/u", mb_substr( $word, -2, 1 ) ) ) {
                                $jot = 'й';
                        }
index 9cbb3ef..3ae26e9 100644 (file)
        "rows": "Sıralar:",
        "columns": "Sütunlar:",
        "searchresultshead": "Axtar",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">Keçidsiz linki</a> format etmək üçün hüdud (baytlarla):",
-       "stub-threshold-disabled": "Kənarlaşdırılıb",
+       "stub-threshold": "Qaralama məqalələrə keçidlərin tərtibatını təyinetmə diapazonu ($1):",
+       "stub-threshold-sample-link": "nümunə",
+       "stub-threshold-disabled": "Yoxdur",
        "recentchangesdays": "Son dəyişiklərdə göstərilən günlərin miqdarı:",
        "recentchangesdays-max": "Maksimum $1 {{PLURAL:$1|gün|gün}}",
        "recentchangescount": "Son dəyişikliklərdə başlıq sayı:",
        "recentchanges-label-minor": "Bu kiçik redaktədir",
        "recentchanges-label-bot": "Bu redaktə bot tərəfindən edilmişdir",
        "recentchanges-label-unpatrolled": "Bu redaktə hələ patrullanmayıb",
-       "recentchanges-label-plusminus": "Səhifənin ölçüsü bayt miqdarı ilə təyin edilir",
+       "recentchanges-label-plusminus": "Səhifənin ölçüsündəki dəyişiklik (baytlarla)",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
        "rcnotefrom": "Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).",
        "rc_categories": "Kateqoriyalara limit qoy (\"|\" ilə ayır)",
        "rc_categories_any": "Hər",
        "rc-change-size": "$1",
-       "rc-change-size-new": "$1 üçün dəyişiklikdən sonrakı həcm: {{PLURAL:$1|bayt|bayt|bayt}}",
+       "rc-change-size-new": "Dəyişiklikdən sonrakı ölçü: $1 bayt",
        "newsectionsummary": "/* $1 */ yeni bölmə",
        "rc-enhanced-expand": "Ətraflı göstər",
        "rc-enhanced-hide": "Redaktələri gizlət",
        "backend-fail-copy": "\"$1\" faylı \"$2\" faylına kopyalanmır.",
        "backend-fail-read": "\"$1\" faylı oxunmadı.",
        "backend-fail-create": "\"$1\" faylı yazıla bilmədi.",
+       "backend-fail-maxsize": "$1 faylının ölçüsü $2 baytdan çox olduğu üçün yazmaq mümkün olmadı.",
        "uploadstash": "Gizli yükləmə",
        "uploadstash-clear": "Müvəqqəti faylları təmizlə",
        "uploadstash-refresh": "Fayl siyahısını yenilə",
        "restriction-level": "Məhdudiyyət dərəcəsi:",
        "minimum-size": "Minimum həcm",
        "maximum-size": "Maksimum həcm",
-       "pagesize": "(baytlar)",
+       "pagesize": "(bayt)",
        "restriction-edit": "Redaktə",
        "restriction-move": "Adını dəyiş",
        "restriction-create": "Yarat",
        "exif-xresolution": "Üfiqi xətt",
        "exif-yresolution": "Şaquli xətt",
        "exif-rowsperstrip": "Hər blokdakı sətirlərin sayı",
-       "exif-jpeginterchangeformatlength": "JPEG məlumat bazasının baytları",
+       "exif-jpeginterchangeformatlength": "JPEG məlumatın ölçüsü",
        "exif-datetime": "Faylın dəyişməsi tarixi və vaxtı",
        "exif-imagedescription": "Şəkil başlığı",
        "exif-make": "Kamera istehsalçısı",
        "autosumm-replace": "Səhifənin məzmunu '$1' yazısı ilə dəyişdirildi",
        "autoredircomment": "[[$1]] səhifəsinə istiqamətləndirilir",
        "autosumm-new": "Səhifəni '$1' ilə yarat",
+       "size-bytes": "$1 bayt",
        "watchlistedit-normal-title": "İzlədiyim səhifələri redaktə et",
        "watchlistedit-normal-legend": "İzləmə siyahısından başlıqların silinməsi",
        "watchlistedit-normal-submit": "Başlığın silinməsi",
        "duration-millennia": "$1 {{PLURAL:$1|minillik|minillik}}",
        "limitreport-cputime": "CPU vaxt istifadəsi",
        "limitreport-walltime": "Real vaxt istifadəsi",
+       "limitreport-postexpandincludesize-value": "$1/$2 bayt",
        "expand_templates_output": "Nəticə",
        "expand_templates_ok": "OK",
        "pagelang-name": "Səhifə",
        "pagelang-language": "Dil",
+       "mediastatistics-nbytes": "$1 bayt ($2; $3%)",
        "mediastatistics-header-unknown": "Naməlum",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Videolar",
index 36c3957..a212a0e 100644 (file)
        "articlepage": "ایچری‌لی صحیفه‌یه باخ",
        "talk": "دانیشیق",
        "views": "گؤرونوشلر",
-       "toolbox": "آراجلار",
+       "toolbox": "آلتلر",
        "userpage": "ایشلدن صفحه‌‌سینه باخ",
        "projectpage": "پروژه صحیفه‌سینه باخ",
        "imagepage": "فایل صحیفه‌سینه باخ",
        "rc-enhanced-expand": "تفصیل‌لری گؤستر",
        "rc-enhanced-hide": "تفصیل‌لری گیزلت",
        "rc-old-title": "ایلک‌جه «$1» آدی‌له یارانمیشدیر",
-       "recentchangeslinked": "اÛ\8cÙ\84Ú¯Û\8cلی دَییشیکلیکلر",
-       "recentchangeslinked-feed": "اÛ\8cÙ\84Ú¯Û\8cلی دَییشیکلیکلر",
-       "recentchangeslinked-toolbox": "اÛ\8cÙ\84Ú¯Û\8cلی دَییشیکلیکلر",
+       "recentchangeslinked": "باغلی دَییشیکلیکلر",
+       "recentchangeslinked-feed": "باغلی دَییشیکلیکلر",
+       "recentchangeslinked-toolbox": "باغلی دَییشیکلیکلر",
        "recentchangeslinked-title": "''$1'' ایله ایلگی‌لی دییشیکلر",
        "recentchangeslinked-summary": "آشاغیداکی سیياهی، قئيد اوْلونان صحیفه‌‌يه (و يا قئيد اوْلونان کاتئقوْرياداکی صحیفه‌‌لره) داخیلی کئچید وئرن صحیفه‌‌لرده ائدیلمیش سوْن ديَیشیکلیکلرین سیياهیسیدیر. \n[[Special:Watchlist|ایزله‌مه سیياهینیزداکی]] صحیفه‌‌لر '''قالین''' شریفتله گؤستریلمیشدیر.",
        "recentchangeslinked-page": "صفحه آدی:",
        "databasenotlocked": "وئریلن‌لر بازاسی باغلانماییب.",
        "lockedbyandtime": "({{Gender: $1 | $1}} طرفین‌دن  $2 $3 اعتبار ایله)",
        "move-page": "$1 داشینیر",
-       "move-page-legend": "صحیفه‌نین آدینی دییش",
+       "move-page-legend": "صفحه‌نین آدینی دَییش",
        "movepagetext": "آشاغی‌داکی فورمدان ایستیفاده ائتمک، صحیفه‌نین آدینی، بوتون تاریخچه‌سینی ده کؤچورمک‌له، یئنی باشلیغا دییشه‌جک.\nاسکی باشلیق یئنی باشلیغا یول‌لاندیریلاجاق‌دیر.\nاسکی صحیفه‌یه اولان یول‌لاندیرماقلاری، اوتوماتیک گونجل‌له‌یه بیلرسینیز.\nبو سئچیمی ائتمه‌دیگینیز حالدا، [[Special:DoubleRedirects|تکرارلانان]] و یا [[Special:BrokenRedirects|قیریق یول‌لاندیرمالاری]] یوخلاماغی یاددان چیخارمایین.\nباغلانتیلاری اویغون یئره یول‌لاندیرماسیندان آرخایین اولماق، سیزین مسئولیتینیزده‌دیر.\n\nنظره آلین کی، هدف باشلیق آلتیندا بیر صحیفه مؤوجود اولسا، یئردییشمه '''باش توتمایاجاق'''، مگر بوکی او سونراکی صحیفه یول‌لاندیرما اولا و اؤنجه دَییشمه گئچمیشی ده اولمایا. بو او دئمک‌دیر کی، سهواً آدینی دییشدیگینیز صحیفه‌لری گئری قایتارا بیلمک اولار، بونونلا یاناشی آرتیق مؤوجود اولان صحیفه‌نین اوزرینه باشقا صحیفه یازا بیلمزسینیز.\n\n'''خبردارلیق!'''\nبو یئردییشمه مشهور صحیفه اوچون اساس‌لی و گؤزلنیلمز اولا بیلر؛ اونا گؤره ده بو دییشیک‌لیگی یئرینه یئتیرمزدن اول، بونون مومکون نتیجه‌لرینی باشا دوشدوگونوزدن آرخایین اولون.",
-       "movepagetext-noredirectfixer": "آشاغی‌داکی فورمو دول‌دورماق بیر صحیفنی یئنی‌دن آدلاندیریر، بوتون کئچمیشینی یئنی آدا داشیییر.\nکؤهنه مؤوزو یئنی باشلیغا بیر ایستیقامتلندیرمه صحیفه‌سی اولار.\n[[Special:DoubleRedirects|جوت]] یا دا [[Special:BrokenRedirects|نوزوک ایستیقامتلندیرمه‌لر]] صحیفه‌لرینی ایداره ائدین.\nعلاقه‌لرین گئتمه‌لری لازیم اولان یئرلره گئتدیک‌لرینی عمین اولماق سیزین سوروملولوغونوزدا‌دیر.\n\nیئنی باش‌لیقدا مؤوجود بیر صحیفه وارسا، بوش یا دا بیر ایستیقامتلندیرمه اولمادیقجا و دییشیک‌لیک کئچمیشی اولمادیغی تق‌دیرده، سهیف 'تاشینمایاجاکتیر.\nبو بو معنانی وئرر، بیر صحیفنی اشتباه ائتسه‌نیز صحیفنی کؤهنه آدییلا یئنی‌دن آدلان‌دیرا بیلریک، بو مؤوجود صحیفه‌نین اوزرینه یازماز.\n\n' 'خبردارلیق!'\nبو مشهور بیر صحیفه اوچون تأثیرلی و گؤزلنیلمز بیر دییشیک‌لیک اولا بیلر؛\nخاهیش ائدیریک راتیفیکاسیا ائتمه‌دن اول بونون نتیجه‌لرینی آنلادیغینیزدان امین اولون.",
+       "movepagetext-noredirectfixer": "آشاغی‌داکی فوْرمو دوْلدورماق بیر صفحه‌نی یئنی‌دن آدلاندیریر، بۆتون گئچمیشینی یئنی آدا داشیییر.\nکؤهنه موضوعو یئنی باشلیغا بیر یوْللاندیرما صفحه‌سی اوْلار.\n[[Special:DoubleRedirects|ایکی‌قات]] یوْخسا [[Special:BrokenRedirects|خطالی یوْللاندیرمالار]] صفحه‌لرینی یوْخلایین.\nباغلانتی‌لارین گئتمه‌لری گرک اولان یئرلره گئتدیک‌لرینی آرخایین اوْلماق سیزین مسعولیتینیزدیر.\n\nیئنی باشلیقدا مؤوجود بیر صفحه وارسا، بوْش یوْخسا بیر یوْللاندیرما اوْلمادیقجا و دییشیک‌لیک گئچمیشی اوْلمازسا، صفحه داشینمایاجاق.\nبۇ یانی، بیر صفحه‌نی اشتباه ائتسه‌نیز صفحه‌نی کؤهنه آدییلا یئنی‌دن آدلاندیرا بیلرسینیز، آنجاق بیر صفحه‌نی قاباقجادان مووجود اوْلان صفحه‌یه یوْللاندیرا بیلمزسینیز.\n\n' 'تذکور!'\nچوْخ گؤروشلو صفحه‌لرین یوْللاندیرماسی گؤزله‌نیلمز اثرلری اوْلا بیلر. لوطفا یوْللاندیرمادان قاباق، ایشینیزین نتیجه‌سیندن آرخایین اوْلون.",
        "movepagetalktext": "اویغون دانیشیق صحیفه‌سی آوتوماتیک حرکت ائده‌جک 'گر:'\n* بوش اولمایان دانیشیق صحیفه‌سی یئنی آدلا آرتیق مؤوجوددورسا، و یا\n* سیز بایراغی آشاغی‌دان گؤتورسه‌نیز.\n\nهمین حال‌لاردا ، احتیاج یارانارسا سیز صحیفه‌لری الله بیرلش‌دیرمک مجبوریتینده قالاجاقسینیز",
        "moveuserpage-warning": "' 'خبردارلیق:' بیر ایستیفاده‌چی صحیفه‌سینی داشیماق اوزرسینیز. خاهیش ائدیریک یالنیز صحیفه‌نین تاشیناجاغینا، آنجاق ایستیفاده‌چی‌نین یئنی‌دن آدلاندیریلمایاجاغینا دقت ائدین.",
        "movenologintext": "صحیفه‌نین آدینی دییشیک‌لیک اوچون قئیدیات‌لی و [[Special:UserLogin|سیستئمه]] داخیل اولمانیز لازیم‌دیر.",
        "cant-move-user-page": "ایستیفاده‌چی صحیفه‌لری‌نین آدینی دییشه بیلمزسینیز (باش‌لیق‌لاردان باشقا).",
        "cant-move-to-user-page": "بیر صحیفنی، بیر ایستیفاده‌چی صحیفه‌سینه داشیماغا ایجازه وئریلمیر (بیر ایستیفاده‌چی آلتسایفاسی خاریجینده).",
        "newtitle": "یئنی باش‌لیق",
-       "move-watch": "بو صحیفنی ایزله",
-       "movepagebtn": "صحیفه‌نین آدینی دییش",
+       "move-watch": "بۇ صفحه‌نی ایزله",
+       "movepagebtn": "صفحه‌نین آدینی دَییش",
        "pagemovedsub": "یئردییشمه ائدیلمیش‌دیر",
        "movepage-moved": "'\"$1\" صحیفه‌سی \"$2\" صحیفه‌سینه یئرلشدیریلمیشدیر",
        "movepage-moved-redirect": "یؤنلندیرمه یارادیلدی.",
        "movepage-moved-noredirect": "یؤنلندیرمه‌نین یارادیلماسینین قارشییس آلیندی.",
        "articleexists": "بو آددا صحیفه آرتیق مؤوجوددور و یا سیزین سئچدیگینیز آد اویغون دئییل.\nزحمت اولماسا باشقا آد سئچین.",
        "cantmove-titleprotected": "بیر صحیفنی بو مؤوقئیه داشییا بیلمز، چونکی یئنی موضونون یارادیلماسی قورونور",
-       "movetalk": "بو صحیفه‌نین دانیشیق صحیفه‌سی‌نین ده آدینی دییش‌دیر.",
+       "movetalk": "بۇ صفحه‌نین دانیشیق صفحه‌سی‌نین ده آدینی دَییشدیر.",
        "move-subpages": "یاریم صحیفه‌لری کؤچور ($1-ا قدر)",
        "move-talk-subpages": "دانیشیق صحیفه‌لری‌نین آلت صحیفه‌لرینی کؤچور ($1-ا قدر)",
        "movepage-page-exists": "$1 مادده‌سی اونسوز دا وار اولماقدا‌دیر، و آوتوماتیک اولا‌راق یئنی‌دن یازیلا بیلمز.",
        "table_pager_limit_label": "هر صحیفه‌ده اولان موردلر سایی‌سی",
        "table_pager_limit_submit": "گئت",
        "table_pager_empty": "نتیجه سیز",
-       "autosumm-blank": "صحیفه‌‌نی بوشالتدی",
+       "autosumm-blank": "صفحه‌‌نی بوْشالتدی",
        "autosumm-replace": "صحیفه‌‌نین مظمونو ' $1' يازیسی ایله ديَیشدیریلدی",
        "autoredircomment": "[[$1]] صفحه‌‌سینه یوْللاندیریلیر",
        "autosumm-new": "صفحه‌‌نی ' $1' ایله ياراتدی",
index 3e33f8c..dbe3a67 100644 (file)
        "upload-form-label-select-file": "Абраць файл",
        "upload-form-label-infoform-title": "Падрабязнасьці",
        "upload-form-label-infoform-name": "Назва",
+       "upload-form-label-infoform-name-tooltip": "Унікальнае апісаньне файлу, якое будзе выкарыстоўвацца як яго назва. Вы можаце карыстацца звычайнай мовай з прабеламі. Не дадавайце пашырэньне файлу.",
        "upload-form-label-infoform-description": "Апісаньне",
+       "upload-form-label-infoform-description-tooltip": "Коратка апішыце ўсё значнае пра гэтую працу.\nДля фота, узгадайце пра асноўныя аб’екты, выпадак ці месца.",
        "upload-form-label-usage-title": "Выкарыстаньне",
        "upload-form-label-usage-filename": "Назва файлу",
        "foreign-structured-upload-form-label-own-work": "Гэта мая ўласная праца",
        "foreign-structured-upload-form-3-label-question-noderiv": "Ці ўтрымлівае яна або яна натхнёная працай, якой валодае нехта іншы, як прыклад, лягатып?",
        "foreign-structured-upload-form-3-label-yes": "Так",
        "foreign-structured-upload-form-3-label-no": "Не",
+       "foreign-structured-upload-form-3-label-alternative": "На жаль, у гэтым выпадку інструмэнт не падтрымлівае загрузку такога файлу. Вы ўсё яшчэ можаце загрузіць яго з дапамогай [https://commons.wikimedia.org/wiki/Special:UploadWizard майстару загрузкі Вікісховішча], пры ўмове, што файл даступны паводле вольнай ліцэнзіі.",
+       "foreign-structured-upload-form-4-label-good": "З дапамогай гэтага інструмэнту вы можаце загрузіць адукацыйную графіку, створаную вамі, а таксама зробленыя вамі фотаздымкі, якія ня ўтрымліваюць працы, што належаць некаму іншаму.",
+       "foreign-structured-upload-form-4-label-bad": "Вы ня можаце загружаць выявы, знойдзеныя ў пошукавых сыстэмах або спампаваныя зь іншых сайтаў.",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
        "activeusers-hidebots": "Схаваць робатаў",
        "activeusers-hidesysops": "Схаваць адміністратараў",
        "activeusers-noresult": "Удзельнікі ня знойдзеныя.",
+       "activeusers-submit": "Паказаць актыўных удзельнікаў",
        "listgrouprights": "Правы групаў удзельнікаў",
        "listgrouprights-summary": "Ніжэй пададзены сьпіс групаў удзельнікаў {{GRAMMAR:родны|{{SITENAME}}}}, разам зь іх правамі.\nТаксама можна паглядзець [[{{MediaWiki:Listgrouprights-helppage}}|дадатковую інфармацыю]] пра асабістыя правы.",
        "listgrouprights-key": "Легенда:\n* <span class=\"listgrouprights-granted\">Прызначаныя правы</span>\n* <span class=\"listgrouprights-revoked\">Адабраныя правы</span>",
        "wlshowlast": "Паказаць за апошнія $1 гадзінаў, $2 дзён",
        "watchlistall2": "усё",
        "watchlist-hide": "Схаваць",
+       "watchlist-submit": "Паказаць",
        "wlshowtime": "Пэрыяд часу для паказу:",
        "wlshowhideminor": "дробныя праўкі",
        "wlshowhidebots": "робатаў",
        "wlshowhideanons": "ананімных удзельнікаў",
        "wlshowhidepatr": "патруляваныя праўкі",
        "wlshowhidemine": "мае праўкі",
+       "wlshowhidecategorization": "катэгарызацыю старонак",
        "watchlist-options": "Налады сьпісу назіраньня",
        "watching": "Дадаецца ў сьпіс назіраньня…",
        "unwatching": "Выдаляецца са сьпісу назіраньня…",
        "delete-confirm": "Выдаліць «$1»",
        "delete-legend": "Выдаліць",
        "historywarning": "<strong>Папярэджаньне</strong>: старонка, якую Вы зьбіраецеся выдаліць, мае гісторыю з $1 {{PLURAL:$1|вэрсіі|вэрсіяў|вэрсіяў}}:",
+       "historyaction-submit": "Паказаць",
        "confirmdeletetext": "Зараз Вы выдаліце старонку разам з усёй гісторыяй зьменаў.\nКалі ласка, пацьвердзіце, што Вы зьбіраецеся гэта зрабіць і што Вы разумееце ўсе наступствы, а таксама робіце гэта ў адпаведнасьці з [[{{MediaWiki:Policy-url}}|правіламі]].",
        "actioncomplete": "Дзеяньне выкананае",
        "actionfailed": "Дзеяньне ня выкананае",
        "whatlinkshere-hidelinks": "$1 спасылкі",
        "whatlinkshere-hideimages": "$1 спасылкі на выявы",
        "whatlinkshere-filters": "Фільтры",
+       "whatlinkshere-submit": "Перайсьці",
        "autoblockid": "Аўтаматычнае блякаваньне №$1",
        "block": "Заблякаваць удзельніка",
        "unblock": "Разблякаваць удзельніка",
        "export-download": "Захаваць як файл",
        "export-templates": "Разам з шаблёнамі",
        "export-pagelinks": "Уключыць зьвязаныя старонкі да глыбіні:",
+       "export-manual": "Дадаць старонкі ўручную:",
        "allmessages": "Сыстэмныя паведамленьні",
        "allmessagesname": "Назва",
        "allmessagesdefault": "Тэкст па змоўчаньні",
        "exif-compression-4": "CCITT Група 4 факсымільнае кадаваньне",
        "exif-copyrighted-true": "Ахоўваецца аўтарскім правам",
        "exif-copyrighted-false": "Статус аўтарскіх правоў ня вызначаны",
+       "exif-photometricinterpretation-1": "Чорны і белы (чорны — 0)",
        "exif-unknowndate": "Невядомая дата",
        "exif-orientation-1": "Звычайная",
        "exif-orientation-2": "Адлюстраваная па гарызанталі",
index 4ae53f9..2144684 100644 (file)
        "protect-level-sysop": "Толькі для адміністратараў",
        "protect-summary-cascade": "каскад",
        "protect-expiring": "скончыцца $1 (UTC)",
-       "protect-expiring-local": "канчацца $1",
+       "protect-expiring-local": "канчаецца $1",
        "protect-expiry-indefinite": "бясконца",
        "protect-cascade": "Каскад - ахоўваць таксама і ўсе тыя старонкі, які ўлучаюцца ў гэтую.",
        "protect-cantedit": "Вы не можаце змяніць узровень аховы гэтай старонкі, таму што не маеце дазволу правіць яе.",
index 2633e0b..fa96f36 100644 (file)
        "directorynotreadableerror": "Директория \"$1\" не може да бъде четена.",
        "filenotfound": "Файлът „$1“ не беше намерен.",
        "unexpected": "Неочаквана стойност: „$1“=„$2“.",
-       "formerror": "Възникна грешка при изпращане на формуляра",
+       "formerror": "Възникна грешка при изпращане на формуляра.",
        "badarticleerror": "Действието не може да бъде изпълнено на тази страница.",
        "cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.",
        "cannotdelete-title": "Страницата „$1“ не може да бъде изтрита",
-       "delete-hook-aborted": "Изтриването беше прекъснато от кука.\nНе беше посочена причина за това.",
+       "delete-hook-aborted": "Изтриването беше прекъснато от софтуерно прехващане.\nНе беше посочена причина за това.",
        "no-null-revision": "Не може да бъде създадена празна версия на страницата „$1“",
        "badtitle": "Невалидно заглавие",
        "badtitletext": "Желаното заглавие на страница е невалидно, празно или неправилна препратка към друго уики. Възможно е да съдържа знаци, които не са позволени в заглавия.",
        "title-invalid-talk-namespace": "Желаното заглавие на страница се отнася към беседа, която не съществува",
        "title-invalid-characters": "Желаното заглавие на статия съдържа невалидни знаци: „$1“",
        "title-invalid-relative": "Заглавието съдържа относителен път. Относителни заглавия на статии (./,../) са невалидни, защото често ще са недостижимо, когато биват извиквани от браузъра на потребителя.",
-       "title-invalid-magic-tilde": "Желаното заглавие на статия съдържа невалидна поредица от вълчнички (<nowiki>~~~</nowiki>).",
+       "title-invalid-magic-tilde": "Желаното заглавие на статия съдържа невалидна поредица от тилди (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Желаното заглавие на статия е твърде дълго. Трябва да е не по-дълго от $1 {{PLURAL:$1|байт|байта}} в кодиране UTF-8.",
        "title-invalid-leading-colon": "Желаното заглавие на статия съдържа невалидно двоеточие в началото.",
        "perfcached": "Следните данни са извлечени от склада и затова може да не отговарят на текущото състояние. В складираното копие {{PLURAL:$1|е допустим най-много един резултат|са допустими най-много $1 резултата}}.",
        "mypreferencesprotected": "Нямате права да редактирате настройките си.",
        "ns-specialprotected": "Специалните страници не могат да бъдат редактирани.",
        "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
-       "filereadonlyerror": "ФайлÑ\8aÑ\82 â\80\9e$1â\80\9c Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¿Ñ\80оменен, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ñ\84айловоÑ\82о Ñ\85Ñ\80анилиÑ\89е â\80\9e$2â\80\9c Ðµ Ð² Ñ\80ежим Ñ\81амо Ð·Ð° Ñ\87еÑ\82ене.\n\nÐ\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\8aÑ\82, който го е заключил, е посочил следната причина: „$3“.",
+       "filereadonlyerror": "ФайлÑ\8aÑ\82 â\80\9e$1â\80\9c Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¿Ñ\80оменен, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ñ\84айловоÑ\82о Ñ\85Ñ\80анилиÑ\89е â\80\9e$2â\80\9c Ðµ Ð² Ñ\80ежим Ñ\81амо Ð·Ð° Ñ\87еÑ\82ене.\n\nСиÑ\81Ñ\82емниÑ\8fÑ\82 Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80, който го е заключил, е посочил следната причина: „$3“.",
        "invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство „$2“ и текст „$3“",
        "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
        "exception-nologin": "Не сте влезли в системата",
        "yourname": "Потребителско име:",
        "userlogin-yourname": "Потребителско име",
        "userlogin-yourname-ph": "Въведете вашето потребителско име",
-       "createacct-another-username-ph": "Ð\92Ñ\8aвежда Ñ\81е Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81коÑ\82о име",
+       "createacct-another-username-ph": "Ð\92Ñ\8aведеÑ\82е Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81ко име",
        "yourpassword": "Парола:",
        "userlogin-yourpassword": "Парола",
        "userlogin-yourpassword-ph": "Въведете вашата парола",
        "createacct-emailrequired": "Адрес за електронна поща",
        "createacct-emailoptional": "Адрес за електронна поща (незадължително)",
        "createacct-email-ph": "Въведете Вашия адрес за електронна поща",
-       "createacct-another-email-ph": "Ð\92Ñ\8aвежда Ñ\81е електронна поща",
+       "createacct-another-email-ph": "Ð\92Ñ\8aведеÑ\82е електронна поща",
        "createaccountmail": "Използване на случайна временна парола, която се изпраща на електронната поща, посочена по-долу",
        "createacct-realname": "Истинско име (незадължително)",
        "createaccountreason": "Причина:",
        "mediastatistics-table-mimetype": "MIME тип",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-total": "Всички файлове",
        "json-error-syntax": "Синтактична грешка",
        "headline-anchor-title": "Препратка към този раздел",
        "special-characters-group-latin": "Латиница",
index 83bf032..959ef9f 100644 (file)
@@ -5,7 +5,8 @@
                        "Ibrahim khashrowdi",
                        "Rachitrali",
                        "Mjbmr",
-                       "Macofe"
+                       "Macofe",
+                       "Hosseinblue"
                ]
        },
        "tog-underline": "لینکانی جهلگا خط کشیتین",
        "allmessages-prefix": "فیلتر کورتین بئ اساس پدوند:",
        "allmessages-language": "زبان:",
        "allmessages-filter-submit": "برا",
-       "allmessages-filter-translate": "ترجمه",
+       "allmessages-filter-translate": "چاوواشەکِردن زوون",
        "thumbnail-more": "ٹُوه کورتین",
        "filemissing": "فایل وجود نداریت",
        "thumbnail_error": "خطا بئ ناحُنی ئی جۆڑ کورتین ئی وختا: $1",
index acafcdd..c0fefac 100644 (file)
        "content-model-text": "text net",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-model-json": "JSON",
        "content-json-empty-object": "Objecte buit",
        "content-json-empty-array": "Matriu buida",
        "duplicate-args-warning": "<strong>Avís:</strong> [[:$1]] crida [[:$2]] amb més d'un valor pel paràmetre «$3». Només s'utilitzarà el darrer valor proporcionat.",
        "foreign-structured-upload-form-label-infoform-date": "Data",
        "foreign-structured-upload-form-label-not-own-work-local-local": "També podeu provar [[Special:Upload|la pàgina de càrrega per defecte]].",
        "foreign-structured-upload-form-label-own-work-message-default": "Entenc que esteu carregant el fitxer en un repositori compartit. Confirmo que ho estic fent seguint les condicions d'ús i les polítiques de llicenciament que s'hi apliquen.",
+       "foreign-structured-upload-form-3-label-yes": "Sí",
+       "foreign-structured-upload-form-3-label-no": "No",
        "backend-fail-stream": "No s'ha pogut transmetre el fitxer $1.",
        "backend-fail-backup": "No s'ha pogut fer una còpia de seguretat del fitxer $1.",
        "backend-fail-notexists": "El fitxer $1 no existeix.",
        "usereditcount": "$1 {{PLURAL:$1|modificació|modificacions}}",
        "usercreated": "{{GENDER:$3|Creat}}: $1 a les $2",
        "newpages": "Pàgines noves",
+       "newpages-submit": "Mostra",
        "newpages-username": "Nom d'usuari:",
        "ancientpages": "Pàgines més antigues",
        "move": "Reanomena",
        "specialloguserlabel": "Realitzador:",
        "speciallogtitlelabel": "Objectiu (títol o «{{ns:user}}:nom d’usuari» per a un usuari):",
        "log": "Registres",
+       "logeventslist-submit": "Mostra",
        "all-logs-page": "Tots els registres públics",
        "alllogstext": "Presentació combinada de tots els registres disponibles de {{SITENAME}}.\nPodeu reduir l'extensió seleccionant el tipus de registre, el nom d'usuari realitzador (distingeix entre majúscules i minúscules), o la pàgina objectiu (també en distingeix).",
        "logempty": "No hi ha cap coincidència en el registre.",
        "cachedspecial-viewing-cached-ts": "Esteu veient una versió a la memòria cau de la pàgina, que podria no ser completament actual.",
        "cachedspecial-refresh-now": "Mostra la darrera.",
        "categories": "Categories",
+       "categories-submit": "Mostra",
        "categoriespagetext": "{{PLURAL:$1|La següent categoria conté|Les següents categories contenen}} pàgines, o fitxers multimèdia.\n[[Special:UnusedCategories|Les categories no usades]] no s'hi mostren.\nVegeu també [[Special:WantedCategories|les categories sol·licitades]].",
        "categoriesfrom": "Mostra les categories que comencen a:",
        "special-categories-sort-count": "ordena per recompte",
        "delete-confirm": "Elimina «$1»",
        "delete-legend": "Elimina",
        "historywarning": "<strong>Avís:</strong> la pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|revisió|revisions}}:",
+       "historyaction-submit": "Mostra",
        "confirmdeletetext": "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.\nConfirmeu que realment ho voleu fer, que enteneu les\nconseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
        "actioncomplete": "Acció realitzada",
        "actionfailed": "L'acció ha fallat",
index 6a35831..7ca6533 100644 (file)
        "createacct-benefit-body3": "{{PLURAL:$1|декъашхо|декъашхой}} тӀаьхьарчу хенахь",
        "badretype": "Ахьа язъен паролаш цхьатерра яц",
        "userexists": "Ахьа язъен декъашхочун цӀе йолуш ю, дехар до кхин цӀе харжар.",
-       "loginerror": "Ð\93Ó\80алаÑ\82 Ð´Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85о Ð²Ð¾Ð²Ð·Ð°Ñ\80еÑ\85Ñ\8c/йовзаÑ\80еÑ\85Ñ\8c",
+       "loginerror": "ЦÓ\80е Ñ\8f Ð¿Ð°Ñ\80олÑ\8c Ð½Ð¸Ð¹Ñ\81а Ñ\8fÑ\86",
        "createacct-error": "ДӀаяздар кхуллуш гӀалат ду",
        "createaccounterror": "Декъашхочун дӀаяздар кхолла йиш яц: $1",
        "nocookiesnew": "Декъашхочун дӀаяздар ду амма системин чохь вац/яц. Декъашхой чу гӀош {{SITENAME}} «cookies» лелош ю. Хьа «cookies» лелаян магийна дац дехар до и магийтина керлачу цӀарца а паролаца а системин чугӀо.",
        "nocookieslogin": "{{SITENAME}} лелош ю «cookies» декъашхой системин  чуболучу хенахь. Ахьа иш дӀайаьйина.",
        "nocookiesfornew": "Хьост хьажа йиш цахиларна декъашхочун дӀаяздар цакхоьллина. Хьажа «cookies» латина юьй такха агӀо карлаяьккхина юху гӀорта.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "noname": "Ð\90Ñ\85Ñ\8cа Ð¼Ð°Ð³Ð¸Ð¹Ñ\82ина Ð¹Ð¾Ð»Ñ\83 Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е Ð±Ð¸Ð»Ð³Ð°Ð» йина яц.",
+       "noname": "Ð\90Ñ\85Ñ\8cа Ð´ÐµÐºÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н Ñ\86Ó\80е Ð»Ð°Ñ\80Ñ\82Ó\80аÑ\85Ñ\8c Ñ\8fзйина яц.",
        "loginsuccesstitle": "Хьан пароль тӀеэца, марша догӀила Википеди чу!",
        "loginsuccess": "Хlинца ахьа болх бó оцу цlарца $1.",
        "nosuchuser": "Иштта $1 цӀе йолуш декъашхочун дӀаяздар дац.\nДекъашхой цӀерш хаалуш ю дӀаяздарца элпаш.\nНийса юьй хьажа цӀе я [[Special:UserLogin/signup|дӀаяздар кхолла керла]].",
        "nosuchusershort": "Ишта «$1» цӀе йолу декъашхо вац/яц. Хьажа цӀе нийса язйина юй.",
-       "nouserspecified": "Ахьа декъашхочун цӀе билгал ян езаш ю.",
+       "nouserspecified": "Ахьа декъашхочун цӀе язъян езаш ю.",
        "login-userblocked": "ХӀара декъашхо блоктоьхна ву/ю. Системин чувала/яла магийна дац.",
        "wrongpassword": "Ахьа язйина йолу пароль нийса яц. Хьажа юху цхьаъз.",
        "wrongpasswordempty": "Дехар до, язъе еса йоцу пароль.",
        "sp-contributions-newbies": "Гайта бекъ къинхьегам, керла дlабазбиначара бина болу",
        "sp-contributions-newbies-sub": "Керла декъашхойн дӀаяздаршкара",
        "sp-contributions-newbies-title": "Дукху хан йоцуш кхоьллинчу декъашхойн дӀаяздарийн къинхьегам",
-       "sp-contributions-blocklog": "блоктоьхарш",
+       "sp-contributions-blocklog": "блокÑ\82оÑ\8cÑ\85наÑ\80Ñ\88",
        "sp-contributions-suppresslog": "Декъашхочун дӀабаьккхина къинхьегам",
        "sp-contributions-deleted": "дӀадяхна нийсдарш",
        "sp-contributions-uploads": "Файлаш",
        "change-blocklink": "хийцам бе блоктохарна",
        "contribslink": "къинхьегам",
        "emaillink": "дӀадахьийта кехат",
-       "blocklogpage": "Блоктоьхарш болу тептар",
+       "blocklogpage": "Ð\91локÑ\82оÑ\8cÑ\85наÑ\80Ñ\88 Ð±Ð¾Ð»Ñ\83 Ñ\82епÑ\82аÑ\80",
        "blocklog-showlog": "{{GENDER:$1|ХӀокху декъашхочун хьалхо блоктоьхна хила}}.\nЛахахь гойту блоктохарш долу тептар:",
        "blocklogentry": "блоктоьхна [[$1]] цхьана ханна $2 $3",
        "reblock-logentry": "Хийцина  блоктоьхна хан [[$1]] $2 $3",
-       "blocklogtext": "Ð\91локÑ\82оÑ\85аÑ\80Ñ\88на Ð° Ð±Ð»Ð¾ÐºÐ´Ó\80аÑ\8fкÑ\85аÑ\80Ñ\88на Ð° Ñ\82епÑ\82аÑ\80. Ð¨Ð° Ð±Ð»Ð¾ÐºÐºÑ\85еÑ\82аÑ\88 Ð´Ð¾Ð»Ñ\83 IP-адÑ\80еÑ\81аÑ\88 ÐºÑ\85Ñ\83заÑ\85Ñ\8c Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ð´Ð°Ñ\86. Ð\9aÑ\85ин. [[Special:BlockList|Ñ\85Ó\80ийнÑ\86а Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85а Ð±Ðµрш]].",
+       "blocklogtext": "Ð\91локÑ\82оÑ\85аÑ\80Ñ\88на Ð° Ð±Ð»Ð¾ÐºÐ´Ó\80аÑ\8fкÑ\85аÑ\80Ñ\88на Ð° Ñ\82епÑ\82аÑ\80. Ð¨Ð° Ð±Ð»Ð¾ÐºÐºÑ\85еÑ\82аÑ\88 Ð´Ð¾Ð»Ñ\83 IP-адÑ\80еÑ\81аÑ\88 ÐºÑ\85Ñ\83заÑ\85Ñ\8c Ð³Ð¾Ð¹Ñ\82Ñ\83Ñ\88 Ð´Ð°Ñ\86. Ð\9aÑ\85ин. [[Special:BlockList|Ñ\85Ó\80инÑ\86а Ð±Ð»Ð¾ÐºÑ\82оÑ\8cÑ\85нарш]].",
        "unblocklogentry": "дӀаяькхинаблок $1",
        "block-log-flags-anononly": "Къайлаха берш",
        "block-log-flags-nocreate": "цамагдо керла дӏаяздарш кхоллар",
index 6eb859b..05e6589 100644 (file)
        "upload-form-label-select-file": "Datei auswählen",
        "upload-form-label-infoform-title": "Einzelheiten",
        "upload-form-label-infoform-name": "Name",
+       "upload-form-label-infoform-name-tooltip": "Ein eindeutiger erklärender Titel für die Datei, die als Dateiname angeboten wird. Du musst reine Sprache mit Leerzeichen verwenden. Nicht die Dateierweiterung einschließen.",
        "upload-form-label-infoform-description": "Beschreibung",
+       "upload-form-label-infoform-description-tooltip": "Beschreibe kurz alles bedeutende über das Werk.\nErwähne für ein Foto die abgebildeten hauptsächlichen Dinge, das Ereignis oder den Ort.",
        "upload-form-label-usage-title": "Verwendung",
        "upload-form-label-usage-filename": "Dateiname",
        "foreign-structured-upload-form-label-own-work": "Dies ist mein eigenes Werk",
        "export-download": "Als XML-Datei speichern",
        "export-templates": "Inklusive Vorlagen",
        "export-pagelinks": "Verlinkte Seiten automatisch mit exportieren, bis zur Rekursionstiefe von:",
+       "export-manual": "Seiten manuell hinzufügen:",
        "allmessages": "MediaWiki-Systemnachrichten",
        "allmessagesname": "Name",
        "allmessagesdefault": "Standardtext",
        "expand_templates_preview": "Vorschau",
        "expand_templates_preview_fail_html": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und es einen Verlust deiner Sitzungsdaten gab, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, versuche es bitte erneut.</strong>\nFalls dieses Problem weiterhin bestehen bleibt, versuche dich [[Special:UserLogout|abzumelden]] und erneut anzumelden.",
        "expand_templates_preview_fail_html_anon": "<em>Da {{SITENAME}} rohes HTML aktiviert hat und du nicht angemeldet bist, ist die Vorschau als Vorsichtsmaßnahme gegen JavaScript-Angriffe versteckt.</em>\n\n<strong>Falls dies ein zulässiger Vorschauversuch ist, [[Special:UserLogin|melde dich bitte an]] und versuche es erneut.</strong>",
+       "expand_templates_input_missing": "Du musst mindestens einen Eingabetext angeben.",
        "pagelanguage": "Seitensprachenauswahl",
        "pagelang-name": "Seite",
        "pagelang-language": "Sprache",
index a91c34d..f2370d6 100644 (file)
        "disclaimers": "Redê mesuliyeti",
        "disclaimerpage": "Project:Reddê mesuliyetê bıngey",
        "edithelp": "Peştdariya vurnayışi",
-       "helppage-top-gethelp": "Desteg",
+       "helppage-top-gethelp": "Peşti",
        "mainpage": "Pela Seri",
        "mainpage-description": "Pela seri",
        "policy-url": "Project:Terzê hereketi",
        "intentionallyblankpage": "Ena pel bi zanayişî weng mendo.",
        "external_image_whitelist": "  #no satır zey xo verde/raverde<pre>\n#parçeyê ifadeya rêzbiyayeyani (têna zerreyê ıney de // ) u çıtayo/çiyo zi mende cêr de têare kerê.\n#ney URL ya (hotlink) resmê teberi de hemcıta benî.\n#Ê yê ke hemcıt (eşleşmek-hemçift) biyê zey resımi asenî, eqsê hal de zi zey gıreyê resmi aseno.\nsatır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.\n#herfa gırd û qıci ferq nêkeno\n\n#parçeyê ifadeya rêzbiyayeyani bıerzê serê ney satıri. no satır zey xo verde/raverde </pre>",
        "tags": "Etiketê vurnayîşê raştî",
-       "tag-filter": "Avrêcê [[Special:Tags|Etiketi]]:",
+       "tag-filter": "Parzûnê [[Special:Tags|etiketi]]:",
        "tag-filter-submit": "Avrêc",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiket|Etiketi}}]]: $2)",
        "tags-title": "Etiketan",
index 786382b..f80dacb 100644 (file)
        "foreign-structured-upload-form-label-not-own-work-message-default": "Εάν δεν είστε σε θέση να ανεβάσετε αυτό το αρχείο στο πλαίσιο των πολιτικών της shared repository, παρακαλώ κλείστε αυτό το παράθυρο διαλόγου και να επιχειρήσετε μια άλλη μέθοδος.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "Επίσης, μπορεί να θέλετε να δοκιμάσετε χρησιμοποιώντας το [[Special:Upload|τη σελίδα ανεβάσματος για το {{SITENAME}}]], αν αυτό το αρχείο μπορεί να φορτωθεί κάτω σύμφωνα με τις πολιτικές τους.",
        "foreign-structured-upload-form-label-own-work-message-shared": "Δηλώνω ότι κατέχω τα πνευματικά δικαιώματα για αυτό το αρχείο, και συμφωνώ αμετάκλητα στην απελευθέρωση  αυτού του  αρχείου στο Wikimedia Commons με άδεια  [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0], και συμφωνώ με την [https://wikimediafoundation.org/wiki/Terms_of_Use Όρους Χρήσης].",
-       "foreign-structured-upload-form-label-not-own-work-message-shared": "Αν δεν κατέχει τα πνευματικά δικαιώματα για αυτό το αρχείο, ή επιθυμείτε να το δημοσιεύσετε υπό μια διαφορετική άδεια χρήσης, μπορείτε να χρησιμοποιήσετε τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγό Ανεβάσματος των Κοινών].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Αν δεν κατέχει τα πνευματικά δικαιώματα για αυτό το αρχείο, ή επιθυμείτε να το δημοσιεύσετε υπό μια διαφορετική άδεια χρήσης, μπορείτε να χρησιμοποιήσετε τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγό Ανεβάσματος των Wikimedia Commons].",
        "foreign-structured-upload-form-label-not-own-work-local-shared": "Επίσης, μπορεί να θέλετε να δοκιμάσετε να χρησιμοποιήσετε  το [[Special:Upload|τη σελίδα ανεβάσματος για το {{SITENAME}}]], αν αυτό το αρχείο μπορεί να φορτωθεί σύμφωνα με  τις πολιτικές τους.",
        "foreign-structured-upload-form-2-label-intro": "Σας ευχαριστούμε για τη δωρεά μιας εικόνας που θα χρησιμοποιηθεί στο {{SITENAME}}. Θα πρέπει να συνεχίσετε  μόνο εφόσον πληροί μια σειρά  προϋποθέσεων:",
        "foreign-structured-upload-form-2-label-ownwork": "Πρέπει να είναι εξ ολοκλήρου <strong>δική σας δημιουργία</strong>, όχι απλά παρμένο από το Internet",
-       "foreign-structured-upload-form-2-label-noderiv": "Î\94εν Ï\80Ï\81έÏ\80ει Î½Î±  Ï\80εÏ\81ιέÏ\87οÏ\85ν <strong>κανένα Î­Ï\81γο Î±Ï\80Ï\8c Î¿Ï\80οιονδήÏ\80οÏ\84ε Î¬Î»Î»Î¿Î½</strong>, Î® ÎµÎ¼Ï\80νέονÏ\84αι Î±Ï\80' Î±Ï\85Ï\84οÏ\8dÏ\82",
+       "foreign-structured-upload-form-2-label-noderiv": "Î\94εν Ï\80Ï\81έÏ\80ει Î½Î±  Ï\80εÏ\81ιέÏ\87ει <strong>κανένα Î­Ï\81γο Î±Ï\80Ï\8c Î¿Ï\80οιονδήÏ\80οÏ\84ε Î¬Î»Î»Î¿Î½</strong>, Î® Î¼Îµ Î­Î¼Ï\80νεÏ\85Ï\83η Î±Ï\80Ï\8c Î±Î»Î»Î¿Ï\8d",
        "foreign-structured-upload-form-2-label-useful": "Θα πρέπει να είναι <strong>εκπαιδευτικό και χρήσιμο</strong> για διδασκαλία άλλων",
        "foreign-structured-upload-form-2-label-ccbysa": "Πρέπει να είναι <strong>ΕΝΤΑΞΕΙ για δημοσίευση για πάντα</strong> στο Διαδίκτυο υπό τους όρους της [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Attribution-ShareAlike 4.0] άδειας",
-       "foreign-structured-upload-form-2-label-alternative": "Εάν όλα τα παραπάνω δεν είναι αλήθεια, μπορείτε ακόμα να είστε σε θέση να ανεβάσετε αυτό το αρχείο χρησιμοποιώντας τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγό Ανεβάσματος] στα Κοινά, αρκεί να είναι διαθέσιμο υπό μια ελεύθερη άδεια χρήσης.",
-       "foreign-structured-upload-form-2-label-termsofuse": "Î\9cε Ï\84ο Î±Î½Î­Î²Î±Ï\83μα Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85, ÎµÏ\80ιβεβαιÏ\8eνεÏ\84ε Ï\8cÏ\84ι Î­Ï\87εÏ\84ε Ï\84α Ï\80νεÏ\85μαÏ\84ικά Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Î³Î¹Î± Î±Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο, ÎºÎ±Î¹ Ï\83Ï\85μÏ\86Ï\89νείÏ\84ε Î±Î¼ÎµÏ\84άκληÏ\84α Î³Î¹Î± Ï\84ην Î±Ï\80ελεÏ\85θέÏ\81Ï\89Ï\83η Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 Ï\83Ï\84α Î\9aοινά Ï\84οÏ\85  Wikimedia υπό την άδεια Creative Commons Attribution-ShareAlike 4.0, και συμφωνείτε με τους [https://wikimediafoundation.org/wiki/Terms_of_Use Όρους Χρήσης].",
+       "foreign-structured-upload-form-2-label-alternative": "Εάν όλα τα παραπάνω δεν είναι αλήθεια, μπορείτε ακόμα να είστε σε θέση να ανεβάσετε αυτό το αρχείο χρησιμοποιώντας τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγό Ανεβάσματος] στα Wikimedia Commons, αρκεί να είναι διαθέσιμο υπό μια ελεύθερη άδεια χρήσης.",
+       "foreign-structured-upload-form-2-label-termsofuse": "Î\9cε Ï\84ο Î±Î½Î­Î²Î±Ï\83μα Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85, ÎµÏ\80ιβεβαιÏ\8eνεÏ\84ε Ï\8cÏ\84ι Î­Ï\87εÏ\84ε Ï\84α Ï\80νεÏ\85μαÏ\84ικά Î´Î¹ÎºÎ±Î¹Ï\8eμαÏ\84α Î³Î¹Î± Î±Ï\85Ï\84Ï\8c Ï\84ο Î±Ï\81Ï\87είο, ÎºÎ±Î¹ Ï\83Ï\85μÏ\86Ï\89νείÏ\84ε Î±Î¼ÎµÏ\84άκληÏ\84α Î³Î¹Î± Ï\84ην Î´Î·Î¼Î¿Ï\83ίεÏ\85Ï\83η Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î±Ï\81Ï\87είοÏ\85 Ï\83Ï\84α Wikimedia Commons υπό την άδεια Creative Commons Attribution-ShareAlike 4.0, και συμφωνείτε με τους [https://wikimediafoundation.org/wiki/Terms_of_Use Όρους Χρήσης].",
        "foreign-structured-upload-form-3-label-question-website": "Μήπως κατεβάσατε αυτή την εικόνα από μια ιστοσελίδα, ή την πήραμε μετά από αναζήτηση εικόνων;",
        "foreign-structured-upload-form-3-label-question-ownwork": "Δημιουργήσατε αυτή την εικόνα (τραβήξατε φωτογραφία, κάνατε ένα σκίτσο κ.τ.λ.) μόνος σας;",
        "foreign-structured-upload-form-3-label-question-noderiv": "Περιέχει, ή είναι εμπνευσμένο από έργο που ανήκει σε κάποιον άλλο, όπως ένα λογότυπο;",
        "foreign-structured-upload-form-3-label-yes": "Ναι",
        "foreign-structured-upload-form-3-label-no": "Όχι",
-       "foreign-structured-upload-form-3-label-alternative": "Δυστυχώς, σε αυτή την περίπτωση, αυτό το εργαλείο δεν υποστηρίζει το ανέβασμα αυτού του αρχείου. Μπορείτε ακόμα να είστε  σε θέση να το ανεβάσετε χρησιμοποιώντας τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγός Ανεβάσματος] στα Κοινά, αρκεί να είναι διαθέσιμο υπό μια ελεύθερη άδεια χρήσης.",
+       "foreign-structured-upload-form-3-label-alternative": "Δυστυχώς, σε αυτή την περίπτωση, αυτό το εργαλείο δεν υποστηρίζει το ανέβασμα αυτού του αρχείου. Μπορείτε ακόμα να είστε  σε θέση να το ανεβάσετε χρησιμοποιώντας τον [https://commons.wikimedia.org/wiki/Special:UploadWizard Οδηγός Ανεβάσματος] στα Wikimedia Commons, αρκεί να είναι διαθέσιμο υπό μια ελεύθερη άδεια χρήσης.",
        "foreign-structured-upload-form-4-label-good": "Χρησιμοποιώντας αυτό το εργαλείο, μπορείτε να ανεβάσετε εκπαιδευτικά διαγράμματα που έχετε δημιουργήσει και φωτογραφίες, που δεν περιέχουν έργο που ανήκει σε κάποιον άλλο.",
        "foreign-structured-upload-form-4-label-bad": "Δεν μπορείτε να ανεβάσετε εικόνες που βρέθηκαν σε μια μηχανή αναζήτησης ή που έχετε κατεβάσει από άλλες ιστοσελίδες.",
        "backend-fail-stream": "Αδύνατη η μετάδοση του αρχείου $1.",
index 688e9b8..0b31abc 100644 (file)
        "upload-form-label-select-file": "Select file",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Name",
+       "upload-form-label-infoform-name-tooltip": "A unique descriptive title for the file, which will serve as a filename. You may use plain language with spaces. Do not include the file extension.",
        "upload-form-label-infoform-description": "Description",
+       "upload-form-label-infoform-description-tooltip": "Briefly describe everything notable about the work.\nFor a photo, mention the main things that are depicted, the occasion, or the place.",
        "upload-form-label-usage-title": "Usage",
        "upload-form-label-usage-filename": "File name",
        "foreign-structured-upload-form-label-own-work": "This is my own work",
        "export-download": "Save as file",
        "export-templates": "Include templates",
        "export-pagelinks": "Include linked pages to a depth of:",
+       "export-manual": "Add pages manually:",
        "allmessages": "System messages",
        "allmessagesname": "Name",
        "allmessagesdefault": "Default message text",
        "expand_templates_preview": "Preview",
        "expand_templates_preview_fail_html": "<em>Because {{SITENAME}} has raw HTML enabled and there was a loss of session data, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please try again.</strong>\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in.",
        "expand_templates_preview_fail_html_anon": "<em>Because {{SITENAME}} has raw HTML enabled and you are not logged in, the preview is hidden as a precaution against JavaScript attacks.</em>\n\n<strong>If this is a legitimate preview attempt, please [[Special:UserLogin|log in]] and try again.</strong>",
+       "expand_templates_input_missing": "You need to provide at least some input text.",
        "pagelanguage": "Page language selector",
        "pagelang-name": "Page",
        "pagelang-language": "Language",
index cbb8b76..6ee50d8 100644 (file)
        "passwordreset-emailtext-ip": "Alguien (probablemente tú, desde la dirección IP $1) ha solicitado el restablecimiento de tu contraseña en {{SITENAME}} ($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}}\na esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailtext-user": "El usuario $1 de {{SITENAME}} solicitó el restablecimiento de tu contraseña en {{SITENAME}}\n($4). {{PLURAL:$3|La siguiente cuenta está asociada|Las siguientes cuentas están asociadas}} a esta dirección de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Esta contraseña temporal|Estas contraseñas temporales}} caducarán en {{PLURAL:$5|un día|$5 días}}.\nAhora puedes iniciar sesión y establecer una nueva contraseña. Si fue otra persona la que realizó esta solicitud, o si ya recuerdas tu contraseña original y, por tanto, no deseas cambiarla, puedes ignorar este mensaje y continuar usando tu contraseña anterior.",
        "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: \n$1\n\nContraseña temporal: \n$2",
-       "passwordreset-emailsentemail": "Si esta es una dirección de correo electrónico registrada para tu cuenta, entonces se enviará un correo electrónico para el restablecimiento de tu contraseña.",
-       "passwordreset-emailsentusername": "Si existe una dirección de correo electrónico asociada a este nombre de usuario, entonces el correo para restablecer la contraseña será enviado.",
+       "passwordreset-emailsentemail": "Si esta dirección de correo electrónico está asociada a tu cuenta, entonces se enviará un correo electrónico para restablecer la contraseña.",
+       "passwordreset-emailsentusername": "Si existe una dirección de correo electrónico asociada a este nombre de usuario, entonces se enviará un correo para restablecer la contraseña.",
        "passwordreset-emailsent-capture": "Se ha enviado un correo para el restablecimiento de la contraseña, el cual se muestra a continuación.",
        "passwordreset-emailerror-capture": "Se ha generado un correo electrónico de restablecimiento de contraseña, que se muestra a continuación, pero ha fallado el envío {{GENDER:$2|al usuario|a la usuaria}}: $1",
        "changeemail": "Cambiar o eliminar la dirección de correo electrónico",
        "wlshowhideanons": "usuarios anónimos",
        "wlshowhidepatr": "ediciones verificadas",
        "wlshowhidemine": "mis ediciones",
+       "wlshowhidecategorization": "categorización de página",
        "watchlist-options": "Opciones de la lista de seguimiento",
        "watching": "Vigilando...",
        "unwatching": "Eliminando de la lista de seguimiento...",
        "ipbreason-dropdown": "*Motivos comunes de bloqueo\n** Añadir información falsa\n** Eliminar contenido de las páginas\n** Publicitar enlaces a otras páginas web\n** Añadir basura a las páginas\n** Comportamiento intimidatorio u hostil\n** Abuso de múltiples cuentas\n** Nombre de usuario inaceptable",
        "ipb-hardblock": "Impedir que los usuarios identificados editen desde esta dirección IP",
        "ipbcreateaccount": "Prevenir la creación de cuentas de usuario",
-       "ipbemailban": "Prevenir que el usuario envíe correo electrónico",
+       "ipbemailban": "Impedir que el usuario envíe correo electrónico",
        "ipbenableautoblock": "Bloquear automáticamente la última dirección IP usada por este usuario y cualquier IP posterior desde la cual intente editar",
        "ipbsubmit": "Bloquear a este usuario",
        "ipbother": "Especificar caducidad",
        "mediastatistics-summary": "Estadísticas sobre los tipos de archivos cargados. Sólo se incluyen las versiones más recientes. Los archivos antiguos o eliminados están excluidos.",
        "mediastatistics-nfiles": "$1 ($2 %)",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 ''byte''|$1 ''bytes''}} ($2; $3 %)",
+       "mediastatistics-bytespertype": "Tamaño de archivo total para esta sección: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
+       "mediastatistics-allbytes": "Tamaño de archivo total para todos los archivos: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
        "mediastatistics-table-mimetype": "Tipo MIME",
        "mediastatistics-table-extensions": "Extensiones posibles",
        "mediastatistics-table-count": "Número de archivos",
index 52a6d6c..f713c6d 100644 (file)
@@ -10,7 +10,8 @@
                        "Babanwalia",
                        "Henares",
                        "MarcoAurelio",
-                       "Macofe"
+                       "Macofe",
+                       "Fitoschido"
                ]
        },
        "tog-underline": "Surrayal atihus:",
        "wlheader-showupdated": "Las páhinas que s'án emburacau dendi la úrtima vezi que las visoreasti son muestrás en '''negrina'''",
        "wlnote": "Embahu {{PLURAL:$1|es el úrtimu chambu|son los úrtimus '''$1''' chambus}} enas úrtimas {{PLURAL:$2|oras|'''$2''' oras}}.",
        "wlshowlast": "Muestral úrtimus $1 oras $2 dias",
+       "watchlistall2": "tó",
        "watchlist-options": "Ocionis de la mi lista e seguimientu",
        "watching": "Vehilandu...",
        "unwatching": "Abaldonandu la vehiláncia en...",
        "modifiedarticleprotection": "chambau el nivel de proteción a \"[[$1]]\"",
        "unprotectedarticle": "\"[[$1]]\" esprotehiu",
        "protect-title": "Estableciendu nivel de proteción pa \"$1\"",
-       "prot_1movedto2": "[[$1]] s´á moviu a [[$2]]",
+       "prot_1movedto2": "[[$1]] sá moviu a [[$2]]",
        "protect-legend": "Confirmal proteción",
        "protectcomment": "Razón:",
        "protectexpiry": "Acabiha:",
        "newtitle": "Nuevu entítulu:",
        "move-watch": "Vehilal esta páhina",
        "movepagebtn": "Movel páhina",
-       "pagemovedsub": "S´á moviu la páhina",
+       "pagemovedsub": "Sá moviu la páhina",
        "movepage-moved": "S'á muau '''\"$1\" a \"$2\"'''",
        "movepage-moved-redirect": "Á siu criá una redireción.",
        "articleexists": "Ya desisti una páhina con esi nombri u nu se premiti el nombri qu´as lihiu.\nPol favol, escrebi otru entítulu.",
        "movelogpagetext": "Embahu ai una lista colas páhinas movias.",
        "movereason": "Razón:",
        "revertmove": "revertil",
-       "delete_and_move": "Esborral i movel",
        "delete_and_move_text": "==Es mestel esborral==\n\nYa desisti la páhina \"[[:$1]]\". Te petaria esborrala pa premitil el treslau?",
        "delete_and_move_confirm": "Sí, esborral la páhina",
        "delete_and_move_reason": "Esborrá pa premitil el treslau",
index 3a5c6d8..be375b0 100644 (file)
        "undelete_short": "احیای {{PLURAL:$1|یک ویرایش|$1 ویرایش}}",
        "viewdeleted_short": "نمایش {{PLURAL:$1|یک ویرایش حذف‌شده|$1 ویرایش حذف‌شده}}",
        "protect": "محافظت",
-       "protect_change": "تغییر",
+       "protect_change": "گؤەڕانن/تغییر",
        "protectthispage": "محافظت از این صفحه",
-       "unprotect": "تغییر محافظت",
+       "unprotect": "گؤەڕانن/تغییر محافظت",
        "unprotectthispage": "تغییر محافظت این صفحه",
        "newpage": "صفحهٔ تازه",
        "talkpage": "بحث دربارهٔ این صفحه",
        "php-mail-error-unknown": "خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی",
        "user-mail-no-addy": "تلاش برای ارسال ایمیل بدون آدرس ایمیل.",
        "user-mail-no-body": "سعی کردید نامه‌ای الکترونیکی با محتوایی بسیار کوتاه و یا خالی بفرستید.",
-       "changepassword": "تغییر گذرواژه",
+       "changepassword": "گؤەڕانن/تغییر رمز",
        "resetpass_announce": "شما باید برای پایان ورود به سامانه، گذرواژهٔ جدیدی را تنظیم کنید.",
        "resetpass_text": "<!-- اینجا متن اضافه کنید -->",
        "resetpass_header": "تغییر گذرواژهٔ حساب کاربری",
        "revdelete-hide-comment": "خلاصهٔ ویرایش",
        "revdelete-hide-user": "نام کاربری/نشانی آی‌پی",
        "revdelete-hide-restricted": "فرونشانی اطلاعات برای مدیران به همراه دیگران",
-       "revdelete-radio-same": "(بدون تغییر)",
+       "revdelete-radio-same": "(بدون گؤەڕانن/تغییر)",
        "revdelete-radio-set": "پنهان",
        "revdelete-radio-unset": "نمایان",
        "revdelete-suppress": "از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.",
        "revdelete-failure": "'''پیدایی نسخه‌ها قابل به روز کردن نیست:'''\n$1",
        "logdelete-success": "تغییر پیدایی مورد با موفقیت انجام شد.",
        "logdelete-failure": "'''پیدایی سیاهه‌ها قابل تنظیم نیست:'''\n$1",
-       "revdel-restore": "تغییر پیدایی",
+       "revdel-restore": "گؤەڕانن/تغییر پیدایی",
        "pagehist": "تاریخچهٔ صفحه",
        "deletedhist": "تاریخچهٔ حذف‌شده",
        "revdelete-hide-current": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه، نسخهٔ اخیر است و قابل پنهان کردن نیست.",
        "upload-form-label-select-file": "یک فایل انتخاب کنید",
        "upload-form-label-infoform-title": "جزئیات",
        "upload-form-label-infoform-name": "نام",
+       "upload-form-label-infoform-name-tooltip": "یک عنوان توضیحی برای پرونده که به عنوان نام پرونده استفاده می‌شود. ممکن است از زبان ساده همرا با فاصله استفاده شود. شامل پسوند پرونده نباشد.",
        "upload-form-label-infoform-description": "توضیحات",
+       "upload-form-label-infoform-description-tooltip": "به صورت خلاصه هرچیز سرشناسی که در مورد اثر باشد را توضیح دهید.\nبرای تصویر موارد اصلی مانند محل وقوع یا موقعیت را شرح دهید.",
        "upload-form-label-usage-title": "کاربرد",
        "upload-form-label-usage-filename": "نام پرونده",
        "foreign-structured-upload-form-label-own-work": "این کار خودم است",
        "wlshowhideanons": "کاربران ناشناس",
        "wlshowhidepatr": "ویرایش‌های گشت‌خورده",
        "wlshowhidemine": "ویرایش‌های من",
+       "wlshowhidecategorization": "دسته‌بندی صفحه",
        "watchlist-options": "گزینه‌های پی‌گیری",
        "watching": "پی‌گیری...",
        "unwatching": "توقف پی‌گیری...",
        "export-download": "ذخیره به صورت پرونده",
        "export-templates": "شامل شدن الگوها",
        "export-pagelinks": "شامل شدن صفحه‌های پیوند شده تا این عمق:",
+       "export-manual": "افزودن صفحات به صورت دستی:",
        "allmessages": "پیغام‌های سامانه",
        "allmessagesname": "نام",
        "allmessagesdefault": "متن پیش‌فرض پیغام",
        "allmessagesnotsupportedDB": "این صفحه نمی‌تواند استفاده شود به این دلیل که <bdi>'''$wgUseDatabaseMessages'''</bdi> غیرفعال شده‌است.",
        "allmessages-filter-legend": "پالایه",
        "allmessages-filter": "پالودن بر اساس وضعیت شخصی‌سازی:",
-       "allmessages-filter-unmodified": "تغییر نیافته",
+       "allmessages-filter-unmodified": "نەگؤەڕیائە/تغییرنیافتە",
        "allmessages-filter-all": "همه",
        "allmessages-filter-modified": "تغییر یافته",
        "allmessages-prefix": "پالودن بر اساس پسوند:",
        "expand_templates_preview": "پیش‌نمایش",
        "expand_templates_preview_fail_html": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
        "expand_templates_preview_fail_html_anon": "<em>زیرا {{SITENAME}} تا به HTML خام فعال و یک دست رفتن اطلاعات نشست وجود دارد، پیش نمایش به عنوان یک اقدام احتیاطی در برابر حملات جاوا اسکریپت پنهان است.</em>\n\n<strong>اگر این تلاش پیشنمایش مشروع است، لطفا دوباره سعی کنید. اگر هنوز کار نمی کند، سعی کنید [[Special:UserLogout|خروج از سیستم]] را کلیک نموده و دوباره وارد شوید.",
+       "expand_templates_input_missing": "شما نیازمندید که حداقل متن‌هایی را برای وارد کردن تهیه کنید.",
        "pagelanguage": "صفحه انتخاب زبان",
        "pagelang-name": "صفحه",
        "pagelang-language": "زبان",
        "pagelang-use-default": "استفاده از زبان پیش‌فرض",
        "pagelang-select-lang": "انتخاب زبان",
+       "pagelang-submit": "اعمال",
        "right-pagelang": "تغییر صفحهٔ زبان",
        "action-pagelang": "تغییر زبان صفحه",
        "log-name-pagelang": "تغییر سیاههٔ زبان",
        "mediastatistics": "آمار رسانه‌ها",
        "mediastatistics-summary": "آمارها دربارهٔ نوع‌های پرونده‌ای به روزشده. این فقط شامل آخرین نسخهٔ پرونده است. نسخه‌های قدیمی یا حذف‌شده مسثنی هستند.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 بایت}} ($2؛ $3٪)",
+       "mediastatistics-bytespertype": "حجم کل پرونده این بخش: {{PLURAL:$1|$1 بایت|$1 بایت}} ($2; $3%)",
+       "mediastatistics-allbytes": "حجم کل همه پرونده برای همهٔ پرونده‌ها: {{PLURAL:$1|$1 بایت|$1 بایت}} ($2)",
        "mediastatistics-table-mimetype": "نوع مایم",
        "mediastatistics-table-extensions": "افزونه‌های محتمل",
        "mediastatistics-table-count": "تعداد پرونده‌ها",
        "mediastatistics-header-text": "متنی",
        "mediastatistics-header-executable": "اجرایی",
        "mediastatistics-header-archive": "قالب‌های فشرده",
+       "mediastatistics-header-total": "همه پرونده‌ها",
        "json-warn-trailing-comma": "$1 کامای در انتها از جی‌سن {{PLURAL:$1|حذف شد}}.",
        "json-error-unknown": "مشکلی با جی‌سن بود. خطا: $1",
        "json-error-depth": "بیشینهٔ عمق پشته رد شده است",
index 9232f26..bec4b88 100644 (file)
        "upload-form-label-select-file": "Sélectionner un fichier",
        "upload-form-label-infoform-title": "Détails",
        "upload-form-label-infoform-name": "Nom",
+       "upload-form-label-infoform-name-tooltip": "Un titre descriptif unique pour le fichier, qui servira comme nom de fichier. Vous pouvez utiliser du langage courant avec des espaces. Ne pas inclure l’extension du fichier.",
        "upload-form-label-infoform-description": "Description",
+       "upload-form-label-infoform-description-tooltip": "Décrire brièvement tout ce qu’il y a de particulier concernant cette œuvre.\nPour une photo, mentionner les choses principales qui sont vues, l’occasion, ou l’endroit.",
        "upload-form-label-usage-title": "Utilisation",
        "upload-form-label-usage-filename": "Nom du fichier",
        "foreign-structured-upload-form-label-own-work": "Je suis l’auteur de cette œuvre",
        "export-download": "Enregistrer dans un fichier",
        "export-templates": "Inclure les modèles",
        "export-pagelinks": "Inclure les pages liées à une profondeur de :",
+       "export-manual": "Ajouter des pages manuellement :",
        "allmessages": "Messages système",
        "allmessagesname": "Nom du message",
        "allmessagesdefault": "Message par défaut",
        "tags-apply-not-allowed-one": "La balise « $1 » n’est pas autorisée à être appliquée manuellement.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|La balise suivante n’est pas autorisée à être appliquée|Les balises suivantes ne sont pas autorisées à être appliquées}} manuellement : $1",
        "tags-update-no-permission": "Vous n’avez pas le droit d’ajouter ou de supprimer des balises de modification des révisions individuelles ou des entrées de journal.",
-       "tags-update-blocked": "Vous ne pouvez pas ajouter ou supprimer des balises lorsque vous êtes bloqué{{GENDER:||e}}.",
+       "tags-update-blocked": "Vous ne pouvez pas ajouter ou supprimer des balises de modifications lorsque vous êtes bloqué{{GENDER:||e}}.",
        "tags-update-add-not-allowed-one": "La balise « $1 » ne peut pas être ajoutée manuellement.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|La balise suivante ne peut pas être ajoutée|Les balises suivantes ne peuvent pas être ajoutées}} manuellement : $1",
        "tags-update-remove-not-allowed-one": "La balise « $1 » ne peut pas être enlevée.",
        "expand_templates_preview": "Aperçu du rendu",
        "expand_templates_preview_fail_html": "<em>Comme {{SITENAME}} a HTML brut activé et qu’il y a eu une perte de données de session, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez réessayer.</strong>\nSi cela ne fonctionne toujours pas, essayez de [[Special:UserLogout|vous déconnecter]] et vous reconnecter.",
        "expand_templates_preview_fail_html_anon": "<em>Comme {{SITENAME}} a HTML brut activé et que vous n’êtes pas connecté, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez [[Special:UserLogin|vous connecter]] et réessayer.</strong>",
+       "expand_templates_input_missing": "Vous devez fournir au moins un texte d’entrée.",
        "pagelanguage": "Sélecteur de langue de la page",
        "pagelang-name": "Page",
        "pagelang-language": "Langue",
        "mediastatistics": "Statistiques sur les médias",
        "mediastatistics-summary": "Statistiques sur les types de fichier téléchargés. Elles ne prennent en compte que la version la plus récente d’un fichier. Les versions anciennes ou supprimées des fichiers sont exclues.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%)",
-       "mediastatistics-bytespertype": "Taille totale de fichiers pour cette section : $1 octets.",
-       "mediastatistics-allbytes": "Taille totale pour tous les fichiers : $1 octets.",
+       "mediastatistics-bytespertype": "Taille totale de fichiers pour cette section : {{PLURAL:$1|$1 octet|$1 octets}} ($2 ; $3%).",
+       "mediastatistics-allbytes": "Taille totale pour tous les fichiers : {{PLURAL:$1|$1 octet|$1 octets}} ($2).",
        "mediastatistics-table-mimetype": "Type MIME",
        "mediastatistics-table-extensions": "Extensions possibles",
        "mediastatistics-table-count": "Nombre de fichiers",
index 81c2460..93fd3a7 100644 (file)
        "passwordreset-emailtext-ip": "Alguén (probablemente vostede, desde o enderezo IP $1) solicitou o restablecemento do seu\ncontrasinal de {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
        "passwordreset-emailtext-user": "O usuario $1 solicitou o restablecemento do contrasinal de {{SITENAME}}\n($4). {{PLURAL:$3|A seguinte conta de usuario está asociada|As seguintes contas de usuarios están asociadas}}\na este enderezo de correo electrónico:\n\n$2\n\n{{PLURAL:$3|Este contrasinal temporal caducará|Estes contrasinais temporais caducarán}} {{PLURAL:$5|nun día|en $5 días}}.\nDebería acceder ao sistema e elixir un novo contrasinal agora. Se outra persoa fixo esta\nsolicitude ou se lembrou o seu contrasinal orixinal e xa non o quere cambiar,\nignore esta mensaxe e continúe empregando o seu contrasinal vello.",
        "passwordreset-emailelement": "Nome de usuario: \n$1\n\nContrasinal temporal: \n$2",
-       "passwordreset-emailsentemail": "Se esta é unha dirección de correo electrónico rexistrada para a súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
-       "passwordreset-emailsentusername": "Se hai unha dirección de correo electrónico rexistrada para esta conta, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
+       "passwordreset-emailsentemail": "Se esta é unha dirección de correo electrónico asociada á súa conta, entón enviarase un correo electrónico para o restablecemento do seu contrasinal.",
+       "passwordreset-emailsentusername": "Se hai unha dirección de correo electrónico asociada con este nome de usuario, entón enviarase un correo electrónico para o restablecemento do contrasinal.",
        "passwordreset-emailsent-capture": "Enviouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación.",
        "passwordreset-emailerror-capture": "Xerouse un correo electrónico de restablecemento do contrasinal, mostrado a continuación, pero o envío {{GENDER:$2|ao usuario|á usuaria}} fallou: $1",
        "changeemail": "Cambiar ou eliminar o enderezo de correo electrónico",
        "mediastatistics": "Estatísticas do contido multimedia",
        "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiros enviados. Isto inclúe unicamente a última versión de cada ficheiro. As versións vellas ou borradas dos ficheiros quedan excluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
-       "mediastatistics-bytespertype": "Tamaño total de ficheiro para esta sección: $1 bytes.",
-       "mediastatistics-allbytes": "Tamaño total de ficheiro para todos os ficheiros: $1 bytes.",
+       "mediastatistics-bytespertype": "Tamaño total de ficheiro para esta sección: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
+       "mediastatistics-allbytes": "Tamaño total de ficheiro para todos os ficheiros: {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
        "mediastatistics-table-mimetype": "Tipo MIME",
        "mediastatistics-table-extensions": "Extensións posibles",
        "mediastatistics-table-count": "Número de ficheiros",
index e57a866..e490b21 100644 (file)
        "upload-form-label-select-file": "בחירת קובץ",
        "upload-form-label-infoform-title": "פרטים",
        "upload-form-label-infoform-name": "שם",
+       "upload-form-label-infoform-name-tooltip": "כותרת המהווה תיאור ייחודי לקובץ, שתשמש כשם הקובץ. ניתן להשתמש בשפה טבעית עם רווחים. אין לכלול סיומת קובץ.",
        "upload-form-label-infoform-description": "תיאור",
+       "upload-form-label-infoform-description-tooltip": "תיאור קצר של כל העובדות החשובות על הקובץ.\nאם הקובץ הוא תמונה, יש לציין את הדברים העיקריים המתוארים בתמונה, את האירוע, או את המיקום.",
        "upload-form-label-usage-title": "שימושים",
        "upload-form-label-usage-filename": "שם הקובץ",
        "foreign-structured-upload-form-label-own-work": "אני יצרתי את הקובץ",
        "export-download": "שמירה כקובץ",
        "export-templates": "לכלול תבניות",
        "export-pagelinks": "לכלול דפים מקושרים עד לעומק של:",
+       "export-manual": "הוספה ידנית של דפים:",
        "allmessages": "הודעות המערכת",
        "allmessagesname": "שם",
        "allmessagesdefault": "טקסט ברירת המחדל של ההודעה",
        "expand_templates_preview": "תצוגה מקדימה",
        "expand_templates_preview_fail_html": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ואירע אבדן מידע כניסה, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש לנסות שוב.</strong>\nאם זה עדיין לא עובד, יש לנסות [[Special:UserLogout|לצאת מהחשבון]] ולהיכנס שוב.",
        "expand_templates_preview_fail_html_anon": "<em>מכיוון שב{{GRAMMAR:תחילית|{{SITENAME}}}} מופעלת הצגת HTML גולמית ולא נכנסת לחשבון, התצוגה המקדימה מוסתרת, וזאת כאמצעי זהירות מפני התקפות JavaScript.</em>\n\n<strong>אם זה ניסיון תקין להציג תצוגה מקדימה, יש [[Special:UserLogin|להיכנס לחשבון]] ולנסות שוב.</strong>",
+       "expand_templates_input_missing": "יש לכתוב טקסט (לפחות טקסט קצר).",
        "pagelanguage": "בורר שפת הדף",
        "pagelang-name": "דף",
        "pagelang-language": "שפה",
index 319a29f..7362565 100644 (file)
@@ -23,6 +23,7 @@
        "tog-hideminor": "Chhota aur nawaa badlao ke lukao",
        "tog-hidepatrolled": "Pahraa dewa gais badlao ke nawaa badlao me se lukao",
        "tog-newpageshidepatrolled": "Pahraa dewa gais badlao ke nawaa panna me se lukao",
+       "tog-hidecategorization": "Panna ke categorization ke lukao",
        "tog-extendwatchlist": "Dhyaan suchi ke khol ke sab badlao ke dekhao, khaali nawaa waala nai",
        "tog-usenewrc": "Dher jan se badla gais panna, haali ke badlao aur dhyan suchi me",
        "tog-numberheadings": "Sab heading ke apne se number karo",
        "tog-watchlisthidebots": "Bot waala badlao ke hamaar dhyaan suchi se lukao",
        "tog-watchlisthideminor": "Mamuli badlao ke hamaar dhyaan suchi se lukao",
        "tog-watchlisthideliu": "Logged in sadasya ke badlao ke dhyan suchi se lukao",
+       "tog-watchlistreloadautomatically": "Jab fillter ke badla jaae hae tab dhyan suchi ke automatically upload karo",
        "tog-watchlisthideanons": "Bina naam ke sadasya ke badlao ke dhyan suchi se lukao",
        "tog-watchlisthidepatrolled": "Pahraa dewa gais badlao ke dhyan suchi me se lukao",
+       "tog-watchlisthidecategorization": "Panna ke categorization ke lukao.",
        "tog-ccmeonemails": "Jon e-mail ham duusra sadasya ke lage bhejtaa hai uske copy hamaar lage bhi bhejo",
        "tog-diffonly": "Diff ke niche panna ke content ke nai dekhao",
        "tog-showhiddencats": "Lukawal waala vibhag ke dekhao",
        "morenotlisted": "Ii suchi puura nai hae",
        "mypage": "Panna",
        "mytalk": "Baat",
-       "anontalk": "Ii IP khatir bichar",
+       "anontalk": "Baat",
        "navigation": "Navigation",
        "and": "&#32;aur",
        "qbfind": "Khojo",
        "disclaimers": "Jimmewari se chhutkaari",
        "disclaimerpage": "Project:Saadharan jimmewari nai lo",
        "edithelp": "Badlao pe madat",
+       "helppage-top-gethelp": "Madat",
        "mainpage": "Pahila Panna",
        "mainpage-description": "Pahila Panna",
        "policy-url": "Project:Niti",
        "nstab-template": "Template",
        "nstab-help": "Madat waala panna",
        "nstab-category": "Vibhag",
+       "mainpage-nstab": "Pahila panna",
        "nosuchaction": "Koi aisan kaam nai hai",
        "nosuchactiontext": "Jon kaam ke URL kare ke batais hai uske ii wiki nai pahachane hai\nSaait aap URL ke thiik se type nai karaa hai, nai to galat jorr ke follow karaa hai.\nIi saait ii kaaran se bhi hoe ki  jon software {{SITENAME}} use kare hai, me bug hai",
        "nosuchspecialpage": "Aisan koi khaas panna nai hai",
        "databaseerror-query": "Khoj:$1",
        "databaseerror-function": "Kaam: $1",
        "databaseerror-error": "Galti: $1",
+       "transaction-duration-limit-exceeded": "High replication lag se bache ke khatir, ii transaction ke abort kar dewa gais hae kaheki write duration ($1) exceeded the $2 {{PLURAL:$2|second|seconds}} limit.\nIf you are changing many items at once, try doing multiple smaller operations instead.",
        "laggedslavemode": "Chetawni: Panna me nawaa badlao sait nai hoi.",
        "readonly": "Database band hai",
        "enterlockreason": "Band kare ke kaaran likho, aur ii bhi likho ki kab khola jaai.",
-       "readonlytext": "Database abhi nawaa badlao khatir band hai, saait database me mamuli kaam khatir lekin iske baad fir pahile jaise chale lagi.\n\nJon administrator database ke band karis rahaa, ii kaaran diis hai: $1",
+       "readonlytext": "Database abhi nawaa badlao khatir band hai, saait database me mamuli kaam khatir, lekin iske baad fir pahile jaise chale lagi.\n\nJon administrator database ke band karis rahaa, ii kaaran diis hai: $1",
        "missing-article": "Database, panna me likha akchhar, jiske naam \"$1\" hai, ke nai pais $2 .\n\nIske kaaran ii hoe sake ki aap ek purana antar nai to itihaas waala jorr ke use karaa jiske mitae dewa gais hai.\n\nAgar ii chij nai hai to sait aap ke software me bug hoi.\nIske, URL ke likh ke, koi administrator ke report karo.",
        "missingarticle-rev": "(badlao#: $1)",
        "missingarticle-diff": "(Antar: $1, $2)",
        "readonly_lag": "Database apne se band hoi gais hai jab tak ki duusra database, khaas database ke sanghe kaam nai kare lage.",
+       "nonwrite-api-promise-error": "The 'Promise-Non-Write-API-Action' HTTP header was sent but the request was to an API write module.",
        "internalerror": "Bhitri galti",
        "internalerror_info": "Bhitri galti: $1",
        "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "no-null-revision": "Panna \"$1\" ke khatir nawaa null badlao nai banae sakaa hae",
        "badtitle": "Kharaab title",
        "badtitletext": "Jon panna aap mangta hai uske page title invalid, galat, nai to an incorrectly linked inter-language or inter-wiki title. Isme sait ek yah jaada character hoi jon ki title me nai kaam me lawa jae sake hai.",
+       "title-invalid-empty": "Maanga gais panna khaali hae, nai to, isme khaali namespace ke naam hae.",
+       "title-invalid-utf8": "Maanga gias panna me invalid UTF-8 sequence hae.",
+       "title-invalid-interwiki": "Maanga gais panna ke title me ek interwiki link hai, jiske title me nai kaam me lawa jaae sake hai.",
+       "title-invalid-talk-namespace": "Maaga gais panna ke title uu baat waala panna ke refer kare hae jon ki nai hai.",
+       "title-invalid-characters": "Maanga gais panna ke title me invalid character hai:\"$1\".",
+       "title-invalid-relative": "Title me relative path hai. Relative panna ke title (./,../) valid nai hai, kaaheki ii sab panna sadasya ke browser se nai pahuncha jaae sake hai.",
+       "title-invalid-magic-tilde": "Maanga gais panna ke title me invalid magic tilde sequence hai\n(<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Maanga gais panna bahut lamba hai. Ii UTF-8 encoding me  $1 {{PLURAL:$1|byte|bytes}} se lamba nai rahe sake hai.",
+       "title-invalid-leading-colon": "Maanga gais panna ke title ke suruu me invalid colon hai.",
        "perfcached": "Niche likha data ke cache karaa gais hai aur sait purana hoi. Jaada se jaada {{PLURAL:$1|ek result |$1 results}} cache me hae.",
        "perfcachedts": "Niche likha data ke cache kar dewa gais rahaa, aur pichhle time $1 ke badlaa gais rahaa. Jaada se jaada {{PLURAL:$4|ek result |$4 results}} cache me hae.",
        "querypage-no-updates": "Ii panna me badlao abhi band hai. Data ke abhi nawaa nai karaa jaai.",
        "viewsource": "Source dekho",
        "viewsource-title": "\"$1\" ke source dekho",
        "actionthrottled": "Kaam ke band kar dewa gais hai",
-       "actionthrottledtext": "Spam ke virod me, aap ke ii kaam thora deri me bahut time kare ke rukawat hai, aur aap time limit ke exceed kar diya hai.\nKuch deri be baad fir se kosis karna.",
+       "actionthrottledtext": "Barbaadi ke virod me, aap ke ii kaam thora deri me bahut time kare ke rukawat hai, aur aap time limit ke exceed kar diya hai.\nKuch deri be baad fir se kosis karna.",
        "protectedpagetext": "Ii panna ke badlao ke rok dewa gais hae, jisse ki ispe koi badlao aur koi action nai kare sake.",
-       "viewsourcetext": "Aap ii panna ke source ke dekhe aur nakal utare kare sakta hai:",
-       "viewyourtext": "Aap '''aapan badlao''' ke source ke dekhe aur copy kare saktaa hae",
+       "viewsourcetext": "Aap ii panna ke source ke dekhe aur nakal utare sakta hai.",
+       "viewyourtext": "Aap <strong>aapan badlao</strong> ke source ke ii panna pe  dekhe aur copy kare saktaa hae",
        "protectedinterface": "Ii panna, ii wiki ke khatir, software ke interface text dewe hai, aur iske barbaadi se roke ke khatir band kar dewa gais hai.\nSab wiki me anuwaad ke jorre nai to badle ke khatir, meharbaani kar ke [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project ke kaam me laao.",
        "editinginterface": "'''Chetawani:''' Aap ek panna ke badaltaa hai jon ki software ke interface text dewe hae.\nIi panna me badlao ke asar duusra sadasya ke interface pe bhi hoi.",
        "translateinterface": "Sab wiki me translate kare ke khatir [//translatewiki.net/translatewiki.net], the MediaWiki localisation project, ke kaam me lao.",
-       "cascadeprotected": "Ii panna ke badlao se bachawa gais hai, kahe ki iske {{PLURAL:$1|panna, jon ki|panna, jon ki}} surakchhit hae \"cascading\" option turned on ke saathe me rakkhaa gais hai:\n$2",
+       "cascadeprotected": "Ii panna ke badlao se bachawa gais hai, kaheki iske {{PLURAL:$1|panna, jon ki|panna, jon ki}} surakchhit hae \"cascading\" option turned on ke saathe me rakkhaa gais hai:\n$2",
        "namespaceprotected": "Aap ke paas '''$1''' namespace me panna ke badle ke adhikar nai hai.",
        "customcssprotected": "Aap ke ii CSS panna ke badle ke ijaajat nai hae, kaahe ki isme duusra sadasya ke personal settings hae.",
        "customjsprotected": "Aap ke ii JavaScript panna ke badle ke ijaajat nai hae, kaahe ki isme duusra sadasya ke personal settings hae.",
        "mypreferencesprotected": "Aap ke aapan preferences ke badle ke ijaajat nai hae.",
        "ns-specialprotected": "Khaas panna ke badla nai jae sake hai.",
        "titleprotected": "Ii title ke banae se [[User:$1|$1]] rokis hai.\nIske kaaran hai ''$2''.",
-       "filereadonlyerror": "File \"$1\" ke nai badle sakaa hae, kaahe ki ii file repository \"$2\" me hae aur iske khaali parrha jaae sake hae.\nJon administrator iske lock karis hae, koi kaaran nai diis hae: \"$3\"",
+       "filereadonlyerror": "File \"$1\" ke nai badle sakaa hae, kaahe ki ii file repository \"$2\" me hae aur iske khaali parrha jaae sake hae.\nJon administrator iske lock karis hae, ii diis hae: \"$3\"",
        "invalidtitle-knownnamespace": "Namespace \"$2\" aur text \"$3\" ke kharaab title hae.",
        "invalidtitle-unknownnamespace": "Title gaer kaanuni hae aur iske namespace number \"$1\" aur text \"$2\" ke nai jaana jaawe hae",
        "exception-nologin": "Logged in nai hae",
        "createacct-reason": "Kaaran",
        "createacct-reason-ph": "Aap ke ii account ke banae ke kaaran",
        "createacct-submit": "Aapan account banao",
-       "createacct-another-submit": "Duusra account banao",
+       "createacct-another-submit": "Account banao",
        "createacct-benefit-heading": "Aap ke rakam log {{SITENAME}} ke banain hae.",
        "createacct-benefit-body1": "{{PLURAL:$1|badlao}}",
        "createacct-benefit-body2": "{{PLURAL:$1|panna}}",
        "createacct-benefit-body3": "haali ke {{PLURAL:$1|yogdaan de waala}}",
        "badretype": "Jon duuno password aap likha hai uu ek rakam nai hae.",
+       "usernameinprogress": "Ii sadasya ke account abhi banawa jaae hai.\nMeharbani kar ke sabur karo.",
        "userexists": "Ii sadasya ke naam aur koi ke hae.\nDuusra sadasya ke naam ke choose karo.",
        "loginerror": "Login me kuchh wrong hae",
        "createacct-error": "Account ke banae me galti",
        "wrongpassword": "Galat password likha gais hai. Fir se kosis karo.",
        "wrongpasswordempty": "Koi password nai likha gais hai. Fir se kosis karo.",
        "passwordtooshort": "Password me kamti se kamti {{PLURAL:$1|1 character|$1 characters}} hoe ke chahi.",
+       "passwordtoolong": "Password {{PLURAL:$1|1 character|$1 characters}} se lamba nai rahe sake hai.",
+       "passwordtoopopular": "Sadharan password ke nai kaam me lawa jaae sake hai. Meharbani kar ke aur tagrra password ke choose karo.",
        "password-name-match": "Aap ke password ke aap ke username se different rahe ke chaahi.",
        "password-login-forbidden": "Ii sadasya ke naam aur password ke kaam me laae ke ijaajat nai hae.",
        "mailmypassword": "Password ke badlo",
        "passwordreset-emailtext-ip": "Koi (hoe sake aap, IP address $1 se) {{SITENAME}} ($4) pe aap ke account ke baare me jaankari maanga hae. Niche likha gias sadasya ii e-mail se associated hae.  {{PLURAL:$3|account hae|accounts hae}}\n\n$2\n\n{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}}  {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.\nAap ke chaahi ki aap login kar ke ek nawaa password banao.  Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.",
        "passwordreset-emailtext-user": "\nSadasya $1 {{SITENAME}} pe aap ke account details ke {{SITENAME}} $4 ke khaatir  reminder maagis hae\n NIche ke sadasya {{PLURAL:$3|account hae|accounts hae}} ii e-mail address: $2 se associatied hae\n\n{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}}  {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.\nAap ke chaahi ki aap login kar ke ek nawaa password banao.  Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.",
        "passwordreset-emailelement": "Sadasya ke naam: \n$1\n\nKuchh din ke khatir password: \n$2",
-       "passwordreset-emailsent": "Aap ke password yaad karae ke khatir ek e-mail ke bhej dewa gais hae.",
+       "passwordreset-emailsentemail": "Agar ii email aap ke account se associated hai tab ek password reset email ke bheja jaai.",
+       "passwordreset-emailsentusername": "Agar ii email aap ke username se associated hai tab ek password reset email ke bheja jaai.",
        "passwordreset-emailsent-capture": "Ek password yaad karae waala e-mail, jiske niche dekhawa jaawe hae, ke bhej dewa gais hae.",
        "passwordreset-emailerror-capture": "Ek password yaad karae waala e-mail ke banawa gais hae, jiske niche dekhawa jaawe hae, lekin jiske {{GENDER:$2|user}} ke lage bheje nai jawa sake hae: $1",
-       "changeemail": "E-mail address ke badlo",
-       "changeemail-header": "Account e-mail address ke badlo",
+       "changeemail": "E-mail address ke badlo, nai to, hatao",
+       "changeemail-header": "Aapan email ke badle ke khatir ii form ke bharo. Agar aap koi email ke aapan account se nai associate kare mangtaa hai tab form ke submit kare ke time email address ke blank chhorr do.",
+       "changeemail-passwordrequired": "Ii badlao ke confirm kare ke khatir aap ke aapan password ke enter kare ke parri.",
        "changeemail-no-info": "Ii panna ke sidha dekhe ke khaatir, aap ke login kare ke parri.",
        "changeemail-oldemail": "Abhi ke E-mail address:",
        "changeemail-newemail": "Nawaa E-mail address:",
+       "changeemail-newemail-help": "Agar aap aapan email ke hatae mangtaa hai tab ii field ke blank chhorr do.\nAgar email hatae dewa gais hai tab aap bhulawa gais password ke nai reset kare sakegaa aur aap ke ii wiki se email nai mili.",
        "changeemail-none": "(kuchh nai)",
        "changeemail-password": "Aap ke {{SITENAME}} password:",
        "changeemail-submit": "E-mail badlo",
        "changeemail-throttled": "Aap bahut dher dafe login kare ke kosis karaa hae.\nMeharbaani kar ke $1 talak wait kar ke fir se try karo.",
+       "changeemail-nochange": "Meharbaani karke ek duusra email address ke likho.",
        "resettokens": "Token ke reset karo",
        "resettokens-text": "Aap aapan private data pe access roke ke khatir token ke reset kare saktaa hae.\n\nAap ke ii kare ke chaahi agar aap galti se ii jaankari ke aur koi ke de diya hae nai to aap ke account ke bare me aur koi ke pataa hae.",
        "resettokens-no-tokens": "Reset kare ke jhatir koi token nai hae.",
        "sig_tip": "Aapke signature time ke saathe",
        "hr_tip": "Samthar line (bahut jaada nai kaam me laana)",
        "summary": "Sanchhipt:",
-       "subject": "Visay/khaas samachar:",
+       "subject": "Visay:",
        "minoredit": "Ii chhota badlao hai",
        "watchthis": "Ii panna pe dhyaan rakkho",
        "savearticle": "Panna ke bachao",
        "missingsummary": "'''Suchna:''' Aap badlao ke sanchhit me nai likha hai.\nAgar aap Save ke fir se click karaa tab, aap ke badlao bina summary ke save kar lewa jaai.",
        "selfredirect": "<strong>Chetauni:</strong> Aap ii panna ke apne me redirect kartaa hae. \nAap saait wrong target ke specify karaa, nai to wrong panna ke badaltaa hae.\nAgar aap  \"{{int:savearticle}}\" ke fir se click karaa tab redirect ban jaai.",
        "missingcommenttext": "Meharbani kar ke niche aapan vichar deo.",
-       "missingcommentheader": "'''Chetauni:''' Aap ii vichar ke vishay nai likha hai.\nAgar aap \"{{int:savearticle}}\"  pe click karaa tab bina vishay ke iske bachae lewa jaai.",
+       "missingcommentheader": "<strong>Yaad karawa jaae hae:</strong> Aap ii vichar ke vishay nai likha hai.\nAgar aap \"{{int:savearticle}}\"  pe click karaa tab bina vishay ke iske bachae dewa jaai.",
        "summary-preview": "Sanchhep jhalak:",
        "subject-preview": "Suchi ke jhalak:",
+       "previewerrortext": "Aap ke badlao ke preview kare ke time kuchh garrbarro hae gais hai.",
        "blockedtitle": "Sadasya ke rok dewa gais hai",
        "blockedtext": "'''Aapke user name nai to IP address ke rok dewa gae hai.'''\n\nRoke waala hai $1.\nIske kaaran hai ''$2''.\n\n* Roke ke suruu: $8\n* Roke kab khatam hoi: $6\n* Kiske rokaa jae hai: $7\n\nAap $1 ke mile saktaa hai nai to duusra [[{{MediaWiki:Grouppage-sysop}}|administrator]] se rukawat ke baare me baat karo.\nAap ii sadasya ke 'email this user' feature ke kaam me lae ke baat nai kare saktaa hai jab tak ki ek kanuni email address aapke [[Special:Preferences|account preferences]] me nai hai aur aap ke iske kaam me laae ke roka nai gae hai.\nAap ke abhi ke IP address $3 hai, aur roka gae ID hai #$5.\nMeharbani kar ke chahe ek nai to duno ke aapan sawaal me rakho.",
        "autoblockedtext": "Aap ke IP address ke apne se rok dewa gais hai kahe ki koi duusra sadasya iske kaam me kawat rahaa, jiske $1 rokis hai.\n\nIske khatir kaaran hai:\n:''$2''\n\n* Roke ke suruu: $8\n* Roke kab khatam hoi: $6\n*Roke waala: $7\n\nAap $1 ke mile saktaa hai nai to duusra [[{{MediaWiki:Grouppage-sysop}}|administrator]] se rukawat ke baare me baat karo.\n\nAap ii sadasya ke 'email this user' feature ke kaam me lae ke baat nai kare saktaa hai jab tak ki ek kanuni email address aapke [[Special:Preferences|account preferences]] me nai hai aur aap ke iske kaam me laae ke roka nai gae hai.\n\nAap ke abhi ke IP address $3 hai, aur roka gae ID hai #$5.\nMeharbani kar ke chahe ek nai to duno ke aapan sawaal me rakho.",
        "yourdiff": "Antar",
        "copyrightwarning": "Dhyann me rakho ki {{SITENAME}} ke sab yog daan $2 ($1 ke dekho aur kaankari khatir) ke niche dewa gae hai. Agar aap nai mangtaa ki aap ke likha gae koi chij ke duusra logan badle tab hain par nahii likho.<br />\nAap ii bhi waada kartaa hai ki iske aap likha hai aur koi duusra jagah se copy nahi karaa hai.\n'''COPYRIGHT CHIJ KE BINA ANUMATI KE HIAN PAR NAHI SUBMIT KARNA!'''",
        "copyrightwarning2": "Yaad rakhna ki {{SITENAME}} pe sab yogdaan ke duusra sadasya LOG badle, nai to delete, kare sake hai.\nAgar aap nai mangta ki koi aur aap ke yogdaan ke badle, tab aap hian par nai likho.<br />\nAap ii bhi kasam khata hai ki aap iske apne se likha hai aur kahin se copy nai karaa hai (Aur jaankari khatir $1 ke dekho).\n''' COPYRIGHT WORK KE BINA AUNUMATI KE SUBMIT NAI KARNA!'''",
+       "editpage-cannot-use-custom-model": "Ii panna ke content model ke nai badla jaawe sake hai.",
        "longpageerror": "!'''ERROR: Jon text aap submit karaa hai uu {{PLURAL:$1|ek kilobyte|$1 kilobytes}} lamba hai, jon ki maximum {{PLURAL:$2|ek kilobyte|$2 kilobytes}} se lamba hai.'''\nIske bajawa nai karaa jae sake hai.",
-       "readonlywarning": "'''Chetauni: Database ke maintenance khatir band kar dewa gais hai, tab abhi aap aapan badlao ke save nai kare paega.'''\nAap saait aapan badlao ke ek text file me cut-n-paste kar ke baad me use kare khatir save kar le sakta hai.\nAdministrator jon ki iske lock karis hai ii kaaran diis :hai: $1",
+       "readonlywarning": "<strong>Chetauni: Database ke maintenance khatir band kar dewa gais hai, tab abhi aap aapan badlao ke save nai kare paega.</strong>\nAap saait aapan badlao ke ek text file me cut-n-paste kar ke baad me use kare khatir save kar le sakta hai.\nAdministrator jon ki iske lock karis hai ii kaaran diis hai: $1",
        "protectedpagewarning": "'''CHETAUNI: Ii panna ke band kar dewa gais hai jisse ke khaali uu sadasya jiske sysop adhikaar hai iske badle sake hai.'''\nNiche sab se nawaa suchi aap ke dekhe ke khatir dewa gais hae:",
        "semiprotectedpagewarning": "'''Suchna:''' Ii panna ke band kar dewa gais hai jisse ki khali registered sadasya iske badle sake hai.\nNiche sab se nawaa suchi ke aap ke dekhe ke khatir dewa gais hae:",
-       "cascadeprotectedwarning": "'''Chetawani:''' Ii panna ke band kar dewa gais jiske kaaran khali uu sadasya jiske lage sysop privileges hai iske badle sake hai, kahe ki iske niche likha gais cascade-protected {{PLURAL:$1|panna|panna}} me rakkha gais hai:",
+       "cascadeprotectedwarning": "<strong>Chetawani:</strong> Ii panna ke band kar dewa gais jiske kaaran khali uu sadasya jiske lage sysop privileges hai iske badle sake hai, kahe ki iske niche likha gais cascade-protected {{PLURAL:$1|panna|panna}} me rakkha gais hai:",
        "titleprotectedwarning": "'''CHETAUNI: Ii panna ke band dewa gais hai jisse ki [[Special:ListGroupRights|specific rights]] ke jarie iske badla jaae sake hai.'''\nAap ke jaankari ke khatir sab se nawaa suchi niche dewa gais hae:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} ke ii panna me kaam me lawa gais hae:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ii jhalak me kaam me lawa gais hae:",
        "permissionserrors": "Permissions Errors",
        "permissionserrorstext": "Aap ke uu chij kare ke ijajat nai hai, ii {{PLURAL:$1|kaaran|kaaran}} khatir:",
        "permissionserrorstext-withaction": "Aap ke lage $2 kare khatir ijajat nai hai, ii {{PLURAL:$1|kaaran|kaaran}} se:",
+       "contentmodelediterror": "Aap iske badle nai saktaa hae kaaheki iske content model <code>$1</code> hae, aur ii  abhi ke content model <code>$2</code> ke rakam nai hae.",
        "recreate-moveddeleted-warn": "'''Chetawani: Jon panna ke pahile hatae dewa gais rahaa ke aap fir se banata hai.'''\n\nAap socho ki ii panna ke sampadan aap ke karte rahe ke chaahi ki nai.\nAap ke aaram khatir hatae waala suchi hian pe dewa jaawe hai:",
        "moveddeleted-notice": "Ii panna ke mitae dewa gais hai.\nIi panna ke mitae waala aur hatae waala log aap ke dekhe khatir niche dewa gais hai.",
        "log-fulllog": "Puura log dekho",
        "notextmatches": "Koi panna see text nai mile hae",
        "prevn": "pahile waala {{PLURAL:$1|$1}}",
        "nextn": "aage waala {{PLURAL:$1|$1}}",
+       "prev-page": "pahile waala panna",
+       "next-page": "aage waala panna",
        "prevn-title": "Pahile waala $1 {{PLURAL:$1|natija|natija}}",
        "nextn-title": "Aage waala $1 {{PLURAL:$1|result|results}}",
        "shown-title": "Ek panna me $1 {{PLURAL:$1|result|results}} dekhao",
        "search-category": "(category $1)",
        "search-file-match": "(file content ke match kare hae)",
        "search-suggest": "Ka aap ke matlab rahaa: $1",
+       "search-rewritten": "$1 ke result dekhawa jaae hai. Iske jagah $2 ke khojo.",
        "search-interwiki-caption": "Saathe ke project",
        "search-interwiki-default": "$1 ke result:",
        "search-interwiki-more": "(aur)",
        "showingresultsinrange": "Niche dekhae hai {{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> results}} #<strong>$2</strong> se suruu hoe ke #<strong>$3</strong> talak.",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 - $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "Ii sawaal ke koi jawab nai hae.",
+       "search-nonefound-thiswiki": "Ii site me aap ke khoj ke koi result nai hai.",
        "powersearch-legend": "Gahira khoj",
        "powersearch-ns": "Namespaces me khojo:",
        "powersearch-togglelabel": "Check karo:",
        "prefs-watchlist-token": "Dhyan suchi ke nisani:",
        "prefs-misc": "Futkar",
        "prefs-resetpass": "Password badlo",
-       "prefs-changeemail": "E-mail badlo",
+       "prefs-changeemail": "E-mail badlo, nai to, hatao",
        "prefs-setemail": "Ek E-mail address ke banao",
        "prefs-email": "E-mail ke option",
        "prefs-rendering": "Dekhe me kaise lage hai",
        "rows": "Taytay:",
        "columns": "Column:",
        "searchresultshead": "Khojo",
-       "stub-threshold": "Threshold ke khatir <a href=\"#\" class=\"stub\">stub link</a> formatting (bytes):",
+       "stub-threshold": "Threshold stub link formatting ke khatir ($1):",
+       "stub-threshold-sample-link": "namuna",
        "stub-threshold-disabled": "Band kar dewa gais hae",
        "recentchangesdays": "Nawaa badlao me ketna roj dekhawa jaae:",
        "recentchangesdays-max": "(sab se jaada $1 {{PLURAL:$1|din|din}})",
        "prefs-help-recentchangescount": "Isme hai haali ke badlao, panna ke itihaas aur loga.",
        "prefs-help-watchlist-token2": "Aap ke dhyan suchi ke web feed ke ii secret key hae.\nAur koi agar iske bare me jaane hae aap ke dhyan suchi ke parrhae sake hae, tab iske aur ki ke nai dena.\n[[Special:ResetTokens|Agar aap iske reset kare mangtaa hae tab hian pe click karo]].",
        "savedprefs": "Aap ke pasand ke save kar lewa gais hai.",
+       "savedrights": "{{GENDER:$1|$1}} ke user rights ke bachae lewa gais hai.",
        "timezonelegend": "Time ke zone:",
        "localtime": "Sthaniye samay:",
        "timezoneuseserverdefault": "Wiki default ke kaam me laao ($1)",
        "badsig": "Invalid raw signature; HTML tags ke check karo.",
        "badsiglength": "Signature bahut lambaa hai.\nIske $1 {{PLURAL:$1|character|characters}} se kamti rahe ke chaahi.",
        "yourgender": "Aap kaise describe hoe mangtaa hae?",
-       "gender-unknown": "Ham bole nai mangtaa hae",
+       "gender-unknown": "Jahaan talak hoe sake, aap ke baare me likhe ke khatir, ii software gender neutral sabd ke kaam me laai.",
        "gender-male": "Uu wiki panna ke badle hae",
        "gender-female": "Uu wiki panna ke badle hae",
        "prefs-help-gender": "Ii preference ke set karna optional hae.\nSoftware aapan value ke use kar ke aap ke address kare hae aur aap ke ke bare me duusre ke batae hae, right grammar use kar ke\nIi jaankari janata ke dekhai.",
        "prefs-help-prefershttps": "Aap ke agla login pe ii preferences effect me aai.",
        "prefswarning-warning": "Aap aapan preferences ke badla hae, jiske abhi talak save nai karaa gae hae.\nAgar aap ii panna ke bina \"$1\" me click kare chhorra, tab aap ke preferences save nai hoi.",
        "prefs-tabs-navigation-hint": "Tip: Aap left aur right arrow key use kar ke tab list me navigate kare saktaa hae.",
-       "email-address-validity-valid": "E-mail address kanuni hae",
-       "email-address-validity-invalid": "Ek kanuni e-mail ke likho",
        "userrights": "Sadasya ke adhikaar ke chalao",
        "userrights-lookup-user": "Sadasya ke group ke manage karo",
        "userrights-user-editname": "Ek Username ke enter karo:",
        "editusergroup": "User groups ke badlo",
-       "editinguser": "Sadasya '''[[User:$1|$1]]'''  ke adhikaar ke badlaa jaawe hae $2",
+       "editinguser": "{{GENDER:$1|Sadasya}} <strong>[[User:$1|$1]]</strong>  ke adhikaar ke badlaa jaawe hae $2",
        "userrights-editusergroup": "User groupske badlo",
        "saveusergroups": "User groups ke save karo",
        "userrights-groupsmember": "Iske member hai:",
        "group-bot": "Bots",
        "group-sysop": "Sysops",
        "group-bureaucrat": "Bureaucrats",
-       "group-suppress": "Oversights",
+       "group-suppress": "Suppressors",
        "group-all": "(sab)",
        "group-user-member": "{{GENDER:$1|sadasya}}",
        "group-autoconfirmed-member": "{{GENDER:$1|autoconfirmed sadasya}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrator}}",
        "group-bureaucrat-member": "{{GENDER:$1|bureaucrat}}",
-       "group-suppress-member": "{{GENDER:$1|oversight}}",
+       "group-suppress-member": "{{GENDER:$1|suppressor}}",
        "grouppage-user": "{{ns:project}}:Sadasya",
        "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmed sadasya",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Администраторар",
        "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
-       "grouppage-suppress": "{{ns:project}}:Oversight",
+       "grouppage-suppress": "{{ns:project}}:Suppress",
        "right-read": "Panna ke parrho",
        "right-edit": "Panna ke badlo",
        "right-createpage": "Panna banao (jon ki salah kare waala panna nai hai)",
        "recentchanges-label-plusminus": "Panna ke size etna bytes se badla",
        "recentchanges-legend-heading": "'''Legend:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aur dekho [[Special:NewPages|nawaa panna ke suchi]])",
+       "recentchanges-submit": "Dekhao",
        "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} <strong>$3, $4</strong> (<strong>$1</strong> talak dekhawa gais) talak.",
        "rclistfrom": "$3 $2 se suruu kar ke nawaa badlao dekhao",
        "rcshowhideminor": "$1 chhota badlao",
        "rcshowhidemine": "$1 hamaar sampadan",
        "rcshowhidemine-show": "Dekhao",
        "rcshowhidemine-hide": "Lukao",
+       "rcshowhidecategorization-show": "Dekhao",
        "rclinks": "Pichhla $1 badlao pichle $2 din me dekhao <br />$3",
        "diff": "farka",
        "hist": "itihaas",
index 1a46b82..008e61f 100644 (file)
        "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Stranica suradnika|Stranica suradnice}}",
        "nstab-media": "Mediji",
        "nstab-special": "Posebna stranica",
-       "nstab-project": "Stranica o projektu",
+       "nstab-project": "Stranica projekta",
        "nstab-image": "Datoteka",
        "nstab-mediawiki": "Poruka",
        "nstab-template": "Predložak",
        "filehist-filesize": "Veličina datoteke",
        "filehist-comment": "Komentar",
        "imagelinks": "Upotreba datoteke",
-       "linkstoimage": "{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedećih stranice povezuju}} na ovu datoteku:",
+       "linkstoimage": "{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedeće stranice povezuju|$1 sljedećih stranica povezuje}} na ovu datoteku:",
        "linkstoimage-more": "Više od $1 {{PLURAL:$1|stranice povezuje|stranica povezuje}} na ovu datoteku.\nSljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.\n[[Special:WhatLinksHere/$2|Ovdje se nalazi]] potpuni popis.",
        "nolinkstoimage": "Nijedna stranica ne povezuje na ovu sliku.",
        "morelinkstoimage": "Pogledaj [[Special:WhatLinksHere/$1|više poveznica]] za ovu datoteku.",
index 422c028..d71203c 100644 (file)
        "permalink": "Hivatkozás erre a változatra",
        "print": "Nyomtatás",
        "view": "Olvasás",
-       "view-foreign": "Megtekintés ezen: $1",
+       "view-foreign": "Megtekintés itt: $1",
        "edit": "Szerkesztés",
        "edit-local": "Helyi leírás szerkesztése",
        "create": "Létrehozás",
        "whatlinkshere-hidelinks": "linkek $1",
        "whatlinkshere-hideimages": "fájlhivatkozások $1",
        "whatlinkshere-filters": "Elemek szűrése",
+       "whatlinkshere-submit": "Indítás",
        "autoblockid": "$1. autoblokk",
        "block": "Felhasználó blokkolása",
        "unblock": "Felhasználó blokkolásának feloldása",
index c06a6f9..9477837 100644 (file)
@@ -43,7 +43,8 @@
                        "Ilham",
                        "Matma Rex",
                        "WongKentir",
-                       "Rachmat.Wahidi"
+                       "Rachmat.Wahidi",
+                       "Arief"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "passwordreset-emailtext-ip": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat\ndetail akun untuk {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} berikut\nterkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
        "passwordreset-emailtext-user": "Seseorang (mungkin Anda, dari alamat IP $1) meminta pengingat detail akun untuk {{SITENAME}} ($4).\n{{PLURAL:$3|Akun|Akun-akun}} berikut terkait dengan alamat surel ini:\n\n$2\n\n{{PLURAL:$3|Sandi sementara}} berikut akan kedaluwarsa dalam {{PLURAL:$5|$5 hari}}.\nAnda harus masuk dan memilih sandi baru sekarang. Jika orang lain membuat\npermintaan ini atau jika Anda ingat sandi asli dan tidak lagi\ningin mengubahnya, Anda dapat mengabaikan pesan ini dan terus menggunakan sandi lama.",
        "passwordreset-emailelement": "Nama pengguna: \n$1\n\nSandi sementara: \n$2",
-       "passwordreset-emailsent": "Surel setel ulang kata sandi telah dikirimkan.",
+       "passwordreset-emailsentemail": "Surel setel ulang kata sandi telah dikirimkan.",
        "passwordreset-emailsent-capture": "Surel setel ulang kata sandi telah dikirim, yang ditampilkan di bawah.",
        "passwordreset-emailerror-capture": "Surel setel ulang kata sandi telah dibuat, yang ditampilkan di bawah, namun pengiriman pada {{GENDER:$2|pengguna}} gagal: $1",
        "changeemail": "Ubah alamat surel",
        "prefs-help-prefershttps": "Preferensi ini akan diaktifkan kali berikutnya Anda masuk log.",
        "prefswarning-warning": "Perubahan preferensi anda belum tersimpan. Apabila anda meninggalkan halaman ini tanpa men-klik \"$1\" preferensi anda tidak akan diperbarui.",
        "prefs-tabs-navigation-hint": "Tip: Anda dapat menggunakan tombol panah kiri dan kanan untuk bernavigasi antartab di dalam daftar tab.",
-       "email-address-validity-valid": "Alamat surel tampaknya sah",
-       "email-address-validity-invalid": "Masukkan alamat surel yang sah",
        "userrights": "Manajemen hak pengguna",
        "userrights-lookup-user": "Mengatur kelompok pengguna",
        "userrights-user-editname": "Masukkan nama pengguna:",
        "upload-form-label-select-file": "Pilih berkas",
        "upload-form-label-infoform-title": "Rincian",
        "upload-form-label-infoform-name": "Nama",
+       "upload-form-label-infoform-name-tooltip": "Judul singkat yang unik untuk berkas, yang akan menjadi nama berkas. Anda dapat gunakan bahasa yang sederhana berikut spasi. Jangan menyertakan ekstensi berkas.",
        "upload-form-label-infoform-description": "Deskripsi",
+       "upload-form-label-infoform-description-tooltip": "Jelaskan dengan singkat hal-hal penting tentang karya ini.\nUntuk foto, sebutkan hal-hal utama yang ditampilkan, kesempatan atau tempat yang ditampilkan di foto.",
        "upload-form-label-usage-title": "Penggunaan",
        "upload-form-label-usage-filename": "Nama berkas",
        "foreign-structured-upload-form-label-own-work": "Ini adalah karya saya sendiri",
        "movenosubpage": "Halaman ini tak memiliki subhalaman.",
        "movereason": "Alasan:",
        "revertmove": "batalkan",
-       "delete_and_move": "Hapus dan pindahkan",
        "delete_and_move_text": "==Penghapusan diperlukan==\nHalaman yang dituju, \"[[:$1]]\", telah mempunyai isi. Apakah Anda hendak menghapusnya untuk memberikan ruang bagi pemindahan?",
        "delete_and_move_confirm": "Ya, hapus halaman tersebut",
        "delete_and_move_reason": "Dihapus untuk mengantisipasikan pemindahan halaman dari \"[[$1]]\"",
        "mediastatistics": "Statistik media",
        "mediastatistics-summary": "Statistik mengenai jenis berkas yang diunggah. Hanya mencakup versi terbaru dari berkas. Berkas lama dan berkas yang sudah dihapus tidak termasuk.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bita}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Total ukuran file untuk bagian ini: {{PLURAL: $ 1 | $ 1 byte | $ 1 byte}} ($ 2; $ 3%).",
+       "mediastatistics-allbytes": "Total ukuran untuk semua file: {{PLURAL: $ 1 | $ 1 byte | $ 1 byte}} ($ 2).",
        "mediastatistics-table-mimetype": "Tipe MIME",
        "mediastatistics-table-extensions": "Ekstensi",
        "mediastatistics-table-count": "Jumlah file",
index 54d78c3..8ef32b7 100644 (file)
        "laggedslavemode": "<strong>Ballaag:</strong> Ti panid ket mabalin a saan nga aglaon kadagiti kinaudi a panagpabaro.",
        "readonly": "Narikepan ti database",
        "enterlockreason": "Agikabil ti rason para iti pannakarikep, mangiraman ti maysa a karkulo no kaanonto a malukatan",
-       "readonlytext": "Ti database ket agdama a narikpan kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kadawyan a pagsimpa, kalpasanna a normalto nga agsubli.\n\nTi administrador a nangrikep ket nangited iti daytoy a palawag: $1",
+       "readonlytext": "Ti database ket agdama a narikpan kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kadawyan a pagsimpa, kalpasanna a normalto nga agsubli.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
        "missing-article": "Ti database ket saan a nakabiruk ti testo ti panid a mabirukanna koma, a nanaganan ti \"$1\" $2.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a baak a paggiddiatan wenno silpo ti pakasaritaan ti maysa panid a dati a naikkat.\n\nNo saan a kasta, mabalin a nakasarakka ti parikut ti sopwer.\n\nPangngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta nga URL.",
        "missingarticle-rev": "(rebision#: $1)",
        "missingarticle-diff": "(Dip: $1, $2)",
        "mypreferencesprotected": "Awan pammalubosmo nga agurnos kadagiti kakaykayatam.",
        "ns-specialprotected": "Saan a mabalin nga urnosen dagiti espesial a panid.",
        "titleprotected": "Daytoy a titulo ket nasalakniban manipud iti pannakapartuat babaen ni [[User:$1|$1]].\nTi naited a rason ket \"<em>$2</em>\".",
-       "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ta ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
+       "filereadonlyerror": "Di nabaliwan ti papeles ti \"$1\" gapu ta ti repositorio ti papeles ti \"$2\" ket mabasa laeng a moda.\n\nTi administrador ti sistema a nangserra ket nangited iti daytoy a panagilawlawag: \"$3\".",
        "invalidtitle-knownnamespace": "Imbalido a titulo iti nagan ti espasio \"$2\" ken teksto \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalido a titulo iti di ammo a nagan ti espasio a bilang $1 ken teksto \"$2\"",
        "exception-nologin": "Saan a nakastrek",
        "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangisaad manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar ti daan a kontrasenias.",
        "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
        "passwordreset-emailelement": "Nagan ti agar-aramat: \n$1\n\nTemporario a kontrasenias: \n$2",
-       "passwordreset-emailsent": "No daytoy ket nairehistro nga adres ti esurat para iti pakabilangam, maipatulodto ti maysa nga esurat iti panangisaad manen ti kontrasenias.",
+       "passwordreset-emailsentemail": "No daytoy nga adres ti esurat ket mainaig iti pakabilangam, maipatulodto ti maysa nga esurat iti panangisaad manen ti kontrasenias.",
        "passwordreset-emailsent-capture": "Ti maysa nga esurat ti panangisaad manen ti kontrasenias ket naipatuloden, a naipakita dita baba.",
        "passwordreset-emailerror-capture": "Naaramid ti maysa nga esurat a panangisaad manen ti kontrasenias, a napaikita dita baba, ngem ti panangitulod kenni {{GENDER:$2|agar-aramat}} ket napaay: $1",
        "changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
        "copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
        "editpage-cannot-use-custom-model": "Saan a mabaliwan ti modelo ti linaon iti daytoy a panid.",
        "longpageerror": "<strong>Biddut: Ti teksto nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
-       "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador a nangrikep ket nangited iti daytoy a palawag: $1",
+       "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
        "protectedpagewarning": "<strong>Ballaag: Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ditoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "cascadeprotectedwarning": "<strong>Ballaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} a nasalakniban iti sariap:",
        "permissionserrors": "Biddut ti pammalubos",
        "permissionserrorstext": "Awan ti pammalubosmo nga agaramid iti dayta, gapu ti sumaganad {{PLURAL:$1|a rason|a rasrason}}:",
        "permissionserrorstext-withaction": "Awan ti pammalubosmo nga $2, gapu ti sumaganad a {{PLURAL:$1|rason|rasrason}}:",
-       "contentmodelediterror": "Saanmo a maurnos daytoy a rebision gapu ta ti modelo ti linaon ket <code>$1</code>, ken ti agdama a linaon ti panid ket <code>$2</code>.",
+       "contentmodelediterror": "Saanmo a maurnos daytoy a rebision gapu ta ti modelo ti linaon ket <code>$1</code>, a maigiddiat manipud iti agdama a modelo ti linaon ti panid ti <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Ballaag: Agparpartuatka manen ti dati a naikkat a panid.</strong>\n\nUsigem koma no maitutop ti agtuloy nga agurnos iti daytoy a panid.\nTi listaan ti pannakaikkat ken pannakaiyalis para iti daytoy a panid ket naited ditoy para iti pakainugotan:",
        "moveddeleted-notice": "Naikkaten daytoy a panid.\nTi listaan ti pannakaikkat ken pannakaiyalis para iti panid ket naited dita baba para iti reperensia.",
        "moveddeleted-notice-recent": "Pasensian, daytoy a panid ket kaik-ikkat idi (iti kaunegan dagiti 24 nga oras).\nTi listaan ti pannakaikkat ken pannakaiyalis para iti panid ket naited dita baba para iti reperensia.",
        "prefs-help-prefershttps": "Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.",
        "prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
        "prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
-       "email-address-validity-valid": "Ti esurat a pagtaengan ket kasla umisu",
-       "email-address-validity-invalid": "Ikabil ti umisu nga esurat a pagtaengan",
        "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
        "userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
        "recentchanges-label-plusminus": "Ti panagbaliw ti kadakkel ti panid babaen ti bilang dagiti byte",
        "recentchanges-legend-heading": "'''Leyenda:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
+       "recentchanges-submit": "Ipakita",
        "rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
        "rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $2, $3",
        "rcshowhideminor": "$1 dagiti bassit a panagurnos",
        "foreign-structured-upload-form-label-own-work": "Daytoy ket bukodko nga obra",
        "foreign-structured-upload-form-label-infoform-categories": "Katkategoria",
        "foreign-structured-upload-form-label-infoform-date": "Petsa",
+       "foreign-structured-upload-form-3-label-yes": "Wen",
+       "foreign-structured-upload-form-3-label-no": "Saan",
        "backend-fail-stream": "Saan a maipan ti papeles $1.",
        "backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
        "backend-fail-notexists": "Awan ti papeles ti $1.",
        "mostrevisions": "Dagiti panid a kaaduan kadagiti rebision",
        "prefixindex": "Amin a pampanid nga addaan iti pasakbay",
        "prefixindex-namespace": "Amin a pampanid nga addaan iti pasaruno (nagan ti espasio ti $1)",
+       "prefixindex-submit": "Ipakita",
        "prefixindex-strip": "Ikkaten ti pasakbay iti listaan",
        "shortpages": "Dagiti ababa a panid",
        "longpages": "Dagiti atiddog a panid",
        "protectedpages-performer": "Nangsalaknib nga agar-aramat",
        "protectedpages-params": "Dagiti parametro ti panagsalaknib",
        "protectedpages-reason": "Rason",
+       "protectedpages-submit": "Ipakita dagiti panid",
        "protectedpages-unknown-timestamp": "Di ammo",
        "protectedpages-unknown-performer": "Di ammo nga agar-aramat",
        "protectedtitles": "Dagiti nasalakniban a titulo",
        "protectedtitles-summary": "Daytoy a panid ket ilistana dagiti titulo nga agdama a nasalakniban manipud ti pannakapartuat. Para iti listaan dagiti adda a panid a nasalakniban, kitaen ti  [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]..",
        "protectedtitlesempty": "Awan dagiti titulo nga agdama a nasalakniban kadagitoy a parametro.",
+       "protectedtitles-submit": "Ipakita dagiti titulo",
        "listusers": "Listaan ti agar-aramat",
        "listusers-editsonly": "Ipakita laeng dagiti agar-aramat nga addaan kadagiti inurnos",
        "listusers-creationsort": "Ilasin babaen ti petsa a pannakapartuat",
        "usereditcount": "$1 {{PLURAL:$1|nga inurnos|kadagiti inurnos}}",
        "usercreated": "{{GENDER:$3|Pinartuat}} idi $1, $2",
        "newpages": "Baro a pampanid",
+       "newpages-submit": "Ipakita",
        "newpages-username": "Nagan ti agar-aramat:",
        "ancientpages": "Dagiti kadaanan a panid",
        "move": "Iyalis",
        "specialloguserlabel": "Nangitungpal:",
        "speciallogtitlelabel": "Puntaan (titulo wenno {{ns:user}}:nagan ti agar-aramat para iti agar-aramat):",
        "log": "Dagiti listaan",
+       "logeventslist-submit": "Ipakita",
        "all-logs-page": "Amin a listaan a publiko",
        "alllogstext": "Naikaykaysa a panagiparang kadagiti amin a magun-od a listaan iti {{SITENAME}}.\nMapabassitmo ti panagkita babaen ti panagpili ti kita ti listaan, ti nagan ti agar-aramat (sensitibo ti kadakkel ti letra), wenno ti naapektaran a panid (sensitibo pay ti kadakkel ti letra).",
        "logempty": "Awan dagiti maipada a banag iti listaan.",
        "cachedspecial-viewing-cached-ts": "Kitkitaem ti maysa a naidulin a bersion iti daytoy a panid, a mabalin daytoy a saan a kompleto nga agpayso.",
        "cachedspecial-refresh-now": "Kitaen ti kinaudian.",
        "categories": "Katkategoria",
+       "categories-submit": "Ipakita",
        "categoriespagetext": "Ti sumaganad a {{PLURAL:$1|kategoria ket aglaon|katkategoria ket aglaon}} kadagiti panid wenno midia.\n[[Special:UnusedCategories|Dagiti saan a nausar a kategoria]] ket saan a maiparang ditoy.\nKitaen met [[Special:WantedCategories|dagiti makiddaw a kategoria]].",
        "categoriesfrom": "Ipakita dagiti kategoria a mangrugi iti:",
        "special-categories-sort-count": "ilasin babaen ti bilang",
        "activeusers-hidebots": "Ilemmeng dagiti bot",
        "activeusers-hidesysops": "Ilemmeng dagiti administrador",
        "activeusers-noresult": "Awan ti nasarakan nga agar-aramat.",
+       "activeusers-submit": "Ipakita dagiti aktibo nga agar-aramat",
        "listgrouprights": "Dagiti karbengan ti grupo ti agar-aramat",
        "listgrouprights-summary": "Dagiti sumaganad a listaan ti grupo ti agar-aramat a naipalawag iti daytoy a wiki, a nairaman dagiti mainaig a karbengan ti panagserrekda.\nAdda pay mabalin nga [[{{MediaWiki:Listgrouprights-helppage}}|adu a pakaammo]] a maipanggep kadagiti kabukbuodan a karbengan.",
        "listgrouprights-key": "Leyenda: \n* <span class=\"listgrouprights-granted\">Naited a karbengan</span> \n* <span class=\"listgrouprights-revoked\">Naukas a karbengan</span>",
        "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw",
        "watchlistall2": "amin",
        "watchlist-hide": "Ilemmeng",
-       "wlshowtime": "Ipakita ti naudi:",
+       "watchlist-submit": "Ipakita",
+       "wlshowtime": "Ipakita a paset ti panawen:",
        "wlshowhideminor": "dagiti bassit a panagurnos",
        "wlshowhidebots": "dagiti bot",
        "wlshowhideliu": "dagiti nakarehistro nga agar-aramat",
        "wlshowhideanons": "dagiti di ammo nga agar-aramat",
        "wlshowhidepatr": "dagiti napatrulian a panagurnos",
        "wlshowhidemine": "dagiti inurnosko",
+       "wlshowhidecategorization": "pannakaikategoria ti panid",
        "watchlist-options": "Dagiti pagpilian ti listaan a bambantayan",
        "watching": "Bambantayan...",
        "unwatching": "Saanen a bantayan...",
        "delete-confirm": "Ikkaten ti \"$1\"",
        "delete-legend": "Ikkaten",
        "historywarning": "<strong>Ballaag:</strong> Ti panid a kayatmo nga ikkaten ket adda pakasaritaanna iti $1 {{PLURAL:$1|a rebision|kadagiti rebision}}:",
+       "historyaction-submit": "Ipakita",
        "confirmdeletetext": "Mangrugrugika a mangikkat iti maysa a panid a kakuyog amin ti pakasaritaanna.\nPangngaasi a pasingkedam a naikeddeng a kayatmo nga aramiden daytoy, a maawatam ti pagbnagan ti panangikkatmo, ken aramidem daytoy a kas maiyannugot iti [[{{MediaWiki:Policy-url}}|annuroten]].",
        "actioncomplete": "Nalpasen ti aramid",
        "actionfailed": "Napaay ti aramid",
        "whatlinkshere-hidelinks": "$1 dagiti silpo",
        "whatlinkshere-hideimages": "$1 dagiti silpo ti papeles",
        "whatlinkshere-filters": "Dagiti sagat",
+       "whatlinkshere-submit": "Inkan",
        "autoblockid": "Auto a panagserra #$1",
        "block": "Seraan ti agar-aramat",
        "unblock": "Ikkaten ti serra ti agar-aramat",
        "move-page-legend": "Iyalis ti panid",
        "movepagetext": "Ti panagusar ti porma dita baba, ket mangnagan manen ti panid, a mangiyalis amin ti pakasaritaanna iti baro a nagan.\nTi daan a titulo ket agbalin a baw-ing a panid iti baro a titulo.\nMapabarom a kas automatiko dagiti baw-ing a nakatudo dita kasisigud a titulo.\nNo agpilika a saanmo a kayat, siguraduem a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].\nRenbbengmo ti mangpatalged nga amin a silpo ket agtultuloy a nakatudo iti nasken a papananda.\n\nLaglagipen a ti panid ket <strong>saan</strong> a maiyalis no addan sigud a panid iti baro a titulo, malaksid no ti kinaudi ket maysa a baw-ing ken awan ti napalabas a pakasaritaan ti panag-urnos. \nKayat a sawen daytoy a mabalinmo a suktan ti nagan ti maysa a panid manipud iti punto ti pannakasukat ti nagan no nagbiddutka, ken saan mo a mabalin a suratan manen ti addaan a panid.\n\n<strong>Ballaag!</strong>\nMabalin a maysa daytoy a nakaro ken saan a bigla a panagbaliw iti maysa a nasikat a panid;\npangngaasim a pasingkedam a maawatam ti ibunga daytoy sakbay nga agtuloyka a mangbaliw.",
        "movepagetext-noredirectfixer": "Ti panagusar ti kinabuklan dita baba, ket panaganan ti panid, iyalisna amin ti pakasaritaanna iti baro a nagan.\nTi daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.\nPasaruduam a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].\nRebbengem ti mangpatalged nga amin a silpo ket agtultuloy a nakatudo iti nasken a papananda.\n\nLaglagipen a ti panid ket <strong>saan</strong> a maiyalis no addan sigud a panid iti baro a titulo, malaksid no awan linaonna wenno no maysa a baw-ing a panid ken awan ti panagbaliw iti pakasaritaan ti napalabas. \nKayat a sawen daytoy a mabalinmo a suktan ti nagan ti maysa a panid manipud iti punto ti pannakasukat ti nagan no nagbiddutka, ken saanmo a mabalin a suratan manen ti addaan a panid.\n\n<strong>Ballaag!</strong>\nMabalin a maysa daytoy a nakaro ken saan a bigla a panagbaliw iti maysa a nasikat a panid;\npangngaasim ta pasingkedam a maawatam ti ibunga daytoy sakbay nga agtuloyka a mangbaliw.",
-       "movepagetalktext": "Ti mainaig a tungtungan ti panid ket automatikonto a maiyalis a karamanna <strong>malaksid:</strong>\n*Ti addan ti awan linaon a tungtungan ti panid babaen ti baro a nagan, wenno\n*No ikkatem ti kur-itna ti kahon iti baba.\n\nKadagitoy a kaso, masapul nga iyalis wenno manual nga itiponmo ti panid no kayatmo.",
+       "movepagetalktext": "No kur-item daytoy a kahon, automatikonto a maiyalis ti mainaig a tungtungan a panid, malaksid no addanto idiay iti adda linaon a tungtungan a panid.\n\nIti daytoy a kaso, masapul nga iyalis wenno manual nga itiponmo ti panid no kayatmo.",
        "moveuserpage-warning": "<strong>Ballaag:</strong> Mangrugrugika nga agiyalis ti panid ti agar-aramat. Pangngaasi a laglapipen a ti panid ket isu laeng ti maiyalis ken ti agar-aramat ket <em>saanto</em> a managanan.",
        "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti aniaman a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
        "movenologintext": "Masapul a nakarehistroka nga agar-aramat ken [[Special:UserLogin|nakastrek]] tapno makaiyalis iti panid.",
        "export-download": "Idulin a kas papeles",
        "export-templates": "Mangiraman kadagiti plantilia",
        "export-pagelinks": "Mangiraman kadagiti nakasilpo a panid iti kauneg iti:",
+       "export-manual": "Manual nga inayon dagiti panid:",
        "allmessages": "Dagiti mensahe ti sistema",
        "allmessagesname": "Nagan",
        "allmessagesdefault": "Kasisigud a testo ti mensahe",
        "exif-compression-1": "Saan a napespes",
        "exif-copyrighted-true": "Nakarbengan ti kopia",
        "exif-copyrighted-false": "Saan a naisaad ti kasasaad ti karbengan ti kopia",
+       "exif-photometricinterpretation-1": "Nangisit ken puraw (Ti nangisit ket 0)",
        "exif-unknowndate": "Di ammo a petsa",
        "exif-orientation-1": "Kadawyan",
        "exif-orientation-2": "Horisontal a binaliktad",
        "pagelang-language": "Pagsasao",
        "pagelang-use-default": "Usaren ti kasisigud a pagsasao",
        "pagelang-select-lang": "Agpili iti pagsasao",
+       "pagelang-submit": "Ited",
        "right-pagelang": "Baliwan ti pagsasao ti panid",
        "action-pagelang": "baliwan ti pagsasao ti panid",
        "log-name-pagelang": "Listaan ti panagbaliw ti pagsasao",
        "mediastatistics-header-video": "Dagiti video",
        "mediastatistics-header-office": "Opisina",
        "mediastatistics-header-text": "Tekstual",
+       "mediastatistics-header-total": "Amin a papeles",
        "json-error-unknown": "Adda idi parikut ti JSON. Biddut: $1",
        "json-error-state-mismatch": "Imbalido wenno nadadael a JSON",
        "json-error-syntax": "Biddut ti sintaksis",
index 9b3e238..c7c8a4b 100644 (file)
        "badfilename": "Skáarnafninu hefur verið breytt í „$1“.",
        "filetype-mime-mismatch": "Skráarendingin \".$1\" samræmist ekki MIME-gerð skrárinnar ($2).",
        "filetype-badmime": "Skrárir af MIME-gerðinni „$1“ er ekki leyfilegt að hlaða inn.",
-       "filetype-bad-ie-mime": "Mistókst að hlaða inn skrá því Internet Explorer myndi uppgvötva hana sem \"$1\" sem er óheimil og mögulega hættulegt skráarsnið.",
+       "filetype-bad-ie-mime": "Mistókst að hlaða inn skrá því Internet Explorer myndi uppgötva hana sem \"$1\" sem er óheimil og mögulega hættulegt skráarsnið.",
        "filetype-unwanted-type": "'''„.$1“''' er óæskileg skráargerð.\n{{PLURAL:$3|Ákjósanleg skráargerð er|Ákjósanlegar skráargerðir eru}} $2.",
        "filetype-banned-type": "'''„.$1“''' {{PLURAL:$4|er ekki leifileg skráargerð|eru ekki leifilegar skráargerðir}}.\n{{PLURAL:$3|Leyfileg skráargerð er|Leyfilegar skráargerðir eru}} $2.",
        "filetype-missing": "Skráin hefur engan viðauka (dæmi \".jpg\").",
index 55049ec..d837fba 100644 (file)
        "upload-form-label-select-file": "Seleziona file",
        "upload-form-label-infoform-title": "Dettagli",
        "upload-form-label-infoform-name": "Nome",
+       "upload-form-label-infoform-name-tooltip": "Un titolo breve e distintivo per il file, che verrà utilizzato come suo nome. Puoi usare un linguaggio semplice con spazi. Non includere l'estensione del file.",
        "upload-form-label-infoform-description": "Descrizione",
+       "upload-form-label-infoform-description-tooltip": "Descrivi sinteticamente tutto quanto sia degno di nota a proposito di quest'opera.\nPer le foto, indica le cose principali che vi sono rappresentate, l'occasione e/o il luogo in cui sono state scattate.",
        "upload-form-label-usage-title": "Utilizzo",
        "upload-form-label-usage-filename": "Nome del file",
        "foreign-structured-upload-form-label-own-work": "Questo è un mio lavoro",
        "export-download": "Richiedi il salvataggio come file",
        "export-templates": "Includi i template",
        "export-pagelinks": "Includi pagine correlate ad una profondità di:",
+       "export-manual": "Aggiungi pagine manualmente:",
        "allmessages": "Messaggi di sistema",
        "allmessagesname": "Nome",
        "allmessagesdefault": "Testo predefinito",
        "expand_templates_preview": "Anteprima",
        "expand_templates_preview_fail_html": "<em>Dato che {{SITENAME}} ha dell'HTML grezzo attivato e c'è stata una perdita dei dati della sessione, l'anteprima è nascosta per precauzione contro gli attacchi a JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, riprova.</strong> \nSe comunque non dovesse funzionare, prova ad [[Special:UserLogout|uscire]] ed a rientrare.",
        "expand_templates_preview_fail_html_anon": "<em>Poiché {{SITENAME}} ha dell'HTML grezzo attivato e non hai effettuato l'accesso, l'anteprima è nascosta come precauzione contro gli attacchi JavaScript.</em>\n\n<strong>Se si tratta di un normale tentativo d'anteprima, [[Special:UserLogin|entra]] e riprova.</strong>",
+       "expand_templates_input_missing": "Devi inserire del testo come input.",
        "pagelanguage": "Seleziona lingua della pagina",
        "pagelang-name": "Pagina",
        "pagelang-language": "Lingua",
index 845e7e7..3225cbd 100644 (file)
        "upload-form-label-select-file": "ファイル選択",
        "upload-form-label-infoform-title": "詳細",
        "upload-form-label-infoform-name": "名前",
+       "upload-form-label-infoform-name-tooltip": "ファイル固有の説明的な表題。ファイル名として使われます。平易な言葉を使い、空白を入れることができます。拡張子は含めないでください。",
        "upload-form-label-infoform-description": "説明",
+       "upload-form-label-infoform-description-tooltip": "この作品に対して特筆すべきことをすべて説明します。\n写真であれば、主に何が写っているのか、いつ、どこで撮ったものなのかについて述べてください。",
        "upload-form-label-usage-title": "使用法",
        "upload-form-label-usage-filename": "ファイル名",
        "foreign-structured-upload-form-label-own-work": "これはあなた自身による作業です",
        "expand_templates_preview": "プレビュー",
        "expand_templates_preview_fail_html": "<em>{{SITENAME}} ではHTMLソースが有効になっており、セッションデータの損失が生じているので、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、もう一度試してください。</strong>\nそれでも動作しない場合は、[[Special:UserLogout|ログアウト]]して再度ログインしてみてください。",
        "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} ではHTMLソースが有効になっており、ログインしていないため、JavaScript の攻撃に対する予防措置としてプレビューは表示されません。</em>\n\n<strong>これが合法的なプレビューの試みである場合には、[[Special:UserLogin|ログイン]]してもう一度試してください。</strong>",
+       "expand_templates_input_missing": "文章を入力してください。",
        "pagelanguage": "ページ言語選択",
        "pagelang-name": "ページ",
        "pagelang-language": "言語",
index c975e86..cfa3451 100644 (file)
        "session_fail_preview_html": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\n\n<em>Сондықтан {{SITENAME}} жобасында қам HTML қосылған, JavaScript шабуылдардан қорғану үшін алдын ала қарап шығу жасырылған.</em>\n\n<strong>Егер бұл өңдеме адал ниетті әрекет болса қайта байқап көріңіз.</strong> \nЕгер бұл әлі істемесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
        "token_suffix_mismatch": "<strong>Өңдемеңіз тайдырылды, себебі тұтынғышыңыз өңдеме деректер бумасындағы тыныс белгілерін бүлдіртті.\nБет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.</strong>\nБұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.",
        "edit_form_incomplete": "<strong>Өңдеу пішінінің кейбір бөліктері серверге жетпеді; өңдемелеріңіздің бұзылмағандығына екі рет бақылау жүргізіңіз және қайта байқап көріңіз.</strong>",
-       "editing": "$1 бетін өңдеп жатырсыз",
+       "editing": "Өңдеп жатырсыз: $1",
        "creating": "Жаңадан бастау: $1",
-       "editingsection": "$1 бетінің бөлімін өңдеп жатырсыз",
-       "editingcomment": "$1 бетін өңдеп жатырсыз (жаңа бөлім)",
+       "editingsection": "Өңдеп жатырсыз: $1 бетінің бөлімі",
+       "editingcomment": "Өңдеп жатырсыз: $1 (жаңа бөлім)",
        "editconflict": "Өңдемелер қақтығысы: $1",
        "explainconflict": "Осы бетті сіз өңдей бастағанда басқа біреу бетті өзгерткен.\nЖоғарғы мәтін аумағында қазіргі уақытта бар бет мәтінінен тұрады.\nТөменгі мәтін аумағында сіздің өзгертулеріңіз көрсетіледі.\nӨзгертуіңізді бар мәтінге біріктіруге тура келеді.\n«{{int:savearticle}}» батырмасын басқанда </strong>тек</strong> жоғарғы мәтін аумағы сақталады.",
        "yourtext": "Мәтініңіз",
        "listusers-editsonly": "Тек қатысушы өңдемелерін көрсету",
        "listusers-creationsort": "Басталған уақытына қарай іріктеу",
        "listusers-desc": "Кемуі бойынша ретке келтіру",
-       "usereditcount": "$1 {{PLURAL:$1|өңдеме|өңдемелер}}",
+       "usereditcount": "$1 {{PLURAL:$1|өңдеме|өңдеме}}",
        "usercreated": "$1 $2-та {{GENDER:$3|басталған}}",
        "newpages": "Ең жаңа беттер",
        "newpages-submit": "Көрсету",
index 8e6733a..8f39889 100644 (file)
        "tog-hideminor": "Celare recensiones minores in indice nuper mutatorum",
        "tog-hidepatrolled": "Redactiones censae inter nuper mutatas celandae",
        "tog-newpageshidepatrolled": "Paginae censae inter nouissime creatas celandae",
-       "tog-extendwatchlist": "Extendere indicem paginarum observatarum ut omnes emendationes monstrentur, non solum emendationes recentissimae",
+       "tog-extendwatchlist": "In indice paginarum observatarum omnes, non solum recentissimas mutationes ostendere",
        "tog-usenewrc": "Indice nuper mutatarum excelsa uti",
        "tog-numberheadings": "Subtituli numeris adornandi",
        "tog-showtoolbar": "Affigere trabem redigentem",
        "tog-editondblclick": "Percussus duplex redactionem hortetur",
        "tog-editsectiononrightclick": "Paginarum segmenta dextero percussu in titulis redigenda",
-       "tog-watchcreations": "Paginas quas creo et fasciculos quos impono in paginarum observatarum indicem addere",
-       "tog-watchdefault": "Paginas et fasciculos quos recenseo in paginarum observatarum indicem addere",
-       "tog-watchmoves": "Paginas et fasciculos quos moveo in paginarum observatarum indicem addere",
+       "tog-watchcreations": "Paginas, quas creavero, et fasciculos, quos imposuero, observare",
+       "tog-watchdefault": "Paginas et fasciculos, quos recensuero, observare",
+       "tog-watchmoves": "Paginas et fasciculos, quos movero, observare",
        "tog-watchdeletion": "Paginas et fasciculos quos deleo in paginarum observatarum indicem addere",
        "tog-minordefault": "Notare omnes recensiones quasi minores",
        "tog-previewontop": "Monstrare praevisum ante capsam recensiti, non post ipsam",
        "tog-previewonfirst": "Praevisum monstrare recensione incipiente",
-       "tog-enotifwatchlistpages": "Mittere mihi litteras electronicas si pagina a me observata vel fasciculus a me observatus mutatur",
-       "tog-enotifusertalkpages": "Mittere mihi litteras electronicas si mea disputatio mutatur",
-       "tog-enotifminoredits": "Mittere mihi litteras electronicas etiam pro recensionibus minoribus",
-       "tog-enotifrevealaddr": "Monstrare inscriptio mea electronica in nuntiis notificantibus",
+       "tog-enotifwatchlistpages": "Mutata vel pagina vel fasciculo observando certior fiam",
+       "tog-enotifusertalkpages": "De mutata disputationis pagina mea certior fiam",
+       "tog-enotifminoredits": "Etiam de minoribus recensionibus certior fiam",
+       "tog-enotifrevealaddr": "Ostendatur inscriptio mea electronica in nuntiis notificantibus",
        "tog-shownumberswatching": "Numerum usorum observantium monstrare",
        "tog-oldsig": "Subscriptio, qua nunc uteris:",
        "tog-fancysig": "Subscriptio vicitext (sine nexu automatico)",
        "tog-uselivepreview": "Praevisum viventem adhibere",
        "tog-forceeditsummary": "Si recensionem non summatim descripsero, me roga si continuare velim",
-       "tog-watchlisthideown": "Celare recensiones meas in paginarum observatarum indice",
-       "tog-watchlisthidebots": "Celare recensiones automatarias in paginarum observatarum indice",
-       "tog-watchlisthideminor": "Celare recensiones minores in paginarum observatarum indice",
-       "tog-watchlisthideliu": "Celare recensiones usorum notorum in paginarum observatarum indice",
-       "tog-watchlisthideanons": "Celare recensiones usorum ignotorum in paginarum observatarum indice",
-       "tog-watchlisthidepatrolled": "Recensiones vigilatae paginas custoditas celare",
-       "tog-ccmeonemails": "Mitte mihi transcriptiones litterarum quas ad alios usores mitto",
+       "tog-watchlisthideown": "Recensiones meas in paginarum observatarum indice supprimere",
+       "tog-watchlisthidebots": "Recensiones per automaton factas in paginarum observatarum indice supprimere",
+       "tog-watchlisthideminor": "Minores recensiones in paginarum observatarum indice supprimere",
+       "tog-watchlisthideliu": "Recensiones ab usoribus notis factas in paginarum observatarum indice supprimere",
+       "tog-watchlistreloadautomatically": "Quamprimum aliquis selectus mutatus erit, indicem paginarum observatarum reficere (JavaScript required)",
+       "tog-watchlisthideanons": "Recensiones ab usoribus ignotis factas in paginarum observatarum indice supprimere",
+       "tog-watchlisthidepatrolled": "Recensiones custoditarum paginarum supprimere",
+       "tog-ccmeonemails": "Transcriptiones earum, quas ad alios usores misero litteras, mihi ipsi mittantur",
        "tog-diffonly": "Nihil nisi differentiam in pagina factam ostendatur",
        "tog-showhiddencats": "Categorias celatas monstrare",
        "tog-norollbackdiff": "Post reversionem paginae differentia neglegatur",
        "noemail": "Nulla inscriptio electronica invenitur per usorem \"$1\".",
        "mailerror": "Error in litteras electronicas inmittendas: $1",
        "acct_creation_throttle_hit": "His superioribus 24 horis ex isto loco IP iam {{PLURAL:$1|nomen impositum est|$1 nomina imposita sunt}}.\nNon autem licet plura sibi imponere. Igitur hodie ex hoc loco IP cetera nomina tibi non imponi possunt.",
-       "emailauthenticated": "Tua inscriptio electronica recognita est $3, $2.",
+       "emailauthenticated": "Inscriptio tua electronica recognita est $3, $2.",
        "emailconfirmlink": "Inscriptionem tuam electronicam adfirmare",
        "emaildisabled": "Huic paginae litteras electronicas mittere non licet.",
        "accountcreated": "Nomen impositum",
        "last": "prox",
        "page_first": "prim",
        "page_last": "ult",
-       "histlegend": "Selige pro dissimilitudine: indica emendationes in botones radiales et \"intrare\" in claviatura vel \"comparatio\" imprime ut conferas.<br />\nTitulus: '''({{int:cur}})''' = dissimilis ab emendatione novissima,\n'''({{int:last}})''' = dissimilis ab emendatione proxima, '''{{int:minoreditletter}}''' = recensio minor.",
+       "histlegend": "Ad seligendas differentias nota diversarum redactionum bullas et agi iube!<br />\nLegenda: '''({{int:cur}})''' = differentiam monstrabit inter hanc et novissimam redactionem,\n'''({{int:last}})''' = differentiam monstrabit inter hanc et superiorem redactionem,\n'''({{int:minoreditletter}})''' = recensio minor.",
        "history-fieldset-title": "Quaerere in paginae historia",
        "history-show-deleted": "Solum recensiones deletas monstrare",
        "histfirst": "veterrima",
        "revertmerge": "Inconfundere",
        "history-title": "Historia paginae \"$1\"",
        "lineno": "Linea $1:",
-       "compareselectedversions": "Conferre emendationes selectas",
+       "compareselectedversions": "Redactiones selectas conferre",
        "showhideselectedversions": "Monstrare/celare emendationes selectas",
        "editundo": "abrogare",
        "diff-empty": "(eadem)",
        "skin-preview": "Praevisum",
        "datedefault": "Nullum praeferentiae",
        "prefs-user-pages": "Paginae usoris",
-       "prefs-personal": "Minutiae rationis",
+       "prefs-personal": "Proprietates",
        "prefs-rc": "Nuper mutata",
        "prefs-watchlist": "Paginae observatae",
        "prefs-watchlist-days": "Numerus dierum displicandus in paginis tuis observatis:",
        "prefs-watchlist-edits-max": "Numerus maximus: 1000",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Tesseram mutare",
-       "prefs-email": "Optiones inscriptionis electronicae",
+       "prefs-email": "Modi de inscriptione electronica servandi",
        "prefs-rendering": "Conspectus",
        "saveprefs": "Servare praeferentias",
        "prefs-editing": "Mensura capsae verbi",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Oceanus Indicus",
        "timezoneregion-pacific": "Oceanus Pacificus",
-       "allowemail": "Sinere litteras electronicas inscriptioni electronicae meae mittere",
+       "allowemail": "Aliis usoribus concedere, ut litteras electronicas mittant",
        "prefs-searchoptions": "Quaerere",
        "prefs-namespaces": "Spatia nominalia",
        "default": "praedeterminatum",
        "prefs-emailconfirm-label": "Adfirmatio inscriptionis electronicae:",
        "youremail": "Inscriptio electronica:",
        "username": "Nomen usoris:",
+       "prefs-memberingroups": "{{PLURAL:$1|Categoria, cui|Categoriae, quibus}} $2 attribuitur:",
        "prefs-registration": "Tempus, quo nomen impositum est:",
        "yourrealname": "Nomen verum:",
        "yourlanguage": "Lingua:",
        "yourvariant": "Differentia linguae contentorum:",
        "yournick": "Subscriptio nova:",
-       "prefs-help-signature": "Cum in paginis disputationum scribas, \"<nowiki>~~~~</nowiki>\" conscribe, quod in subscriptionem tuam et indicationem temporis convertetur.",
+       "prefs-help-signature": "Commentationibus ad quanque disputationem factis ne subscribe nisi quater undulam (<nowiki>~</nowiki>) ponens! Quae quatuor undulae (<nowiki>~~~~</nowiki>) automatice in subscriptionem tuam et tempus subscribendi convertentur.",
        "badsig": "Subscriptio cruda non est valida; scrutina affixa HTML.",
        "badsiglength": "Subscriptio tua nimis longa est.\n{{PLURAL:$1|Una littera est|$1 litterae sunt}} longitudo maxima.",
        "yourgender": "Sexus:",
        "gender-unknown": "Indefinitus",
        "gender-male": "masculinus",
        "gender-female": "femininus",
+       "prefs-help-gender": "Liber vel libera es istum delectum habere.\nQuodsi feceris, programma eo utetur ad te rite iuxta genus tuum aut appellandum aut appellandam.\nQuod datum ab omnibus videbitur.",
        "email": "Litterae electronicae",
        "prefs-help-realname": "Nomen verum non necesse est.\nSi vis id dare, opera tua tibi ascribentur.",
-       "prefs-help-email": "Non necesse est inscriptionem electronicam dare. Qua tamen data licebit tibi tesseram novam tribuere, si eius oblitus eris.",
-       "prefs-help-email-others": "Si vis, sinit etiam aliis tecum loqui per tuam paginam usoris vel disputationis, nisi te reveles.",
+       "prefs-help-email": "Non necesse est inscriptionem electronicam dare. Qua tamen data tessera tibi tribui poterit nova, si prioris oblitus eris.",
+       "prefs-help-email-others": "Praeterea, si libeat, aliis concedas tibi nuntia per nexum in pagina vel disputatione tua positum mitttere electronicas.\nInscriptio tua electronica usoribus tibi scribentis non erit visibilis.",
        "prefs-help-email-required": "Inscriptio electronica necesse est.",
        "prefs-info": "Generalia",
        "prefs-i18n": "Sermonis delectus",
        "prefs-signature": "Subscriptio",
        "prefs-preview": "Praevisum",
-       "prefs-advancedwatchlist": "Praeferentiae monstrare",
+       "prefs-advancedwatchlist": "Indicis modi speciales",
        "prefs-displayrc": "Praeferentiae vultus",
        "prefs-displaywatchlist": "Praeferentiae vultus",
        "prefs-diffs": "Differentiae",
        "userrights-unchangeable-col": "Greges quos tibi non oportet mutare",
        "group": "Grex:",
        "group-user": "Usores",
-       "group-autoconfirmed": "Usores adfirmati automaticale",
+       "group-autoconfirmed": "Usores automatice confirmati",
        "group-bot": "Automata",
        "group-sysop": "Magistratus",
        "group-bureaucrat": "Grapheocrates",
        "group-suppress": "Censurae",
        "group-all": "(omnes)",
        "group-user-member": "{{GENDER:$1|Usor}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|Usor adfirmatus automaticale}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|Usor automatice confirmatus}}",
        "group-bot-member": "{{GENDER:$1|Automaton}}",
        "group-sysop-member": "{{GENDER:$1|Magistratus}}",
        "group-bureaucrat-member": "{{GENDER:$1|Grapheocrates}}",
        "group-suppress-member": "{{GENDER:$1|Censura}}",
        "grouppage-user": "{{ns:project}}:Usores",
-       "grouppage-autoconfirmed": "{{ns:project}}:Usores adfirmati automaticale",
+       "grouppage-autoconfirmed": "{{ns:project}}:Usores automatice confirmati",
        "grouppage-bot": "{{ns:project}}:Automata",
        "grouppage-sysop": "{{ns:project}}:Magistratus",
        "grouppage-bureaucrat": "{{ns:project}}:Grapheocrates",
        "movethispage": "Movere hanc paginam",
        "notargettitle": "Nullus scopus",
        "notargettext": "Paginam aut usorem non notavisti.",
-       "pager-newer-n": "{{PLURAL:$1|novior 1|noviores $1}}",
-       "pager-older-n": "{{PLURAL:$1|senior 1|seniores $1}}",
+       "pager-newer-n": "{{PLURAL:$1|recentiorem 1|recentiores $1}}",
+       "pager-older-n": "{{PLURAL:$1|superiorem 1|superiores $1}}",
        "suppress": "Censura",
        "booksources": "Librorum fontes",
        "booksources-search-legend": "Fontes impressas quaerere",
        "notvisiblerev": "Emendatio deleta est",
        "watchlist-details": "{{PLURAL:$1|$1 paginam|$1 paginas}} observas.",
        "wlheader-enotif": "Mutationes si quae factae erunt, electronice tibi nuntiabuntur.",
-       "wlheader-showupdated": "Paginae nondum a te inspectae typis <strong>crassioribus</strong> ostenduntur.",
+       "wlheader-showupdated": "Paginae nondum a te inspectae <strong>typis crassioribus</strong> ostenduntur.",
        "wlnote": "{{PLURAL:$1|Indicatur mutatio novissima|Indicantur '''$1''' mutationes novissimae}} abhinc {{PLURAL:$2|superiorem horam|superiores '''$2''' horas}} (ab $3, $4) factae.",
        "wlshowlast": "Monstrare proximas $1 horas $2 dies",
        "watchlistall2": "omnes",
        "contributions-title": "Conlationes usoris $1",
        "mycontris": "Conlationes",
        "anoncontribs": "Conlationes",
-       "contribsub2": "Pro $1 ($2)",
+       "contribsub2": "factae ab usore \"$1\" ($2)",
        "nocontribs": "Nullae mutationes inventae sunt ex his indiciis.",
        "uctop": "(vertex)",
        "month": "Ab mense (et prior):",
        "tooltip-save": "Servare mutationes tuas",
        "tooltip-preview": "Praevidere mutationes tuas, quaesumus hoc utere antequam servas!",
        "tooltip-diff": "Monstrare mutationes textui tuas",
-       "tooltip-compareselectedversions": "Inspicere, quantum contenta inter versiones selectas distent",
+       "tooltip-compareselectedversions": "Inspicere, quatenus contenta redactionum selectarum inter se distent",
        "tooltip-watch": "Addere hanc paginam tuis paginis observatis",
        "tooltip-recreate": "Recreare hanc paginam etiamsi deleta est",
        "tooltip-upload": "Incipere imponere",
index 70e0d64..c1be4f0 100644 (file)
        "mypreferencesprotected": "Dir hutt net d'Recht fir Är Astellungen z'änneren.",
        "ns-specialprotected": "Spezialsäite kënnen net verännert ginn.",
        "titleprotected": "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
-       "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme geliest däerf ginn.\n\nDeAdministrateur den d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
+       "filereadonlyerror": "De Fichier \"$1\" konnt net geännert ginn well de Repertoire vun de Fichieren \"$2\" nëmme geliest däerf ginn.\n\nDe System-Administrateur den d'Schreiwe gespaart huet, huet dës Erklärung uginn: \"$3\"",
        "invalidtitle-knownnamespace": "Net valabelen Titel mam Nummraum \"$2\" a mam Text \"$3\"",
        "invalidtitle-unknownnamespace": "Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text \"$2\"",
        "exception-nologin": "Net ageloggt",
        "foreign-structured-upload-form-label-own-work": "Dëst ass mäin eegent Wierk",
        "foreign-structured-upload-form-label-infoform-categories": "Kategorien",
        "foreign-structured-upload-form-label-infoform-date": "Datum",
+       "foreign-structured-upload-form-3-label-question-website": "Hutt Dir dëst Bild vun engem Internetsite erofgelueden, oder beim Sichen no engem Bild fonnt?",
+       "foreign-structured-upload-form-3-label-question-ownwork": "Hutt Dir dëst Bild (Foto, Zeechnung, asw.) selwer gemaacht?",
        "foreign-structured-upload-form-3-label-yes": "Jo",
        "foreign-structured-upload-form-3-label-no": "Neen",
        "backend-fail-stream": "De Fichier $1 konnt net iwwerdroe ginn.",
        "export-download": "Als XML-Datei späicheren",
        "export-templates": "Inklusiv Schablounen",
        "export-pagelinks": "Verlinkte Säiten mat exportéieren, bis zu enger Déift vun:",
+       "export-manual": "Säite manuell derbäisetzen:",
        "allmessages": "All Systemmessagen",
        "allmessagesname": "Numm",
        "allmessagesdefault": "Standardtext",
index b454bb8..bc25dfc 100644 (file)
        "undelete_short": "احیای {{PLURAL:$1|یإ دةسکاری|$1 دةسکاری}}",
        "viewdeleted_short": "نمایش {{PLURAL:$1|یک ویرایش حذف‌شده|$1 ویرایش حذف‌شده}}",
        "protect": "پروژۀ",
-       "protect_change": "تغییر/آلِشت",
+       "protect_change": "گؤەڕانن/تغییر",
        "protectthispage": "محافظت إژ ئئ وةڵگة",
-       "unprotect": "تغییر محافظت",
+       "unprotect": "گؤەڕانن/تغییر محافظت",
        "unprotectthispage": "تغییر محافظت ئئ وةڵگة",
        "newpage": "وةڵگة  تازۀ",
        "talkpage": "گةپ دةربارة ئئ وةڵگة",
        "nstab-main": "وةڵگة/پەڕە",
        "nstab-user": "وۀلگۀ کاربۀر",
        "nstab-media": "وةڵگة رسانه",
-       "nstab-special": "Ù\88Û\80Ù\84Ú¯Û\80/Ù¾Û\80رÛ\80 Ù\88Û\8cÚ\98Û\80",
+       "nstab-special": "Ù\88Û\95ÚµÚ¯Û\95(Ù¾Û\95Ú\95Û\95\88Û\8cÚ\98Û\95",
        "nstab-project": "وۀلگۀ پروژۀ",
        "nstab-image": "فایل",
        "nstab-mediawiki": "پیغام",
        "nav-login-createaccount": " إ نؤم هةتن سیستم/ حساوو کاربةری سازین",
        "userlogin": " إ نؤم هةتن سیستم/ حساوو کاربةری سازین",
        "userloginnocreate": "نؤم هۀتن سیستم",
-       "logout": "دةرچئن/خروج",
-       "userlogout": "دةرچئن/خروج",
+       "logout": "دەرچێن|خروج",
+       "userlogout": "دەرچێن|خروج",
        "notloggedin": "وارد سیستم نؤینۀ",
        "userlogin-noaccount": "حساوو کاربۀری نرین؟",
        "userlogin-joinproject": "{{SITENAME}}نام نؤیسی کۀن",
        "pt-login": "نؤم هۀتن.",
        "pt-login-button": "نؤم هۀتن سیستم",
        "pt-createaccount": "حساووئ أرا ووژتان بِسازِن",
-       "pt-userlogout": "دةرچئن/خروج",
+       "pt-userlogout": "دەرچێن|خروج",
        "php-mail-error-unknown": "خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی",
        "user-mail-no-addy": "تلاش برای ارسال ایمیل بدون آدرس ایمیل.",
        "user-mail-no-body": "سعی کردید ایمیلی با محتوای بی‌دلیل کوتاه و یا خالی بفرستید.",
        "changepassword": "تغییردائن رمز",
        "resetpass_announce": "شما باید برای پایان ورود به سامانه، گذرواژهٔ جدیدی را تنظیم کنید.",
-       "resetpass_header": "تغییر گذرواژهٔ حساب کاربری",
+       "resetpass_header": "گؤەڕانن/تغییر رمز حساب کاربری",
        "oldpassword": "گذرواژهٔ پیشین:",
        "newpassword": "گذرواژهٔ تازه:",
        "retypenew": "گذرواژهٔ تازه را دوباره وارد کنید",
        "changeemail-newemail-help": "برای حذف ایمیل باید این بخش را خالی رها کنید در نتیجه امکان بازگردانی گذرواژه و دریافت ایمیل از ویکی برای شما مقدور نخواهد بود.",
        "changeemail-none": "(هؤیچ کام)",
        "changeemail-password": "گذرواژهٔ {{SITENAME}} هؤمة:",
-       "changeemail-submit": "تغییر ایمیل",
+       "changeemail-submit": "گؤەڕانن/تغییر ایمیل",
        "changeemail-throttled": "شما به مراتب برای ورود تلاش کرده‌اید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
        "changeemail-nochange": "لطفاً رایانامهٔ جدید و متفاوتی وارد کنید.",
        "resettokens": "بازنشانی شناساننده‌ها",
        "revdelete-hide-comment": "خلاصة دةسکاری",
        "revdelete-hide-user": "نام کاربری/نشانی آی‌پی",
        "revdelete-hide-restricted": "فرونشانی اطلاعات برای مدیران به همراه دیگران",
-       "revdelete-radio-same": "(بدون تغییر)",
+       "revdelete-radio-same": "(بدون گؤەڕانن/تغییر )",
        "revdelete-radio-set": "آشاریا/پنهان",
        "revdelete-radio-unset": "دیارۀ-نمایان",
        "revdelete-suppress": "از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.",
        "revdelete-failure": "'''پیدایی ورژن ها قابل به روز کردن نیست:'''\n$1",
        "logdelete-success": "تغییر پیدایی مورد با موفقیت انجام شد.",
        "logdelete-failure": "'''پیدایی سیاهه‌ها قابل تنظیم نیست:'''\n$1",
-       "revdel-restore": "تغییر پیدایی",
+       "revdel-restore": "گؤەڕانن/تغییر پیدایی",
        "pagehist": "تاریخ وةڵگة",
        "deletedhist": "تاریخچهٔ پاک شده",
        "revdelete-hide-current": "خطا در پنهان کردن مورد مورخ $2 ساعت $1: این نسخه، ورژن اخیر است و قابل پنهان کردن نیست.",
        "sessionfailure-title": "خطای نشست کاربری",
        "sessionfailure": "به نظر می‌رسد مشکلی در مورد نشست کاربری شما وجود دارد؛\nعمل درخواست شده در اقدامی پیشگیرانه در برابر ربوده‌شدن اطلاعات نشست کاربری، لغو شد.\nلطفاً دکمهٔ «بازگشت» را در مرورگر خود بفشارید و صفحه‌ای که از آن به اینجا رسیده‌اید را دوباره فراخوانی کنید، سپس مجدداً سعی کنید.",
        "changecontentmodel": "ویرایش نمونه محتوای یک صفحه",
-       "changecontentmodel-legend": "تغییر نوع محتوی",
+       "changecontentmodel-legend": "گؤەڕانن/تغییر نوع محتوی",
        "changecontentmodel-title-label": "عنوان وةڵگة",
        "changecontentmodel-model-label": "نمونه محتوای جدید",
        "changecontentmodel-reason-label": ":دةلیل",
-       "changecontentmodel-success-title": "نمونه محتوی تغییر یافت",
+       "changecontentmodel-success-title": "نمونه محتوی گؤەڕیا/تغییر یافت",
        "changecontentmodel-success-text": "نوع محتوی [[:$1]]  تغییر یافت",
        "changecontentmodel-cannot-convert": "محتوی در [[:$1]] نمی‌تواند به گونه‌ای از $2 تبدیل شود.",
        "changecontentmodel-nodirectediting": "نمونه محتوی $1 امکان ویرایش مستقیم را پشتیبانی نمی‌کند",
        "modifiedarticleprotection": "وضعیت محافظت «[[$1]]» را تغییر داد",
        "unprotectedarticle": "صفحهٔ «[[$1]]» را از محافظت بیرون آورد",
        "movedarticleprotection": "تنظیمات محافظت را از «[[$2]]» به «[[$1]]» منتقل کرد",
-       "protect-title": "تغییر وضعیت محافظت «$1»",
+       "protect-title": "گؤەڕانن/تغییر وضعیت محافظت «$1»",
        "protect-title-notallowed": "مشاهده سطح حفاظت  \" $1 \"",
        "prot_1movedto2": "[[$1]] به [[$2]] منتقل بی",
        "protect-badnamespace-title": "فضای نام بدون محافظت",
        "allmessagesnotsupportedDB": "این صفحه نمی‌تواند استفاده شود به این دلیل که <bdi>'''$wgUseDatabaseMessages'''</bdi> غیرفعال شده‌است.",
        "allmessages-filter-legend": "پالانۀل/فیلترۀل",
        "allmessages-filter": "پالودن بر اساس وضعیت شخصی‌سازی:",
-       "allmessages-filter-unmodified": "تغییر نیافته",
+       "allmessages-filter-unmodified": "نگؤەڕیائە/تغییرنیافته",
        "allmessages-filter-all": "کۆل",
-       "allmessages-filter-modified": "تغییر یافته",
+       "allmessages-filter-modified": "گؤەڕیائە/تغییریافته",
        "allmessages-prefix": "پالودن بر اساس پسوند:",
        "allmessages-language": ":زوون",
        "allmessages-filter-submit": "بِچۆ",
-       "allmessages-filter-translate": "Ú\86اÙ\88Ù\88اشÛ\80گر زوون",
+       "allmessages-filter-translate": "Ú\86اÙ\88Ù\88اشÛ\95Ú©Ù\90ردÙ\86 زوون",
        "thumbnail-more": "کۀلنگ کِردن",
        "filemissing": "پرونده وجود ندارد",
        "thumbnail_error": "خطا در ایجاد بندانگشتی: $1",
        "tooltip-pt-mycontris": "فهرست مشارکت‌های شما",
        "tooltip-pt-anoncontribs": "لیست دةسکاریةل دؤرس بی/سازریا إژ ئئ آدرس ای پی",
        "tooltip-pt-login": "توصیه مۀکیم بونإ نام سامانه ، هۀرچۀند اجباری نیۀ",
-       "tooltip-pt-logout": "دةرچئن/خروج",
+       "tooltip-pt-logout": "دەرچێن|خروج",
        "tooltip-pt-createaccount": "مکئس تانۀ مۀکیم حساووئ بسازن و بونإ سامانۀ؛ هرچۀند حساوو کاربری سازین دل .بخوایۀ",
        "tooltip-ca-talk": "گۀپ/قسۀ دۀربارۀ بنچۀک/محتوا وۀلگۀ",
        "tooltip-ca-edit": "ئئ وۀلگۀ دۀسکاری کۀن",
        "tooltip-ca-viewsource": ".ئئ وۀلگۀ محافظۀت بیۀ\nمۀتؤنین  متن مبدأ/بنچۀک بؤینین",
        "tooltip-ca-history": "ورژن دؤمائن/پئش ئئ وۀلگۀ",
        "tooltip-ca-protect": "محافظت إژ ئئ وةڵگة",
-       "tooltip-ca-unprotect": "تغییر محافظت ئئ وةڵگة",
+       "tooltip-ca-unprotect": "گؤەڕانن/تغییر محافظت ئئ وةڵگة",
        "tooltip-ca-delete": "حةذف ئئ وةڵگة",
        "tooltip-ca-undelete": "بازگرداندن نسخه‌های صفحهٔ حذف‌شده",
        "tooltip-ca-move": "جاوواز کردن ئئ وۀلگۀ",
        "pageinfo-hidden-categories": "{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )",
        "pageinfo-templates": "{{PLURAL:$1|الگو|الگوها}} استفاده‌شده ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجانش‌شده در ($1)",
-       "pageinfo-toolboxlink": "اطÙ\84اعات Ù\88Û\80Ù\84Ú¯Û\80/Ù¾Û\80رÛ\80",
+       "pageinfo-toolboxlink": "اطÙ\84اعات Ù\88Û\95ÚµÚ¯Û\95(Ù¾Û\95Ú\95Û\95)",
        "pageinfo-redirectsto": "تغییرمسیر به",
        "pageinfo-redirectsto-info": "زانستةنیةل",
        "pageinfo-contentpage": "شمرده شده به عنوان صفحهٔ محتوایی",
        "exif-serialnumber": "شماره سریال دوربین",
        "exif-cameraownername": "صاحب دوربین",
        "exif-label": "برچسب",
-       "exif-datetimemetadata": "تاریخ آخرین تغییر فراداده",
+       "exif-datetimemetadata": "تاریخ آخرین گؤەڕانن/تغییر فراداده",
        "exif-nickname": "نام غیررسمی تصویر",
        "exif-rating": "امتیاز (از 5)",
        "exif-rightscertificate": "گواهینامه مدیریت حقوق",
        "blankpage": "وةڵگة خالی",
        "intentionallyblankpage": "این وةڵگة به طور عمدی خالی گذاشته شده است.",
        "external_image_whitelist": " #این سطر را همان‌گونه که هست رها کنید<pre>\n#عبارت‌های باقاعده (regex) را در زیر قرار دهید (فقط بخشی که بین // قرار می‌گیرد)\n#آن‌ها با نشانی اینترنتی تصاویر خارجی پیوند داده شده تطبیق داده می‌شوند\n#مواردی که مطابق باشند به صورت تصویر نمایش می‌یابند، و در غیر این صورت تنها یک پیوند به تصویر نمایش می‌یابد\n#سطرهایی که با # آغاز شوند به عنوان توضیحات در نظر گرفته می‌شوند\n#این سطرها به کوچکی و بزرگی حروف حساس هستند\n\n#عبارت‌های باقاعده (regex)  را زیر این سطر قرار دهید. این سطر را همان‌گونه که هست رها کنید</pre>",
-       "tags": "برچسب‌های تغییر مجاز",
+       "tags": "برچسب‌های گؤەڕانن/تغییر مجاز",
        "tag-filter": ":فیلتر کۀ[[Special:Tags|برچسب‌ۀل]]",
        "tag-filter-submit": "پالانۀل/فیلترۀل",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|بۀرچۀسب|بۀرچۀسبۀل}}]]:$2)",
        "pagelang-use-default": "استفاده إژ زوون پئش فرض",
        "pagelang-select-lang": "زوون انتخاب کۀ",
        "pagelang-submit": "تائید کردن",
-       "right-pagelang": "تغییر وةڵگة زوون",
-       "action-pagelang": "تغییر زوون وةڵگة",
+       "right-pagelang": "گؤەڕانن/تغییر وةڵگة زوون",
+       "action-pagelang": "گؤەڕانن/تغییر زوون وةڵگة",
        "log-name-pagelang": "تغییر سیاههٔ زبان",
        "log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2| تغییریافت}} زبان صفحه برای  $3  از  $4  به  $5 .",
        "special-characters-title-minus": "علامت منفی",
        "mw-widgets-dateinput-no-date": "هیچ داده‌ای انتخاب نشده",
        "mw-widgets-titleinput-description-new-page": "ئئ وةڵگة هنوز/حالی وجود نِئرێ",
-       "mw-widgets-titleinput-description-redirect": "تغییر مسیر به $1",
+       "mw-widgets-titleinput-description-redirect": "گؤەڕانن/تغییر مسیر به $1",
        "api-error-blacklisted": "لطفاً یک عنوان توصیفی متفاوت انتخاب کنید."
 }
index 9e1c5cb..d78cf6d 100644 (file)
        "createaccountreason": "कारण:",
        "createacct-reason": "कारण:",
        "createacct-reason-ph": "अहा इगो आर दोसर खाता कियाक बनउने जा रहल छि",
-       "createacct-captcha": "सुरक्षा जाँच",
-       "createacct-imgcaptcha-ph": "उपरोक्त पाठ लिखु",
        "createacct-submit": "अपन खाता बनाउ",
        "createacct-another-submit": "दोसर खाता बनाउ",
        "createacct-benefit-heading": "{{SITENAME}} अहि जोका लोकनिसभ द्वारा बनावल गेल अछि।",
        "passwordreset-emailtext-ip": "कियो (सम्भवतः अहाँ, अन्तर्जाल सेवा कल्पक $1 सँ) अपन लेखा विवरणक पुनःस्मरणक लेल अनुरोध केलहुँ ऐ लेल {{ अन्तर्जालक नाम}} ($4). ई प्रयोक्ता {{PLURAL:$3|लेखा अछि| लेखा सभ अछि}}\nऐ ई-पत्र संकेतसँ सम्बन्धित:\n\n$2\n\n{{PLURAL:$3|ई अल्पकालक कूटशब्द| ई सभ अल्पकालक कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 पाँच दिन}}.\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द चुनू।. जौं कियो आन ई आग्रह केने अछि, वा अहाँकेँ अपन पुरान कूटशब्द मोन पड़ि गेल अछि , आ आब एकरा बदलबाक इच्छा नै राखै छी तँ अहाँ ऐ संदेशकेँ बिसरि जाउ आ अपन पुरान कूटशब्दक प्रयोग करैत रहू।",
        "passwordreset-emailtext-user": "प्रयोक्ता $1 {{अन्तर्जाल}} पर अहाँक खाता विवरणक {{SITENAME}} लेल फेरसँ ($4) आग्रह केने छथि। ई प्रयोक्ता {{PLURAL:$3|खाता अछि|खाता सभ अछि}} ऐ ई-पत्र संकेतसँ जुड़ल: $2\n{{PLURAL:$3| ई अस्थायी कूटशब्द|ई सभ अस्थायी कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 दिन}} मे।\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द आब चुनू। जँ कियो दोसर ई आग्रह केने छथि, वा जँ अहाँकेँ अपन मूल कूटशब्द मोन पड़ि गेल अछि, आ अहाँ आब ओइ कूटशब्दकेँ नै बदलऽ चाहै छी, अहाँ ऐ संदेशकेँ बिसरि सकै छी आ अपन पुरान कूटशब्दक प्रयोग जारी राखि सकै छी।",
        "passwordreset-emailelement": "प्रयोक्ता: \n$1\n\nअस्थायी कूटशब्द: \n$2",
-       "passwordreset-emailsent": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
+       "passwordreset-emailsentemail": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
        "passwordreset-emailsent-capture": "एकटा स्मरण ई-पत्र पठाएल गेल अछि, जे नीचाँ देखाएल अछि।",
        "passwordreset-emailerror-capture": "एकटा स्मरण ई-पत्र बनाएल गेल अछि, जे नीचाँ देखाएल अछि, मुदा प्र्योक्ताकेँ एकरा पठेबाक प्रयास विफल भेल: $1",
        "changeemail": "ई-पत्र संकेत बदलू",
-       "changeemail-text": "अपन ई-पत्र संकेत बदलबा लेल ऐ आवेदनकेँ भरू। अहाँकेँ ऐ परिवर्तनक अनुमोदन लेल अपन कूटशब्द भरए पड़त।",
+       "changeemail-header": "ई-पत्र पता खाता बदलू",
        "changeemail-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे देखबाले सम्प्रवेशित हुअए पड़त।",
        "changeemail-oldemail": "अखुनका ई-पत्र संकेत:",
        "changeemail-newemail": "नव ई-पत्र संकेत:",
        "prefs-diffs": "अन्तर निर्धारक सभ",
        "prefs-help-prefershttps": "इ प्राथमिकता अहाँके फेर स सम्प्रवेश करलाक बाद प्रभाव पडत।",
        "prefs-tabs-navigation-hint": "सुझाव: अहाँ टैब्स सूचीमे टैब्सके बीच आवागमन करवाक लेल बाम आर दाहिना बागलके कुंजिसभके उपयोग कइर सकैत छी।",
-       "email-address-validity-valid": "ई-पत्र संकेत मान्य बुझाइत अछि",
-       "email-address-validity-invalid": "एकटा मान्य ई-पत्र संकेत लिखू",
        "userrights": "प्रयोक्ता अधिकारक प्रबन्धन",
        "userrights-lookup-user": "प्रयोक्ता संवर्ग सभक प्रबन्ध करू",
        "userrights-user-editname": "एकटा प्रयोक्तानाम लिखू:",
        "nchanges": "$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम बेर देखला के बाद स}}",
        "enhancedrc-history": "इतिहास",
-       "recentchanges": "लगक परिवर्तन सभ",
+       "recentchanges": "लगक परिवर्तनसभ",
        "recentchanges-legend": "नव परिवर्तन सभक विकल्प सभ",
        "recentchanges-summary": "ई पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।",
        "recentchanges-noresult": "इ अवधिके दौरान इ मापदंडके पूर्ण करेत समय कोनो परिवर्तन नै केएल गेल अछि।",
        "wlheader-showupdated": "पन्ना सभ जे अहाँक एतए अन्तिम बेर अएलाक बाद बदलल अछि तकर सूची देल अछि '''गाढ़''' मे",
        "wlnote": "नीचाँ {{PLURAL:$1|is the last change|are the last '''$1''' changes}} अन्तिम {{PLURAL:$2|hour|'''$2''' hours}} $3, $4 जेना।",
        "wlshowlast": "देखाउ अन्तिम $1 घण्टा $2 दिन",
+       "watchlistall2": "सभ",
        "watchlist-options": "साकांक्षसूचीक विकल्प सभ",
        "watching": "ताकिमे...",
        "unwatching": "छोड़ल ...",
        "movenosubpage": "अहि पन्ना कऽ कोनो उप पन्ना नहि अछि।",
        "movereason": "कारण:",
        "revertmove": "फेरसँ वएह",
-       "delete_and_move": "मेटाउ आ हटू",
        "delete_and_move_text": "==हटाबैक जरूरत==\nलक्ष्य पृष्ठ \"[[:$1]]\" पहिने सें अस्तित्व में अछि. \nनाम के बदलहि ले की अहां एकरा हटाबय चाहैत छी ?",
        "delete_and_move_confirm": "हँ, पन्ना मेटाउ",
        "delete_and_move_reason": "\"[[$1]]\" सँ घसकेबा लेल जगह बनेबा लेल मेटाएल गेल",
index 796372d..f20007b 100644 (file)
        "passwordreset-emailtext-ip": "Некој (веројатно вие, од IP-адресата $1) побара измена на вашата\nлозинка за {{SITENAME}} ($4). Оваа е-поштенска адреса е наведена во\n{{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:\n\n$2\n\n{{PLURAL:$3|Оваа привремена лозинка ќе истече|Овие привремени лозинки ќе истечат}} во рок од {{PLURAL:$5|еден ден|$5 дена}}.\nСега треба да се најавите и да внесете нова лозинка. Ако ова барање го\nпоставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате\nда ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.",
        "passwordreset-emailtext-user": "Корисникот $1 на {{SITENAME}} побара измена на вашата лозинка на {{SITENAME}}\n($4). Оваа е-поштенска адреса е наведена во {{PLURAL:$3|следнава корисничка сметка|следниве кориснички сметки}}:\n\n$2\n\n{{PLURAL:$3|Оваа привремена лозинка ќе истече|Овие привремени лозинки ќе истечат}} во рок од {{PLURAL:$5|еден ден|$5 дена}}.\nСега треба да се најавите и да внесете нова лозинка. Ако ова барање го\nпоставил некој друг, или пак во меѓувреме сте се сетиле на лозинката, и не сакате\nда ја менувате, тогаш слободно занемарете ја поракава и продолжете да ја користите старата.",
        "passwordreset-emailelement": "Корисничко име: \n$1\n\nПривремена лозинка: \n$2",
-       "passwordreset-emailsentemail": "Ð\90ко Ð¾Ð²Ð° Ðµ Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80анаÑ\82а Ðµ-поÑ\88Ñ\82а Ð·Ð° вашата сметка, тогаш ќе ви биде испратено писмо за задавање на нова лозинка.",
-       "passwordreset-emailsentusername": "Ако има соодветна регистрирана е-пошта, тогаш ќе ви биде испратена порака за промена на лозинката.",
+       "passwordreset-emailsentemail": "Ð\90ко Ð¾Ð²Ð° Ðµ Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80анаÑ\82а Ðµ-поÑ\88Ñ\82а Ð¿Ð¾Ð²Ñ\80зана Ñ\81о вашата сметка, тогаш ќе ви биде испратено писмо за задавање на нова лозинка.",
+       "passwordreset-emailsentusername": "Ако има соодветна регистрирана е-пошта поврзана со ова корисничко име, тогаш ќе ви биде испратена порака за промена на лозинката.",
        "passwordreset-emailsent-capture": "Испратено е писмо за измена на лозинката (прикажано подолу).",
        "passwordreset-emailerror-capture": "Создадено е писмо за измена на лозинката (прикажано подолу), но не успеав да го испратам на {{GENDER:$2|корисникот}}: $1",
        "changeemail": "Смени или отстрани е-пошта",
        "upload-form-label-select-file": "Одберете податотека",
        "upload-form-label-infoform-title": "Подробно",
        "upload-form-label-infoform-name": "Назив",
+       "upload-form-label-infoform-name-tooltip": "Краток и единствен наслов на податотеката, кој ќе служи како нејзин назив. Можете да користите прост јазик со меѓупростор, но не пишувајте ја податотечната наставка.",
        "upload-form-label-infoform-description": "Опис",
+       "upload-form-label-infoform-description-tooltip": "Накратко опишете го сето она што е значајно за делото. Ако е фотографија, споменете ги главните нешта што се прикажани на неа, настанот или местото.",
        "upload-form-label-usage-title": "Употреба",
        "upload-form-label-usage-filename": "Назив на податотеката",
        "foreign-structured-upload-form-label-own-work": "Ова е мое дело",
        "export-download": "Зачувај како податотека",
        "export-templates": "Вклучи и шаблони",
        "export-pagelinks": "Вклучи поврзани страници до длабочина од:",
+       "export-manual": "Додајте страници рачно:",
        "allmessages": "Системски пораки",
        "allmessagesname": "Име",
        "allmessagesdefault": "Текст по основно",
        "size-zetapixel": "$1 ЗП",
        "size-yottapixel": "$1 ЈП",
        "bitrate-bits": "$1 б/с",
-       "bitrate-kilobits": "$1 Ðºб/с",
+       "bitrate-kilobits": "$1 Ð\9aб/с",
        "bitrate-megabits": "$1 Мб/с",
        "bitrate-gigabits": "$1 Гб/с",
        "bitrate-terabits": "$1 Тб/с",
        "expand_templates_preview": "Преглед",
        "expand_templates_preview_fail_html": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML и се јави губиток на седнички податоци, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
        "expand_templates_preview_fail_html_anon": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML, а вие не сте најавени, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
+       "expand_templates_input_missing": "Треба да внесете некаков текст.",
        "pagelanguage": "Изборник за јазик на страницата",
        "pagelang-name": "Страница",
        "pagelang-language": "Јазик",
        "mediastatistics": "Статистики за слики и снимки",
        "mediastatistics-summary": "Статистики за подигнати типови податотеки. Се зема предвид само последната верзија на податотеката. Старите и избришаните верзии не се бројат.",
        "mediastatistics-nbytes": "{{PLURAL:$1|Еден бајт|$1 бајти}} ($2; $3%)",
-       "mediastatistics-bytespertype": "Вкупен обем на пасусот: $1 бајти.",
-       "mediastatistics-allbytes": "Вкупен обем на сите податотеки: $1 бајти.",
+       "mediastatistics-bytespertype": "Вкупен обем на пасусот: {{PLURAL:$1|$1 бајт|$1 бајти}} ($2; $3%).",
+       "mediastatistics-allbytes": "Вкупен обем на сите податотеки: {{PLURAL:$1|$1 бајт|$1 бајти}} ($2).",
        "mediastatistics-table-mimetype": "MIME-тип",
        "mediastatistics-table-extensions": "Можни додатоци",
        "mediastatistics-table-count": "Број на податотеки",
index b5e5065..ffd2a23 100644 (file)
        "upload-form-label-select-file": "പ്രമാണം തിരഞ്ഞെടുക്കുക",
        "upload-form-label-infoform-title": "വിശദാംശങ്ങൾ",
        "upload-form-label-infoform-name": "പേര്‌",
+       "upload-form-label-infoform-name-tooltip": "പ്രമാണത്തിനുള്ള ചെറിയ അനന്യമായ തലക്കെട്ട്. വാക്കുകൾക്കിടയിൽ ഇടവിട്ടുള്ള ലളിതഭാഷ ഉപയോഗിക്കാം. പ്രമാണത്തിന്റെ എക്സ്റ്റെൻഷൻ ഉൾപ്പെടുത്തരുത്.",
        "upload-form-label-infoform-description": "വിവരണം",
+       "upload-form-label-infoform-description-tooltip": "ഈ കൃതിയെക്കുറിച്ചുള്ള ശ്രദ്ധേയമായ എല്ലാം ചുരുക്കി ചേർക്കുക.\nഒരു ഫോട്ടോയിൽ, പതിഞ്ഞിരിക്കുന്ന പ്രധാന കാര്യം, വേള, സ്ഥലം തുടങ്ങിയ വിവരങ്ങൾ ഉൾപ്പെടുത്താം.",
        "upload-form-label-usage-title": "ഉപയോഗം",
        "upload-form-label-usage-filename": "പ്രമാണത്തിന്റെ പേര്",
        "foreign-structured-upload-form-label-own-work": "ഇതെന്റെ സ്വന്തം സൃഷ്ടി ആണ്",
        "wlshowhideanons": "അജ്ഞാത ഉപയോക്താക്കൾ",
        "wlshowhidepatr": "റോന്തു ചുറ്റിയ മാറ്റങ്ങൾ",
        "wlshowhidemine": "എന്റെ തിരുത്തുകൾ",
+       "wlshowhidecategorization": "താൾ വർഗ്ഗീകരണം",
        "watchlist-options": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ സജ്ജീകരണങ്ങൾ",
        "watching": "ശ്രദ്ധിക്കുന്നു...",
        "unwatching": "അവഗണിക്കുന്നു...",
        "rollback-success": "$1 ചെയ്ത തിരുത്ത് തിരസ്ക്കരിച്ചിരിക്കുന്നു; $2 ചെയ്ത തൊട്ടു മുൻപത്തെ പതിപ്പിലേക്ക് സേവ് ചെയ്യുന്നു.",
        "sessionfailure-title": "സെഷൻ പരാജയപ്പെട്ടിരിക്കുന്നു",
        "sessionfailure": "താങ്കളുടെ ലോഗിൻ സെഷനിൽ പ്രശ്നങ്ങളുള്ളതായി കാണുന്നു;\nസെഷൻ തട്ടിയെടുക്കൽ ഒഴിവാക്കാനുള്ള മുൻകരുതലായി ഈ പ്രവൃത്തി റദ്ദാക്കിയിരിക്കുന്നു.\nദയവായി പിന്നോട്ട് പോയി താങ്കൾ വന്ന താളിൽ ചെന്ന്, വീണ്ടും ശ്രമിക്കുക.",
+       "changecontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "changecontentmodel-title-label": "താളിന്റെ തലക്കെട്ട്",
        "changecontentmodel-model-label": "പുതിയ ഉള്ളടക്ക രീതി",
        "changecontentmodel-reason-label": "കാരണം:",
        "export-download": "ഒരു പ്രമാണമാക്കി സൂക്ഷിക്കുക",
        "export-templates": "ഫലകങ്ങളും ഉൾപ്പെടുത്തുക",
        "export-pagelinks": "ഉൾപ്പെടുത്തേണ്ട കണ്ണികളുള്ള താളുകളുടെ ആഴം:",
+       "export-manual": "താളുകൾ ചേർക്കുക:",
        "allmessages": "സന്ദേശസഞ്ചയം",
        "allmessagesname": "പേര്‌",
        "allmessagesdefault": "സ്വതേയുള്ള ഉള്ളടക്കം",
        "logentry-suppress-block": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തെ $1 {{GENDER:$2|തടഞ്ഞിരിക്കുന്നു}}",
        "logentry-suppress-reblock": "$5 $6 കാലത്തേക്ക് {{GENDER:$4|$3}} എന്ന അംഗത്വത്തിന്റെ തടയൽ സജ്ജീകരണങ്ങൾ $1 {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-import-upload": "പ്രമാണ അപ്‌ലോഡ് വഴി $3 എന്ന താൾ $1 {{GENDER:$2|ഇറക്കുമതി ചെയ്തിരിക്കുന്നു}}",
+       "logentry-import-upload-details": "പ്രമാണം അപ്‌ലോഡ് ചെയ്യുക വഴി $3 ($4 {{PLURAL:$4|നാൾപ്പതിപ്പ്|നാൾപ്പതിപ്പുകൾ}}) $1 {{GENDER:$2|ഇറക്കുമതി ചെയ്തിരിക്കുന്നു}}",
        "logentry-import-interwiki": "മറ്റൊരു വിക്കിയിൽ നിന്നും $3 എന്ന താൾ $1 {{GENDER:$2|ഇറക്കുമതി ചെയ്തിരിക്കുന്നു}}",
+       "logentry-import-interwiki-details": "$5 വിക്കിയിൽ നിന്നും $3 ($4 {{PLURAL:$4|നാൾപ്പതിപ്പ്|നാൾപ്പതിപ്പുകൾ}}) $1 {{GENDER:$2|ഇറക്കുമതി ചെയ്തിരിക്കുന്നു}}",
        "logentry-merge-merge": "$3 എന്ന താൾ $4 എന്നതിലേക്ക് ($5 നാൾപ്പതിപ്പ് വരെ), $1 {{GENDER:$2|ലയിപ്പിച്ചു}}",
        "logentry-move-move": "$1 എന്ന ഉപയോക്താവ് $3 എന്ന താൾ $4 എന്നാക്കി {{GENDER:$2|മാറ്റിയിരിക്കുന്നു}}",
        "logentry-move-move-noredirect": "$3 എന്ന താൾ $4 എന്ന തലക്കെട്ടിലേയ്ക്ക് തിരിച്ചുവിടലില്ലാതെ $1 {{GENDER:$2|മാറ്റി}}",
        "expand_templates_preview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
        "expand_templates_preview_fail_html": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാലും, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നതിനാലും, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ വീണ്ടും ശ്രമിക്കുക.</strong>\nഇപ്പോഴും പ്രവർത്തിക്കുന്നില്ലെങ്കിൽ, [[Special:UserLogout|പുറത്ത് കടന്ന്]] വീണ്ടും പ്രവേശിച്ച ശേഷം പരീക്ഷിക്കുക.",
        "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാലും, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നതിനാലും, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ [[Special:UserLogin|പ്രവേശിച്ച ശേഷം]] വീണ്ടും ശ്രമിക്കുക.</strong>",
+       "expand_templates_input_missing": "ചില വിവരങ്ങളെങ്കിലും താങ്കൾ നൽകിയിരിക്കണം.",
        "pagelanguage": "താളിന്റെ ഭാഷാ തിരഞ്ഞെടുപ്പ് സൗകര്യം",
        "pagelang-name": "താൾ",
        "pagelang-language": "ഭാഷ",
        "pagelang-use-default": "സ്വതേയുള്ള ഭാഷ ഉപയോഗിക്കുക",
        "pagelang-select-lang": "ഭാഷ തിരഞ്ഞെടുക്കുക",
+       "pagelang-submit": "സമർപ്പിക്കുക",
        "right-pagelang": "താളിന്റെ ഭാഷ മാറ്റുക",
        "action-pagelang": "താളിന്റെ ഭാഷ മാറ്റുക",
        "log-name-pagelang": "ഭാഷ മാറ്റലിന്റെ രേഖ",
        "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
        "mediastatistics-summary": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണ തരങ്ങളെക്കുറിച്ചുള്ള സ്ഥിതിവിവരക്കണക്കുകൾ. ഇത് പ്രമാണത്തിന്റെ ഏറ്റവും പുതിയ പതിപ്പ് മാത്രമേ ഉൾക്കൊള്ളുന്നുള്ളു. പഴയ അഥവാ മായ്ക്കപ്പെട്ട പ്രമാണപതിപ്പുകൾ ഉൾക്കൊള്ളുന്നില്ല.",
        "mediastatistics-nbytes": "{{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റ്}} ($2; $3%)",
+       "mediastatistics-bytespertype": "ഈ ഭാഗത്തിന്റെ ആകെ പ്രമാണ വലിപ്പം: {{PLURAL:$1|$1 ബൈറ്റ്|$1 ബൈറ്റുകൾ}} ($2; $3%).",
+       "mediastatistics-allbytes": "എല്ലാ പ്രമാണങ്ങളുടേയും ആകെ പ്രമാണവലിപ്പം: {{PLURAL:$1|$1 ബൈറ്റ്|$1 ബൈറ്റുകൾ}} ($2).",
        "mediastatistics-table-mimetype": "മൈം(MIME) തരം",
        "mediastatistics-table-extensions": "സാദ്ധ്യതയുള്ള എക്സ്റ്റെൻഷനുകൾ",
        "mediastatistics-table-count": "പ്രമാണങ്ങളുടെ എണ്ണം",
        "mediastatistics-header-text": "എഴുത്ത്",
        "mediastatistics-header-executable": "എക്സിക്യൂട്ടബിളുകൾ",
        "mediastatistics-header-archive": "ചുരുക്കിയ ഫയൽതരങ്ങൾ",
+       "mediastatistics-header-total": "എല്ലാ പ്രമാണങ്ങളും",
        "json-warn-trailing-comma": "ജെസണിൽ നിന്നും $1 എന്നതിന്റെ പിന്നാലെയുള്ള {{PLURAL:$1|കോമ|കോമകൾ}} നീക്കി",
        "json-error-unknown": "ജെസണിൽ ഒരു പ്രശ്നമുണ്ടായി. പിഴവ്: $1",
        "json-error-depth": "സ്റ്റാക്കിന്റെ പരമാവധി ആഴം അധികരിച്ചിരിക്കുന്നു",
index cc58be4..132cc7f 100644 (file)
        "searcharticle": "Vàje",
        "history": "Verziune 'e primma",
        "history_short": "Cronologgia",
-       "updatedmarker": "cagnamiénte 'e mija urdema visita",
+       "updatedmarker": "cagnamiénte 'e ll'urdema visita d' 'a mia",
        "printableversion": "Verzione pe' stampa",
        "permalink": "Jonta permanente",
        "print": "Stampà",
        "passwordreset-emailtext-ip": "Coccherun (può darse ca sì tu, cu n'indirizzo IP $1) ha addimannato na mmasciata c' 'a password nova pe' putè trasì a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|L'utente associate}} a st'indirizze e-mail songo:\n\n$2\n\n{{PLURAL:$3|Sta password temporanea ammaturarrà|Sti password temporanee ammaturarranno}} aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\nHè 'a trasì e scegliere na password nova mò. \n\nSi nun sì stato tu a fà sta richiesta, o te sì scurdat' 'a password origginale e nun 'a buò cagnà cchiù, lassa perde sta mmasciata e usa 'a password viecchia.",
        "passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha addimannato na mmasciata c' 'a password nova pe' putè trasì a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|L'utente associate}} a st'indirizze e-mail songo:\n\n$2\n\n{{PLURAL:$3|Sta password temporanea ammaturarrà|Sti password temporanee ammaturarranno}} aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\nHè 'a trasì e scegliere na password nova mò. \n\nSi nun sì stato tu a fà sta richiesta, o te sì scurdat' 'a password origginale e nun 'a buò cagnà cchiù, lassa perde sta mmasciata e usa 'a password viecchia.",
        "passwordreset-emailelement": "Nomme utente: \n$1\n\nPassword temporanea: \n$2",
-       "passwordreset-emailsentemail": "Si chesto fosse nu cunto e-mail riggistrato, allora buò dicere ca se mannarrà na mmasciata e-mail pe' riabbià 'a password.",
-       "passwordreset-emailsentusername": "Si esistesse nu cunto e-mail riggistrato ca currispunnesse a chesto, allora se mannarrà na mmasciata pe' riabbià 'a password.",
+       "passwordreset-emailsentemail": "Si chesto fosse nu cunto e-mail suoccio a 'o cunto vuost, allora buò dicere ca se mannarrà na mmasciata e-mail pe' riabbià 'a password.",
+       "passwordreset-emailsentusername": "Si esistesse nu cunto e-mail suòccio a stu nomme utente, allora se mannarrà na mmasciata pe' riabbià 'a password.",
        "passwordreset-emailsent-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, chista mmasciata 'a putite vedé ccà abbascio.",
        "passwordreset-emailerror-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, 'a putite vedé ccà abbascio, ma aita sapé ca nun s'è mannata a {{GENDER:$2|l'utente}} pecché c'è stato cocch'errore: $1",
        "changeemail": "Cagna o lèva l'indirizzo e-mail",
        "upload-form-label-select-file": "Sceglie file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nomme",
+       "upload-form-label-infoform-name-tooltip": "Nu titolo unico e distintivo p' 'o file, ca serverrà comm'o nomme file. Putite ausà lenguaggio semprice ch' 'e spazi. Nun azzeccà l'estensione d' 'o file.",
        "upload-form-label-infoform-description": "Descrizzione",
+       "upload-form-label-infoform-description-tooltip": "Facite 'a descriziona sintetica 'e tuttuquanto fosse degno 'e nota a proposito 'e st'opera. P' 'e foto, facite assapé 'e ccosi principale ca songo rappresentate, l'accasione e/o luogo dint' 'o quale so' state scattate.",
        "upload-form-label-usage-title": "Aúso",
        "upload-form-label-usage-filename": "Nomme d' 'o file",
        "foreign-structured-upload-form-label-own-work": "Chest'è fatica mia",
        "export-download": "Astipa comm'a nu file",
        "export-templates": "Include 'e template",
        "export-pagelinks": "Include 'e paggene cullegate ca spuntassero nfin' 'a na prufunnità 'e:",
+       "export-manual": "Nzérta paggene manualmente:",
        "allmessages": "'Mmasciate d''o sistema",
        "allmessagesname": "Nomme",
        "allmessagesdefault": "Mmasciata 'e testo predefinita",
        "expand_templates_preview": "Anteprimma",
        "expand_templates_preview_fail_html": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro appicciato e se songhe spierze 'e date d' 'a sessiona, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite n'ata vota.</strong>\nSi nun funziona ancora, facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.",
        "expand_templates_preview_fail_html_anon": "<em>Siccomme {{SITENAME}} téne 'o HTML 'ncruro e vuje nun site trasute 'o sito, 'a previsualizzaziona s'è annascunnuta comm'a na prutezione annanz'e uerre 'e JavaScript.</em>\n\n<strong>Si chist'è nu tentativo giustificato 'e previsualizzaziona, pe' piacere facite d'[[Special:UserLogout|ascì]] e trasì n'ata vota.</strong>",
+       "expand_templates_input_missing": "Avita dà minimo nu poco 'e testo scritto.",
        "pagelanguage": "Scigliete 'a lengua d' 'a paggena pe' bbìa e stu strumiento",
        "pagelang-name": "Paggena",
        "pagelang-language": "Lengua",
        "mediastatistics": "Statistiche d' 'e media",
        "mediastatistics-summary": "Statistiche ncopp' 'e tipe d' 'e file carrecate. Ce truvate azzeccata sulamente 'a verziona cchiù recente d' 'o file. Verziune viecchie o scancellate se so' luvate.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
-       "mediastatistics-bytespertype": "Dimenziona d' 'o file 'e sta seziona: $1 byte.",
-       "mediastatistics-allbytes": "Dimenziona sana 'e file pe' tuttuquante 'e file: $1 byte.",
+       "mediastatistics-bytespertype": "Dimenziona d' 'o file 'e sta seziona: {{PLURAL:$1|$1 byte}}  ($2; $3%).",
+       "mediastatistics-allbytes": "Dimenziona sana 'e file pe' tuttuquante 'e file: {{PLURAL:$1|$1 byte}} ($2).",
        "mediastatistics-table-mimetype": "Tipo 'e MIME",
        "mediastatistics-table-extensions": "Estenziune pussibbele",
        "mediastatistics-table-count": "Nummero 'e file",
index 0dc4695..f1a99dc 100644 (file)
        "laggedslavemode": "Uwaga! Ta strona może nie zawierać najnowszych aktualizacji.",
        "readonly": "Baza danych jest zablokowana",
        "enterlockreason": "Podaj powód zablokowania bazy oraz szacunkowy termin jej odblokowania",
-       "readonlytext": "Baza danych jest obecnie zablokowana – nie można wprowadzać nowych informacji ani modyfikować istniejących. Powodem są prawdopodobnie czynności administracyjne. Po ich zakończeniu przywrócona zostanie pełna funkcjonalność bazy.\n\nAdministrator, który zablokował bazę, podał następujące wyjaśnienie: $1",
+       "readonlytext": "Baza danych jest obecnie zablokowana – nie można wprowadzać nowych informacji ani modyfikować istniejących. Powodem są prawdopodobnie czynności administracyjne. Po ich zakończeniu przywrócona zostanie pełna funkcjonalność bazy.\n\nAdministrator systemu, który zablokował bazę, podał następujące wyjaśnienie: $1",
        "missing-article": "W bazie danych nie odnaleziono treści strony „$1” $2.\n\nZazwyczaj jest to spowodowane odwołaniem do nieaktualnego linku prowadzącego do różnicy pomiędzy dwoma wersjami strony lub do wersji z historii usuniętej strony.\n\nJeśli tak nie jest, możliwe, że problem został wywołany przez błąd w oprogramowaniu.\nMożna zgłosić ten fakt [[Special:ListUsers/sysop|administratorowi]], podając adres URL.",
        "missingarticle-rev": "(wersja $1)",
        "missingarticle-diff": "(różnica: $1, $2)",
        "upload-form-label-select-file": "Wybierz plik",
        "upload-form-label-infoform-title": "Szczegóły",
        "upload-form-label-infoform-name": "Nazwa",
+       "upload-form-label-infoform-name-tooltip": "Podaj krótką, opisującą i unikalną nazwę, która będzie służyła jako nazwa pliku. Możesz używać prostego języka i spacji. Nie dodawaj rozszerzenia pliku.",
        "upload-form-label-infoform-description": "Opis",
+       "upload-form-label-infoform-description-tooltip": "Krótko opisz wszystko istotne, co dotyczy tej pracy.\nW przypadku zdjęcia wymień najważniejsze ujęte obiekty, sytuację lub miejsce.",
        "upload-form-label-usage-title": "Korzystanie",
        "upload-form-label-usage-filename": "Nazwa pliku",
        "foreign-structured-upload-form-label-own-work": "To moja własna praca",
        "wlshowhideanons": "anonimowych",
        "wlshowhidepatr": "sprawdzone edycje",
        "wlshowhidemine": "moje edycje",
+       "wlshowhidecategorization": "kategoryzację stron",
        "watchlist-options": "Opcje obserwowanych",
        "watching": "Dodaję do obserwowanych...",
        "unwatching": "Przestaję obserwować...",
index 0d02549..60ae69e 100644 (file)
        "upload-form-label-select-file": "Label for the select file widget\n{{Identical|Select file}}",
        "upload-form-label-infoform-title": "Title for the information form\n{{Identical|Detail}}",
        "upload-form-label-infoform-name": "Label for the file name input\n{{Identical|Name}}",
+       "upload-form-label-infoform-name-tooltip": "The tooltip documenting the title field for the file - used as the filename on-wiki.\n\nIdentical to {{msg-mw|mwe-upwiz-tooltip-title}}.",
        "upload-form-label-infoform-description": "Label for the file description input\n{{Identical|Description}}",
+       "upload-form-label-infoform-description-tooltip": "The tooltip documenting the description fields on the details page.\n\nIdentical to {{msg-mw|mwe-upwiz-tooltip-description}}.",
        "upload-form-label-usage-title": "Title for the insert form showing how to use the uploaded item.\n{{Identical|Usage}}",
        "upload-form-label-usage-filename": "Label for the file name input\n{{Identical|Filename}}",
        "foreign-structured-upload-form-label-own-work": "[[File:Cross-wiki media upload dialog, December 2015 AB test option 1.png|thumb]] Label for own work confirmation checkbox",
        "export-download": "A label of checkbox option in [[Special:Export]]\n\nSee also:\n* {{msg-mw|Exportlistauthors}}",
        "export-templates": "A label of checkbox option in [[Special:Export]]",
        "export-pagelinks": "This is an input in [[Special:Export]]",
+       "export-manual": "The label for the textarea input on [[Special:Export]]",
        "allmessages": "The title of the special page [[Special:AllMessages]].",
        "allmessagesname": "Used on [[Special:Allmessages]] meaning \"the name of the message\".\n{{Identical|Name}}",
        "allmessagesdefault": "The header for the lower row of each column in the table of [[Special:AllMessages]].",
        "expand_templates_preview": "{{Identical|Preview}}",
        "expand_templates_preview_fail_html": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
        "expand_templates_preview_fail_html_anon": "Used as error message in Preview section of [[Special:ExpandTemplates]] page.",
+       "expand_templates_input_missing": "Used on [[Special:ExpandTemplates]] as an error message, if no input text was provided.",
        "pagelanguage": "Title for page Special:PageLanguage",
        "pagelang-name": "Input label for page name on Special:PageLanguage\n{{Identical|Page}}",
        "pagelang-language": "Language selector label for Special:PageLanguage\n{{Identical|Language}}",
index fb46162..3e70b6e 100644 (file)
        "passwordreset-emailtext-ip": "Cineva (probabil dumneavoastră, de la adresa IP $1) a solicitat resetarea parolei \npentru {{SITENAME}} ($4). {{PLURAL:$3|Următorul cont este asociat|Următoarele conturi sunt asociate}}\ncu această adresă de e-mail:\n\n$2\n\n{{PLURAL:$3|Această parolă temporară va|Aceste parole temporare vor}} expira {{PLURAL:$5|într-o zi|în $5 zile}}.\nAr trebui să vă autentificați și să schimbați parola acum. Dacă altcineva a făcut această cerere \nsau dacă v-ați reamintit parola inițială și nu mai doriți să o schimbați,\nputeți ignora acest mesaj, continuând să utilizați vechea parolă.",
        "passwordreset-emailtext-user": "Utilizatorul $1 de pe {{SITENAME}} a solicitat o resetare a parolei dumneavoastră pentru {{SITENAME}} ($4). Următorul utilizator are {{PLURAL:$3|contul asociat|conturile asociate}} cu această adresă de e-mail:\n\n$2\n\n{{PLURAL:$3|Această parolă temporară va|Aceste parole temporare vor}} expira {{PLURAL:$5|într-o zi|în $5 zile}}.\nAr trebui să vă autentificați și să alegeți acum o nouă parolă. Dacă altcineva a făcut această solicitare, ori dacă v-ați reamintit parola originală și nu mai doriți modificarea ei, puteți ignora acest mesaj, continuând cu vechea parolă.",
        "passwordreset-emailelement": "Nume de utilizator: \n$1\n\nParolă temporară: \n$2",
-       "passwordreset-emailsentemail": "Dacă aceasta este o adresă de e-mail înregistrată pentru contul dumneavoastră, atunci se va trimite un e-mail de resetare a parolei.",
-       "passwordreset-emailsentusername": "Dacă există o adresă de e-mail înregistrată pentru contul dumneavoastră, atunci se va trimite un e-mail de resetare a parolei.",
+       "passwordreset-emailsentemail": "Dacă această adresă de e-mail este asociată contului dumneavoastră, atunci se va trimite un e-mail de resetare a parolei.",
+       "passwordreset-emailsentusername": "Dacă există o adresă de e-mail asociată acestui nume de utilizator, atunci se va trimite un e-mail de resetare a parolei.",
        "passwordreset-emailsent-capture": "Un mesaj de resetare a parolei a fost trimis, fiind afișat mai jos.",
        "passwordreset-emailerror-capture": "Un mesaj de resetare a parolei a fost generat (fiind afișat mai jos), dar trimiterea sa către {{GENDER:$2|utilizator}} a eșuat: $1",
        "changeemail": "Modificare sau înlăturare adresă de e-mail",
        "upload-form-label-select-file": "Selectează fișier",
        "upload-form-label-infoform-title": "Detalii",
        "upload-form-label-infoform-name": "Nume",
+       "upload-form-label-infoform-name-tooltip": "Un titlu unic, descriptiv, care va deveni și numele fișierului. Puteți folosi limbaj simplu cu spații. Nu includeți extensia fișierului.",
        "upload-form-label-infoform-description": "Descriere",
+       "upload-form-label-infoform-description-tooltip": "Descrieți pe scurt orice este notabil despre lucrare.\nPentru o fotografie, menționați principalele lucruri care sunt reprezentate, evenimentul sau locul.",
        "upload-form-label-usage-title": "Utilizare",
        "upload-form-label-usage-filename": "Numele fișierului",
        "foreign-structured-upload-form-label-own-work": "Aceasta este propria mea operă",
        "wlshowhideanons": "utilizatori anonimi",
        "wlshowhidepatr": "modificări patrulate",
        "wlshowhidemine": "modificările mele",
+       "wlshowhidecategorization": "categorisirea paginilor",
        "watchlist-options": "Opțiuni listă de pagini urmărite",
        "watching": "Se urmărește...",
        "unwatching": "Așteptați...",
        "export-download": "Salvează ca fișier",
        "export-templates": "Include formate",
        "export-pagelinks": "Includere pagini legate de la o adâncime de:",
+       "export-manual": "Adăugați pagini manual:",
        "allmessages": "Toate mesajele",
        "allmessagesname": "Nume",
        "allmessagesdefault": "Textul standard",
        "expand_templates_preview": "Previzualizare",
        "expand_templates_preview_fail_html": "<em>Întrucât la {{SITENAME}} este activat HTML brut și a avut loc o pierdere a sesiunii de date, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, încercați din nou.</strong>\nDacă nici astfel nu funcționează, încercați să [[Special:UserLogout|închideţi sesiunea]] şi să vă autentificaţi din nou.",
        "expand_templates_preview_fail_html_anon": "<em>Întrucât la {{SITENAME}} este activat HTML brut și nu v-ați autentificat, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, [[Special:UserLogin|autentificați-vă]] și încercați din nou.</strong>",
+       "expand_templates_input_missing": "Trebuie să furnizați cel puțin un text ca date de intrare.",
        "pagelanguage": "Selector limbă pagină",
        "pagelang-name": "Pagină",
        "pagelang-language": "Limbă",
        "pagelang-use-default": "Folosește limba implicită",
        "pagelang-select-lang": "Alege limba",
+       "pagelang-submit": "Trimite",
        "right-pagelang": "Modifică limba paginii",
        "action-pagelang": "modificați limba paginii",
        "log-name-pagelang": "Jurnal modificare limbă",
        "mediastatistics": "Statistici multimedia",
        "mediastatistics-summary": "Statistici despre tipurile fișierelor încărcate. Sunt incluse doar cele mai recente versiuni ale fișierelor. Versiunile mai vechi sau șterse ale fișierelor sunt excluse.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Dimensiunea totală a fișierului pentru această secțiune: {{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2; $3%).",
+       "mediastatistics-allbytes": "Dimensiunea totală pentru toate fișierele: {{PLURAL:$1|$1 octet|$1 octeți|$1 de octeți}} ($2).",
        "mediastatistics-table-mimetype": "Tip MIME",
        "mediastatistics-table-extensions": "Extensii posibile",
        "mediastatistics-table-count": "Număr de fișiere",
        "mediastatistics-header-text": "Text",
        "mediastatistics-header-executable": "Executabile",
        "mediastatistics-header-archive": "Formate comprimate",
+       "mediastatistics-header-total": "Toate fișierele",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgulă|virgule|de virgule}} în exces înlăturat{{PLURAL:$1|ă|e}} din JSON",
        "json-error-unknown": "A apărut o problemă cu JSON. Eroare: $1",
        "json-error-depth": "S-a depășit adâncimea maximă a stivei",
index 88ab7a2..4d75db5 100644 (file)
        "passwordreset-emailtext-ip": "Кто-то (возможно, вы, с IP-адреса $1) запросил сброс пароля к вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дня|$5 дней|1=один день}}.\nВы должны представиться системе и выбрать новый пароль. \nЕсли вы не делали этого запроса, или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailtext-user": "Участник $1 из проекта {{SITENAME}} запросил сброс пароля для вашей учётной записи в проекте {{SITENAME}} ($4).\nС этим адресом электронной почты {{PLURAL:$3|1=связана следующая учётная запись|связаны следующие учётные записи}}:\n\n$2\n\n{{PLURAL:$3|1=Этот временный пароль будет|Эти временные пароли будут}} действовать {{PLURAL:$5|$5 день|$5 дней|$5 дня|1=один день}}.\nВы должны представиться системе и выбрать новый пароль.\nЕсли вы не делали этого запроса или вспомнили свой исходный пароль и не желаете его менять, \nто можете проигнорировать это сообщение и продолжить использовать свой старый пароль.",
        "passwordreset-emailelement": "Имя участника: \n$1\n\nВременный пароль: \n$2",
-       "passwordreset-emailsentemail": "Если это адрес электронной почты, на которую зарегистрирована ваша учётная запись, вам будет отправлено письмо для сброса пароля.",
-       "passwordreset-emailsentusername": "Если есть соответствующий зарегистрированный адрес электронной почты, будет отправлено письмо для восстановления пароля.",
+       "passwordreset-emailsentemail": "Если это адрес электронной почты связан с вашей учётной записью, вам будет отправлено письмо для сброса пароля.",
+       "passwordreset-emailsentusername": "Если есть адрес электронной почты, связанный с этим именем участника, то будет отправлено письмо для восстановления пароля.",
        "passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
        "passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
        "changeemail": "Изменить или удалить адрес электронной почты",
        "showhideselectedversions": "Показать/скрыть выбранные версии",
        "editundo": "отменить",
        "diff-empty": "(нет различий)",
-       "diff-multi-sameuser": "(не {{PLURAL:$1|показана одна промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} этого же участника)",
+       "diff-multi-sameuser": "(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} этого же участника)",
        "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показано $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не показана $1 промежуточная версия, сделанная|не показаны $1 промежуточных версий, сделанных|не показаны $1 промежуточные версии, сделанные}} более чем {{PLURAL:$2|$2 участником|$2 участниками}})",
        "difference-missing-revision": "Не {{PLURAL:$2|1=найдена|найдены}} {{PLURAL:$2|$2 версия|$2 версий|$2 версии|1=одна из версий}} для этого сравнения ($1).\n\nТакое обычно случается при переходе по устаревшей ссылке сравнения версий для страницы, которая была удалена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "prefs-help-gender": "Этот параметр задавать необязательно.\nДвижок использует это значение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "email": "Электронная почта",
        "prefs-help-realname": "Вводить настоящее имя необязательно.\nЕсли вы заполните его, оно может быть использовано для указания авторства ваших работ.",
-       "prefs-help-email": "Адрес электронной почты указывать необязательно, но он будет необходим в том случае, если вы забудете пароль.",
+       "prefs-help-email": "Адрес почты не обязателен, но это единственный способ восстановить забытый пароль.",
        "prefs-help-email-others": "Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.",
        "prefs-help-email-required": "Необходимо указать адрес электронной почты.",
        "prefs-info": "Основные сведения",
        "export-download": "Предложить сохранить как файл",
        "export-templates": "Включить шаблоны",
        "export-pagelinks": "Включить связанные страницы глубиной:",
+       "export-manual": "Добавить страницы вручную:",
        "allmessages": "Системные сообщения",
        "allmessagesname": "Сообщение",
        "allmessagesdefault": "Текст по умолчанию",
        "mediastatistics": "Медиа-статистика",
        "mediastatistics-summary": "Статистические данные о типах загруженных файлов. Она включает информацию только о последних версиях файлов. Более старые или удалённые версии файлов не учитываются.",
        "mediastatistics-nbytes": "$1 байт{{PLURAL:$1||а|ов}} ($2; $3%)",
-       "mediastatistics-bytespertype": "Общий размер файла для этого раздела: $1 байт{{PLURAL:$1||ов|а}}.",
-       "mediastatistics-allbytes": "Общий размер всех файлов: $1 байт{{PLURAL:$1||ов|а}}.",
+       "mediastatistics-bytespertype": "Общий размер файла для этого раздела: $1 байт{{PLURAL:$1||ов|а}} ($2; $3%).",
+       "mediastatistics-allbytes": "Общий размер всех файлов: $1 байт{{PLURAL:$1||ов|а}} ($2).",
        "mediastatistics-table-mimetype": "MIME-тип",
        "mediastatistics-table-extensions": "Возможные расширения",
        "mediastatistics-table-count": "Количество файлов",
index f8629b1..cc82198 100644 (file)
        "category-file-count-limited": "V tejto kategórii sa {{PLURAL:$1|nachádza jeden súbor|nachádzajú $1 súbory|nachádza $1 súborov}}",
        "listingcontinuesabbrev": "pokrač.",
        "index-category": "Indexované stránky",
-       "noindex-category": "neindexované stránky",
+       "noindex-category": "Neindexované stránky",
        "broken-file-category": "Stránky s odkazom na neexistujúci súbor",
        "about": "Projekt",
        "article": "Stránka s obsahom",
index 5bf69da..89b1bcd 100644 (file)
        "permalink": "Lidhje e përhershme",
        "print": "Printo",
        "view": "Shiko",
-       "view-foreign": "Pamja <span class=\"notranslate\" translate=\"asnjë\">$1</span>",
+       "view-foreign": "Shikoje në $1",
        "edit": "Redakto",
        "edit-local": "Redakto përshkrimin lokal",
        "create": "Krijo",
        "powersearch-legend": "Kërkim i përparuar",
        "powersearch-ns": "Kërkim në hapësira:",
        "powersearch-togglelabel": "Zgjedh:",
-       "powersearch-toggleall": "Tâna",
-       "powersearch-togglenone": "Asnji",
+       "powersearch-toggleall": "Të gjitha",
+       "powersearch-togglenone": "Asnjë",
        "search-external": "Kërkim i jashtëm",
        "searchdisabled": "<p>Kërkimi me tekst të plotë është bllokuar tani për tani ngaqë shërbyesi është shumë i ngarkuar; shpresojmë ta nxjerrim prapë në gjendje normale pas disa punimeve. Deri atëherë mund të përdorni Google-in për kërkime:</p>",
        "preferences": "Parapëlqimet",
index 198f93e..a66f943 100644 (file)
        "passwordreset-emailtext-ip": "Någon (förmodligen du, från IP-adressen $1) begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:\n\n$2\n\n{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.\nDu bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
        "passwordreset-emailtext-user": "Användaren $1 på {{SITENAME}} begärde en återställning av ditt lösenord för {{SITENAME}} ($4). Följande användar{{PLURAL:$3|konto är förknippad|konton är förknippade}} med denna e-postadress:\n\n$2\n\n{{PLURAL:$3|Detta|Dessa}} tillfälliga lösenord kommer att gå ut om {{PLURAL:$5|en dag|$5 dagar}}.\nDu bör logga in och välja ett nytt lösenord nu. Om någon annan gjorde denna begäran, eller om du kommer ihåg ditt ursprungliga lösenord, och inte längre önskar ändra det, kan du ignorera detta meddelande och fortsätta använda ditt gamla lösenord.",
        "passwordreset-emailelement": "Användarnamn: \n$1\n\nTillfälligt lösenord: \n$2",
-       "passwordreset-emailsentemail": "Om detta är en registrerad e-postadress för ditt konto kommer en lösenordsåterställning skickas via e-post.",
-       "passwordreset-emailsentusername": "Om det finns en motsvarande e-postadress för ditt konto kommer en lösenordsåterställning skickas via e-post.",
+       "passwordreset-emailsentemail": "Om denna e-postadress är associerad med ditt konto kommer en lösenordsåterställning skickas via e-post.",
+       "passwordreset-emailsentusername": "Om det finns en e-postadress som associeras med detta användarnamn kommer en lösenordsåterställning skickas via e-post.",
        "passwordreset-emailsent-capture": "En lösenordsåterställning via e-post har skickats, som visas nedan.",
        "passwordreset-emailerror-capture": "En lösenordsåterställning via e-post har skapats, som visas nedan, men det gick inte att skicka den till {{GENDER:$2|användaren}}: $1",
        "changeemail": "Ändra eller ta bort e-postadress",
        "upload-form-label-select-file": "Välj fil",
        "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Namn",
+       "upload-form-label-infoform-name-tooltip": "En unik beskrivande titel för filen, som kommer att fungera som ett filnamn. Du kan använda klarspråk med mellanslag. Ta inte med filändelsen.",
        "upload-form-label-infoform-description": "Beskrivning",
+       "upload-form-label-infoform-description-tooltip": "Beskriv kortfattat allt anmärkningsvärt om verket.\nFör ett foto, nämn huvudmotiv, tillfälle eller plats.",
        "upload-form-label-usage-title": "Användning",
        "upload-form-label-usage-filename": "Filnamn",
        "foreign-structured-upload-form-label-own-work": "Detta är mitt eget verk",
        "export-download": "Ladda ner som fil",
        "export-templates": "Inkludera mallar",
        "export-pagelinks": "Inkludera länkade sidor till ett djup på:",
+       "export-manual": "Lägg till sidor manuellt:",
        "allmessages": "Systemmeddelanden",
        "allmessagesname": "Namn",
        "allmessagesdefault": "Standardtext",
        "mediastatistics": "Mediastatistik",
        "mediastatistics-summary": "Statistik om uppladdade filtyper. Detta inkluderar bara den senaste versionen av en fil. Äldre eller raderade filversioner exkluderas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte}} ($2; $3%)",
-       "mediastatistics-bytespertype": "Total filstorlek för detta avsnitt: $1 byte.",
-       "mediastatistics-allbytes": "Total filstorlek för alla filer: $1 byte.",
+       "mediastatistics-bytespertype": "Total filstorlek för detta avsnitt: {{PLURAL:$1|$1 byte}} ($2; $3%).",
+       "mediastatistics-allbytes": "Total filstorlek för alla filer: {{PLURAL:$1|$1 byte}} ($2).",
        "mediastatistics-table-mimetype": "MIME-typ",
        "mediastatistics-table-extensions": "Möjliga tillägg",
        "mediastatistics-table-count": "Antal filer",
index 88b73fd..861a294 100644 (file)
        "nstab-template": "Шаблон",
        "nstab-help": "Кӯмак",
        "nstab-category": "Гурӯҳ",
+       "mainpage-nstab": "Саҳифаи аслӣ",
        "nosuchaction": "Чунин амале вуҷуд надорад",
        "nosuchactiontext": "Амали дар URL мушаххасшуда номӯътабар аст.\nШумо шояд хато пайванди URL-ро ворид намудед, ё пайванди нодурустро пайгирӣ кардед.\nШояд ин як хатогие дар нармафзоре бошад, ки аз тарафи {{SITENAME}} истифода мешавад.",
        "nosuchspecialpage": "Чунин саҳифаи вижа вуҷуд надорад",
        "createaccountreason": "Сабаб:",
        "createacct-reason": "Сабаб",
        "createacct-reason-ph": "Барои чӣ ҳисоби дигареро эҷод карда истодаед",
-       "createacct-captcha": "Бозрасии амниятӣ",
-       "createacct-imgcaptcha-ph": "Матни болоро ворид кунед",
        "createacct-submit": "Ҳисоби худро созед",
        "createacct-another-submit": "Ҳисоби дигаре созед",
        "createacct-benefit-heading": "{{SITENAME}} тавассути одамони мисли шумо сохта шудааст.",
        "number_of_watching_users_pageview": "[$1 пайгирикунанда {{PLURAL:$1|корбар|корбарон}}]",
        "rc_categories": "Маҳдудият ба гурӯҳҳо (бо аломати \"|\" ҷудо кунед)",
        "rc_categories_any": "Ҳар кадом",
+       "rc-change-size-new": "$1 {{PLURAL:$1|байт}} пас аз тағйир",
        "newsectionsummary": "/* $1 */ бахши ҷадид",
        "rc-enhanced-expand": "Намоиши ҷузъиёт",
        "rc-enhanced-hide": "Пинҳони ҷузъиёт",
        "suppress": "Назорат",
        "booksources": "Манбаҳои китобҳо",
        "booksources-search-legend": "Ҷустуҷӯи сарчашмаҳои китоб",
+       "booksources-search": "Ҷустуҷӯ",
        "booksources-text": "Дер зер феҳристи пайвандҳо ба сомонаҳое, ки китобҳои нав ва кӯҳна мефурӯшанд, оварда шудааст. Мумкин аст, иттилооти бештарро дар бораи китобҳои ҷустуҷӯ кардаатон дошта бошанд:",
        "specialloguserlabel": "Иҷрокунанда:",
        "speciallogtitlelabel": "Ҳадаф (унвон ё корбар):",
        "wlheader-showupdated": "Саҳифаҳое, ки пас аз охирин сар заданатон ба онҳо тағйир кардаанд '''пурранг''' нишон дода шудаанд",
        "wlnote": "Дар зер {{PLURAL:$1|охирин тағйир|'''$1''' охирин тағйирот}} дар $2 соати охир {{PLURAL:омадааст|омадаанд}}.",
        "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо",
+       "watchlistall2": "ҳама",
        "watchlist-options": "Ихтиёроти феҳристи пайгириҳо",
        "watching": "Пайгири...",
        "unwatching": "Тавқифи пайгири...",
        "contributions": "Ҳиссагузориҳои {{GENDER:$1|корбар}}",
        "contributions-title": "Ҳиссагузориҳои корбар барои $1",
        "mycontris": "Ҳиссагузориҳо",
+       "anoncontribs": "Саҳмгузориҳо",
        "contribsub2": "Барои {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ҳеҷ тағйире бо ин мушаххасот пайдо нашуд.",
        "uctop": "(кунунӣ)",
        "movesubpage": "{{PLURAL:$1|Зерсаҳифа|Зерсаҳифаҳо}}",
        "movereason": "Сабаб:",
        "revertmove": "вогардонӣ",
-       "delete_and_move": "Ҳазф ва кӯчонидан",
        "delete_and_move_text": "==Ниёз ба ҳазф==\n\nМақолаи мақсад \"[[:$1]]\" вуҷуд дорад. Оё мехоҳед онро ҳазф кунед то интиқол мумкин шавад?",
        "delete_and_move_confirm": "Бале, саҳифа ҳазф шавад",
        "delete_and_move_reason": "Ҳазф шуд барои мумкин шудани кӯчонидан",
        "tooltip-ca-nstab-main": "Дидани саҳифаи мӯҳтавиёт",
        "tooltip-ca-nstab-user": "Намоиши саҳифаи корбар",
        "tooltip-ca-nstab-media": "Дидани саҳифаи расона",
-       "tooltip-ca-nstab-special": "Ð\98н Ñ\81аҳиÑ\84аи Ð¼Ð°Ñ\85Ñ\81Ñ\83Ñ\81 Ð¼ÐµÐ±Ð¾Ñ\88ад, Ð¨Ñ\83мо Ð¾Ð½Ñ\80о Ð²Ð¸Ñ\80оиÑ\88 ÐºÐ°Ñ\80да Ð½Ð°Ð¼ÐµÑ\82авонед",
+       "tooltip-ca-nstab-special": "Ð\98н Ñ\82аÑ\80Ò·Ñ\83ма Ñ\88оÑ\8fд Ð½Ð¸Ñ\91з Ð±Ð° Ð±Ð°Ñ\80ӯзÑ\88ави Ð´Ð¾Ñ\88Ñ\82а Ð±Ð¾Ñ\88ад.",
        "tooltip-ca-nstab-project": "Намоиши саҳифаи лоиҳа",
        "tooltip-ca-nstab-image": "Дидани саҳифаи парванда",
        "tooltip-ca-nstab-mediawiki": "Дидани пайғоми системавӣ",
        "spambot_username": "Спамтозакуни МедиаВики",
        "spam_reverting": "Вогардони ба охирин нусхае, ки пайванде ба $1 надорад",
        "spam_blanking": "Ҳамаи нусхаҳои пайвандҳо $1 доштан, дар ҳоли холӣ кардан",
+       "pageinfo-toolboxlink": "Иттилооти саҳифа",
        "pageinfo-contentpage-yes": "Бале",
        "pageinfo-protect-cascading-yes": "Бале",
        "markaspatrolleddiff": "Ба унвони баррасишуда аломат бизан",
        "feedback-message": "Пайём:",
        "feedback-subject": "Мавзӯъ:",
        "feedback-submit": "Ирсол",
+       "searchsuggest-search": "Ҷустуҷӯ",
        "expandtemplates": "Бастдодани шаблонҳо",
        "expand_templates_intro": "Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ\n<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.\nИн кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.",
        "expand_templates_title": "Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:",
index 95019d6..c91db68 100644 (file)
@@ -29,6 +29,7 @@
        "tog-hideminor": "ซ่อนการแก้ไขเล็กน้อยในหน้าปรับปรุงล่าสุด",
        "tog-hidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วในหน้าปรับปรุงล่าสุด",
        "tog-newpageshidepatrolled": "ซ่อนหน้าที่ตรวจสอบแล้วในรายการหน้าใหม่",
+       "tog-hidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
        "tog-extendwatchlist": "ขยายรายการเฝ้าดูให้แสดงการเปลี่ยนแปลงทั้งหมด ไม่เพียงการเปลี่ยนแปลงล่าสุด",
        "tog-usenewrc": "จัดกลุ่มการเปลี่ยนแปลงแบ่งตามหน้าในรายการปรับปรุงล่าสุดและรายการเฝ้าดู",
        "tog-numberheadings": "กำหนดเลขหัวเรื่องอัตโนมัติ",
@@ -59,6 +60,7 @@
        "tog-watchlistreloadautomatically": "โหลดรายการเฝ้าดูใหม่อัตโนมัติเมื่อใดที่มีการเปลี่ยนตัวกรอง (ต้องการจาวาสคริปต์)",
        "tog-watchlisthideanons": "ซ่อนการแก้ไขโดยผู้ใช้นิรนามจากรายการเฝ้าดู",
        "tog-watchlisthidepatrolled": "ซ่อนการแก้ไขที่ตรวจสอบแล้วจากรายการเฝ้าดู",
+       "tog-watchlisthidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
        "tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
        "tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ผลต่าง",
        "tog-showhiddencats": "แสดงหมวดหมู่ที่ซ่อนอยู่",
        "passwordreset-emailtext-ip": "บางคน (ซึ่งอาจเป็นคุณ จากเลขที่อยู่ไอพี $1) ขอตั้งรหัสผ่านของคุณใหม่บน{{SITENAME}} ($4) บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailtext-user": "ผู้ใช้ $1 บน {{SITENAME}} ขอตั้งรหัสผ่านของคุณใหม่สำหรับ {{SITENAME}} ($4) {{PLURAL:$3||}}บัญชีผู้ใช้ดังกล่าวเกี่ยวข้องกับที่อยู่อีเมลนี้:\n\n$2\n\n{{PLURAL:$3|รหัสผ่านชั่วคราวนี้|รหัสผ่านชั่วคราวเหล่านี้}}จะหมดอายุใน $5 วัน\nตอนนี้คุณควรล็อกอินและเลือกรหัสผ่านใหม่ หากบุคคลอื่นขอตั้งรหัสผ่านใหม่นี้ หรือคุณจำรหัสผ่านเดิมของคุณได้แล้ว และคุณไม่ต้องการเปลี่ยนรหัสผ่านอีก คุณอาจละเลยข้อความนี้และใช้รหัสผ่านเดิมของคุณต่อไป",
        "passwordreset-emailelement": "ชื่อผู้ใช้: \n$1\n\nรหัสผ่านชั่วคราว: \n$2",
-       "passwordreset-emailsentemail": "หาà¸\81à¸\99ีà¹\88à¸\84อà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99สำหรับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
-       "passwordreset-emailsentusername": "หาà¸\81à¸\99ีà¹\88à¸\84ือà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\94à¹\89วยà¸\81ัà¸\99 เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
+       "passwordreset-emailsentemail": "หาà¸\81à¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\99ีà¹\89สัมà¸\9eัà¸\99à¸\98à¹\8cà¸\81ับบัญชีของคุณ เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
+       "passwordreset-emailsentusername": "หาà¸\81มีà¸\97ีà¹\88อยูà¹\88อีà¹\80มลà¸\97ีà¹\88ลà¸\87à¸\97ะà¹\80à¸\9aียà¸\99à¹\84วà¹\89à¸\94à¹\89วยà¸\81ัà¸\9aà¸\8aืà¹\88อà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\99ีà¹\89 เช่นนั้นจะส่งอีเมลตั้งรหัสผ่านใหม่",
        "passwordreset-emailsent-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกส่งไปแล้ว ซึ่งแสดงด้านล่าง",
        "passwordreset-emailerror-capture": "อีเมลตั้งรหัสผ่านใหม่ถูกสร้างขึ้นแล้ว ซึ่งแสดงด้านล่าง แต่ไม่สามารถส่งไปยัง{{GENDER:$2|ผู้ใช้}}: $1",
        "changeemail": "เปลี่ยนหรือลบที่อยู่อีเมล",
        "copyrightwarning": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} ถือว่าเผยแพร่ภายใต้ $2 (ดูรายละเอียดทาง $1)\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไขและกระจายได้ตามใจ ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
        "copyrightwarning2": "โปรดระลึกว่างานเขียนทั้งหมดใน {{SITENAME}} อาจถูกผู้เขียนอื่นแก้ไข เปลี่ยนแปลงหรือนำออก\nหากคุณไม่ต้องการให้งานของคุณถูกแก้ไข ก็อย่าส่งเข้ามา<br />\nนอกจากนี้ คุณยังสัญญาเราว่าคุณเขียนงานด้วยตนเอง หรือคัดลอกจากสาธารณสมบัติหรือทรัพยากรเสรีที่คล้ายกัน (ดูรายละเอียดที่ $1)\n<strong>อย่าส่งงานมีลิขสิทธิ์โดยไม่ได้รับอนุญาต!</strong>",
        "longpageerror": "<strong>ข้อผิดพลาด: ข้อความที่คุณส่งมีขนาด $1 กิโลไบต์\nซึ่งเกินสูงสุด $2 กิโลไบต์</strong>\nไม่สามารถบันทึกได้",
-       "readonlywarning": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99: à¸\90าà¸\99à¸\82à¹\89อมูลà¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\9eืà¹\88อà¸\9aำรุà¸\87รัà¸\81ษา à¸\84ุà¸\93à¸\88ึà¸\87à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
+       "readonlywarning": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99: à¸\90าà¸\99à¸\82à¹\89อมูลà¸\96ูà¸\81ลà¹\87อà¸\81à¹\80à¸\9eืà¹\88อà¸\9aำรุà¸\87รัà¸\81ษา à¸\84ุà¸\93à¸\88ึà¸\87à¹\84มà¹\88สามารà¸\96à¸\9aัà¸\99à¸\97ึà¸\81à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82ของคุณได้ในขณะนี้</strong>\nคุณอาจต้องการคัดลอกและวางข้อความของคุณในไฟล์ข้อความ และบันทึกไว้ภายหลัง\n\nผู้ดูแลระบบที่ล็อกฐานข้อมูลให้คำอธิบายดังนี้: $1",
        "protectedpagewarning": "<strong>คำเตือน: หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบแก้ไขได้เท่านั้น</strong>\nรายการปูมล่าสุดจัดไว้ด้านล่างเพื่อการอ้างอิง:",
        "semiprotectedpagewarning": "<strong>หมายเหตุ:</strong> หน้านี้ถูกล็อก เพื่อให้เฉพาะผู้ใช้ลงทะเบียนสามารถแก้ไขเท่านั้น\nรายการปูมล่าสุดได้จัดไว้ด้านล่างนี้เพื่อการอ้างอิง",
        "cascadeprotectedwarning": "<strong>คำเตือน:</strong> หน้านี้ถูกล็อก และแก้ไขได้เฉพาะผู้ใช้ที่มีสิทธิผู้ดูแลระบบ เนื่องจากหน้านี้รวมอยู่ใน{{PLURAL:$1|หน้า}}ที่ถูกล็อกแบบต่อเรียงต่อไปนี้:",
        "rcshowhidemine": "$1การแก้ไขของฉัน",
        "rcshowhidemine-show": "แสดง",
        "rcshowhidemine-hide": "ซ่อน",
+       "rcshowhidecategorization": "$1การจัดหมวดหมู่หน้า",
        "rcshowhidecategorization-show": "แสดง",
        "rcshowhidecategorization-hide": "ซ่อน",
        "rclinks": "แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3",
        "mostrevisions": "หน้าที่มีรุ่นปรับปรุงมากสุด",
        "prefixindex": "หน้าทั้งหมดพร้อมคำขึ้นต้น",
        "prefixindex-namespace": "หน้าทั้งหมดพร้อมคำขึ้นต้น (เนมสเปซ $1)",
+       "prefixindex-submit": "แสดง",
        "prefixindex-strip": "ลบคำขึ้นต้นในรายการออก",
        "shortpages": "หน้าสั้น",
        "longpages": "หน้ายาว",
        "whatlinkshere-hidelinks": "$1 ลิงก์",
        "whatlinkshere-hideimages": "$1ลิงก์ไฟล์",
        "whatlinkshere-filters": "ตัวกรอง",
+       "whatlinkshere-submit": "ไป",
        "autoblockid": "บล็อกอัตโนมัติ #$1",
        "block": "บล็อกผู้ใช้",
        "unblock": "ปลดบล็อกผู้ใช้",
        "tags-actions-header": "ปฏิบัติการ",
        "tags-active-yes": "ใช่",
        "tags-active-no": "ไม่",
+       "tags-source-extension": "นิยามโดยส่วนขยาย",
+       "tags-source-manual": "ใช้ด้วยมือโดยผู้ใช้และบอต",
+       "tags-source-none": "เลิกใช้แล้ว",
        "tags-edit": "แก้ไข",
+       "tags-delete": "ลบ",
+       "tags-activate": "เปิดใช้งาน",
+       "tags-deactivate": "ปิดใช้งาน",
        "tags-hitcount": "$1 การเปลี่ยนแปลง",
        "comparepages": "เปรียบเทียบหน้า",
        "compare-page1": "หน้า 1",
        "htmlform-no": "ไม่",
        "htmlform-yes": "ใช่",
        "htmlform-chosen-placeholder": "เลือกตัวเลือก",
+       "htmlform-cloner-required": "ต้องการอย่างน้อยหนึ่งค่า",
+       "htmlform-title-badnamespace": "[[:$1]] ไม่อยู่ในเนมสเปซ \"{{ns:$2}}\"",
+       "htmlform-title-not-creatable": "\"$1\" มิใช่ชื่อเรื่องหน้าที่สร้างได้",
+       "htmlform-title-not-exists": "ไม่มี $1",
+       "htmlform-user-not-exists": "ไม่มี <strong>$1</strong>",
+       "htmlform-user-not-valid": "<strong>$1</strong> มิใช่ชื่อผู้ใช้ที่สมเหตุสมผล",
        "sqlite-has-fts": "รุ่น $1 พร้อมการสนับสนุนการค้นหาข้อความแบบเต็ม",
        "sqlite-no-fts": "รุ่น $1 โดยไม่มีการสนับสนุนการค้นหาข้อความแบบเต็ม",
        "logentry-delete-delete": "$1 ลบหน้า $3",
index 285affb..01bd4f7 100644 (file)
        "recentchanges-label-plusminus": "Sayfa boyutundaki değişikliğin bayt bazında değeri",
        "recentchanges-legend-heading": "'''Gösterge:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
+       "recentchanges-submit": "Göster",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "wlshowlast": "Son $1 saati $2 günü göster",
        "watchlistall2": "Hepsini göster",
        "watchlist-hide": "Gizle",
+       "wlshowtime": "Gösterilecek zaman aralığı:",
        "wlshowhideminor": "küçük değişiklikler",
        "wlshowhidebots": "botlar",
        "wlshowhideliu": "kayıtlı kullanıcılar",
        "wlshowhideanons": "anonim kullanıcılar",
        "wlshowhidepatr": "incelenmiş değişiklikler",
+       "wlshowhidemine": "değişikliklerim",
        "watchlist-options": "İzleme listesi seçenekleri",
        "watching": "İzleniyor...",
        "unwatching": "İzlenmiyor...",
index ef9ab19..76344ed 100644 (file)
        "editold": "үзгәртү",
        "viewsourceold": "башлангыч кодны карау",
        "editlink": "үзгәртү",
-       "viewsourcelink": "башлангыч кодны карау",
+       "viewsourcelink": "чыганак кодны карау",
        "editsectionhint": "$1 бүлеген үзгәртү",
        "toc": "Эчтәлек",
        "showtoc": "күрсәтү",
        "red-link-title": "$1 (мондый бит юк)",
        "sort-descending": "Кимү буенча урнаштыру",
        "sort-ascending": "Арту буенча урнаштыру",
-       "nstab-main": "Ð\91иÑ\82",
+       "nstab-main": "Ð\9cÓ\99калÓ\99",
        "nstab-user": "Кулланучы",
        "nstab-media": "Мультимедиа",
        "nstab-special": "Махсус бит",
        "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе {{PLURAL:$4|язма}} саклана",
        "querypage-no-updates": "Хәзер бу битне яңартып булмый. Монда күрсәтелгән мәгълүматлар кабул ителмәячәк.",
        "viewsource": "Карау",
-       "viewsource-title": "$1 Ð±Ð¸Ñ\82енең Ñ\8fÑ\85ма Ñ\82екÑ\81Ñ\82ын карау",
+       "viewsource-title": "$1 Ð±Ð¸Ñ\82енең Ñ\87Ñ\8bганагын карау",
        "actionthrottled": "Тизлек киметелгән",
        "actionthrottledtext": "Спамга каршы көрәш өчен, аз вакыт эчендә бу гамәлне еш куллану тыелган һәм СЕз бирелгән вакытны бетергәнсез инде. Зинһар, соңарак кабатлагыз.",
        "protectedpagetext": "Бу бит үзгәртүләрдән һәм башка төрле гамәлләрдән якланган.",
        "logout": "Чыгу",
        "userlogout": "Чыгу",
        "notloggedin": "Сез хисап язмагызга кермәгәнсез",
-       "userlogin-noaccount": "Ð\90ккаÑ\83нÑ\82 юкмы?",
-       "userlogin-joinproject": "Проектка керү",
+       "userlogin-noaccount": "ХиÑ\81ап Ñ\8fзмагÑ\8bз юкмы?",
+       "userlogin-joinproject": "{{SITENAME}} проектына керү",
        "nologin": "Кулланучы исемең юкмы? '''$1'''",
        "nologinlink": "Хисап язмасы төзү",
        "createaccount": "Яңа кулланучыны теркәү",
        "nowiki_tip": "Вики-форматлауны исәпкә алмау",
        "image_sample": "Мисал.jpg",
        "image_tip": "Куелган файл",
-       "media_tip": "Ð\9cедиа-Ñ\84айлга сылтама",
+       "media_tip": "Файлга сылтама",
        "sig_tip": "Имза һәм вакыт",
        "hr_tip": "Горизонталь сызык (еш кулланмагыз)",
        "summary": "Үзгәртүләр тасвирламасы:",
        "edit-gone-missing": "Битне яңартып булмый.\nУл бетерелгән булырга мөмкин.",
        "edit-conflict": "Үзгәртүләр конфликты.",
        "edit-no-change": "Текстта үзгәешләр ясалмау сәбәпле, сезнең үзгәртү кире кагыла.",
+       "postedit-confirmation-created": "Бит төзелде",
        "edit-already-exists": "Яңа бит төзеп булмый.\nУл инде бар.",
        "editwarning-warning": "Башка биткә күчү вакытында бу мәкаләгә керткән үзгәрешләр югалырга мөмкин.\nӘгәрдә сез теркәлгән булсагыз, бу искәрмәне сез «Көйләнмәләрем» өлешендә үзгәртә аласыз.",
        "duplicate-args-category": "Калыпны чакыруда кабатлап торган аргументларны кулланган битләр",
        "nextn": "чираттагы {{PLURAL:$1|$1}}",
        "prevn-title": "Алдагы $1  {{PLURAL:$1|язма}}",
        "nextn-title": "{{PLURAL:$1|Киләсе $1 язма}}",
-       "shown-title": "Сәхифәдә $1 {{PLURAL:$1|1=язма|язма}} күрсәтелсен",
+       "shown-title": "Сәхифәдә $1 {{PLURAL:$1|язма}} күрсәтелсен",
        "viewprevnext": "Күрсәтелүе: ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "<strong>Бу вики-проектта «[[:$1]]» исемле бит бар инде</strong>{{PLURAL:$2|0=|Башка эзләү нәтиҗәләрен дә карап ал.}}",
        "searchmenu-new": "<strong>«Әлеге [[:$1]]» вики-проектта бит ясарга!</strong>\n{{PLURAL:$2|0=|Шулай ук, эзләү ярдәмендә табылган битне карагыз.|Шулай ук, эзләү ярдәмендә табылган битләрне карагыз.}}",
        "searchprofile-images-tooltip": "Файллар эзләү",
        "searchprofile-everything-tooltip": "Барлык битләрдән эзләү",
        "searchprofile-advanced-tooltip": "Бирелгән исемнәр мәйданында эзләү",
-       "search-result-size": "$1 ({{PLURAL:$2|1 сүз|$2 сүз}})",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 сүз}})",
        "search-result-category-size": "{{PLURAL:$1|1=1 әгъза|$1 әгъза}} ({{PLURAL:$2|1=1 асттөркем|$2 асттөркем}}, {{PLURAL:$3|1=1 файл|$3 файл}})",
        "search-redirect": "(юнәлтү $1)",
        "search-section": "($1 бүлеге)",
        "enhancedrc-history": "тарих",
        "recentchanges": "Соңгы үзгәртүләр",
        "recentchanges-legend": "Соңгы үзгәртүләр көйләүләре",
-       "recentchanges-summary": "Ð\91Ñ\83 Ð±Ð¸Ñ\82Ñ\82Ó\99 {{grammar:genitive|{{SITENAME}}}} Ð¿Ñ\80оекÑ\82Ñ\8bнÑ\8bÒ£ Ñ\81оңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80е ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82елÓ\99.",
+       "recentchanges-summary": "ТөÑ\80ле Ð±Ð¸Ñ\82лÓ\99Ñ\80дÓ\99 Ñ\8dÑ\88лÓ\99нгÓ\99н Ñ\81оңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80 Ð¸Ñ\81емлеге.",
        "recentchanges-feed-description": "Бу агымда соңгы үзгәртүләрне күзәтү.",
        "recentchanges-label-newpage": "Бу үзгәртү белән яңа бит төзелгән",
        "recentchanges-label-minor": "Бу кече үзгәртү",
        "recentchanges-label-unpatrolled": "Үзгәртүне әлегә тикшермәгәннәр",
        "recentchanges-label-plusminus": "Битнең зурлыгы шуның кадәрле байтка үзгәрде",
        "recentchanges-legend-heading": "'''Легенда:&nbsp;'''",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|яңа бит]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шулай ук [[Special:NewPages|яңа битләр исемлеген]] карагыз)",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәртүләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
        "rclistfrom": "$3 $2 башлап яңа үзгәртүләрне күрсәт",
        "rcshowhideminor": "кече үзгәртүләрне $1",
-       "rcshowhideminor-show": "күÑ\80Ñ\81Ó\99Ñ\82",
-       "rcshowhideminor-hide": "яшер",
+       "rcshowhideminor-show": "Ð\9aÒ¯Ñ\80Ñ\81Ó\99Ñ\82Ò¯",
+       "rcshowhideminor-hide": "Яшер",
        "rcshowhidebots": "ботларны $1",
        "rcshowhidebots-show": "Күрсәт",
-       "rcshowhidebots-hide": "яшер",
+       "rcshowhidebots-hide": "Яшер",
        "rcshowhideliu": "теркәлгән кулланучыларны $1",
        "rcshowhideliu-show": "күрсәт",
-       "rcshowhideliu-hide": "яшер",
+       "rcshowhideliu-hide": "Яшер",
        "rcshowhideanons": "кермәгән кулланучыларны $1",
-       "rcshowhideanons-show": "күÑ\80Ñ\81Ó\99Ñ\82",
-       "rcshowhideanons-hide": "яшер",
+       "rcshowhideanons-show": "Ð\9aÒ¯Ñ\80Ñ\81Ó\99Ñ\82Ò¯",
+       "rcshowhideanons-hide": "Яшер",
        "rcshowhidepatr": "тикшерелгән үзгәртүләрне $1",
        "rcshowhidepatr-hide": "яшер",
        "rcshowhidemine": "минем үзгәртүләремне $1",
-       "rcshowhidemine-show": "күÑ\80Ñ\81Ó\99Ñ\82",
-       "rcshowhidemine-hide": "яшер",
+       "rcshowhidemine-show": "Ð\9aÒ¯Ñ\80Ñ\81Ó\99Ñ\82Ò¯",
+       "rcshowhidemine-hide": "Яшер",
        "rclinks": "Соңгы $2 көн эчендә соңгы $1 үзгәртүне күрсәт<br />$3",
        "diff": "аерма",
        "hist": "тарих",
-       "hide": "яшер",
-       "show": "күрсәт",
+       "hide": "Яшер",
+       "show": "Ð\9aүрсәт",
        "minoreditletter": "к",
        "newpageletter": "Я",
        "boteditletter": "б",
        "recentchangeslinked-feed": "Бәйләнешле үзгәртүләр",
        "recentchangeslinked-toolbox": "Бәйләнешле үзгәртүләр",
        "recentchangeslinked-title": "\"$1\" битенә бәйләнешле үзгәртүләр",
-       "recentchangeslinked-summary": "Бу күрсәтелгән бит белән сылталган (йә күрсәтелгән төркемгә керткән) битләрнең үзгәртелмәләре исемлеге.\n[[Special:Watchlist|Күзәтү исемлегегезгә]] керә торган битләр '''калын'''.",
+       "recentchangeslinked-summary": "Бу күрсәтелгән бит белән сылталган (йә күрсәтелгән төркемгә керткән) битләрнең үзгәртелмәләре исемлеге.\n[[Special:Watchlist|Күзәтү исемлегегезгә]] керә торган битләр '''калын''' итеп күрсәтелгән.",
        "recentchangeslinked-page": "Битнең исеме:",
        "recentchangeslinked-to": "Моның урынына бу биткә бәйле булган битләрдәге үзгәртүләрне күрсәтү",
        "upload": "Файлны йөкләү",
        "listfiles_count": "Юрамалар",
        "file-anchor-link": "Файл",
        "filehist": "Файлның тарихы",
-       "filehist-help": "Ð\94аÑ\82ага/Ñ\81Ó\99гаÑ\82Ñ\8cкÓ\99, Ñ\88Ñ\83л Ð²Ð°ÐºÑ\8bÑ\82Ñ\82а Ð±Ð¸Ñ\82нең Ð½Ð¸Ð½Ð´Ð¸ Ð±Ñ\83лганлÑ\8bгÑ\8bн ÐºÒ¯Ñ\80Ò¯ Ó©Ñ\87ен басыгыз.",
+       "filehist-help": "ФайлнÑ\8bÒ£ Ð½Ð¸Ð½Ð´Ð¸ Ð±Ñ\83лганлÑ\8bгÑ\8bн ÐºÒ¯Ñ\80Ò¯ Ó©Ñ\87ен Ð´Ð°Ñ\82ага/Ñ\81Ó\99гаÑ\82Ñ\8cкÓ\99 басыгыз.",
        "filehist-deleteall": "Барысын да юк ит",
        "filehist-deleteone": "бетерү",
        "filehist-revert": "кайтару",
        "filehist-current": "хәзерге",
        "filehist-datetime": "Дата/вакыт",
        "filehist-thumb": "Миниатюра",
-       "filehist-thumbtext": "$1 көнне булган версиянең эскизы",
+       "filehist-thumbtext": "$1 көнне булган юрама эскизы",
        "filehist-nothumb": "Миниатюрасы юк",
        "filehist-user": "Кулланучы",
        "filehist-dimensions": "Зурлык",
        "whatlinkshere-prev": "{{PLURAL:$1|1=алдагы}} $1",
        "whatlinkshere-next": "{{PLURAL:$1|1=киләсе}} $1",
        "whatlinkshere-links": "← сылтамалар",
-       "whatlinkshere-hideredirs": "юнәлтүләрне $1",
-       "whatlinkshere-hidetrans": "кертүләрне $1",
-       "whatlinkshere-hidelinks": "сылтамаларны $1",
+       "whatlinkshere-hideredirs": "Юнәлтүләрне $1",
+       "whatlinkshere-hidetrans": "Ð\9aертүләрне $1",
+       "whatlinkshere-hidelinks": "Сылтамаларны $1",
        "whatlinkshere-hideimages": "$1 файл сылтамалары",
        "whatlinkshere-filters": "Фильтрлар",
        "blockip": "{{GENDER:$1|Кулланучыны}} тыю",
        "tooltip-pt-mytalk": "Бәхәс битегез",
        "tooltip-pt-preferences": "Көйләнмәләрегез",
        "tooltip-pt-watchlist": "Сез күзәтелгән төзәтмәле битләр исемлеге",
-       "tooltip-pt-mycontris": "Сезнең ÐºÐµÑ\80Ñ\82еменгезне Ð¸Ñ\81емлеге",
+       "tooltip-pt-mycontris": "Сезнең ÐºÐµÑ\80Ñ\82емегез",
        "tooltip-pt-login": "Сез хисап язмасы төзи алыр идегез, әмма бу мәҗбүри түгел.",
        "tooltip-pt-logout": "Чыгу",
        "tooltip-pt-createaccount": "Сезгә аккаунт ясарга һәм системага керергә киңәш итәбез, әмма бу мәҗбүри түгел.",
        "tooltip-ca-watch": "Бу битне сезнең күзәтү исемлегезгә өстәү",
        "tooltip-ca-unwatch": "Бу битне сезнең күзәтү исемлегездә бетерү",
        "tooltip-search": "{{SITENAME}} эчендә эзләү",
-       "tooltip-search-go": "Нәк шундый исеме белән биткә күчәрү",
+       "tooltip-search-go": "Нәкъ шундый исеме белән биткә күчәрү",
        "tooltip-search-fulltext": "Бу текст белән битләрне табу",
-       "tooltip-p-logo": "Баш бит",
-       "tooltip-n-mainpage": "Ð\91аÑ\88 Ð±Ð¸Ñ\82не ÐºÐµÑ\80еп Ñ\87Ñ\8bгÑ\83",
+       "tooltip-p-logo": "Баш биткә күчү",
+       "tooltip-n-mainpage": "Ð\91аÑ\88 Ð±Ð¸Ñ\82кÓ\99 ÐºÒ¯Ñ\87Ò¯",
        "tooltip-n-mainpage-description": "Баш биткә күчү",
        "tooltip-n-portal": "Проект турында, сез нәрсә итә аласыз һәм нәрсә кайда була дип турында.",
        "tooltip-n-currentevents": "Агымдагы вакыйгалар турында мәгълүматны табу",
        "tooltip-t-recentchangeslinked": "Бу биттән сылтаган битләрдә ахыргы үзгәртүләр",
        "tooltip-feed-rss": "Бу бит өчен RSS трансляциясе",
        "tooltip-feed-atom": "Бу бит өчен Atom трансляциясе",
-       "tooltip-t-contributions": "Ð\9aÑ\83лланÑ\83Ñ\87Ñ\8b ÐºÐµÑ\80Ñ\82еменең Ð¸Ñ\81емлегене карау",
+       "tooltip-t-contributions": "Ð\91Ñ\83 ÐºÑ\83лланÑ\83Ñ\87Ñ\8bнÑ\8bÒ£ ÐºÐµÑ\80Ñ\82ем Ð¸Ñ\81емлеген карау",
        "tooltip-t-emailuser": "Бу кулланучыга хат җибәрү",
        "tooltip-t-upload": "Файлларны йөкләү",
        "tooltip-t-specialpages": "Барлык махсус битләр исемлеге",
        "tooltip-ca-nstab-category": "Төркем битен карау",
        "tooltip-minoredit": "Бу үзгәртүне кече дип билгелү",
        "tooltip-save": "Үзгәртүләрегезне саклау",
-       "tooltip-preview": "Сезнең Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80егезнең Ð°Ð»Ð´Ð°Ð½ ÐºÐ°Ñ\80авÑ\8b, Ñ\81аклаÑ\83дан ÐºÐ°Ð´Ó\99Ñ\80 Ð¼Ð¾Ð½Ñ\8b ÐºÑ\83лланÑ\8bгÑ\8bз Ó\99ле!",
+       "tooltip-preview": "Ð\90лдан ÐºÐ°Ñ\80аÑ\83, Ñ\81аклаÑ\83 Ð°Ð»Ð´Ñ\8bннан Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80егезнең ÐºÐ°Ñ\80ап Ñ\87Ñ\8bгÑ\8bгÑ\8bз!",
        "tooltip-diff": "Сезнең үзгәртүләрегезне күрсәтү.",
        "tooltip-compareselectedversions": "Бу битнең сайланган ике юрамасы арасында аерманы карау",
        "tooltip-watch": "Бу битне күзәтү исемлегемә өстәү",
        "exif-software": "Программалы тәэмин ителеш",
        "exif-artist": "Автор",
        "exif-copyright": "Автор хокуклары хуҗасы",
-       "exif-exifversion": "Exif версиясе",
+       "exif-exifversion": "Exif юрамасы",
        "exif-flashpixversion": "FlashPix юрамасын тәэмин итү",
        "exif-colorspace": "Төсләр тирәлеге",
        "exif-componentsconfiguration": "Төсләр төзелешенең конфигурациясе",
        "specialpages-group-users": "Кулланучылар һәм аларның хокуклары",
        "specialpages-group-highuse": "Еш кулланылучы битләр",
        "specialpages-group-pages": "Битләр исемлеге",
-       "specialpages-group-pagetools": "Бит өчен җиһазлар",
+       "specialpages-group-pagetools": "Бит өчен кораллар",
        "specialpages-group-wiki": "Мәгълүмат һәм җиһазлар",
        "specialpages-group-redirects": "Күчерелүче махсус битләр",
        "specialpages-group-spam": "Спамга каршы кораллар",
        "intentionallyblankpage": "Бу бит махсус буш калдырылган",
        "external_image_whitelist": "#Бу юлны ничек бар, шулаө калдырыгыз<pre>\n#Монда даими фразаларның фрагментларын куегыз (// арасында торган өлешен)\n#алар тышкы сурәтләрнең URL белән бәйләнерләр.\n#Туры килгәннәре сурәт буларак, туры килмәгәннәре сурәткә сылтама буларак күрсәтеләчәкләр.\n# # билгесе белән башланучы юллар шәрехнамә дип саналалар.\n#Юллар регистрга игътибар бирмиләр.\n\n#Даими фразаларның фрагментларын бу кыр өстендә куегыз. Бу кырны ничек бар, шулай калдырыгыз.</pre>",
        "tags": "Гамәлдә булучы үзгәртүләр билгеләре",
-       "tag-filter": "[[Special:Tags|Tag]] фильтры:",
+       "tag-filter": "[[Special:Tags|Билгеләр]] фильтры:",
        "tag-filter-submit": "Фильтрлау",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Билге|Билгеләр}}]]: $2)",
        "tags-title": "Теглар",
        "revdelete-uname-unhid": "кулланучының исеме ачылган",
        "revdelete-restricted": "чикләүләр идарәчеләргә дә кулланыла",
        "revdelete-unrestricted": "чикләүләр идарәчеләр өчен бетерелгән",
-       "logentry-move-move": "$1 $3 сәхифәсен $4 {{GENDER:$2|итеп күчерде}}",
+       "logentry-move-move": "$1  $3 битенең исемен {{GENDER:$2| үзгәртте}}. Яңа исеме: $4",
        "logentry-move-move-noredirect": "$1 юнәлтү калдырмыйча $3 сәхифәсен $4 итеп күчерде",
        "logentry-move-move_redir": "$1 юнәлтү аша $3 сәхифәсен $4 итеп күчерде",
        "logentry-move-move_redir-noredirect": "$1 юнәлтү аша, юнәлтү калдырмыйча $3 сәхифәсен $4 итеп күчерде",
index e10c91e..445856f 100644 (file)
        "nstab-template": "قېلىپ",
        "nstab-help": "ياردەم بەت",
        "nstab-category": "تۈر",
+       "mainpage-nstab": "باش بەت",
        "nosuchaction": "بۇنداق مەشغۇلات يوق",
        "nosuchactiontext": "بۇ مەشغۇلات بېكىتكەن URL ئىناۋەتسىز.\n\nURL نى خاتا كىرگۈزۈپ قالدىڭىز ياكى خاتا ئۇلانمىغا ئەگەشتىڭىز.\n\n {{SITENAME}} بېكەت يۇمشاق دېتالىنىڭ خاتالىقى بولۇشى مۇمكىن.",
        "nosuchspecialpage": "بۇنىڭغا ئوخشاش ئالاھىدە بەت يوق",
        "createaccountreason": "سەۋەب:",
        "createacct-reason": "سەۋەبى",
        "createacct-reason-ph": "نېمىشقا باشقا ھېسابات قۇرماقچى بولدىڭىز",
-       "createacct-captcha": "بىخەتەرلىك تەكشۈرۈشى",
-       "createacct-imgcaptcha-ph": "ئۈستىدە كۆرگىنىڭىزنى كىرگۈزۈڭ",
        "createacct-submit": "ھېساباتىڭىزنى قۇرۇڭ",
        "createacct-another-submit": "باشقا ھېسابات قۇرىمەن",
        "createacct-benefit-heading": "{{SITENAME}} سىزگە ئوخشاش كىشىلەر تەرىپىدىن قۇرۇلغان.",
        "loginlanguagelabel": "تىل: $1",
        "suspicious-userlogout": "تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.",
        "createacct-another-realname-tip": "ھەقىقىي ئىسمىڭىز ئىختىيارى.\nئەگەر تەمىنلەشنى تاللىسىڭىز، ئۇ سىزنىڭ تۆھپىڭىزنىڭ ئىمزاسى بولىدۇ.",
+       "pt-login": "تىزىمغا كىرىڭ",
+       "pt-createaccount": "ھېسابات قۇر",
        "php-mail-error-unknown": "PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق",
        "user-mail-no-addy": "ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.",
        "user-mail-no-body": "بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.",
        "passwordreset-emailtext-ip": "باشقىلار (بەلكىم سىز، IP ئادرېسى $1) {{SITENAME}} ($4) دىكى پارولنى قايتا بېكىتىشنى ئىلتىماس قىلدى. تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول  {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "passwordreset-emailtext-user": "{{SITENAME}} دىكى ئىشلەتكۈچى $1 بېكەت {{SITENAME}} ($4) دىكى پارولىڭىزنى قايتا بېكىتىشنى ئىلتىماس قىلدى .\nتۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "passwordreset-emailelement": "ئىشلەتكۈچى نامى: \n$1\n\nۋاقىتلىق پارول: \n$2",
-       "passwordreset-emailsent": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى.",
+       "passwordreset-emailsentemail": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى.",
        "passwordreset-emailsent-capture": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى، تۆۋەندە كۆرسىتىلىدۇ.",
        "passwordreset-emailerror-capture": "ھاسىل قىلىنغان پارولنى قايتا بېكىتىش ئېلخېتى تۆۋەندە كۆرسىتىلگەندەك ئەمما ئۇنى {{GENDER:$2|ئىشلەتكۈچى}}گە يوللىيالمىدى: $1",
        "changeemail": "ئېلخەت ئادرېس ئۆزگەرت",
-       "changeemail-text": "بۇ جەدۋەل تاماملانسا ئېلخەت ئادرېسىڭىزنى ئۆزگەرتىدۇ. سىز ئىم كىرگۈزۈپ بۇ ئۆزگەرتىشنى جەزملەيسىز.",
+       "changeemail-header": "ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت",
        "changeemail-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
        "changeemail-oldemail": "نۆۋەتتىكى ئېلخەت ئادرېسى:",
        "changeemail-newemail": "يېڭى ئېلخەت ئادرېسى:",
        "prefs-tokenwatchlist": "ئاچقۇچ",
        "prefs-diffs": "پەرقلەر",
        "prefs-help-prefershttps": "بۇ سەپلەك، سىز قايتا تىزىمغا كىرگەندە ئىشلەيدۇ.",
-       "email-address-validity-valid": "ئېلخەت ئادرېسى ئىناۋەتلىك",
-       "email-address-validity-invalid": "ئىناۋەتلىك ئېلخەت ئادرېسىدىن بىرنى كىرگۈزۈڭ",
        "userrights": "ئىشلەتكۈچى ھوقۇقى باشقۇرۇش",
        "userrights-lookup-user": "ئىشلەتكۈچى گۇرۇپپىسى باشقۇرۇش",
        "userrights-user-editname": "ئىشلەتكۈچى ئاتى كىرگۈزۈڭ:",
        "wlheader-showupdated": "سىز ئالدىنقى قېتىم كۆرگەندىن كېيىن ئۆزگەرتىلگەن بەتلەر '''توم''' كۆرۈنىدۇ",
        "wlnote": "تۆۋەندىكىسى يېقىنقى {{PLURAL:$2|سائەت}} ئىچىدىكى ئاخىرقى '{{PLURAL:$1| قېتىملىق}}  ئۆزگەرتىش، $3 $4 گىچە.",
        "wlshowlast": "يېقىنقى $1 سائەت $2 كۈن  نىڭ ئۆزگەرتىشىنى كۆرسەت",
+       "watchlistall2": "ھەممىسى",
        "watchlist-options": "كۆزەت تىزىملىك تاللانما",
        "watching": "كۆزەت قىلىۋاتىدۇ…",
        "unwatching": "كۆزەت قىلمايۋاتىدۇ…",
        "movenosubpage": "بۇ بەتنىڭ تارماق بېتى يوق",
        "movereason": "سەۋەب:",
        "revertmove": "قايتۇر",
-       "delete_and_move": "ئۆچۈرۈپ يۆتكە",
        "delete_and_move_text": "== ئۆچۈرۈش زۆرۈر ==\nنىشان بەت \"[[:$1]]\" مەۋجۇد.\nيۆتكەشكە قولاي بولۇشى ئۈچۈن بۇ بەتنى ئۆچۈرەمسىز؟",
        "delete_and_move_confirm": "ھەئە، بۇ بەتنى ئۆچۈر",
        "delete_and_move_reason": " \"[[$1]]\" يۆتكەشكە قولاي بولۇشى ئۈچۈن ئۆچۈرۈۋېتىلدى",
        "tooltip-pt-mycontris": "تۆھپە تىزىملىكىڭىز",
        "tooltip-pt-login": "تىزىمغا كىرىشىڭىزنى تەۋسىيە قىلىمىز ئەمما مەجبۇرىي ئەمەس",
        "tooltip-pt-logout": "تىزىمدىن چىق",
+       "tooltip-pt-createaccount": "ھېساباتتىن بىرنى قۇرۇپ تىزىمغا كىرىشىڭىزنى تەۋسىيە قىلىمىز، ئەمما بۇ مەجبۇرىي ئەمەس.",
        "tooltip-ca-talk": "بەت مەزمۇنى ھەققىدىكى مۇنازىرە",
        "tooltip-ca-edit": "بۇ بەتنى تەھرىرلىيەلەيسىز.\nساقلاشتىن ئىلگىرى ئالدىن كۆزەت كۇنۇپكىسىنى ئىشلىتىڭ",
        "tooltip-ca-addsection": "يېڭى بىر مۇنازىرە باشلاڭ",
index 62d4875..c2d96e3 100644 (file)
        "databaseerror-query": "Запит: $1",
        "databaseerror-function": "Функція: $1",
        "databaseerror-error": "Помилка: $1",
-       "transaction-duration-limit-exceeded": "Ð\94лÑ\8f Ñ\82ого, Ñ\89об Ñ\83никнÑ\83Ñ\82и Ð»Ð°Ð³Ñ\83 Ð¿Ñ\80и Ñ\80еплÑ\96каÑ\86Ñ\96Ñ\97, Ñ\86Ñ\8f Ñ\82Ñ\80анзакÑ\86Ñ\96Ñ\8f Ð±Ñ\83ла Ð¿ÐµÑ\80еÑ\80вана, Ð¾Ñ\81кÑ\96лÑ\8cки Ñ\82Ñ\80ивалÑ\96Ñ\81Ñ\82Ñ\8c Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83 ($1) Ð¿ÐµÑ\80евиÑ\89ила Ð»Ñ\96мÑ\96в Ð² $2 Ñ\81ек.\nЯкщо ви змінюєте декілька елементів за один раз, постарайтесь замість цього зробити декілька невеликих операцій.",
+       "transaction-duration-limit-exceeded": "Щоб Ñ\83никнÑ\83Ñ\82и Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³Ð¾ Ð»Ð°Ð³Ñ\83 Ð¿Ñ\80и Ñ\80еплÑ\96каÑ\86Ñ\96Ñ\97, Ñ\86Ñ\8f Ñ\82Ñ\80анзакÑ\86Ñ\96Ñ\8f Ð±Ñ\83ла Ð¿ÐµÑ\80еÑ\80вана, Ð¾Ñ\81кÑ\96лÑ\8cки Ñ\82Ñ\80ивалÑ\96Ñ\81Ñ\82Ñ\8c Ð·Ð°Ð¿Ð¸Ñ\81Ñ\83 ($1) Ð¿ÐµÑ\80евиÑ\89ила Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ\8f Ð² $2 {{PLURAL:$2|Ñ\81екÑ\83ндÑ\83\81екÑ\83нд|Ñ\81екÑ\83нди}}.\n\nЯкщо ви змінюєте декілька елементів за один раз, постарайтесь замість цього зробити декілька невеликих операцій.",
        "laggedslavemode": "Увага: сторінка може не містити останніх редагувань.",
        "readonly": "Запис до бази даних заблокований",
        "enterlockreason": "Зазначте причину і приблизний термін блокування",
        "passwordreset-emailtext-ip": "Хтось (імовірно ви, з IP-адреси $1) попросив нагадати деталі вашого облікового запису для {{SITENAME}} ($4). З вашою електронною скринькою пов'язан{{PLURAL:$3|1=ий такий запис|і такі записи}}:\n\n$2\n\n{{PLURAL:$3|1=Цей тимчасовий пароль стане недійсним|Ці тимчасові паролі стануть недійсними}} через $5 {{PLURAL:$5|день|дні|днів}}.\nВи маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший або ви згадали свій старий пароль і не бажаєте його змінювати, можете ігнорувати це повідомлення та продовжувати використовувати старий пароль.",
        "passwordreset-emailtext-user": "Користувач $1 з {{SITENAME}} попросив нагадати деталі вашого облікового запису для {{SITENAME}} ($4). З вашою електронною скринькою пов'язан{{PLURAL:$3|1=ий такий запис|і такі записи}}:\n\n$2\n\n{{PLURAL:$3|1=Цей тимчасовий пароль|Ці тимчасові паролі}} стануть нечинні через {{PLURAL:$5|день|$5 дні|$5 днів}}.\nВи маєте ввійти в систему і вибрати новий пароль. Якщо ж цей запит зробив хтось інший, або ви згадали свій старий пароль і не бажаєте його змінювати, можете просто ігнорувати це повідомлення та продовжувати використовувати старий пароль.",
        "passwordreset-emailelement": "Ім'я користувача: \n$1\n\nТимчасовий пароль: \n$2",
-       "passwordreset-emailsentemail": "Якщо це адреса електронної пошти, на яку зареєстрований ваш обліковий запис, то буде надісланий лист для відновлення пароля.",
-       "passwordreset-emailsentusername": "ЯкÑ\89о Ñ\86е Ð²Ñ\96дповÑ\96дна Ð°Ð´Ñ\80еÑ\81а ÐµÐ»ÐµÐºÑ\82Ñ\80онноÑ\97 Ð¿Ð¾Ñ\88Ñ\82и, Ð±Ñ\83де Ð²Ñ\96дпÑ\80авлено лист для відновлення пароля.",
+       "passwordreset-emailsentemail": "Якщо ця електронна адреса асоційована з вашим обліковим записом, то лист для відновлення пароля буде відправлено на неї.",
+       "passwordreset-emailsentusername": "ЯкÑ\89о Ñ\96Ñ\81нÑ\83Ñ\94 ÐµÐ»ÐµÐºÑ\82Ñ\80онна Ð°Ð´Ñ\80еÑ\81а, Ñ\8fка Ð°Ñ\81оÑ\86Ñ\96йована Ð· Ñ\86им Ð¾Ð±Ð»Ñ\96ковим Ð·Ð°Ð¿Ð¸Ñ\81ом, Ð½Ð° Ð½ÐµÑ\97 Ð±Ñ\83де Ð½Ð°Ð´Ñ\96Ñ\81лано лист для відновлення пароля.",
        "passwordreset-emailsent-capture": "Електронний лист скидання пароля було надіслано, як показано нижче.",
        "passwordreset-emailerror-capture": "Електронний лист для відновлення пароля мав бути надісланий, як показано нижче, але його надсилання {{GENDER:$2|користувачеві|користувачці}} $1 не вдалося.",
        "changeemail": "Змінити або вилучити адресу електронної пошти",
        "upload-form-label-select-file": "Обрати файл",
        "upload-form-label-infoform-title": "Деталі",
        "upload-form-label-infoform-name": "Назва",
+       "upload-form-label-infoform-name-tooltip": "Унікальна описова назва файлу. Ви можете використовувати простий текст з пробілами. Не вказуйте розширення файла.",
        "upload-form-label-infoform-description": "Опис",
+       "upload-form-label-infoform-description-tooltip": "Коротко напишіть усе основне та цікаве про цю роботу.\nНаприклад, для фото опишіть, що сфотографовано, місце та нагоду знімка.",
        "upload-form-label-usage-title": "Використання",
        "upload-form-label-usage-filename": "Назва файлу",
        "foreign-structured-upload-form-label-own-work": "Це моя власна робота",
        "wlshowhideanons": "анонімних користувачів",
        "wlshowhidepatr": "перевірені редагування",
        "wlshowhidemine": "мої редагування",
+       "wlshowhidecategorization": "категоризацію сторінок",
        "watchlist-options": "Налаштування списку спостереження",
        "watching": "Додавання до списку спостереження…",
        "unwatching": "Вилучення зі списку спостереження…",
        "export-download": "Зберегти як файл",
        "export-templates": "Включити шаблони",
        "export-pagelinks": "Включити пов'язані сторінки з глибиною:",
+       "export-manual": "Додати сторінки вручну:",
        "allmessages": "Системні повідомлення",
        "allmessagesname": "Назва",
        "allmessagesdefault": "Стандартний текст",
        "tags-deactivate": "вимкнути",
        "tags-hitcount": "$1 {{PLURAL:$1|зміна|зміни|змін}}",
        "tags-manage-no-permission": "У Вас нема дозволу керувати змінами міток.",
+       "tags-manage-blocked": "Не можна змінювати мітки під час блокування.",
        "tags-create-heading": "Створити нову мітку",
        "tags-create-explanation": "За замовчуванням, новостворені мітки будуть доступні для використання користувачами і ботами.",
        "tags-create-tag-name": "Назва мітки:",
        "tags-deactivate-not-allowed": "Неможливо вимкнути мітку «$1».",
        "tags-deactivate-submit": "Вимкнути",
        "tags-apply-no-permission": "Ви не маєте права міняти мітки вашого редагування.",
+       "tags-apply-blocked": "Ви не можете змінювати мітки редагувань, будучи заблокованим.",
        "tags-apply-not-allowed-one": "Мітку «$1» не можна додавати вручну.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
        "tags-update-no-permission": "Ви не маєте права додавати або вилучати мітки окремих версій чи журнальних записів.",
+       "tags-update-blocked": "Ви не можете додати чи видалити мітки редагувань, будучи заблокованим.",
        "tags-update-add-not-allowed-one": "Мітку \"$1\" не можна додавати вручну.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Таку мітку|Такі мітки}} не можна додавати вручну: $1",
        "tags-update-remove-not-allowed-one": "Мітку «$1» не дозволено вилучати.",
        "expand_templates_preview": "Попередній перегляд",
        "expand_templates_preview_fail_html": "<em>Оскільки {{SITENAME}} має ввімкненим сирий HTML і відбулась втрата даних сесії, попередній перегляд прихований як захід безпеки від JavaScript-атак.</em>\n\n<strong>Якщо це правомірна спроба попереднього перегляду, будь ласка, спробуйте знову.</strong>\nЯкщо це досі не працює, спробуйте [[Special:UserLogout|вийти із системи]] та знову ввійти до неї.",
        "expand_templates_preview_fail_html_anon": "<em>Оскільки {{SITENAME}} має ввімкненим сирий HTML, а Ви не ввійшли до системи, попередній перегляд прихований як захід безпеки від JavaScript-атак.</em>\n\n<strong>Якщо це правомірна спроба попереднього перегляду, будь ласка, [[Special:UserLogin|увійдіть до системи]] та спробуйте знову.</strong>",
+       "expand_templates_input_missing": "Ви повинні надати принаймні деякий вхідний текст.",
        "pagelanguage": "Вибір мови сторінки",
        "pagelang-name": "Сторінка",
        "pagelang-language": "Мова",
        "pagelang-use-default": "Мова за замовчуванням",
        "pagelang-select-lang": "Оберіть мову",
+       "pagelang-submit": "Відправити",
        "right-pagelang": "зміна мови сторінки",
        "action-pagelang": "змінити мову сторінки",
        "log-name-pagelang": "Журнал змін мови",
        "mediastatistics": "Медіа-статистика",
        "mediastatistics-summary": "Статистичні дані про типи завантажених файлів. Вона тільки включає в себе найновішу версію файлу. Старі або видалені версії файлів виключені.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 байт|$1 байтів|$1 байти}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Загальний розмір файлів для цього розділу: {{PLURAL:$1|$1 байт|$1 байтів|$1 байта}} ($2; $3%).",
+       "mediastatistics-allbytes": "Загальний розмір файлів на цій сторінці: {{PLURAL:$1|$1 байт|$1 байта|$1 байтів}} ($2).",
        "mediastatistics-table-mimetype": "MIME-тип",
        "mediastatistics-table-extensions": "Можливі розширення",
        "mediastatistics-table-count": "Кількість файлів",
        "mediastatistics-header-text": "Текст",
        "mediastatistics-header-executable": "Виконувані файли",
        "mediastatistics-header-archive": "Стиснуті формати",
+       "mediastatistics-header-total": "Усі файли",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|зайву завершальну кому|зайвих завершальних коми|зайвих завершальних ком}} було видалено із JSON",
        "json-error-unknown": "Виникла проблема із JSON. Помилка: $1",
        "json-error-depth": "Перевищено дозволену глибину стека",
index bec3071..356aa9c 100644 (file)
                ]
        },
        "tog-underline": "链接下划线:",
-       "tog-hideminor": "隐藏最近更改中的小编辑",
-       "tog-hidepatrolled": "隐藏最近更改中的已巡查编辑",
-       "tog-newpageshidepatrolled": "隐藏新页面列表中的已巡查页面",
-       "tog-hidecategorization": "隐藏页面的分类",
+       "tog-hideminor": "在最近更改中隐藏小编辑",
+       "tog-hidepatrolled": "在最近更改中隐藏已巡查的编辑",
+       "tog-newpageshidepatrolled": "在新页面列表中隐藏已巡查页面",
+       "tog-hidecategorization": "隐藏页面的分类",
        "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅是最近的更改",
        "tog-usenewrc": "按页面合并最近更改和监视列表中的更改",
        "tog-numberheadings": "自动将标题编号",
        "nocookiesnew": "该用户帐户已被创建,但登录失败。{{SITENAME}}使用Cookie实现用户登录。您已禁用Cookie,请启用Cookie,然后使用你的新用户名与密码登录。",
        "nocookieslogin": "{{SITENAME}}使用Cookie实现用户登录。您已停用Cookie。请启用Cookie后再试。",
        "nocookiesfornew": "该用户账户未被创建,我们不能确认它的来源。请确保你已启用Cookie,刷新本页后再试。",
-       "noname": "你没有指定有效的用户名。",
+       "noname": "指定有效的用户名。",
        "loginsuccesstitle": "登录成功",
        "loginsuccess": "<strong>您现在已经以\"$1\"的身份登录了{{SITENAME}}。</strong>",
        "nosuchuser": "没有名为“$1”的用户。用户名区分大小写。请检查你的拼写或[[Special:UserLogin/signup|创建新账户]]。",
        "nosuchusershort": "没有名为“$1”的用户。请检查你的拼写。",
-       "nouserspecified": "你必须指定用户名。",
+       "nouserspecified": "您必须指定一个用户名。",
        "login-userblocked": "该用户已被封禁,禁止登录。",
        "wrongpassword": "您输入的密码错误。请重试。",
        "wrongpasswordempty": "密码输入为空。请重试。",
        "edit-conflict": "编辑冲突。",
        "edit-no-change": "因为没有文字更改,你的编辑已被忽略。",
        "postedit-confirmation-created": "页面已创建。",
-       "postedit-confirmation-restored": "页面已创建。",
+       "postedit-confirmation-restored": "页面已恢复。",
        "postedit-confirmation-saved": "你的编辑已保存。",
        "edit-already-exists": "不可以建立一个新页面。\n它已经存在。",
        "defaultmessagetext": "默认消息文本",
        "rev-deleted-text-view": "本页面版本已被'''删除'''。你可以查看它,详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
        "rev-suppressed-text-view": "该页面版本已经被'''监督隐藏'''。您可以查看它。在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到详细的信息。",
        "rev-deleted-no-diff": "你不能查看该差异,因为其中一个版本已被'''删除'''。详情请见[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]。",
-       "rev-suppressed-no-diff": "你不能查看该差异,因为其中一个版本已被'''删除'''。",
+       "rev-suppressed-no-diff": "无法查看该差异,因为其中一个版本已被<strong>删除<strong>。",
        "rev-deleted-unhide-diff": "该差异对比的其中的一个版本已经被<strong>删除</strong>。在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中可以找到更多的信息。如果您想继续的话,您仍然可以[$1 查看此版本]。",
        "rev-suppressed-unhide-diff": "该页面的其中一次版本已经被<strong>监督隐藏</strong>。\n在[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 监督日志]中可以找到更多的资料。如果您想继续的话,您可以仍然[$1 去查看这版本]。",
        "rev-deleted-diff-view": "差异对比中的一次版本已被<strong>删除</strong>。您可以对比此差异。详细信息可在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "prefs-custom-css": "自定义CSS",
        "prefs-custom-js": "自定义JavaScript",
        "prefs-common-css-js": "所有皮肤共用的CSS/JavaScript:",
-       "prefs-reset-intro": "你可以使用本页面重置你的系统设置为网站默认值。该操作不能撤销。",
+       "prefs-reset-intro": "可以通过本页面将系统设置重置为网站默认值。该操作无法撤销。",
        "prefs-emailconfirm-label": "电子邮件确认:",
        "youremail": "电子邮件:",
        "username": "{{GENDER:$1|用户名}}:",
        "upload-form-label-select-file": "选择文件",
        "upload-form-label-infoform-title": "详细信息",
        "upload-form-label-infoform-name": "名称",
+       "upload-form-label-infoform-name-tooltip": "用于文件的唯一描述性标题,它将用作文件名。您可以使用带空格的普通语言。不要包含文件扩展名。",
        "upload-form-label-infoform-description": "说明",
+       "upload-form-label-infoform-description-tooltip": "简单描述有关作品的任何显著信息。\n对于照片,可提及描述的主要事物、场景或地点。",
        "upload-form-label-usage-title": "用法",
        "upload-form-label-usage-filename": "文件名",
        "foreign-structured-upload-form-label-own-work": "这是我的作品",
        "export-download": "另存为文件",
        "export-templates": "包含模板",
        "export-pagelinks": "包含链接页面的搜索深度:",
+       "export-manual": "手动添加页面:",
        "allmessages": "系统消息",
        "allmessagesname": "名称",
        "allmessagesdefault": "默认信息文字",
        "compare-submit": "对比",
        "compare-invalid-title": "您指定的标题无效。",
        "compare-title-not-exists": "您指定的标题不存在。",
-       "compare-revision-not-exists": "指定的版本不存在。",
+       "compare-revision-not-exists": "指定的版本不存在。",
        "dberr-problems": "抱歉!本网站出现了一些技术问题。",
        "dberr-again": "请等待几分钟后重试。",
        "dberr-info": "(无法访问数据库:$1)",
        "expand_templates_preview": "预览",
        "expand_templates_preview_fail_html": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请再次重试。</strong>\n如果仍然不能工作,尝试[[Special:UserLogout|退出]]并重新登录。",
        "expand_templates_preview_fail_html_anon": "<em>因为{{SITENAME}}启用了Raw HTML并且丢失了会话数据,预览被隐藏以防止JavaScript攻击。</em>\n\n<strong>如果这是合法的预览尝试,请尝试[[Special:UserLogin|登录]]并重试。</strong>",
+       "expand_templates_input_missing": "您需要提供至少一些输入文本。",
        "pagelanguage": "页面语言选择器",
        "pagelang-name": "页面",
        "pagelang-language": "语言",
        "mediastatistics": "媒体统计",
        "mediastatistics-summary": "有关上传文件类型的统计。这只包含文件的最新版本,旧版本或删除版本则不会包括。",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1字节}}($2;$3%)",
-       "mediastatistics-bytespertype": "此段落的总文件大小:$1字节。",
-       "mediastatistics-allbytes": "所有文件的总文件大小:$1字节。",
+       "mediastatistics-bytespertype": "此段落的总文件大小:{{PLURAL:$1|$1字节}}($2;$3%)。",
+       "mediastatistics-allbytes": "所有文件的总文件大小:{{PLURAL:$1|$1字节}}($2)。",
        "mediastatistics-table-mimetype": "MIME类型",
        "mediastatistics-table-extensions": "可用扩展名",
        "mediastatistics-table-count": "文件数",
index aeadc93..d5b98b5 100644 (file)
@@ -39,7 +39,7 @@ class UpdateLogging {
        public $minTs = false;
 
        function execute() {
-               $this->dbw = wfGetDB( DB_MASTER );
+               $this->dbw = $this->getDB( DB_MASTER );
                $logging = $this->dbw->tableName( 'logging' );
                $logging_1_10 = $this->dbw->tableName( 'logging_1_10' );
                $logging_pre_1_10 = $this->dbw->tableName( 'logging_pre_1_10' );
index fba6b92..a2ea554 100644 (file)
@@ -43,7 +43,7 @@ class AttachLatest extends Maintenance {
 
        public function execute() {
                $this->output( "Looking for pages with page_latest set to 0...\n" );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $conds = array( 'page_latest' => 0 );
                if ( $this->hasOption( 'regenerate-all' ) ) {
                        $conds = '';
index 8ae4f03..572c548 100644 (file)
@@ -35,7 +35,7 @@ class BenchmarkDeleteTruncate extends Benchmarker {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $test = $dbw->tableName( 'test' );
                $dbw->query( "CREATE TABLE IF NOT EXISTS /*_*/$test (
index ce38dad..b850e63 100644 (file)
@@ -118,7 +118,7 @@ class BenchmarkParse extends Maintenance {
         * @return bool|string Revision ID, or false if not found or error
         */
        function getRevIdForTime( Title $title, $timestamp ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $id = $dbr->selectField(
                        array( 'revision', 'page' ),
index fec9291..500fc35 100644 (file)
@@ -36,7 +36,7 @@ class CheckBadRedirects extends Maintenance {
 
        public function execute() {
                $this->output( "Fetching redirects...\n" );
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $result = $dbr->select(
                        array( 'page' ),
                        array( 'page_namespace', 'page_title', 'page_latest' ),
index 0364db2..9761927 100644 (file)
@@ -37,7 +37,7 @@ class CheckImages extends Maintenance {
 
        public function execute() {
                $start = '';
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $numImages = 0;
                $numGood = 0;
index a64bc49..6f4d170 100644 (file)
@@ -40,7 +40,7 @@ class CheckUsernames extends Maintenance {
        }
 
        function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $maxUserId = 0;
                do {
index 2dbf8bc..f1467d5 100644 (file)
@@ -46,7 +46,7 @@ class CleanupAncientTables extends Maintenance {
                        );
                }
 
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
                $ancientTables = array(
                        'blobs', // 1.4
                        'brokenlinks', // 1.4
index 1736203..437abe9 100644 (file)
@@ -38,7 +38,7 @@ class CleanupBlocks extends Maintenance {
        }
 
        public function execute() {
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
 
                $max = $db->selectField( 'ipblocks', 'MAX(ipb_user)' );
 
index 5baa8d3..ab2d808 100644 (file)
@@ -102,7 +102,7 @@ class ImageCleanup extends TableCleanup {
                        $this->output( "DRY RUN: would delete bogus row '$name'\n" );
                } else {
                        $this->output( "deleting bogus row '$name'\n" );
-                       $db = wfGetDB( DB_MASTER );
+                       $db = $this->getDB( DB_MASTER );
                        $db->delete( 'image',
                                array( 'img_name' => $name ),
                                __METHOD__ );
@@ -139,7 +139,7 @@ class ImageCleanup extends TableCleanup {
                        return;
                }
 
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
 
                /*
                 * To prevent key collisions in the update() statements below,
index 68f57a3..810fad9 100644 (file)
@@ -39,7 +39,7 @@ class CleanupRemovedModules extends Maintenance {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $rl = new ResourceLoader( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
                $moduleNames = $rl->getModuleNames();
                $moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
index e6471dd..b43ce81 100644 (file)
@@ -64,7 +64,7 @@ class CleanupSpam extends Maintenance {
                        $this->output( "Finding spam on " . count( $wgLocalDatabases ) . " wikis\n" );
                        $found = false;
                        foreach ( $wgLocalDatabases as $wikiID ) {
-                               $dbr = wfGetDB( DB_SLAVE, array(), $wikiID );
+                               $dbr = $this->getDB( DB_SLAVE, array(), $wikiID );
 
                                $count = $dbr->selectField( 'externallinks', 'COUNT(*)',
                                        array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ );
@@ -83,7 +83,7 @@ class CleanupSpam extends Maintenance {
                } else {
                        // Clean up spam on this wiki
 
-                       $dbr = wfGetDB( DB_SLAVE );
+                       $dbr = $this->getDB( DB_SLAVE );
                        $res = $dbr->select( 'externallinks', array( 'DISTINCT el_from' ),
                                array( 'el_index' . $dbr->buildLike( $like ) ), __METHOD__ );
                        $count = $dbr->numRows( $res );
@@ -120,7 +120,7 @@ class CleanupSpam extends Maintenance {
                        // This happens e.g. when a link comes from a template rather than the page itself
                        $this->output( "False match\n" );
                } else {
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $this->beginTransaction( $dbw, __METHOD__ );
                        $page = WikiPage::factory( $title );
                        if ( $rev ) {
index 74073bc..0ddaf33 100644 (file)
@@ -106,7 +106,7 @@ class TableCleanup extends Maintenance {
         * @throws MWException
         */
        public function runTable( $params ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                if ( array_diff( array_keys( $params ),
                        array( 'table', 'conds', 'index', 'callback' ) )
index 1eba303..07df1b1 100644 (file)
@@ -78,7 +78,7 @@ class TitleCleanup extends TableCleanup {
        protected function fileExists( $name ) {
                // XXX: Doesn't actually check for file existence, just presence of image record.
                // This is reasonable, since cleanupImages.php only iterates over the image table.
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $row = $dbr->selectRow( 'image', array( 'img_name' ), array( 'img_name' => $name ), __METHOD__ );
 
                return $row !== false;
@@ -118,7 +118,7 @@ class TitleCleanup extends TableCleanup {
                } else {
                        $this->output( "renaming $row->page_id ($row->page_namespace," .
                                "'$row->page_title') to ($row->page_namespace,'$dest')\n" );
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $dbw->update( 'page',
                                array( 'page_title' => $dest ),
                                array( 'page_id' => $row->page_id ),
@@ -171,7 +171,7 @@ class TitleCleanup extends TableCleanup {
                } else {
                        $this->output( "renaming $row->page_id ($row->page_namespace," .
                                "'$row->page_title') to ($ns,'$dest')\n" );
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $dbw->update( 'page',
                                array(
                                        'page_namespace' => $ns,
index eb7d7b1..16f7b61 100644 (file)
@@ -77,7 +77,7 @@ class WatchlistCleanup extends TableCleanup {
 
        private function removeWatch( $row ) {
                if ( !$this->dryrun && $this->hasOption( 'fix' ) ) {
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $dbw->delete(
                                'watchlist', array(
                                'wl_user' => $row->wl_user,
index 80c9004..6a6527f 100644 (file)
@@ -37,7 +37,7 @@ class ClearInterwikiCache extends Maintenance {
 
        public function execute() {
                global $wgLocalDatabases, $wgMemc;
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $res = $dbr->select( 'interwiki', array( 'iw_prefix' ), false );
                $prefixes = array();
                foreach ( $res as $row ) {
index c3ad46a..15ca14b 100644 (file)
@@ -66,7 +66,7 @@ class ConvertLinks extends Maintenance {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $type = $dbw->getType();
                if ( $type != 'mysql' ) {
@@ -267,7 +267,7 @@ class ConvertLinks extends Maintenance {
        }
 
        private function createTempTable() {
-               $dbConn = wfGetDB( DB_MASTER );
+               $dbConn = $this->getDB( DB_MASTER );
 
                if ( !( $dbConn->isOpen() ) ) {
                        $this->output( "Opening connection to database failed.\n" );
index 1542a8c..11768c8 100644 (file)
@@ -41,7 +41,7 @@ class ConvertUserOptions extends Maintenance {
        public function execute() {
                $this->output( "...batch conversion of user_options: " );
                $id = 0;
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                if ( !$dbw->fieldExists( 'user', 'user_options', __METHOD__ ) ) {
                        $this->output( "nothing to migrate. " );
index a3b1561..6c89e67 100644 (file)
@@ -80,7 +80,7 @@ class DeleteBatch extends Maintenance {
                        $this->error( "Unable to read file, exiting", true );
                }
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                # Handle each entry
                // @codingStandardsIgnoreStart Ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
index a1c0f61..a5c6199 100644 (file)
@@ -41,7 +41,7 @@ class DeleteDefaultMessages extends Maintenance {
                global $wgUser;
 
                $this->output( "Checking existence of old default messages..." );
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $res = $dbr->select( array( 'page', 'revision' ),
                        array( 'page_namespace', 'page_title' ),
                        array(
@@ -69,7 +69,7 @@ class DeleteDefaultMessages extends Maintenance {
 
                # Handle deletion
                $this->output( "\n...deleting old default messages (this may take a long time!)...", 'msg' );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                foreach ( $res as $row ) {
                        wfWaitForSlaves();
index de5c5e2..e7bb866 100644 (file)
@@ -174,7 +174,7 @@ class DeleteEqualMessages extends Maintenance {
 
                // Handle deletion
                $this->output( "\n...deleting equal messages (this may take a long time!)..." );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                foreach ( $messageInfo['results'] as $result ) {
                        wfWaitForSlaves();
                        $dbw->ping();
index 0c06ec5..f411148 100644 (file)
@@ -45,7 +45,7 @@ class DeleteOldRevisions extends Maintenance {
        function doDelete( $delete = false, $args = array() ) {
 
                # Data should come off the master, wrapped in a transaction
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
 
                $pageConds = array();
index 776d345..3d5c1a4 100644 (file)
@@ -43,7 +43,7 @@ class DeleteOrphanedRevisions extends Maintenance {
 
                $report = $this->hasOption( 'report' );
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
                list( $page, $revision ) = $dbw->tableNamesN( 'page', 'revision' );
 
index 818ee36..6cda784 100644 (file)
@@ -43,7 +43,7 @@ class DeleteRevision extends Maintenance {
 
                $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) .
                        " from " . wfWikiID() . "...\n" );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $affected = 0;
                foreach ( $this->mArgs as $revID ) {
index a397663..f9bb416 100644 (file)
@@ -39,7 +39,7 @@ class DeleteSelfExternals extends Maintenance {
        public function execute() {
                global $wgServer;
                $this->output( "Deleting self externals from $wgServer\n" );
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
                while ( 1 ) {
                        wfWaitForSlaves();
                        $this->commitTransaction( $db, __METHOD__ );
index 888c2dc..74b500a 100644 (file)
@@ -44,7 +44,7 @@ class DumpLinks extends Maintenance {
        }
 
        public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $result = $dbr->select( array( 'pagelinks', 'page' ),
                        array(
                                'page_id',
index 9d53f07..026ac02 100644 (file)
@@ -76,7 +76,7 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir
         * @param bool $shared True to pass shared-dir settings to hash func
         */
        function fetchUsed( $shared ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $image = $dbr->tableName( 'image' );
                $imagelinks = $dbr->tableName( 'imagelinks' );
 
@@ -97,7 +97,7 @@ By default, outputs relative paths against the parent directory of \$wgUploadDir
         * @param bool $shared True to pass shared-dir settings to hash func
         */
        function fetchLocal( $shared ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $result = $dbr->select( 'image',
                        array( 'img_name' ),
                        '',
index 8fdcef3..69a95e2 100644 (file)
@@ -55,7 +55,7 @@ class EraseArchivedFile extends Maintenance {
                        }
                        $afile = false;
                } else { // specified version
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $row = $dbw->selectRow( 'filearchive', '*',
                                array( 'fa_storage_group' => 'deleted', 'fa_storage_key' => $filekey ),
                                __METHOD__ );
@@ -85,7 +85,7 @@ class EraseArchivedFile extends Maintenance {
        }
 
        protected function scrubAllVersions( $name ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $res = $dbw->select( 'filearchive', '*',
                        array( 'fa_name' => $name, 'fa_storage_group' => 'deleted' ),
                        __METHOD__ );
index 983b772..cf12838 100644 (file)
@@ -48,7 +48,7 @@ class FetchText extends Maintenance {
         * note that the text string itself is *not* followed by newline
         */
        public function execute() {
-               $db = wfGetDB( DB_SLAVE );
+               $db = $this->getDB( DB_SLAVE );
                $stdin = $this->getStdin();
                while ( !feof( $stdin ) ) {
                        $line = fgets( $stdin );
index 1265891..25ec342 100644 (file)
@@ -47,7 +47,7 @@ class FixDefaultJsonContentPages extends LoggedUpdateMaintenance {
                        return true;
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $namespaces = array(
                        NS_MEDIAWIKI => $dbr->buildLike( $dbr->anyString(), '.json' ),
                        NS_USER => $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString(), '.json' ),
@@ -80,7 +80,7 @@ class FixDefaultJsonContentPages extends LoggedUpdateMaintenance {
                $this->output( "Processing {$title} ({$row->page_id})...\n" );
                $rev = Revision::newFromTitle( $title );
                $content = $rev->getContent( Revision::RAW );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                if ( $content instanceof JsonContent ) {
                        if ( $content->isValid() ) {
                                // Yay, actually JSON. We need to just change the
index 9568284..ca551f8 100644 (file)
@@ -54,7 +54,7 @@ class FixDoubleRedirects extends Maintenance {
                        $title = null;
                }
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                // See also SpecialDoubleRedirects
                $tables = array(
index 0c60e62..a44f8e5 100644 (file)
@@ -47,7 +47,7 @@ class FixExtLinksProtocolRelative extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'externallinks' ) ) {
                        $this->error( "externallinks table does not exist" );
 
index 5431cf2..c2a748c 100644 (file)
@@ -49,7 +49,7 @@ class FixTimestamps extends Maintenance {
                $grace = 60; // maximum normal clock offset
 
                # Find bounding revision IDs
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $revisionTable = $dbw->tableName( 'revision' );
                $res = $dbw->query( "SELECT MIN(rev_id) as minrev, MAX(rev_id) as maxrev FROM $revisionTable " .
                        "WHERE rev_timestamp BETWEEN '{$start}' AND '{$end}'", __METHOD__ );
index 40e0915..d09760b 100644 (file)
@@ -37,7 +37,7 @@ class FixUserRegistration extends Maintenance {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $lastId = 0;
                do {
index 12711ea..c40d0ce 100644 (file)
@@ -196,7 +196,7 @@ class GenerateSitemap extends Maintenance {
                $this->identifier = $this->getOption( 'identifier', wfWikiID() );
                $this->compress = $this->getOption( 'compress', 'yes' ) !== 'no';
                $this->skipRedirects = $this->getOption( 'skip-redirects', false ) !== false;
-               $this->dbr = wfGetDB( DB_SLAVE );
+               $this->dbr = $this->getDB( DB_SLAVE );
                $this->generateNamespaces();
                $this->timestamp = wfTimestamp( TS_ISO_8601, wfTimestampNow() );
                $this->findex = fopen( "{$this->fspath}sitemap-index-{$this->identifier}.xml", 'wb' );
index 68c1943..c858c38 100644 (file)
@@ -40,7 +40,7 @@ class GetSlaveServer extends Maintenance {
                if ( $wgAllDBsAreLocalhost ) {
                        $host = 'localhost';
                } elseif ( $this->hasOption( 'group' ) ) {
-                       $db = wfGetDB( DB_SLAVE, $this->getOption( 'group' ) );
+                       $db = $this->getDB( DB_SLAVE, $this->getOption( 'group' ) );
                        $host = $db->getServer();
                } else {
                        $lb = wfGetLB();
index 7d7c1cc..c4b8cc9 100644 (file)
@@ -39,8 +39,6 @@ class GetTextMaint extends Maintenance {
        }
 
        public function execute() {
-               $this->db = wfGetDB( DB_SLAVE );
-
                $titleText = $this->getArg( 0 );
                $title = Title::newFromText( $titleText );
                if ( !$title ) {
index 43e5060..5806ffc 100644 (file)
@@ -201,7 +201,7 @@ TEXT;
                        if ( !$this->dryRun ) {
                                // bluuuh hack
                                // call_user_func( $this->uploadCallback, $revision );
-                               $dbw = wfGetDB( DB_MASTER );
+                               $dbw = $this->getDB( DB_MASTER );
 
                                return $dbw->deadlockLoop( array( $revision, 'importUpload' ) );
                        }
index 7c6e7d4..dee5db8 100644 (file)
@@ -39,7 +39,7 @@ in the load balancer, usually indicating a replication environment.' );
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $user = $dbw->tableName( 'user' );
                $revision = $dbw->tableName( 'revision' );
 
@@ -58,7 +58,7 @@ in the load balancer, usually indicating a replication environment.' );
                if ( $backgroundMode ) {
                        $this->output( "Using replication-friendly background mode...\n" );
 
-                       $dbr = wfGetDB( DB_SLAVE );
+                       $dbr = $this->getDB( DB_SLAVE );
                        $chunkSize = 100;
                        $lastUser = $dbr->selectField( 'user', 'MAX(user_id)', '', __METHOD__ );
 
index cac33ec..8d26063 100644 (file)
@@ -67,7 +67,7 @@ class InitSiteStats extends Maintenance {
 
                if ( $this->hasOption( 'active' ) ) {
                        $this->output( "\nCounting and updating active users..." );
-                       $active = SiteStatsUpdate::cacheUpdate( wfGetDB( DB_MASTER ) );
+                       $active = SiteStatsUpdate::cacheUpdate( $this->getDB( DB_MASTER ) );
                        $this->output( "{$active}\n" );
                }
 
index a0c41fd..dc20eee 100644 (file)
@@ -41,7 +41,7 @@ class MigrateUserGroup extends Maintenance {
                $count = 0;
                $oldGroup = $this->getArg( 0 );
                $newGroup = $this->getArg( 1 );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $start = $dbw->selectField( 'user_groups', 'MIN(ug_user)',
                        array( 'ug_group' => $oldGroup ), __FUNCTION__ );
                $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)',
index 8a81fdd..43d4d25 100644 (file)
@@ -85,7 +85,7 @@ class MoveBatch extends Maintenance {
                }
 
                # Setup complete, now start
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                // @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning
                for ( $linenum = 1; !feof( $file ); $linenum++ ) {
                        // @codingStandardsIgnoreEnd
index 28176a5..6e5cd38 100644 (file)
@@ -67,7 +67,7 @@ class NamespaceConflictChecker extends Maintenance {
        }
 
        public function execute() {
-               $this->db = wfGetDB( DB_MASTER );
+               $this->db = $this->getDB( DB_MASTER );
 
                $options = array(
                        'fix' => $this->hasOption( 'fix' ),
@@ -570,6 +570,7 @@ class NamespaceConflictChecker extends Maintenance {
         *
         * @param integer $id The page_id
         * @param Title $newTitle The new title
+        * @return bool
         */
        private function mergePage( $row, Title $newTitle ) {
                $id = $row->page_id;
@@ -583,7 +584,7 @@ class NamespaceConflictChecker extends Maintenance {
                $wikiPage->loadPageData( 'fromdbmaster' );
 
                $destId = $newTitle->getArticleId();
-               $this->db->begin( __METHOD__ );
+               $this->beginTransaction( $this->db, __METHOD__ );
                $this->db->update( 'revision',
                        // SET
                        array( 'rev_page' => $destId ),
@@ -604,7 +605,7 @@ class NamespaceConflictChecker extends Maintenance {
                 */
                $update = new LinksDeletionUpdate( $wikiPage );
                $update->doUpdate();
-               $this->db->commit( __METHOD__ );
+               $this->commitTransaction( $this->db, __METHOD__ );
 
                return true;
        }
index 04e2673..0f2dbf6 100644 (file)
@@ -54,7 +54,7 @@ class NukeNS extends Maintenance {
                $ns = $this->getOption( 'ns', NS_MEDIAWIKI );
                $delete = $this->getOption( 'delete', false );
                $all = $this->getOption( 'all', false );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
 
                $tbl_pag = $dbw->tableName( 'page' );
index 94e3409..dc45520 100644 (file)
@@ -43,7 +43,7 @@ class NukePage extends Maintenance {
                $name = $this->getArg();
                $delete = $this->getOption( 'delete', false );
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
 
                $tbl_pag = $dbw->tableName( 'page' );
@@ -104,7 +104,7 @@ class NukePage extends Maintenance {
        }
 
        public function deleteRevisions( $ids ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
 
                $tbl_rev = $dbw->tableName( 'revision' );
index eea6f7b..67e5ded 100644 (file)
@@ -48,7 +48,7 @@ class AlterSharedConstraints extends Maintenance {
                        return;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                foreach ( $wgSharedTables as $table ) {
                        $stable = $dbw->tableNameInternal( $table );
                        if ( $wgSharedPrefix != null ) {
index 7e27107..3c5566f 100644 (file)
@@ -71,7 +71,7 @@ class Orphans extends Maintenance {
         * @param bool $fix Whether to fix broken revisions when found
         */
        private function checkOrphans( $fix ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $page = $dbw->tableName( 'page' );
                $revision = $dbw->tableName( 'revision' );
 
@@ -129,7 +129,7 @@ class Orphans extends Maintenance {
         *       but valid revisions do exist)
         */
        private function checkWidows( $fix ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $page = $dbw->tableName( 'page' );
                $revision = $dbw->tableName( 'revision' );
 
@@ -175,7 +175,7 @@ class Orphans extends Maintenance {
         * @param bool $fix Whether to fix broken entries
         */
        private function checkSeparation( $fix ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $page = $dbw->tableName( 'page' );
                $revision = $dbw->tableName( 'revision' );
 
index 5d9fc1b..1f77bdb 100644 (file)
@@ -44,7 +44,7 @@ class PatchSql extends Maintenance {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                foreach ( $this->mArgs as $arg ) {
                        $files = array(
                                $arg,
index 65d272b..481e073 100644 (file)
@@ -71,7 +71,7 @@ TEXT;
                $throttle = $this->getOption( 'throttle', 0 );
                $force = $this->getOption( 'force', false );
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                if ( !$force ) {
                        $row = $dbw->selectRow(
index 7bca0ec..4f9c7ae 100644 (file)
@@ -37,7 +37,7 @@ class PopulateContentModel extends Maintenance {
        }
 
        public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $ns = $this->getOption( 'ns' );
                if ( !ctype_digit( $ns ) && $ns !== 'all' ) {
                        $this->error( 'Invalid namespace', 1 );
index a3099f9..5a67262 100644 (file)
@@ -45,7 +45,7 @@ class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
 
        public function doDBUpdates() {
                $startTime = microtime( true );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $table = 'filearchive';
                $conds = array( 'fa_sha1' => '', 'fa_storage_key IS NOT NULL' );
 
index e9123aa..cc52239 100644 (file)
@@ -67,7 +67,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance {
                $isRegen = ( $force || $file != '' ); // forced recalculation?
 
                $t = -microtime( true );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                if ( $file != '' ) {
                        $res = $dbw->select(
                                'image',
index 686d9f2..9baf28e 100644 (file)
@@ -46,7 +46,7 @@ class PopulateParentId extends LoggedUpdateMaintenance {
        }
 
        protected function doDBUpdates() {
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'revision' ) ) {
                        $this->error( "revision table does not exist" );
 
index 31ea5d0..9963cbf 100644 (file)
@@ -86,7 +86,7 @@ class PurgeList extends Maintenance {
         * @param int|bool $namespace
         */
        private function purgeNamespace( $namespace = false ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $startId = 0;
                if ( $namespace === false ) {
                        $conds = array();
index 4d1c537..e68937a 100644 (file)
@@ -74,7 +74,7 @@ class ReassignEdits extends Maintenance {
         * @return int Number of entries changed, or that would be changed
         */
        private function doReassignEdits( &$from, &$to, $rc = false, $report = false ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $this->beginTransaction( $dbw, __METHOD__ );
 
                # Count things
index 4147491..e07bf03 100644 (file)
@@ -70,7 +70,7 @@ class RebuildFileCache extends Maintenance {
 
                $this->output( "Building content page file cache from page {$start}!\n" );
 
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $overwrite = $this->getOption( 'overwrite', false );
                $start = ( $start > 0 )
                        ? $start
@@ -89,7 +89,7 @@ class RebuildFileCache extends Maintenance {
                $blockStart = $start;
                $blockEnd = $start + $this->mBatchSize - 1;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                // Go through each page and save the output
                while ( $blockEnd <= $end ) {
                        // Get the pages
index b1bb353..1b0a27d 100644 (file)
@@ -58,7 +58,7 @@ class ImageBuilder extends Maintenance {
        }
 
        public function execute() {
-               $this->dbw = wfGetDB( DB_MASTER );
+               $this->dbw = $this->getDB( DB_MASTER );
                $this->dryrun = $this->hasOption( 'dry-run' );
                if ( $this->dryrun ) {
                        $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed';
@@ -127,7 +127,7 @@ class ImageBuilder extends Maintenance {
                $this->init( $count, $table );
                $this->output( "Processing $table...\n" );
 
-               $result = wfGetDB( DB_SLAVE )->select( $table, '*', array(), __METHOD__ );
+               $result = $this->getDB( DB_SLAVE )->select( $table, '*', array(), __METHOD__ );
 
                foreach ( $result as $row ) {
                        $update = call_user_func( $callback, $row, null );
index eeee9c2..4ff873e 100644 (file)
@@ -41,7 +41,7 @@ class RebuildAll extends Maintenance {
 
        public function execute() {
                // Rebuild the text index
-               if ( wfGetDB( DB_SLAVE )->getType() != 'postgres' ) {
+               if ( $this->getDB( DB_SLAVE )->getType() != 'postgres' ) {
                        $this->output( "** Rebuilding fulltext search index (if you abort "
                                . "this will break searching; run this script again to fix):\n" );
                        $rebuildText = $this->runChild( 'RebuildTextIndex', 'rebuildtextindex.php' );
index f4b0505..b6421f3 100644 (file)
@@ -46,11 +46,10 @@ class RebuildRecentchanges extends Maintenance {
        }
 
        /**
-        * Rebuild pass 1
-        * DOCUMENT ME!
+        * Rebuild pass 1: Insert `recentchanges` entries for page revisions.
         */
        private function rebuildRecentChangesTablePass1() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $dbw->delete( 'recentchanges', '*' );
 
@@ -100,11 +99,11 @@ class RebuildRecentchanges extends Maintenance {
        }
 
        /**
-        * Rebuild pass 2
-        * DOCUMENT ME!
+        * Rebuild pass 2: Enhance entries for page revisions with references to the previous revision
+        * (rc_last_oldid, rc_new etc.) and size differences (rc_old_len, rc_new_len).
         */
        private function rebuildRecentChangesTablePass2() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                list( $recentchanges, $revision ) = $dbw->tableNamesN( 'recentchanges', 'revision' );
 
                $this->output( "Updating links and size differences...\n" );
@@ -167,11 +166,10 @@ class RebuildRecentchanges extends Maintenance {
        }
 
        /**
-        * Rebuild pass 3
-        * DOCUMENT ME!
+        * Rebuild pass 3: Insert `recentchanges` entries for action logs.
         */
        private function rebuildRecentChangesTablePass3() {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $this->output( "Loading from user, page, and logging tables...\n" );
 
@@ -221,13 +219,12 @@ class RebuildRecentchanges extends Maintenance {
        }
 
        /**
-        * Rebuild pass 4
-        * DOCUMENT ME!
+        * Rebuild pass 4: Mark bot and autopatrolled entries.
         */
        private function rebuildRecentChangesTablePass4() {
                global $wgUseRCPatrol;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                list( $recentchanges, $usergroups, $user ) =
                        $dbw->tableNamesN( 'recentchanges', 'user_groups', 'user' );
index e29d89e..e8d59bc 100644 (file)
@@ -51,12 +51,11 @@ class RebuildTextIndex extends Maintenance {
 
        public function execute() {
                // Shouldn't be needed for Postgres
-               $this->db = wfGetDB( DB_MASTER );
+               $this->db = $this->getDB( DB_MASTER );
                if ( $this->db->getType() == 'postgres' ) {
                        $this->error( "This script is not needed when using Postgres.\n", true );
                }
 
-               $this->db = wfGetDB( DB_MASTER );
                if ( $this->db->getType() == 'sqlite' ) {
                        if ( !DatabaseSqlite::getFulltextSearchModule() ) {
                                $this->error( "Your version of SQLite module for PHP doesn't "
index 8b852e3..6bc72ec 100644 (file)
@@ -47,7 +47,7 @@ class RefreshFileHeaders extends Maintenance {
                $end = str_replace( ' ', '_', $this->getOption( 'end', '' ) ); // page on img_name
 
                $count = 0;
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                do {
                        $conds = array( "img_name > {$dbr->addQuotes( $start )}" );
                        if ( strlen( $end ) ) {
index 831118c..4f2341c 100644 (file)
@@ -95,7 +95,7 @@ class RefreshImageMetadata extends Maintenance {
                $leftAlone = 0;
                $error = 0;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                if ( $this->mBatchSize <= 0 ) {
                        $this->error( "Batch size is too low...", 12 );
                }
index ed16805..a0cd6a9 100644 (file)
@@ -76,7 +76,7 @@ class RefreshLinks extends Maintenance {
                global $wgParser;
 
                $reportingInterval = 100;
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                if ( $start === null ) {
                        $start = 1;
@@ -192,7 +192,7 @@ class RefreshLinks extends Maintenance {
         */
        private function fixRedirect( $id ) {
                $page = WikiPage::newFromID( $id );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                if ( $page === null ) {
                        // This page doesn't exist (any more)
@@ -262,7 +262,7 @@ class RefreshLinks extends Maintenance {
        ) {
                wfWaitForSlaves();
                $this->output( "Deleting illegal entries from the links tables...\n" );
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                do {
                        // Find the start of the next chunk. This is based only
                        // on existent page_ids.
@@ -302,8 +302,8 @@ class RefreshLinks extends Maintenance {
         * @param int $batchSize The size of deletion batches
         */
        private function dfnCheckInterval( $start = null, $end = null, $batchSize = 100 ) {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbw = $this->getDB( DB_MASTER );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $linksTables = array( // table name => page_id field
                        'pagelinks' => 'pl_from',
index 90dc622..7937dd0 100644 (file)
@@ -45,7 +45,7 @@ class RemoveUnusedAccounts extends Maintenance {
                # Do an initial scan for inactive accounts and report the result
                $this->output( "Checking for unused user accounts...\n" );
                $del = array();
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $res = $dbr->select( 'user', array( 'user_id', 'user_name', 'user_touched' ), '', __METHOD__ );
                if ( $this->hasOption( 'ignore-groups' ) ) {
                        $excludedGroups = explode( ',', $this->getOption( 'ignore-groups' ) );
@@ -76,7 +76,7 @@ class RemoveUnusedAccounts extends Maintenance {
                # If required, go back and delete each marked account
                if ( $count > 0 && $this->hasOption( 'delete' ) ) {
                        $this->output( "\nDeleting unused accounts..." );
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $dbw->delete( 'user', array( 'user_id' => $del ), __METHOD__ );
                        $dbw->delete( 'user_groups', array( 'ug_user' => $del ), __METHOD__ );
                        $dbw->delete( 'user_former_groups', array( 'ufg_user' => $del ), __METHOD__ );
@@ -107,7 +107,7 @@ class RemoveUnusedAccounts extends Maintenance {
         * @return bool
         */
        private function isInactiveAccount( $id, $master = false ) {
-               $dbo = wfGetDB( $master ? DB_MASTER : DB_SLAVE );
+               $dbo = $this->getDB( $master ? DB_MASTER : DB_SLAVE );
                $checks = array(
                        'revision' => 'rev',
                        'archive' => 'ar',
@@ -117,7 +117,7 @@ class RemoveUnusedAccounts extends Maintenance {
                );
                $count = 0;
 
-               $dbo->begin( __METHOD__ );
+               $this->beginTransaction( $dbo, __METHOD__ );
                foreach ( $checks as $table => $fprefix ) {
                        $conds = array( $fprefix . '_user' => $id );
                        $count += (int)$dbo->selectField( $table, 'COUNT(*)', $conds, __METHOD__ );
@@ -126,7 +126,7 @@ class RemoveUnusedAccounts extends Maintenance {
                $conds = array( 'log_user' => $id, 'log_type != ' . $dbo->addQuotes( 'newusers' ) );
                $count += (int)$dbo->selectField( 'logging', 'COUNT(*)', $conds, __METHOD__ );
 
-               $dbo->commit( __METHOD__ );
+               $this->commitTransaction( $dbo, __METHOD__ );
 
                return $count == 0;
        }
index ed9d1f5..2772f04 100644 (file)
@@ -71,7 +71,7 @@ class RenameDbPrefix extends Maintenance {
                $this->output( "Renaming DB prefix for tables of $wgDBname from '$old' to '$new'\n" );
                $count = 0;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $res = $dbw->query( "SHOW TABLES " . $dbw->buildLike( $old, $dbw->anyString() ) );
                foreach ( $res as $row ) {
                        // XXX: odd syntax. MySQL outputs an oddly cased "Tables of X"
index 08be553..9c7aef2 100644 (file)
@@ -65,7 +65,7 @@ class ResetUserTokens extends Maintenance {
                }
 
                // We list user by user_id from one of the slave database
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $where = array();
                if ( $this->nullsOnly ) {
index 7be5a1f..7134453 100644 (file)
@@ -95,7 +95,7 @@ class RollbackEdits extends Maintenance {
         * @return array
         */
        private function getRollbackTitles( $user ) {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $titles = array();
                $results = $dbr->select(
                        array( 'page', 'revision' ),
index af88905..3fd9e02 100644 (file)
@@ -45,7 +45,7 @@ class BatchedQueryRunner extends Maintenance {
 
                $query = $this->getArg();
                $n = 1;
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                do {
                        $this->output( "Batch $n: " );
                        $n++;
index 370d14e..56cc573 100644 (file)
@@ -53,7 +53,7 @@ class ShowSiteStats extends Maintenance {
                );
 
                // Get cached stats from slave database
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $stats = $dbr->selectRow( 'site_stats', '*', '', __METHOD__ );
 
                // Get maximum size for each column
index b11f1c8..96a8a38 100644 (file)
@@ -59,7 +59,7 @@ class SqliteMaintenance extends Maintenance {
                        return;
                }
 
-               $this->db = wfGetDB( DB_MASTER );
+               $this->db = $this->getDB( DB_MASTER );
 
                if ( $this->db->getType() != 'sqlite' ) {
                        $this->error( "This maintenance script requires a SQLite database.\n" );
index f115bf8..b27b111 100644 (file)
@@ -151,7 +151,7 @@ class CompressOld extends Maintenance {
        private function compressOldPages( $start = 0, $extdb = '' ) {
                $chunksize = 50;
                $this->output( "Starting from old_id $start...\n" );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                do {
                        $res = $dbw->select(
                                'text',
@@ -192,7 +192,7 @@ class CompressOld extends Maintenance {
                        # print "Already compressed row {$row->old_id}\n";
                        return false;
                }
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $flags = $row->old_flags ? "{$row->old_flags},gzip" : "gzip";
                $compress = gzdeflate( $row->old_text );
 
@@ -237,8 +237,8 @@ class CompressOld extends Maintenance {
        ) {
                $loadStyle = self::LS_CHUNKED;
 
-               $dbr = wfGetDB( DB_SLAVE );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbr = $this->getDB( DB_SLAVE );
+               $dbw = $this->getDB( DB_MASTER );
 
                # Set up external storage
                if ( $extdb != '' ) {
index f12bbd1..dcb76e3 100644 (file)
@@ -36,7 +36,7 @@ class DumpRev extends Maintenance {
        }
 
        public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                $row = $dbr->selectRow(
                        array( 'text', 'revision' ),
                        array( 'old_flags', 'old_text' ),
index c6692b5..e926f56 100644 (file)
@@ -42,8 +42,8 @@ class FixBug20757 extends Maintenance {
        }
 
        function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $dbw = wfGetDB( DB_MASTER );
+               $dbr = $this->getDB( DB_SLAVE );
+               $dbw = $this->getDB( DB_MASTER );
 
                $dryRun = $this->getOption( 'dry-run' );
                if ( $dryRun ) {
@@ -283,7 +283,7 @@ class FixBug20757 extends Maintenance {
                                unset( $this->mapCache[$key] );
                        }
 
-                       $dbr = wfGetDB( DB_SLAVE );
+                       $dbr = $this->getDB( DB_SLAVE );
                        $map = array();
                        $res = $dbr->select( 'revision',
                                array( 'rev_id', 'rev_text_id' ),
index c5213ad..b1bf95b 100644 (file)
@@ -43,7 +43,7 @@ class OrphanStats extends Maintenance {
        }
 
        public function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
                if ( !$dbr->tableExists( 'blob_orphans' ) ) {
                        $this->error( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first", true );
                }
index e33057f..e156efe 100644 (file)
@@ -23,7 +23,7 @@ require_once __DIR__ . '/../Maintenance.php';
 
 class StorageTypeStats extends Maintenance {
        function execute() {
-               $dbr = wfGetDB( DB_SLAVE );
+               $dbr = $this->getDB( DB_SLAVE );
 
                $endId = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
                if ( !$endId ) {
index f7ec662..148a9d1 100644 (file)
@@ -46,7 +46,7 @@ if ( isset( $options['limit'] ) ) {
 }
 $type = isset( $options['type'] ) ? $options['type'] : 'ConcatenatedGzipHistoryBlob';
 
-$dbr = wfGetDB( DB_SLAVE );
+$dbr = $this->getDB( DB_SLAVE );
 $res = $dbr->select(
        array( 'page', 'revision', 'text' ),
        '*',
index 1ad9c7e..eac7b3f 100644 (file)
@@ -7,7 +7,7 @@ require_once __DIR__ . '/Maintenance.php';
 class TidyUpBug37714 extends Maintenance {
        public function execute() {
                // Search for all log entries which are about changing the visability of other log entries.
-               $result = wfGetDB( DB_SLAVE )->select(
+               $result = $this->getDB( DB_SLAVE )->select(
                        'logging',
                        array( 'log_id', 'log_params' ),
                        array(
@@ -22,7 +22,7 @@ class TidyUpBug37714 extends Maintenance {
                foreach ( $result as $row ) {
                        $paramLines = explode( "\n", $row->log_params );
                        $ids = explode( ',', $paramLines[0] ); // Array dereferencing is PHP >= 5.4 :(
-                       $result = wfGetDB( DB_SLAVE )->select( // Work out what log entries were changed here.
+                       $result = $this->getDB( DB_SLAVE )->select( // Work out what log entries were changed here.
                                'logging',
                                'log_type',
                                array( 'log_id' => $ids ),
@@ -33,7 +33,7 @@ class TidyUpBug37714 extends Maintenance {
                                // If there's only one type, the target title can be set to include it.
                                $logTitle = SpecialPage::getTitleFor( 'Log', $result->current()->log_type )->getText();
                                $this->output( 'Set log_title to "' . $logTitle . '" for log entry ' . $row->log_id . ".\n" );
-                               wfGetDB( DB_MASTER )->update(
+                               $this->getDB( DB_MASTER )->update(
                                        'logging',
                                        array( 'log_title' => $logTitle ),
                                        array( 'log_id' => $row->log_id ),
index 452b53c..eeaf9c8 100755 (executable)
@@ -139,7 +139,7 @@ class UpdateMediaWiki extends Maintenance {
 
                # Attempt to connect to the database as a privileged user
                # This will vomit up an error if there are permissions problems
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
                if ( $db->getType() === 'sqlite' ) {
index 55f535d..9537a79 100644 (file)
@@ -44,9 +44,9 @@ class UpdateArticleCount extends Maintenance {
                $this->output( "Counting articles..." );
 
                if ( $this->hasOption( 'use-master' ) ) {
-                       $dbr = wfGetDB( DB_MASTER );
+                       $dbr = $this->getDB( DB_MASTER );
                } else {
-                       $dbr = wfGetDB( DB_SLAVE, 'vslow' );
+                       $dbr = $this->getDB( DB_SLAVE, 'vslow' );
                }
                $counter = new SiteStatsInit( $dbr );
                $result = $counter->articles();
@@ -54,7 +54,7 @@ class UpdateArticleCount extends Maintenance {
                $this->output( "found {$result}.\n" );
                if ( $this->hasOption( 'update' ) ) {
                        $this->output( "Updating site statistics table... " );
-                       $dbw = wfGetDB( DB_MASTER );
+                       $dbw = $this->getDB( DB_MASTER );
                        $dbw->update(
                                'site_stats',
                                array( 'ss_good_articles' => $result ),
index 796cedd..5c21b40 100644 (file)
@@ -51,7 +51,7 @@ class UpdateDoubleWidthSearch extends Maintenance {
        public function execute() {
                $maxLockTime = $this->getOption( 'l', 20 );
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                if ( $dbw->getType() !== 'mysql' ) {
                        $this->error( "This change is only needed on MySQL, quitting.\n", true );
                }
index 5b5cc04..ebfffe4 100644 (file)
@@ -40,7 +40,7 @@ class UpdateRestrictions extends Maintenance {
        }
 
        public function execute() {
-               $db = wfGetDB( DB_MASTER );
+               $db = $this->getDB( DB_MASTER );
                if ( !$db->tableExists( 'page_restrictions' ) ) {
                        $this->error( "page_restrictions table does not exist", true );
                }
index 68a51bd..18edecc 100644 (file)
@@ -96,7 +96,7 @@ class UpdateSearchIndex extends Maintenance {
 
                $wgDisableSearchUpdate = false;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
                $recentchanges = $dbw->tableName( 'recentchanges' );
 
                $this->output( "Updating searchindex between $start and $end\n" );
index c800664..8b24b90 100644 (file)
@@ -42,7 +42,7 @@ class UpdateSpecialPages extends Maintenance {
        public function execute() {
                global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->getDB( DB_MASTER );
 
                $this->doSpecialPageCacheUpdates( $dbw );
 
diff --git a/maintenance/waitForSlave.php b/maintenance/waitForSlave.php
deleted file mode 100644 (file)
index 50665ef..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Wait for the slaves to catch up to the master position.
- *
- * 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 Maintenance
- * @see wfWaitForSlaves()
- */
-
-require_once __DIR__ . '/Maintenance.php';
-
-/**
- * Maintenance script to wait for the slaves to catch up to the master position.
- *
- * @ingroup Maintenance
- */
-class WaitForSlave extends Maintenance {
-       public function execute() {
-               wfWaitForSlaves();
-       }
-}
-
-$maintClass = "WaitForSlave";
-require_once RUN_MAINTENANCE_IF_MAIN;
index 376e582..38c7aaa 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
        <rule ref="PSR2.Methods.MethodDeclaration.Underscore">
                <exclude-pattern>*/includes/StubObject.php</exclude-pattern>
        </rule>
+       <rule ref="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures">
+               <severity>0</severity>
+       </rule>
+       <rule ref="Generic.ControlStructures.InlineControlStructure.NotAllowed">
+               <severity>0</severity>
+       </rule>
        <exclude-pattern>node_modules</exclude-pattern>
        <exclude-pattern>vendor</exclude-pattern>
        <exclude-pattern>extensions</exclude-pattern>
        <exclude-pattern>skins</exclude-pattern>
+       <exclude-pattern>.git</exclude-pattern>
 </ruleset>
index ad2f12c..987b97a 100644 (file)
@@ -1186,6 +1186,7 @@ return array(
                ),
                'dependencies' => array(
                        'oojs-ui',
+                       'mediawiki.Title',
                        'mediawiki.user',
                        'mediawiki.Upload',
                        'mediawiki.jqueryMsg',
@@ -1194,7 +1195,9 @@ return array(
                        'upload-form-label-select-file',
                        'upload-form-label-infoform-title',
                        'upload-form-label-infoform-name',
+                       'upload-form-label-infoform-name-tooltip',
                        'upload-form-label-infoform-description',
+                       'upload-form-label-infoform-description-tooltip',
                        'upload-form-label-usage-title',
                        'upload-form-label-usage-filename',
                        'api-error-unknownerror',
@@ -1691,6 +1694,10 @@ return array(
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.block.css',
                'dependencies' => 'mediawiki.util',
        ),
+       'mediawiki.special.blocklist' => array(
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.blocklist.css',
+               'position' => 'top',
+       ),
        'mediawiki.special.changeslist' => array(
                'position' => 'top',
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.changeslist.css',
index 6471516..33d9a00 100644 (file)
        height: 6px;
 }
 /* @noflip */ .tipsy-n .tipsy-arrow {
-       top: 0px;
+       top: 0;
        left: 50%;
        margin-left: -5px;
 }
 /* @noflip */ .tipsy-nw .tipsy-arrow {
-       top: 1px;
+       top: 0;
        left: 10px;
 }
 /* @noflip */ .tipsy-ne .tipsy-arrow {
-       top: 1px;
+       top: 0;
        right: 10px;
 }
 /* @noflip */ .tipsy-s .tipsy-arrow {
-       bottom: 0px;
+       bottom: 0;
        left: 50%;
        margin-left: -5px;
        background-position: bottom left;
 }
 /* @noflip */ .tipsy-sw .tipsy-arrow {
-       bottom: 0px;
+       bottom: 0;
        left: 10px;
        background-position: bottom left;
 }
 /* @noflip */ .tipsy-se .tipsy-arrow {
-       bottom: 0px;
+       bottom: 0;
        right: 10px;
        background-position: bottom left;
 }
 /* @noflip */ .tipsy-e .tipsy-arrow {
        top: 50%;
        margin-top: -5px;
-       right: 1px;
-       width: 5px;
+       right: 0;
+       width: 6px;
        height: 11px;
        background-position: top right;
 }
 /* @noflip */ .tipsy-w .tipsy-arrow {
        top: 50%;
        margin-top: -5px;
-       left: 0px;
+       left: 0;
        width: 6px;
        height: 11px;
 }
index 9a639ba..1d4d0e9 100644 (file)
                                                        .addClass( 'mw-indicator' )
                                                        .attr( 'id', mw.util.escapeId( 'mw-indicator-' + indicator.name ) )
                                                        .html( indicator[ '*' ] )
-                                                       .get( 0 )
+                                                       .get( 0 ),
+                                               // Add a whitespace between the <div>s because
+                                               // they get displayed with display: inline-block
+                                               document.createTextNode( '\n' )
                                        );
-                                       newList.push( document.createTextNode( '\n' ) );
                                } );
                                $( '.mw-indicators' ).empty().append( newList );
 
                                        );
                                }
                                if ( response.parse.categorieshtml ) {
-                                       $( '#catlinks' ).replaceWith( response.parse.categorieshtml[ '*' ] );
+                                       $content = $( $.parseHTML( response.parse.categorieshtml[ '*' ] ) );
+                                       mw.hook( 'wikipage.categories' ).fire( $content );
+                                       $( '.catlinks[data-mw="interface"]' ).replaceWith( $content );
                                }
                                if ( response.parse.templates ) {
                                        newList = [];
index 113fb00..c51a07a 100644 (file)
@@ -17,7 +17,9 @@
         * Post a message (with subject and body) to a talk page.
         *
         * @abstract
-        * @param {string} subject Subject/topic title; plaintext only (no wikitext or HTML)
+        * @param {string} subject Subject/topic title.  The amount of wikitext supported is
+        *   implementation-specific. It is recommended to only use basic wikilink syntax for
+        *   maximum compatibility.
         * @param {string} body Body, as wikitext.  Signature code will automatically be added
         *   by MessagePosters that require one, unless the message already contains the string
         *   ~~~.
diff --git a/resources/src/mediawiki.special/mediawiki.special.blocklist.css b/resources/src/mediawiki.special/mediawiki.special.blocklist.css
new file mode 100644 (file)
index 0000000..b7513b6
--- /dev/null
@@ -0,0 +1,4 @@
+.mw-htmlform-flatlist-item {\r
+       /* FIXME: There should be an option in OOUI to do that */\r
+       display: inline-block !important;\r
+}
\ No newline at end of file
index d896756..ddf7f2b 100644 (file)
                fieldset.addItems( [
                        new OO.ui.FieldLayout( this.filenameWidget, {
                                label: mw.msg( 'upload-form-label-infoform-name' ),
-                               align: 'top'
+                               align: 'top',
+                               help: mw.msg( 'upload-form-label-infoform-name-tooltip' )
                        } ),
                        new OO.ui.FieldLayout( this.descriptionWidget, {
                                label: mw.msg( 'upload-form-label-infoform-description' ),
-                               align: 'top'
+                               align: 'top',
+                               help: mw.msg( 'upload-form-label-infoform-description-tooltip' )
                        } ),
                        new OO.ui.FieldLayout( this.categoriesWidget, {
                                label: mw.msg( 'foreign-structured-upload-form-label-infoform-categories' ),
index 54f3ab6..26eabc7 100644 (file)
                        layout = this,
                        file = this.getFile();
 
-               this.filenameWidget.setValue( file.name );
+               this.setFilename( file.name );
+
                this.setPage( 'info' );
 
                if ( this.shouldRecordBucket ) {
                }
 
                this.upload.setFile( file );
-               // Explicitly set the filename so that the old filename isn't used in case of retry
-               this.upload.setFilenameFromFile();
+               // The original file name might contain invalid characters, so use our sanitized one
+               this.upload.setFilename( this.getFilename() );
 
                this.uploadPromise = this.upload.uploadToStash();
                this.uploadPromise.then( function () {
                        } else if ( warnings.badfilename !== undefined ) {
                                // Change the name if the current name isn't acceptable
                                // TODO This might not really be the best place to do this
-                               this.filenameWidget.setValue( warnings.badfilename );
+                               this.setFilename( warnings.badfilename );
                                return new OO.ui.Error(
                                        $( '<p>' ).msg( 'badfilename', warnings.badfilename )
                                );
                fieldset.addItems( [
                        new OO.ui.FieldLayout( this.filenameWidget, {
                                label: mw.msg( 'upload-form-label-infoform-name' ),
-                               align: 'top'
+                               align: 'top',
+                               help: mw.msg( 'upload-form-label-infoform-name-tooltip' )
                        } ),
                        new OO.ui.FieldLayout( this.descriptionWidget, {
                                label: mw.msg( 'upload-form-label-infoform-description' ),
-                               align: 'top'
+                               align: 'top',
+                               help: mw.msg( 'upload-form-label-infoform-description-tooltip' )
                        } )
                ] );
                this.infoForm = new OO.ui.FormLayout( { items: [ fieldset ] } );
         * @return {string}
         */
        mw.Upload.BookletLayout.prototype.getFilename = function () {
-               return this.filenameWidget.getValue();
+               var filename = this.filenameWidget.getValue();
+               if ( this.filenameExtension ) {
+                       filename += '.' + this.filenameExtension;
+               }
+               return filename;
+       };
+
+       /**
+        * Prefills the {@link #infoForm information form} with the given filename.
+        *
+        * @protected
+        * @param {string} filename
+        */
+       mw.Upload.BookletLayout.prototype.setFilename = function ( filename ) {
+               var title = mw.Title.newFromFileName( filename );
+
+               if ( title ) {
+                       this.filenameWidget.setValue( title.getNameText() );
+                       this.filenameExtension = mw.Title.normalizeExtension( title.getExtension() );
+               } else {
+                       // Seems to happen for files with no extension, which should fail some checks anyway...
+                       this.filenameWidget.setValue( filename );
+                       this.filenameExtension = null;
+               }
        };
 
        /**
index 514a3dd..d444923 100644 (file)
@@ -20,7 +20,7 @@
        function humanSize( bytes ) {
                if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
                var i = 0,
-                       units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+                       units = [ '', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB' ];
 
                for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
                // Maintain one decimal for kB and above, but don't
index 9505bdd..4385a2e 100644 (file)
                        } );
                }
 
+               $nodes = $( '.catlinks[data-mw="interface"]' );
+               if ( $nodes.length ) {
+                       /**
+                        * Fired when categories are being added to the DOM
+                        *
+                        * It is encouraged to fire it before the main DOM is changed (when $content
+                        * is still detached).  However, this order is not defined either way, so you
+                        * should only rely on $content itself.
+                        *
+                        * This includes the ready event on a page load (including post-edit loads)
+                        * and when content has been previewed with LivePreview.
+                        *
+                        * @event wikipage_categories
+                        * @member mw.hook
+                        * @param {jQuery} $content The most appropriate element containing the content,
+                        *   such as .catlinks
+                        */
+                       mw.hook( 'wikipage.categories' ).fire( $nodes );
+               }
        } );
 
 }( mediaWiki, jQuery ) );
diff --git a/tests/phpunit/includes/ImportLinkCacheIntegrationTest.php b/tests/phpunit/includes/ImportLinkCacheIntegrationTest.php
deleted file mode 100644 (file)
index 1433b89..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-/**
- * Integration test that checks import success and
- * LinkCache integration.
- *
- * @group medium
- * @group Database
- *
- * @author mwjames
- */
-class ImportLinkCacheIntegrationTest extends MediaWikiTestCase {
-
-       private $importStreamSource;
-
-       protected function setUp() {
-               parent::setUp();
-
-               $file = dirname( __DIR__ ) . '/data/import/ImportLinkCacheIntegrationTest.xml';
-
-               $this->importStreamSource = ImportStreamSource::newFromFile( $file );
-
-               if ( !$this->importStreamSource->isGood() ) {
-                       throw new Exception( "Import source for {$file} failed" );
-               }
-       }
-
-       public function testImportForImportSource() {
-
-               $this->doImport( $this->importStreamSource );
-
-               // Imported title
-               $loremIpsum = Title::newFromText( 'Lorem ipsum' );
-
-               $this->assertSame(
-                       $loremIpsum->getArticleID(),
-                       $loremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
-               );
-
-               $categoryLoremIpsum = Title::newFromText( 'Category:Lorem ipsum' );
-
-               $this->assertSame(
-                       $categoryLoremIpsum->getArticleID(),
-                       $categoryLoremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
-               );
-
-               $page = new WikiPage( $loremIpsum );
-               $page->doDeleteArticle( 'import test: delete page' );
-
-               $page = new WikiPage( $categoryLoremIpsum );
-               $page->doDeleteArticle( 'import test: delete page' );
-       }
-
-       /**
-        * @depends testImportForImportSource
-        */
-       public function testReImportForImportSource() {
-
-               $this->doImport( $this->importStreamSource );
-
-               // ReImported title
-               $loremIpsum = Title::newFromText( 'Lorem ipsum' );
-
-               $this->assertSame(
-                       $loremIpsum->getArticleID(),
-                       $loremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
-               );
-
-               $categoryLoremIpsum = Title::newFromText( 'Category:Lorem ipsum' );
-
-               $this->assertSame(
-                       $categoryLoremIpsum->getArticleID(),
-                       $categoryLoremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
-               );
-       }
-
-       private function doImport( $importStreamSource ) {
-
-               $importer = new WikiImporter(
-                       $importStreamSource->value,
-                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
-               );
-               $importer->setDebug( true );
-
-               $reporter = new ImportReporter(
-                       $importer,
-                       false,
-                       '',
-                       false
-               );
-
-               $reporter->setContext( new RequestContext() );
-               $reporter->open();
-               $exception = false;
-
-               try {
-                       $importer->doImport();
-               } catch ( Exception $e ) {
-                       $exception = $e;
-               }
-
-               $result = $reporter->close();
-
-               $this->assertFalse(
-                       $exception
-               );
-
-               $this->assertTrue(
-                       $result->isGood()
-               );
-       }
-
-}
diff --git a/tests/phpunit/includes/ImportTest.php b/tests/phpunit/includes/ImportTest.php
deleted file mode 100644 (file)
index 9c22430..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?php
-
-/**
- * Test class for Import methods.
- *
- * @group Database
- *
- * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
- */
-class ImportTest extends MediaWikiLangTestCase {
-
-       private function getDataSource( $xml ) {
-               return new ImportStringSource( $xml );
-       }
-
-       /**
-        * @covers WikiImporter::handlePage
-        * @dataProvider getRedirectXML
-        * @param string $xml
-        * @param string|null $redirectTitle
-        */
-       public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
-               $source = $this->getDataSource( $xml );
-
-               $redirect = null;
-               $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
-                       $sRevCount, $pageInfo ) use ( &$redirect ) {
-                       if ( array_key_exists( 'redirect', $pageInfo ) ) {
-                               $redirect = $pageInfo['redirect'];
-                       }
-               };
-
-               $importer = new WikiImporter(
-                       $source,
-                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
-               );
-               $importer->setPageOutCallback( $callback );
-               $importer->doImport();
-
-               $this->assertEquals( $redirectTitle, $redirect );
-       }
-
-       public function getRedirectXML() {
-               // @codingStandardsIgnoreStart Generic.Files.LineLength
-               return array(
-                       array(
-                               <<< EOF
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
-       <page>
-               <title>Test</title>
-               <ns>0</ns>
-               <id>21</id>
-               <redirect title="Test22"/>
-               <revision>
-                       <id>20</id>
-                       <timestamp>2014-05-27T10:00:00Z</timestamp>
-                       <contributor>
-                               <username>Admin</username>
-                               <id>10</id>
-                       </contributor>
-                       <comment>Admin moved page [[Test]] to [[Test22]]</comment>
-                       <model>wikitext</model>
-                       <format>text/x-wiki</format>
-                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
-                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
-               </revision>
-       </page>
-</mediawiki>
-EOF
-                       ,
-                               'Test22'
-                       ),
-                       array(
-                               <<< EOF
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
-       <page>
-               <title>Test</title>
-               <ns>0</ns>
-               <id>42</id>
-               <revision>
-                       <id>421</id>
-                       <timestamp>2014-05-27T11:00:00Z</timestamp>
-                       <contributor>
-                               <username>Admin</username>
-                               <id>10</id>
-                       </contributor>
-                       <text xml:space="preserve" bytes="4">Abcd</text>
-                       <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
-                       <model>wikitext</model>
-                       <format>text/x-wiki</format>
-               </revision>
-       </page>
-</mediawiki>
-EOF
-                       ,
-                               null
-                       ),
-               );
-               // @codingStandardsIgnoreEnd
-       }
-
-       /**
-        * @covers WikiImporter::handleSiteInfo
-        * @dataProvider getSiteInfoXML
-        * @param string $xml
-        * @param array|null $namespaces
-        */
-       public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
-               $source = $this->getDataSource( $xml );
-
-               $importNamespaces = null;
-               $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
-                       $importNamespaces = $siteinfo['_namespaces'];
-               };
-
-               $importer = new WikiImporter(
-                       $source,
-                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
-               );
-               $importer->setSiteInfoCallback( $callback );
-               $importer->doImport();
-
-               $this->assertEquals( $importNamespaces, $namespaces );
-       }
-
-       public function getSiteInfoXML() {
-               // @codingStandardsIgnoreStart Generic.Files.LineLength
-               return array(
-                       array(
-                               <<< EOF
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
-  <siteinfo>
-    <namespaces>
-      <namespace key="-2" case="first-letter">Media</namespace>
-      <namespace key="-1" case="first-letter">Special</namespace>
-      <namespace key="0" case="first-letter" />
-      <namespace key="1" case="first-letter">Talk</namespace>
-      <namespace key="2" case="first-letter">User</namespace>
-      <namespace key="3" case="first-letter">User talk</namespace>
-      <namespace key="100" case="first-letter">Portal</namespace>
-      <namespace key="101" case="first-letter">Portal talk</namespace>
-    </namespaces>
-  </siteinfo>
-</mediawiki>
-EOF
-                       ,
-                               array(
-                                       '-2' => 'Media',
-                                       '-1' => 'Special',
-                                       '0' => '',
-                                       '1' => 'Talk',
-                                       '2' => 'User',
-                                       '3' => 'User talk',
-                                       '100' => 'Portal',
-                                       '101' => 'Portal talk',
-                               )
-                       ),
-               );
-               // @codingStandardsIgnoreEnd
-       }
-
-}
diff --git a/tests/phpunit/includes/import/ImportLinkCacheIntegrationTest.php b/tests/phpunit/includes/import/ImportLinkCacheIntegrationTest.php
new file mode 100644 (file)
index 0000000..5e3c626
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Integration test that checks import success and
+ * LinkCache integration.
+ *
+ * @group medium
+ * @group Database
+ *
+ * @author mwjames
+ */
+class ImportLinkCacheIntegrationTest extends MediaWikiTestCase {
+
+       private $importStreamSource;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $file = dirname( __DIR__ ) . '/../data/import/ImportLinkCacheIntegrationTest.xml';
+
+               $this->importStreamSource = ImportStreamSource::newFromFile( $file );
+
+               if ( !$this->importStreamSource->isGood() ) {
+                       throw new Exception( "Import source for {$file} failed" );
+               }
+       }
+
+       public function testImportForImportSource() {
+
+               $this->doImport( $this->importStreamSource );
+
+               // Imported title
+               $loremIpsum = Title::newFromText( 'Lorem ipsum' );
+
+               $this->assertSame(
+                       $loremIpsum->getArticleID(),
+                       $loremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
+               );
+
+               $categoryLoremIpsum = Title::newFromText( 'Category:Lorem ipsum' );
+
+               $this->assertSame(
+                       $categoryLoremIpsum->getArticleID(),
+                       $categoryLoremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
+               );
+
+               $page = new WikiPage( $loremIpsum );
+               $page->doDeleteArticle( 'import test: delete page' );
+
+               $page = new WikiPage( $categoryLoremIpsum );
+               $page->doDeleteArticle( 'import test: delete page' );
+       }
+
+       /**
+        * @depends testImportForImportSource
+        */
+       public function testReImportForImportSource() {
+
+               $this->doImport( $this->importStreamSource );
+
+               // ReImported title
+               $loremIpsum = Title::newFromText( 'Lorem ipsum' );
+
+               $this->assertSame(
+                       $loremIpsum->getArticleID(),
+                       $loremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
+               );
+
+               $categoryLoremIpsum = Title::newFromText( 'Category:Lorem ipsum' );
+
+               $this->assertSame(
+                       $categoryLoremIpsum->getArticleID(),
+                       $categoryLoremIpsum->getArticleID( Title::GAID_FOR_UPDATE )
+               );
+       }
+
+       private function doImport( $importStreamSource ) {
+
+               $importer = new WikiImporter(
+                       $importStreamSource->value,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
+               $importer->setDebug( true );
+
+               $reporter = new ImportReporter(
+                       $importer,
+                       false,
+                       '',
+                       false
+               );
+
+               $reporter->setContext( new RequestContext() );
+               $reporter->open();
+               $exception = false;
+
+               try {
+                       $importer->doImport();
+               } catch ( Exception $e ) {
+                       $exception = $e;
+               }
+
+               $result = $reporter->close();
+
+               $this->assertFalse(
+                       $exception
+               );
+
+               $this->assertTrue(
+                       $result->isGood()
+               );
+       }
+
+}
diff --git a/tests/phpunit/includes/import/ImportTest.php b/tests/phpunit/includes/import/ImportTest.php
new file mode 100644 (file)
index 0000000..f4aac23
--- /dev/null
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * Test class for Import methods.
+ *
+ * @group Database
+ *
+ * @author Sebastian Brückner < sebastian.brueckner@student.hpi.uni-potsdam.de >
+ */
+class ImportTest extends MediaWikiLangTestCase {
+
+       private function getDataSource( $xml ) {
+               return new ImportStringSource( $xml );
+       }
+
+       /**
+        * @covers WikiImporter
+        * @dataProvider getUnknownTagsXML
+        * @param string $xml
+        * @param string $text
+        * @param string $title
+        */
+       public function testUnknownXMLTags( $xml, $text, $title ) {
+               $source = $this->getDataSource( $xml );
+
+               $importer = new WikiImporter(
+                       $source,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
+
+               $importer->doImport();
+               $title = Title::newFromText( $title );
+               $this->assertTrue( $title->exists() );
+
+               $this->assertEquals( WikiPage::factory( $title )->getContent()->getNativeData(), $text );
+       }
+
+       public function getUnknownTagsXML() {
+               // @codingStandardsIgnoreStart Generic.Files.LineLength
+               return array(
+                       array(
+                               <<< EOF
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
+  <page unknown="123" dontknow="533">
+    <title>TestImportPage</title>
+    <unknowntag>Should be ignored</unknowntag>
+    <ns>0</ns>
+    <id unknown="123" dontknow="533">14</id>
+    <revision>
+      <id unknown="123" dontknow="533">15</id>
+      <unknowntag>Should be ignored</unknowntag>
+      <timestamp>2016-01-03T11:18:43Z</timestamp>
+      <contributor>
+        <unknowntag>Should be ignored</unknowntag>
+        <username unknown="123" dontknow="533">Admin</username>
+        <id>1</id>
+      </contributor>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
+      <text xml:space="preserve" bytes="0">noitazinagro tseb eht si ikiWaideM</text>
+      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
+      <unknowntag>Should be ignored</unknowntag>
+    </revision>
+  </page>
+  <unknowntag>Should be ignored</unknowntag>
+</mediawiki>
+EOF
+                               ,
+                               'noitazinagro tseb eht si ikiWaideM',
+                               'TestImportPage'
+                       )
+               );
+               // @codingStandardsIgnoreEnd
+       }
+
+       /**
+        * @covers WikiImporter::handlePage
+        * @dataProvider getRedirectXML
+        * @param string $xml
+        * @param string|null $redirectTitle
+        */
+       public function testHandlePageContainsRedirect( $xml, $redirectTitle ) {
+               $source = $this->getDataSource( $xml );
+
+               $redirect = null;
+               $callback = function ( Title $title, ForeignTitle $foreignTitle, $revCount,
+                       $sRevCount, $pageInfo ) use ( &$redirect ) {
+                       if ( array_key_exists( 'redirect', $pageInfo ) ) {
+                               $redirect = $pageInfo['redirect'];
+                       }
+               };
+
+               $importer = new WikiImporter(
+                       $source,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
+               $importer->setPageOutCallback( $callback );
+               $importer->doImport();
+
+               $this->assertEquals( $redirectTitle, $redirect );
+       }
+
+       public function getRedirectXML() {
+               // @codingStandardsIgnoreStart Generic.Files.LineLength
+               return array(
+                       array(
+                               <<< EOF
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
+       <page>
+               <title>Test</title>
+               <ns>0</ns>
+               <id>21</id>
+               <redirect title="Test22"/>
+               <revision>
+                       <id>20</id>
+                       <timestamp>2014-05-27T10:00:00Z</timestamp>
+                       <contributor>
+                               <username>Admin</username>
+                               <id>10</id>
+                       </contributor>
+                       <comment>Admin moved page [[Test]] to [[Test22]]</comment>
+                       <model>wikitext</model>
+                       <format>text/x-wiki</format>
+                       <text xml:space="preserve" bytes="20">#REDIRECT [[Test22]]</text>
+                       <sha1>tq456o9x3abm7r9ozi6km8yrbbc56o6</sha1>
+               </revision>
+       </page>
+</mediawiki>
+EOF
+                       ,
+                               'Test22'
+                       ),
+                       array(
+                               <<< EOF
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.9/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.9/ http://www.mediawiki.org/xml/export-0.9.xsd" version="0.9" xml:lang="en">
+       <page>
+               <title>Test</title>
+               <ns>0</ns>
+               <id>42</id>
+               <revision>
+                       <id>421</id>
+                       <timestamp>2014-05-27T11:00:00Z</timestamp>
+                       <contributor>
+                               <username>Admin</username>
+                               <id>10</id>
+                       </contributor>
+                       <text xml:space="preserve" bytes="4">Abcd</text>
+                       <sha1>n7uomjq96szt60fy5w3x7ahf7q8m8rh</sha1>
+                       <model>wikitext</model>
+                       <format>text/x-wiki</format>
+               </revision>
+       </page>
+</mediawiki>
+EOF
+                       ,
+                               null
+                       ),
+               );
+               // @codingStandardsIgnoreEnd
+       }
+
+       /**
+        * @covers WikiImporter::handleSiteInfo
+        * @dataProvider getSiteInfoXML
+        * @param string $xml
+        * @param array|null $namespaces
+        */
+       public function testSiteInfoContainsNamespaces( $xml, $namespaces ) {
+               $source = $this->getDataSource( $xml );
+
+               $importNamespaces = null;
+               $callback = function ( array $siteinfo, $innerImporter ) use ( &$importNamespaces ) {
+                       $importNamespaces = $siteinfo['_namespaces'];
+               };
+
+               $importer = new WikiImporter(
+                       $source,
+                       ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+               );
+               $importer->setSiteInfoCallback( $callback );
+               $importer->doImport();
+
+               $this->assertEquals( $importNamespaces, $namespaces );
+       }
+
+       public function getSiteInfoXML() {
+               // @codingStandardsIgnoreStart Generic.Files.LineLength
+               return array(
+                       array(
+                               <<< EOF
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.10/ http://www.mediawiki.org/xml/export-0.10.xsd" version="0.10" xml:lang="en">
+  <siteinfo>
+    <namespaces>
+      <namespace key="-2" case="first-letter">Media</namespace>
+      <namespace key="-1" case="first-letter">Special</namespace>
+      <namespace key="0" case="first-letter" />
+      <namespace key="1" case="first-letter">Talk</namespace>
+      <namespace key="2" case="first-letter">User</namespace>
+      <namespace key="3" case="first-letter">User talk</namespace>
+      <namespace key="100" case="first-letter">Portal</namespace>
+      <namespace key="101" case="first-letter">Portal talk</namespace>
+    </namespaces>
+  </siteinfo>
+</mediawiki>
+EOF
+                       ,
+                               array(
+                                       '-2' => 'Media',
+                                       '-1' => 'Special',
+                                       '0' => '',
+                                       '1' => 'Talk',
+                                       '2' => 'User',
+                                       '3' => 'User talk',
+                                       '100' => 'Portal',
+                                       '101' => 'Portal talk',
+                               )
+                       ),
+               );
+               // @codingStandardsIgnoreEnd
+       }
+
+}
index 0a46f8a..002e86f 100644 (file)
@@ -1261,22 +1261,6 @@ more stuff
                );
        }
 
-       /**
-        * @dataProvider providePreSaveTransform
-        * @covers WikiPage::preSaveTransform
-        */
-       public function testPreSaveTransform( $text, $expected ) {
-               $this->hideDeprecated( 'WikiPage::preSaveTransform' );
-               $user = new User();
-               $user->setName( "127.0.0.1" );
-
-               // NOTE: assume Help namespace to contain wikitext
-               $page = $this->newPage( "Help:WikiPageTest_testPreloadTransform" );
-               $text = $page->preSaveTransform( $text, $user );
-
-               $this->assertEquals( $expected, $text );
-       }
-
        /**
         * @covers WikiPage::factory
         */
diff --git a/tests/phpunit/includes/site/MediaWikiPageNameNormalizerTest.php b/tests/phpunit/includes/site/MediaWikiPageNameNormalizerTest.php
new file mode 100644 (file)
index 0000000..163c52d
--- /dev/null
@@ -0,0 +1,85 @@
+<?php
+
+use MediaWiki\Site\MediaWikiPageNameNormalizer;
+
+/**
+ * @covers MediaWiki\Site\MediaWikiPageNameNormalizer
+ *
+ * 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
+ *
+ * @since 1.27
+ *
+ * @group Site
+ * @group medium
+ *
+ * @author Marius Hoch
+ */
+class MediaWikiPageNameNormalizerTest extends PHPUnit_Framework_TestCase {
+
+       protected function setUp() {
+               parent::setUp();
+
+               static $connectivity = null;
+
+               if ( $connectivity === null ) {
+                       // Check whether we have (reasonable fast) connectivity
+                       $res = Http::get(
+                               'https://www.wikidata.org/w/api.php?action=query&meta=siteinfo&format=json',
+                               array( 'timeout' => 3 ),
+                               __METHOD__
+                       );
+
+                       if ( $res === false || strpos( $res, '"sitename":"Wikidata"' ) === false ) {
+                               $connectivity = false;
+                       } else {
+                               $connectivity = true;
+                       }
+               }
+
+               if ( !$connectivity ) {
+                       $this->markTestSkipped( 'MediaWikiPageNameNormalizerTest needs internet connectivity.' );
+               }
+       }
+
+       /**
+        * @dataProvider normalizePageTitleProvider
+        */
+       public function testNormalizePageTitle( $expected, $pageName ) {
+               $normalizer = new MediaWikiPageNameNormalizer();
+
+               $this->assertSame(
+                       $expected,
+                       $normalizer->normalizePageName( $pageName, 'https://www.wikidata.org/w/api.php' )
+               );
+       }
+
+       public function normalizePageTitleProvider() {
+               // Note: This makes (very conservative) assumptions about pages on Wikidata
+               // existing or not.
+               return array(
+                       'universe (Q1)' => array(
+                               'Q1', 'Q1'
+                       ),
+                       'Q404 redirects to Q395' => array(
+                               'Q395', 'Q404'
+                       ),
+                       'there is no Q0' => array(
+                               false, 'Q0'
+                       )
+               );
+       }
+
+}
index 2846fde..64def91 100644 (file)
@@ -6,58 +6,81 @@
  */
 class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
-       const GLOBAL_KEY_EXISTING = 'MediaWikiTestCaseTestGLOBAL-Existing';
        const GLOBAL_KEY_NONEXISTING = 'MediaWikiTestCaseTestGLOBAL-NONExisting';
 
+       private static $startGlobals = array(
+               'MediaWikiTestCaseTestGLOBAL-ExistingString' => 'foo',
+               'MediaWikiTestCaseTestGLOBAL-ExistingStringEmpty' => '',
+               'MediaWikiTestCaseTestGLOBAL-ExistingArray' => array( 1, 'foo' => 'bar' ),
+               'MediaWikiTestCaseTestGLOBAL-ExistingArrayEmpty' => array(),
+       );
+
        public static function setUpBeforeClass() {
                parent::setUpBeforeClass();
-               $GLOBALS[self::GLOBAL_KEY_EXISTING] = 'foo';
+               foreach ( self::$startGlobals as $key => $value ) {
+                       $GLOBALS[$key] = $value;
+               }
        }
 
        public static function tearDownAfterClass() {
                parent::tearDownAfterClass();
-               unset( $GLOBALS[self::GLOBAL_KEY_EXISTING] );
+               foreach ( self::$startGlobals as $key => $value ) {
+                       unset( $GLOBALS[$key] );
+               }
+       }
+
+       public function provideExistingKeysAndNewValues() {
+               $providedArray = array();
+               foreach ( array_keys( self::$startGlobals ) as $key ) {
+                       $providedArray[] = array( $key, 'newValue' );
+                       $providedArray[] = array( $key, array( 'newValue' ) );
+               }
+               return $providedArray;
        }
 
        /**
+        * @dataProvider provideExistingKeysAndNewValues
+        *
         * @covers MediaWikiTestCase::setMwGlobals
         * @covers MediaWikiTestCase::tearDown
         */
-       public function testSetGlobalsAreRestoredOnTearDown() {
-               $this->setMwGlobals( self::GLOBAL_KEY_EXISTING, 'bar' );
+       public function testSetGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
+               $this->setMwGlobals( $globalKey, $newValue );
                $this->assertEquals(
-                       'bar',
-                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       $newValue,
+                       $GLOBALS[$globalKey],
                        'Global failed to correctly set'
                );
 
                $this->tearDown();
 
                $this->assertEquals(
-                       'foo',
-                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       self::$startGlobals[$globalKey],
+                       $GLOBALS[$globalKey],
                        'Global failed to be restored on tearDown'
                );
        }
 
        /**
+        * @dataProvider provideExistingKeysAndNewValues
+        *
         * @covers MediaWikiTestCase::stashMwGlobals
         * @covers MediaWikiTestCase::tearDown
         */
-       public function testStashedGlobalsAreRestoredOnTearDown() {
-               $this->stashMwGlobals( self::GLOBAL_KEY_EXISTING );
-               $GLOBALS[self::GLOBAL_KEY_EXISTING] = 'bar';
+       public function testStashedGlobalsAreRestoredOnTearDown( $globalKey, $newValue ) {
+               $this->stashMwGlobals( $globalKey );
+               $GLOBALS[$globalKey] = $newValue;
                $this->assertEquals(
-                       'bar',
-                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       $newValue,
+                       $GLOBALS[$globalKey],
                        'Global failed to correctly set'
                );
 
                $this->tearDown();
 
                $this->assertEquals(
-                       'foo',
-                       $GLOBALS[self::GLOBAL_KEY_EXISTING],
+                       self::$startGlobals[$globalKey],
+                       $GLOBALS[$globalKey],
                        'Global failed to be restored on tearDown'
                );
        }