Merge "Title: Throw if newFromText is given an invalid value"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 15 Apr 2016 22:55:00 +0000 (22:55 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 15 Apr 2016 22:55:00 +0000 (22:55 +0000)
105 files changed:
composer.json
includes/HtmlFormatter.php
includes/HttpFunctions.php
includes/WebRequest.php
includes/api/ApiHelp.php
includes/api/ApiLogin.php
includes/api/ApiQuerySearch.php
includes/api/ApiUpload.php
includes/changes/CategoryMembershipChange.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/installer/i18n/fa.json
includes/installer/i18n/is.json
includes/installer/i18n/ko.json
includes/installer/i18n/mai.json
includes/installer/i18n/pl.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/Job.php
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/AssembleUploadChunksJob.php
includes/jobqueue/jobs/PublishStashedFileJob.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
includes/search/SearchNearMatchResultSet.php
includes/search/SearchResultSet.php
includes/search/SqlSearchResultSet.php
includes/session/SessionManager.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRunJobs.php
includes/tidy/Html5Depurate.php
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/he.json
languages/i18n/it.json
languages/i18n/jv.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/mt.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/ta.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/wuu.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/cleanupCaps.php
maintenance/edit.php
maintenance/importImages.php
maintenance/moveBatch.php
resources/Resources.php
resources/lib/oojs-ui/oojs-ui-core-apex.css
resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
resources/src/mediawiki.action/mediawiki.action.edit.stash.js
resources/src/mediawiki.libs/CLDRPluralRuleParser.js
resources/src/mediawiki.special/mediawiki.special.upload.js
resources/src/mediawiki/api.js
resources/src/mediawiki/api/edit.js
resources/src/mediawiki/api/options.js
resources/src/mediawiki/api/upload.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/page/ready.js
resources/src/moment-global.js [new file with mode: 0644]
resources/src/oojs-global.js [new file with mode: 0644]
tests/phpunit/includes/HtmlFormatterTest.php [deleted file]
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/WatchedItemStoreUnitTest.php
tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
tests/phpunit/includes/deferred/LinksUpdateTest.php
tests/phpunit/includes/jobqueue/JobTest.php
tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/utils/UIDGeneratorTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/defineCallMwLoaderTestCallback.js [new file with mode: 0644]
tests/qunit/data/requireCallMwLoaderTestCallback.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/test.sinonjs/index.js [new file with mode: 0644]
thumb.php

index 1378e96..6b7898d 100644 (file)
@@ -34,6 +34,7 @@
                "wikimedia/cdb": "1.3.0",
                "wikimedia/cldr-plural-rule-parser": "1.0.0",
                "wikimedia/composer-merge-plugin": "1.3.1",
+               "wikimedia/html-formatter": "1.0.1",
                "wikimedia/ip-set": "1.0.1",
                "wikimedia/php-session-serializer": "1.0.3",
                "wikimedia/relpath": "1.0.3",
index 206f0f7..9bae8b5 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Performs transformations of HTML by wrapping around libxml2 and working
- * around its countless bugs.
+ * Stub for extensions that haven't switched to Composer-based version of this class
+ * @todo: remove in 1.28
  *
  * 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
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
+ * @deprecated since 1.27, use HtmlFormatter\HtmlFormatter
  */
-class HtmlFormatter {
-       /**
-        * @var DOMDocument
-        */
-       private $doc;
-
-       private $html;
-       private $itemsToRemove = [];
-       private $elementsToFlatten = [];
-       protected $removeMedia = false;
-
-       /**
-        * Constructor
-        *
-        * @param string $html Text to process
-        */
-       public function __construct( $html ) {
-               $this->html = $html;
-       }
-
-       /**
-        * Turns a chunk of HTML into a proper document
-        * @param string $html
-        * @return string
-        */
-       public static function wrapHTML( $html ) {
-               return '<!doctype html><html><head></head><body>' . $html . '</body></html>';
-       }
-
-       /**
-        * Override this in descendant class to modify HTML after it has been converted from DOM tree
-        * @param string $html HTML to process
-        * @return string Processed HTML
-        */
-       protected function onHtmlReady( $html ) {
-               return $html;
-       }
-
-       /**
-        * @return DOMDocument DOM to manipulate
-        */
-       public function getDoc() {
-               if ( !$this->doc ) {
-                       // DOMDocument::loadHTML isn't very good with encodings, so
-                       // convert input to ASCII by encoding everything above 128 as entities.
-                       $html = mb_convert_encoding( $this->html, 'HTML-ENTITIES', 'UTF-8' );
-
-                       // Workaround for bug that caused spaces before references
-                       // to disappear during processing: https://phabricator.wikimedia.org/T55086
-                       // TODO: Please replace with a better fix if one can be found.
-                       $html = str_replace( ' <', '&#32;<', $html );
-
-                       libxml_use_internal_errors( true );
-                       $loader = libxml_disable_entity_loader();
-                       $this->doc = new DOMDocument();
-                       $this->doc->strictErrorChecking = false;
-                       $this->doc->loadHTML( $html );
-                       libxml_disable_entity_loader( $loader );
-                       libxml_use_internal_errors( false );
-                       $this->doc->encoding = 'UTF-8';
-               }
-               return $this->doc;
-       }
-
-       /**
-        * Sets whether images/videos/sounds should be removed from output
-        * @param bool $flag
-        */
-       public function setRemoveMedia( $flag = true ) {
-               $this->removeMedia = $flag;
-       }
-
-       /**
-        * Adds one or more selector of content to remove. A subset of CSS selector
-        * syntax is supported:
-        *
-        *   <tag>
-        *   <tag>.class
-        *   .<class>
-        *   #<id>
-        *
-        * @param array|string $selectors Selector(s) of stuff to remove
-        */
-       public function remove( $selectors ) {
-               $this->itemsToRemove = array_merge( $this->itemsToRemove, (array)$selectors );
-       }
-
-       /**
-        * Adds one or more element name to the list to flatten (remove tag, but not its content)
-        * Can accept undelimited regexes
-        *
-        * Note this interface may fail in surprising unexpected ways due to usage of regexes,
-        * so should not be relied on for HTML markup security measures.
-        *
-        * @param array|string $elements Name(s) of tag(s) to flatten
-        */
-       public function flatten( $elements ) {
-               $this->elementsToFlatten = array_merge( $this->elementsToFlatten, (array)$elements );
-       }
-
-       /**
-        * Instructs the formatter to flatten all tags
-        */
-       public function flattenAllTags() {
-               $this->flatten( '[?!]?[a-z0-9]+' );
-       }
-
-       /**
-        * Removes content we've chosen to remove.  The text of the removed elements can be
-        * extracted with the getText method.
-        * @return array Array of removed DOMElements
-        */
-       public function filterContent() {
-               $removals = $this->parseItemsToRemove();
-
-               // Bail out early if nothing to do
-               if ( array_reduce( $removals,
-                       function ( $carry, $item ) {
-                               return $carry && !$item;
-                       },
-                       true
-               ) ) {
-                       return [];
-               }
-
-               $doc = $this->getDoc();
-
-               // Remove tags
-
-               // You can't remove DOMNodes from a DOMNodeList as you're iterating
-               // over them in a foreach loop. It will seemingly leave the internal
-               // iterator on the foreach out of wack and results will be quite
-               // strange. Though, making a queue of items to remove seems to work.
-               $domElemsToRemove = [];
-               foreach ( $removals['TAG'] as $tagToRemove ) {
-                       $tagToRemoveNodes = $doc->getElementsByTagName( $tagToRemove );
-                       foreach ( $tagToRemoveNodes as $tagToRemoveNode ) {
-                               if ( $tagToRemoveNode ) {
-                                       $domElemsToRemove[] = $tagToRemoveNode;
-                               }
-                       }
-               }
-               $removed = $this->removeElements( $domElemsToRemove );
-
-               // Elements with named IDs
-               $domElemsToRemove = [];
-               foreach ( $removals['ID'] as $itemToRemove ) {
-                       $itemToRemoveNode = $doc->getElementById( $itemToRemove );
-                       if ( $itemToRemoveNode ) {
-                               $domElemsToRemove[] = $itemToRemoveNode;
-                       }
-               }
-               $removed = array_merge( $removed, $this->removeElements( $domElemsToRemove ) );
-
-               // CSS Classes
-               $domElemsToRemove = [];
-               $xpath = new DOMXPath( $doc );
-               foreach ( $removals['CLASS'] as $classToRemove ) {
-                       $elements = $xpath->query( '//*[contains(@class, "' . $classToRemove . '")]' );
-
-                       /** @var $element DOMElement */
-                       foreach ( $elements as $element ) {
-                               $classes = $element->getAttribute( 'class' );
-                               if ( preg_match( "/\b$classToRemove\b/", $classes ) && $element->parentNode ) {
-                                       $domElemsToRemove[] = $element;
-                               }
-                       }
-               }
-               $removed = array_merge( $removed, $this->removeElements( $domElemsToRemove ) );
-
-               // Tags with CSS Classes
-               foreach ( $removals['TAG_CLASS'] as $classToRemove ) {
-                       $parts = explode( '.', $classToRemove );
-
-                       $elements = $xpath->query(
-                               '//' . $parts[0] . '[@class="' . $parts[1] . '"]'
-                       );
-                       $removed = array_merge( $removed, $this->removeElements( $elements ) );
-               }
-
-               return $removed;
-       }
-
-       /**
-        * Removes a list of elelments from DOMDocument
-        * @param array|DOMNodeList $elements
-        * @return array Array of removed elements
-        */
-       private function removeElements( $elements ) {
-               $list = $elements;
-               if ( $elements instanceof DOMNodeList ) {
-                       $list = [];
-                       foreach ( $elements as $element ) {
-                               $list[] = $element;
-                       }
-               }
-               /** @var $element DOMElement */
-               foreach ( $list as $element ) {
-                       if ( $element->parentNode ) {
-                               $element->parentNode->removeChild( $element );
-                       }
-               }
-               return $list;
-       }
-
-       /**
-        * libxml in its usual pointlessness converts many chars to entities - this function
-        * perfoms a reverse conversion
-        * @param string $html
-        * @return string
-        */
-       private function fixLibXML( $html ) {
-               static $replacements;
-               if ( !$replacements ) {
-                       // We don't include rules like '&#34;' => '&amp;quot;' because entities had already been
-                       // normalized by libxml. Using this function with input not sanitized by libxml is UNSAFE!
-                       $replacements = new ReplacementArray( [
-                               '&quot;' => '&amp;quot;',
-                               '&amp;' => '&amp;amp;',
-                               '&lt;' => '&amp;lt;',
-                               '&gt;' => '&amp;gt;',
-                       ] );
-               }
-               $html = $replacements->replace( $html );
-
-               // Just in case the conversion in getDoc() above used named
-               // entities that aren't known to html_entity_decode().
-               $html = mb_convert_encoding( $html, 'UTF-8', 'HTML-ENTITIES' );
-
-               return $html;
-       }
-
-       /**
-        * Performs final transformations and returns resulting HTML.  Note that if you want to call this
-        * both without an element and with an element you should call it without an element first.  If you
-        * specify the $element in the method it'll change the underlying dom and you won't be able to get
-        * it back.
-        *
-        * @param DOMElement|string|null $element ID of element to get HTML from or
-        *   false to get it from the whole tree
-        * @return string Processed HTML
-        */
-       public function getText( $element = null ) {
-
-               if ( $this->doc ) {
-                       if ( $element !== null && !( $element instanceof DOMElement ) ) {
-                               $element = $this->doc->getElementById( $element );
-                       }
-                       if ( $element ) {
-                               $body = $this->doc->getElementsByTagName( 'body' )->item( 0 );
-                               $nodesArray = [];
-                               foreach ( $body->childNodes as $node ) {
-                                       $nodesArray[] = $node;
-                               }
-                               foreach ( $nodesArray as $nodeArray ) {
-                                       $body->removeChild( $nodeArray );
-                               }
-                               $body->appendChild( $element );
-                       }
-                       $html = $this->doc->saveHTML();
-
-                       $html = $this->fixLibXML( $html );
-                       if ( wfIsWindows() ) {
-                               // Cleanup for CRLF misprocessing of unknown origin on Windows.
-                               // If this error continues in the future, please track it down in the
-                               // XML code paths if possible and fix there.
-                               $html = str_replace( '&#13;', '', $html );
-                       }
-               } else {
-                       $html = $this->html;
-               }
-               // Remove stuff added by wrapHTML()
-               $html = preg_replace( '/<!--.*?-->|^.*?<body>|<\/body>.*$/s', '', $html );
-               $html = $this->onHtmlReady( $html );
-
-               if ( $this->elementsToFlatten ) {
-                       $elements = implode( '|', $this->elementsToFlatten );
-                       $html = preg_replace( "#</?($elements)\\b[^>]*>#is", '', $html );
-               }
-
-               return $html;
-       }
-
-       /**
-        * Helper function for parseItemsToRemove(). This function extracts the selector type
-        * and the raw name of a selector from a CSS-style selector string and assigns those
-        * values to parameters passed by reference. For example, if given '#toc' as the
-        * $selector parameter, it will assign 'ID' as the $type and 'toc' as the $rawName.
-        * @param string $selector CSS selector to parse
-        * @param string $type The type of selector (ID, CLASS, TAG_CLASS, or TAG)
-        * @param string $rawName The raw name of the selector
-        * @return bool Whether the selector was successfully recognised
-        * @throws MWException
-        */
-       protected function parseSelector( $selector, &$type, &$rawName ) {
-               if ( strpos( $selector, '.' ) === 0 ) {
-                       $type = 'CLASS';
-                       $rawName = substr( $selector, 1 );
-               } elseif ( strpos( $selector, '#' ) === 0 ) {
-                       $type = 'ID';
-                       $rawName = substr( $selector, 1 );
-               } elseif ( strpos( $selector, '.' ) !== 0 && strpos( $selector, '.' ) !== false ) {
-                       $type = 'TAG_CLASS';
-                       $rawName = $selector;
-               } elseif ( strpos( $selector, '[' ) === false && strpos( $selector, ']' ) === false ) {
-                       $type = 'TAG';
-                       $rawName = $selector;
-               } else {
-                       throw new MWException( __METHOD__ . "(): unrecognized selector '$selector'" );
-               }
-
-               return true;
-       }
-
-       /**
-        * Transforms CSS-style selectors into an internal representation suitable for
-        * processing by filterContent()
-        * @return array
-        */
-       protected function parseItemsToRemove() {
-               $removals = [
-                       'ID' => [],
-                       'TAG' => [],
-                       'CLASS' => [],
-                       'TAG_CLASS' => [],
-               ];
-
-               foreach ( $this->itemsToRemove as $itemToRemove ) {
-                       $type = '';
-                       $rawName = '';
-                       if ( $this->parseSelector( $itemToRemove, $type, $rawName ) ) {
-                               $removals[$type][] = $rawName;
-                       }
-               }
-
-               if ( $this->removeMedia ) {
-                       $removals['TAG'][] = 'img';
-                       $removals['TAG'][] = 'audio';
-                       $removals['TAG'][] = 'video';
-               }
-
-               return $removals;
-       }
+class HtmlFormatter extends HtmlFormatter\HtmlFormatter {
 }
index 3f42038..b12f49f 100644 (file)
@@ -80,7 +80,7 @@ class Http {
                } else {
                        $errors = $status->getErrorsByType( 'error' );
                        $logger = LoggerFactory::getInstance( 'http' );
-                       $logger->warning( $status->getWikiText( null, null, 'en' ),
+                       $logger->warning( $status->getWikiText( false, false, 'en' ),
                                [ 'error' => $errors, 'caller' => $caller, 'content' => $req->getContent() ] );
                        return false;
                }
index b18d59c..b159f79 100644 (file)
@@ -43,6 +43,12 @@ class WebRequest {
         */
        const GETHEADER_LIST = 1;
 
+       /**
+        * The unique request ID.
+        * @var string
+        */
+       private static $reqId;
+
        /**
         * Lazy-init response object
         * @var WebResponse
@@ -257,14 +263,23 @@ class WebRequest {
         * @since 1.27
         */
        public static function getRequestId() {
-               static $reqId;
-
-               if ( !$reqId ) {
-                       $reqId = isset( $_SERVER['UNIQUE_ID'] )
+               if ( !self::$reqId ) {
+                       self::$reqId = isset( $_SERVER['UNIQUE_ID'] )
                                ? $_SERVER['UNIQUE_ID'] : wfRandomString( 24 );
                }
 
-               return $reqId;
+               return self::$reqId;
+       }
+
+       /**
+        * Override the unique request ID. This is for sub-requests, such as jobs,
+        * that wish to use the same id but are not part of the same execution context.
+        *
+        * @param string $id
+        * @since 1.27
+        */
+       public static function overrideRequestId( $id ) {
+               self::$reqId = $id;
        }
 
        /**
index f2d6329..f7539ce 100644 (file)
@@ -24,6 +24,8 @@
  * @file
  */
 
+use HtmlFormatter\HtmlFormatter;
+
 /**
  * Class to output help for an API module
  *
index 02aae06..3891415 100644 (file)
@@ -103,7 +103,7 @@ class ApiLogin extends ApiBase {
                                $loginType = 'BotPassword';
                        } else {
                                LoggerFactory::getInstance( 'authmanager' )->info(
-                                       'BotPassword login failed: ' . $status->getWikiText()
+                                       'BotPassword login failed: ' . $status->getWikiText( false, false, 'en' )
                                );
                        }
                }
index 2eb5d14..3955cc5 100644 (file)
@@ -116,7 +116,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                if ( is_null( $matches ) ) {
                        $this->dieUsage( "{$what} search is disabled", "search-{$what}-disabled" );
                } elseif ( $matches instanceof Status && !$matches->isGood() ) {
-                       $this->dieUsage( $matches->getWikiText(), 'search-error' );
+                       $this->dieUsage( $matches->getWikiText( false, false, 'en' ), 'search-error' );
                }
 
                if ( $resultPageSet === null ) {
index a5e2fbb..1571b27 100644 (file)
@@ -257,7 +257,7 @@ class ApiUpload extends ApiBase {
                                        'offset' => $this->mUpload->getOffset(),
                                ];
 
-                               $this->dieUsage( $status->getWikiText(), 'stashfailed', 0, $extradata );
+                               $this->dieUsage( $status->getWikiText( false, false, 'en' ), 'stashfailed', 0, $extradata );
                        }
                }
 
@@ -288,7 +288,7 @@ class ApiUpload extends ApiBase {
                                                $filekey,
                                                [ 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status ]
                                        );
-                                       $this->dieUsage( $status->getWikiText(), 'stashfailed' );
+                                       $this->dieUsage( $status->getWikiText( false, false, 'en' ), 'stashfailed' );
                                }
 
                                // The fully concatenated file has a new filekey. So remove
@@ -391,7 +391,7 @@ class ApiUpload extends ApiBase {
                        if ( !$progress ) {
                                $this->dieUsage( 'No result in status data', 'missingresult' );
                        } elseif ( !$progress['status']->isGood() ) {
-                               $this->dieUsage( $progress['status']->getWikiText(), 'stashfailed' );
+                               $this->dieUsage( $progress['status']->getWikiText( false, false, 'en' ), 'stashfailed' );
                        }
                        if ( isset( $progress['status']->value['verification'] ) ) {
                                $this->checkVerification( $progress['status']->value['verification'] );
index 1ff6f85..64d8139 100644 (file)
@@ -127,10 +127,11 @@ class CategoryMembershipChange {
                        $this->timestamp,
                        $categoryTitle,
                        $this->getUser(),
-                       $this->getChangeMessageText( $type, [
-                               'prefixedText' => $this->pageTitle->getPrefixedText(),
-                               'numTemplateLinks' => $this->numTemplateLinks
-                       ] ),
+                       $this->getChangeMessageText(
+                               $type,
+                               [ 'prefixedText' => $this->pageTitle->getPrefixedText() ],
+                               $this->numTemplateLinks
+                       ),
                        $this->pageTitle,
                        $this->getPreviousRevisionTimestamp(),
                        $this->revision
@@ -246,10 +247,11 @@ class CategoryMembershipChange {
         * or CategoryMembershipChange::CATEGORY_REMOVAL
         * @param array $params
         * - prefixedText: result of Title::->getPrefixedText()
+        * @param int $numTemplateLinks
         *
         * @return string
         */
-       private function getChangeMessageText( $type, array $params ) {
+       private function getChangeMessageText( $type, array $params, $numTemplateLinks ) {
                $array = [
                        self::CATEGORY_ADDITION => 'recentchanges-page-added-to-category',
                        self::CATEGORY_REMOVAL => 'recentchanges-page-removed-from-category',
@@ -257,7 +259,7 @@ class CategoryMembershipChange {
 
                $msgKey = $array[$type];
 
-               if ( intval( $params['numTemplateLinks'] ) > 0 ) {
+               if ( intval( $numTemplateLinks ) > 0 ) {
                        $msgKey .= '-bundled';
                }
 
index cc9099c..b48191f 100644 (file)
@@ -527,7 +527,10 @@ class ForeignAPIRepo extends FileRepo {
                        return $req->getContent();
                } else {
                        $logger = LoggerFactory::getInstance( 'http' );
-                       $logger->warning( $status->getWikiText(), [ 'caller' => 'ForeignAPIRepo::httpGet' ] );
+                       $logger->warning(
+                               $status->getWikiText( false, false, 'en' ),
+                               [ 'caller' => 'ForeignAPIRepo::httpGet' ]
+                       );
                        return false;
                }
        }
index 7e00793..c037516 100644 (file)
@@ -2046,34 +2046,29 @@ abstract class File implements IDBAccessObject {
                $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $lang->getCode() );
                if ( $renderUrl ) {
                        $cache = ObjectCache::getMainWANInstance();
+                       $key = $this->repo->getLocalCacheKey(
+                               'RemoteFileDescription',
+                               'url',
+                               $lang->getCode(),
+                               $this->getName()
+                       );
 
-                       $key = null;
-                       if ( $this->repo->descriptionCacheExpiry > 0 ) {
-                               wfDebug( "Attempting to get the description from cache..." );
-                               $key = $this->repo->getLocalCacheKey(
-                                       'RemoteFileDescription',
-                                       'url',
-                                       $lang->getCode(),
-                                       $this->getName()
-                               );
-                               $obj = $cache->get( $key );
-                               if ( $obj ) {
-                                       wfDebug( "success!\n" );
-
-                                       return $obj;
-                               }
-                               wfDebug( "miss\n" );
-                       }
-                       wfDebug( "Fetching shared description from $renderUrl\n" );
-                       $res = Http::get( $renderUrl, [], __METHOD__ );
-                       if ( $res && $key ) {
-                               $cache->set( $key, $res, $this->repo->descriptionCacheExpiry );
-                       }
+                       return $cache->getWithSetCallback(
+                               $key,
+                               $this->repo->descriptionCacheExpiry ?: $cache::TTL_UNCACHEABLE,
+                               function ( $oldValue, &$ttl, array &$setOpts ) use ( $renderUrl ) {
+                                       wfDebug( "Fetching shared description from $renderUrl\n" );
+                                       $res = Http::get( $renderUrl, [], __METHOD__ );
+                                       if ( !$res ) {
+                                               $ttl = WANObjectCache::TTL_UNCACHEABLE;
+                                       }
 
-                       return $res;
-               } else {
-                       return false;
+                                       return $res;
+                               }
+                       );
                }
+
+               return false;
        }
 
        /**
index f38248b..cf0045e 100644 (file)
@@ -124,8 +124,51 @@ class ForeignDBFile extends LocalFile {
         * @return string
         */
        function getDescriptionText( $lang = false ) {
-               // Restore remote behavior
-               return File::getDescriptionText( $lang );
+               global $wgLang;
+
+               if ( !$this->repo->fetchDescription ) {
+                       return false;
+               }
+
+               $lang = $lang ?: $wgLang;
+               $renderUrl = $this->repo->getDescriptionRenderUrl( $this->getName(), $lang->getCode() );
+               if ( !$renderUrl ) {
+                       return false;
+               }
+
+               $touched = $this->repo->getSlaveDB()->selectField(
+                       'page',
+                       'page_touched',
+                       [
+                               'page_namespace' => NS_FILE,
+                               'page_title' => $this->title->getDBkey()
+                       ]
+               );
+               if ( $touched === false ) {
+                       return false; // no description page
+               }
+
+               $cache = ObjectCache::getMainWANInstance();
+
+               return $cache->getWithSetCallback(
+                       $this->repo->getLocalCacheKey(
+                               'RemoteFileDescription',
+                               'url',
+                               $lang->getCode(),
+                               $this->getName(),
+                               $touched
+                       ),
+                       $this->repo->descriptionCacheExpiry ?: $cache::TTL_UNCACHEABLE,
+                       function ( $oldValue, &$ttl, array &$setOpts ) use ( $renderUrl ) {
+                               wfDebug( "Fetching shared description from $renderUrl\n" );
+                               $res = Http::get( $renderUrl, [], __METHOD__ );
+                               if ( !$res ) {
+                                       $ttl = WANObjectCache::TTL_UNCACHEABLE;
+                               }
+
+                               return $res;
+                       }
+               );
        }
 
        /**
@@ -137,10 +180,14 @@ class ForeignDBFile extends LocalFile {
         */
        public function getDescriptionShortUrl() {
                $dbr = $this->repo->getSlaveDB();
-               $pageId = $dbr->selectField( 'page', 'page_id', [
-                       'page_namespace' => NS_FILE,
-                       'page_title' => $this->title->getDBkey()
-               ] );
+               $pageId = $dbr->selectField(
+                       'page',
+                       'page_id',
+                       [
+                               'page_namespace' => NS_FILE,
+                               'page_title' => $this->title->getDBkey()
+                       ]
+               );
 
                if ( $pageId !== false ) {
                        $url = $this->repo->makeUrl( [ 'curid' => $pageId ] );
index 40b2226..aa278aa 100644 (file)
@@ -2875,7 +2875,8 @@ class LocalFileMoveBatch {
                                $this->cleanupTarget( $triplets );
                                $destFile->unlock();
                                $this->file->unlockAndRollback(); // unlocks the destination
-                               wfDebugLog( 'imagemove', "Error in moving files: " . $statusMove->getWikiText() );
+                               wfDebugLog( 'imagemove', "Error in moving files: "
+                                       . $statusMove->getWikiText( false, false, 'en' ) );
                                $statusMove->ok = false;
 
                                return $statusMove;
index d7e36ce..7d756ea 100644 (file)
@@ -12,7 +12,8 @@
                        "Leyth",
                        "Huji",
                        "Macofe",
-                       "درفش کاویانی"
+                       "درفش کاویانی",
+                       "Hamisun"
                ]
        },
        "config-desc": "نصب کنندهٔ ویکی‌مدیا",
@@ -73,6 +74,7 @@
        "config-ctype": "'''مخرب:''' پی‌اچ‌پی باید با پشتیبانی برای [http://www.php.net/manual/en/ctype.installation.php Ctype extension] تهیه شده‌باشد.",
        "config-iconv": "<strong>خطای اساسی:</strong> پی‌اچ‌پی باید کامپایل‌شده باشد برای پشتیبانی از [http://www.php.net/manual/en/iconv.installation.php افزونهٔ iconv].",
        "config-json": "'''مخرب:''' پی‌اچ‌پی بدون پشتیبانی جِی‌اس‌اُ‌ان تهیه شده‌بود.\nشما باید قبل از نصب مدیاویکی یا بسط  جِی‌اس‌اُ‌ان پی‌اچ‌پی یا بسط [http://pecl.php.net/package/jsonc PECL jsonc] را نصب کنید.\n* بسط پی‌اچ‌پی شامل لینوکس اینترپرایز رد هت (سِنت‌اُاِس) 5 یا 6 است، هرچند باید در <code>/etc/php.ini</code> یا <code>/etc/php.d/json.ini</code> فعال باشد.\n*  به‌جای بسته‌بندی کردن بسط پی‌ایی‌سی‌اِل مانند <code>php5-json</code> یا <code>php-pecl-jsonc</code>، توزیع‌های برخی لینوکس پس از ماه می ۲۰۱۳ با حذف بسط پی‌اچ‌پی افزایش پیدا کرد.",
+       "config-mbstring-absent": "<strong>خطای اساسی:</strong> پی‌اچ‌پی باید با پشتیبانی [http://www.php.net/manual/en/mbstring.setup.php mbstring extension] تهیه شده باشد.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب شده‌است.",
        "config-apc": "[http://www.php.net/apc APC] نصب شده‌است.",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] نصب شده‌است.",
index e0a7975..50cbc32 100644 (file)
@@ -9,6 +9,7 @@
        "config-title": "MediaWiki $1 uppsetning",
        "config-information": "Upplýsingar",
        "config-localsettings-key": "Uppfærslulykill:",
+       "config-session-error": "Villa við að ræsa setu: $1",
        "config-your-language": "Tungumálið þitt:",
        "config-your-language-help": "Veldu tungumál að nota við uppsetninguna.",
        "config-wiki-language": "Tungumál á wiki:",
        "config-page-upgradedoc": "Uppfærsla",
        "config-page-existingwiki": "Fyrirliggjandi wiki",
        "config-restart": "Já, endurræsa",
+       "config-copyright": "=== Höfundarréttur og skilmálar ===\n\n$1\n\nÞetta er frjáls hugbúnaður; þú mátt dreifa honum og/eða breyta samkvæmt skilmálum í almenna GNU GPL notkunarleyfinu eins og það er gefið út af Frjálsu hugbúnaðarstofnuninni; annaðhvort útgáfu 2 af GPL-leyfinu, eða (ef þér sýnist svo) einhverri nýrri útgáfu leyfisins.\n\nHugbúnaði þessum er dreift í þeirri von að hann geti verið gagnlegur, en <strong>ÁN ALLRAR ÁBYRGÐAR</strong>; einnig án þeirrar ábyrgðar sem gefin er í skyn með <strong>SELJANLEIKA</strong> eða <strong>EIGINLEIKUM TIL TILTEKINNA NOTA</strong>. Sjá almenna GNU GPL notkunarleyfið fyrir nánari upplýsingar.\n\nÞað ætti að hafa fylgt afrit af almenna <doclink href=Copying>GNU GPL notkunarleyfinu</doclink> með forritinu; ef ekki skrifið þá Fjálsu hugbúnarstofnuninni: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, eða [http://www.gnu.org/copyleft/gpl.html lestu það á netinu].",
        "config-env-php": "PHP $1 er uppsett.",
        "config-env-hhvm": "HHVM $1 er uppsett.",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] er uppsett",
+       "config-apc": "[http://www.php.net/apc APC] er uppsett",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] er uppsett",
        "config-diff3-bad": "GNU diff3 fannst ekki.",
+       "config-using-server": "Nota \"<nowiki>$1</nowiki>\" sem heiti á þjóni.",
+       "config-using-uri": "Nota \"<nowiki>$1$2</nowiki>\" sem slóð á þjón.",
        "config-db-type": "Tegund gagnagrunns:",
        "config-db-host": "Netþjónn gagnagrunns:",
        "config-db-name": "Heiti gagnagrunns:",
        "config-db-name-oracle": "Gagnagrunnsskema:",
        "config-db-username": "Notandanafn á gagnagrunni:",
        "config-db-password": "Lykilorð gagnagrunns:",
+       "config-charset-mysql5-binary": "MySQL 4.1/5.0 keyrsluskrá",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-db-port": "Gátt gagnagrunns:",
+       "config-sqlite-dir": "Gagnamappa SQLite:",
        "config-type-mysql": "MySQL (eða samhæft)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
+       "config-header-mysql": "Stillingar MySQL",
+       "config-header-postgres": "Stillingar PostgreSQL",
+       "config-header-sqlite": "Stillingar SQLite",
+       "config-header-oracle": "Stillingar Oracle",
+       "config-header-mssql": "Stillingar Microsoft SQL Server",
        "config-regenerate": "Endurgera LocalSettings.php →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> beiðni mistókst!",
        "config-db-web-account": "Gagnagrunnsreikningur fyrir vefaðgang",
index 09a9264..f621fe4 100644 (file)
        "config-install-mainpage": "기본 내용으로 대문을 만드는 중",
        "config-install-extension-tables": "활성화된 확장 기능을 위한 테이블을 만드는 중",
        "config-install-mainpage-failed": "대문을 삽입할 수 없습니다: $1",
-       "config-install-done": "<strong>축하합니다!</strong>\n미디어위키가 성공적으로 설치되었습니다.\n\n설치 관리자가 <code>LocalSettings.php</code> 파일을 만들었습니다.\n모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n<strong>참고:</strong> 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 <strong>[$2 위키에 들어갈 수 있습니다]</strong>.",
+       "config-install-done": "<strong>축하합니다!</strong>\n미디어위키를 설치했습니다.\n\n설치 관리자가 <code>LocalSettings.php</code> 파일을 만들었습니다.\n여기에 모든 설정이 포함되어 있습니다.\n\n파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉터리) 다운로드가 자동으로 시작됩니다.\n\n다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:\n\n$3\n\n<strong>참고:</strong> 이 생성한 설정 파일을 다운로드하지 않고 설치를 끝내면 이 파일은 나중에 사용할 수 없습니다.\n\n완료되었으면 <strong>[$2 위키에 들어갈 수 있습니다]</strong>.",
        "config-download-localsettings": "<code>LocalSettings.php</code> 다운로드",
        "config-help": "도움말",
        "config-help-tooltip": "확장하려면 클릭",
        "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 분류별 확장 기능]을 찾아보실 수 있습니다.",
-       "mainpagetext": "<strong>미ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\84±ê³µì \81ì\9c¼ë¡\9c ì\84¤ì¹\98ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.</strong>",
+       "mainpagetext": "<strong>미디어위키가 설치되었습니다.</strong>",
        "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 설정하기 목록]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ 미디어위키 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 8c6cb8b..e3f800e 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Umeshberma",
                        "बिप्लब आनन्द",
-                       "Bijay chaurasia"
+                       "Bijay chaurasia",
+                       "Tulsi Bhagat"
                ]
        },
        "config-desc": "मेडिया-विकी के लेल इंस्टॉलर",
        "config-page-complete": "पूर्ण!",
        "config-page-restart": "स्थापनाके पुनारम्भ करु",
        "config-page-readme": "पढू",
+       "config-page-releasenotes": "रिलीज नोट्स",
+       "config-page-copying": "अनुकरण",
+       "config-page-upgradedoc": "उपारोपण भऽ रहल अछि।",
        "config-page-existingwiki": "रहल विकी",
        "config-restart": "हँ, एकरा पुन: सुरु कएल जाए",
+       "config-sidebar": "* [//www.mediawiki.org MediaWiki home]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administrator's Guide]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Read me</doclink>\n* <doclink href=ReleaseNotes>Release notes</doclink>\n* <doclink href=Copying>Copying</doclink>\n* <doclink href=UpgradeDoc>Upgrading</doclink>",
+       "config-env-good": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित कर सकै चिए।",
+       "config-env-bad": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित नै कर सकै चिए।",
+       "config-env-php": "PHP $1 स्थापित कएल ग्याल अछि।",
        "mainpagetext": "'''मेडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
        "mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकि तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
 }
index 1d5d779..7422a66 100644 (file)
@@ -82,6 +82,7 @@
        "config-ctype": "''' Krytyczny ''': PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/ctype.installation.php rozszerzenia Ctype].",
        "config-iconv": "<strong>Błąd krytyczny:</strong> PHP musi być skompilowane z obsługą [http://www.php.net/manual/en/iconv.installation.php rozszerzenia iconv].",
        "config-json": "'''Błąd krytyczny:''' PHP skompilowano bez obsługa JSON.\nPrzed zainstalowaniem oprogramowania MediaWiki musisz zainstalować rozszerzenie PHP JSON albo rozszerzenie [http://pecl.php.net/package/jsonc PECL jsonc].\n* Rozszerzenie PHP jest zawarte w Red Hat Enterprise Linux (CentOS) 5 i 6, jednak musi zostać włączone w <code>/etc/php.ini</code> or <code>/etc/php.d/json.ini</code>.\n* Niektóre dystrybucje Linuksa, wydane po maju 2013, nie używają rozszerzenia PHP, lecz rozszerzenie PECL, jako <code>php5-json</code> lub <code>php-pecl-jsonc</code>.",
+       "config-mbstring-absent": "<strong>Błąd krytyczny:</strong> PHP musi być skompilowany z obsługą [http://www.php.net/manual/en/mbstring.setup.php rozszerzenia mbstring].",
        "config-xcache": "[Http://trac.lighttpd.net/xcache/ XCache] jest zainstalowany",
        "config-apc": "[Http://www.php.net/apc APC] jest zainstalowany",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] jest zainstalowany",
index 5943c05..551199d 100644 (file)
        "config-profile-no-anon": "需要注册帐号",
        "config-profile-fishbowl": "编辑受限",
        "config-profile-private": "非公开wiki",
-       "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n'''{{int:config-profile-wiki}}'''允许包括未登录用户在内的所有人编辑。'''{{int:config-profile-no-anon}}'''的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。'''{{int:config-profile-private}}'''则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。",
+       "config-profile-help": "如果您允许尽量多的人编写wiki,网站上的内容会更加丰富。在MediaWiki中,您可以轻松地审查最近更改,并轻易回退掉新手或破坏者造成的损害。\n\n然而,许多人觉得让MediaWiki存在多种角色将更加好用;同时,要说服所有人都愿以wiki的方式作贡献并非一件易事。因此,您可以有以下选择:\n\n<strong>{{int:config-profile-wiki}}</strong>模式允许包括未登录用户在内的所有人编辑。<strong>{{int:config-profile-no-anon}}</strong>的wiki需要额外的注册流程,这有可能会阻碍随意贡献者。\n\n<strong>{{int:config-profile-fishbowl}}</strong>方案只允许获批准的用户编辑,但对公众开放页面浏览(包括历史记录)。<strong>{{int:config-profile-private}}</strong>则只允许获批准的用户浏览、编辑页面。\n\n安装完成后,您还可以对用户权限进行更多、更复杂的配置,参见[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 相关的使用手册]。",
        "config-license": "版权和许可证:",
        "config-license-none": "页脚无许可证",
        "config-license-cc-by-sa": "知识共享“署名-相同方式共享”",
index 9ccf6f8..bbd0ddb 100644 (file)
@@ -92,6 +92,10 @@ abstract class Job implements IJobSpecification {
 
                // expensive jobs may set this to true
                $this->removeDuplicates = false;
+
+               if ( !isset( $this->params['requestId'] ) ) {
+                       $this->params['requestId'] = WebRequest::getRequestId();
+               }
        }
 
        /**
@@ -152,6 +156,18 @@ abstract class Job implements IJobSpecification {
                        : null;
        }
 
+       /**
+        * @return string|null Id of the request that created this job. Follows
+        *  jobs recursively, allowing to track the id of the request that started a
+        *  job when jobs insert jobs which insert other jobs.
+        * @since 1.27
+        */
+       public function getRequestId() {
+               return isset( $this->params['requestId'] )
+                       ? $this->params['requestId']
+                       : null;
+       }
+
        /**
         * @return int|null UNIX timestamp of when the job was runnable, or null
         * @since 1.26
@@ -214,6 +230,8 @@ abstract class Job implements IJobSpecification {
                        unset( $info['params']['rootJobTimestamp'] );
                        // Likewise for jobs with different delay times
                        unset( $info['params']['jobReleaseTimestamp'] );
+                       // Identical jobs from different requests should count as duplicates
+                       unset( $info['params']['requestId'] );
                        // Queues pack and hash this array, so normalize the order
                        ksort( $info['params'] );
                }
index 0a0a7a2..a2f55b9 100644 (file)
@@ -163,6 +163,8 @@ class JobRunner implements LoggerAwareInterface {
                                $popTime = time();
                                $jType = $job->getType();
 
+                               WebRequest::overrideRequestId( $job->getRequestId() );
+
                                // Back off of certain jobs for a while (for throttling and for errors)
                                $ttw = $this->getBackoffTimeToWait( $job );
                                if ( $ttw > 0 ) {
index bc2f7c4..16e35f1 100644 (file)
@@ -69,7 +69,7 @@ class AssembleUploadChunksJob extends Job {
                                        $this->params['filekey'],
                                        [ 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status ]
                                );
-                               $this->setLastError( $status->getWikiText() );
+                               $this->setLastError( $status->getWikiText( false, false, 'en' ) );
 
                                return false;
                        }
index a6d2f70..d2825a8 100644 (file)
@@ -92,7 +92,7 @@ class PublishStashedFileJob extends Job {
                                        $this->params['filekey'],
                                        [ 'result' => 'Failure', 'stage' => 'publish', 'status' => $status ]
                                );
-                               $this->setLastError( $status->getWikiText() );
+                               $this->setLastError( $status->getWikiText( false, false, 'en' ) );
 
                                return false;
                        }
index 0aa08be..086ab17 100644 (file)
@@ -1098,7 +1098,7 @@ MESSAGE;
                                        $scripts = self::filter( 'minify-js', $scripts );
                                }
                        } else {
-                               $scripts = new XmlJsCode( "function ( $, jQuery ) {\n{$scripts}\n}" );
+                               $scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts}\n}" );
                        }
                } elseif ( !is_array( $scripts ) ) {
                        throw new MWException( 'Invalid scripts error. Array of URLs or string of code expected.' );
index 222135c..44371bb 100644 (file)
@@ -78,6 +78,7 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
                        'special-characters-group-ipa',
                        'special-characters-group-symbols',
                        'special-characters-group-greek',
+                       'special-characters-group-greekextended',
                        'special-characters-group-cyrillic',
                        'special-characters-group-arabic',
                        'special-characters-group-arabicextended',
index cb4f81d..510726b 100644 (file)
@@ -23,4 +23,8 @@ class SearchNearMatchResultSet extends SearchResultSet {
                $this->fetched = true;
                return SearchResult::newFromTitle( $this->result );
        }
+
+       public function rewind() {
+               $this->fetched = false;
+       }
 }
index bfee698..a673dba 100644 (file)
@@ -154,6 +154,12 @@ class SearchResultSet {
                return false;
        }
 
+       /**
+        * Rewind result set back to begining
+        */
+       function rewind() {
+       }
+
        /**
         * Frees the result set, if applicable.
         */
index 7a6aaf7..6b60899 100644 (file)
@@ -8,7 +8,7 @@ class SqlSearchResultSet extends SearchResultSet {
        protected $terms;
        protected $totalHits;
 
-       function __construct( $resultSet, $terms, $total = null ) {
+       function __construct( ResultWrapper $resultSet, $terms, $total = null ) {
                $this->resultSet = $resultSet;
                $this->terms = $terms;
                $this->totalHits = $total;
@@ -41,6 +41,12 @@ class SqlSearchResultSet extends SearchResultSet {
                );
        }
 
+       function rewind() {
+               if ( $this->resultSet ) {
+                       $this->resultSet->rewind();
+               }
+       }
+
        function free() {
                if ( $this->resultSet === false ) {
                        return false;
index c65fa21..29cd69a 100644 (file)
@@ -499,10 +499,12 @@ final class SessionManager implements SessionManagerInterface {
                                                        'username' => $userName,
                                                ] );
                                } else {
-                                       $logger->error( __METHOD__ . ': failed with message ' . $status->getWikiText(),
+                                       $logger->error(
+                                               __METHOD__ . ': failed with message ' . $status->getWikiText( false, false, 'en' ),
                                                [
                                                        'username' => $userName,
-                                               ] );
+                                               ]
+                                       );
                                }
                                $user->setId( $id );
                                $user->loadFromId( User::READ_LATEST );
index 7f257e6..2e7b4cd 100644 (file)
@@ -74,7 +74,11 @@ class SpecialPreferences extends SpecialPage {
                $this->addHelpLink( 'Help:Preferences' );
 
                // Load the user from the master to reduce CAS errors on double post (T95839)
-               $user = $this->getUser()->getInstanceForUpdate() ?: $this->getUser();
+               if ( $this->getRequest()->wasPosted() ) {
+                       $user = $this->getUser()->getInstanceForUpdate() ?: $this->getUser();
+               } else {
+                       $user = $this->getUser();
+               }
 
                $htmlForm = Preferences::getFormObject( $user, $this->getContext() );
                $htmlForm->setSubmitCallback( [ 'Preferences', 'tryUISubmit' ] );
index de77380..8398989 100644 (file)
@@ -344,14 +344,8 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        if ( $showWatcherCount && $obj->rc_namespace >= 0 ) {
                                if ( !isset( $watcherCache[$obj->rc_namespace][$obj->rc_title] ) ) {
                                        $watcherCache[$obj->rc_namespace][$obj->rc_title] =
-                                               $dbr->selectField(
-                                                       'watchlist',
-                                                       'COUNT(*)',
-                                                       [
-                                                               'wl_namespace' => $obj->rc_namespace,
-                                                               'wl_title' => $obj->rc_title,
-                                                       ],
-                                                       __METHOD__ . '-watchers'
+                                               WatchedItemStore::getDefaultInstance()->countWatchers(
+                                                       new TitleValue( (int)$obj->rc_namespace, $obj->rc_title )
                                                );
                                }
                                $rc->numberofWatchingusers = $watcherCache[$obj->rc_namespace][$obj->rc_title];
index 2312f76..ce5533f 100644 (file)
@@ -94,8 +94,11 @@ class SpecialRunJobs extends UnlistedSpecialPage {
                                if ( strpos( $errstr, 'Cannot modify header information' ) !== false ) {
                                        return true; // bug T115413
                                }
-                               // Delegate unhandled errors to the default handlers
-                               return false;
+                               // Delegate unhandled errors to the default MediaWiki handler
+                               // so that fatal errors get proper logging (T89169)
+                               return call_user_func_array(
+                                       'MWExceptionHandler::handleError', func_get_args()
+                               );
                        } );
                }
 
index a34933c..c6acd66 100644 (file)
@@ -29,9 +29,10 @@ class Html5Depurate extends TidyDriverBase {
                        ] );
                $status = $req->execute();
                if ( !$status->isOK() ) {
-                       throw new Exception( "Error contacting depurate service: " . $status->getWikiText() );
+                       throw new Exception( "Error contacting depurate service: "
+                               . $status->getWikiText( false, false, 'en' ) );
                } elseif ( $req->getStatus() !== 200 ) {
-                       throw new Exception( "Depurate returned error: " . $status->getWikiText() );
+                       throw new Exception( "Depurate returned error: " . $status->getWikiText( false, false, 'en' ) );
                }
                $result = $req->getContent();
                $startBody = strpos( $result, "<body>" );
index 184a3e7..4338173 100644 (file)
@@ -33,6 +33,7 @@
        "tog-watchdefault": "Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я {{GENDER:|рэдагаваў|рэдагавала}}",
        "tog-watchmoves": "Дадаваць у мой сьпіс назіраньня перанесеныя мною старонкі і файлы",
        "tog-watchdeletion": "Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я выдаляю",
+       "tog-watchuploads": "Дадаваць файлы, якія я загружаю, у мой сьпіс назіраньня",
        "tog-watchrollback": "Дадаваць у мой сьпіс назіраньня старонкі, дзе я {{GENDER:|зрабіў|зрабіла}} адкат",
        "tog-minordefault": "Па змоўчаньні пазначаць усе мае праўкі дробнымі",
        "tog-previewontop": "Паказваць папярэдні прагляд старонкі над полем рэдагаваньня",
        "apisandbox-helpurls": "Спасылкі на даведку",
        "apisandbox-examples": "Прыклады",
        "apisandbox-dynamic-parameters": "Дадатковыя парамэтры",
+       "apisandbox-dynamic-parameters-add-label": "Дадаць парамэтар:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Назва парамэтру",
        "apisandbox-results": "Вынікі",
        "apisandbox-request-url-label": "URL-адрас запыту:",
        "apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}",
index c88f2fe..7ab481f 100644 (file)
        "versionrequired": "Изисква се версия $1 на МедияУики",
        "versionrequiredtext": "Използването на тази страница изисква версия $1 на софтуера МедияУики. Вижте [[Special:Version|текущата версия]].",
        "ok": "Добре",
-       "pagetitle": "$1 â\80\94 {{SITENAME}}",
+       "pagetitle": "$1 â\80\93 {{SITENAME}}",
        "retrievedfrom": "Взето от „$1“.",
        "youhavenewmessages": "{{PLURAL:$3|Имате}} $1 ($2).",
        "youhavenewmessagesfromusers": "Имате $1 от {{PLURAL:$3|друг потребител|$3 потребители}} ($2).",
        "wrongpassword": "Въведената парола е невалидна. Опитайте отново.",
        "wrongpasswordempty": "Не е въведена парола. Опитайте отново.",
        "passwordtooshort": "Необходимо е паролата да съдържа поне {{PLURAL:$1|1 знак|$1 знака}}.",
-       "passwordtoolong": "Ð\9fаÑ\80олаÑ\82а Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¿Ð¾-дÑ\8aлгa Ð¿т {{PLURAL:$1|1 символ|$1 символа}}.",
+       "passwordtoolong": "Ð\9fаÑ\80олаÑ\82а Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¿Ð¾-дÑ\8aлгa Ð¾т {{PLURAL:$1|1 символ|$1 символа}}.",
        "passwordtoopopular": "Често използвани пароли не могат да бъдат ползвани. Моля, изберете по-уникална парола.",
        "password-name-match": "Паролата ви трябва да се различава от потребителското ви име.",
        "password-login-forbidden": "Използването на това потребителско име и парола е забранено.",
        "rows": "Редове:",
        "columns": "Колони:",
        "searchresultshead": "Търсене",
-       "stub-threshold": "Праг за форматиране на <a href=\"#\" class=\"stub\">препратки към мъничета</a>:",
+       "stub-threshold": "Праг за форматиране на препратки към мъничета ($1):",
        "stub-threshold-sample-link": "пример",
        "stub-threshold-disabled": "Изключено",
        "recentchangesdays": "Брой дни в последни промени:",
index 72c5c44..c779416 100644 (file)
        "ipblocklist-no-results": "অনুরুদ্ধ আইপি ঠিকানা বা ব্যবহারকারী নামটির উপর কোন বাধা নেই।",
        "blocklink": "বাধা দাও",
        "unblocklink": "বাধা তুলে নেওয়া হোক",
-       "change-blocklink": "বà§\8dলà¦\95 à¦\85বসà§\8dথার পরিবর্তন করুন",
+       "change-blocklink": "বাধা পরিবর্তন করুন",
        "contribslink": "অবদান",
        "emaillink": "ই-মেইল পাঠাও",
        "autoblocker": "আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি \"[[User:$1|$1]]\" ব্যবহার করেছেন। $1-কে বাধাদানের কারণ \"$2\"",
index 1f3cc1c..d3b11f9 100644 (file)
@@ -47,6 +47,7 @@
        "tog-watchdefault": "Přidávat mnou editované stránky a soubory ke sledovaným",
        "tog-watchmoves": "Přidávat mnou přesouvané stránky a soubory mezi sledované",
        "tog-watchdeletion": "Přidávat stránky a soubory, které smažu, mezi sledované",
+       "tog-watchuploads": "Přidávat mnou načtené soubory ke sledovaným",
        "tog-watchrollback": "Přidávat stránky, které jsem {{GENDER:|vrátil|vrátila}} zpět, ke sledovaným",
        "tog-minordefault": "Označovat editace implicitně jako malé",
        "tog-previewontop": "Zobrazovat náhled před editačním oknem (ne za ním)",
index b82bf20..d88749b 100644 (file)
        "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
        "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
        "tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten",
+       "tog-watchuploads": "Neue hochgeladene Dateien zu meiner Beobachtungsliste hinzufügen",
        "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, automatisch beobachten",
        "tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren",
        "tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen",
        "recentchangeslinked-page": "Seite:",
        "recentchangeslinked-to": "Zeige nur Änderungen an Seiten, die auf diese Seite verlinken",
        "recentchanges-page-added-to-category": "[[:$1]] zur Kategorie hinzugefügt",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] und [[Special:WhatLinksHere/$1|{{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}}]] zur Kategorie hinzugefügt",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] zur Kategorie hinzugefügt, [[Special:WhatLinksHere/$1|diese Seite ist in anderen Seiten eingebunden]]",
        "recentchanges-page-removed-from-category": "[[:$1]] von der Kategorie entfernt",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] und [[Special:WhatLinksHere/$1|{{PLURAL:$2|eine weitere Seite|$2 weitere Seiten}}]] von der Kategorie entfernt",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] von der Kategorie entfernt, [[Special:WhatLinksHere/$1|diese Seite ist in anderen Seiten eingebunden]]",
        "autochange-username": "Automatische MediaWiki-Änderung",
        "upload": "Datei hochladen",
        "uploadbtn": "Datei hochladen",
index 81b46d6..55ae93e 100644 (file)
        "recentchangeslinked-page": "Page name:",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead",
        "recentchanges-page-added-to-category": "[[:$1]] added to category",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] and [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] added to category",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] added to category, [[Special:WhatLinksHere/$1|this page is included within other pages]]",
        "recentchanges-page-removed-from-category": "[[:$1]] removed from category",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] and [[Special:WhatLinksHere/$1|{{PLURAL:$2|one page|$2 pages}}]] removed from category",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] removed from category, [[Special:WhatLinksHere/$1|this page is included within other pages]]",
        "autochange-username": "MediaWiki automatic change",
        "upload": "Upload file",
        "uploadbtn": "Upload file",
index 106e05d..ca01036 100644 (file)
        "recentchangeslinked-page": "Nombre de la página:",
        "recentchangeslinked-to": "Mostrar los cambios en páginas enlazadas con la página seleccionada",
        "recentchanges-page-added-to-category": "[[:$1]] añadida a la categoría",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|una página añadida|$2 páginas añadidas}}]] a la categoría",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] añadida a la categoría, [[Special:WhatLinksHere/$1|esta página está incluida en otras páginas]]",
        "recentchanges-page-removed-from-category": "[[:$1]] eliminada de la categoría",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] y [[Special:WhatLinksHere/$1|{{PLURAL:$2|una página eliminada|$2 páginas eliminadas}}]] de la categoría",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] eliminada de la categoría, [[Special:WhatLinksHere/$1|esta página está incluida en otras páginas]]",
        "autochange-username": "Cambio automático de MediaWiki",
        "upload": "Subir archivo",
        "uploadbtn": "Subir un archivo",
index 1a4c120..d5dae8e 100644 (file)
@@ -51,7 +51,8 @@
                        "Mahdy Saffar",
                        "Arian Ar",
                        "Ms96",
-                       "Freshman404"
+                       "Freshman404",
+                       "Hamisun"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "special-characters-group-ipa": "آوانگاری بین‌المللی",
        "special-characters-group-symbols": "نمادها",
        "special-characters-group-greek": "یونانی",
+       "special-characters-group-greekextended": "یونانی قدیمی",
        "special-characters-group-cyrillic": "سیریلیک",
        "special-characters-group-arabic": "عربی",
        "special-characters-group-arabicextended": "عربی گسترش‌یافته",
        "randomrootpage": "صفحهٔ ریشهٔ تصادفی",
        "log-action-filter-block": "نوع بسته شدن:",
        "log-action-filter-delete": "نوع حذف:",
+       "log-action-filter-import": "نوع واردات",
+       "log-action-filter-managetags": "نوع مدیریت",
+       "log-action-filter-move": "نوع حرکت",
+       "log-action-filter-newusers": "نوع ایجاد حساب",
        "log-action-filter-patrol": "نوع گشت:",
        "log-action-filter-protect": "نوع محافظت",
+       "log-action-filter-rights": "روش تغییر صحیح",
+       "log-action-filter-suppress": "روش سرکوب",
        "log-action-filter-upload": "نوع بارگذاری",
        "log-action-filter-all": "همه",
        "log-action-filter-block-block": "بستن",
+       "log-action-filter-block-reblock": "تصحیح بلاک",
        "log-action-filter-block-unblock": "باز شدن",
+       "log-action-filter-contentmodel-change": "تغییر نوع محتوا",
        "log-action-filter-delete-delete": "حذف صفحه",
        "log-action-filter-delete-restore": "احیای صفحه",
        "log-action-filter-delete-event": "حذف سیاهه",
+       "log-action-filter-delete-revision": "حذف ویرایش",
+       "log-action-filter-import-interwiki": "ورودی ترانسویکی",
+       "log-action-filter-managetags-create": "ایجاد تگ",
+       "log-action-filter-managetags-delete": "حذف کردن تگ",
+       "log-action-filter-managetags-activate": "فعالسازی تگ",
+       "log-action-filter-managetags-deactivate": "تغییر تگ",
+       "log-action-filter-newusers-create": "ایجاد شده توسط کاربر ناشناس",
+       "log-action-filter-newusers-create2": "ایجاد شده توسط کاربر ثبت نام شده",
+       "log-action-filter-newusers-autocreate": "ایجاد خودکار",
+       "log-action-filter-newusers-byemail": "ایجاد پسورد با ارسال به ایمیل",
        "log-action-filter-patrol-autopatrol": "گشت خودکار",
        "log-action-filter-protect-protect": "محافظت",
+       "log-action-filter-protect-modify": "اصلاح حفاظت",
        "log-action-filter-protect-unprotect": "خروج از محافظت",
+       "log-action-filter-protect-move_prot": "حرکت محافظت شده",
+       "log-action-filter-rights-rights": "تغیبر دستی",
+       "log-action-filter-rights-autopromote": "تغییر اتوماتیک",
+       "log-action-filter-suppress-event": "جلوگیری از ورود",
+       "log-action-filter-suppress-revision": "جلوگیری از ویرایش",
+       "log-action-filter-suppress-delete": "متوقف سازی صفحه",
+       "log-action-filter-upload-upload": "بارگذاری جدید",
        "log-action-filter-upload-overwrite": "بارگذاری دوباره"
 }
index a5d794e..c8ffc01 100644 (file)
        "api-error-unknownerror": "Tuntematon virhe: $1.",
        "api-error-uploaddisabled": "Tiedostojen tallentaminen ei ole käytössä.",
        "api-error-verification-error": "Tiedosto voi olla vioittunut, tai sillä saattaa olla väärä tiedostopääte.",
+       "api-error-was-deleted": "Tämänniminen tiedosto on aikaisemmin tallennettu ja sittemmin poistettu.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunti|sekuntia}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuutti|minuuttia}}",
        "duration-hours": "$1 {{PLURAL:$1|tunti|tuntia}}",
        "sessionprovider-nocookies": "Evästeet on voitu poistaa käytöstä. Varmista, että sinulla on evästeet käytössä ja yritä sitten uudelleen.",
        "randomrootpage": "Satunnainen juurisivu",
        "log-action-filter-block": "Eston tyyppi:",
+       "log-action-filter-contentmodel": "Sisältömallin muutoksen tyyppi:",
        "log-action-filter-delete": "Poiston tyyppi:",
+       "log-action-filter-import": "Tuonnin tyyppi:",
+       "log-action-filter-managetags": "Merkkausten hallintatoimenpiteen tyyppi:",
+       "log-action-filter-move": "Siirron tyyppi:",
+       "log-action-filter-newusers": "Käyttäjätunnuksen luomisen tyyppi:",
        "log-action-filter-patrol": "Tarkastuksen tyyppi:",
        "log-action-filter-protect": "Suojauksen tyyppi:",
+       "log-action-filter-rights": "Käyttöoikeuksien muutoksen tyyppi:",
+       "log-action-filter-suppress": "Häivyttämisen tyyppi:",
        "log-action-filter-upload": "Tallennuksen tyyppi:",
        "log-action-filter-all": "Kaikki",
        "log-action-filter-block-block": "Eston asettaminen",
        "log-action-filter-block-reblock": "Estoasetusten muuttaminen",
        "log-action-filter-block-unblock": "Eston poistaminen",
+       "log-action-filter-contentmodel-change": "Sisältömallin muuttaminen",
        "log-action-filter-delete-delete": "Sivun poistaminen",
        "log-action-filter-delete-restore": "Sivun palauttaminen",
        "log-action-filter-delete-event": "Lokimerkinnän poistaminen",
        "log-action-filter-delete-revision": "Version piilottaminen",
+       "log-action-filter-import-interwiki": "Tuonti wikien välillä",
+       "log-action-filter-import-upload": "Tuonti XML-tallennuksella",
+       "log-action-filter-managetags-create": "Merkkauksen luominen",
+       "log-action-filter-managetags-delete": "Merkkauksen tuhoaminen",
+       "log-action-filter-managetags-activate": "Merkkauksen ottaminen käyttöön",
+       "log-action-filter-managetags-deactivate": "Merkkauksen poistaminen käytöstä",
+       "log-action-filter-move-move": "Siirto ilman että ohjaussivu korvataan",
+       "log-action-filter-move-move_redir": "Siirto joka korvaa ohjauksen",
+       "log-action-filter-newusers-create": "Luonut rekisteröimätön käyttäjä",
+       "log-action-filter-newusers-create2": "Luonut rekisteröity käyttäjä",
+       "log-action-filter-newusers-autocreate": "Luotu automaattisesti",
+       "log-action-filter-newusers-byemail": "Luotu salasanalla, joka on lähetetty sähköpostitse",
        "log-action-filter-protect-protect": "Suojauksen asettaminen",
        "log-action-filter-protect-modify": "Suojausasetusten muuttaminen",
        "log-action-filter-protect-unprotect": "Suojauksen poistaminen",
+       "log-action-filter-protect-move_prot": "Suojausasetusten siirtäminen",
+       "log-action-filter-rights-rights": "Käsin tehty muutos",
+       "log-action-filter-rights-autopromote": "Automaattinen muutos",
+       "log-action-filter-suppress-event": "Lokimerkinnän häivyttäminen",
+       "log-action-filter-suppress-revision": "Version häivyttäminen",
+       "log-action-filter-suppress-delete": "Sivun häivyttäminen",
+       "log-action-filter-suppress-block": "Käyttäjätunnuksen häivyttäminen estämällä se",
+       "log-action-filter-suppress-reblock": "Käyttäjätunnuksen häivyttäminen uudella estolla",
        "log-action-filter-upload-upload": "Uusi tallennus",
        "log-action-filter-upload-overwrite": "Päälletallennus"
 }
index deb4f35..d1692fa 100644 (file)
                        "Lbayle",
                        "Cl3m3n7",
                        "C13m3n7",
-                       "Gnangbade"
+                       "Gnangbade",
+                       "Frigory"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "tog-extendwatchlist": "Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes",
        "tog-usenewrc": "Grouper les changements par page dans les modifications récentes et la liste de suivi",
        "tog-numberheadings": "Numéroter automatiquement les titres de section",
-       "tog-showtoolbar": "Afficher la barre d’outils de modification",
-       "tog-editondblclick": "Modifier des pages sur double-clic",
+       "tog-showtoolbar": "Afficher la barre d’outils d’édition",
+       "tog-editondblclick": "Modifier les pages avec un double-clic",
        "tog-editsectiononrightclick": "Activer la modification des sections par un clic droit sur les titres de section",
        "tog-watchcreations": "Ajouter à ma liste de suivi les pages que je crée et les fichiers que j’importe",
        "tog-watchdefault": "Ajouter à ma liste de suivi les pages et les fichiers que je modifie",
        "tog-watchmoves": "Ajouter à ma liste de suivi les pages et les fichiers que je renomme",
        "tog-watchdeletion": "Ajouter à ma liste de suivi les pages et les fichiers que je supprime",
+       "tog-watchuploads": "Ajouter les nouveaux fichiers que j’importe à ma liste de suivi",
        "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation",
-       "tog-minordefault": "Marquer toutes mes modifications comme mineures par défaut",
-       "tog-previewontop": "Afficher la prévisualisation avant la zone de modification",
+       "tog-minordefault": "Marquer mes modifications comme étant mineures par défaut",
+       "tog-previewontop": "Afficher la prévisualisation avant la zone d’édition",
        "tog-previewonfirst": "Afficher la prévisualisation lors de la première modification",
        "tog-enotifwatchlistpages": "M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifié",
        "tog-enotifusertalkpages": "M’avertir par courriel si ma page de discussion est modifiée",
        "tog-enotifminoredits": "M’avertir par courriel également lors des modifications mineures des pages ou des fichiers",
-       "tog-enotifrevealaddr": "Afficher mon adresse de courriel dans les courriels de notification",
+       "tog-enotifrevealaddr": "Afficher mon adresse électronique dans les courriels de notification",
        "tog-shownumberswatching": "Afficher le nombre d’utilisateurs qui suivent la page",
        "tog-oldsig": "Signature existante :",
        "tog-fancysig": "Traiter la signature comme du wikitexte (sans lien automatique)",
        "tog-prefershttps": "Conserver une connexion sécurisée une fois connecté(e)",
        "underline-always": "Toujours",
        "underline-never": "Jamais",
-       "underline-default": "Valeur par défaut du navigateur ou du thème",
-       "editfont-style": "Style de police de la zone de modification :",
+       "underline-default": "Valeur par défaut du thème ou du navigateur",
+       "editfont-style": "Style de police de la zone d’édition :",
        "editfont-default": "Police par défaut du navigateur",
        "editfont-monospace": "Police à chasse fixe",
        "editfont-sansserif": "Police sans-serif",
        "category_header": "Pages dans la catégorie « $1 »",
        "subcategories": "Sous-catégories",
        "category-media-header": "Média dans la catégorie « $1 »",
-       "category-empty": "<em>Cette catégorie ne contient aucune page ni aucun fichier multimédia.</em>",
+       "category-empty": "<em>Cette catégorie ne contient actuellement aucune page ni fichier multimédia.</em>",
        "hidden-categories": "{{PLURAL:$1|Catégorie cachée|Catégories cachées}}",
        "hidden-category-category": "Catégories cachées",
        "category-subcat-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucune sous-catégorie|1=comprend seulement la sous-catégorie ci-dessous|comprend les $2 sous-catégories, dont {{PLURAL:$1|0=aucune|1=celle|les $1}} ci-dessous}}.",
-       "category-subcat-count-limited": "Cette catégorie {{PLURAL:$1|0=ne comprend aucune sous-catégorie|1=comprend seulement la sous-catégorie ci-dessous|comprend les $1 sous-catégories ci-dessous}}.",
+       "category-subcat-count-limited": "Cette catégorie comprend {{PLURAL:$1|la sous-catégorie|les $1 sous-catégories}} ci-dessous.",
        "category-article-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucune page|1=comprend seulement la page ci-dessous|comprend $2 pages, dont {{PLURAL:$1|0=aucune|1=celle|les $1}} ci-dessous}}.",
        "category-article-count-limited": "{{PLURAL:$1|0=Aucune page ne figure|1=La page suivante figure|Les $1 pages suivantes figurent}} dans la présente catégorie.",
        "category-file-count": "Cette catégorie {{PLURAL:$2|0=ne comprend aucun fichier|1=comprend le fichier suivant|comprend $2 fichiers, dont {{PLURAL:$1|0=aucun|1=celui|les $1}} ci-dessous}}.",
        "jumpto": "Aller à :",
        "jumptonavigation": "navigation",
        "jumptosearch": "rechercher",
-       "view-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d’utilisateurs cherchent à consulter cette page.\nVeuillez attendre un peu avant d’essayer à nouveau d’accéder à celle-ci.\n\n$1",
-       "generic-pool-error": "Désolé, les serveurs sont surchargés pour le moment.\nTrop d’utilisateurs essayent de consulter cette ressource.\nVeuillez attendre un peu avant d’essayer à nouveau d’accéder à celle-ci.",
+       "view-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d’utilisateurs cherchent à consulter cette page.\nVeuillez attendre un peu avant de réessayer d’accéder à celle-ci.\n\n$1",
+       "generic-pool-error": "Désolé, les serveurs sont surchargés en ce moment.\nTrop d’utilisateurs cherchent à consulter cette ressource.\nVeuillez attendre un peu avant de tenter à nouveau l’accès à celle-ci.",
        "pool-timeout": "Délai d’attente du verrou dépassé",
-       "pool-queuefull": "La file d’attente des processus est pleine",
+       "pool-queuefull": "La file des processus est pleine",
        "pool-errorunknown": "Erreur inconnue",
        "pool-servererror": "Le service de réservation n’est pas disponible ($1).",
        "poolcounter-usage-error": "Erreur d’utilisation : $1",
        "nospecialpagetext": "<strong>Vous avez demandé une page spéciale qui n’existe pas.</strong>\n\nUne liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erreur",
        "databaseerror": "Erreur de la base de données",
-       "databaseerror-text": "Une erreur de requête de base de données s'est produite. Cela peut provenir d’une anomalie dans le logiciel.",
+       "databaseerror-text": "Une erreur de requête de base de données s’est produite.\nCela peut provenir d’une anomalie dans le logiciel.",
        "databaseerror-textcl": "Une erreur de requête de base de données s’est produite.",
        "databaseerror-query": "Requête : $1",
        "databaseerror-function": "Fonction : $1",
        "recentchangeslinked-page": "Nom de la page :",
        "recentchangeslinked-to": "Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l'inverse",
        "recentchanges-page-added-to-category": "[[:$1]] ajouté à la catégorie",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page ajoutée|$2 pages ajoutées}}]] à la catégorie",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] ajouté à la catégorie, [[Special:WhatLinksHere/$1|cette page est incluse dans d’autres]]",
        "recentchanges-page-removed-from-category": "[[:$1]] supprimé de la catégorie",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] et [[Special:WhatLinksHere/$1|{{PLURAL:$2|une page retirée|$2 pages retirées}}]] de la catégorie",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] supprimée de la catégorie, [[Special:WhatLinksHere/$1|cette page est incluse dans d’autres]]",
        "autochange-username": "Modification automatique de MediaWiki",
        "upload": "Importer un fichier",
        "uploadbtn": "Importer le fichier",
index be9ea32..475666a 100644 (file)
@@ -40,6 +40,7 @@
        "tog-watchdefault": "Engadir as páxinas e os ficheiros que edite á miña lista de vixilancia",
        "tog-watchmoves": "Engadir as páxinas e os ficheiros que mova á miña lista de vixilancia",
        "tog-watchdeletion": "Engadir as páxinas e os ficheiros que borre á miña lista de vixilancia",
+       "tog-watchuploads": "Engadir os novos ficheiros que subín á miña lista de vixilancia",
        "tog-watchrollback": "Engadir as páxinas nas que realice unha reversión á miña lista de vixilancia",
        "tog-minordefault": "Marcar todas as edicións como pequenas por defecto",
        "tog-previewontop": "Mostrar a vista previa antes da caixa de edición",
        "recentchangeslinked-page": "Nome da páxina:",
        "recentchangeslinked-to": "Mostrar os cambios relacionados das páxinas que ligan coa dada",
        "recentchanges-page-added-to-category": "\"[[:$1]]\" engadiuse á categoría",
-       "recentchanges-page-added-to-category-bundled": "\"[[:$1]]\" e [[Special:WhatLinksHere/$1|{{PLURAL:$2|unha páxina|$2 páxinas}}]] engadíronse á categoría",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] engadida á categoría [[Special:WhatLinksHere/$1|esta páxina está incluída noutras páxinas]]",
        "recentchanges-page-removed-from-category": "\"[[:$1]]\" eliminouse da categoría",
-       "recentchanges-page-removed-from-category-bundled": "\"[[:$1]]\" e [[Special:WhatLinksHere/$1|{{PLURAL:$2|unha páxina|$2 páxinas}}]] elimináronse da categoría",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] eliminada da categoría [[Special:WhatLinksHere/$1||esta páxina está incluída noutras páxinas]]",
        "autochange-username": "Cambio automático de MediaWiki",
        "upload": "Subir un ficheiro",
        "uploadbtn": "Subir un ficheiro",
index b48844d..530a48c 100644 (file)
        "compareselectedversions": "वेंचिल्ल्या पुनर्नियाळांची तुळा करात",
        "editundo": "केल्लें परतावचें",
        "diff-multi-sameuser": "(ह्या वांगड्या सयत {{PLURAL:$1|केल्लें मदलें एक अवतरण दाखोवंक ना|केल्लें मदलें $1 अवतरण दाखोवंक ना}})",
-       "searchresults": "सà¥\8bदाà¤\9aà¥\87 à¤¨à¤¿à¤\95ाल",
-       "searchresults-title": "\"$1\" à¤¹à¤¾à¤\9aà¥\8dया à¤¸à¥\8bदाà¤\9aà¥\87 à¤¨à¤¿à¤\95ाल",
+       "searchresults": "सà¥\8bदाà¤\9aà¥\87 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\82",
+       "searchresults-title": "\"$1\" à¤¹à¤¾à¤\9aà¥\8dया à¤¸à¥\8bदाà¤\9aà¥\87 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¾à¤\82",
        "prevn": "आदलें{{PLURAL:$1|$1}}",
        "nextn": "दुसरें {{PLURAL:$1|$1}}",
        "next-page": "दुसरें पान",
index d2611fe..9441df7 100644 (file)
        "compareselectedversions": "Nivodloleo uzollneo comparar kor",
        "editundo": "kel'lem portavchem",
        "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodol dakhounk na|kel'le modle $1 bodlopam dakhounk nan}})",
-       "searchresults": "Sodache nikal",
-       "searchresults-title": "\"$1\" -khatir sodacho nikal",
+       "searchresults": "Sodache porinaman",
+       "searchresults-title": "\"$1\" -khatir sodache porinaman",
        "prevn": "adlem {{PLURAL:$1|$1}}",
        "nextn": "fuddlem {{PLURAL:$1|$1}}",
        "next-page": "Fuddlem pan",
index e9a8ca3..cd4c51d 100644 (file)
@@ -55,7 +55,7 @@
        "tog-watchrollback": "הוספת דפים שבהם ביצעתי שחזור לגרסה קודמת לרשימת המעקב שלי",
        "tog-minordefault": "סימון כל פעולת עריכה כמשנית כברירת מחדל",
        "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה",
-       "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה ראשונה",
+       "tog-previewonfirst": "×\94צ×\92ת ×ª×¦×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\91ער×\99×\9b×\94 ×\94ר×\90ש×\95× ×\94",
        "tog-enotifwatchlistpages": "לשלוח אליי דוא\"ל כאשר משתנה דף או קובץ ברשימת המעקב שלי",
        "tog-enotifusertalkpages": "לשלוח אליי דוא\"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי",
        "tog-enotifminoredits": "לשלוח אליי דוא\"ל גם על עריכות משניות של דפים וקבצים",
@@ -63,7 +63,7 @@
        "tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים",
        "tog-oldsig": "החתימה הנוכחית:",
        "tog-fancysig": "התייחסות לחתימה כקוד ויקי (ללא קישור אוטומטי)",
-       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\97×\99ה",
+       "tog-uselivepreview": "ש×\99×\9e×\95ש ×\91תצ×\95×\92×\94 ×\9eק×\93×\99×\9e×\94 ×\9e×\94×\99רה",
        "tog-forceeditsummary": "הצגת אזהרה בעת הכנסת תקציר עריכה ריק",
        "tog-watchlisthideown": "הסתרת העריכות שלי ברשימת המעקב",
        "tog-watchlisthidebots": "הסתרת עריכות של בוטים ברשימת המעקב",
@@ -74,7 +74,7 @@
        "tog-watchlisthidepatrolled": "הסתרת עריכות בדוקות ברשימת המעקב",
        "tog-watchlisthidecategorization": "הסתרת סיווג דפים לקטגוריות",
        "tog-ccmeonemails": "לשלוח אליי העתקים של הודעות דואר אלקטרוני ששלחתי למשתמשים אחרים",
-       "tog-diffonly": "×\91×\99×\98×\95×\9c ×\94צ×\92ת ×ª×\95×\9b×\9f ×\94×\93×£ ×\9eת×\97ת ×\9c×\94ש×\95×\95×\90×\95ת ×\94×\92רס×\90×\95ת",
+       "tog-diffonly": "ביטול הצגת תוכן הדף מתחת להשוואת הגרסאות",
        "tog-showhiddencats": "הצגת קטגוריות מוסתרות",
        "tog-norollbackdiff": "השמטת ההבדלים בין הגרסאות לאחר ביצוע שחזור",
        "tog-useeditwarning": "הצגת אזהרה בעת עזיבת דף עריכה עם שינויים שטרם נשמרו",
        "recentchangeslinked-page": "שם הדף:",
        "recentchangeslinked-to": "הצגת השינויים בדפים המקשרים לדף הנתון במקום זאת",
        "recentchanges-page-added-to-category": "הדף [[:$1]] נוסף לקטגוריה",
-       "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] [[Special:WhatLinksHere/$1|{{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}}]] נוספו לקטגוריה",
+       "recentchanges-page-added-to-category-bundled": "הדף [[:$1]] נוסף לקטגוריה, [[Special:WhatLinksHere/$1|והוא מוכלל בדפים אחרים]]",
        "recentchanges-page-removed-from-category": "הדף [[:$1]] הוסר מקטגוריה",
-       "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] [[Special:WhatLinksHere/$1|{{PLURAL:$2|ועוד דף אחד|ועוד $2 דפים}}]] הוסרו מקטגוריה",
+       "recentchanges-page-removed-from-category-bundled": "הדף [[:$1]] הוסר מקטגוריה, [[Special:WhatLinksHere/$1|והוא מוכלל בדפים אחרים]]",
        "autochange-username": "שינוי אוטומטי של מדיה־ויקי",
        "upload": "העלאת קובץ לשרת",
        "uploadbtn": "העלאה",
        "protectlogtext": "להלן רשימה של שינויי ההגנה על דפים.\nראו גם את [[Special:ProtectedPages|רשימת הדפים המוגנים]] הנוכחית.",
        "protectedarticle": "הפעיל הגנה על הדף \"[[$1]]\"",
        "modifiedarticleprotection": "שינה את רמת ההגנה של הדף \"[[$1]]\"",
-       "unprotectedarticle": "×\91×\99×\98×\9c ×\90ת ×\94×\94×\92× ×\94 ×¢×\9c הדף \"[[$1]]\"",
+       "unprotectedarticle": "×\94ס×\99ר ×\90ת ×\94×\94×\92× ×\94 ×\9eהדף \"[[$1]]\"",
        "movedarticleprotection": "העביר את הגדרות ההגנה מ\"[[$2]]\" ל\"[[$1]]\"",
        "protect-title": "שינוי רמת ההגנה של הדף \"$1\"",
        "protect-title-notallowed": "הצגת רמת ההגנה של הדף \"$1\"",
        "nextdiff": "מעבר להשוואת הגרסאות הבאה ←",
        "mediawarning": "<strong>אזהרה:</strong> סוג קובץ זה עלול להכיל קוד זדוני.\nהרצת הקוד עלולה לסכן את המחשב שלך.",
        "imagemaxsize": "גודל תמונה מרבי:<br />(לדפי תיאור קובץ)",
-       "thumbsize": "×\94ק×\98× ×\94 ×\9c×\92×\95×\93×\9c ×©×\9c:",
+       "thumbsize": "×\92×\95×\93×\9c ×©×\9c ×ª×\9e×\95× ×\95ת ×\9e×\9e×\95×\96ער×\95ת:",
        "widthheightpage": "<span dir=\"ltr\">$1 × $2</span>, {{PLURAL:$3|דף אחד|$3 דפים}}",
        "file-info": "גודל הקובץ: $1, סוג MIME‏: $2",
        "file-info-size": "<span dir=\"ltr\">$1 × $2</span> פיקסלים, גודל הקובץ: $3, סוג MIME‏: $4",
index 661c1c3..11ffcbc 100644 (file)
        "tog-showtoolbar": "Mostra la barra degli strumenti di modifica",
        "tog-editondblclick": "Modifica delle pagine tramite doppio clic",
        "tog-editsectiononrightclick": "Modifica delle sezioni tramite clic destro sul titolo",
-       "tog-watchcreations": "Aggiungi le pagine create e i file caricati agli osservati speciali",
-       "tog-watchdefault": "Aggiungi le pagine e i file modificati agli osservati speciali",
-       "tog-watchmoves": "Aggiungi le pagine e i file spostati agli osservati speciali",
-       "tog-watchdeletion": "Aggiungi le pagine e i file cancellati agli osservati speciali",
+       "tog-watchcreations": "Aggiungi le pagine che creo e i file che carico agli osservati speciali",
+       "tog-watchdefault": "Aggiungi le pagine e i file che modifico agli osservati speciali",
+       "tog-watchmoves": "Aggiungi le pagine e i file che sposto agli osservati speciali",
+       "tog-watchdeletion": "Aggiungi le pagine e i file che cancello agli osservati speciali",
+       "tog-watchuploads": "Aggiungi i nuovi file che carico agli osservati speciali",
        "tog-watchrollback": "Aggiungi agli osservati speciali le pagine su cui ho effettuato un rollback",
        "tog-minordefault": "Indica ogni modifica come minore (solo come predefinito)",
        "tog-previewontop": "Mostra l'anteprima sopra la casella di modifica e non sotto",
        "title-invalid-utf8": "Il titolo della pagina richiesta contiene una sequenza UTF-8 non valida.",
        "title-invalid-interwiki": "Il titolo della pagina richiesta contiene un collegamento interwiki che non può essere usato nei titoli.",
        "title-invalid-talk-namespace": "Il titolo della pagina richiesta fa riferimento a una pagina di discussione non presente.",
-       "title-invalid-characters": "Il titolo della pagina richiesta contiene caratteri invalidi: \"$1\".",
+       "title-invalid-characters": "Il titolo della pagina richiesta contiene caratteri non validi: \"$1\".",
        "title-invalid-relative": "Il titolo indicato contiene un percorso relativo (./, ../). Tali titoli non sono validi, perché risulteranno spesso irraggiungibili quando gestiti dal browser dell'utente.",
        "title-invalid-magic-tilde": "Il titolo della pagina richiesta non è valido in quanto contiene la successione speciale di tilde (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Il titolo della pagina richiesta è troppo lungo. Non può essere più lungo di {{PLURAL:$1|byte}} in codifica UTF-8.",
        "missingcommentheader": "<strong>Attenzione:</strong> non è stato specificato l'oggetto di questo commento. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata senza.",
        "summary-preview": "Anteprima dell'oggetto:",
        "subject-preview": "Anteprima oggetto:",
-       "previewerrortext": "C'è stato un errore mentre si è cercato di mostrare l'anteprima.",
+       "previewerrortext": "Si è verificato un errore durante il tentativo di mostrare l'anteprima delle tue modifiche.",
        "blockedtitle": "Utente bloccato.",
        "blockedtext": "'''Il tuo nome utente o indirizzo IP è stato bloccato.'''\n\nIl blocco è stato imposto da $1. La motivazione del blocco è la seguente: ''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nSe lo si desidera, è possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per discutere del blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] o se l'utilizzo di tale funzione è stato bloccato.\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5.\nSi prega di specificare tutti i dettagli precedenti in qualsiasi richiesta di chiarimenti.",
        "autoblockedtext": "Questo indirizzo IP è stato bloccato automaticamente perché condiviso con un altro utente, a sua volta bloccato da $1.\nLa motivazione del blocco è la seguente:\n\n:''$2''\n\n* Inizio del blocco: $8\n* Scadenza del blocco: $6\n* Intervallo di blocco: $7\n\nÈ possibile contattare $1 o un altro [[{{MediaWiki:Grouppage-sysop}}|amministratore]] per richiedere eventuali chiarimenti circa il blocco.\n\nSi noti che la funzione 'Scrivi all'utente' non è attiva se non è stato registrato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]] e, comunque, se nell'applicare il blocco, tale funzione è stata disabilitata (per la durata del blocco).\n\nL'indirizzo IP attuale è $3, il numero ID del blocco è #$5\nSi prega di specificare tutti i dettagli qui inclusi nel compilare qualsiasi richiesta di chiarimenti.",
        "recentchangeslinked-feed": "Modifiche correlate",
        "recentchangeslinked-toolbox": "Modifiche correlate",
        "recentchangeslinked-title": "Modifiche correlate a \"$1\"",
-       "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|Osservati speciali]] sono evidenziate in <strong>grassetto</strong>.",
+       "recentchangeslinked-summary": "Questa pagina speciale mostra le modifiche più recenti alle pagine collegate da quella specificata (o contenute nella categoria specificata).\nLe pagine contenute nella propria lista degli [[Special:Watchlist|osservati speciali]] sono evidenziate in <strong>grassetto</strong>.",
        "recentchangeslinked-page": "Nome della pagina:",
        "recentchangeslinked-to": "Mostra solo le modifiche alle pagine collegate a quella specificata",
        "recentchanges-page-added-to-category": "[[:$1]] aggiunta alla categoria",
        "http-read-error": "Errore di lettura HTTP.",
        "http-timed-out": "Richiesta HTTP scaduta.",
        "http-curl-error": "Errore durante il recupero dell'URL: $1",
-       "http-bad-status": "C'è stato un problema durante la richiesta HTTP: $1 $2",
+       "http-bad-status": "Si è verificato un problema durante la richiesta HTTP: $1 $2",
        "upload-curl-error6": "URL non raggiungibile",
        "upload-curl-error6-text": "Impossibile raggiungere la URL specificata. Verificare che la URL sia scritta correttamente e che il sito in questione sia attivo.",
        "upload-curl-error28": "Tempo scaduto per l'upload",
        "api-error-duplicate-archive": "{{PLURAL:$1|C'era un altro file|C'erano altri file}} già nel sito con lo stesso contenuto, ma {{PLURAL:$1|è stato cancellato|sono stati cancellati}}.",
        "api-error-empty-file": "Il file selezionato era vuoto.",
        "api-error-emptypage": "La creazione di nuove pagine vuote non è consentita.",
-       "api-error-fetchfileerror": "Errore interno: c'è stato un problema durante il recupero del documento.",
+       "api-error-fetchfileerror": "Errore interno: si è verificato un problema durante il recupero del file.",
        "api-error-fileexists-forbidden": "Un file di nome \"$1\" già esiste e non può essere sovrascritto.",
        "api-error-fileexists-shared-forbidden": "Un file di nome \"$1\" già esiste nel repository condiviso e non può essere sovrascritto.",
        "api-error-file-too-large": "Il file selezionato era troppo grande.",
index 4cf527d..affbabe 100644 (file)
                ]
        },
        "tog-underline": "Garisen ngisoré pranala:",
-       "tog-hideminor": "Dhelikaké suntingan cilik ing owah-owahan pungkasan",
-       "tog-hidepatrolled": "Dhelikaké suntingan kapanto ing owah-owahan pungkasan",
+       "tog-hideminor": "Dhelikaké besutan cilik ing owah-owahan pungkasan",
+       "tog-hidepatrolled": "Dhelikaké besutan awasan ing owah-owahan pungkasan",
        "tog-newpageshidepatrolled": "Dhelikaké kaca kapanto saka daptar kaca anyar",
+       "tog-hidecategorization": "Dhelikaké kategorisasi kaca",
        "tog-extendwatchlist": "Jembaraké daptar pangawasan kanggo nuduhaké kabèh owahan, ora mung sing paling anyar",
        "tog-usenewrc": "Owah-owahané paguyuban miturut kaca nèng owah-owahan anyar lan daptar panto",
        "tog-numberheadings": "Wènèhana nomer judul secara otomatis",
-       "tog-showtoolbar": "Tuduhna <em>toolbar</em> (batang piranti) panyuntingan (mbutuhaké JavaScript)",
+       "tog-showtoolbar": "Tuduhaké wilah piranti sarana besut",
        "tog-editondblclick": "Besut kaca sarana ngeklik pindho",
        "tog-editsectiononrightclick": "Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (mbutuhaké JavaScript)",
        "tog-watchcreations": "Tambahaké kaca sing tak gawé lan berkas sing tak unggah nèng daptar pangawasan",
        "tog-watchdefault": "Tambahaké kaca lan berkas sing tak sunting nèng daptar pangawasan",
        "tog-watchmoves": "Tambahaké kaca lan berkas sing tak pindhahaké nèng daptar pangawasan",
        "tog-watchdeletion": "Tambahaké kaca lan berkas sing tak busak nèng daptar pangawasan",
+       "tog-watchuploads": "Tambahaké barkas anyar sing tak unggah nyang pawawanganku",
+       "tog-watchrollback": "Tambahaké kaca sing tak wurungaké nyang pawawanganku",
        "tog-minordefault": "Tandhanana kabèh suntingan dadi suntingan cilik secara baku",
        "tog-previewontop": "Tuduhna pratayang sadurungé kothak sunting lan ora sawisé",
        "tog-previewonfirst": "Tuduhna pratayang ing suntingan kapisan",
        "tog-shownumberswatching": "Tuduhna cacahé pangawas",
        "tog-oldsig": "Tapak asma sing ana:",
        "tog-fancysig": "Anggepen tapak asta minangka teks wiki (tanpa pranala otomatis)",
-       "tog-uselivepreview": "Nganggoa pratayang langsung (mbutuhaké JavaScript) (eksperimental)",
+       "tog-uselivepreview": "Trapaké prawuryan langsung",
        "tog-forceeditsummary": "Élingna aku menawa kothak ringkesan suntingan isih kosong",
        "tog-watchlisthideown": "Delikna suntinganku ing daftar pangawasan",
-       "tog-watchlisthidebots": "Delikna suntingan ing daftar pangawasan",
+       "tog-watchlisthidebots": "Dhelikaké besutan bot saka pangawasan",
        "tog-watchlisthideminor": "Delikna suntingan kecil di daftar pangawasan",
        "tog-watchlisthideliu": "Ngumpetaké suntingan panganggo sing mlebu log seka daftar pangawasan",
+       "tog-watchlistreloadautomatically": "Mot manèh pawawangan kanthi otomanis samangsa panyaring diowah (butuh JavaScript)",
        "tog-watchlisthideanons": "Ngumpetaké suntingan panganggo anonim seka daftar pangawasan",
        "tog-watchlisthidepatrolled": "Delikna suntingan sing wis dipatroli saka daftar pangawasan",
+       "tog-watchlisthidecategorization": "Dhelikaké kategorisasi kaca",
        "tog-ccmeonemails": "Kirimana aku salinan layang e-mail sing tak-kirimaké menyang wong liya",
        "tog-diffonly": "Aja dituduhaké isi kaca ing ngisor bédané suntingan",
        "tog-showhiddencats": "Tuduhna kategori sing didelikaké",
        "tog-norollbackdiff": "Lirwaaké prabédan sawusé nglakokaké sawijining pambalikan.",
        "tog-useeditwarning": "Èlingaké kula yèn kula ninggalaké suntingan sing durung kasimpen",
        "tog-prefershttps": "Nganggo sambungan sing aman rikala mlebet log",
-       "underline-always": "Tansah",
-       "underline-never": "Ora",
+       "underline-always": "Mesthi",
+       "underline-never": "Ora tau",
        "underline-default": "Kulit atau penjelajah bawaan",
        "editfont-style": "Modhèl aksara (font) ing kotak suntingan:",
        "editfont-default": "Standar panjelajah wèb",
-       "editfont-monospace": "Aksara (font) Monospace",
-       "editfont-sansserif": "Aksara (font) Sans-serif",
-       "editfont-serif": "Aksara (font) Serif",
+       "editfont-monospace": "Fon monospasi",
+       "editfont-sansserif": "Fon tansèrif",
+       "editfont-serif": "Fon sèrif",
        "sunday": "Minggu",
        "monday": "Senèn",
        "tuesday": "Selasa",
        "nov": "Nop",
        "dec": "Dès",
        "january-date": "Januari $1",
-       "february-date": "Februari $1",
+       "february-date": "bruari $1",
        "march-date": "Maret $1",
        "april-date": "April $1",
        "may-date": "$1 Mèi",
        "october-date": "Oktober $1",
        "november-date": "$1 Novèmber",
        "december-date": "$1 Dèsèmber",
+       "period-am": "Isuk-Awan",
+       "period-pm": "Soré-Wengi",
        "pagecategories": "{{PLURAL:$1|Kategori|Kategori}}",
        "category_header": "Kaca sajeroning kategori \"$1\"",
        "subcategories": "Subkategori",
        "category-media-header": "Médhia sajeroning kategori \"$1\"",
        "category-empty": "''Kategori iki saiki ora ngandhut artikel utawa média.''",
        "hidden-categories": "{{PLURAL:$1|Kategori kadhelikaké|Kategori kadhelikaké}}",
-       "hidden-category-category": "Kategori sing didelikaké",
+       "hidden-category-category": "Kategori kadhelikan",
        "category-subcat-count": "{{PLURAL:$2|Kategori iki namung nduwé subkategori ing ngisor ikit.|Dituduhaké {{PLURAL:$1|subkategori|$1 subkategori}} sing kalebu ing kategori iki saka total $2.}}",
        "category-subcat-count-limited": "Kategori iki ora duwé {{PLURAL:$1|subkategori|$1 subkategori}} ''berikut''.",
        "category-article-count": "{{PLURAL:$2|Kategori iki namung ndarbèni kaca iki.|Dituduhaké {{PLURAL:$1|kaca|$1 kaca-kaca}} sing kalebu ing kategori iki saka gunggungé $2.}}",
        "category-file-count": "{{PLURAL:$2|Kategori iki mung isi barkas iki.|{{PLURAL:$1|Barkas|$1 barkas}} iki ana sajeroning kategori iki saka $2 gunggungé.}}",
        "category-file-count-limited": "Kategori iki ndarbèni {{PLURAL:$1|berkas|$1 berkas-berkas}} sing kapacak ing ngisor iki.",
        "listingcontinuesabbrev": "samb.",
-       "index-category": "Kaca sing diindhèks",
-       "noindex-category": "Kaca sing ora diindhèks",
-       "broken-file-category": "Kaca kanthi pranala gambar rusak",
+       "index-category": "Kaca kaindhèksan",
+       "noindex-category": "Kaca ora kaindhèksan",
+       "broken-file-category": "Kaca mawa pranala berkas rusak",
        "about": "Bab",
        "article": "Kaca isi",
        "newwindow": "(buka mawa jendhéla anyar)",
        "cancel": "Wurungaké",
        "moredotdotdot": "Liyané...",
-       "morenotlisted": "Isih ana sing ora didaptarne...",
+       "morenotlisted": "Pratélan iki ora jangkep.",
        "mypage": "Kaca",
        "mytalk": "Wicara",
-       "anontalk": "Dhiskusi IP puniki",
+       "anontalk": "Rembug",
        "navigation": "Napigasi",
        "and": "&#32;lan",
        "qbfind": "Golèk",
-       "qbbrowse": "Navigasi",
+       "qbbrowse": "Luru",
        "qbedit": "Besut",
        "qbpageoptions": "Kaca iki",
        "qbmyoptions": "Kaca-kacaku",
        "searcharticle": "Menyang",
        "history": "Sajarah kaca",
        "history_short": "Babad",
-       "updatedmarker": "diowahi wiwit kunjungan pungkasanku",
+       "updatedmarker": "wis inganyaran kawit tekaku sing pungkasan",
        "printableversion": "Cara cithakan",
        "permalink": "Pranala permanèn",
        "print": "Cithak",
        "view": "Deleng",
        "view-foreign": "Deleng nyang $1",
        "edit": "Besut",
+       "edit-local": "Besut panyandra enggon-enggonan",
        "create": "Gawé",
        "create-local": "Tambah panyadra enggon-enggonan",
        "editthispage": "Besut kaca iki",
        "talk": "Rembug",
        "views": "Praèn",
        "toolbox": "Piranti",
-       "userpage": "Ndeleng kaca panganggo",
-       "projectpage": "Ndeleng kaca proyèk",
-       "imagepage": "Deleng kaca berkas",
-       "mediawikipage": "Ndeleng kaca pesen sistem",
-       "templatepage": "Ndeleng kaca cithakan",
-       "viewhelppage": "Ndeleng kaca pitulung",
-       "categorypage": "Ndeleng kaca kategori",
-       "viewtalkpage": "Ndeleng kaca dhiskusi",
-       "otherlanguages": "Jeroning basa liya",
+       "userpage": "Deleng kaca panganggo",
+       "projectpage": "Deleng kaca proyèk",
+       "imagepage": "Deleng kaca barkas",
+       "mediawikipage": "Deleng kaca nawala",
+       "templatepage": "Deleng kaca cithakan",
+       "viewhelppage": "Deleng kaca pitulung",
+       "categorypage": "Deleng kaca kategori",
+       "viewtalkpage": "Deleng parembugan",
+       "otherlanguages": "Ing basa liya",
        "redirectedfrom": "(Dilih saka $1)",
-       "redirectpagesub": "Kaca pangalihan",
+       "redirectpagesub": "Alih kaca",
        "redirectto": "Malih nyang:",
        "lastmodifiedat": "Kaca iki pungkasan diowah kala $1, tabuh $2.",
        "viewcount": "Kaca iki wis tau diaksès cacahé ping {{PLURAL:$1|siji|$1}}.",
-       "protectedpage": "Kaca sing direksa",
+       "protectedpage": "Kaca kareksa",
        "jumpto": "Jujug:",
        "jumptonavigation": "napigasi",
        "jumptosearch": "golèk",
        "view-pool-error": "Nyuwun ngapuro, peladèn lagi sibuk wektu iki.\nKakèhan panganggo sing nyoba mbukak kaca iki.\nEntèni sedhéla sadurungé nyoba ngaksès kaca iki manèh .\n\n$1",
+       "generic-pool-error": "Nyuwun pangapura, paladèn saiki nembé arungan.\nKakèhan panganggo sing péngin ndeleng sumber iki.\nEntèna sadhéla sadurungé sampéyan nekani sumber iki manèh.",
        "pool-timeout": "Kelangkung wekdal nengga kunci",
        "pool-queuefull": "Kempalan antrian kebak",
        "pool-errorunknown": "Kalepata ingkang mboten dipun mangertosi",
+       "poolcounter-usage-error": "Cacad panganggo: $1",
        "aboutsite": "Bab {{SITENAME}}",
        "aboutpage": "Project:Bab",
        "copyright": "Kabèh isi kasedyakaké miturut $1.",
        "disclaimers": "Sélakan",
        "disclaimerpage": "Project:Sélakan umum",
        "edithelp": "Pitulung besut",
+       "helppage-top-gethelp": "Pitulung",
        "mainpage": "Kaca Pokok",
        "mainpage-description": "Kaca pokok",
        "policy-url": "Project:Kabijakan",
        "badaccess-groups": "Pratingkah panjenengan diwatesi tumrap panganggo ing {{PLURAL:$2|klompoké|klompoké}}: $1.",
        "versionrequired": "Dibutuhaké MediaWiki vèrsi $1",
        "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]",
-       "ok": "OK",
+       "ok": "O",
        "retrievedfrom": "Dijupuk saka: \"$1\"",
        "youhavenewmessages": "Panjenengan kagungan $1 ($2).",
        "youhavenewmessagesfromusers": "Sampéyan nduwé $1 saka  {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).",
        "viewsourcelink": "deleng sumber",
        "editsectionhint": "Besut pérangan: $1",
        "toc": "Isi",
-       "showtoc": "tuduhna",
-       "hidetoc": "delikna",
-       "collapsible-collapse": "Singidaken",
-       "collapsible-expand": "Tuduhna",
+       "showtoc": "tuduhaké",
+       "hidetoc": "dhelikaké",
+       "collapsible-collapse": "Neb",
+       "collapsible-expand": "Wenga",
+       "confirmable-confirm": "{{GENDER:$1|Sampéyan}} yakin?",
+       "confirmable-yes": "Iya",
+       "confirmable-no": "Ora",
        "thisisdeleted": "Mirsani utawa mbalèkaké $1?",
-       "viewdeleted": "Mirsani $1?",
+       "viewdeleted": "Deleng $1?",
        "restorelink": "$1 {{PLURAL:$1|suntingan|suntingan}} sing wis kabusak",
        "feedlinks": "Asupan:",
        "feed-invalid": "Tipe permintaan asupan ora bener.",
        "sort-ascending": "Urutaké munggah",
        "nstab-main": "Kaca",
        "nstab-user": "Kaca panganggo",
-       "nstab-media": "Media",
+       "nstab-media": "Kaca médhia",
        "nstab-special": "Kaca mirunggan",
        "nstab-project": "Kaca proyèk",
        "nstab-image": "Barkas",
-       "nstab-mediawiki": "Pariwara",
+       "nstab-mediawiki": "Nawala",
        "nstab-template": "Cithakan",
-       "nstab-help": "Pitulung",
+       "nstab-help": "Kaca pitulung",
        "nstab-category": "Kategori",
        "mainpage-nstab": "Kaca pokok",
-       "nosuchaction": "Ora ana pratingkah kaya ngono",
+       "nosuchaction": "Ora ana lelakon mangkono",
        "nosuchactiontext": "Pratingkah sing dirinci déning URL ora sah.\nPanjenengan manawa salah ketik nalika ngisi URL, utawa salah ngisi pranala.\nIki manawa uga nuduhaké anané kesalahan ing piranti alus sing dipigunakaké déning {{SITENAME}}.",
-       "nosuchspecialpage": "Ora ana kaca astaméwa kaya ngono",
+       "nosuchspecialpage": "Ora ana kaca mirunggan mangkono",
        "nospecialpagetext": "Panjenengan nyuwun kaca astaméwa sing ora sah. Daftar kaca astaméwa sing sah bisa dipirsani ing [[Special:SpecialPages|daftar kaca astaméwa]].",
-       "error": "Kasalahan",
-       "databaseerror": "Kasalahan database",
+       "error": "Cacad",
+       "databaseerror": "Cacad umpak data",
        "databaseerror-text": "Ana kerusakan ing basis data (query error).\n\nMungkin ana masalah ing software-e.",
        "databaseerror-textcl": "Ana kerusakan ing basis data (query error).",
        "databaseerror-query": "Query: $1",
        "databaseerror-function": "Function: $1",
-       "databaseerror-error": "Error: $1",
+       "databaseerror-error": "Cacad: $1",
        "laggedslavemode": "Pènget: Kaca iki mbokmenawa isiné dudu pangowahan pungkasan.",
-       "readonly": "Database dikunci",
+       "readonly": "Umpak data kagembok",
        "enterlockreason": "Lebokna alesan panguncèn, kalebu uga prakiran kapan kunci bakal dibuka",
        "readonlytext": "Database lagi dikunci marang panampan anyar. Pangurus sing ngunci mènèhi katrangan kaya mangkéné: <p>$1",
        "missing-article": "Basis data ora bisa nemokaké tèks kaca sing kuduné ana, yaiku \"$1\" $2.\nBab iki bisasané disebabaké déning pranala daluwarsa menyang revisi sadurungé kaca sing wis dibusak.\nYèn dudu iki panyebabé, panjenengan manawa bisa nemokaké kasalahan (''bug'') jroning piranti alus (''software''). Mangga dilapuraké bab iki menyang [[Special:ListUsers/sysop|administrator]], kanthi nyebutaké alamat URL sing dituju",
-       "missingarticle-rev": "(révisi#: $1)",
+       "missingarticle-rev": "(owahan#: $1)",
        "missingarticle-diff": "(Béda: $1, $2)",
        "readonly_lag": "Database wis dikunci mawa otomatis sawetara database sékundhèr lagi nglakoni sinkronisasi mawa database utama",
-       "internalerror": "Kasalahan internal",
-       "internalerror_info": "Kaluputan internal: $1",
+       "internalerror": "Cacad njero",
+       "internalerror_info": "Cacad njero: $1",
        "filecopyerror": "Ora bisa nulad berkas \"$1\" menyang \"$2\".",
        "filerenameerror": "Ora bisa ngowahi saka \"$1\" dadi \"$2\".",
        "filedeleteerror": "Ora bisa mbusak berkas \"$1\".",
        "exception-nologin-text-manual": "Tulung $1 kanggo ngakses kaca utawa kelakon iki.",
        "virus-badscanner": "Kasalahan konfigurasi: pamindai virus ora dikenal: ''$1''",
        "virus-scanfailed": "''Pemindaian'' utawa ''scan'' gagal (kode $1)",
-       "virus-unknownscanner": "Antivirus ora ditepungi:",
+       "virus-unknownscanner": "antivirus buhbuhan:",
        "logouttext": "'''Sampéyan wis metu log'''\n\nCathet yèn sapérangan kaca mungkin isih nampilaké kayata sampéyan isih mlebu log, kuwi bisa ilang yèn sampéyan ngresiki ''cache'' pramban sampéyan.",
+       "cannotlogoutnow-title": "Ora bisa metu saiki",
+       "cannotlogoutnow-text": "Metu ora mungkin menawa nganggo $1.",
        "welcomeuser": "Sugeng Rawuh, $1!",
        "welcomecreation-msg": "Akun panjenengan wis kacipta. Aja lali nata konfigurasi [[Special:Preferences|preferensi {{SITENAME}}]] panjenengan.",
-       "yourname": "Asma pangangeman",
+       "yourname": "Jeneng panganggo:",
        "userlogin-yourname": "Jeneng panganggo",
        "userlogin-yourname-ph": "Isi jeneng panganggo Sampéyan",
-       "createacct-another-username-ph": "Lebokna jeneng panganggo:",
-       "yourpassword": "Tembung sandhi:",
+       "createacct-another-username-ph": "Isi jeneng panganggo",
+       "yourpassword": "Tembung wadi:",
        "userlogin-yourpassword": "Tembung wadi",
        "userlogin-yourpassword-ph": "Lebokaké tembung wadiné sampéyan",
        "createacct-yourpassword-ph": "Lebokaké tembung wadi",
-       "yourpasswordagain": "Balènana tembung sandhi",
+       "yourpasswordagain": "Tik manèh tembung wadiné:",
        "createacct-yourpasswordagain": "Netepaké tembung wadi",
        "createacct-yourpasswordagain-ph": "Lebokaké manèh tembung wadiné",
        "remembermypassword": "Émut tembung sandi kula (salebeting $1 {{PLURAL:$1|dinten|dinten}})",
        "userlogin-remembermypassword": "Gawé amrih aku panggah kalebu",
        "userlogin-signwithsecure": "Nganggo koneksi aman",
+       "cannotloginnow-title": "Ora bisa mlebu saiki",
+       "cannotloginnow-text": "Mlebu ora mungkin menawa nganggo $1.",
        "yourdomainname": "Dhomain panjenengan",
        "password-change-forbidden": "Sampéyan ora bisa ngganti tembung sandhi nèng wiki iki.",
        "externaldberror": "Ana kasalahan otèntikasi basis dhata èksternal utawa panjenengan ora pareng nglakoni pemutakhiran marang akun èksternal panjenengan.",
        "login": "Mlebu",
        "nav-login-createaccount": "Log mlebu / nggawé rékening (akun)",
        "userlogin": "Mlebu log / gawé rékening (akun)",
-       "userloginnocreate": "Mlebu log",
-       "logout": "Oncat",
-       "userlogout": "Metu log",
-       "notloggedin": "Durung mlebu log",
+       "userloginnocreate": "Mlebu",
+       "logout": "Metu",
+       "userlogout": "Metu",
+       "notloggedin": "Durung kalebu",
        "userlogin-noaccount": "Durung duwé akun?",
        "userlogin-joinproject": "Mèlua {{SITENAME}}",
        "nologin": "Durung kagungan asma panganggo? '''$1'''.",
-       "nologinlink": "Ndaftaraké akun anyar",
+       "nologinlink": "Gawé akun",
        "createaccount": "Gawé akun",
-       "gotaccount": "Wis kagungan akun? '''$1'''.",
+       "gotaccount": "Wis duwé akun? $1.",
        "gotaccountlink": "Mlebu",
        "userlogin-resetlink": "Lali rincian mlebu log Sampéyan?",
        "userlogin-resetpassword-link": "Lali tembung wadiné sampéyan?",
+       "userlogin-helplink2": "Tulung sarana mlebu",
        "userlogin-loggedin": "Sampeyan sampun mlebet log dadi {{GENDER:$1|$1}}.\nGunakna formulir ing ngisor iki kanggo mlebet log dadi panganggo liyane.",
-       "userlogin-createanother": "Gawé akun anyar",
+       "userlogin-createanother": "Gawé akun liya",
        "createacct-emailrequired": "Alamat layang èlèktronik",
        "createacct-emailoptional": "Alamat layang èlèktronik (manasuka)",
        "createacct-email-ph": "Lebokaké layang èlèktronik sampéyan",
-       "createacct-another-email-ph": "Lebokna alamat layang èlèktronik",
+       "createacct-another-email-ph": "Isi alamat layang èlèktronik",
        "createaccountmail": "Nganggoa sandi sauntara sembarang lan kirimna liwat layang e-mail ing ngisor iki",
-       "createacct-realname": "Jeneng asli (ora kudu)",
+       "createacct-realname": "Jeneng asli (manasuka)",
        "createaccountreason": "Alesan:",
        "createacct-reason": "Alesan",
        "createacct-reason-ph": "Kenapa sampeyan nggawe akun liyane",
        "createacct-submit": "Gawé akun sampéyan",
-       "createacct-another-submit": "Gawé akun anyar",
+       "createacct-another-submit": "Gawé akun",
        "createacct-benefit-heading": "{{SITENAME}} digawé déning wong-wong kaya déné sampéyan.",
        "createacct-benefit-body1": "{{PLURAL:$1|besutan|besutan}}",
        "createacct-benefit-body2": "{{PLURAL:$1|kaca|kaca}}",
        "createacct-benefit-body3": "{{PLURAL:$1|panyumbang|panyumbang}} pungkasan",
        "badretype": "Sandhi panjenengan ora gathuk",
+       "usernameinprogress": "Panggawéning akun tumrap jeneng panganggo iki tembé lumaku.\nEntèni sadhéla.",
        "userexists": "Jeneng panganggo sing dilebokaké lagi dianggo.\nMangga pilih jeneng liya.",
-       "loginerror": "Kasalahan mlebu log",
-       "createacct-error": "Ora isa nggawe akun",
-       "createaccounterror": "Ora bisa nyipta akun: $1",
+       "loginerror": "Cacad nalika mlebu",
+       "createacct-error": "Cacad nalika nggawé akun",
+       "createaccounterror": "Ora bisa gawé akun: $1",
        "nocookiesnew": "Rékening utawa akun panganggo panjenengan wis digawé, nanging panjenengan durung mlebu log. {{SITENAME}} nggunakaké ''cookies'' kanggo  log panganggo. ''Cookies'' ing panjlajah wèb panjengengan dipatèni. Mangga diaktifaké lan mlebu log manèh mawa jeneng panganggo lan tembung sandhi panjenengan.",
        "nocookieslogin": "{{SITENAME}} nggunakaké ''cookies'' kanggo log panganggoné. ''Cookies'' ing panjlajah wèb panjenengan dipatèni. Mangga ngaktifaké manèh lan coba manèh.",
-       "nocookiesfornew": "Akun panganggé boten kadamel, amargi kita boten saged mesthèkaken sumberipun.\nPesthèkaken panjenengan sampun ngaktifaken kuki, lajeng amot malih kaca punika lan cobi malih.",
+       "nocookiesfornew": "Akun panganggo ora digawé amarga sumberé ora bisa dipesthèkaké.\nPesthèkaké sampéyan wis ngurubaké kuki, banjur balèni ngamot kaca iki lan njajal manèh.",
        "noname": "Asma panganggo sing panjenengan pilih ora sah.",
-       "loginsuccesstitle": "Bisa suksès mlebu log",
+       "loginsuccesstitle": "Kasil mlebu",
        "loginsuccess": "'''Panjenengan saiki mlebu ing {{SITENAME}} kanthi asma \"$1\".'''",
        "nosuchuser": "Ora ana panganggo mawa asma \"$1\".\nJeneng panganggo iku mbédakaké kapitalisasi.\nCoba dipriksa manèh pasang aksarané, utawa [[Special:UserLogin/signup|gawé akun anyar]].",
        "nosuchusershort": "Ora ana panganggo mawa asma \"$1\". Coba dipriksa manèh pasang aksarané (éjaané).",
        "nouserspecified": "Panjenengan kudu milih asma panganggo.",
-       "login-userblocked": "Panganggé punika dipunblok. Login boten dipunidinaken",
+       "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
        "wrongpassword": "Tembung sandhi sing dipilih salah. Mangga coba manèh.",
        "wrongpasswordempty": "Panjenengan ora milih tembung sandhi. Mangga dicoba manèh.",
        "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.",
+       "passwordtoolong": "Tembung wadi ora kena munjuli {{PLURAL:$1|1 pralambang|$1 pralambang}}.",
+       "passwordtoopopular": "Tembung wadi sing wis kaprah ora kena dianggo. Mangga pilih tembung wadi liya sing mbédani.",
        "password-name-match": "Tembung sandi panjenengan kudu béda karo jeneng panganggo panjenengan.",
-       "password-login-forbidden": "Pangginaan nami panganggé lan sandi puniki sampun kapenggak.",
-       "mailmypassword": "Kirim tembung sandhi anyar",
+       "password-login-forbidden": "Panganggoning jeneng panganggo lan tembung wadi iki dilarang.",
+       "mailmypassword": "Balèni gawé tembung wadi",
        "passwordremindertitle": "Pèngetan tembung sandhi saka {{SITENAME}}",
        "passwordremindertext": "Ana wong (mbokmanawa panjenengan dhéwé, saka alamat IP $1) nyuwun supaya dikirimi tembung sandhi anyar kanggo {{SITENAME}} ($4). Tembung sandi sawetara kanggo panganggo \"$2\" wis digawé lan saiki \"$3\". Yèn panjenengan pancèn nggayuh iki, mangga énggal mlebu log lan ngganti tembung sandi saiki.\nTembung sandi sawetara mau bakal kadaluwarsa ing {{PLURAL:$5|sadina|$5 dina}}.\nYèn wong liya sing nglakoni panyuwunan iki, utawa panjenengan éling tembung sandi panjenengan, lan ora kepéngin ngowahi, panjenengan ora usah nggubris pesen iki lan bisa tetep nganggo tembung sandi lawas.",
        "noemail": "Ora ana alamat layang e-mail sing kacathet kanggo panganggo \"$1\".",
        "blocked-mailpassword": "Alamat IP panjenengan diblokir saka panyuntingan, mulané panjenengan ora olèh nganggo fungsi pèngetan tembung sandhi kanggo ''mencegah penyalahgunaan''.",
        "eauthentsent": "Sawijining layang élèktronik (e-mail) kanggo ndhedhes (konfirmasi) wis dikirim menyang alamat layang élèktronik sampeyan. \n\nSadhurunge layang élèktronik liyane dikirim menyang akun kuwi, sampeyan kudu melu parentah ing layang kuwi, kanggo mastikne yen alamat layang kuwi bener-bener dhuweke sampeyan.",
        "throttled-mailpassword": "Layang kanggo mbalèkaké tembung sandhi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung sandhi sing bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.",
-       "mailerror": "Kasalahan ing ngirimaké layang e-mail: $1",
+       "mailerror": "Cacad nalika ngirim layang: $1",
        "acct_creation_throttle_hit": "Tamu ing wiki iki kanthi alamat IP sing padha karo panjenengan wis gawé {{PLURAL:$1|1 akun|$1 akun}} ing sadina pungkasan, nganti cacah maksimum sing diidinaké.\nAmarga saka kuwi., tamu kanthi alamat IP iki ora bisa gawé akun manèh kanggo sauntara iki.",
        "emailauthenticated": "Alamat layang élèktronik (e-mail) panjenengan wis didhedhes (dikonfirmasi) ing tanggal $2, jam $3.",
        "emailnotauthenticated": "Alamat layang élèktronik panjenengan durung didhedhes (dikonfirmasi). \n\nSadurungé didhedhes, panjenengan ora bisa nganggo fitur layang élèktronik (e-mail) ing ngisor iki.",
        "invalidemailaddress": "Alamat e-mail iki ora bisa ditampa amarga formaté ora bener. Tulung lebokna alamat mawa format sing bener utawa kosongaké waé isèn kasebut.",
        "cannotchangeemail": "Alamat layang èlèktronik akun ora bisa diganti nèng wiki iki.",
        "emaildisabled": "Situs iki ora bisa ngirim layang èlèktronik.",
-       "accountcreated": "Akun wis kacipta.",
+       "accountcreated": "Akun wis kagawé",
        "accountcreatedtext": "Akun panganggo kanggo  [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|wicara]]) wis digawé.",
        "createaccount-title": "Gawé rékening kanggo {{SITENAME}}",
        "createaccount-text": "Ana wong sing nggawé sawijining akun utawa rékening kanggo alamat e-mail panjenengan ing {{SITENAME}} ($4) mawa jeneng \"$2\" lan tembung sandi \"$3\". Panjenengan disaranaké kanggo mlebu log lan ngganti tembung sandi panjenengan saiki.\n\nPanjenengan bisa nglirwakaké pesen iki yèn akun utawa rékening iki digawé déné sawijining kaluputan.",
        "php-mail-error-unknown": "Kasalahan ora dingertèni nèng piguna mail() PHP.",
        "user-mail-no-addy": "Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.",
        "user-mail-no-body": "Nyoba ngirim layang e-mail, tapi isine kosong.",
-       "changepassword": "Ganti tembung sandi",
+       "changepassword": "Ganti tembung wadi",
        "resetpass_announce": "Panjenengan wis mlebu log mawa kodhe sementara sing dikirim mawa e-mail. Menawa kersa nglanjutaké, panjenengan kudu milih tembung sandhi anyar ing kéné:",
        "resetpass_text": "<!-- Tambahaké teks ing kéné -->",
-       "resetpass_header": "Ganti tembung sandi akun",
-       "oldpassword": "Tembung sandi lawas:",
-       "newpassword": "Tembung sandi anyar:",
-       "retypenew": "Ketik ulang tembung sandi anyar:",
+       "resetpass_header": "Ganti tembung wadining akun",
+       "oldpassword": "Tembung wadi lawas:",
+       "newpassword": "Tembung wadi anyar:",
+       "retypenew": "Tik manèh tembung wadi anyaré:",
        "resetpass_submit": "Nata tembung sandhi lan mlebu log",
        "changepassword-success": "Tembung sandhi panjenengan wis suksès diowahi!",
-       "resetpass_forbidden": "Tembung sandhi ora bisa diganti",
+       "botpasswords": "Tembung wadi bot",
+       "botpasswords-label-appid": "Jeneng bot:",
+       "botpasswords-label-create": "Gawé",
+       "botpasswords-label-update": "Anyari",
+       "botpasswords-label-cancel": "Wurung",
+       "botpasswords-label-delete": "Busak",
+       "botpasswords-label-resetpassword": "Balèni gawé tembung wadi",
+       "resetpass_forbidden": "Tembung wadi ora bisa diganti",
        "resetpass-no-info": "Panjenengan kudu mlebu log kanggo ngaksès kaca iki sacara langsung.",
-       "resetpass-submit-loggedin": "Ganti tembung sandi",
-       "resetpass-submit-cancel": "Batal",
+       "resetpass-submit-loggedin": "Ganti tembung wadi",
+       "resetpass-submit-cancel": "Wurung",
        "resetpass-wrong-oldpass": "Tembung sandi ora sah.\nPanjengen manawa wis kasil ganti tembung sandi utawa nyuwun tembung sandi sauntara sing anyar.",
-       "resetpass-temp-password": "Tembung sandi sauntara:",
+       "resetpass-temp-password": "Tembung wadi sauntara:",
        "resetpass-abort-generic": "Ngowah tembung sandhi diwurungaké déning èkstènsi.",
        "passwordreset": "Balèni setèl tembung sandhi",
        "passwordreset-text-one": "Lengkapana formulir iki kanggo nampa tembung sandhi sementara lewat layang elektronik.",
        "passwordreset-emailtitle": "Rincian akun nèng {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ana uwong (mbok menawa Sampéyan, mawa angka IP $1) njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
        "passwordreset-emailtext-user": "Panganggo $1 seka {{SITENAME}} njaluk ganti tembung sandhiné Sampéyan ana ing {{SITENAME}} ($4). {{PLURAL:$3|Rèkèning|Rèkèning-rèkèning}} ngisor iki magepokan karo padunungané layang èlèktronik iki:\n\n$2\n\n{{PLURAL:$3|Tembung sandhi sawetara iki}} bakal kedaluwarsa ing {{PLURAL:$5|sak dina|$5 dina}}.\nSampéyan kudu mlebu log lan milih siji tembung sandhi anyar saiki. Yèn wong liya sing njaluk iki, utawa yèn Sampéyan jebul wis kèlingan tembung sandhiné sing lawas saéngga ora ana niyat kanggo ngganti, Sampéyan bisa ngejaraké wara-wara iki lan bacutaké nganggo tembung sandhiné lawas Sampéyan.",
-       "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung sandhi sawetara: \n$2",
+       "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung wadi sauntara: \n$2",
        "passwordreset-emailsentemail": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim.",
        "passwordreset-emailsent-capture": "Layang èlèktronik kanggo mbalèkaké tembung sandhi wis dikirim, bisa didelok ngisor iki.",
        "passwordreset-emailerror-capture": "Layang èlèktronik pangèling tembung sandhi wis digawe, yaiku sing ditampilaké nèng ngisor iki, nanging ora kasil dikirim ing {{GENDER:$2|panganggo}}: $1",
        "resettokens-text": "Anda dapat me-reset Token yang memungkinkan akses ke data pribadi tertentu yang terkait dengan akun Anda di sini.\n\nAnda harus melakukannya jika Anda secara tidak sengaja berbagi dengan seseorang atau jika akun Anda telah disusupi.",
        "resettokens-no-tokens": "Ora ana token sing bisa direset.",
        "resettokens-tokens": "Token:",
-       "resettokens-token-label": "$1 (nilai saiki: $2)",
+       "resettokens-token-label": "$1 (biji saiki: $2)",
        "resettokens-watchlist-token": "Token kangge sindikasi web (Atom/RSS) saking [[Special:Watchlist|pangowahan ing daptar pangawasan sampeyan]]",
        "resettokens-done": "Reset token.",
        "resettokens-resetbutton": "Reset token sing dipilih",
        "bold_sample": "Tulisan kandel",
        "bold_tip": "Tulisann kandel",
        "italic_sample": "Tulisan miring",
-       "italic_tip": "Cithak miring",
+       "italic_tip": "Tulisan dhoyong",
        "link_sample": "Sesirah pranala",
        "link_tip": "Pranala njero",
        "extlink_sample": "http://www.example.com sesirahing pranala",
        "minoredit": "Iki besutan cilik",
        "watchthis": "Awasi kaca iki",
        "savearticle": "Simpen kaca",
-       "preview": "Pratayang",
+       "preview": "Prawuryan",
        "showpreview": "Tuduhaké prawuryan",
        "showdiff": "Tuduhaké owahan",
        "anoneditwarning": "<strong>Penget:</strong> Panjenengan boten mlebet log. Alamat IP Panjenengan badhe katingal dening publik manawi Panjenengan ngayahi ewah-ewahan. Manawi Panjenengan  <strong>[$1 mlebet log]</strong> utawai <strong>[$2 damel akun]</strong>, suntingan Panjenengan badhe kaatribusekaken dhumateng  nama pangangge Panjenengan, lan rupi-rupi  kauntungan sanesipun.",
        "missingsummary": "'''Pènget:''' Panjenengan ora nglebokaké ringkesan panyuntingan. Menawa panjenengan mencèt tombol Simpen manèh, suntingan panjenengan bakal kasimpen tanpa ringkesan panyuntingan.",
        "missingcommenttext": "Tulung lebokna komentar ing ngisor iki.",
        "missingcommentheader": "'''Pangéling:''' Sampéyan durung nyadhiyakaké judhul/jejer kanggo tanggepan iki.\nYèn Sampéyan klik \"{{int:savearticle}}\" manèh, suntingan Sampéyan bakal kasimpen tanpa kuwi.",
-       "summary-preview": "Pratayang ringkesan:",
+       "summary-preview": "Prawuryan tingkesan:",
        "subject-preview": "Pratayang subyèk/judhul:",
-       "blockedtitle": "Panganggo diblokir",
+       "blockedtitle": "Panganggo kapalangan",
        "blockedtext": "'''Asma panganggo utawa alamat IP panjenengan diblokir.'''\n\nBlokir iki sing nglakoni $1.\nAlesané ''$2''.\n\n* Diblokir wiwit: $8\n* Kadaluwarsa pemblokiran ing: $6\n* Sing arep diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké prakara iki.\n\nPanjenengan ora bisa nggunakaké fitur 'Kirim layang e-mail panganggo iki' kejaba panjenengan wis nglebokaké alamat e-mail sing sah ing [[Special:Preferences|préferènsi]] panjenengan.\n\nAlamat IP panjenengan iku $3, lan ID pamblokiran iku #$5.\nTulung kabèh informasi ing ndhuwur iki disertakaké ing saben pitakon panjenengan.",
        "autoblockedtext": "Alamat IP panjenangan wis diblokir minangka otomatis amerga dienggo déning panganggo liyané. Pamblokiran dilakoni déning $1 mawa alesan:\n\n:''$2''\n\n* Diblokir wiwit: $8\n* Blokir kadaluwarsa ing: $6\n* Sing dikarepaké diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké perkara iki.\n\nPanjenengan ora bisa nganggo fitur \"kirim e-mail panganggo iki\" kejaba panjenengan wis nglebokaké alamat e-mail sing sah ing [[Special:Preferences|préferènsi]] panjenengan lan panjenengan wis diblokir kanggo nggunakaké.\n\nID pamblokiran panjenengan iku #$5 lan alamat IP panjenengan iku $3. Tulung sertakna informasi ing dhuwur kabèh iki saben ngajokaké pitakonan panjenengan. Matur nuwun.",
        "blockednoreason": "ora ana alesan sing diwènèhaké",
        "whitelistedittext": "Panjenengan kudu $1 supaya bisa nyunting artikel.",
        "confirmedittext": "Panjenengan kudu ndhedhes alamat e-mail dhisik sadurungé pareng nyunting sawijining kaca. Mangga nglebokaké lan validasi alamat e-mail panjenengan sadurungé nglakoni panyuntingan. Alamat e-mail sawisé bisa diowahi liwat [[Special:Preferences|kaca préférènsi]]",
-       "nosuchsectiontitle": "Bagéan ora ditemokaké",
+       "nosuchsectiontitle": "Pérangan ora katemu",
        "nosuchsectiontext": "Panjenengan nyoba nyunting sawijining bagéan sing ora ana.\nBagéan iki manawa wis dipindhah utawa dibusak nalika panjenengan buka.",
-       "loginreqtitle": "Mangga mlebu log",
+       "loginreqtitle": "Kudu mlebu",
        "loginreqlink": "mlebu",
        "loginreqpagetext": "Panjenengan kudu $1 kanggo bisa mirsani kaca liyané.",
-       "accmailtitle": "Tembung sandhi wis dikirim.",
+       "accmailtitle": "Tembung wadi wis kinirim",
        "accmailtext": "Sawijining tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.\n\nTembung sandi kanggo panganggo anyar iki isa diganti ing kaca ''[[Special:ChangePassword|ganti tembung sandi]]'' sawisé mlebu log.",
        "newarticle": "(Anyar)",
        "newarticletext": "Katonané panjenengan ngetutaké pranala artikel sing durung ana.\nManawa kersa manulis artikel iki, manggaa. (Mangga mirsani [$1 Pitulung] kanggo informasi sabanjuré).\nYèn ora sengaja tekan kéné, bisa ngeklik pencètan '''back''' waé ing panjlajah wèb panjenengan.",
        "sitecsspreview": "'''Èling yèn Sampéyan mung ndelok pratayang CSS iki.'''\n'''Iki durung disimpen!'''",
        "sitejspreview": "'''Èling yèn Sampéyan mung ndelok pratayang kodhé JavaScript iki.'''\n'''Iki durung disimpen!'''",
        "userinvalidcssjstitle": "'''Pènget:''' Kulit \"$1\" ora ditemokaké. Muga dipèngeti yèn kaca .css lan .js nggunakaké huruf cilik, conto {{ns:user}}:Foo/vector.css lan dudu {{ns:user}}:Foo/Vector.css.",
-       "updated": "(Dianyari)",
-       "note": "'''Cathetan:'''",
+       "updated": "(Kaanyaran)",
+       "note": "<strong>Cathetan:</strong>",
        "previewnote": "'''Èling yèn Sampéyan mung ndelok pratayang.'''\nOwahan Sampéyan durung kasimpen!",
-       "continue-editing": "Lunga menyang area nyunting",
+       "continue-editing": "Menyang pambesutan",
        "previewconflict": "Pratilik iki nuduhaké tèks ing bagian dhuwur kothak suntingan tèks kayadéné bakal katon yèn panjenengan bakal simpen.",
        "session_fail_preview": "'''Nuwun sèwu, suntingan panjenengan ora bisa diolah amarga dhata sèsi kabusak.\nCoba kirim dhata manèh. Yèn tetep ora bisa, coba log metua lan mlebu log manèh.''''''Amerga wiki iki marengaké panggunan kodhe HTML mentah, mula pratilik didhelikaké minangka pancegahan marang serangan JavaScript.'''\n'''Menawa iki sawijining usaha panyuntingan sing sah, mangga dicoba manèh.\nYèn isih tetep ora kasil, cobanen metu log lan mlebu manèh.'''",
        "session_fail_preview_html": "'''Nuwun sèwu! Kita ora bisa prosès suntingan panjenengan amerga data sési ilang.'''\n\n''Amerga wiki iki ngidinaké panrapan HTML mentah, pratayang didelikaké minangka penggakan marang serangan Javascript.''\n\n'''Yèn iki sawijining upaya suntingan sing absah, mangga dicoba manèh. Yèn isih tetep ora kasil, cobanen metu log utawa oncat lan mlebua manèh.'''",
        "editing": "Mbesut $1",
        "creating": "Nggawé $1",
        "editingsection": "Mbesut $1 (pérangan)",
-       "editingcomment": "Nyunting $1 (bagéyan anyar)",
-       "editconflict": "Konflik panyuntingan: $1",
+       "editingcomment": "Mbesut $1 (pérangan anyar)",
+       "editconflict": "Cengkah besutan: $1",
        "explainconflict": "Wong liya wis nyunting kaca iki wiwit panjenengan mau nyunting.\nBagian dhuwur tèks iki ngamot tèks kaca vèrsi saiki.\nPangowahan sing panjenengan lakoni dituduhaké ing bagian ngisor tèks.\nPanjenengan namung prelu nggabungaké pangowahan panjenengan karo tèks sing wis ana.\n'''Namung''' tèks ing bagian dhuwur kaca sing bakal kasimpen menawa panjenengan mencèt \"{{int:savearticle}}\".",
-       "yourtext": "Tèks panjenengan",
-       "storedversion": "Versi sing kasimpen",
+       "yourtext": "Tulisan sampéyan",
+       "storedversion": "Owahan kasimpen",
        "nonunicodebrowser": "'''PÈNGET: Panjlajah wèb panjenengan ora ndhukung Unicode, mangga gantènana panjlajah wèb panjenengan sadurungé nyunting artikel.'''",
        "editingold": "'''PÈNGET:''' Panjenengan nyunting revisi lawas sawijining kaca. Yèn versi iki panjenengan simpen, mengko pangowahan-pangowahan sing wis digawé wiwit revisi iki bakal ilang.",
        "yourdiff": "Prabédan",
        "nocreatetext": "Situs iki ngwatesi kemampuan kanggo nggawé kaca anyar. Panjenengan bisa bali lan nyunting kaca sing wis ana, utawa mangga [[Special:UserLogin|mlebua log utawa ndaftar]]",
        "nocreate-loggedin": "Panjenengan ora kagungan idin kanggo nggawé kaca anyar.",
        "sectioneditnotsupported-title": "Panyuntingan bagéyan ora kasengkuyungan",
-       "sectioneditnotsupported-text": "Panyuntingan sapérangan ora disengkuyung ing kaca suntingan iki.",
+       "sectioneditnotsupported-text": "Ora bisa mbesut sapérangan ana ing kaca iki.",
        "permissionserrors": "Palilan ora diolèhaké",
        "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
        "permissionserrorstext-withaction": "Panjenengan ora duwé hak aksès kanggo $2, amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
        "recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:",
        "moveddeleted-notice": "Kaca iki wis dibusak.\nCathetan busakan lan lihlihan kaca ana ing ngisor minangka rujukan.",
-       "log-fulllog": "Pirsani kabèh log",
+       "log-fulllog": "Deleng cathetan wutuh",
        "edit-hook-aborted": "Suntingan dibatalaké déning kait parser\nTanpa ana katrangan.",
        "edit-gone-missing": "Ora bisa nganyari kaca.\nKatoné kaca iki wis dibusak.",
-       "edit-conflict": "Konflik panyuntingan.",
+       "edit-conflict": "Cengkah besutan",
        "edit-no-change": "Suntingan panjenengan dilirwakaké amerga panjenengan ora nglakoni pangowahan apa-apa ing tèks.",
-       "postedit-confirmation-saved": "Pangowahan sampéyan wis disimpen!",
+       "postedit-confirmation-saved": "Besutan sampeyan wis kasimpen.",
        "edit-already-exists": "Ora bisa nggawé kaca anyar.\nAmerga wis ana.",
        "defaultmessagetext": "Tèks layang gawan",
        "content-failed-to-parse": "Gagal menjabarkan konten $2 untuk model $1: $3",
-       "invalid-content-data": "Data konten ora sah",
+       "invalid-content-data": "Data isi ora trap",
        "content-not-allowed-here": "Konten \"$1\" ora oleh ing kaca [[$2]]",
        "editwarning-warning": "Yen sampeyan ninggalake kaca niki, pangowahan sampeyan bakal ilang.\nYen sampeyan wis mlebet log, sampeyan saged mateni peringatan niki lewat preferensi \"Panyuntingan\" sampeyan.",
-       "content-model-wikitext": "teks wiki",
-       "content-model-text": "teks polos",
+       "content-model-wikitext": "tulisan wiki",
+       "content-model-text": "tulisan barès",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "expensive-parserfunction-warning": "Pènget: Kaca iki ngandhut kakèhan panggunan fungsi ''parser'' sing larang.\n\nSajatiné kuduné duwé kurang saka {{PLURAL:$2|panggilan|panggilan}}, saiki ana {{PLURAL:$1|$1 panggilan|$1 panggilan}}.",
        "cantcreateaccounttitle": "Akun ora bisa digawé",
        "cantcreateaccount-text": "Saka alamat IP iki ('''$1''') ora diparengaké nggawé akun utawa rékening. Sing mblokir utawa ora marengaké iku [[User:$3|$3]].\n\nAlesané miturut $3 yaiku ''$2''",
        "cantcreateaccount-range-text": "Nggawe akun saking alamat IP \"$1\", sing termasuk IP sampeyan (<strong>$4</strong>), sampun diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"",
-       "viewpagelogs": "Mirsani log kaca iki",
-       "nohistory": "Ora ana sajarah panyuntingan kanggo kaca iki",
-       "currentrev": "Revisi saiki",
+       "viewpagelogs": "Deleng cathetaning kaca iki",
+       "nohistory": "Babading besutan kaca iki ora ana.",
+       "currentrev": "Owahan anyaran",
        "currentrev-asof": "Owahan wekasan kala $1",
        "revisionasof": "Owahan kala $1",
        "revision-info": "Owahan $1 déning {{GENDER:$6|$2}}$7",
        "page_first": "kapisan",
        "page_last": "pungkasan",
        "histlegend": "Pilihen rong tombol radhio banjur pencèten tombol ''bandhingna'' kanggo mbandhingaké versi. Klik sawijining tanggal kanggo ndeleng versi kaca ing tanggal iku.<br />(skr) = prabédan karo vèrsi saiki, (akir) = prabédan karo vèrsi sadurungé, '''s''' = suntingan sithik, '''b''' = suntingan bot, → = suntingan bagian, ← = ringkesan otomatis",
-       "history-fieldset-title": "Njlajah sajarah vèrsi sadhurungé",
+       "history-fieldset-title": "Luru babad",
        "history-show-deleted": "Namung sing dibusak",
        "histfirst": "suwé dhéwé",
        "histlast": "anyar dhéwé",
-       "historysize": "($1 {{PLURAL:$1|bita|bita}})",
-       "historyempty": "(kosong)",
-       "history-feed-title": "Riwayat revisi",
-       "history-feed-description": "Riwayat revisi kaca iki ing wiki",
+       "historysize": "($1 {{PLURAL:$1|bét|bét}})",
+       "historyempty": "(suwung)",
+       "history-feed-title": "Babad owahan",
+       "history-feed-description": "Babad owahaning kaca iki ing wiki",
        "history-feed-item-nocomment": "$1 ing $2",
        "history-feed-empty": "Kaca sing disuwun ora ditemokaké. Mbokmenawa wis dibusak saka wiki, utawa diwènèhi jeneng anyar. Coba [[Special:Search|golèka ing wiki]] kanggo kaca anyar sing rélevan.",
        "rev-deleted-comment": "(ringkesan suntingan dibusak)",
        "rev-deleted-diff-view": "Sawiji benahan saka prabédan iki wis '''dibusak'''.\nSampéyan isih bisa ndelok prabédan iki; rincian bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambusakan].",
        "rev-suppressed-diff-view": "Sawiji benahan saka prabédan iki wis '''dibrèdèl'''.\nSampéyan isih bisa ndelok prabédan iki; rincian bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambrèdèlan].",
        "rev-delundel": "Owah katonan",
-       "rev-showdeleted": "tuduhna",
+       "rev-showdeleted": "tuduhaké",
        "revisiondelete": "Busak/batal busak revisi",
        "revdelete-nooldid-title": "Target revisi ora ditemokaké",
        "revdelete-nooldid-text": "Panjenengan durung mènèhi target revisi kanggo nglakoni fungsi iki.",
        "revdelete-no-file": "Berkas sing dituju ora ana.",
        "revdelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi sing wis kabusak saka berkas \"<nowiki>$1</nowiki>\" ing $2, jam $3?",
-       "revdelete-show-file-submit": "Ya",
+       "revdelete-show-file-submit": "Iya",
        "logdelete-selected": "{{PLURAL:$1|Log kapilih|Log kapilih}} kanggo:",
        "revdelete-confirm": "Mangga pesthèkaké yèn Sampéyan pancèn kudu nglakoni iki, yèn Sampéyan ngerti akibaté, lan yèn Sampéyan ngakoni iki cocok karo [[{{MediaWiki:Policy-url}}|kawicakan]].",
        "revdelete-suppress-text": "Pandhelikan révisi '''mung''' bisa dipigunakaké kanggo kasus ing ngisor:\n* Informasi sing kagolong pitnah\n* Informasi pribadi sing kurang pantes\n*: ''alamat omah lan nomer telepon, nomer kartu idhèntitas, lsp..''",
        "revdelete-legend": "Atur watesan:",
-       "revdelete-hide-text": "Tèks revisi",
-       "revdelete-hide-image": "Dhelikna isi berkas",
+       "revdelete-hide-text": "Tulisan owahan",
+       "revdelete-hide-image": "Dhelikaké isi barkas",
        "revdelete-hide-name": "Dhelikna tindhakan lan targèt",
-       "revdelete-hide-comment": "Ringkesan suntingan",
-       "revdelete-hide-user": "Jeneng panganggo/alamat IP",
+       "revdelete-hide-comment": "Tingkesan besutan",
+       "revdelete-hide-user": "Alamat IPné/jeneng panganggoné sing mbesut",
        "revdelete-hide-restricted": "Uga dhelikna data saka pangurus lan panganggo liyané",
-       "revdelete-radio-same": "(Aja diowahi)",
-       "revdelete-radio-set": "Kadhelikake",
-       "revdelete-radio-unset": "Kethok",
+       "revdelete-radio-same": "(aja diowah)",
+       "revdelete-radio-set": "Kadhelikan",
+       "revdelete-radio-unset": "Katon",
        "revdelete-suppress": "Uga dhelikan saka pangurus",
        "revdelete-unsuppress": "Busak watesan ing revisi sing dibalèkaké",
        "revdelete-log": "Alesan:",
        "logdelete-success": "Aturan pandhelikan tindhakan bisa kasil ditrapaké.",
        "logdelete-failure": "'''Aturan pandhelikan ora bisa disèt:'''\n$1",
        "revdel-restore": "Ngowahi visiblitas (pangatonan)",
-       "pagehist": "Sajarah kaca",
-       "deletedhist": "Sajarah sing dibusak",
+       "pagehist": "Babading kaca",
+       "deletedhist": "Babad kabusakan",
        "revdelete-hide-current": "Gagal ndhelikaké révisi tanggal $2, $1: iki arupa révisi paling anyar.\nRévisi iki ora bisa didhelikaké.",
        "revdelete-show-no-access": "Gagal nampilaké révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.",
        "revdelete-modify-no-access": "Gagal ngowahi révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.",
        "revdelete-otherreason": "Alesan liya/tambahan:",
        "revdelete-reasonotherlist": "Alesan liya",
        "revdelete-edit-reasonlist": "Sunting alesan pambusakan",
-       "revdelete-offender": "Revisi penulis:",
+       "revdelete-offender": "Juru pangriptaning owahan:",
        "suppressionlog": "Log barang-barang sing didelikaké (''oversight'')",
        "suppressionlogtext": "Ngisor iki daptar apa-apa waé sing wis dibusak lan diblokir kalebu kontèn sing didhelikaké saka para pangurus.\nDelok [[Special:BlockList|daptar blokiran]] sing isiné daptar apa-apa waé sing lagi dilarang lan diblokir.",
-       "mergehistory": "Gabung sejarah kaca",
+       "mergehistory": "Gabung babad kaca",
        "mergehistory-header": "Ing kaca iki panjenengan bisa nggabung révisi-révisi sajarah saka sawijining kaca sumber menyang kaca anyar.\nPastèkna yèn owah-owahan iki bakal netepaké kasinambungan sajarah kaca.",
        "mergehistory-box": "Gabungna revisi-revisi saka rong kaca:",
        "mergehistory-from": "Kaca sumber:",
-       "mergehistory-into": "Kaca tujuan:",
+       "mergehistory-into": "Kaca paran:",
        "mergehistory-list": "Sejarah suntingan bisa digabung",
        "mergehistory-merge": "Révisi-révisi sing kapacak ing ngisor iki saka [[:$1]] bisa digabungaké menyang [[:$2]].\nGunakna tombol radio kanggo nggabungaké révisi-révisi sing digawé sadurungé wektu tartamtu. Gatèkna, menawa nganggo pranala navigasi bakal ngesèt ulang kolom iki.",
        "mergehistory-go": "Tuduhna suntingan-suntingan sing bisa digabung",
-       "mergehistory-submit": "Gabung revisi",
+       "mergehistory-submit": "Gabung owahan",
        "mergehistory-empty": "Ora ana revisi sing bisa digabung.",
        "mergehistory-done": "$3 {{PLURAL:$1|révisi|révisi}} saka $1 bisa suksès digabung menyang [[:$2]].",
        "mergehistory-fail": "Ora bisa nggabung sajarah, coba dipriksa manèh kacané lan paramèter wektuné.",
        "mergehistory-no-source": "Kaca sumber $1 ora ana.",
-       "mergehistory-no-destination": "Kaca tujuan $1 ora ana.",
+       "mergehistory-no-destination": "Kaca paran $1 ora ana.",
        "mergehistory-invalid-source": "Irah-irahan kaca sumber kudu irah-irahan utawa judhul sing bener.",
        "mergehistory-invalid-destination": "Irah-irahan kaca tujuan kudu irah-irahan utawa judhul sing bener.",
        "mergehistory-autocomment": "Nggabung [[:$1]] menyang [[:$2]]",
        "search-error": "Ana kasalahan wektu nggoleki: $1",
        "preferences": "Preferensi (pilihan)",
        "mypreferences": "Préferènsi",
-       "prefs-edits": "Gunggungé suntingan:",
+       "prefs-edits": "Gunggung besutan:",
        "prefsnologintext2": "Tulung $1 kanggo ngganti preferensi sampeyan.",
        "prefs-skin": "Kulit",
        "skin-preview": "Pratilik",
        "prefs-rendering": "Tampilan",
        "saveprefs": "Simpen",
        "restoreprefs": "Balèkna kabèh setèlan baku",
-       "prefs-editing": "Panyuntingan",
+       "prefs-editing": "Pambesut",
        "rows": "Larikan:",
        "columns": "Kolom:",
        "searchresultshead": "Panggolèkan",
        "stub-threshold-disabled": "Dipatèni",
        "recentchangesdays": "Cacahé dina sing dituduhaké ing owah-owahan pungkasan:",
        "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|dina|dina}})",
-       "recentchangescount": "Cacahé suntingan sing ditampilaké:",
+       "recentchangescount": "Cacahing besutan sing dituduhaké kanthi baku:",
        "prefs-help-recentchangescount": "Iki klebu owah-owahan pungkasan, kaca sajarah, lan log.",
        "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke web feed dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan.\n[[Special:ResetTokens|Klik di sini jika Anda perlu menyetel ulang]].",
        "savedprefs": "Préferènsi Panjenengan wis disimpen",
        "prefs-dateformat": "Format tanggal",
        "prefs-timeoffset": "Format wektu",
        "prefs-advancedediting": "Pilihan sabanjuré",
-       "prefs-editor": "Panyunting",
+       "prefs-editor": "Wong besut",
        "prefs-preview": "Pratayang",
        "prefs-advancedrc": "Opsi lanjutan",
        "prefs-advancedrendering": "Opsi lanjutan",
        "grouppage-bureaucrat": "{{ns:project}}:Birokrat",
        "grouppage-suppress": "{{ns:project}}:Oversight",
        "right-read": "Maca kaca-kaca",
-       "right-edit": "Nyunting kaca-kaca",
+       "right-edit": "Besut kaca",
        "right-createpage": "Nggawé kaca (sing dudu kaca dhiskusi)",
        "right-createtalk": "Nggawé kaca dhiskusi",
        "right-createaccount": "Nggawé rékening (akun) panganggo anyar",
-       "right-minoredit": "Tandhanan suntingan minangka minor",
+       "right-minoredit": "Tandhani minangka besutan cilik",
        "right-move": "Pindhahna kaca",
        "right-move-subpages": "Pindhahaké kaca lan kabèh anak-kacané",
-       "right-move-rootuserpages": "Pindhahaké kaca utama panganggo",
+       "right-move-rootuserpages": "Ngalih kaca panganggo oyod",
        "right-movefile": "Mindhah berkas",
        "right-suppressredirect": "Aja nggawé pangalihan saka kaca sing lawas yèn mindhah sawijining kaca",
        "right-upload": "Ngunggahaké berkas-berkas",
        "right-patrolmarks": "Ndeleng tandha-tandha patroli owah-owahan anyar",
        "right-unwatchedpages": "Tuduhna daftar kaca-kaca sing ora diawasi",
        "right-mergehistory": "Gabungna sajarah kaca-kaca",
-       "right-userrights": "Sunting kabèh hak-hak panganggo",
+       "right-userrights": "Besut kabèh hak panganggo",
        "right-userrights-interwiki": "Sunting hak-hak para panganggo ing situs-situs wiki liya",
        "right-siteadmin": "Kunci lan buka kunci basis data",
        "right-override-export-depth": "Èkspor kaca klebu kaca kagandhèng nganti tataran/''depth'' 5",
        "right-sendemail": "Ngirim layang listrik (e-mail) menyang panganggo liya",
        "right-passwordreset": "Delok layang èlèktronik panyetèlulangan tembung sandhi",
-       "newuserlogpage": "Log panganggo anyar",
+       "newuserlogpage": "Cathetan panganggo anyar",
        "newuserlogpagetext": "Ing ngisor iki kapacak log pandaftaran panganggo anyar.",
        "rightslog": "Log pangowahan hak aksès",
        "rightslogtext": "Ing ngisor iki kapacak log pangowahan marang hak-hak panganggo.",
        "action-read": "maca kaca iki",
-       "action-edit": "sunting kaca iki",
+       "action-edit": "besut kaca iki",
        "action-createpage": "nggawé kaca-kaca",
        "action-createtalk": "gawé kaca wicara anyar",
        "action-createaccount": "gawé akun panganggo iki",
-       "action-minoredit": "nandhani minangka suntingan sithik",
+       "action-minoredit": "nandhani minangka besutan cilik",
        "action-move": "alihna kaca iki",
        "action-move-subpages": "mindahaké kaca iki, lan kabèh anak-kacané",
-       "action-move-rootuserpages": "mindhahaké kaca utama panganggo",
+       "action-move-rootuserpages": "ngalih kaca panganggo oyod",
        "action-movefile": "pindhahna berkas iki",
        "action-upload": "ngunggahaké berkas iki",
        "action-reupload": "nindhih berkas sing wis ana",
        "action-undelete": "mbatalaké pambusakan kaca iki",
        "action-suppressrevision": "ninjo lan mbalèkaké revisi sing didhelikaké iki",
        "action-suppressionlog": "mirsani log pribadi iki",
-       "action-block": "blok panganggo iki saka panyuntingan",
+       "action-block": "malang panganggo iki mbesut",
        "action-protect": "owahi tataran pangreksan kaca iki",
        "action-rollback": "gelis mbalèkaké suntingané panganggo pungkasan nèng sawijining saca",
        "action-import": "impor kaca iki saka wiki liya",
        "rcshowhideanons": "$1 panganggo anonim",
        "rcshowhideanons-show": "Tuduhaké",
        "rcshowhideanons-hide": "Dhelikaké",
-       "rcshowhidepatr": "$1 suntingan sing dipatroli",
+       "rcshowhidepatr": "$1 besutan awasan",
        "rcshowhidemine": "$1 besutanku",
        "rcshowhidemine-show": "Tuduhaké",
        "rcshowhidemine-hide": "Dhelikaké",
        "randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".",
        "statistics": "Statistik",
        "statistics-header-pages": "Statistik kaca",
-       "statistics-header-edits": "Statistik panyuntingan",
+       "statistics-header-edits": "Pétungan besutan",
        "statistics-header-users": "Statistik panganggo",
        "statistics-header-hooks": "Statistik liya",
        "statistics-articles": "Kaca-kaca isi",
        "double-redirect-fixer": "Révisi pangalihan",
        "brokenredirects": "Pangalihan rusak",
        "brokenredirectstext": "Pengalihan ing ngisor iki tumuju menyang kaca sing ora ana:",
-       "brokenredirects-edit": "sunting",
+       "brokenredirects-edit": "besut",
        "brokenredirects-delete": "busak",
        "withoutinterwiki": "Kaca tanpa pranala antarbasa",
        "withoutinterwiki-summary": "Kaca-kaca iki ora nduwé pranala menyang vèrsi ing  basa liyané:",
        "minimum-size": "Ukuran minimum",
        "maximum-size": "Ukuran maksimum:",
        "pagesize": "(bita)",
-       "restriction-edit": "Panyuntingan",
+       "restriction-edit": "Besut",
        "restriction-move": "Pamindhahan",
        "restriction-create": "Gawé",
        "restriction-upload": "Unggah",
        "tooltip-ca-talk": "Parembuganing kaca isi",
        "tooltip-ca-edit": "Besut kaca iki",
        "tooltip-ca-addsection": "Miwiti pérangan anyar",
-       "tooltip-ca-viewsource": "Kaca iki direksa. Panjenengan namung bisa mirsani sumberé.",
+       "tooltip-ca-viewsource": "Kaca iki direksa. \nSampéyan bisa ndeleng sumberé",
        "tooltip-ca-history": "Owahaning kaca iki sadurungé",
        "tooltip-ca-protect": "Reksa kaca iki",
        "tooltip-ca-unprotect": "Ganti panjagan kaca iki",
        "tooltip-p-logo": "Menyang kaca pokok",
        "tooltip-n-mainpage": "Menyang kaca pokok",
        "tooltip-n-mainpage-description": "Menyang kaca pokok",
-       "tooltip-n-portal": "Bab proyèk, apa sing bisa Sampéyan garap, ana ing endi saprelu golèk apa-apa",
+       "tooltip-n-portal": "Bab proyèk, apa sing bisa sampéyan garap, ana ing endi saprelu golèk apa-apa",
        "tooltip-n-currentevents": "Temokaké katerangan latar wuri saka kadadéan saiki",
        "tooltip-n-recentchanges": "Pratélaning owah-owahan pungkasan sajeroning wiki.",
        "tooltip-n-randompage": "Mot waton kaca",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|pengalihan|pengalihan}}; $3 {{PLURAL:$3|non-pengalihan|non-pengalihan}})",
        "pageinfo-firstuser": "Pembuat halaman",
        "pageinfo-firsttime": "Tanggal pembuatan halaman",
-       "pageinfo-lastuser": "Penyunting terakhir",
+       "pageinfo-lastuser": "Sing mbesut pungkasan",
        "pageinfo-lasttime": "Tanggal suntingan pungkasan",
        "pageinfo-edits": "Cacahé kabèh suntingan",
        "pageinfo-authors": "Cacahé kabèh panganggit sing bédha-bédha.",
        "filedelete-current-unregistered": "Berkas sing dispésifikasi \"$1\" ora ana sajroning basis data.",
        "filedelete-archive-read-only": "Dirèktori arsip \"$1\" ora bisa ditulis déning server wèb.",
        "previousdiff": "← Besutan sadurungé",
-       "nextdiff": "Panyuntingan sing luwih anyar →",
+       "nextdiff": "Besutan luwih anyar →",
        "mediawarning": "'''Pèngetan''': Jinis berkas iki mungkin isiné kodhé mbebayani.\nYèn dilakokaké, sistem Sampéyan bisa kaserang.",
        "imagemaxsize": "Wates ukuran gambar:<br />''(kanggo kaca dhèskripsi berkas)''",
        "thumbsize": "Ukuran gambar cilik (thumbnail):",
        "exif-usercomment": "Komentar panganggo",
        "exif-relatedsoundfile": "Berkas audio sing kagandhèng",
        "exif-datetimeoriginal": "Surya lan tabuh panggawéning data",
-       "exif-datetimedigitized": "Surya lan tabuh dhigitalisasi",
+       "exif-datetimedigitized": "Tanggal lan tabuh dhigitalisasi",
        "exif-subsectime": "Subdetik DateTime",
        "exif-subsectimeoriginal": "Subdetik DateTimeOriginal",
        "exif-subsectimedigitized": "Subdetik DateTimeDigitized",
        "exif-copyrighted-true": "Mawa hak cipta",
        "exif-copyrighted-false": "Status hak cipta durung ditemtokake",
        "exif-unknowndate": "Tanggal ora dingertèni",
-       "exif-orientation-1": "Normal",
+       "exif-orientation-1": "Sedhengan",
        "exif-orientation-2": "Baliken sacara horisontal",
        "exif-orientation-3": "Diputer 180°",
        "exif-orientation-4": "Baliken sacara vèrtikal",
        "fileduplicatesearch-noresults": "Ora ana berkas mawa jeneng \"$1\" ditemokaké.",
        "specialpages": "Kaca mirunggan",
        "specialpages-note-top": "Katrangan",
-       "specialpages-note": "* Kaca astamiwa biasa.\n* <span class=\"mw-specialpagerestricted\">Kaca astamiwa kawatesan.</span>",
+       "specialpages-note": "* Kaca mirunggan sedhengan.\n* <span class=\"mw-specialpagerestricted\">Kaca mirunggan winatesan.</span>",
        "specialpages-group-maintenance": "Lapuran pangopènan",
        "specialpages-group-other": "Kaca-kaca astaméwa liyané",
        "specialpages-group-login": "Mlebu log / nggawé akun",
        "tags-hitcount-header": "Owah-owahan mawa tag",
        "tags-active-yes": "Iya",
        "tags-active-no": "Ora",
-       "tags-edit": "sunting",
+       "tags-edit": "besut",
        "tags-hitcount": "$1 {{PLURAL:$1|pangowahan|pangowahan}}",
        "comparepages": "Bandhingna kaca",
        "compare-page1": "Kaca 1",
        "logentry-rights-autopromote": "$1 otomatis {{GENDER:$2|dipromosikne}} saka $4 nèng $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngunggah}} $3",
        "rightsnone": "(ora ana)",
-       "revdelete-summary": "ringkesan suntingan",
+       "revdelete-summary": "tingkesan besutan",
        "feedback-adding": "Nambahaké lebon saran nèng kaca...",
        "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
        "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
index f4ab9e7..b08b7bc 100644 (file)
        "uploadstash-badtoken": "이 동작을 수행하는 데 실패했습니다. 편집 토큰이 만료되었을 가능성이 있습니다. 다시 시도해주세요.",
        "uploadstash-errclear": "파일을 지우는 데 실패했습니다.",
        "uploadstash-refresh": "파일 목록을 새로 고침",
+       "uploadstash-thumbnail": "섬네일 보기",
        "invalid-chunk-offset": "청크 오프셋이 잘못되었습니다.",
        "img-auth-accessdenied": "접근이 거부됨",
        "img-auth-nopathinfo": "PATH_INFO를 잃었습니다.\n서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.\n이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization 을 참조하십시오.",
        "sessionprovider-generic": "$1 세션",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "쿠키 기반 세션",
        "sessionprovider-nocookies": "브라우저의 쿠키 기능이 꺼져 있는지 확인하십시오. 쿠키 기능을 켠 다음 다시 시작해야 합니다.",
-       "randomrootpage": "임의 루트 페이지"
+       "randomrootpage": "임의 루트 페이지",
+       "log-action-filter-block": "차단의 유형:"
 }
index e913d6f..662c174 100644 (file)
        "viewdeletedpage": "Geläscht Säite weisen",
        "undeletepagetext": "Dës {{PLURAL:$1|Säit gouf |Säite goufe}} geläscht mä sinn nach ëmmer am Archiv a kënne vun Administrateure restauréiert ginn. D'Archiv gëtt periodesch eidel gemaach.",
        "undelete-fieldset-title": "Versioune restauréieren",
-       "undeleteextrahelp": "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casë mat engem Krop a klickt op '''''{{int:undeletebtn}}'''''.\nFir nëmmen eng bestëmmte Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.",
+       "undeleteextrahelp": "Fir d'Säit komplett mat alle Versiounen ze restauréieren, markéiert keng vun den eenzelne Casë a klickt op '''''{{int:undeletebtn}}'''''.\nFir nëmmen eng bestëmmt Versioun vun der Säit ze restauréieren, markéiert d'Case vun der gewënschter Versioun mat engem Krop, a klickt duerno op '''''{{int:undeletebtn}}'''''.",
        "undeleterevisions": "{{PLURAL:$1|1 Versioun|$1 Versioune}} geläscht",
        "undeletehistory": "Wann Dir dës Säit restauréiert, ginn och all déi al Versioune restauréiert.\nWann zanter dem Läschen eng nei Säit mat dem selwechten Numm ugeluecht gouf, ginn déi restauréiert Versioune chronologesch an den Historique agedroen.",
        "undeleterevdel": "D'Restauratioun gëtt net gemaach wann dat dozou féiert datt déi aktuell Versioun vun der Säit oder vum Fichier deelweis geläscht gëtt.\nA sou Fäll däerf déi neist Versioun net markéiert ginn oder déi neist geläscht Versioun muss nees ugewise ginn.",
        "version-poweredby-others": "anerer",
        "version-poweredby-translators": "translatewiki.net Iwwersetzer",
        "version-credits-summary": "Mir soen dëse Persoune 'Merci' fir hir Mataarbecht u [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki ass fräi Software; Dir kënnt se weiderginn an/oder s'änneren ënner de Bedingunge vun der GNU-General Public License sou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.\n\nMediaWiki gëtt verdeelt an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE; ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPL General Public License fir méi Informatiounen.\n\nDir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public License] mat dësem Programm kritt hunn; wann net da schreift der Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oder [//www.gnu.org/licenses/old-licenses/gpl-2.0.html liest se online].",
+       "version-license-info": "MediaWiki ass eng fräi Software. Dir kënnt se weiderginn an/oder ënner de Bedingungen vun der GNU-General Public License, ànneren, sou wéi se vun der Free Softare Foundation publizéiert ass; entweder ënner der Versioun 2 vun der Lizenz, oder (no Ärem Choix) enger spéiderer Versioun.\n\nMediaWiki gëtt verdeelt, an der Hoffnung datt se nëtzlech ass, awer OUNI IERGENDENG GARANTIE an ouni eng implizit Garantie vu Commercialisatioun oder Eegnung fir e bestëmmte Gebrauch. Kuckt d'GPU Geral Public License fir méi Informatiounen.\n\nDir misst eng [{{SERVER}}{{SCRIPTPATH}}/COPYING Kopie vun der GNU General Public License] mat dësem Programm kritt hunn. Wann net da schreift der Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA oder [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html liest se online].",
        "version-software": "Installéiert Software",
        "version-software-product": "Produkt",
        "version-software-version": "Versioun",
index 9e47fc4..a0fe11f 100644 (file)
        "nstab-template": "Mudell",
        "nstab-help": "Paġna tal-għajnuna",
        "nstab-category": "Kategorija",
+       "mainpage-nstab": "Il-Paġna prinċipali",
        "nosuchaction": "Ma teżistix din l-azzjoni",
        "nosuchactiontext": "L-azzjoni speċifikata mill-URL mhijiex valida.\nJista' jkun li tkun ktibt ħażin il-URL, jew ġejt imwassal għal ħolqa ħażina.\nDan jista' jindika wkoll bug fis-softwer użat fil-{{SITENAME}}.",
        "nosuchspecialpage": "L-ebda paġna speċjali",
        "newarticle": "(Ġdid)",
        "newarticletext": "Inti segwejt link għal paġna li għadha ma ġietx maħluqa.\nSabiex toħloq il-paġna, ikteb fil-kaxxa li tinsab hawn taħt (ara [$1 paġna tal-għajnuna] għal aktar informazzjoni).\nJekk wasalt hawn biż-żball, agħfas il-buttuna '''lura''' (''back'') fuq il-browser tiegħek.",
        "anontalkpagetext": "----''Din hija l-paġna ta' diskussjoni ta' utent anonimu li għadu ma ħoloqx kont, jew inkella li ma jużahx.\nGħaldaqstant biex nidentifikawh ikollna nużaw l-indirizz tal-IP tiegħu/tagħha.\nL-istess indirizz tal-IP jista' jkun użat minn bosta utenti differenti.\nJekk int utent anonimu u tħoss li qiegħed tirċievi kummenti irrelevanti jew li ma jagħmlux sens, jekk jogħġbok [[Special:UserLogin|idħol fil-kont tiegħek]] jew [[Special:UserLogin/signup|oħloq wieħed]] sabiex tevita li fil-futur tiġi konfuż ma' utenti anonimi oħra.''",
-       "noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nInti tista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} timmodifika din il-paġna]</span>.",
+       "noarticletext": "Bħalissa m'hemm l-ebda test f'din il-paġna.\nTista' [[Special:Search/{{PAGENAME}}|tfittex it-titlu ta' din il-paġna]] f'paġni oħra, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati], jew [{{fullurl:{{FULLPAGENAME}}|action=edit}} toħloq dil-paġna]</span>.",
        "noarticletext-nopermission": "Bħalissa m'hemm l-ebda test f'din il-paġna. Inti tista' [[Special:Search/{{PAGENAME}}|tfittex dan it-titlu tal-paġna]] f'paġni oħra, jew <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tfittex ir-reġistri relatati]</span>, imma m'għandikx permess toħloq dil-paġna.",
        "missing-revision": "Ir-reviżjoni #$1 tal-paġna bl-isem \"{{FULLPAGENAME}}\" ma teżistix.\n\nDan ħafna drabi jiġri minħabba li tkun segwejt ħolqa lejn paġna mħassra, f'kronoloġija li mhix aġġornata.\nId-detallji tista' ssibhom fir-[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} reġistru tat-tħassir].",
        "userpage-userdoesnotexist": "Il-kont tal-utent \"<nowiki>$1</nowiki>\" mhux reġistrat.\nJekk jogħġbok, ara jekk verament tridx toħloq/timodifika din il-paġna.",
        "contributions": "Kontributi tal-{{GENDER:$1|utent}}",
        "contributions-title": "Kontribuzzjonijiet tal-utent għal $1",
        "mycontris": "Kontributi",
+       "anoncontribs": "Kontribuzzjonijiet",
        "contribsub2": "Għal {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "L-utent \"$1\" mhuwiex reġistrat.",
        "nocontribs": "L-Ebda modifiki li jisodisfa l-kriterji tat-tfittxija.",
        "javascripttest": "Testjar tal-JavaScript",
        "javascripttest-pagetext-unknownaction": "Azzjoni \"$1\" mhux magħrufa.",
        "javascripttest-qunit-intro": "Ara d-[$1 dokumentazzjoni dwar it-test] fuq mediawiki.org.",
-       "tooltip-pt-userpage": "Il-paġna tal-utent tiegħek",
+       "tooltip-pt-userpage": "Il-paġna tiegħek ta' utent",
        "tooltip-pt-anonuserpage": "Il-Paġna tal-utent ta' dan l-indirizz tal-IP",
        "tooltip-pt-mytalk": "Il-paġna ta' diskussjoni tiegħek",
        "tooltip-pt-anontalk": "Diskussjoni dwar il-modifiki magħmula minn dan l-indirizz tal-IP",
        "tooltip-pt-logout": "Oħroġ (illogja 'l barra)",
        "tooltip-pt-createaccount": "Nagħtuk parir toħloq kont u tidħol fih; però dan mhux obligatorju.",
        "tooltip-ca-talk": "Diskussjoni dwar il-paġna ta' kontenut",
-       "tooltip-ca-edit": "Tista' timmodifika din il-paġna. Jekk jogħġbok uża l-buttuna tad-dehra proviżorja qabel ma ssalva l-modifiki.",
+       "tooltip-ca-edit": "Immodifika din il-paġna",
        "tooltip-ca-addsection": "Ibda sezzjoni ġdida",
        "tooltip-ca-viewsource": "Din il-paġna hija protetta. Tista' tara s-sors tagħha.",
        "tooltip-ca-history": "Verżjonijiet preċedenti ta' din il-paġna",
        "tooltip-t-recentchangeslinked": "Link għal modifiki riċenti ta' paġni relatati",
        "tooltip-feed-rss": "Feed RSS għal din il-paġna",
        "tooltip-feed-atom": "Feed Atom għal din il-paġna",
-       "tooltip-t-contributions": "Uri l-lista tal-kontribuzzjonijiet ta' dan l-utent",
+       "tooltip-t-contributions": "Lista tal-kontribuzzjonijiet ta' dal-utent",
        "tooltip-t-emailuser": "Ibgħat posta elettronika lil dan l-utent",
        "tooltip-t-info": "Aktar informazzjoni fuq din il-paġna",
        "tooltip-t-upload": "Tella' fajls",
        "tooltip-ca-nstab-main": "Uri l-paġna ta' kontenut",
        "tooltip-ca-nstab-user": "Uri l-paġna tal-utent",
        "tooltip-ca-nstab-media": "Uri l-paġna tal-medja",
-       "tooltip-ca-nstab-special": "Din hija paġna speċjali, ma tistax tagħmel modifiki f'din il-paġna",
+       "tooltip-ca-nstab-special": "Din paġna speċjali, u ma tistax tiġi mmodifikata",
        "tooltip-ca-nstab-project": "Uri l-paġna tal-proġett",
        "tooltip-ca-nstab-image": "Uri l-paġna tal-fajl",
        "tooltip-ca-nstab-mediawiki": "Uri l-messaġġ tas-sistema",
index 9ba8eed..ddaefff 100644 (file)
        "revdelete-unsuppress": "Beperkingen op teruggeplaatste wijzigingen verwijderen",
        "revdelete-log": "Reden:",
        "revdelete-submit": "Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}",
-       "revdelete-success": "Deze zichtbaarheid van de wijziging is bijgewerkt.",
+       "revdelete-success": "Zichtbaarheid van wijziging bijgewerkt.",
        "revdelete-failure": "De zichtbaarheid van de wijziging kon niet bijgewerkt worden:\n$1",
        "logdelete-success": "De zichtbaarheid van de gebeurtenis is ingesteld.",
        "logdelete-failure": "De zichtbaarheid van de logboekregel kon niet ingesteld worden:\n$1",
        "delete-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van dit soort pagina's is met rechten beperkt om het per ongeluk verstoren van de werking van {{SITENAME}} te voorkomen.",
        "delete-warning-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van deze pagina kan de werking van de database van {{SITENAME}} verstoren.\nWees voorzichtig.",
        "deleteprotected": "U kunt deze pagina niet verwijderen omdat hij is beveiligd.",
-       "deleting-backlinks-warning": "'''Waarschuwing:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
+       "deleting-backlinks-warning": "<strong>Waarschuwing:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
        "rollback": "Wijzigingen ongedaan maken",
        "rollbacklink": "terugdraaien",
        "rollbacklinkcount": "{{PLURAL:$1|één bewerking|$1 bewerkingen}} terugdraaien",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sessies gebaseerd op cookies",
        "sessionprovider-nocookies": "Cookies kunnen uitgeschakeld zijn. Zorg ervoor dat u cookies hebt ingeschakeld en probeer het opnieuw.",
        "randomrootpage": "Willekeurige hoofdpagina",
+       "log-action-filter-block": "Soort blokkade:",
+       "log-action-filter-delete": "Soort verwijdering:",
+       "log-action-filter-move": "Soort verplaatsing:",
+       "log-action-filter-patrol": "Soort markering:",
+       "log-action-filter-protect": "Soort beveiliging:",
+       "log-action-filter-all": "Alles",
        "log-action-filter-block-block": "Blokkade",
        "log-action-filter-block-reblock": "Aanpassing van blokkade",
        "log-action-filter-block-unblock": "Opheffing van blokkade",
index daf685e..08995c3 100644 (file)
        "edit-conflict": "Endringskonflikt.",
        "edit-no-change": "Endringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.",
        "postedit-confirmation-created": "Sida vart oppretta.",
+       "postedit-confirmation-restored": "Sida vart attoppretta.",
        "postedit-confirmation-saved": "Endringa di vart lagra.",
        "edit-already-exists": "Kunne ikkje opprette ny side fordi ho alt eksisterer.",
        "defaultmessagetext": "Standard meldingstekst",
index 89c866e..c3e59a1 100644 (file)
        "noemail": "Brak zdefiniowanego adresu e‐mail dla użytkownika „$1”.",
        "noemailcreate": "Musisz podać prawidłowy adres e‐mail",
        "passwordsent": "Nowe hasło zostało wysłane na adres e‐mail użytkownika „$1”.\nPo otrzymaniu go zaloguj się ponownie.",
-       "blocked-mailpassword": "Twój adres IP został zablokowany i nie możesz używać funkcji odzyskiwania hasła z powodu możliwości jej nadużywania.",
+       "blocked-mailpassword": "Edycja z twojego adresu IP jest zablokowana. Aby zapobiec nadużyciom, dla tego adresu IP funkcja odzyskiwania hasła nie jest możliwa.",
        "eauthentsent": "Potwierdzenie zostało wysłane na adres e‐mail.\nZanim jakiekolwiek inne wiadomości zostaną wysłane na ten adres, należy wykonać zawarte w mailu instrukcje. Potwierdzisz w ten sposób, że ten adres e‐mail należy do Ciebie.",
        "throttled-mailpassword": "Przypomnienie hasła zostało już wysłane w ciągu {{PLURAL:$1|ostatniej godziny|ostatnich $1 godzin}}.\nAby zapobiec nadużyciom nadużyć możliwość wysyłania przypomnień została ograniczona do jednego na {{PLURAL:$1|godzinę|$1 godziny|$1 godzin}}.",
        "mailerror": "W trakcie wysyłania wiadomości e‐mail wystąpił błąd: $1",
        "botpasswords-label-delete": "Usuń",
        "botpasswords-label-resetpassword": "Zresetuj hasło",
        "botpasswords-label-grants": "Zastosowane uprawnienia:",
+       "botpasswords-label-restrictions": "Ograniczenia użytkowania:",
        "botpasswords-label-grants-column": "Przyznane",
        "botpasswords-bad-appid": "Nazwa bota \"$1\" nie jest prawidłowa.",
        "botpasswords-created-title": "Hasło bota stworzone",
        "botpasswords-updated-body": "Hasło bota \"$1\" użytkownika \"$2\" zostało zaktualizowane.",
        "botpasswords-deleted-title": "Hasło bota usunięte",
        "botpasswords-deleted-body": "Hasło bota \"$1\" użytkownika \"$2\" zostało usunięte.",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider nie jest dostępne.",
+       "botpasswords-restriction-failed": "Logowanie nie powiodło się z powodu ograniczeń na hasło bota.",
        "botpasswords-not-exist": "Użytkownik \"$1\" nie ma hasła dla bota o nazwie \"$2\".",
        "resetpass_forbidden": "Hasła nie mogą zostać zmienione",
        "resetpass-no-info": "Musisz być zalogowany, by uzyskać bezpośredni dostęp do tej strony.",
        "recentchangeslinked-page": "Tytuł strony:",
        "recentchangeslinked-to": "Pokaż zmiany nie na stronach linkowanych, a na stronach linkujących do podanej strony",
        "recentchanges-page-added-to-category": "dodano [[:$1]] do kategorii",
-       "recentchanges-page-added-to-category-bundled": "dodano [[:$1]] oraz [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedną stronę|$2 strony|$2 stron}}]] do kategorii",
+       "recentchanges-page-added-to-category-bundled": "dodano [[:$1]] do kategorii, [[Special:WhatLinksHere/$1|ta strona jest zawarta w innych stronach]]",
        "recentchanges-page-removed-from-category": "usunięto [[:$1]] z kategorii",
-       "recentchanges-page-removed-from-category-bundled": "usunięto [[:$1]] oraz [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedną stronę|$2 strony|$2 stron}}]] z kategorii",
+       "recentchanges-page-removed-from-category-bundled": "usunięto [[:$1]] z kategorii, [[Special:WhatLinksHere/$1|ta strona jest zawarta w innych stronach]]",
        "autochange-username": "Automatyczna zmiana MediaWiki",
        "upload": "Prześlij plik",
        "uploadbtn": "Prześlij plik",
        "uploaddisabledtext": "Możliwość przesyłania plików została wyłączona.",
        "php-uploaddisabledtext": "Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.",
        "uploadscripted": "Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.",
+       "upload-scripted-pi-callback": "Nie można przesłać pliku, zawierającego instrukcję obsługi arkusza stylów XML.",
        "uploaded-script-svg": "Znaleziono element skryptowy „$1” we przesyłanym pliku SVG.",
        "uploaded-hostile-svg": "Znaleziono niebezpieczny kod CSS w przesyłanym pliku SVG.",
        "uploadscriptednamespace": "Ten plik SVG zawiera niedozwoloną przestrzeń nazw '$1'",
        "apisandbox-reset": "Wyczyść",
        "apisandbox-retry": "Ponów próbę",
        "apisandbox-loading": "Ładowanie informacji o module API „$1”…",
+       "apisandbox-load-error": "Wystąpił błąd podczas pobierania informacji dla modułu API „$1”: $2",
        "apisandbox-no-parameters": "Ten moduł API nie posiada parametrów.",
        "apisandbox-helpurls": "Linki pomocy",
        "apisandbox-examples": "Przykłady",
        "apisandbox-results": "Wyniki",
        "apisandbox-sending-request": "Wysyłanie zapytania API…",
        "apisandbox-loading-results": "Pobieranie wyników API...",
+       "apisandbox-results-error": "Wystąpił błąd podczas pobierania odpowiedzi na zapytanie API: $1.",
        "apisandbox-request-url-label": "URL zapytania:",
        "apisandbox-request-time": "Czas przetwarzania zapytania: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Popraw token i wyślij ponownie",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zabezpieczył|zabezpieczyła|zabezpieczył(a)}} $3 $4 [kaskadowo]",
        "logentry-protect-modify": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4 [kaskadowo]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup ($4 → $5)",
+       "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$3|$3}} do grupy z $4 do $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup",
        "logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)",
        "logentry-upload-upload": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
        "expand_templates_generate_rawhtml": "Pokaż surowy HTML",
        "expand_templates_preview": "Podgląd",
        "expand_templates_preview_fail_html": "<em>Ponieważ {{SITENAME}} ma włączony surowy kod HTML i zaistniała strata danych z sesji, podgląd jest ukryty jako zabezpieczenie przed atakiem JavaScript.</em>\n\n<strong>Jeśli to jest próba słusznego podglądu, proszę spróbować ponownie.</strong>\nJeśli to nie pomoże – spróbuj [[Special:UserLogout|wylogować się]] i zalogować ponownie, a także upewnij się, że twoja przeglądarka akceptuje ciasteczka z tej witryny.",
+       "expand_templates_input_missing": "Trzeba wpisać jakiś tekst.",
        "pagelanguage": "Zmiana języka strony",
        "pagelang-name": "Strona",
        "pagelang-language": "Język",
        "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
        "mw-widgets-titleinput-description-redirect": "przekierowanie do $1",
        "api-error-blacklisted": "Wybierz inny, opisowy tytuł.",
+       "sessionmanager-tie": "Nie można łączyć kilku rodzajów uwierzytelniania dla zapytania: $1.",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "sesje na podstawie cookie",
+       "sessionprovider-nocookies": "Być może cookies są wyłączone. Upewnij się, że masz włączone cookies i zacznij od nowa.",
        "randomrootpage": "Losowa strona (bez podstron)",
        "log-action-filter-block": "Rodzaj blokady:",
        "log-action-filter-delete": "Rodzaj usunięcia:",
index ba9b256..4975c2e 100644 (file)
                        "Ciencia Al Poder",
                        "Aursani",
                        "Robin van der Vliet",
-                       "Conquistador"
+                       "Conquistador",
+                       "Frigory"
                ]
        },
        "sidebar": "{{notranslate}}",
        "category-article-count-limited": "This message is displayed at the top of a category page showing the number of pages in the category when not all pages in a category are counted.\n\nParameters:\n* $1 - number of pages shown",
        "category-file-count": "This message is displayed at the top of a category page showing the number of pages in the category.\n\nParameters:\n* $1 – number of files shown\n* $2 – total number of files in category",
        "category-file-count-limited": "This message is displayed at the top of a category page showing the number of pages in the category when not all pages in a category are counted.\n\nParameters:\n* $1 - number of files shown",
-       "listingcontinuesabbrev": "Shown in contiuation of each first letter group. This message follows the first letter.\n\nSee http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for example.",
+       "listingcontinuesabbrev": "Shown in continuation of each first letter group. This message follows the first letter.\n\nSee http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for example.",
        "index-category": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with the <nowiki>__INDEX__</nowiki> behavior switch are listed.\n\nFor description of this behavior switch see [[mw:Special:MyLanguage/Help:Magic_words#Behavior_switches|MediaWiki]].\n\nSee also:\n* {{msg-mw|Index-category-desc}}",
        "noindex-category": "Name of the [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with the <nowiki>__NOINDEX__</nowiki> behavior switch are listed.\n\nFor description of this behavior switch see [[mw:Special:MyLanguage/Help:Magic_words#Behavior_switches|MediaWiki]].\n\nSee also:\n* {{msg-mw|Noindex-category-desc}}",
        "broken-file-category": "Name of [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages that embed files that do not exist (\"broken images\") are listed.\n\nSee also:\n* {{msg-mw|Broken-file-category-desc}}",
        "recentchangeslinked-page": "{{Identical|Page name}}",
        "recentchangeslinked-to": "Checkbox in [[Special:RecentChangesLinked]].",
        "recentchanges-page-added-to-category": "Comment message for pages added to a category\n\nParameters:\n* $1 - name of the page being added",
-       "recentchanges-page-added-to-category-bundled": "Comment message for template embedded by other pages added to a category\n\nParameters:\n* $1 - name of the page being added\n* $2 - number of additional pages being affected",
+       "recentchanges-page-added-to-category-bundled": "Comment message for template embedded by other pages added to a category\n\nParameters:\n* $1 - name of the page being added",
        "recentchanges-page-removed-from-category": "Comment message for pages removed from a category\n\nParameters:\n* $1 - name of the page being removed",
-       "recentchanges-page-removed-from-category-bundled": "Comment message for templates embeddedby other pages removed from a category\n\nParameters:\n* $1 - name of the page being added\n* $2 - number of additional pages being affected",
+       "recentchanges-page-removed-from-category-bundled": "Comment message for templates embedded by other pages removed from a category\n\nParameters:\n* $1 - name of the page being added",
        "autochange-username": "Used as bot / unknown username.",
        "upload": "Display name for link to [[Special:Upload]] for uploading files to the wiki.\n\nSee also:\n* {{msg-mw|Upload}}\n* {{msg-mw|Accesskey-t-upload}}\n* {{msg-mw|Tooltip-t-upload}}\n{{Identical|Upload file}}",
        "uploadbtn": "Button name in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Uploadbtn}}\n* {{msg-mw|Accesskey-upload}}\n* {{msg-mw|Tooltip-upload}}\n{{Identical|Upload file}}",
index b694cc6..2c1c026 100644 (file)
        "recentchangeslinked-page": "Nome d'a vôsce:",
        "recentchangeslinked-to": "Fa vedè le cangiaminde de le pàggene colleghete a 'na certa pàgene",
        "recentchanges-page-added-to-category": "[[:$1]] aggiunde a categorije",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] luate da 'a categorije, [[Special:WhatLinksHere/$1|sta vôsce ste sckaffate jndr'à otre pàggene]]",
        "upload": "Careche 'u file",
        "uploadbtn": "Careche 'nu fail",
        "reuploaddesc": "Scangille 'u carecamende e tuerne a 'a schermete de le carecaminde",
index 0262d21..25424d6 100644 (file)
        "tog-watchdefault": "Добавлять в список наблюдения изменённые мной страницы и описания файлов",
        "tog-watchmoves": "Добавлять в список наблюдения переименованные мной страницы и файлы",
        "tog-watchdeletion": "Добавлять в список наблюдения удалённые мной страницы и файлы",
+       "tog-watchuploads": "Добавлять закачанные мною файлы в список наблюдения",
        "tog-watchrollback": "Добавлять страницы, где я выполнил откат, в мой список наблюдения",
        "tog-minordefault": "Помечать по умолчанию правки как малозначимые",
        "tog-previewontop": "Помещать предпросмотр перед окном редактирования",
        "recentchangeslinked-page": "Название страницы:",
        "recentchangeslinked-to": "Наоборот, показать изменения на страницах, которые ссылаются на указанную страницу",
        "recentchanges-page-added-to-category": "[[:$1]] добавлена в категорию",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] Ð¸ [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|Ñ\81Ñ\82Ñ\80аниÑ\86а|Ñ\81Ñ\82Ñ\80аниÑ\86\81Ñ\82Ñ\80аниÑ\86Ñ\8b}}]] Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ\8b Ð² ÐºÐ°Ñ\82егоÑ\80иÑ\8e",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð° Ð² ÐºÐ°Ñ\82егоÑ\80иÑ\8e, [[Special:WhatLinksHere/$1|Ñ\8dÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð²ÐºÐ»Ñ\8eÑ\87ена Ð² Ð´Ñ\80Ñ\83гие Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b]]",
        "recentchanges-page-removed-from-category": "[[:$1]] убрана из категории",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] и [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|страница|страниц|страницы}}]] удалены из категории",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] удалена из категории, [[Special:WhatLinksHere/$1|эта страница включена в другие страницы]]",
        "autochange-username": "Автоматическое изменение MediaWiki",
        "upload": "Загрузить файл",
        "uploadbtn": "Загрузить файл",
        "log-action-filter-block": "Тип блокировки:",
        "log-action-filter-delete": "Тип удаления:",
        "log-action-filter-import": "Тип импорта:",
+       "log-action-filter-move": "Тип переименования:",
+       "log-action-filter-newusers": "Тип создания учётной записи:",
        "log-action-filter-patrol": "Тип патрулирования:",
        "log-action-filter-protect": "Тип защиты:",
        "log-action-filter-rights": "Тип изменения прав",
        "log-action-filter-block-block": "Блокировка",
        "log-action-filter-block-reblock": "Изменение блокировки",
        "log-action-filter-block-unblock": "Разблокировка",
+       "log-action-filter-contentmodel-change": "Изменение модели содержимого",
        "log-action-filter-delete-delete": "Удаления страницы",
        "log-action-filter-delete-restore": "Восстановление страницы",
        "log-action-filter-delete-event": "Удаление журнала",
        "log-action-filter-delete-revision": "Удаление версии",
+       "log-action-filter-newusers-create": "Создание анонимным участником",
+       "log-action-filter-newusers-create2": "Создание зарегистрированным участником",
+       "log-action-filter-newusers-autocreate": "Автоматическое создание",
        "log-action-filter-patrol-patrol": "Ручное патрулирование",
        "log-action-filter-patrol-autopatrol": "Автоматическое патрулирование",
        "log-action-filter-protect-protect": "Защита",
index f5d54cc..ec6b018 100644 (file)
        "listfiles_search_for": "माध्यमनामधेयार्थम् अन्विषतु ।",
        "listfiles-userdoesnotexist": "\"$1\" इत्यषा सदस्यलेखा पञ्जीकृता नास्ति ।",
        "imgfile": "संचिका",
-       "listfiles": "सञ्चिकावली ।",
+       "listfiles": "सञ्चिकावली",
        "listfiles_thumb": "अंगुष्ठनखाकारम् ।",
        "listfiles_date": "दिनाङ्क",
        "listfiles_name": "नाम",
index 919338b..b732067 100644 (file)
@@ -29,6 +29,7 @@
        "tog-watchdefault": "Na spisek nadzorov dodaj vse članke in datoteke, ki sem jih spremenil/-a",
        "tog-watchmoves": "Dodaj strani in datoteke, ki jih premaknem, na moj spisek nadzorov",
        "tog-watchdeletion": "Dodaj strani in datoteke, ki jih izbrišem, na moj spisek nadzorov",
+       "tog-watchuploads": "Dodaj nove datoteke, ki jih naložim, na moj spisek nadzorov",
        "tog-watchrollback": "Dodaj strani, na katerih sem izvedel vrnitev, na moj spisek nadzorov",
        "tog-minordefault": "Vsa urejanja označi kot manjša",
        "tog-previewontop": "Prikaži predogled pred urejevalnim poljem",
index 06b1dc2..2067044 100644 (file)
@@ -48,6 +48,7 @@
        "tog-watchdefault": "Додај странице и датотеке које изменим у списак надгледања",
        "tog-watchmoves": "Додај странице и датотеке које преместим у списак надгледања",
        "tog-watchdeletion": "Додај странице и датотеке које обришем у списак надгледања",
+       "tog-watchuploads": "Додај датотеке које отпремим у списак надгледања",
        "tog-watchrollback": "Додај странице на којима сам вратио измене у списак надгледања",
        "tog-minordefault": "Означавај све измене као мање",
        "tog-previewontop": "Прикажи преглед пре оквира за уређивање",
        "backend-fail-read": "Не могу да прочитам датотеку $1.",
        "backend-fail-create": "Не могу да запишем датотеку $1.",
        "backend-fail-maxsize": "Не могу да запишем датотеку $1 јер је већа од {{PLURAL:$2|$2 бајта|$2 бајта|$2 бајтова}}.",
-       "backend-fail-readonly": "Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: „$2“",
+       "backend-fail-readonly": "Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: <em>$2</em>",
        "backend-fail-synced": "Датотека „$1“ је недоследна између унутрашњих складишних основа",
        "backend-fail-connect": "Не могу да се повежем са складишном основом „$1“.",
        "backend-fail-internal": "Дошло је до непознате грешке у складишној основи „$1“.",
        "unblock": "Деблокирање корисника",
        "blockip": "Блокирај {{GENDER:$1|корисника|корисницу}}",
        "blockip-legend": "Блокирај корисника",
-       "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване).",
+       "blockiptext": "Користите доњи образац да бисте забранили приступ за писање с одређене ИП адресе или корисничког имена.\nОво би требало да вршите само ради спречавања вандализма, у складу са [[{{MediaWiki:Policy-url}}|смерницама]].\nИзаберите конкретан разлог испод (пример: навођење конкретних страница које су вандализоване). Можете блокирати опсеге ИП адреса помоћу [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] синтаксе, највећи дозвољени опсег за IPv4 је /$1 односно /$2 за IPv6.",
        "ipaddressorusername": "ИП адреса или корисничко име:",
        "ipbexpiry": "Истиче:",
        "ipbreason": "Разлог:",
index 6dd8700..46049e9 100644 (file)
        "backend-fail-read": "Ne mogu da pročitam datoteku $1.",
        "backend-fail-create": "Ne mogu da zapišem datoteku $1.",
        "backend-fail-maxsize": "Ne mogu da zapišem datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.",
-       "backend-fail-readonly": "Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: „$2“",
+       "backend-fail-readonly": "Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: <em>$2</em>",
        "backend-fail-synced": "Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova",
        "backend-fail-connect": "Ne mogu da se povežem sa skladišnom osnovom „$1“.",
        "backend-fail-internal": "Došlo je do nepoznate greške u skladišnoj osnovi „$1“.",
        "unblock": "Deblokiraj korisnika",
        "blockip": "Blokiraj korisnika",
        "blockip-legend": "Blokiraj korisnika",
-       "blockiptext": "Koristite donji obrazac da biste zabranili pristup za pisanje s određene IP adrese ili korisničkog imena.\nOvo bi trebalo da vršite samo radi sprečavanja vandalizma, u skladu sa [[{{MediaWiki:Policy-url}}|smernicama]].\nIzaberite konkretan razlog ispod (primer: navođenje konkretnih stranica koje su vandalizovane).",
+       "blockiptext": "Koristite donji obrazac da biste zabranili pristup za pisanje s određene IP adrese ili korisničkog imena.\nOvo bi trebalo da vršite samo radi sprečavanja vandalizma, u skladu sa [[{{MediaWiki:Policy-url}}|smernicama]].\nIzaberite konkretan razlog ispod (primer: navođenje konkretnih stranica koje su vandalizovane). Možete blokirati opsege IP adresa pomoću [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] sintakse, najveći dozvoljeni opseg za IPv4 je /$1 odnosno /$2 za IPv6.",
        "ipaddressorusername": "IP adresa ili korisničko ime:",
        "ipbexpiry": "Ističe:",
        "ipbreason": "Razlog:",
index 42004f9..c5ba9d2 100644 (file)
        "newarticle": "(anyar)",
        "newarticletext": "Anjeun geus nuturkeun tutumbu ka kaca nu can aya.\nPikeun nyieun kaca, mimitian ku ngetik jeroeun kotak di handap\n(tempo [$1 kaca pitulung] pikeun leuwih écés).\nMun anjeun ka dieu teu ngahaja, klik baé tombol '''back''' na panyungsi anjeun.",
        "anontalkpagetext": "----\n<em>Ieu mangrupa kaca sawala pikeun pamaké anonim anu can nyieun akun, atawa anu henteu maké.</em>\nKu kituna kapaksa make alamat IP pikeun nyirikeun anjeunna. Alamat IP ieu bisa dipaké ku sababaraha jalma. Lamun anjeun salasahiji pamaké anonim sarta ngarasa aya koméntar nu teu pakait geus ditujukeun ka anjeun, mangga [[Special:UserLogin/signup|nyieun akun]] atawa [[Special:UserLogin|asup log]] sangkan teu pacorok jeung pamaké anonim lianna.",
-       "noarticletext": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali],\natawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} ngédit ieu kaca]</span>.",
+       "noarticletext": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali],\natawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nyieun ieu kaca]</span>.",
        "noarticletext-nopermission": "Kiwari can aya téks dina ieu kaca.\nAnjeun bisa [[Special:Search/{{PAGENAME}}|nyusud judul ieu kaca]] dina kaca séjén,atawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nyusud log nu tumali]</span>, tapi teu wenang pikeun nyieun ieu kaca.",
        "missing-revision": "Révisi #$1 kaca \"{{FULLPAGENAME}}\" teu aya.\n\nKajadian ieu biasana kusabab nuturkeun tutumbu jujutan kaca anu geus dihapus.\nWincikanana bisa ditempo di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log hapusan].",
        "userpage-userdoesnotexist": "Rekening pamaké \"<nowiki>$1</nowiki>\" tacan kadaptar. Mangga tilikan lamun anjeun hoyong ngadamel/ngédit kaca ieu.",
        "undelete-show-file-submit": "Enya",
        "namespace": "Ngaranspasi:",
        "invert": "Balikkeun pilihan",
+       "tooltip-invert": "Contang ieu kotak pikeun nyumputkeun parobahan kaca-kaca dina ruang nama anu dipilih (jeung ruang nama anu tumali, lamun dicontang)",
        "blanknamespace": "(Utama)",
        "contributions": "Kontribusi {{GENDER:$1|pamaké}}",
        "contributions-title": "Sumbangan tulisan ti $1",
index c75952a..be89848 100644 (file)
@@ -47,7 +47,8 @@
                        "Sharanrajindia",
                        "Maathavan",
                        "தமிழ்க்குரிசில்",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "JAaron95"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "nocookieslogin": "{{SITENAME}} தளம் பயனர்களைப் புகுபதிகை செய்வதற்கு ஞாபகிகளைப் (குக்கிகள்) பயன்படுத்துகிறது. நீங்கள் ஞாபகிகளைச் செயலிழக்கச் செய்துள்ளீர்கள். தயவுசெய்து அவற்றைச் செயற்பாடுள்ளதாக்கித் திரும்பவும் முயலுங்கள்.",
        "nocookiesfornew": "பயனர் கணக்கு உருவாக்கப்படவில்லை, அதே போல அதன் மூலத்தை எங்களால் உறுதிசெய்ய இயலவில்லை.நீங்கள் குக்கிகள் (cookies) இயங்கச்செய்யப்பட்டிருப்பதை  உறுதிசெய்யவும்,இப்பக்கத்தை reload செய்யவும் மற்றும் மீண்டும் முயற்சிக்கவும்.",
        "noname": "நீங்கள் கொடுத்த பயனர் பெயர் செல்லுபடியற்றது.",
-       "loginsuccesstitle": "புகுபதிகை வெற்றி",
+       "loginsuccesstitle": "புகுபதிகையில் உள்ளீர்கள்.",
        "loginsuccess": "நீங்கள் தற்பொழுது {{SITENAME}} தளத்தில் \"$1\" கணக்கினூடாக புகுபதிகை செய்துள்ளீர்கள்.",
        "nosuchuser": "\"$1\" என்ற பெயரில் பயனர் எவருமில்லை.\n\nபயனர் பெயர், பெரிய எழுத்து,  சிறிய எழுத்து என்ற வித்தியாசத்திற்குட்பட்டது.\n\nஎழுத்துப் பிழைகளைச் சரி பார்க்கவும், அல்லது [[Special:UserLogin/signup|புதிய பயனர் கணக்கொன்றை உருவாக்கவும்]].",
        "nosuchusershort": "\"$1\" என்ற பெயரில் பயனர் யாரும் இல்லை. நீங்கள் உள்ளிட்ட பெயரைச் சரி பார்க்கவும்.",
        "noemail": "\"$1\" பயனருக்கு மின்னஞ்சல் முகவரி எதுவும் பதியப்பட்டிருக்கவில்லை.",
        "noemailcreate": "ஒரு செல்லத்தக்க மின்னஞ்சல் முகவரியை நீங்கள் தரவேண்டும்.",
        "passwordsent": "\"$1\" பயனருக்கான மின்னஞ்சல் முகவரிக்கு ஒரு புதிய கடவுச்சொல் அனுப்பப்பட்டுள்ளது. பெற்றுக்கொண்டதும் தயவுசெய்து மீண்டும் புகுபதிகை செய்யவும்.",
-       "blocked-mailpassword": "à®\89à®\99à¯\8dà®\95ளà¯\8d à®\90.பி. à®®à¯\81à®\95வரி à®¤à®\9fà¯\81à®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81, விசம செயற்பாடுகளைத் தவிர்க்க கடவுச்சொல் மீட்புச் செயலியை நீங்கள் பயன்படுத்து அனுமதிக்கப்படவில்லை.",
+       "blocked-mailpassword": "à®\89à®\99à¯\8dà®\95ளà¯\8d à®\90.பி. à®®à¯\81à®\95வரி à®¤à¯\8aà®\95à¯\81பà¯\8dபதிலிரà¯\81நà¯\8dதà¯\81 à®¤à®\9fà¯\88 à®\9aà¯\86யà¯\8dயபà¯\8dபà®\9fà¯\8dà®\9fà¯\81ளà¯\8dளதà¯\81. விசம செயற்பாடுகளைத் தவிர்க்க கடவுச்சொல் மீட்புச் செயலியை நீங்கள் பயன்படுத்து அனுமதிக்கப்படவில்லை.",
        "eauthentsent": "உறுதிப்படுத்தல் மின்னஞ்சலொன்று நீங்கள் கொடுத்த மின்னஞ்சல் முகவரிக்கு அனுப்பப் பட்டுள்ளது.\nமேலும் மின்னஞ்சல்கள் இந்த முகவரிக்கு அனுப்பப்படும் முன்னர், மின்னஞ்சலில் கொடுக்கப்பட்டுள்ள வழிமுறைகளை பின்பற்றி, இம்மின்னஞ்சல் முகவரி உங்களுடையது தான் என்பதை உறுதிப்படுத்தவும்.",
        "throttled-mailpassword": "கடந்த {{PLURAL:$1|மணிநேரத்துக்குள்|$1 மணிநேரங்களுக்குள்}} ஒரு கடவுச்சொல் நினைவூட்டல் மின்னஞ்சல் ஏற்கனவே அனுப்பப்பட்டுவிட்டது. விசமப் பயன்பாடுகளைத் தவிர்ப்பதற்காக {{PLURAL:$1|மணிநேரத்திற்கு|$1 மணிநேரங்களுக்கு}} ஒரு கடவுச்சொல் நினைவூட்டல் மின்னஞ்சல் மட்டுமே அனுப்பப்படும்.",
        "mailerror": "மின்னஞ்சல் அனுப்புவதில் தவறு: $1",
        "createaccount-title": "{{SITENAME}} தளத்துக்கான கணக்கு தொடக்கம்",
        "createaccount-text": "யாரோ ஒருவர் உங்கள் மின்னஞ்சல் முவரிக்காக {{SITENAME}} ($4) தளத்தில் கணக்கொண்றை தொடங்கியுள்ளார். கணக்கின் பெயர் \"$2\", கடவுச்சொல் \"$3\". நீங்கள் இப்போது புகுபதிகைச் செய்து கடவுச்சொல்லை மாற்ற வேண்டும்.\n\nஇக்கணக்கு தவறுதலாக தொடங்கப்பட்டிருந்தால், இத்தகவலைப் புறக்கணிக்கலாம்.",
        "login-throttled": "தாங்கள் மிக அண்மையில் பலமுறை புகுபதிகை செய்ய முயற்சி செய்துள்ளீர்கள்.\n\nமீண்டும் முயற்சிக்கும் முன் $1 காத்திருக்கவும்.",
-       "login-abort-generic": "உங்கள் உள்நுழைவு தோல்வியுற்றது - Aborted",
+       "login-abort-generic": "உங்கள் உள்நுழைவு தோல்வியுற்றது - ரத்து செய்யபட்டது",
        "login-migrated-generic": "உங்கள் கணக்கு நகர்த்தப்பட்டுள்ளது, மேலும் உங்கள் பயனர்பெயரில் இந்த விக்கியில் இல்லை.",
        "loginlanguagelabel": "மொழி: $1",
        "suspicious-userlogout": "உங்கள் விடுபதிகை கோரிக்கை மறுக்கப்பட்டது ஏனென்றால் அது அறுபட்ட உலாவி அல்லது மாற்று இடைக்கிடங்கியால் அனுப்பப்பட்டுள்ளது.",
index 0625d9c..99c695f 100644 (file)
        "may": "May",
        "jun": "Haz",
        "jul": "Tem",
-       "aug": "Agu",
+       "aug": "Ağu",
        "sep": "Eyl",
        "oct": "Eki",
        "nov": "Kas",
        "october-date": "$1 Ekim",
        "november-date": "$1 Kasım",
        "december-date": "$1 Aralık",
+       "period-am": "ÖÖ",
+       "period-pm": "ÖS",
        "pagecategories": "{{PLURAL:$1|Kategori|Kategoriler}}",
        "category_header": "\"$1\" kategorisindeki sayfalar",
        "subcategories": "Alt kategoriler",
        "createacct-benefit-heading": "{{SITENAME}} sizin gibi insanlar tarafından geliştirilir.",
        "createacct-benefit-body1": "{{PLURAL:$1|düzenleme|düzenleme}}",
        "createacct-benefit-body2": "{{PLURAL:$1|madde|madde}}",
-       "createacct-benefit-body3": "en son {{PLURAL:$1|katkıda bulunan|katkıda bulunan}} kişi sayısı",
+       "createacct-benefit-body3": "yakın zamanda {{PLURAL:$1|katkı yapan|katkı yapan}} kişi",
        "badretype": "Girdiğiniz şifreler birbirleriyle uyuşmuyor.",
        "usernameinprogress": "Bu kullanıcı adı için bir hesap oluşturma zaten sürüyor. Lütfen bekleyin.",
        "userexists": "Girdiğiniz kullanıcı adı zaten kullanımda.\nLütfen farklı bir kullanıcı adı seçiniz.",
        "newarticle": "(Yeni)",
        "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın  <strong>geri </strong> tuşuna tıklayın.",
        "anontalkpagetext": "----''Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır. Bu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız. Bu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir. Eğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:UserLogin/signup|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].''",
-       "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz]</span>.",
+       "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} oluşturabilirsiniz]</span>.",
        "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz]</span>, fakat sayfayı oluşturma yetkiniz bulunmamaktadır.",
        "missing-revision": "\"{{FULLPAGENAME}}\" sayfasının #$1 sürümü yok.\n\nBu duruma genellikle silinmiş bir sayfaya eski tarihli bir bağlantının takip edilmesi neden olur.\n\nDaha fazla detaylı bilgi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sayfasında bulunabilir].",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.",
        "newpageletter": "Y",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 izlenilen {{PLURAL:$1|kullanıcı|kullanıcı}}]",
-       "rc_categories": "Kategorilere sınırla (\"|\" ile ayır)",
-       "rc_categories_any": "Herhangi",
+       "rc_categories": "Kategorileri sınırla (\"|\" ile ayır)",
+       "rc_categories_any": "Seçilen herhangi bir",
        "rc-change-size-new": "Değişiklikten sonraki boyut: $1 {{PLURAL:$1|bayt|bayt}}",
        "newsectionsummary": "/* $1 */ yeni başlık",
        "rc-enhanced-expand": "Ayrıntıları göster",
index 08c0e0f..60e69e3 100644 (file)
        "noemail": "$1 исемле кулланучы өчен электрон почта адресы язылмаган.",
        "noemailcreate": "Сез дөрес e-mail адресы күрсәтергә тиеш",
        "passwordsent": "Яңа серсүз $1 исемле кулланучының электрон почта адресына җибәрелде.\n\nЗинһар, серсүзне алгач, системага яңадан керегез.",
-       "blocked-mailpassword": "Сезнең IP адресыгыз белән битләр үзгәртеп һәм серсүзне яңартып булмый.",
+       "blocked-mailpassword": "Сезнең IP адресыгыздан төзәтмәләр кертү тыелган. Кирәксез эшләрдән саклау өчен бу IP адрес өчен шулай ук серсүзне кайтару мөмкинлеге дә ябылган.",
        "eauthentsent": "Күрсәтелгән электрон почта адресына үзгәртүләрне раслау өчен хат җибәрелде. Киләчәктәдә хатлар кабул итү өчен, раслауны үтегез.",
        "throttled-mailpassword": "Серсүзне электрон почтага җибәрү гамәлен сез {{PLURAL:$1|1=соңгы $1 сәгать}} эчендә кулландыгыз инде. Бу гамәлне явызларча куллануны кисәтү максатыннан аны $1 {{PLURAL:$1|сәгать}} аралыгында бер генә тапкыр башкарып була.",
        "mailerror": "Хат җибәрү хатасы: $1",
index 08e281c..8874c81 100644 (file)
@@ -83,6 +83,7 @@
        "tog-watchdefault": "Додавати змінені мною сторінки та файли до мого списку спостереження",
        "tog-watchmoves": "Додавати перейменовані мною сторінки та файли до мого списку спостереження",
        "tog-watchdeletion": "Додавати вилучені мною сторінки та файли до мого списку спостереження",
+       "tog-watchuploads": "Додавати до мого списку спостереження нові файли, завантажені мною",
        "tog-watchrollback": "Додавати відкочені мною сторінки до мого списку спостереження",
        "tog-minordefault": "Позначати всі зміни як незначні за замовчуванням",
        "tog-previewontop": "Показувати попередній перегляд перед вікном редагування, а не після",
        "recentchangeslinked-page": "Назва сторінки:",
        "recentchangeslinked-to": "Показати зміни на сторінках, пов'язаних з даною",
        "recentchanges-page-added-to-category": "[[:$1]] Додано до категорії",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] та ще [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}}]] було додано до категорії",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] додано до категорії, [[Special:WhatLinksHere/$1|ця сторінка включена в інші сторінки]]",
        "recentchanges-page-removed-from-category": "[[:$1]] було вилучено з категорії",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] та ще [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 сторінку|$2 сторінки|$2 сторінок|1=одну сторінку}}]] було вилучено з категорії",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] вилучено з категорії, [[Special:WhatLinksHere/$1|ця сторінка включена в інші сторінки]]",
        "autochange-username": "Автоматичні редагування MediaWiki",
        "upload": "Завантажити файл",
        "uploadbtn": "Завантажити файл",
        "sessionprovider-nocookies": "Куки можуть бути відключені. Переконайтеся, що у Вас включені cookies і почніть знову.",
        "randomrootpage": "Випадкова коренева сторінка",
        "log-action-filter-block": "Тип блокування:",
+       "log-action-filter-contentmodel": "Тип модифікації contentmodel:",
        "log-action-filter-delete": "Тип вилучення:",
+       "log-action-filter-import": "Тип імпорту:",
+       "log-action-filter-managetags": "Тип дії з управління тегами:",
+       "log-action-filter-move": "Тип перейменування:",
+       "log-action-filter-newusers": "Тип створення облікового запису:",
        "log-action-filter-patrol": "Тип патрулювання:",
        "log-action-filter-protect": "Тип захисту:",
+       "log-action-filter-rights": "Тип зміни прав",
+       "log-action-filter-suppress": "Тип приховування",
        "log-action-filter-upload": "Тип завантаження:",
        "log-action-filter-all": "Усі",
        "log-action-filter-block-block": "Блокування",
        "log-action-filter-block-reblock": "Зміна блокування",
        "log-action-filter-block-unblock": "Розблокування",
+       "log-action-filter-contentmodel-change": "Зміна Contentmodel",
+       "log-action-filter-contentmodel-new": "Створення сторінки з нестандартною моделлю Contentmodel",
        "log-action-filter-delete-delete": "Видалення сторінки",
        "log-action-filter-delete-restore": "Відновлення сторінки",
        "log-action-filter-delete-event": "Вилучення журналу",
        "log-action-filter-delete-revision": "Вилучення версії",
+       "log-action-filter-import-interwiki": "Трансвікі-імпорт",
+       "log-action-filter-import-upload": "Імпорт через завантаження XML",
+       "log-action-filter-managetags-create": "Створення тегів",
+       "log-action-filter-managetags-delete": "Вилучення тегів",
+       "log-action-filter-managetags-activate": "Активація тегів",
+       "log-action-filter-managetags-deactivate": "Деактивація тегів",
+       "log-action-filter-move-move": "Перейменування без перезапису сторінок-перенаправлень",
+       "log-action-filter-move-move_redir": "Перейменування з перезаписом сторінок-перенаправлень",
+       "log-action-filter-newusers-create": "Створення анонімним користувачем",
+       "log-action-filter-newusers-create2": "Створення зареєстрованим користувачем",
+       "log-action-filter-newusers-autocreate": "Автоматичне створення",
+       "log-action-filter-newusers-byemail": "Створення з паролем, надісланим електронною поштою",
        "log-action-filter-patrol-patrol": "Ручне патрулювання",
        "log-action-filter-patrol-autopatrol": "Автоматичне патрулювання",
        "log-action-filter-protect-protect": "Захист",
        "log-action-filter-protect-modify": "Зміна захисту",
        "log-action-filter-protect-unprotect": "Зняття захисту",
+       "log-action-filter-protect-move_prot": "Перенесення захисту",
+       "log-action-filter-rights-rights": "Ручна зміна",
+       "log-action-filter-rights-autopromote": "Автоматична зміна",
+       "log-action-filter-suppress-event": "Приховування журналу",
+       "log-action-filter-suppress-revision": "Приховування версії",
+       "log-action-filter-suppress-delete": "Приховування сторінки",
+       "log-action-filter-suppress-block": "Приховування користувача через блокування",
+       "log-action-filter-suppress-reblock": "Приховування користувача через повторне блокування",
        "log-action-filter-upload-upload": "Нове завантаження",
        "log-action-filter-upload-overwrite": "Повторне завантаження"
 }
index 648a582..87f978b 100644 (file)
        "noarticletext-nopermission": "箇只页面目前呒不文本。侬可以垃拉其他页面高头[[Special:Search/{{PAGENAME}}|寻箇页标题]],或者<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 寻相关日志]</span>,但必过侬呒不权限建立箇只页面。",
        "userpage-userdoesnotexist": "用户账户“<nowiki>$1</nowiki>”弗曾创建。请垃拉创建/编辑迭个页面前头先检查一记。",
        "userpage-userdoesnotexist-view": "用户账户“$1”弗曾创建。",
-       "blocked-notice-logextract": "箇位用户箇歇畀封锁垃许。\n下头有最近个封锁纪录以供参考:",
+       "blocked-notice-logextract": "箇位用户箇歇畀封锁垃许。下头有最近个封锁纪录以供参考:",
        "clearyourcache": "<strong>注意:</strong>垃拉保存之后,侬作兴要清除浏览器个缓存才好看见改变。\n* <strong>Firefox或Safari:</strong>揿牢“Shift”个同时点击“刷新”,或揿“Ctrl-F5”或“Ctrl-R”(Mac上是“⌘-R”)\n* <strong>Google Chrome:</strong>揿“Ctrl-Shift-R”(Mac上是“⌘-Shift-R”)\n* <strong>Internet Explorer:</strong>揿牢“Ctrl”个同时点击“刷新”,或揿“Ctrl-F5”\n* <strong>Opera:</strong>垃拉“工具→首选项”里向清除缓存",
        "usercssyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 CSS 。",
        "userjsyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 JavaScript 。",
        "page_first": "最前",
        "page_last": "阿末",
        "histlegend": "选择比较版本:标记要比较个两只版本,回车或者揿页面底里个揿钮。<br /> 图例:(当前) = 搭当前版本有啥两样, (上个) = 搭上个版本有啥两样,小 = 小改动。",
-       "history-fieldset-title": "浏览史",
+       "history-fieldset-title": "浏览史",
        "history-show-deleted": "只显示删脱个",
        "histfirst": "顶早",
        "histlast": "顶晏",
        "log": "记录",
        "alllogstext": "所有{{SITENAME}}公开日志个联合展示。侬可以选择日志类型、用户名(区分大小写)或者相关页面(区分大小写)来缩小搜寻范围。",
        "allpages": "全部页面",
-       "nextpage": "下页 ($1)",
+       "nextpage": "下一页($1)",
        "prevpage": "上一页($1)",
        "allpagesfrom": "显示个页面开始于:",
        "allpagesto": "显示从此地结束个页面:",
index 9461919..90d6dd7 100644 (file)
        "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表",
        "tog-watchmoves": "添加我移动的页面和文件至我的监视列表",
        "tog-watchdeletion": "添加我删除的页面和文件至我的监视列表",
+       "tog-watchuploads": "添加我上传的新文件至我的监视列表",
        "tog-watchrollback": "添加我执行过回退的页面至我的监视列表",
        "tog-minordefault": "默认标记所有编辑为小编辑",
        "tog-previewontop": "在编辑框上方显示预览",
        "searchall": "所有",
        "showingresults": "下面显示从第<strong>$2</strong>条结果开始的<strong>$1</strong>条结果。",
        "showingresultsinrange": "下面显示区间#<strong>$2</strong>至#<strong>$3</strong>的<strong>$1</strong>条结果。",
-       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>条结果中的<strong>$1</strong>条|<strong>$3</strong>条结果中的<strong>$1~$2</strong>条}}",
+       "search-showingresults": "{{PLURAL:$4|第<strong>$1</strong>条结果,共<strong>$3</strong>条|第<strong>$1~$2</strong>条结果,共<strong>$3</strong>条}}",
        "search-nonefound": "找不到和查询相匹配的结果。",
        "search-nonefound-thiswiki": "在此网站找不到匹配查询的结果。",
        "powersearch-legend": "高级搜索",
        "recentchangeslinked-page": "页面名称:",
        "recentchangeslinked-to": "显示链到所给出的页面",
        "recentchanges-page-added-to-category": "[[:$1]]已添加至分类",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]]å\8f\8a[[Special:WhatLinksHere/$1|å\85¶ä»\96{{PLURAL:$2|$2个页é\9d¢}}]]已添å\8a è\87³å\88\86ç±»",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]]已添å\8a è\87³å\88\86ç±»ï¼\8c[[Special:WhatLinksHere/$1|此页é\9d¢å\8c\85å\90«å\9c¨å\85¶ä»\96页é\9d¢ä¹\8bå\86\85]]",
        "recentchanges-page-removed-from-category": "[[:$1]]已从分类中移除",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]]å\8f\8a[[Special:WhatLinksHere/$1|å\85¶ä»\96{{PLURAL:$2|$2个页é\9d¢}}]]å·²ä»\8eå\88\86类中移é\99¤",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]]å·²ä»\8eå\88\86类中移é\99¤ï¼\8c[[Special:WhatLinksHere/$1|此页é\9d¢å\8c\85å\90«å\9c¨å\85¶ä»\96页é\9d¢ä¹\8bå\86\85]]",
        "autochange-username": "MediaWiki自动化更改",
        "upload": "上传文件",
        "uploadbtn": "上传文件",
        "showhideselectedlogentries": "更改选定日志记录的可见性",
        "log-edit-tags": "编辑选定日志记录的标签",
        "checkbox-select": "选择:$1",
-       "checkbox-all": "å\85¨é\83¨",
-       "checkbox-none": "",
+       "checkbox-all": "å\85¨é\80\89",
+       "checkbox-none": "全不选",
        "checkbox-invert": "反选",
        "allpages": "所有页面",
        "nextpage": "下一页($1)",
        "enotif_lastvisited": "请浏览 $1 查看在你上次访问后的所有更改。",
        "enotif_lastdiff": "请浏览 $1 查看该更改。",
        "enotif_anon_editor": "匿名用户$1",
-       "enotif_body": "亲爱的$WATCHINGUSERNAME:\n\n你好!\n\n$PAGEINTRO$NEWPAGE\n编辑摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n你可以通过以下方式联系编者:\n电子邮件:$PAGEEDITOR_EMAIL\n用户页面:$PAGEEDITOR_WIKI\n\n在你登录并访问该页面之前,我们不会发送新增更改的通知。\n你也可以重设你的监视列表中所有监视页面的通知标志。\n\n{{SITENAME}}通知系统\n--\n更改邮件通知设置:\n{{canonicalurl:{{#special:Preferences}}}}\n更改监视列表设置:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n从监视列表中删除该页面:\n$UNWATCHURL\n反馈与其他帮助:\n$HELPPAGE",
+       "enotif_body": "亲爱的$WATCHINGUSERNAME:\n\n您好!\n$PAGEINTRO$NEWPAGE\n\n编辑摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n可通过以下方式联系编辑者:\n电子邮件:$PAGEEDITOR_EMAIL\n用户页面:$PAGEEDITOR_WIKI\n\n在您登录并访问该页面之前,我们不会发送新增更改的通知。您也可以重设您的监视列表中所有监视页面的通知标志。\n\n{{SITENAME}}通知系统\n\n--\n更改邮件通知设置:\n{{canonicalurl:{{#special:Preferences}}}}\n更改监视列表设置:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n从监视列表中删除该页面:\n$UNWATCHURL\n反馈与其他帮助:\n$HELPPAGE",
        "created": "创建",
        "changed": "更改",
        "deletepage": "删除页面",
index 456d23e..e503637 100644 (file)
@@ -88,6 +88,7 @@
        "tog-watchdefault": "將我編輯的頁面和檔案加入監視清單",
        "tog-watchmoves": "將我移動的頁面和檔案加入監視清單",
        "tog-watchdeletion": "將我刪除的頁面和檔案加入監視清單",
+       "tog-watchuploads": "加入我上傳的新檔案至我的監視清單",
        "tog-watchrollback": "將我曾經還原的頁面新增至監視清單",
        "tog-minordefault": "預設標記所有的編輯為小修訂",
        "tog-previewontop": "顯示預覽於編輯框上方",
        "noemail": "使用者 \"$1\" 沒有電子郵件地址記錄。",
        "noemailcreate": "您需要提供一個有效的電子郵件地址。",
        "passwordsent": "使用者 \"$1\" 的新密碼已寄至當出登記的電子郵件地址,\n請稍後收到郵件後再登入。",
-       "blocked-mailpassword": "æ\82¨ç\9a\84 IP ä½\8då\9d\80已被å°\81é\8e\96ä¸\8då\85\81許編輯ï¼\8cå¯\86碼復å\8e\9fç\9a\84å\8a\9fè\83½ä¹\9få\90\8c樣被ç¦\81止使ç\94¨ä»¥é\98²æ­¢è¢«濫用。",
+       "blocked-mailpassword": "æ\82¨ç\9a\84 IP ä½\8då\9d\80已被å°\81é\8e\96ä¸\8då\85\81許編輯ï¼\8cå·²ç¦\81æ­¢ä¾\86è\87ªæ­¤ IP ä½\8då\9d\80ç\9a\84å¯\86碼復å\8e\9få\8a\9fè\83½ä»¥é\98²æ­¢濫用。",
        "eauthentsent": "已寄出一封確認信到您所設定的電子郵件地址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
        "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
        "mailerror": "傳送電子郵件錯誤:$1",
        "recentchangeslinked-page": "頁面名稱:",
        "recentchangeslinked-to": "改顯示連結至指定頁面的變更",
        "recentchanges-page-added-to-category": "[[:$1]] 已加入至分類",
-       "recentchanges-page-added-to-category-bundled": "[[:$1]] 與[[Special:WhatLinksHere/$1|其他 {{PLURAL:$2|1 頁|$2 頁}}]]已加入至分類",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] 已加入至分類,[[Special:WhatLinksHere/$1|此頁面已被其他頁面引用]]",
        "recentchanges-page-removed-from-category": "[[:$1]] 已自分類移除",
-       "recentchanges-page-removed-from-category-bundled": "[[:$1]] 與[[Special:WhatLinksHere/$1|其他 {{PLURAL:$2|1 頁|$2 頁}}]]已自分類移除",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] 已自分類移除,[[Special:WhatLinksHere/$1|此頁面已被其他頁面引用]]",
        "autochange-username": "MediaWiki 自動變更",
        "upload": "上傳檔案",
        "uploadbtn": "上傳檔案",
        "ipb-unblock": "解除封鎖使用者名稱或 IP 位址",
        "ipb-blocklist": "檢視目前的封鎖",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} 的貢獻",
+       "ipb-blocklist-duration-left": "剩下 $1",
        "unblockip": "解除封鎖使用者",
        "unblockiptext": "使用以下表單以還原之前被封鎖的 IP 位址或使用者名稱的寫入存取。",
        "ipusubmit": "移除此封鎖",
        "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1) 已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件地址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以開啟在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_invalidated": "已取消電子郵件地址確認",
        "invalidateemail": "取消電子郵件確認",
+       "notificationemail_subject_changed": "{{SITENAME}} 註冊的電子郵件位址已變更",
+       "notificationemail_subject_removed": "{{SITENAME}} 註冊的電子郵件位址已移除",
        "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
        "scarytranscludefailed": "[模板 $1 讀取失敗]",
        "scarytranscludefailed-httpstatus": "[模板 $1 讀取失敗:HTTP $2]",
        "sessionprovider-nocookies": "Cookie 功能可能已被關閉,請確認您改開啟 Cookie 功能並重新啟動。",
        "randomrootpage": "隨機根頁面",
        "log-action-filter-block": "封鎖類型:",
+       "log-action-filter-contentmodel": "內容模型修改類型:",
        "log-action-filter-delete": "刪除類型:",
+       "log-action-filter-import": "匯入類型:",
+       "log-action-filter-managetags": "標籤管理動作類型:",
+       "log-action-filter-move": "移動類型:",
+       "log-action-filter-newusers": "帳號建立類型:",
        "log-action-filter-patrol": "巡查類型:",
        "log-action-filter-protect": "保護類型:",
+       "log-action-filter-rights": "權限變更類型:",
+       "log-action-filter-suppress": "禁止顯示類型:",
        "log-action-filter-upload": "上傳類型:",
        "log-action-filter-all": "全部",
        "log-action-filter-block-block": "封鎖",
        "log-action-filter-block-reblock": "封鎖修改",
        "log-action-filter-block-unblock": "解除封鎖",
+       "log-action-filter-contentmodel-change": "變更內容模型",
+       "log-action-filter-contentmodel-new": "使用非標準內容模型建立的頁面",
        "log-action-filter-delete-delete": "頁面刪除",
        "log-action-filter-delete-restore": "頁面取消刪除",
        "log-action-filter-delete-event": "日誌刪除",
        "log-action-filter-delete-revision": "修訂刪除",
+       "log-action-filter-import-interwiki": "Transwiki 匯入",
+       "log-action-filter-import-upload": "使用 XML 上傳匯入",
+       "log-action-filter-managetags-create": "標籤建立",
+       "log-action-filter-managetags-delete": "標籤刪除",
+       "log-action-filter-managetags-activate": "標籤啟動",
+       "log-action-filter-managetags-deactivate": "標籤取消啟動",
+       "log-action-filter-move-move": "移動不覆寫重新導向",
+       "log-action-filter-move-move_redir": "移動覆寫重新導向",
+       "log-action-filter-newusers-create": "由匿名使用者建立",
+       "log-action-filter-newusers-create2": "由註冊使用者建立",
+       "log-action-filter-newusers-autocreate": "自動建立",
+       "log-action-filter-newusers-byemail": "使用電子郵件發送密碼建立",
        "log-action-filter-patrol-patrol": "手動巡查",
        "log-action-filter-patrol-autopatrol": "自動巡查",
        "log-action-filter-protect-protect": "保護",
        "log-action-filter-protect-modify": "保護修改",
        "log-action-filter-protect-unprotect": "解除保護",
+       "log-action-filter-protect-move_prot": "已移動保護",
+       "log-action-filter-rights-rights": "手動變更",
+       "log-action-filter-rights-autopromote": "自動變更",
+       "log-action-filter-suppress-event": "日誌禁止顯示",
+       "log-action-filter-suppress-revision": "修訂禁止顯示",
+       "log-action-filter-suppress-delete": "頁面禁止顯示",
+       "log-action-filter-suppress-block": "由封鎖禁止顯示使用者",
+       "log-action-filter-suppress-reblock": "由重新封鎖禁止顯示使用者",
        "log-action-filter-upload-upload": "新上傳",
        "log-action-filter-upload-overwrite": "重新上傳"
 }
index 641250d..6931259 100644 (file)
@@ -92,7 +92,7 @@ class CapsCleanup extends TableCleanup {
                } else {
                        $mp = new MovePage( $current, $target );
                        $status = $mp->move( $this->user, 'Converting page titles to lowercase', true );
-                       $ok = $status->isOK() ? 'OK' : $status->getWikiText();
+                       $ok = $status->isOK() ? 'OK' : $status->getWikiText( false, false, 'en' );
                        $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" );
                }
                if ( $ok === true ) {
index 4ef7379..4219ed0 100644 (file)
@@ -97,7 +97,7 @@ class EditCLI extends Maintenance {
                        $exit = 1;
                }
                if ( !$status->isGood() ) {
-                       $this->output( $status->getWikiText() . "\n" );
+                       $this->output( $status->getWikiText( false, false, 'en' ) . "\n" );
                }
                exit( $exit );
        }
index 512c38c..c653a5f 100644 (file)
@@ -257,7 +257,7 @@ if ( $count > 0 ) {
                        $archive = $image->publish( $file, $flags, $publishOptions );
                        if ( !$archive->isGood() ) {
                                echo "failed. (" .
-                                       $archive->getWikiText() .
+                                       $archive->getWikiText( false, false, 'en' ) .
                                        ")\n";
                                $failed++;
                                continue;
index 3a1a72c..3c29689 100644 (file)
@@ -110,7 +110,7 @@ class MoveBatch extends Maintenance {
                        $mp = new MovePage( $source, $dest );
                        $status = $mp->move( $wgUser, $reason, !$noredirects );
                        if ( !$status->isOK() ) {
-                               $this->output( "\nFAILED: " . $status->getWikiText() );
+                               $this->output( "\nFAILED: " . $status->getWikiText( false, false, 'en' ) );
                        }
                        $this->commitTransaction( $dbw, __METHOD__ );
                        $this->output( "\n" );
index 42a0746..cb7adbe 100644 (file)
@@ -734,6 +734,7 @@ return [
        'moment' => [
                'scripts' => [
                        'resources/lib/moment/moment.js',
+                       'resources/src/moment-global.js',
                        'resources/src/moment-local-dmy.js',
                ],
                'languageScripts' => [
@@ -2278,6 +2279,7 @@ return [
        'oojs' => [
                'scripts' => [
                        'resources/lib/oojs/oojs.jquery.js',
+                       'resources/src/oojs-global.js',
                ],
                'targets' => [ 'desktop', 'mobile' ],
                'dependencies' => [
index 1d13c69..1accc2a 100644 (file)
        overflow: auto;
 }
 .oo-ui-textInputWidget [type="search"] {
-       -webkit-appearance: texfield;
+       -webkit-appearance: textfield;
 }
 .oo-ui-textInputWidget [type="search"]::-ms-clear {
        display: none;
index 074c1b2..431a9e4 100644 (file)
        overflow: auto;
 }
 .oo-ui-textInputWidget [type="search"] {
-       -webkit-appearance: texfield;
+       -webkit-appearance: textfield;
 }
 .oo-ui-textInputWidget [type="search"]::-ms-clear {
        display: none;
index abe912d..20bfa0e 100644 (file)
@@ -44,7 +44,7 @@
                                pending.abort();
                        }
 
-                       api.getToken( 'edit' ).then( stashEdit );
+                       api.getToken( 'csrf' ).then( stashEdit );
                }
 
                function onKeyPress( e ) {
index 31c8fef..549a9ab 100644 (file)
@@ -591,5 +591,6 @@ function pluralRuleParser(rule, number) {
 
 /* pluralRuleParser ends here */
 mw.libs.pluralRuleParser = pluralRuleParser;
+module.exports = pluralRuleParser;
 
 } )( mediaWiki );
index 8c89ed9..377b1f7 100644 (file)
                },
 
                timeout: function () {
-                       var $spinnerDestCheck;
+                       var $spinnerDestCheck, title;
                        if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
                                return;
                        }
                        $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
+                       title = mw.Title.newFromText( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file );
 
                        ( new mw.Api() ).get( {
                                action: 'query',
-                               titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
+                               // If title is empty, user input is invalid, the API call will produce details about why
+                               titles: title ? title.getPrefixedText() : this.nameToCheck,
                                prop: 'imageinfo',
                                iiprop: 'uploadwarning',
                                indexpageids: true
                        } ).done( function ( result ) {
-                               var resultOut = '';
-                               if ( result.query ) {
-                                       resultOut = result.query.pages[ result.query.pageids[ 0 ] ].imageinfo[ 0 ];
+                               var
+                                       resultOut = '',
+                                       pageId = result.query.pageids[ 0 ];
+                               if ( result.query.pages[ pageId ].imageinfo ) {
+                                       resultOut = result.query.pages[ pageId ].imageinfo[ 0 ].html;
+                               } else if ( result.query.pages[ pageId ].invalidreason ) {
+                                       resultOut = mw.html.escape( result.query.pages[ pageId ].invalidreason );
                                }
                                $spinnerDestCheck.remove();
                                uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
@@ -80,8 +86,8 @@
                },
 
                processResult: function ( result, fileName ) {
-                       this.setWarning( result.html );
-                       this.responseCache[ fileName ] = result.html;
+                       this.setWarning( result );
+                       this.responseCache[ fileName ] = result;
                },
 
                setWarning: function ( warning ) {
 
                                        $( '#mw-upload-thumbnail .fileinfo' ).text( info );
                                };
+                               img.onerror = function () {
+                                       // Can happen for example for invalid SVG files
+                                       clearPreview();
+                               };
                                img.src = dataURL;
                        }, mw.config.get( 'wgFileCanRotate' ) ? function ( data ) {
                                try {
index 64e5976..b4ff40a 100644 (file)
                        'import',
                        'options'
                ];
-               return $.inArray( action, csrfActions ) !== -1 ? 'csrf' : action;
+               if ( $.inArray( action, csrfActions ) !== -1 ) {
+                       mw.track( 'mw.deprecate', 'apitoken_' + action );
+                       mw.log.warn( 'Use of the "' + action + '" token is deprecated. Use "csrf" instead.' );
+                       return 'csrf';
+               }
+               return action;
        }
 
        // Pre-populate with fake ajax promises to save http requests for tokens
@@ -47,7 +52,7 @@
        promises[ defaultOptions.ajax.url ] = {};
        $.each( mw.user.tokens.get(), function ( key, value ) {
                // This requires #getToken to use the same key as user.tokens.
-               // Format: token-type + "Token" (eg. editToken, patrolToken, watchToken).
+               // Format: token-type + "Token" (eg. csrfToken, patrolToken, watchToken).
                promises[ defaultOptions.ajax.url ][ key ] = $.Deferred()
                        .resolve( value )
                        .promise( { abort: function () {} } );
                 * If we have a cached token try using that, and if it fails, blank out the
                 * cached token and start over. For example to change an user option you could do:
                 *
-                *     new mw.Api().postWithToken( 'options', {
+                *     new mw.Api().postWithToken( 'csrf', {
                 *         action: 'options',
                 *         optionname: 'gender',
                 *         optionvalue: 'female'
index 22affb1..60276cd 100644 (file)
@@ -6,7 +6,7 @@
        $.extend( mw.Api.prototype, {
 
                /**
-                * Post to API with edit token. If we have no token, get one and try to post.
+                * Post to API with csrf token. If we have no token, get one and try to post.
                 * If we have a cached token try using that, and if it fails, blank out the
                 * cached token and start over.
                 *
                 * @return {jQuery.Promise} See #post
                 */
                postWithEditToken: function ( params, ajaxOptions ) {
-                       return this.postWithToken( 'edit', params, ajaxOptions );
+                       return this.postWithToken( 'csrf', params, ajaxOptions );
                },
 
                /**
-                * API helper to grab an edit token.
+                * API helper to grab a csrf token.
                 *
                 * @return {jQuery.Promise}
                 * @return {Function} return.done
                 * @return {string} return.done.token Received token.
                 */
                getEditToken: function () {
-                       return this.getToken( 'edit' );
+                       return this.getToken( 'csrf' );
                },
 
                /**
index bd6fa06..0af2a75 100644 (file)
@@ -54,7 +54,7 @@
                                        }
                                } else {
                                        if ( value !== null ) {
-                                               deferreds.push( this.postWithToken( 'options', {
+                                               deferreds.push( this.postWithToken( 'csrf', {
                                                        formatversion: 2,
                                                        action: 'options',
                                                        optionname: name,
@@ -62,7 +62,7 @@
                                                } ) );
                                        } else {
                                                // Omitting value resets the option
-                                               deferreds.push( this.postWithToken( 'options', {
+                                               deferreds.push( this.postWithToken( 'csrf', {
                                                        formatversion: 2,
                                                        action: 'options',
                                                        optionname: name
@@ -72,7 +72,7 @@
                        }
 
                        if ( grouped.length ) {
-                               deferreds.push( this.postWithToken( 'options', {
+                               deferreds.push( this.postWithToken( 'csrf', {
                                        formatversion: 2,
                                        action: 'options',
                                        change: grouped
index a6a0d8c..3c8b3f6 100644 (file)
                                                deferred.reject( 'ok-but-empty', 'No response from API on upload attempt.' );
                                        } else if ( result.error ) {
                                                if ( result.error.code === 'badtoken' ) {
-                                                       api.badToken( 'edit' );
+                                                       api.badToken( 'csrf' );
                                                }
 
                                                deferred.reject( result.error.code, result );
index 9d799db..4aad2ba 100644 (file)
                         * @param {string} [moduleName] Name of currently executing module
                         * @return {jQuery.Promise}
                         */
-                       function queueModuleScript( src ) {
+                       function queueModuleScript( src, moduleName ) {
                                var r = $.Deferred();
 
                                pendingRequests.push( function () {
+                                       if ( moduleName && hasOwn.call( registry, moduleName ) ) {
+                                               window.require = mw.loader.require;
+                                               window.module = registry[ moduleName ].module;
+                                       }
                                        addScript( src ).always( function () {
+                                               // Clear environment
+                                               delete window.require;
+                                               delete window.module;
                                                r.resolve();
 
                                                // Start the next one (if any)
index 9b3458b..2ad79eb 100644 (file)
                $oouiNodes = $( '[data-ooui]' );
                if ( $oouiNodes.length ) {
                        // FIXME: We should only load the widgets that are being infused
-                       mw.loader.using( [ 'mediawiki.widgets', 'mediawiki.widgets.UserInputWidget' ] ).done( function () {
+                       mw.loader.using( [
+                               'mediawiki.widgets',
+                               'mediawiki.widgets.UserInputWidget',
+                               'mediawiki.widgets.SearchInputWidget'
+                       ] ).done( function () {
                                $oouiNodes.each( function () {
                                        OO.ui.infuse( this );
                                } );
diff --git a/resources/src/moment-global.js b/resources/src/moment-global.js
new file mode 100644 (file)
index 0000000..ba01a24
--- /dev/null
@@ -0,0 +1,2 @@
+// Back-compat: Export module as global
+window.moment = module.exports;
diff --git a/resources/src/oojs-global.js b/resources/src/oojs-global.js
new file mode 100644 (file)
index 0000000..de156f0
--- /dev/null
@@ -0,0 +1,2 @@
+// Back-compat: Export module as global
+window.OO = module.exports;
diff --git a/tests/phpunit/includes/HtmlFormatterTest.php b/tests/phpunit/includes/HtmlFormatterTest.php
deleted file mode 100644 (file)
index ab5219c..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-
-/**
- * @group HtmlFormatter
- */
-class HtmlFormatterTest extends MediaWikiTestCase {
-
-       /**
-        * Use TidySupport to check whether we should use $wgTidyInternal.
-        *
-        * The Tidy extension in HHVM does not support error text return, so it is
-        * nominally usable, but does not pass tests which require error text from
-        * Tidy.
-        */
-       protected function setUp() {
-               parent::setUp();
-               $tidySupport = new TidySupport();
-               $this->setMwGlobals( 'wgTidyInternal', $tidySupport->isInternal() );
-       }
-
-       /**
-        * @dataProvider getHtmlData
-        *
-        * @param string $input
-        * @param string $expectedText
-        * @param array $expectedRemoved
-        * @param callable|bool $callback
-        */
-       public function testTransform( $input, $expectedText,
-               $expectedRemoved = [], $callback = false
-       ) {
-               $input = self::normalize( $input );
-               $formatter = new HtmlFormatter( HtmlFormatter::wrapHTML( $input ) );
-               if ( $callback ) {
-                       $callback( $formatter );
-               }
-               $removedElements = $formatter->filterContent();
-               $html = $formatter->getText();
-               $removed = [];
-               foreach ( $removedElements as $removedElement ) {
-                       $removed[] = self::normalize( $formatter->getText( $removedElement ) );
-               }
-               $expectedRemoved = array_map( 'self::normalize', $expectedRemoved );
-
-               $this->assertValidHtmlSnippet( $html );
-               $this->assertEquals( self::normalize( $expectedText ), self::normalize( $html ) );
-               $this->assertEquals( asort( $expectedRemoved ), asort( $removed ) );
-       }
-
-       private static function normalize( $s ) {
-               return str_replace( "\n", '',
-                       str_replace( "\r", '', $s ) // "yay" to Windows!
-               );
-       }
-
-       public function getHtmlData() {
-               $removeImages = function ( HtmlFormatter $f ) {
-                       $f->setRemoveMedia();
-               };
-               $removeTags = function ( HtmlFormatter $f ) {
-                       $f->remove( [ 'table', '.foo', '#bar', 'div.baz' ] );
-               };
-               $flattenSomeStuff = function ( HtmlFormatter $f ) {
-                       $f->flatten( [ 's', 'div' ] );
-               };
-               $flattenEverything = function ( HtmlFormatter $f ) {
-                       $f->flattenAllTags();
-               };
-               return [
-                       // remove images if asked
-                       [
-                               '<img src="/foo/bar.jpg" alt="Blah"/>',
-                               '',
-                               [ '<img src="/foo/bar.jpg" alt="Blah">' ],
-                               $removeImages,
-                       ],
-                       // basic tag removal
-                       [
-                               // @codingStandardsIgnoreStart Ignore long line warnings.
-                               '<table><tr><td>foo</td></tr></table><div class="foo">foo</div><div class="foo quux">foo</div><span id="bar">bar</span>
-<strong class="foo" id="bar">foobar</strong><div class="notfoo">test</div><div class="baz"/>
-<span class="baz">baz</span>',
-                               // @codingStandardsIgnoreEnd
-                               '<div class="notfoo">test</div>
-<span class="baz">baz</span>',
-                               [
-                                       '<table><tr><td>foo</td></tr></table>',
-                                       '<div class="foo">foo</div>',
-                                       '<div class="foo quux">foo</div>',
-                                       '<span id="bar">bar</span>',
-                                       '<strong class="foo" id="bar">foobar</strong>',
-                                       '<div class="baz"/>',
-                               ],
-                               $removeTags,
-                       ],
-                       // don't flatten tags that start like chosen ones
-                       [
-                               '<div><s>foo</s> <span>bar</span></div>',
-                               'foo <span>bar</span>',
-                               [],
-                               $flattenSomeStuff,
-                       ],
-                       // total flattening
-                       [
-                               '<div style="foo">bar<sup>2</sup></div>',
-                               'bar2',
-                               [],
-                               $flattenEverything,
-                       ],
-                       // UTF-8 preservation and security
-                       [
-                               '<span title="&quot; \' &amp;">&lt;Тест!&gt;</span> &amp;&lt;&#38;&#0038;&#x26;&#x026;',
-                               '<span title="&quot; \' &amp;">&lt;Тест!&gt;</span> &amp;&lt;&amp;&amp;&amp;&amp;',
-                               [],
-                               $removeTags, // Have some rules to trigger a DOM parse
-                       ],
-                       // https://phabricator.wikimedia.org/T55086
-                       [
-                               'Foo<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>'
-                                       . ' <a href="/wiki/Bar" title="Bar" class="mw-redirect">Bar</a>',
-                               'Foo<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>'
-                                       . ' <a href="/wiki/Bar" title="Bar" class="mw-redirect">Bar</a>',
-                       ],
-               ];
-       }
-
-       public function testQuickProcessing() {
-               $f = new MockHtmlFormatter( 'foo' );
-               $f->filterContent();
-               $this->assertFalse( $f->hasDoc, 'HtmlFormatter should not needlessly parse HTML' );
-       }
-}
-
-class MockHtmlFormatter extends HtmlFormatter {
-       public $hasDoc = false;
-
-       public function getDoc() {
-               $this->hasDoc = true;
-               return parent::getDoc();
-       }
-}
index 2f63ca8..8d4a347 100644 (file)
@@ -169,7 +169,7 @@ class OutputPageTest extends MediaWikiTestCase {
                        [
                                [ 'test.quux', ResourceLoaderModule::TYPE_COMBINED ],
                                "<script>(window.RLQ=window.RLQ||[]).push(function(){"
-                                       . "mw.loader.implement(\"test.quux\",function($,jQuery){"
+                                       . "mw.loader.implement(\"test.quux\",function($,jQuery,require,module){"
                                        . "mw.test.baz({token:123});},{\"css\":[\".mw-icon{transition:none}"
                                        . "\"]});});</script>"
                        ],
index 9dd38df..414f3b6 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 
 /**
  * @author Addshore
index 6369b33..1d86fb4 100644 (file)
@@ -74,7 +74,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
                        self::$lastNotifyArgs[3] );
                $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( 0, self::$lastNotifyArgs[5] );
@@ -94,7 +94,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
                        self::$lastNotifyArgs[3] );
                $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( 0, self::$lastNotifyArgs[5] );
@@ -115,7 +115,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ', 0)',
+               $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
                        self::$lastNotifyArgs[3] );
                $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
@@ -136,7 +136,7 @@ class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
                $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
                $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
                $this->assertEquals( 'UTSysop', self::$lastNotifyArgs[2]->getName() );
-               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ', 0)',
+               $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
                        self::$lastNotifyArgs[3] );
                $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
                $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
index ac75e55..3309352 100644 (file)
@@ -225,8 +225,8 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        Title::newFromText( 'Baz' ),
                        [ [
                                'Baz',
-                               '[[:Template:TestingTemplate]] and [[Special:WhatLinksHere/Template:TestingTemplate|2 pages]] '
-                               . 'added to category'
+                               '[[:Template:TestingTemplate]] added to category, ' .
+                               '[[Special:WhatLinksHere/Template:TestingTemplate|this page is included within other pages]]'
                        ] ]
                );
        }
index 3c648f9..600a36f 100644 (file)
@@ -23,34 +23,36 @@ class JobTest extends MediaWikiTestCase {
                        ->method( '__toString' )
                        ->will( $this->returnValue( '{STRING_OBJ_VAL}' ) );
 
+               $requestId = 'requestId=' . WebRequest::getRequestId();
+
                return [
                        [
                                $this->getMockJob( false ),
-                               'someCommand '
+                               'someCommand  ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ 'key' => 'val' ] ),
-                               'someCommand  key=val'
+                               'someCommand  key=val ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ 'key' => [ 'inkey' => 'inval' ] ] ),
-                               'someCommand  key={"inkey":"inval"}'
+                               'someCommand  key={"inkey":"inval"} ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ 'val1' ] ),
-                               'someCommand  0=val1'
+                               'someCommand  0=val1 ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ 'val1', 'val2' ] ),
-                               'someCommand  0=val1 1=val2'
+                               'someCommand  0=val1 1=val2 ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ new stdClass() ] ),
-                               'someCommand  0=object(stdClass)'
+                               'someCommand  0=object(stdClass) ' . $requestId
                        ],
                        [
                                $this->getMockJob( [ $mockToStringObj ] ),
-                               'someCommand  0={STRING_OBJ_VAL}'
+                               'someCommand  0={STRING_OBJ_VAL} ' . $requestId
                        ],
                        [
                                $this->getMockJob( [
@@ -73,7 +75,8 @@ class JobTest extends MediaWikiTestCase {
                                'rootJobSignature=45868e99bba89064e4483743ebb9b682ef95c1a7 ' .
                                'rootJobTimestamp=20160309110158 masterPos=' .
                                '{"file":"db1023-bin.001288","pos":"308257743","asOfTime":1457521464.3814} ' .
-                               'triggeredRecursive=1'
+                               'triggeredRecursive=1 ' .
+                               $requestId
                        ],
                ];
        }
index 54178fe..656be38 100644 (file)
@@ -75,11 +75,11 @@ class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
                $removedRevId = $this->editPageText( 'Blank' );
 
                $this->assertEquals(
-                       '(recentchanges-page-added-to-category: ' . self::TITLE_STRING . ', 0)',
+                       '(recentchanges-page-added-to-category: ' . self::TITLE_STRING . ')',
                        $this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' )
                );
                $this->assertEquals(
-                       '(recentchanges-page-removed-from-category: ' . self::TITLE_STRING . ', 0)',
+                       '(recentchanges-page-removed-from-category: ' . self::TITLE_STRING . ')',
                        $this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' )
                );
        }
index 2dfed62..65cd6ed 100644 (file)
@@ -188,7 +188,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                                'messages' => [ 'example' => '' ],
                                'templates' => [],
 
-                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) {
 mw.example();
 }, {
     "css": [
@@ -207,7 +207,7 @@ mw.example();
                                'messages' => new XmlJsCode( '{}' ),
                                'templates' => [],
 
-                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) {
 mw.example();
 } );',
                        ] ],
@@ -235,7 +235,7 @@ mw.example();
                                'messages' => [ 'example' => '' ],
                                'templates' => [],
 
-                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) {
 mw.example();
 }, {}, {
     "example": ""
@@ -250,7 +250,7 @@ mw.example();
                                'messages' => new XmlJsCode( '{}' ),
                                'templates' => [ 'example.html' => '' ],
 
-                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery ) {
+                               'expected' => 'mw.loader.implement( "test.example", function ( $, jQuery, require, module ) {
 mw.example();
 }, {}, {}, {
     "example.html": ""
index d746ea1..60d4e99 100644 (file)
@@ -9,9 +9,8 @@ class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
        }
 
        /**
-        * Flaky test (T131549).
+        * Test that generated UIDs have the expected properties
         *
-        * @group Broken
         * @dataProvider provider_testTimestampedUID
         * @covers UIDGenerator::newTimestampedUID128
         * @covers UIDGenerator::newTimestampedUID88
@@ -34,19 +33,29 @@ class UIDGeneratorTest extends PHPUnit_Framework_TestCase {
                $this->assertSame( array_unique( $ids ), $ids, "All generated IDs are unique." );
 
                foreach ( $ids as $id ) {
-                       $id_bin = Wikimedia\base_convert( $id, 10, 2 );
-                       $lastId_bin = Wikimedia\base_convert( $lastId, 10, 2 );
+                       // Convert string to binary and pad to full length so we can
+                       // extract segments
+                       $id_bin = Wikimedia\base_convert( $id, 10, 2, $bits );
+                       $lastId_bin = Wikimedia\base_convert( $lastId, 10, 2, $bits );
+
+                       $timestamp_bin = substr( $id_bin, 0, $tbits );
+                       $last_timestamp_bin = substr( $lastId_bin, 0, $tbits );
 
                        $this->assertGreaterThanOrEqual(
-                               substr( $lastId_bin, 0, $tbits ),
-                               substr( $id_bin, 0, $tbits ),
-                               "New ID timestamp ($id_bin) >= prior one ($lastId_bin)." );
+                               $last_timestamp_bin,
+                               $timestamp_bin,
+                               "timestamp ($timestamp_bin) of current ID ($id_bin) >= timestamp ($last_timestamp_bin) " .
+                                 "of prior one ($lastId_bin)" );
+
+                       $hostbits_bin = substr( $id_bin, -$hostbits );
+                       $last_hostbits_bin = substr( $lastId_bin, -$hostbits );
 
                        if ( $hostbits ) {
                                $this->assertEquals(
-                                       substr( $id_bin, -$hostbits ),
-                                       substr( $lastId_bin, -$hostbits ),
-                                       "Host ID of ($id_bin) is same as prior one ($lastId_bin)." );
+                                       $hostbits_bin,
+                                       $last_hostbits_bin,
+                                       "Host ID ($hostbits_bin) of current ID ($id_bin) is same as host ID ($last_hostbits_bin) " .
+                                         "of prior one ($lastId_bin)." );
                        }
 
                        $lastId = $id;
index 7336618..ac83d4e 100644 (file)
@@ -53,7 +53,8 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                        }
                }
 
-               throw new MWException( "Could not determine revision id (" . $status->getWikiText() . ")" );
+               throw new MWException( "Could not determine revision id ("
+                       . $status->getWikiText( false, false, 'en' ) . ")" );
        }
 
        /**
index b7161b1..a2d76e0 100644 (file)
@@ -8,7 +8,15 @@ return [
 
        'test.sinonjs' => [
                'scripts' => [
+                       'tests/qunit/suites/resources/test.sinonjs/index.js',
                        'resources/lib/sinonjs/sinon-1.17.3.js',
+                       // We want tests to work in IE, but can't include this as it
+                       // will break the placeholders in Sinon because the hack it uses
+                       // to hijack IE globals relies on running in the global scope
+                       // and in ResourceLoader this won't be running in the global scope.
+                       // Including it results (among other things) in sandboxed timers
+                       // being broken due to Date inheritance being undefined.
+                       // 'resources/lib/sinonjs/sinon-ie-1.15.4.js',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
diff --git a/tests/qunit/data/defineCallMwLoaderTestCallback.js b/tests/qunit/data/defineCallMwLoaderTestCallback.js
new file mode 100644 (file)
index 0000000..afd886c
--- /dev/null
@@ -0,0 +1 @@
+module.exports = 'Define worked.';
diff --git a/tests/qunit/data/requireCallMwLoaderTestCallback.js b/tests/qunit/data/requireCallMwLoaderTestCallback.js
new file mode 100644 (file)
index 0000000..8bc087b
--- /dev/null
@@ -0,0 +1,2 @@
+var x = require( 'test.require.define' );
+module.exports = 'Require worked.' + x;
index 520db42..3a959a3 100644 (file)
                var api = new mw.Api(),
                        test = this;
 
-               // Get editToken for local wiki, this should not make
+               // Get csrfToken for local wiki, this should not make
                // a request as it should be retrieved from mw.user.tokens.
-               return api.getToken( 'edit' )
+               return api.getToken( 'csrf' )
                        .then( function ( token ) {
                                assert.ok( token.length, 'Got a token' );
                        }, function ( err ) {
 
                this.server.respond( [ 200, { 'Content-Type': 'application/json' }, '{ "example": "quux" }' ] );
 
-               return api.postWithToken( 'edit',
+               return api.postWithToken( 'csrf',
                                { action: 'example' },
                                {
                                        headers: {
                        .then( function () {
                                assert.equal( test.server.requests[ 0 ].requestHeaders[ 'X-Foo' ], 'Bar', 'Header sent' );
 
-                               return api.postWithToken( 'edit',
+                               return api.postWithToken( 'csrf',
                                        { action: 'example' },
                                        function () {
                                                assert.ok( false, 'This parameter cannot be a callback' );
index ce4ea8b..dd43c55 100644 (file)
                }, /is not loaded/, 'Requesting non-existent modules throws error.' );
        } );
 
+       QUnit.asyncTest( 'mw.loader require in debug mode', 1, function ( assert ) {
+               var path = mw.config.get( 'wgScriptPath' );
+               mw.loader.register( [
+                       [ 'test.require.define', '0' ],
+                       [ 'test.require.callback', '0', [ 'test.require.define' ] ]
+               ] );
+               mw.loader.implement( 'test.require.callback', [ QUnit.fixurl( path + '/tests/qunit/data/requireCallMwLoaderTestCallback.js' ) ] );
+               mw.loader.implement( 'test.require.define', [ QUnit.fixurl( path + '/tests/qunit/data/defineCallMwLoaderTestCallback.js' ) ] );
+
+               mw.loader.using( 'test.require.callback', function () {
+                       QUnit.start();
+                       var exported = mw.loader.require( 'test.require.callback' );
+                       assert.strictEqual( exported, 'Require worked.Define worked.',
+                               'module.exports worked in debug mode' );
+               }, function () {
+                       QUnit.start();
+                       assert.ok( false, 'Error callback fired while loader.using "test.require.callback" module' );
+               } );
+       } );
+
 }( mediaWiki, jQuery ) );
diff --git a/tests/qunit/suites/resources/test.sinonjs/index.js b/tests/qunit/suites/resources/test.sinonjs/index.js
new file mode 100644 (file)
index 0000000..b1be9d1
--- /dev/null
@@ -0,0 +1,3 @@
+// Hack: Disable 'module.exports' from ResourceLoader
+// (Otherwise Sinon assumes context as Node.js instead of a browser)
+module.exports = null;
index 10c2419..fca25c5 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -320,7 +320,7 @@ function wfStreamThumb( array $params ) {
                        RequestContext::getMain()->getStats()->timing( 'media.thumbnail.stream', $streamtime );
                } else {
                        wfThumbError( 500, 'Could not stream the file', null, [ 'file' => $thumbName,
-                               'path' => $thumbPath, 'error' => $status->getWikiText() ] );
+                               'path' => $thumbPath, 'error' => $status->getWikiText( false, false, 'en' ) ] );
                }
                return;
        }
@@ -366,7 +366,8 @@ function wfStreamThumb( array $params ) {
                $status = $thumb->streamFileWithStatus( $headers );
                if ( !$status->isOK() ) {
                        wfThumbError( 500, 'Could not stream the file', null, [
-                               'file' => $thumbName, 'path' => $thumbPath, 'error' => $status->getWikiText() ] );
+                               'file' => $thumbName, 'path' => $thumbPath,
+                               'error' => $status->getWikiText( false, false, 'en' ) ] );
                }
        }
 }