Merge "Improve the grammar of tooltip-search-go"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 9 Aug 2015 10:26:15 +0000 (10:26 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 9 Aug 2015 10:26:15 +0000 (10:26 +0000)
215 files changed:
RELEASE-NOTES-1.26
autoload.php
composer.json
docs/extension.schema.json
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MWNamespace.php
includes/OutputPage.php
includes/Sanitizer.php
includes/Status.php
includes/User.php
includes/actions/WatchAction.php
includes/api/ApiFormatJson.php
includes/api/ApiLogin.php
includes/api/ApiQueryInfo.php
includes/api/i18n/eu.json
includes/api/i18n/fi.json
includes/api/i18n/gl.json
includes/api/i18n/hu.json
includes/api/i18n/ksh.json
includes/api/i18n/lb.json
includes/api/i18n/pl.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/context/DerivativeContext.php
includes/context/MutableContext.php [new file with mode: 0644]
includes/context/RequestContext.php
includes/dao/DBAccessObjectUtils.php [new file with mode: 0644]
includes/db/Database.php
includes/db/DatabaseSqlite.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/file/File.php
includes/installer/i18n/ia.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/mg.json
includes/installer/i18n/nap.json
includes/installer/i18n/uk.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/jobs/EnqueueJob.php
includes/libs/BufferingStatsdDataFactory.php
includes/libs/MultiHttpClient.php
includes/libs/SamplingStatsdClient.php [new file with mode: 0644]
includes/libs/objectcache/APCBagOStuff.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/EmptyBagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/ReplicatedBagOStuff.php
includes/libs/objectcache/WinCacheBagOStuff.php
includes/libs/objectcache/XCacheBagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/skins/Skin.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListusers.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWhatlinkshere.php
languages/i18n/af.json
languages/i18n/an.json
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/azb.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/gom-deva.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/luz.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mt.json
languages/i18n/myv.json
languages/i18n/mzn.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pdc.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sah.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/vec.json
languages/i18n/war.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/messages/MessagesAzb.php
maintenance/dev/includes/php.sh [changed mode: 0755->0644]
maintenance/dev/includes/require-php.sh [changed mode: 0755->0644]
maintenance/jsduck/categories.json
maintenance/jsduck/eg-iframe.html
maintenance/refreshLinks.php
resources/Resources.php
resources/src/mediawiki.action/mediawiki.action.edit.stash.js
resources/src/mediawiki.legacy/ajax.js [deleted file]
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/src/mediawiki.page/mediawiki.page.startup.js
resources/src/mediawiki.page/mediawiki.page.watch.ajax.js
resources/src/mediawiki.special/mediawiki.special.preferences.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.unwatchedPages.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less
resources/src/mediawiki/mediawiki.Upload.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.css
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.notify.js
resources/src/startup.js
tests/parser/parserTests.txt
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiRevisionDeleteTest.php
tests/phpunit/includes/api/ApiUnblockTest.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
tests/phpunit/includes/libs/SamplingStatsdClientTest.php [new file with mode: 0644]
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php
tests/qunit/data/testrunner.js
thumb.php

index fc0e752..b470272 100644 (file)
@@ -16,6 +16,12 @@ production.
   use the 'rawcontinue' parameter to receive raw query-continue data, but the
   new style is encouraged as it's harder to implement incorrectly.
 * Deprecated API formats dump and wddx have been completely removed.
+* (T7645) The "Signature" button on the edit toolbar is now hidden by default
+  in non-talk namespaces. A new configuration variable,
+  $wgExtraSignatureNamespaces, controls in which subject (non-talk) namespaces
+  the "Signature" button on the edit toolbar will be displayed.
+* $wgResourceLoaderUseESI was deprecated and removed. This was an experimental
+  feature that was never enabled by default.
 
 === New features in 1.26 ===
 * (T51506) Now action=info gives estimates of actual watchers for a page.
@@ -135,6 +141,8 @@ changes to languages because of Phabricator reports.
 * SpecialPageFactory::setGroup was removed (deprecated in 1.21).
 * SpecialPageFactory::getGroup was removed (deprecated in 1.21).
 * DatabaseBase::ignoreErrors() is now protected.
+* BREAKING CHANGE: mediawiki.legacy.ajax has been removed, following
+  a lengthy deprecation period.
 
 == Compatibility ==
 
index 911c7c8..a6c7488 100644 (file)
@@ -279,6 +279,7 @@ $wgAutoloadLocalClasses = array(
        'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
        'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php',
        'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php',
+       'DBAccessObjectUtils' => __DIR__ . '/includes/dao/DBAccessObjectUtils.php',
        'DBConnRef' => __DIR__ . '/includes/db/DBConnRef.php',
        'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php',
        'DBError' => __DIR__ . '/includes/db/DatabaseError.php',
@@ -799,6 +800,7 @@ $wgAutoloadLocalClasses = array(
        'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php',
        'MultiWriteBagOStuff' => __DIR__ . '/includes/objectcache/MultiWriteBagOStuff.php',
        'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
+       'MutableContext' => __DIR__ . '/includes/context/MutableContext.php',
        'MwSql' => __DIR__ . '/maintenance/sql.php',
        'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php',
        'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
@@ -1057,6 +1059,7 @@ $wgAutoloadLocalClasses = array(
        'SQLiteField' => __DIR__ . '/includes/db/DatabaseSqlite.php',
        'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
        'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+       'SamplingStatsdClient' => __DIR__ . '/includes/libs/SamplingStatsdClient.php',
        'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
        'SavepointPostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
        'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php',
index 9095355..00411a9 100644 (file)
@@ -61,7 +61,6 @@
                "pre-install-cmd": "ComposerHookHandler::onPreInstall"
        },
        "config": {
-               "classmap-authoritative": true,
                "prepend-autoloader": false,
                "optimize-autoloader": true
        },
index c9f629c..1d78ecc 100644 (file)
                                                                "bottom",
                                                                "top"
                                                        ]
+                                               },
+                                               "templates": {
+                                                       "type": "object",
+                                                       "description": "Templates to be loaded for client-side usage"
                                                }
                                        }
                                }
                        "description": "Registry of factory functions to create Config objects"
                },
                "namespaces": {
-                       "type": "object",
+                       "type": "array",
                        "description": "Method to add extra namespaces",
-                       "properties": {
-                               "id": {
-                                       "type": "integer"
-                               },
-                               "constant": {
-                                       "type": "string"
-                               },
-                               "name": {
-                                       "type": "string"
-                               },
-                               "gender": {
-                                       "type": "object",
-                                       "properties": {
-                                               "male": {
-                                                       "type": "string"
-                                               },
-                                               "female": {
-                                                       "type": "string"
+                       "items": {
+                               "type": "object",
+                               "properties": {
+                                       "id": {
+                                               "type": "integer"
+                                       },
+                                       "constant": {
+                                               "type": "string"
+                                       },
+                                       "name": {
+                                               "type": "string"
+                                       },
+                                       "gender": {
+                                               "type": "object",
+                                               "properties": {
+                                                       "male": {
+                                                               "type": "string"
+                                                       },
+                                                       "female": {
+                                                               "type": "string"
+                                                       }
                                                }
+                                       },
+                                       "subpages": {
+                                               "type": "boolean",
+                                               "default": false
+                                       },
+                                       "content": {
+                                               "type": "boolean",
+                                               "default": false
+                                       },
+                                       "defaultcontentmodel": {
+                                               "type": "string"
+                                       },
+                                       "protection": {
+                                               "type": ["string", "array"],
+                                               "description": "Userright(s) required to edit in this namespace"
+                                       },
+                                       "capitallinkoverride": {
+                                               "type": "boolean",
+                                               "description": "Set $wgCapitalLinks on a per-namespace basis"
                                        }
                                },
-                               "subpages": {
-                                       "type": "boolean",
-                                       "default": false
-                               },
-                               "content": {
-                                       "type": "boolean",
-                                       "default": false
-                               },
-                               "defaultcontentmodel": {
-                                       "type": "string"
-                               }
+                               "required": ["id", "constant", "name"]
                        }
                },
                "TrackingCategories": {
                },
                "config": {
                        "type": "object",
-                       "description": "Configuration options for this extension"
+                       "description": "Configuration options for this extension",
+                       "patternProperties": {
+                               "^[a-zA-Z_\u007f-\u00ff][a-zA-Z0-9_\u007f-\u00ff]*$": {
+                                       "type": ["object", "array", "string", "integer", "null", "boolean"],
+                                       "properties": {
+                                               "_merge_strategy": {
+                                                       "type": "string",
+                                                       "enum": [
+                                                               "array_merge_recursive",
+                                                               "array_plus_2d",
+                                                               "array_plus",
+                                                               "array_merge"
+                                                       ],
+                                                       "default": "array_merge"
+                                               }
+                                       }
+                               }
+                       }
                },
                "ParserTestFiles": {
                        "type": "array",
index 2517bc5..19d4b89 100644 (file)
@@ -3510,13 +3510,6 @@ $wgResourceLoaderMaxage = array(
  */
 $wgResourceLoaderDebug = false;
 
-/**
- * Enable embedding of certain resources using Edge Side Includes. This will
- * improve performance but only works if there is something in front of the
- * web server (e..g a Squid or Varnish server) configured to process the ESI.
- */
-$wgResourceLoaderUseESI = false;
-
 /**
  * Put each statement on its own line when minifying JavaScript. This makes
  * debugging in non-debug mode a bit easier.
@@ -3531,28 +3524,27 @@ $wgResourceLoaderMinifierStatementsOnOwnLine = false;
 $wgResourceLoaderMinifierMaxLineLength = 1000;
 
 /**
- * Whether to include the mediawiki.legacy JS library (old wikibits.js), and its
- * dependencies.
+ * Whether to ensure the mediawiki.legacy library is loaded before other modules.
+ *
+ * @deprecated since 1.26: Always declare dependencies.
  */
 $wgIncludeLegacyJavaScript = true;
 
 /**
- * Whether to preload the mediawiki.util module as blocking module in the top
- * queue.
+ * Whether to ensure the mediawiki.util is loaded before other modules.
  *
- * Before MediaWiki 1.19, modules used to load slower/less asynchronous which
- * allowed modules to lack dependencies on 'popular' modules that were likely
- * loaded already.
+ * Before MediaWiki 1.19, modules used to load less asynchronous which allowed
+ * modules to lack dependencies on 'popular' modules that were likely loaded already.
  *
  * This setting is to aid scripts during migration by providing mediawiki.util
- * unconditionally (which was the most commonly missed dependency).
- * It doesn't cover all missing dependencies obviously but should fix most of
- * them.
+ * unconditionally (which was the most commonly missed dependency). It doesn't
+ * cover all missing dependencies obviously but should fix most of them.
  *
  * This should be removed at some point after site/user scripts have been fixed.
  * Enable this if your wiki has a large amount of user/site scripts that are
  * lacking dependencies.
- * @todo Deprecate
+ *
+ * @deprecated since 1.26: Always declare dependencies.
  */
 $wgPreloadJavaScriptMwUtil = false;
 
@@ -3969,6 +3961,15 @@ $wgTrackingCategories = array();
  */
 $wgContentNamespaces = array( NS_MAIN );
 
+/**
+ * Array of namespaces, in addition to the talk namespaces, where signatures
+ * (~~~~) are likely to be used. This determines whether to display the
+ * Signature button on the edit toolbar, and may also be used by extensions.
+ * For example, "traditional" style wikis, where content and discussion are
+ * intermixed, could place NS_MAIN and NS_PROJECT namespaces in this array.
+ */
+$wgExtraSignatureNamespaces = array();
+
 /**
  * Max number of redirects to follow when resolving redirects.
  * 1 means only the first redirect is followed (default behavior).
index 0233b11..0ca2f80 100644 (file)
@@ -2545,7 +2545,7 @@ class EditPage {
                $wgOut->addHTML( $this->editFormTextBeforeContent );
 
                if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
-                       $wgOut->addHTML( EditPage::getEditToolbar() );
+                       $wgOut->addHTML( EditPage::getEditToolbar( $this->mTitle ) );
                }
 
                if ( $this->blankArticle ) {
@@ -3686,13 +3686,18 @@ HTML
         * Shows a bulletin board style toolbar for common editing functions.
         * It can be disabled in the user preferences.
         *
+        * @param $title Title object for the page being edited (optional)
         * @return string
         */
-       static function getEditToolbar() {
+       static function getEditToolbar( $title = null ) {
                global $wgContLang, $wgOut;
                global $wgEnableUploads, $wgForeignFileRepos;
 
                $imagesAvailable = $wgEnableUploads || count( $wgForeignFileRepos );
+               $showSignature = true;
+               if ( $title ) {
+                        $showSignature = MWNamespace::wantSignatures( $title->getNamespace() );
+               }
 
                /**
                 * $toolarray is an array of arrays each of which includes the
@@ -3760,13 +3765,13 @@ HTML
                                'sample' => wfMessage( 'nowiki_sample' )->text(),
                                'tip'    => wfMessage( 'nowiki_tip' )->text(),
                        ),
-                       array(
+                       $showSignature ? array(
                                'id'     => 'mw-editbutton-signature',
                                'open'   => '--~~~~',
                                'close'  => '',
                                'sample' => '',
                                'tip'    => wfMessage( 'sig_tip' )->text(),
-                       ),
+                       ) : false,
                        array(
                                'id'     => 'mw-editbutton-hr',
                                'open'   => "\n----\n",
index 167305d..f98a0cf 100644 (file)
@@ -24,7 +24,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
        die( "This file is part of MediaWiki, it is not a valid entry point" );
 }
 
-use Liuggio\StatsdClient\StatsdClient;
 use Liuggio\StatsdClient\Sender\SocketSender;
 use MediaWiki\Logger\LoggerFactory;
 
@@ -1259,7 +1258,7 @@ function wfLogProfilingData() {
                        $statsdHost = $statsdServer[0];
                        $statsdPort = isset( $statsdServer[1] ) ? $statsdServer[1] : 8125;
                        $statsdSender = new SocketSender( $statsdHost, $statsdPort );
-                       $statsdClient = new StatsdClient( $statsdSender, true, false );
+                       $statsdClient = new SamplingStatsdClient( $statsdSender, true, false );
                        $statsdClient->send( $context->getStats()->getBuffer() );
                } catch ( Exception $ex ) {
                        MWExceptionHandler::logException( $ex );
index bb65cdf..d6a4056 100644 (file)
@@ -1704,8 +1704,7 @@ class Linker {
        }
 
        /**
-        * Generate a table of contents from a section tree
-        * Currently unused.
+        * Generate a table of contents from a section tree.
         *
         * @param array $tree Return value of ParserOutput::getSections()
         * @param string|Language|bool $lang Language for the toc title, defaults to user language
index bd68551..731b62e 100644 (file)
@@ -296,6 +296,18 @@ class MWNamespace {
                return $index == NS_MAIN || in_array( $index, $wgContentNamespaces );
        }
 
+       /**
+        * Might pages in this namespace require the use of the Signature button on
+        * the edit toolbar?
+        *
+        * @param int $index Index to check
+        * @return bool
+        */
+       public static function wantSignatures( $index ) {
+               global $wgExtraSignatureNamespaces;
+               return self::isTalk( $index ) || in_array( $index, $wgExtraSignatureNamespaces );
+       }
+
        /**
         * Can pages in a namespace be watched?
         *
index c972045..72d8a7c 100644 (file)
@@ -1818,6 +1818,11 @@ class OutputPage extends ContextSource {
                        }
                }
 
+               // enable OOUI if requested via ParserOutput
+               if ( $parserOutput->getEnableOOUI() ) {
+                       $this->enableOOUI();
+               }
+
                // Link flags are ignored for now, but may in the future be
                // used to mark individual language links.
                $linkFlags = array();
@@ -2702,9 +2707,7 @@ class OutputPage extends ContextSource {
                        $ret .= $item . "\n";
                }
 
-               // No newline after buildCssLinks since makeResourceLoaderLink did that already
-               $ret .= $this->buildCssLinks();
-
+               $ret .= $this->buildCssLinks() . "\n";
                $ret .= $this->getHeadScripts() . "\n";
 
                foreach ( $this->mHeadItems as $item ) {
@@ -2763,19 +2766,16 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * @todo Document
+        * Construct neccecary html and loader preset states to load modules on a page.
+        *
+        * Use getHtmlFromLoaderLinks() to convert this array to HTML.
+        *
         * @param array|string $modules One or more module names
         * @param string $only ResourceLoaderModule TYPE_ class constant
-        * @param bool $useESI
-        * @param array $extraQuery Array with extra query parameters to add to each
-        *   request. array( param => value ).
-        * @param bool $loadCall If true, output an (asynchronous) mw.loader.load()
-        *   call rather than a "<script src='...'>" tag.
-        * @return string The html "<script>", "<link>" and "<style>" tags
-        */
-       public function makeResourceLoaderLink( $modules, $only, $useESI = false,
-               array $extraQuery = array(), $loadCall = false
-       ) {
+        * @param array $extraQuery [optional] Array with extra query parameters for the request
+        * @return array A list of HTML strings and array of client loader preset states
+        */
+       public function makeResourceLoaderLink( $modules, $only, array $extraQuery = array() ) {
                $modules = (array)$modules;
 
                $links = array(
@@ -2798,7 +2798,7 @@ class OutputPage extends ContextSource {
                        if ( ResourceLoader::inDebugMode() ) {
                                // Recursively call us for every item
                                foreach ( $modules as $name ) {
-                                       $link = $this->makeResourceLoaderLink( $name, $only, $useESI );
+                                       $link = $this->makeResourceLoaderLink( $name, $only, $extraQuery );
                                        $links['html'] = array_merge( $links['html'], $link['html'] );
                                        $links['states'] += $link['states'];
                                }
@@ -2813,7 +2813,6 @@ class OutputPage extends ContextSource {
                // Create keyed-by-source and then keyed-by-group list of module objects from modules list
                $sortedModules = array();
                $resourceLoader = $this->getResourceLoader();
-               $resourceLoaderUseESI = $this->getConfig()->get( 'ResourceLoaderUseESI' );
                foreach ( $modules as $name ) {
                        $module = $resourceLoader->getModule( $name );
                        # Check that we're allowed to include this module on this page
@@ -2908,40 +2907,29 @@ class OutputPage extends ContextSource {
                                $moduleContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                                $url = $resourceLoader->createLoaderURL( $source, $moduleContext, $extraQuery );
 
-                               if ( $useESI && $resourceLoaderUseESI ) {
-                                       $esi = Xml::element( 'esi:include', array( 'src' => $url ) );
-                                       if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
-                                               $link = Html::inlineStyle( $esi );
-                                       } else {
-                                               $link = Html::inlineScript( $esi );
-                                       }
+                               // Automatically select style/script elements
+                               if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
+                                       $link = Html::linkedStyle( $url );
                                } else {
-                                       // Automatically select style/script elements
-                                       if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
-                                               $link = Html::linkedStyle( $url );
-                                       } elseif ( $loadCall ) {
+                                       if ( $context->getRaw() || $isRaw ) {
+                                               // Startup module can't load itself, needs to use <script> instead of mw.loader.load
+                                               $link = Html::element( 'script', array(
+                                                       // In SpecialJavaScriptTest, QUnit must load synchronous
+                                                       'async' => !isset( $extraQuery['sync'] ),
+                                                       'src' => $url
+                                               ) );
+                                       } else {
                                                $link = ResourceLoader::makeInlineScript(
-                                                       Xml::encodeJsCall( 'mw.loader.load', array( $url, 'text/javascript', true ) )
+                                                       Xml::encodeJsCall( 'mw.loader.load', array( $url ) )
                                                );
-                                       } else {
-                                               $link = Html::linkedScript( $url );
-                                               if ( !$context->getRaw() && !$isRaw ) {
-                                                       // Wrap only=script / only=combined requests in a conditional as
-                                                       // browsers not supported by the startup module would unconditionally
-                                                       // execute this module. Otherwise users will get "ReferenceError: mw is
-                                                       // undefined" or "jQuery is undefined" from e.g. a "site" module.
-                                                       $link = ResourceLoader::makeInlineScript(
-                                                               Xml::encodeJsCall( 'document.write', array( $link ) )
-                                                       );
-                                               }
+                                       }
 
-                                               // For modules requested directly in the html via <link> or <script>,
-                                               // tell mw.loader they are being loading to prevent duplicate requests.
-                                               foreach ( $grpModules as $key => $module ) {
-                                                       // Don't output state=loading for the startup module..
-                                                       if ( $key !== 'startup' ) {
-                                                               $links['states'][$key] = 'loading';
-                                                       }
+                                       // For modules requested directly in the html via <script> or mw.loader.load
+                                       // tell mw.loader they are being loading to prevent duplicate requests.
+                                       foreach ( $grpModules as $key => $module ) {
+                                               // Don't output state=loading for the startup module.
+                                               if ( $key !== 'startup' ) {
+                                                       $links['states'][$key] = 'loading';
                                                }
                                        }
                                }
@@ -2992,9 +2980,21 @@ class OutputPage extends ContextSource {
         * @return string HTML fragment
         */
        function getHeadScripts() {
-               // Startup - this will immediately load jquery and mediawiki modules
                $links = array();
-               $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS, true );
+
+               // Client profile classes for <html>. Allows for easy hiding/showing of UI components.
+               // Must be done synchronously on every page to avoid flashes of wrong content.
+               // Note: This class distinguishes MediaWiki-supported JavaScript from the rest.
+               // The "rest" includes browsers that support JavaScript but not supported by our runtime.
+               // For the performance benefit of the majority, this is added unconditionally here and is
+               // then fixed up by the startup module for unsupported browsers.
+               $links[] = Html::inlineScript(
+                       'document.documentElement.className = document.documentElement.className'
+                       . '.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );'
+               );
+
+               // Startup - this provides the client with the module manifest and loads jquery and mediawiki base modules
+               $links[] = $this->makeResourceLoaderLink( 'startup', ResourceLoaderModule::TYPE_SCRIPTS );
 
                // Load config before anything else
                $links[] = ResourceLoader::makeInlineScript(
@@ -3025,7 +3025,7 @@ class OutputPage extends ContextSource {
                );
 
                if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
-                       $links[] = $this->getScriptsForBottomQueue( true );
+                       $links[] = $this->getScriptsForBottomQueue();
                }
 
                return self::getHtmlFromLoaderLinks( $links );
@@ -3038,23 +3038,21 @@ class OutputPage extends ContextSource {
         * 'bottom', legacy scripts ($this->mScripts), user preferences, site JS
         * and user JS.
         *
-        * @param bool $inHead If true, this HTML goes into the "<head>",
-        *   if false it goes into the "<body>".
+        * @param bool $unused Previously used to let this method change its output based
+        *  on whether it was called by getHeadScripts() or getBottomScripts().
         * @return string
         */
-       function getScriptsForBottomQueue( $inHead ) {
+       function getScriptsForBottomQueue( $unused = null ) {
                // Scripts "only" requests marked for bottom inclusion
                // If we're in the <head>, use load() calls rather than <script src="..."> tags
                $links = array();
 
                $links[] = $this->makeResourceLoaderLink( $this->getModuleScripts( true, 'bottom' ),
-                       ResourceLoaderModule::TYPE_SCRIPTS, /* $useESI = */ false, /* $extraQuery = */ array(),
-                       /* $loadCall = */ $inHead
+                       ResourceLoaderModule::TYPE_SCRIPTS
                );
 
                $links[] = $this->makeResourceLoaderLink( $this->getModuleStyles( true, 'bottom' ),
-                       ResourceLoaderModule::TYPE_STYLES, /* $useESI = */ false, /* $extraQuery = */ array(),
-                       /* $loadCall = */ $inHead
+                       ResourceLoaderModule::TYPE_STYLES
                );
 
                // Modules requests - let the client calculate dependencies and batch requests as it likes
@@ -3062,7 +3060,7 @@ class OutputPage extends ContextSource {
                $modules = $this->getModules( true, 'bottom' );
                if ( $modules ) {
                        $links[] = ResourceLoader::makeInlineScript(
-                               Xml::encodeJsCall( 'mw.loader.load', array( $modules, null, true ) )
+                               Xml::encodeJsCall( 'mw.loader.load', array( $modules ) )
                        );
                }
 
@@ -3080,8 +3078,8 @@ class OutputPage extends ContextSource {
                ) {
                        // We're on a preview of a JS subpage. Exclude this page from the user module (T28283)
                        // and include the draft contents as a raw script instead.
-                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED, false,
-                               array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() ), $inHead
+                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED,
+                               array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() )
                        );
                        // Load the previewed JS
                        $links[] = ResourceLoader::makeInlineScript(
@@ -3105,15 +3103,11 @@ class OutputPage extends ContextSource {
                        // the excluded subpage.
                } else {
                        // Include the user module normally, i.e., raw to avoid it being wrapped in a closure.
-                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED,
-                               /* $useESI = */ false, /* $extraQuery = */ array(), /* $loadCall = */ $inHead
-                       );
+                       $links[] = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_COMBINED );
                }
 
                // Group JS is only enabled if site JS is enabled.
-               $links[] = $this->makeResourceLoaderLink( 'user.groups', ResourceLoaderModule::TYPE_COMBINED,
-                       /* $useESI = */ false, /* $extraQuery = */ array(), /* $loadCall = */ $inHead
-               );
+               $links[] = $this->makeResourceLoaderLink( 'user.groups', ResourceLoaderModule::TYPE_COMBINED );
 
                return self::getHtmlFromLoaderLinks( $links );
        }
@@ -3126,17 +3120,11 @@ class OutputPage extends ContextSource {
                // In case the skin wants to add bottom CSS
                $this->getSkin()->setupSkinUserCss( $this );
 
-               // Optimise jQuery ready event cross-browser.
-               // This also enforces $.isReady to be true at </body> which fixes the
-               // mw.loader bug in Firefox with using document.write between </body>
-               // and the DOMContentReady event (bug 47457).
-               $html = Html::inlineScript( 'if(window.jQuery)jQuery.ready();' );
-
-               if ( !$this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
-                       $html .= $this->getScriptsForBottomQueue( false );
+               if ( $this->getConfig()->get( 'ResourceLoaderExperimentalAsyncLoading' ) ) {
+                       // Already handled by getHeadScripts()
+                       return '';
                }
-
-               return $html;
+               return  $this->getScriptsForBottomQueue();
        }
 
        /**
@@ -3671,7 +3659,7 @@ class OutputPage extends ContextSource {
                ) {
                        // We're on a preview of a CSS subpage
                        // Exclude this page from the user module in case it's in there (bug 26283)
-                       $link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES, false,
+                       $link = $this->makeResourceLoaderLink( 'user', ResourceLoaderModule::TYPE_STYLES,
                                array( 'excludepage' => $this->getTitle()->getPrefixedDBkey() )
                        );
                        $otherTags = array_merge( $otherTags, $link['html'] );
@@ -3968,21 +3956,34 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add ResourceLoader module styles for OOUI and set up the PHP implementation of it for use with
-        * MediaWiki and this OutputPage instance.
+        * Helper function to setup the PHP implementation of OOUI to use in this request.
         *
-        * @since 1.25
+        * @since 1.26
+        * @param String $skinName The Skin name to determine the correct OOUI theme
+        * @param String $dir Language direction
         */
-       public function enableOOUI() {
+       public static function setupOOUI( $skinName = '', $dir = 'ltr' ) {
                $themes = ExtensionRegistry::getInstance()->getAttribute( 'SkinOOUIThemes' );
                // Make keys (skin names) lowercase for case-insensitive matching.
                $themes = array_change_key_case( $themes, CASE_LOWER );
-               $skinName = strtolower( $this->getSkin()->getSkinName() );
                $theme = isset( $themes[ $skinName ] ) ? $themes[ $skinName ] : 'MediaWiki';
                // For example, 'OOUI\MediaWikiTheme'.
                $themeClass = "OOUI\\{$theme}Theme";
                OOUI\Theme::setSingleton( new $themeClass() );
-               OOUI\Element::setDefaultDir( $this->getLanguage()->getDir() );
+               OOUI\Element::setDefaultDir( $dir );
+       }
+
+       /**
+        * Add ResourceLoader module styles for OOUI and set up the PHP implementation of it for use with
+        * MediaWiki and this OutputPage instance.
+        *
+        * @since 1.25
+        */
+       public function enableOOUI() {
+               self::setupOOUI(
+                       strtolower( $this->getSkin()->getSkinName() ),
+                       $this->getLanguage()->getDir()
+               );
                $this->addModuleStyles( array(
                        'oojs-ui.styles',
                        'oojs-ui.styles.icons',
index ddaf1b2..387f24f 100644 (file)
@@ -1276,9 +1276,10 @@ class Sanitizer {
                        # Double-quoted
                        return $set[3];
                } elseif ( !isset( $set[2] ) ) {
-                       # In XHTML, attributes must have a value.
-                       # For 'reduced' form, return explicitly the attribute name here.
-                       return $set[1];
+                       # In XHTML, attributes must have a value so return an empty string.
+                       # See "Empty attribute syntax",
+                       # http://www.w3.org/TR/html5/syntax.html#syntax-attribute-name
+                       return "";
                } else {
                        throw new MWException( "Tag conditions not met. This should never happen and is a bug." );
                }
index fbb5daa..28af7f5 100644 (file)
@@ -281,7 +281,7 @@ class Status {
         * Otherwise, if its an array, just use the first value as the
         * message and the remaining items as the params.
         *
-        * @return string
+        * @return Message
         */
        protected function getErrorMessage( $error ) {
                if ( is_array( $error ) ) {
@@ -316,9 +316,9 @@ class Status {
        }
 
        /**
-        * Return an array with the wikitext for each item in the array.
+        * Return an array with a Message object for each error.
         * @param array $errors
-        * @return array
+        * @return Message[]
         */
        protected function getErrorMessageArray( $errors ) {
                return array_map( array( $this, 'getErrorMessage' ), $errors );
index cefbe62..665a689 100644 (file)
@@ -519,19 +519,24 @@ class User implements IDBAccessObject {
         * If the code is invalid or has expired, returns NULL.
         *
         * @param string $code Confirmation code
+        * @param int $flags User::READ_* bitfield
         * @return User|null
         */
-       public static function newFromConfirmationCode( $code ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $id = $dbr->selectField( 'user', 'user_id', array(
-                       'user_email_token' => md5( $code ),
-                       'user_email_token_expires > ' . $dbr->addQuotes( $dbr->timestamp() ),
-                       ) );
-               if ( $id !== false ) {
-                       return User::newFromId( $id );
-               } else {
-                       return null;
-               }
+       public static function newFromConfirmationCode( $code, $flags = 0 ) {
+               $db = ( $flags & self::READ_LATEST ) == self::READ_LATEST
+                       ? wfGetDB( DB_MASTER )
+                       : wfGetDB( DB_SLAVE );
+
+               $id = $db->selectField(
+                       'user',
+                       'user_id',
+                       array(
+                               'user_email_token' => md5( $code ),
+                               'user_email_token_expires > ' . $db->addQuotes( $db->timestamp() ),
+                       )
+               );
+
+               return $id ? User::newFromId( $id ) : null;
        }
 
        /**
index 9647340..8b6e329 100644 (file)
@@ -64,7 +64,7 @@ class WatchAction extends FormAction {
                $this->checkCanExecute( $user );
 
                // Must have valid token for this action/title
-               $salt = array( $this->getName(), $this->getTitle()->getDBkey() );
+               $salt = array( $this->getName(), $this->getTitle()->getPrefixedDBkey() );
 
                if ( $user->matchEditToken( $this->getRequest()->getVal( 'token' ), $salt ) ) {
                        $this->onSubmit( array() );
index 43877b7..9538842 100644 (file)
@@ -35,6 +35,15 @@ class ApiFormatJson extends ApiFormatBase {
        public function __construct( ApiMain $main, $format ) {
                parent::__construct( $main, $format );
                $this->isRaw = ( $format === 'rawfm' );
+
+               if ( $this->getMain()->getCheck( 'callback' ) ) {
+                       # T94015: jQuery appends a useless '_' parameter in jsonp mode.
+                       # Mark the parameter as used in that case to avoid a warning that's
+                       # outside the control of the end user.
+                       # (and do it here because ApiMain::reportUnusedParams() gets called
+                       # before our ::execute())
+                       $this->getMain()->getCheck( '_' );
+               }
        }
 
        public function getMimeType() {
index e3d9295..8c65310 100644 (file)
@@ -179,7 +179,7 @@ class ApiLogin extends ApiBase {
                LoggerFactory::getInstance( 'authmanager' )->info( 'Login attempt', array(
                        'event' => 'login',
                        'successful' => $authRes === LoginForm::SUCCESS,
-                       'status' => $authRes,
+                       'status' => LoginForm::$statusCodes[$authRes],
                ) );
        }
 
index c45e0ef..b05c75c 100644 (file)
@@ -37,7 +37,7 @@ class ApiQueryInfo extends ApiQueryBase {
                $fld_notificationtimestamp = false,
                $fld_preload = false, $fld_displaytitle = false;
 
-       private $params, $titles, $missing, $everything, $pageCounter;
+       private $params, $titles, $missing, $everything;
 
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
index 2bb9890..046cfa5 100644 (file)
@@ -6,6 +6,7 @@
                ]
        },
        "apihelp-block-description": "Blokeatu erabiltzaile bat.",
+       "apihelp-block-param-reason": "Blokeatzeko arrazoia.",
        "apihelp-createaccount-description": "Erabiltzaile kontu berria sortu.",
        "apihelp-createaccount-param-email": "Erabiltzailearen helbide elektronikoa (aukerakoa).",
        "apihelp-createaccount-param-realname": "Erabiltzailearen benetako izena (aukerakoa).",
@@ -30,6 +31,7 @@
        "apihelp-login-param-domain": "Domeinua (hautazkoa).",
        "apihelp-login-example-login": "Saioa hasi",
        "apihelp-move-description": "Orrialde bat mugitu",
+       "apihelp-move-param-reason": "Berrizenpenaren arrazoia.",
        "apihelp-options-example-reset": "Berrezarri hobespen guztiak.",
        "apihelp-protect-example-protect": "Orrialde bat babestu",
        "apihelp-query+allusers-param-witheditsonly": "Bakarrik zerrendatu aldaketak egin dituzten erabiltzaileak.",
index b1a7e8c..829be6d 100644 (file)
@@ -2,9 +2,12 @@
        "@metadata": {
                "authors": [
                        "Nike",
-                       "MrTapsa"
+                       "MrTapsa",
+                       "Pitke"
                ]
        },
+       "apihelp-emailuser-example-email": "Lähetä käyttäjälle <kbd>WikiSysop</kbd> sähköposti, jossa lukee <kbd>Content</kbd>.",
        "apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
+       "apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
        "apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
 }
index 442dbc7..43c71e2 100644 (file)
@@ -6,7 +6,8 @@
                        "Chairego apc",
                        "VaiPolaSombra",
                        "Banjo",
-                       "Fisterraeomar"
+                       "Fisterraeomar",
+                       "Toliño"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:API:Errors_and_warnings|API: Erros e avisos]].",
        "apihelp-opensearch-param-format": "O formato de saída.",
        "apihelp-opensearch-param-warningsaserror": "Se os avisos son recibidos con <kbd>format=json</kbd>, devolver un erro de API no canto de ignoralos.",
        "apihelp-opensearch-example-te": "Atopar páxinas que comezan por <kbd>Te</kbd>.",
-       "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou opcións con claves prefixadas con \"userjs-\" (previstas para ser usadas por scripts de usuario).",
-       "apihelp-options-param-reset": "Reiniciar preferencias ás iniciais do sitio.",
+       "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou aquelas opcións con claves prefixadas con <code>userjs-</code> (previstas para ser usadas por escrituras de usuario).",
+       "apihelp-options-param-reset": "Reinicia as preferencias ás iniciais do sitio.",
        "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
        "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). O valor non pode ter caracteres de barra vertical. Se non se indica un valor (sen u signo igual), p. ex. nomeopcion|outraopcion|..., a opción será gardada co seu valor por defecto.",
-       "apihelp-options-param-optionname": "Nome dunha opción que debe ser fixado ó valor dado por <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "Valor da opción especificada por <var>$1optionname</var>, pode conter o caracter da barra vertical.",
-       "apihelp-options-example-reset": "Restablecer tódaalas preferencias",
+       "apihelp-options-param-optionname": "O nome da opción que debe fixarse no valor dado por <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "O valor para a opción especificada por <var>$1optionname</var>. Pode conter barras verticais.",
+       "apihelp-options-example-reset": "Restablecer todas as preferencias.",
        "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
        "apihelp-paraminfo-description": "Obter información sobre módulos API.",
        "apihelp-protect-param-protections": "Lista dos niveis de protección, con formato <kbd>action=level</kbd> (p.ex. <kbd>edit=sysop</kbd>).\n\n<strong>Nota:</strong> Todas as accións que non estean listadas terán restriccións para ser eliminadas.",
        "apihelp-protect-param-expiry": "Selos de tempo de caducidade. Se só se indica un selo de tempo, usarase para todas as proteccións. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, ou <kbd>never</kbd>, para unha protección sen caducidade.",
        "apihelp-protect-param-reason": "Razón para (des)protexer.",
-       "apihelp-protect-param-cascade": "Activar protección en cascada (p. ex. protexer modelos transcluídos e imaxes usadas nesta páxina). Ignorado se ningún dos niveis de protección proporcionados soportan o uso en cascada.",
+       "apihelp-protect-param-cascade": "Activar a protección en cascada (por exemplo, protexer os modelos transcluídos e as imaxes usadas nesta páxina). Ignórase se ningún dos niveis de protección soporta a protección en cascada.",
        "apihelp-protect-param-watch": "Se se define este parámetro, engadir a páxina que se (des)protexe á lista de vixilancia do usuario actual.",
        "apihelp-protect-param-watchlist": "Engadir ou eliminar sen condicións a páxina da lista de vixiancia do usuario actual, use as preferencias ou non cambie a vixiancia.",
        "apihelp-protect-example-protect": "Protexer unha páxina",
        "apihelp-query+categorymembers-param-dir": "En que dirección ordenar.",
        "apihelp-query+categorymembers-param-start": "Selo de tempo para comezar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
        "apihelp-query+categorymembers-param-end": "Selo de tempo co que rematar o listado. Só pode usarse con <kbd>$1sort=timestamp</kbd>.",
-       "apihelp-query+categorymembers-param-starthexsortkey": "Chave de ordenación coa que comezar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
-       "apihelp-query+categorymembers-param-endhexsortkey": "Chave de ordenación coa que rematar o listado, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
-       "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da chave de ordenación coa que comezar o listado. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase <var>$1starthexsortkey</var>.",
-       "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da chave de ordenación ANTES de rematar o listado (e non a, se existe este valor entón non será incluído!). Pode usarse só con <kbd>$1sort=sortkey</kbd>. Ignórase $1endhexsortkey.",
-       "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no canto.",
-       "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no canto.",
+       "apihelp-query+categorymembers-param-starthexsortkey": "Clave de ordenación coa que comezar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-endhexsortkey": "Clave de ordenación na que rematar a lista, como se indique en <kbd>$1prop=sortkey</kbd>. Pode usarse só con <kbd>$1sort=sortkey</kbd>.",
+       "apihelp-query+categorymembers-param-startsortkeyprefix": "Prefixo da clave de ordenación co que comezar a lista. Pode usarse só con <kbd>$1sort=sortkey</kbd>. Sobrescríbese <var>$1starthexsortkey</var>.",
+       "apihelp-query+categorymembers-param-endsortkeyprefix": "Prefixo da clave de ordenación no que rematar a lista <strong>antes</strong> (e non <strong>en</strong>; se existe este valor entón non será incluído!). Pode usarse só con $1sort=sortkey. Sobrescríbese $1endhexsortkey.",
+       "apihelp-query+categorymembers-param-startsortkey": "Usar $1starthexsortkey no seu lugar.",
+       "apihelp-query+categorymembers-param-endsortkey": "Usar $1endhexsortkey no seu lugar.",
        "apihelp-query+categorymembers-example-simple": "Obter as dez primeiras páxinas de <kbd>Category:Physics</kbd>.",
        "apihelp-query+categorymembers-example-generator": "Obter a información das primeiras dez páxinas de <kbd>Category:Physics</kbd>.",
        "apihelp-query+contributors-description": "Obter a lista de contribuidores conectados e o número de contribuidores anónimos dunha páxina.",
        "apihelp-rollback-example-summary": "Desfacer as últimas edicións á páxina <kbd>Main Page</kbd> polo usuario da dirección IP <kbd>192.0.2.5</kbd> co resumo de edición <kbd>Revertindo vandalismo</kbd>, marcar esas edicións e a reversión como edicións de bot.",
        "apihelp-rsd-description": "Exportar un esquema RSD (Really Simple Discovery, Descubrimento Moi Simple).",
        "apihelp-rsd-example-simple": "Exportar o esquema RSD.",
-       "apihelp-setnotificationtimestamp-description": "Actualiza o selo de tempo de notificación das páxinas vixiadas.\n\nIsto afecta ó resalte das páxinas modificadas na lista de vixiancia e historial, e o envío de correo cando a preferencia \"Mandarme un correo cando cambie unha páxina da miña lista de vixiancia\" está activa.",
+       "apihelp-setnotificationtimestamp-description": "Actualizar a data e hora da notificación das páxinas vixiadas.\n\nIsto afecta ao realce das páxinas modificadas na lista de vixiancia e no historial, e ao envío de correos cando a preferencia \"{{int:tog-enotifwatchlistpages}}\" está activada.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Traballar en tódalas páxinas vixiadas.",
        "apihelp-setnotificationtimestamp-param-timestamp": "Selo de tempo ó que fixar a notificación.",
        "apihelp-setnotificationtimestamp-param-torevid": "Modificación á que fixar o selo de tempo de modificación (só unha páxina).",
        "apihelp-tag-param-add": "Etiquetas a engadir. Só poden engadirse etiquetas definidas manualmente.",
        "apihelp-tag-param-remove": "Etiquetas a eliminar. Só se poden eliminar as etiquetas definidas manualmente ou que non teñen ningunha definición.",
        "apihelp-tag-param-reason": "Razón para o cambio.",
-       "apihelp-tag-example-rev": "Engadir a marca <kbd>vandalismo</kbd> á modificación con identificador 123 sen indicar unha razón.",
+       "apihelp-tag-example-rev": "Engadir a etiqueta <kbd>vandalismo</kbd> á revisión con identificador 123 sen indicar un motivo",
        "apihelp-tag-example-log": "Eliminar a etiqueta <kbd>publicidade</kbd> da entrada do rexistro con identificador 123 co motivo <kbd>aplicada incorrectamente</kbd>",
        "apihelp-tokens-description": "Obter os identificadores para accións de modificación de datos.\n\nEste módulo está obsoleto e foi reemprazado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-tokens-param-type": "Tipos de identificadores a consultar.",
index e36d585..7e6ecc4 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Csega",
                        "Dorgan",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "ViDam"
                ]
        },
        "apihelp-main-param-action": "Milyen műveletet hajtson végre.",
@@ -18,7 +19,7 @@
        "apihelp-block-param-nocreate": "Új regisztráció megakadályozása",
        "apihelp-createaccount-param-name": "Felhasználónév.",
        "apihelp-delete-description": "Lap törlése.",
-       "apihelp-delete-example-simple": "Kezdőlap törlése.",
+       "apihelp-delete-example-simple": "<kbd>Kezdőlap</kbd> törlése.",
        "apihelp-edit-example-edit": "Lap szerkesztése",
        "apihelp-expandtemplates-param-title": "Lap címe.",
        "apihelp-userrights-param-userid": "Felhasználói azonosító."
index 31d0561..f71d29d 100644 (file)
@@ -47,6 +47,7 @@
        "apihelp-createaccount-description": "Ene neue Zohjang för ene Metmaacher aanlähje.",
        "apihelp-createaccount-param-name": "Der Nahme för dä Metmaacher.",
        "apihelp-createaccount-param-password": "Et Paßwoot (Weed ävver it jebruc un övverjange, wann <code lang=\"en\" xml:lang=\"en\"><var>$1mailpassword</var></code> jesaz es)",
+       "apihelp-createaccount-param-domain": "De Domäijn för de Zohjangsdaht vun ußerhallef beschtähtech ze krijje. Kam_mer fott_lohße.",
        "apihelp-createaccount-param-token": "Der Makkehrongsschlößel för ene Zohjang aanzelähje, dä mer bei de eezde Aanfrohch krääje hät.",
        "apihelp-createaccount-param-email": "Däm Metmaacher sing Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i>, kann och fott bliive.",
        "apihelp-createaccount-param-realname": "Dämm Metmaacher singe reeschtejje Nahme - kann fott blihve.",
        "apihelp-options-param-reset": "Säz de Enschtällonge op dem Wikki singe Standatt.",
        "apihelp-options-param-optionname": "Dä Nahme vun ene Enschtällong, di op dä Wäät jesaz wähde sulle, dä „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionvalue</var>“ aanjitt.",
        "apihelp-options-param-optionvalue": "Dä Wäät vun dä Enschtällong, di vun „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1optionname</var>“ aanjejovve weed. Kann Sänkrääschte Schresche („|“) ännthallde.",
-       "apihelp-options-example-reset": "Alle enschtälloonge retuur schtälle.",
+       "apihelp-options-example-reset": "Alle Enschtälloonge retuhr schtälle.",
        "apihelp-options-example-change": "Donn de „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">hideminor</kbd>“ Enschtällonge ändere.",
        "apihelp-options-example-complex": "Donn alle Enschtällonge op der Schtandatt säze, dann säz „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">skin</kbd>“ un „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">nickname</kbd>“.",
        "apihelp-paraminfo-description": "Holl Aanjahbe övver dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ier Moduhle.",
        "apihelp-parse-paramvalue-prop-revid": "Deiht de Kännong vun de Väsjohn vun dä jepahßde Sigg derbei.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Deiht de Övverschreff vum jepahßde Wikkitäx derbei.",
        "apihelp-parse-paramvalue-prop-modules": "Jitt dem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Delivery system in MediaWiki for the optimized run-time loading and managing of modules\">ResourceLoader</i> sing Moduhle uß, di en dä Sigg jebruch wähde. Äntwehder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">jsconfigvars</kbd>“ udder „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">encodedjsconfigvars</kbd>“ moß mer met „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">modules</kbd>“ zesamme aanforrdere.",
-       "apihelp-parse-paramvalue-prop-jsconfigvars": "Livvert de Varrejahble vun dä Ennschtällonge vum JavaSkrep, di äxtra för heh di Sigg enjesctallt sin.",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "Livvert de Varrejahble vun dä Ennschtällonge vum JavaSkrep, di äxtra för heh di Sigg enjeschtallt sin.",
        "apihelp-parse-paramvalue-prop-iwlinks": "Jitt de Engewikkilengks em jepahßde Wikkitäx uß.",
        "apihelp-parse-paramvalue-prop-wikitext": "Jitt de der ojinahl Wikkitäx us, dä jepahß woode es.",
        "apihelp-parse-paramvalue-prop-properties": "Jitt devärse Eijeschafte uß, di em jepahßde Wikkitäx faßjelaat woode sen.",
        "apihelp-query+embeddedin-param-dir": "En wälsche Reihjefollsch opleßte.",
        "apihelp-query+embeddedin-param-filterredir": "Wi de Ömleijdonge ußzottehre?",
        "apihelp-query+embeddedin-param-limit": "Wi vill Sigge ensjesammp zem ußjävve?",
+       "apihelp-query+embeddedin-example-simple": "Zeisch de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+       "apihelp-query+embeddedin-example-generator": "Holl Aanjahbe övve de Sigge, di di Schablohn „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Template:Stub</kbd>“ oprohfe.",
+       "apihelp-query+extlinks-description": "Jitt alle <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URLs</i> vun Lengks noh ußerhallef vum Wikki, ävver kein Engewiki_Lenks, vundä aanjejovve Sigge uß.",
        "apihelp-query+extlinks-param-limit": "Wi vill Lengks ußjävve?",
+       "apihelp-query+extlinks-example-simple": "Holl en Leß met Lengks noh ußerhallef vum Wikki uß dä Sigg „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Main Page</kbd>“.",
+       "apihelp-query+exturlusage-description": "Donn alle Sigge upzälle med däm aanjejovve<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> dren.",
        "apihelp-query+exturlusage-param-protocol": "Dat Schehma uß däm <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>. Wann et läddesch jelohße es un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1query</var>“ aanjejogge es, es dat Schehma „<kbd lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Transfer Protocol\">http</kbd>“. Lohß beeds dat un „<var lang=\"en\" xml:lang=\"en\" dir=\"ltr\">1query</var>“ läddesch, öm alle Lengks noh ußerhallef opzeleßte.",
+       "apihelp-query+exturlusage-param-namespace": "Dat appachtemang met dä Sigge zom opzälle.",
        "apihelp-query+exturlusage-param-limit": "Wi vill Sigge zem ußjävve?",
        "apihelp-query+filearchive-description": "Donn alle fottjeschmeße Datteije der Reih noh opzälle.",
        "apihelp-query+filearchive-param-from": "De Övverschreff vun däm Beld, woh de Leß medd aanfange sull.",
index 9f54365..8d3011c 100644 (file)
@@ -51,6 +51,8 @@
        "apihelp-move-description": "Eng Säit réckelen.",
        "apihelp-move-param-movetalk": "D'Diskussiounssäit ëmbenennen, wann et se gëtt.",
        "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+       "apihelp-options-description": "Astellunge fir den aktuelle Benotzer änneren.\n\nNëmmen Optiounen aus dem Haaptdeel (core) oder aus enger vun den installéierten Erweiderunge, oder Optioune mat Schlësselen déi viragestallt si mat <code>userjs-</code> (geduecht fir mat Benotzer-Scripte benotzt ze ginn), kënnen agestallt ginn.",
+       "apihelp-options-param-optionname": "Den Numm vun der Optioun deen op de Wäert vun <var>$1optionvalue</var> gesat gi muss",
        "apihelp-options-example-reset": "All Astellungen zrécksetzen",
        "apihelp-patrol-example-rcid": "Eng rezent Ännerung nokucken.",
        "apihelp-patrol-example-revid": "Eng Versioun nokucken.",
index e295886..b7fdf54 100644 (file)
        "apihelp-opensearch-param-format": "Format danych wyjściowych.",
        "apihelp-opensearch-example-te": "Znajdź strony zaczynające się od <kbd>Te</kbd>.",
        "apihelp-options-param-reset": "Resetuj preferencje do domyślnych.",
+       "apihelp-options-param-optionname": "Nazwa opcji, która powinna być ustawiona na wartość <var>$1optionvalue</var>.",
+       "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>, może zawierać znaki pionowej kreski.",
        "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
        "apihelp-paraminfo-description": "Zdobądź informacje o modułach API.",
        "apihelp-paraminfo-param-helpformat": "Format tekstów pomocnicznych.",
index 11d27a4..1614451 100644 (file)
        "apihelp-query+recentchanges-example-generator": "Отримати інформацію про сторінки з недавніми невідпатрульованими змінами.",
        "apihelp-query+redirects-description": "Видає усі перенаправлення на дані сторінки.",
        "apihelp-query+redirects-param-prop": "Які властивості отримати:\n;pageid:Ідентифікатор сторінки кожного перенаправлення.\n;title:Назва кожного перенаправлення.\n;fragment:Фрагмент кожного перенаправлення, якщо є.",
-       "apihelp-query+redirects-param-namespace": "Включити сторінки лише у цих просторах назв.",
-       "apihelp-query+redirects-param-limit": "Скільки перенаправлень повернути.",
-       "api-help-datatypes-header": "Типи даних"
+       "apihelp-query+redirects-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+redirects-param-limit": "Скільки перенаправлень виводити.",
+       "apihelp-query+redirects-param-show": "Показати лише елементи, які відповідають цим критеріям:\n;fragment:Показати лише перенаправлення з фрагментом.\n;!fragment:Показати лише перенаправлення без фрагмента.",
+       "apihelp-query+redirects-example-simple": "Отримати список перенаправлень на [[Main Page]].",
+       "apihelp-query+redirects-example-generator": "Отримати інформацію про всі перенаправлення на [[Main Page]].",
+       "apihelp-query+revisions-description": "Отримати інформацію про версію.\n\nМоже бути використано кількома способами:\n# Отримати дані про набір сторінок (останні версії), вказавши назви або ідентифікатори сторінок.\n# Отримати версії для однієї вказаної сторінки, використавши назви або ідентифікатори і початок, кінець чи ліміт.\n# Отримати дані про набір версій, встановивши їх ID й ідентифікатори версій.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "Може використовуватися тільки з однією сторінкою (режим #2).",
+       "apihelp-query+revisions-param-startid": "З якого ID версії почати перелік.",
+       "apihelp-query+revisions-param-endid": "Зупинити перелік версій на цьому ID версії.",
+       "apihelp-query+revisions-param-start": "З якої часової мітки версії почати перелік.",
+       "apihelp-query+revisions-param-end": "Перелічувати до цієї часової мітки.",
+       "apihelp-query+revisions-param-user": "Включати лише версій, зроблені цим користувачем.",
+       "apihelp-query+revisions-param-excludeuser": "Виключити версії, зроблені цим користувачем.",
+       "apihelp-query+revisions-param-tag": "Перелічити лише версії, позначені цією міткою.",
+       "apihelp-query+revisions-param-token": "Які токени отримати для кожної версії.",
+       "apihelp-query+revisions-example-content": "Отримати дані з вмістом останньої версії для заголовків <kbd>API</kbd> та <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-last5": "Отримати 5 останніх версії <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5": "Отримати 5 перших версій <kbd>Main Page</kbd>.",
+       "apihelp-query+revisions-example-first5-after": "Отримати 5 перших версій <kbd>Main Page</kbd>, зроблених після 2006-05-01.",
+       "apihelp-query+revisions-example-first5-not-localhost": "Отримати 5 перших версій <kbd>Main Page</kbd>, що не були зроблені анонімним користувачем <kbd>127.0.0.1</kbd>.",
+       "apihelp-query+revisions-example-first5-user": "Отримати 5 перших версій <kbd>Main Page</kbd>, що були зроблені користувачем <kbd>MediaWiki default</kbd>.",
+       "apihelp-query+revisions+base-param-prop": "Які властивості отримати для кожної версії:",
+       "apihelp-query+revisions+base-paramvalue-prop-ids": "ID версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-flags": "Позначки версії (незначні).",
+       "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Часова мітка версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-user": "Користувач, який створив версію.",
+       "apihelp-query+revisions+base-paramvalue-prop-userid": "ID користувача, який створив версію.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Довжина версії (в байтах).",
+       "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "ID моделі вмісту версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "Коментар користувача до версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Проаналізований коментар користувача до версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Текст версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-tags": "Мітки версії.",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>).",
+       "apihelp-query+revisions+base-param-limit": "Обмежити кількість версій, які буде видано.",
+       "apihelp-query+revisions+base-param-expandtemplates": "Розгорнути шаблони у вмісті версії (передбачає $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Генерувати синтаксичне дерево XML для вмісту версії (передбачає $1prop=content; замінено на <kbd>$1prop=parsetree</kbd>).",
+       "apihelp-query+revisions+base-param-parse": "Аналізувати вміст версії (передбачає $1prop=content). З причин продуктивності, якщо використовується ця опція, $1limit встановлюється як 1.",
+       "apihelp-query+revisions+base-param-section": "Витягнути вміст лише розділу з цим номером.",
+       "apihelp-query+revisions+base-param-diffto": "ID версії, з якою порівняти кожну версію. Використайте <kbd>prev</kbd>, <kbd>next</kbd> і <kbd>cur</kbd> для попередньої, наступної та поточної версій відповідно.",
+       "apihelp-query+revisions+base-param-difftotext": "Текст, з яким порівняти кожну версію. Порівнює лише обмежену кількість версій. Перевизначає <var>$1diffto</var>. Якщо вказано <var>$1section</var>, лише ця версія буде порівняна з цим текстом.",
+       "apihelp-query+revisions+base-param-contentformat": "Формат серіалізації, використаний для <var>$1difftotext</var> й очікуваний для контенту-результату.",
+       "apihelp-query+search-description": "Виконати повнотекстовий пошук.",
+       "apihelp-query+search-param-search": "Шукати назви сторінок або вміст, що співпадає з цим значенням. Ви можете використати рядок пошуку для виклику спеціальних функцій пошуку, залежно від внутрішніх установок пошуку у вікі.",
+       "apihelp-query+search-param-namespace": "Шукати лише в межах цих просторів назв.",
+       "apihelp-query+search-param-what": "Який тип пошуку виконати.",
+       "apihelp-query+search-param-info": "Які метадані отримати.",
+       "apihelp-query+search-param-prop": "Які властивості отримати:\n;size:Додає розмір сторінки в байтах.\n;wordcount:Додає кількість слів на сторінці.\n;timestamp:Додає часову мітку останнього редагування сторінки.\n;snippet:Додає проаналізований уривок сторінки.\n;titlesnippet:Додає проаналізований уривок заголовка сторінки.\n;redirectsnippet:Додає проаналізований уривок перенаправлення.\n;redirecttitle:Додає заголовок відповідного перенаправлення.\n;sectionsnippet:Додає проаналізований уривок заголовка відповідного розділу.\n;sectiontitle:Додає заголовок відповідного розділу.\n;categorysnippet:Додає проаналізований уривок відповідної категорії.\n;isfilematch:Додає перемикач, який показує, є пошук знайшов вміст файлу.\n;score:<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>",
+       "apihelp-query+search-param-limit": "Скільки всього сторінок виводити.",
+       "apihelp-query+search-param-interwiki": "Включати інтервікі в результатах пошуку, якщо доступно.",
+       "apihelp-query+search-param-backend": "Який бекенд пошуку використовувати, якщо не за замовчуванням.",
+       "apihelp-query+search-example-simple": "Шукати <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-text": "Шукати в текстах <kbd>meaning</kbd>.",
+       "apihelp-query+search-example-generator": "Отримати інформацію про сторінки, на яких знайдено <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-description": "Видати загальну інформацію про сайт.",
+       "apihelp-query+siteinfo-param-prop": "Яку інформацію отримати:\n;general:Загальна системна інформація.\n;namespaces:Список зареєстрованих просторів назв та їхні канонічні назви.\n;namespacealiases:Список зареєстрованих синонімів просторів назв.\n;specialpagealiases:Список аліасів спеціальної сторінки.\n;magicwords:Список магічних слів та їх аліасів.\n;statistics:Видає статистику сайту.\n;interwikimap:Видає карту інтервікі (за бажанням, фільтровану, за бажанням локалізовану з використанням <var>$1inlanguagecode</var>).\n;dbrepllag:Видає сервер бази даних з найбільшою затримкою відповіді.\n;usergroups:Видає групи користувачів і пов'язані дозволи.\n;libraries:Видає бібліотеки, встановлені у вікі.\n;extensions:Видає розширення, встановлені у вікі.\n;fileextensions:Видає список розширень файлів, які дозволено завантажувати.\n;rightsinfo:Видає інформацію щодо прав (ліцензії) вікі, якщо наявна.\n;restrictions:Видає інформацію про наявні типи обмежень (захисту).\n;languages:Видає список мов, які підтримує MediaWiki (за бажанням локалізовані через <var>$1inlanguagecode</var>).\n;skins:Видає список усіх доступних тем оформлення (опціонально локалізовані з використанням <var>$1inlanguagecode</var>, в іншому разі — мовою вмісту).\n;extensiontags:Видає список теґів розширення парсеру.\n;functionhooks:Видає список гуків парсерних функцій.\n;showhooks:Видає список усіх підписаних гуків (вміст <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).\n;variables:Видає список змінних ID.\n;protocols:Видає список протоколів, дозволених у зовнішніх посиланнях.\n;defaultoptions:Видає значення налаштувань користувача за замовчуванням.",
+       "apihelp-query+siteinfo-param-filteriw": "Видати лише локальні або лише нелокальні елементи карти інтервікі.",
+       "apihelp-query+siteinfo-param-showalldb": "Перелічити усі сервери баз даних, а не лише той, який робить найбільшу затримку.",
+       "apihelp-query+siteinfo-param-numberingroup": "Перераховує кількість користувачів у групах користувачів.",
+       "apihelp-query+siteinfo-param-inlanguagecode": "Код мови для локалізованих назв мов (найкращий варіант) і назв тем оформлення.",
+       "apihelp-query+siteinfo-example-simple": "Вибрати інформацію про сайт.",
+       "apihelp-query+siteinfo-example-interwiki": "Отримати список локальних інтервікі-префіксів.",
+       "apihelp-query+siteinfo-example-replag": "Перевірити поточне відставання реплікації.",
+       "apihelp-query+stashimageinfo-description": "Видає інформацію про приховані файли.",
+       "apihelp-query+stashimageinfo-param-filekey": "Ключ, який ідентифікує попереднє завантаження, що було тимчасово приховане.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Аліас для $1filekey, для зворотної сумісності.",
+       "apihelp-query+stashimageinfo-example-simple": "Видає інформацію про прихований файл.",
+       "apihelp-query+stashimageinfo-example-params": "Видає мініатюри для двох прихованих файлів.",
+       "apihelp-query+tags-description": "Перелічити мітки змін.",
+       "apihelp-query+tags-param-limit": "Максимальна кількість міток у списку.",
+       "apihelp-query+tags-param-prop": "Які властивості отримати:\n;name:Додає назву мітки.\n;displayname:Додає системне повідомлення для мітки.\n;description:Додає опис мітки.\n;hitcount:Додає кількість версій та записів журналу, які мають цю мітку.\n;defined:Показує, чи мітка визначена.\n;source:Отримує джерела мітки, що може включати <samp>extension</samp> для визначених розширеннями міток і <samp>manual</samp> для міток, які користувачі можуть застосовувати вручну.\n;active:Чи мітка ще застосовується.",
+       "apihelp-query+tags-example-simple": "Перелічити доступні мітки.",
+       "apihelp-query+templates-description": "Видає усі сторінки, які включені на вказаних сторінках.",
+       "apihelp-query+templates-param-namespace": "Показати шаблони лише у цьому просторі назв.",
+       "apihelp-query+templates-param-limit": "Скільки шаблонів виводити.",
+       "apihelp-query+templates-param-templates": "Перерахувати лише ці шаблони. Корисно для перевірки, чи певна сторінка використовує певний шаблон.",
+       "apihelp-query+templates-param-dir": "Напрямок, у якому перелічити.",
+       "apihelp-query+templates-example-simple": "Отримати шаблони, використані на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-generator": "Отримати інформацію про сторінки шаблонів, використаних на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+templates-example-namespaces": "Отримати сторінки у просторах назв {{ns:user}} і {{ns:template}}, які включені на сторінці <kbd>Main Page</kbd>.",
+       "apihelp-query+tokens-description": "Отримує токени для дій, що змінюють дані.",
+       "apihelp-query+tokens-param-type": "Типи токена для запиту.",
+       "apihelp-query+tokens-example-simple": "Отримати csrf-токен (за замовчуванням).",
+       "apihelp-query+tokens-example-types": "Отримати токен спостереження і токен патрулювання.",
+       "apihelp-query+transcludedin-description": "Знайти усі сторінки, що включають подані сторінки.",
+       "apihelp-query+transcludedin-param-prop": "Які властивості отримати:\n;pageid:ID кожної сторінки.\n;title:Назва кожної сторінки.\n;redirect:Помітка, якщо сторінка є перенаправленням.",
+       "apihelp-query+transcludedin-param-namespace": "Включати сторінки лише в цих просторах назв.",
+       "apihelp-query+transcludedin-param-limit": "Скільки результатів виводити.",
+       "apihelp-query+transcludedin-param-show": "Показати лише елементи, що відповідають цим критеріям:\n;redirect:Показати лише перенаправлення.\n;!redirect:Показати лише не перенаправлення.",
+       "apihelp-query+transcludedin-example-simple": "Отримати список сторінок, що включають <kbd>Main Page</kbd>.",
+       "apihelp-query+transcludedin-example-generator": "Отримати інформацію про сторінки, які включають <kbd>Main Page</kbd>.",
+       "apihelp-query+usercontribs-description": "Отримати всі редагування користувача.",
+       "apihelp-query+usercontribs-param-limit": "Максимальна кількість елементів внеску для виведення.",
+       "apihelp-query+usercontribs-param-start": "З якої часової мітки виводити.",
+       "apihelp-query+usercontribs-param-end": "До якої часової мітки виводити.",
+       "apihelp-query+usercontribs-param-user": "Користувачі, для яких отримати внесок.",
+       "apihelp-query+usercontribs-param-userprefix": "Отримати внесок усіх користувачів, чиї імена починаються цим значенням. Перевизначає $1user.",
+       "apihelp-query+usercontribs-param-namespace": "Перерахувати записи внеску лише в цих просторах назв.",
+       "apihelp-query+usercontribs-param-prop": "Включити додаткові відомомсті:\n;ids:Додає ID сторінки й ID версії.\n;title:Додає назву й ID простору назв сторінки.\n;timestamp:Додає часову мітку редагування.\n;comment:Додає коментар редагування.\n;parsedcomment:Додає проаналізований коментар редагування.\n;size:Додає новий розмір редагування.\n;sizediff:Додає зміну розміру порівняно з попереднім редагуванням.\n;flags:Додає прапорці редагування.\n;patrolled:Відзначає патрульовані редагування.\n;tags:Перелічує мітки редагування.",
+       "apihelp-query+usercontribs-param-show": "Показати лише елементи, що відповідають цим критеріям, наприклад, лише не незначні редагування: <kbd>$2show=!minor</kbd>.\n\nЯкщо вказано <kbd>$2show=patrolled</kbd> або <kbd>$2show=!patrolled</kbd>, версії, старіші ніж <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунда|секунди|секунд}}) не будуть показуватися.",
+       "apihelp-query+usercontribs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
+       "apihelp-query+usercontribs-param-toponly": "Виводити лише зміни, які є останньою версією.",
+       "apihelp-query+usercontribs-example-user": "Показати внесок користувача <kbd>Example</kbd>.",
+       "apihelp-query+usercontribs-example-ipprefix": "Показати внесок з усіх IP-адрес з префіксом <kbd>192.0.2.</kbd>.",
+       "apihelp-query+userinfo-description": "Отримати інформацію про поточного користувача.",
+       "apihelp-query+userinfo-param-prop": "Які саме відомості включати:\n;blockinfo:Позначає, чи поточний користувач заблокований, ким, з якої причини.\n;hasmsg:Додає мітку <samp>messages</samp>, якщо у користувача є непроглянуті повідомлення.\n;groups:Перелічує усі групи, до яких належить поточний користувач.\n;implicitgroups:Перелічує усі групи, до яких поточний користувач належить автоматично.\n;rights:Перелічує усі права, які має поточний користувач.\n;changeablegroups:Перелічує групи, у які користувач може додавати і з яких вилучати.\n;options:Перелічує усі налаштування, які поточний користувач встановив.\n;preferencestoken:<span class=\"apihelp-deprecated\">Застаріло.</span> Отримати токен зміни налаштувань поточного користувача.\n;editcount:Додає кількість редагувань поточного користувача.\n;ratelimits:Перелічує усі ліміти оцінок, застосовні до поточного користувача.\n;realname:Додає справжнє ім'я користувача.\n;email:Додає електронну пошту користувача та дату її підтвердження.\n;acceptlang:Дублює шапку <code>Accept-Language</code>, надіслану клієнтом у структурованому форматі.\n;registrationdate:Додає дату реєстрації користувача.\n;unreadcount:Додає кількість непрочитаних сторінок у списку спостереження користувача (максимально $1; видає «<samp>$2</samp>», якщо більше).",
+       "apihelp-query+userinfo-example-simple": "Отримати інформацію про поточного користувача.",
+       "apihelp-query+userinfo-example-data": "Отримати додаткову інформацію про поточного користувача.",
+       "apihelp-query+users-description": "Отримати інформацію про список користувачів.",
+       "apihelp-query+users-param-prop": "Яку інформацію включити:\n;blockinfo:Мітки про те чи є користувач заблокованим, ким, і з якою причиною.\n;groups:Перелічує всі групи, до яких належить кожен з користувачів.\n;implicitgroups:Перелічує всі групи, членом яких користувач є автоматично.\n;rights:Перелічує всі права, які має кожен з користувачів.\n;editcount:Додає лічильник редагувань користувача.\n;registration:Додає часову мітку реєстрації користувача.\n;emailable:Помічає чи хоче користувач отримувати електронну пошту через [[Special:Emailuser]].\n;gender:Помічає стать користувача. Повертає \"male\", \"female\", або \"unknown\".",
+       "apihelp-query+users-param-users": "Список користувачів, для яких отримати інформацію.",
+       "apihelp-query+users-param-token": "Використати натомість <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-query+users-example-simple": "Вивести інформацію для користувача <kbd>Example</kbd>.",
+       "apihelp-query+watchlist-description": "Отримати нещодавні зміни сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-param-allrev": "Включити декілька версій тієї з сторінки у поданому часовому діапазоні.",
+       "apihelp-query+watchlist-param-start": "Часова мітка, з якої почати перелік.",
+       "apihelp-query+watchlist-param-end": "Часова мітка завершення переліку.",
+       "apihelp-query+watchlist-param-namespace": "Відфільтрувати до змін лише у поданих просторах назв.",
+       "apihelp-query+watchlist-param-user": "Перерахувати лише зміни, зроблені цим користувачем.",
+       "apihelp-query+watchlist-param-excludeuser": "Не перераховувати зміни, зроблені цим користувачем.",
+       "apihelp-query+watchlist-param-limit": "Скільки всього видати результатів за один запит.",
+       "apihelp-query+watchlist-param-prop": "Які додаткові властивості отримати:",
+       "apihelp-query+watchlist-paramvalue-prop-ids": "Додає ID версій та ID сторінок.",
+       "apihelp-query+watchlist-paramvalue-prop-title": "Додає заголовок сторінки.",
+       "apihelp-query+watchlist-paramvalue-prop-flags": "Додає прапорці редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-user": "Додає користувача, який зробив редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-userid": "Додає ідентифікатор користувача, який зробив редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-comment": "Додає коментар редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-parsedcomment": "Додає проаналізований коментар редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-timestamp": "Додає часову мітку редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-patrol": "Позначає відпатрульовані редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-sizes": "Додає стару і нову довжину сторінки.",
+       "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+       "apihelp-query+watchlist-paramvalue-prop-loginfo": "Додає інформацію журналу, де це доречно.",
+       "apihelp-query+watchlist-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
+       "apihelp-query+watchlist-param-type": "Які типи змін показувати:\n;edit:Звичайні редагування сторінки.\n;external:Зовнішні зміни.\n;new:Створення сторінок.\n;log:Записи журналу.",
+       "apihelp-query+watchlist-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+       "apihelp-query+watchlist-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+       "apihelp-query+watchlist-example-simple": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-props": "Вибрати додаткову інформацію про верхню версію нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-allrev": "Вибрати інформацію про усі нещодавні зміни на сторінках у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-generator": "Видати інформацію про сторінку для нещодавно змінених сторінок у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-generator-rev": "Вибрати інформацію про версію для усіх нещодавніх змін на сторінках у списку спостереження поточного користувача.",
+       "apihelp-query+watchlist-example-wlowner": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження користувача <kbd>Example</kbd>.",
+       "apihelp-query+watchlistraw-description": "Отримати усі сторінки у списку спостереження поточного користувача.",
+       "apihelp-query+watchlistraw-param-namespace": "Перерахувати сторінки лише в поданих просторах назв.",
+       "apihelp-query+watchlistraw-param-limit": "Скільки всього видати результатів за один запит.",
+       "apihelp-query+watchlistraw-param-prop": "Які додаткові властивості отримати:\n;changed:Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
+       "apihelp-query+watchlistraw-param-show": "Перелічити лише елементи, які відповідають цим критеріям.",
+       "apihelp-query+watchlistraw-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
+       "apihelp-query+watchlistraw-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
+       "apihelp-query+watchlistraw-param-fromtitle": "Назва (з префіксом простору назв), з якої почати перерахування.",
+       "apihelp-query+watchlistraw-param-totitle": "Назва (з префіксом простору назв), якою закінчити перерахування.",
+       "apihelp-query+watchlistraw-example-simple": "Перелічити сторінки у списку спостереження поточного користувача.",
+       "apihelp-query+watchlistraw-example-generator": "Вибрати інформацію про сторінку для сторінок у списку спостереження поточного користувача.",
+       "apihelp-revisiondelete-description": "Вилучити або відновити версії.",
+       "apihelp-revisiondelete-param-type": "Тип здійснюваного вилучення версії.",
+       "apihelp-revisiondelete-param-target": "Назва сторінки, версію якої вилучити, якщо вимагається для цього типу.",
+       "apihelp-revisiondelete-param-ids": "Ідентифікатори версій, які слід вилучити.",
+       "apihelp-revisiondelete-param-hide": "Що приховати у кожній з версій.",
+       "apihelp-revisiondelete-param-show": "Що показати у кожній з версії.",
+       "apihelp-revisiondelete-param-suppress": "Чи приховати дані від адміністраторів так само як від усіх інших.",
+       "apihelp-revisiondelete-param-reason": "Причина вилучення або відновлення.",
+       "apihelp-revisiondelete-example-revision": "Приховати вміст версії <kbd>12345</kbd> сторінки <kbd>Main Page</kbd>.",
+       "apihelp-revisiondelete-example-log": "Приховати всі дані у записі журналу <kbd>67890</kbd> з причиною <kbd>BLP violation</kbd>.",
+       "apihelp-rollback-description": "Скасувати останнє редагування цієї сторінки.\n\nЯкщо користувач, який редагував сторінку, зробив декілька редагувань підряд, їх усі буде відкочено.",
+       "apihelp-rollback-param-title": "Назва сторінки, у якій здійснити відкіт. Не може використовуватись разом з <var>$1pageid</var>.",
+       "apihelp-rollback-param-pageid": "Ідентифікатор сторінки у якій здійснити відкіт. Не може використовуватись разом з <var>$1title</var>.",
+       "apihelp-rollback-param-user": "Ім'я користувача чиї редагування слід відкотити.",
+       "apihelp-rollback-param-summary": "Нестандартний опис редагування. Якщо порожній, буде використано опис редагування за замовчуванням.",
+       "apihelp-rollback-param-markbot": "Позначити відкинуті редагування та відкіт як редагування бота.",
+       "apihelp-rollback-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-rollback-example-simple": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені користувачем <kbd>Example</kbd>.",
+       "apihelp-rollback-example-summary": "Відкинути останні редагування сторінки <kbd>Main Page</kbd> здійснені IP-користувачем <kbd>192.0.2.5</kbd> з причиною <kbd>Reverting vandalism</kbd>, та позначити ці редагування та відкіт як редагування бота.",
+       "apihelp-rsd-description": "Експортувати як схему RSD (Really Simple Discovery).",
+       "apihelp-rsd-example-simple": "Експортувати RSD-схему.",
+       "apihelp-setnotificationtimestamp-description": "Оновити часову мітку сповіщень для сторінок, що спостерігаються.\n\nЦе зачепить підсвічування змінених сторінок у списку спостереження та історії, а також надсилання електронного листа якщо опція налаштувань «{{int:tog-enotifwatchlistpages}}» увімкнена.",
+       "apihelp-setnotificationtimestamp-param-entirewatchlist": "Опрацювати всі сторінки, що спостерігаються.",
+       "apihelp-setnotificationtimestamp-param-timestamp": "Часова мітка, яку вказати у якості часової мітки сповіщень.",
+       "apihelp-setnotificationtimestamp-param-torevid": "Версія до якої вказати часову мітку сповіщень (лише одна сторінка).",
+       "apihelp-setnotificationtimestamp-param-newerthanrevid": "Версія, до новішої від якої вказати часову мітку сповіщень (лише одна сторінка).",
+       "apihelp-setnotificationtimestamp-example-all": "Стерти статус сповіщень для всього списку спостереження.",
+       "apihelp-setnotificationtimestamp-example-page": "Стерти статус сповіщень для <kbd>Main page</kbd>.",
+       "apihelp-setnotificationtimestamp-example-pagetimestamp": "Встановити часову мітку сповіщень для <kbd>Main page</kbd> так, що всі редагування після 1 січня 2012 будуть виглядати як не переглянуті.",
+       "apihelp-setnotificationtimestamp-example-allpages": "Стерти статус сповіщень для сторінок у просторі назв <kbd>{{ns:user}}</kbd>.",
+       "apihelp-tag-description": "Додати або вилучити зміни міток з окремих версій або записів журналу.",
+       "apihelp-tag-param-rcid": "Один або більше ідентифікаторів останніх змін, до яких додати або вилучити мітки.",
+       "apihelp-tag-param-revid": "Один або більше ідентифікатор з якого додати або вилучити мітку.",
+       "apihelp-tag-param-logid": "Один або більше ідентифікатор запису журналу з якого вилучити або додати мітку.",
+       "apihelp-tag-param-add": "Мітки, які слід додати. Лише визначені вручну мітки може бути додано.",
+       "apihelp-tag-param-remove": "Мітки, які слід вилучити. Лише мітки, які було визначено вручну, або взагалі не визначено, можуть бути вилучені.",
+       "apihelp-tag-param-reason": "Причина зміни.",
+       "apihelp-tag-example-rev": "Додати мітку <kbd>vandalism</kbd> до версії з ідентифікатором 123 без вказання причини",
+       "apihelp-tag-example-log": "Вилучити мітку <kbd>spam</kbd> з запису журналу з ідентифікатором 123 з причиною <kbd>Wrongly applied</kbd>",
+       "apihelp-tokens-description": "Отримати жетони для дій пов'язаних зі зміною даних.\n\nЦей модуль застарів на користь [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Які типи жетонів запитати.",
+       "apihelp-tokens-example-edit": "Отримати жетон редагування (за замовчуванням).",
+       "apihelp-tokens-example-emailmove": "Отримати жетон електронної пошти та жетон перейменування.",
+       "apihelp-unblock-description": "Розблокувати користувача.",
+       "apihelp-unblock-param-id": "Ідентифікатор блоку чи розблокування (отриманий через <kbd>list=blocks</kbd>). Не може бути використано разом з <var>$1user</var>.",
+       "apihelp-unblock-param-user": "Ім'я користувача, IP-адреса чи IP-діапазон до розблокування. Не може бути використано разом з <var>$1id</var>.",
+       "apihelp-unblock-param-reason": "Причина розблокування.",
+       "apihelp-unblock-example-id": "Зняти блокування з ідентифікатором #<kbd>105</kbd>.",
+       "apihelp-unblock-example-user": "Розблокувати користувача <kbd>Bob</kbd> з причиною <kbd>Sorry Bob</kbd>.",
+       "apihelp-undelete-description": "Відновити версії вилученої сторінки.\n\nСписок вилучених версій (включено з часовими мітками) може бути отримано через [[Special:ApiHelp/query+deletedrevs|list=deletedrevs]], а список ідентифікаторів вилучених файлів може бути отримано через [[Special:ApiHelp/query+filearchive|list=filearchive]].",
+       "apihelp-undelete-param-title": "Назва сторінки, яку слід відновити.",
+       "apihelp-undelete-param-reason": "Причина відновлення.",
+       "apihelp-undelete-param-timestamps": "Часові мітки версій, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+       "apihelp-undelete-param-fileids": "Ідентифікатори версій файлів, які слід відновити. Якщо і <var>$1timestamps</var>, і <var>$1fileids</var> порожні, буде відновлено всі версії.",
+       "apihelp-undelete-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-undelete-example-page": "Відновити сторінку <kbd>Main Page</kbd>.",
+       "apihelp-undelete-example-revisions": "Відновити дві версії сторінки <kbd>Main Page</kbd>.",
+       "apihelp-upload-description": "Завантажити файл, або отримати статус завантажень у процесі.\n\nДоступні декілька методів:\n* Завантажити вміст файлу напряму, використовуючи параметр <var>$1file</var>.\n* Завантажити файл шматками, використовуючи параметри <var>$1filesize</var>, <var>$1chunk</var>, та <var>$1offset</var>.\n* Змусити сервер Медіавікі отримати файл за URL, використовуючи параметр <var>$1url</var>.\n* Завершити раніше розпочате завантаження, яке не вдалось через попередження, використовуючи параметр <var>$1filekey</var>.\nЗауважте, що HTTP POST повинен бути здійснений як завантаження файлу (наприклад, використовуючи <code>multipart/form-data</code>)",
+       "apihelp-upload-param-filename": "Цільова назва файлу.",
+       "apihelp-upload-param-comment": "Коментар завантаження. Також використовується як початковий текст сторінок для нових файлів, якщо <var>$1text</var> не вказано.",
+       "apihelp-upload-param-text": "Початковий текст сторінок для нових файлів.",
+       "apihelp-upload-param-watch": "Спостерігати за сторінкою.",
+       "apihelp-upload-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.",
+       "apihelp-upload-param-ignorewarnings": "Ігнорувати всі попередження.",
+       "apihelp-upload-param-file": "Вміст файлу.",
+       "apihelp-upload-param-url": "URL з якого отримати файл.",
+       "apihelp-upload-param-filekey": "Ключ, що ідентифікує попереднє завантаження яке було відкладено тимчасово",
+       "apihelp-upload-param-sessionkey": "Те ж саме, що $1filekey, підтримується для зворотної сумісності.",
+       "apihelp-upload-param-stash": "Якщо вказано, сервер тимчасово відкладе файл замість додати його до репозиторію.",
+       "apihelp-upload-param-filesize": "Розмір файлу цілого завантаження.",
+       "apihelp-upload-param-offset": "Зміщення шматка в байтах.",
+       "apihelp-upload-param-chunk": "Шматок вмісту.",
+       "apihelp-upload-param-async": "Зробити операції з потенційно великими файлами асинхронними коли можливо.",
+       "apihelp-upload-param-asyncdownload": "Зробити отримання за URL асинхронним.",
+       "apihelp-upload-param-leavemessage": "Якщо використовується asyncdownload, залишити повідомлення на сторінці обговорення користувача при закінченні.",
+       "apihelp-upload-param-statuskey": "Отримати статус завантаження для цього ключа файлу (завантаження за URL)",
+       "apihelp-upload-param-checkstatus": "Отримувати статус завантаження лише для даного ключа файлу.",
+       "apihelp-upload-example-url": "Завантаження з URL.",
+       "apihelp-upload-example-filekey": "Завершити завантаження, що не вдалось через попередження.",
+       "apihelp-userrights-description": "Змінити членство користувача у групах.",
+       "apihelp-userrights-param-user": "Ім'я користувача.",
+       "apihelp-userrights-param-userid": "Ідентифікатор користувача.",
+       "apihelp-userrights-param-add": "Додати користувача до цих груп.",
+       "apihelp-userrights-param-remove": "Вилучити користувача із цих груп.",
+       "apihelp-userrights-param-reason": "Причина зміни.",
+       "apihelp-userrights-example-user": "Додати користувача <kbd>FooBot</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+       "apihelp-userrights-example-userid": "Додати користувача з ідентифікатором <kbd>123</kbd> до групи <kbd>bot</kbd> та вилучити із груп <kbd>sysop</kbd> та <kbd>bureaucrat</kbd>.",
+       "apihelp-watch-description": "Додати або вилучити сторінки з списку спостереження поточного користувача.",
+       "apihelp-watch-param-title": "Сторінки до додання/вилучення. Використовуйте <var>$1titles</var> натомість.",
+       "apihelp-watch-param-unwatch": "Якщо вказано, сторінку буде вилучено зі списку спостереження замість додання до нього.",
+       "apihelp-watch-example-watch": "Спостерігати за сторінкою <kbd>Головна сторінка</kbd>.",
+       "apihelp-watch-example-unwatch": "Вилучити сторінку <kbd>Головна сторінка</kbd> зі списку спостереження.",
+       "apihelp-watch-example-generator": "Додати перші декілька сторінок основного простору назв до списку спостереження.",
+       "apihelp-format-example-generic": "Повернути результат запиту у форматі $1.",
+       "apihelp-dbg-description": "Вивести дані у форматі PHP <code>var_export()</code>.",
+       "apihelp-dbgfm-description": "Вивести дані у форматі PHP <code>var_export()</code> (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-json-description": "Вивести дані у форматі JSON.",
+       "apihelp-json-param-callback": "Якщо вказано, огортає вивід викликом даної функції. З міркувань безпеки, усі специфічні до користувача дані буде утримано.",
+       "apihelp-json-param-utf8": "Якщо вказано, кодує більшість (але не всі) не-ASCII символів як UTF-8, замість заміни їх шістнадцятковими екрануючими послідовностями. За замовчуванням коли <var>formatversion</var> не є <kbd>1</kbd>.",
+       "apihelp-json-param-ascii": "Якщо вказано, кодує всі не-ASCII використовуючи шістнадцяткові екрануючі послідовності. За замовчуванням коли <var>formatversion</var> є <kbd>1</kbd>.",
+       "apihelp-json-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-jsonfm-description": "Вивести дані у форматі JSON (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-none-description": "Нічого не виводити.",
+       "apihelp-php-description": "Виводити дані у форматі серіалізованого PHP.",
+       "apihelp-php-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-phpfm-description": "Виводити дані у форматі серіалізованого PHP (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-rawfm-description": "Виводити дані у форматі JSON разом з елементами налагодження (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-txt-description": "Виводити дані у форматі PHP <code>print_r()</code>.",
+       "apihelp-txtfm-description": "Виводити дані у форматі PHP <code>print_r()</code> (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-xml-description": "Виводити дані у форматі XML.",
+       "apihelp-xml-param-xslt": "Якщо вказано, додає названу сторінку як таблицю стилів XSL. Це значення повинне бути назвою у просторі назв {{ns:mediawiki}}, що закінчується на <code>.xsl</code>.",
+       "apihelp-xml-param-includexmlnamespace": "Якщо вказано, додає простір назв XML.",
+       "apihelp-xmlfm-description": "Вивести дані у форматі XML (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-yaml-description": "Вивести дані у форматі YAML.",
+       "apihelp-yamlfm-description": "Вивести дані у форматі YAML (вивід відформатованого коду за допомогою HTML).",
+       "api-format-title": "Результат запиту до API MediaWiki",
+       "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметру <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-orm-param-props": "Поля до запиту.",
+       "api-orm-param-limit": "Яке максимальне число рядків повернути.",
+       "api-pageset-param-titles": "Список назв над якими працювати.",
+       "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
+       "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
+       "api-pageset-param-generator": "Отримати список сторінок над якими працювати шляхом виконання вказаного модуля запиту.\n\n<strong>Примітка:</strong> Назви параметрів генератора повинні мати префікс «g», див. приклади.",
+       "api-pageset-param-redirects-generator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, і <var>$1revids</var>, та у сторінках, повернених <var>$1generator</var>.",
+       "api-pageset-param-redirects-nogenerator": "Автоматично вирішувати перенаправлення у <var>$1titles</var>, <var>$1pageids</var>, та <var>$1revids</var>.",
+       "api-pageset-param-converttitles": "Конвертувати назви в інші варіанти за необхідності. Працює лише для вікі, мова вмісту яких підтримує конвертування варіантів. Мовами, що підтримують конвертування варіантів є $1.",
+       "api-help-title": "Довідка API Медіавікі",
+       "api-help-lead": "Це автоматично генерована сторінка документації API Медіавікі.\n\nДокументація та приклади: https://www.mediawiki.org/wiki/API",
+       "api-help-main-header": "Головний модуль",
+       "api-help-flag-deprecated": "Цей модуль є застарілим.",
+       "api-help-flag-internal": "<strong>Цей модуль є внутрішнім або нестабільним.</strong> Його робота може бути змінена без сповіщення.",
+       "api-help-flag-readrights": "Цей модуль вимагає прав на читання.",
+       "api-help-flag-writerights": "Цей модуль вимагає прав на запис.",
+       "api-help-flag-mustbeposted": "Цей модуль приймає лише POST-запити.",
+       "api-help-flag-generator": "Цей модуль може бути використаний як генератор.",
+       "api-help-source": "Джерело: $1",
+       "api-help-source-unknown": "Джерело: <span class=\"apihelp-unknown\">невідоме</span>",
+       "api-help-license": "Ліцензія: [[$1|$2]]",
+       "api-help-license-noname": "Ліцензія: [[$1|див. посилання]]",
+       "api-help-license-unknown": "Ліцензія: <span class=\"apihelp-unknown\">невідома</span>",
+       "api-help-parameters": "{{PLURAL:$1|Параметр|Параметри}}:",
+       "api-help-param-deprecated": "Застарілий.",
+       "api-help-param-required": "Цей параметр є обов'язковим.",
+       "api-help-datatypes-header": "Типи даних",
+       "api-help-datatypes": "Деякі типи параметрів у запитах API потребують ширшого пояснення:\n;boolean\n:Логічні параметри працюють як галочки HTML: якщо параметр вказано, не залежно від значення, він вважається істинним. Щоб значення було хибним, пропустіть параметр зовсім.\n;timestamp\n:Часові мітки можуть бути вказані у кількох форматах. Рекомендується час і дата в ISO 8601. Усі значення часу в UTC, будь-які часові пояси ігноруються.\n:* Дата і час ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (пунктуація і <kbd>Z</kbd> необов'язокві)\n:* Дата і час ISO 8601 з (ігнорованими) частками секунди, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (дефіси, двокрапки та <kbd>Z</kbd> необов'язкові)\n:* Формат MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Загальний числовий формат, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (необов'язковий часовий пояс <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> або <kbd>-<var>##</var></kbd> ігнорується)\n:* Формат EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 2822 (часовий пояс може бути опущений), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 850 (часовий пояс може бути опущений), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Секунди від 1970-01-01T00:00:00Z у вигляді цілого числа від 1 до 13 цифр (без <kbd>0</kbd>)\n:* Рядок <kbd>now</kbd>",
+       "api-help-param-type-limit": "Тип: ціле число або <kbd>max</kbd>",
+       "api-help-param-type-integer": "Тип: {{PLURAL:$1|1=ціле число|2=список цілих чисел}}",
+       "api-help-param-type-boolean": "Тип: логічний ([[Special:ApiHelp/main#main/datatypes|деталі]])",
+       "api-help-param-type-timestamp": "Тип: {{PLURAL:$1|1=часова мітка|2=список часових міток}} ([[Special:ApiHelp/main#main/datatypes|дозволені формати]])",
+       "api-help-param-type-user": "Тип: {{PLURAL:$1|1=ім'я користувача|2=список імен користувачів}}",
+       "api-help-param-list": "{{PLURAL:$1|1=Одне значення|2=Значення (розділені через <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Повинно бути пустим|Може бути пустим або $2}}",
+       "api-help-param-limit": "Дозволено не більше $1.",
+       "api-help-param-limit2": "Дозволено не більше $1 ($2 для ботів).",
+       "api-help-param-integer-min": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не менше $2.",
+       "api-help-param-integer-max": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} не більше $3.",
+       "api-help-param-integer-minmax": "{{PLURAL:$1|1=Значення має бути|2=Значення мають бути}} між $2 і $3.",
+       "api-help-param-upload": "Повинно бути надіслано у формі надсилання файлу використовуючи multipart/form-data.",
+       "api-help-param-multi-separate": "Розділіть значення з допомогою <kbd>|</kbd>.",
+       "api-help-param-multi-max": "Максимальна кількість значень — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботів).",
+       "api-help-param-default": "За замовчуванням: $1",
+       "api-help-param-default-empty": "За замовчуванням: <span class=\"apihelp-empty\">(пусто)</span>",
+       "api-help-param-token": "Токен «$1» отримано з [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "Для сумісності, приймається також токен, використаний у користувацькому веб-інтерфейсі.",
+       "api-help-param-disabled-in-miser-mode": "Вимкнено через [[mw:Manual:$wgMiserMode|скупий режим]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Примітка:</strong> через [[mw:Manual:$wgMiserMode|«скупий режим»]], використання цього може вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+       "api-help-param-direction": "У якому напрямку перелічувати:\n;newer:Спочатку найстарші. Примітка: $1start має бути перед $1end.\n;older:Спочатку найновіші (за замовчуванням). Примітка: $1start має бути перед $1end.",
+       "api-help-param-continue": "Коли доступно більше результатів, використовуйте це, щоб продовжити.",
+       "api-help-param-no-description": "<span class=\"apihelp-empty\">(без опису)</span>",
+       "api-help-examples": "{{PLURAL:$1|Приклад|Приклади}}:",
+       "api-help-permissions": "{{PLURAL:$1|Дозвіл|Дозволи}}:",
+       "api-help-permissions-granted-to": "{{PLURAL:$1|Надано|Надані}}: $2",
+       "api-help-right-apihighlimits": "Використовувати вищі ліміти у запитах API (повільні запити: $1; швидкі запити: $2). Ліміти для повільних запитів також застосовуються до багатозначних параметрів.",
+       "api-credits-header": "Автор(и)",
+       "api-credits": "Розробники API:\n* Roan Kattouw (головний розробник вер. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (творець, головний розробник вер. 2006 – вер. 2007)\n* Brad Jorsch (головний розробник 2013 – тепер)\n\nБудь ласка, надсилайте свої коментарі, пропозиції та запитання на mediawiki-api@lists.wikimedia.org\nабо зафайліть звіт про баґ на https://phabricator.wikimedia.org/."
 }
index f97b83a..d80374a 100644 (file)
        "apihelp-query+watchlistraw-param-totitle": "要列举的最终标题(带名字空间前缀)。",
        "apihelp-query+watchlistraw-example-simple": "列出当前用户的监视列表中的页面。",
        "apihelp-revisiondelete-description": "删除和恢复修订版本。",
+       "apihelp-revisiondelete-param-ids": "用于将被删除的修订的标识符。",
        "apihelp-revisiondelete-param-hide": "每次修订要隐藏的东西。",
        "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
        "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
        "apihelp-undelete-param-fileids": "要恢复的文件修订ID。如果<var>$1timestamps</var>和<var>$1fileids</var>都为空,所有将被恢复。",
        "apihelp-undelete-example-page": "恢复页面<kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "恢复<kbd>Main Page</kbd>的两个修订。",
+       "apihelp-upload-description": "上传一个文件,或获取正在等待中的上传的状态。\n\n可以使用的几种方法:\n* 直接上传文件内容,使用<var>$1file</var>参数。\n* 成批上传文件,使用<var>$1filesize</var>、<var>$1chunk</var>和<var>$1offset</var>参数。\n* 有MediaWiki服务器从URL检索一个文件,使用<var>$1url</var>参数。\n* Complete an earlier upload that failed due to warnings, using the <var>$1filekey</var> parameter.\nNote that the HTTP POST must be done as a file upload (i.e. using <code>multipart/form-data</code>) when sending the <var>$1file</var>.",
        "apihelp-upload-param-filename": "目标文件名。",
        "apihelp-upload-param-comment": "上传注释。如果没有指定<var>$1text</var>,那么它也被用于新文件的初始页面文本。",
        "apihelp-upload-param-watch": "监视页面。",
        "apihelp-upload-param-watchlist": "无条件地将页面加入至当前用户的监视列表或将其移除,使用设置或不更改监视。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
+       "apihelp-upload-param-url": "要检索文件来源的URL。",
        "apihelp-upload-param-stash": "如果设置,服务器将临时藏匿文件而不是加入存储库。",
        "apihelp-upload-param-filesize": "全部上传的文件大小。",
        "apihelp-upload-param-offset": "块的偏移量(字节)。",
        "apihelp-upload-param-chunk": "大块内容。",
+       "apihelp-upload-param-leavemessage": "如果asyncdownload被使用,当完成时,在用户讨论页留下一条消息。",
        "apihelp-upload-example-url": "从URL上传。",
        "apihelp-upload-example-filekey": "完成一次由于警告而失败的上传。",
        "apihelp-userrights-description": "更改一位用户的组成员。",
index aaa1fa7..09c3939 100644 (file)
@@ -26,7 +26,7 @@
  *     a different Title instance set on it.
  * @since 1.19
  */
-class DerivativeContext extends ContextSource {
+class DerivativeContext extends ContextSource implements MutableContext {
        /**
         * @var WebRequest
         */
diff --git a/includes/context/MutableContext.php b/includes/context/MutableContext.php
new file mode 100644 (file)
index 0000000..6358f11
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Request-dependant objects containers.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.26
+ *
+ * @file
+ */
+
+interface MutableContext {
+       /**
+        * Set the Config object
+        *
+        * @param Config $c
+        */
+       public function setConfig( Config $c );
+
+       /**
+        * Set the WebRequest object
+        *
+        * @param WebRequest $r
+        */
+       public function setRequest( WebRequest $r );
+
+       /**
+        * Set the Title object
+        *
+        * @param Title $t
+        */
+       public function setTitle( Title $t );
+
+       /**
+        * Set the WikiPage object
+        *
+        * @param WikiPage $p
+        */
+       public function setWikiPage( WikiPage $p );
+
+       /**
+        * Set the OutputPage object
+        *
+        * @param OutputPage $o
+        */
+       public function setOutput( OutputPage $o );
+
+       /**
+        * Set the User object
+        *
+        * @param User $u
+        */
+       public function setUser( User $u );
+
+       /**
+        * Set the Language object
+        *
+        * @param Language|string $l Language instance or language code
+        */
+       public function setLanguage( $l );
+
+       /**
+        * Set the Skin object
+        *
+        * @param Skin $s
+        */
+       public function setSkin( Skin $s );
+
+}
index 99c1a06..76b5e52 100644 (file)
@@ -25,7 +25,7 @@
 /**
  * Group all the pieces relevant to the context of a request into one instance
  */
-class RequestContext implements IContextSource {
+class RequestContext implements IContextSource, MutableContext {
        /**
         * @var WebRequest
         */
diff --git a/includes/dao/DBAccessObjectUtils.php b/includes/dao/DBAccessObjectUtils.php
new file mode 100644 (file)
index 0000000..58f991f
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * This file contains database access object related constants.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Database
+ */
+
+/**
+ * Helper class for DAO classes
+ *
+ * @since 1.26
+ */
+class DBAccessObjectUtils {
+       /**
+        * @param integer $bitfield
+        * @param integer $flags IDBAccessObject::READ_* constant
+        * @return bool Bitfield has flag $flag set
+        */
+       public static function hasFlags( $bitfield, $flags ) {
+               return ( $bitfield & $flags ) == $flags;
+       }
+
+       /**
+        * Get an appropriate DB index and options for a query
+        *
+        * @param integer $bitfield
+        * @return array (DB_MASTER/DB_SLAVE, SELECT options array)
+        */
+       public static function getDBOptions( $bitfield ) {
+               $index = self::hasFlags( $bitfield, IDBAccessObject::READ_LATEST )
+                       ? DB_MASTER
+                       : DB_SLAVE;
+
+               $options = array();
+               if ( self::hasFlags( $bitfield, IDBAccessObject::READ_EXCLUSIVE ) ) {
+                       $options[] = 'FOR UPDATE';
+               } elseif ( self::hasFlags( $bitfield, IDBAccessObject::READ_LOCKING ) ) {
+                       $options[] = 'LOCK IN SHARE MODE';
+               }
+
+               return array( $index, $options );
+       }
+}
\ No newline at end of file
index 2ee4545..cf0eab7 100644 (file)
@@ -3205,7 +3205,8 @@ abstract class DatabaseBase implements IDatabase {
         * iteration, or false on error, for example if the retry limit was
         * reached.
         *
-        * @return bool
+        * @return mixed
+        * @throws DBQueryError
         */
        public function deadlockLoop() {
                $args = func_get_args();
@@ -3219,6 +3220,7 @@ abstract class DatabaseBase implements IDatabase {
 
                $this->begin( __METHOD__ );
 
+               $retVal = null;
                $e = null;
                do {
                        try {
index 2bad711..9c93951 100644 (file)
@@ -964,7 +964,36 @@ class DatabaseSqlite extends DatabaseBase {
                        }
                }
 
-               return $this->query( $sql, $fname );
+               $res = $this->query( $sql, $fname );
+
+               // Take over indexes
+               $indexList = $this->query( 'PRAGMA INDEX_LIST(' . $this->addQuotes( $oldName ) . ')' );
+               foreach ( $indexList as $index ) {
+                       if ( strpos( $index->name, 'sqlite_autoindex' ) === 0 ) {
+                               continue;
+                       }
+
+                       if ( $index->unique ) {
+                               $sql = 'CREATE UNIQUE INDEX';
+                       } else {
+                               $sql = 'CREATE INDEX';
+                       }
+                       // Try to come up with a new index name, given indexes have database scope in SQLite
+                       $indexName = $newName . '_' . $index->name;
+                       $sql .= ' ' . $indexName . ' ON ' . $newName;
+
+                       $indexInfo = $this->query( 'PRAGMA INDEX_INFO(' . $this->addQuotes( $index->name ) . ')' );
+                       $fields = array();
+                       foreach ( $indexInfo as $indexInfoRow ) {
+                               $fields[ $indexInfoRow->seqno ] = $indexInfoRow->name;
+                       }
+
+                       $sql .= '(' . implode( ',', $fields ) . ')';
+
+                       $this->query( $sql );
+               }
+
+               return $res;
        }
 
        /**
index dca1b4c..6a0f2ee 100644 (file)
@@ -173,25 +173,34 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * Sanitize and filter the custom headers from a $params array.
-        * We only allow certain Content- and X-Content- headers.
+        * Only allows certain "standard" Content- and X-Content- headers.
         *
         * @param array $params
         * @return array Sanitized value of 'headers' field in $params
         */
        protected function sanitizeHdrs( array $params ) {
+               return isset( $params['headers'] )
+                       ? $this->getCustomHeaders( $params['headers'] )
+                       : array();
+
+       }
+
+       /**
+        * @param array $rawHeaders
+        * @return array Custom non-metadata HTTP headers
+        */
+       protected function getCustomHeaders( array $rawHeaders ) {
                $headers = array();
 
                // Normalize casing, and strip out illegal headers
-               if ( isset( $params['headers'] ) ) {
-                       foreach ( $params['headers'] as $name => $value ) {
-                               $name = strtolower( $name );
-                               if ( preg_match( '/^content-(type|length)$/', $name ) ) {
-                                       continue; // blacklisted
-                               } elseif ( preg_match( '/^(x-)?content-/', $name ) ) {
-                                       $headers[$name] = $value; // allowed
-                               } elseif ( preg_match( '/^content-(disposition)/', $name ) ) {
-                                       $headers[$name] = $value; // allowed
-                               }
+               foreach ( $rawHeaders as $name => $value ) {
+                       $name = strtolower( $name );
+                       if ( preg_match( '/^content-(type|length)$/', $name ) ) {
+                               continue; // blacklisted
+                       } elseif ( preg_match( '/^(x-)?content-/', $name ) ) {
+                               $headers[$name] = $value; // allowed
+                       } elseif ( preg_match( '/^content-(disposition)/', $name ) ) {
+                               $headers[$name] = $value; // allowed
                        }
                }
                // By default, Swift has annoyingly low maximum header value limits
@@ -213,6 +222,35 @@ class SwiftFileBackend extends FileBackendStore {
                return $headers;
        }
 
+       /**
+        * @param array $rawHeaders
+        * @return array Custom metadata headers
+        */
+       protected function getMetadataHeaders( array $rawHeaders ) {
+               $headers = array();
+               foreach ( $rawHeaders as $name => $value ) {
+                       $name = strtolower( $name );
+                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
+                               $headers[$name] = $value;
+                       }
+               }
+
+               return $headers;
+       }
+
+       /**
+        * @param array $rawHeaders
+        * @return array Custom metadata headers with prefix removed
+        */
+       protected function getMetadata( array $rawHeaders ) {
+               $metadata = array();
+               foreach ( $this->getMetadataHeaders( $rawHeaders ) as $name => $value ) {
+                       $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+               }
+
+               return $metadata;
+       }
+
        protected function doCreateInternal( array $params ) {
                $status = Status::newGood();
 
@@ -1551,22 +1589,16 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function getStatFromHeaders( array $rhdrs ) {
                // Fetch all of the custom metadata headers
-               $metadata = array();
-               foreach ( $rhdrs as $name => $value ) {
-                       if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
-                               $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
-                       }
-               }
+               $metadata = $this->getMetadata( $rhdrs );
                // Fetch all of the custom raw HTTP headers
                $headers = $this->sanitizeHdrs( array( 'headers' => $rhdrs ) );
+
                return array(
                        // Convert various random Swift dates to TS_MW
                        'mtime' => $this->convertSwiftDate( $rhdrs['last-modified'], TS_MW ),
                        // Empty objects actually return no content-length header in Ceph
                        'size'  => isset( $rhdrs['content-length'] ) ? (int)$rhdrs['content-length'] : 0,
-                       'sha1'  => isset( $rhdrs['x-object-meta-sha1base36'] )
-                               ? $rhdrs['x-object-meta-sha1base36']
-                               : null,
+                       'sha1'  => isset( $metadata['sha1base36'] ) ? $metadata['sha1base36'] : null,
                        // Note: manifiest ETags are not an MD5 of the file
                        'md5'   => ctype_xdigit( $rhdrs['etag'] ) ? $rhdrs['etag'] : null,
                        'xattr' => array( 'metadata' => $metadata, 'headers' => $headers )
index 72b3ae9..f9e1128 100644 (file)
@@ -1149,8 +1149,6 @@ abstract class File implements IDBAccessObject {
                        Hooks::run( 'FileTransformed', array( $this, $thumb, $tmpThumbPath, $thumbPath ) );
                }
 
-               wfDebugLog( 'thumbnailaccess', time() . ' ' . $thumbPath . ' ' . filesize( $tmpThumbPath ) . ' Generated ' );
-
                return $thumb;
        }
 
index c8f7262..9c7acd6 100644 (file)
@@ -60,7 +60,7 @@
        "config-magic-quotes-sybase": "'''Fatal: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] es active!'''\nIste option corrumpe le entrata de datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-mbstring": "'''Fatal: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] es active!'''\nIste option causa errores e pote corrumper datos imprevisibilemente.\nTu non pote installar o usar MediaWiki si iste option non es disactivate.",
        "config-safe-mode": "'''Aviso:''' Le [http://www.php.net/features.safe-mode modo secur] de PHP es active.\nIsto pote causar problemas, particularmente si es usate le incargamento de files e le supporto de <code>math</code>.",
-       "config-xml-bad": "Le modulo XML de PHP es mancante.\nMediaWiki require functiones de iste modulo e non functionara in iste configuration.\nSi tu usa Mandrake, installa le pacchetto php-xml.",
+       "config-xml-bad": "Le modulo XML de PHP es mancante.\nMediaWiki require functiones de iste modulo e non functionara in iste configuration.\nEs possibile que tu debe installar le pacchetto RPM php-xml.",
        "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 o plus tarde es necessari.\nTu binario de PHP binary es ligate con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Plus information].",
        "config-pcre-no-utf8": "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.\nMediaWiki require supporto de UTF-8 pro functionar correctemente.",
        "config-memory-raised": "Le <code>memory_limit</code> de PHP es $1, elevate a $2.",
index 4d62722..fbcdf49 100644 (file)
        "config-profile-no-anon": "계정 만들기 필요",
        "config-profile-fishbowl": "승인된 편집자만",
        "config-profile-private": "비공개 위키",
-       "config-profile-help": "위키는 가능한 많은 사람들이 편집할 수 있도록 할 때 가장 뛰어난 역할을 합니다.\n미디어위키에서는 최근 바뀜을 검토하기 쉽고, 미숙하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.\n\n그러나 많은 사람이 미디어위키가 다양한 역할을 수행하는 데 유용하다는 것을 알고 있지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.\n그래서 선택할 수 있습니다.\n\n'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.\n'''{{int:config-profile-no-anon}}'''인 위키에서는 편집자에게 추가적인 책임을 부여하지만, 부담 없는 기여를 저해할 수도 있습니다.\n\n'''{{int:config-profile-fishbowl}}''' 시나리오에서는 승인된 사용자만 편집할 수 있지만, 일반 사용자도 문서(문서 역사 포함)는 볼 수 있습니다.\n'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며, 승인된 사용자 그룹이 편집할 수 있습니다.\n\n더 복잡한 사용자 권한 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 관련 설명서 항목]을 참하세요.",
+       "config-profile-help": "위키는 가능한 많은 사람들이 편집할 수 있도록 할 때 가장 뛰어난 역할을 합니다.\n미디어위키에서는 최근 바뀜을 검토하기 쉽고, 미숙하거나 악의적인 사용자의 어떠한 손실을 되돌리는 것이 쉽습니다.\n\n그러나 많은 사람이 미디어위키가 다양한 역할을 수행하는 데 유용하다는 것을 알고 있지만, 때로는 모든 사람에게 위키 방식의 장점을 설득하기 쉽지 않을 지도 모릅니다.\n그래서 선택할 수 있습니다.\n\n'''{{int:config-profile-wiki}}''' 모델은 로그인하지 않고도 누구나 편집할 수 있습니다.\n'''{{int:config-profile-no-anon}}'''인 위키에서는 편집자에게 추가적인 책임을 부여하지만, 부담 없는 기여를 저해할 수도 있습니다.\n\n'''{{int:config-profile-fishbowl}}''' 시나리오에서는 승인된 사용자만 편집할 수 있지만, 일반 사용자도 문서(문서 역사 포함)는 볼 수 있습니다.\n'''{{int:config-profile-private}}'''는 승인된 사용자만 문서를 볼 수 있으며, 승인된 사용자 그룹이 편집할 수 있습니다.\n\n더 복잡한 사용자 권한 설정은 설치한 후 사용할 수 있으며 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights 관련 설명서 항목]을 참하세요.",
        "config-license": "저작권 및 라이선스:",
        "config-license-none": "라이선스 바닥글 없음",
        "config-license-cc-by-sa": "크리에이티브 커먼즈 저작자표시-동일조건변경허락",
        "config-email-sender-help": "발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.\n반송할 때 보내는 주소입니다.\n대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.",
        "config-upload-settings": "그림과 파일 올리기",
        "config-upload-enable": "파일 올리기 활성화",
-       "config-upload-help": "파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.\n자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security 보안 문단]을 참하세요.\n\n파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.\n그 다음 이 옵션을 활성화합니다.",
+       "config-upload-help": "파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.\n자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security 보안 문단]을 참하세요.\n\n파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 바꿉니다.\n그 다음 이 옵션을 활성화합니다.",
        "config-upload-deleted": "삭제된 파일에 대한 디렉터리:",
        "config-upload-deleted-help": "삭제된 파일을 보관할 디렉토리를 선택하세요.\n이상적으로 웹에서 접근할 수 없게 해야 합니다.",
        "config-logo": "로고 URL:",
        "config-logo-help": "미디어위키의 기본 스킨은 사이드바 메뉴 위에 135×160 픽셀의 로고의 공간을 포함하고 있습니다.\n적당한 크기로 그림을 올리고 여기에 URL을 입력하세요.\n\n로고가 상대적인 경로에 있으면 <code>$wgStylePath</code>나 <code>$wgScriptPath</code>를 사용할 수 있습니다.\n\n로고 사용을 원하지 않으면 이 상자를 비우세요.",
        "config-instantcommons": "인스턴트 공용 기능 활성화",
-       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.\n이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.\n\n위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한, 기능에 대한 자세한 내용은 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 매뉴얼]을 참하세요.",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.\n이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.\n\n위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한, 기능에 대한 자세한 내용은 [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 매뉴얼]을 참하세요.",
        "config-cc-error": "크리에이티브 커먼즈 라이선스 선택기에 결과가 없습니다.\n수동으로 라이선스 이름을 입력하세요.",
        "config-cc-again": "다시 선택...",
        "config-cc-not-chosen": "원하는 크리에이티브 커먼즈 라이선스를 선택하고 \"진행\"을 클릭하세요.",
index 54c60dd..03ef46d 100644 (file)
@@ -23,7 +23,7 @@
        "config-your-language-help": "Donn heh di Schprohch ußsöhke, di dat Enschtallzjuhnsprojramm kalle sull.",
        "config-wiki-language": "Dem Wiki sing Schprohch:",
        "config-wiki-language-help": "Donn heh di Schprohch ußsöhke, di et Wiki schtandattmääßesch kalle sull.",
-       "config-back": "← Retuur",
+       "config-back": "← Retuhr",
        "config-continue": "Wigger →",
        "config-page-language": "Schprohch",
        "config-page-welcome": "Wellkumme beim MehdijaWikki!",
index e9deb7b..3916233 100644 (file)
        "config-unicode-pure-php-warning": "<strong>Fampitandremana: </strong>  Ny [http://pecl.php.net/intl itatra PECL intl] dia tsy misy mba hahazakana ny fampifenerana Unicode, ka mitontona amin'ny implementasiona PHP ranoray noho ny tsifisiany.\nRaha hametraka tranonkala be mpamangy ianao dia tokony mamaky ny [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (amin'ny teny anglisy)",
        "config-db-username": "Anaram-pikamban'ny banky angona :",
        "config-db-password": "Tenimiafin'ny banky angona :",
+       "config-charset-mysql5-binary": "roafototra MySQL 4.1/5.0",
+       "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
+       "config-charset-mysql4": "MySQL 4.0 miverinjaka UTF-8",
+       "config-db-port": "Seranam-banky angona:",
        "config-header-mysql": "Parametatr'i MySQL",
        "config-header-sqlite": "Parametatr'i SQLite",
        "config-header-oracle": "Parametatr'i Oracle",
index 741c198..5625b44 100644 (file)
        "config-db-install-account": "Cunto utente pe' l'installazione",
        "config-db-username": "Nomme utente p' 'o database:",
        "config-db-password": "Password d' 'o database:",
-       "config-db-password-empty": "Avita nzertà na password pe' l'utente nuovo d' 'o database: $1.\nPure si fosse possibbele 'e crià ll'utente senza password chisto nun fosse sicuro.",
-       "config-db-username-empty": "Avita miette nu valore p' 'o \"{{int:config-db-username}}\"",
        "config-db-install-username": "Nzertate 'o nomme utente ca s'aussarrà pe' ve cullegà ô database pe' tramente ca se fà l'installazione. Chistu nun è 'o nomme utente d' 'o cunto MediaWiki; ma chillo p' 'o database vuosto.",
        "config-db-install-password": "Nzertate 'a password che s'ausarrà pe' ve putè cullegà ô database pe' tramente ca se fa l'installazione.\nChista nun è 'a password d' 'o cunto 'e MediaWiki; ma chilla p' 'o database vuosto.",
        "config-db-install-help": "Miette 'o nomme utente e 'a password ca sarrà usata quanno ve cullegate ô database pe' tramente ca facite 'a installazione.",
        "config-admin-error-password": "Errore interno quanno se steva a mpustà na password pe ll'ammenistratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
        "config-admin-error-bademail": "Avite miso n'indirizzo e-mail invalido.",
        "config-subscribe": "Mettiteve dint' 'a [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce mailing list 'e ll'annunciazione 'e verziune d' 'o software rilassate].",
+       "config-almost-done": "Avite quase fernuto!\nMo' putite zumpà 'a parta r' 'a configurazione e sempricemente installà 'a wiki.",
        "config-optional-continue": "Spiate cchiù dimanne.",
        "config-optional-skip": "Me so' scucciato già, installa surtanto 'o wiki.",
        "config-profile": "Profilo 'e deritte utente:",
        "config-profile-private": "Wiki privato",
        "config-license": "Copyright e licienza:",
        "config-license-none": "Nisciuno piede 'e paggena p' 'a licienza",
+       "config-license-cc-by-sa": "Creative Commons Attribuziona-SparteEguale",
+       "config-license-cc-by": "Creative Commons Attribuziona",
+       "config-license-cc-by-nc-sa": "Creative Commons Attribuziona-NunCommerciale-SparteEguale",
+       "config-license-cc-0": "Creative Commons Zero (Pubbreco dumminio)",
+       "config-license-gfdl": "GNU Free Documentation License 1.3 o verziune aroppo",
        "config-license-pd": "Pubbreco duminio",
+       "config-license-cc-choose": "Sciglite na licienza Creative Commons ca vulite",
+       "config-email-settings": "Mpustaziune email",
+       "config-enable-email": "Premmette mmasciate elettroniche r'asciuta",
+       "config-email-user": "Premmette email utente-utente",
+       "config-email-user-help": "Cunzente a ll'utente 'e mannà uno a ll'ato le mail si 'e teneno appicciate dint' 'e preferenze lloro.",
+       "config-email-usertalk": "Premmette notifiche p' 'e paggene 'e chiacchiera utente",
+       "config-email-usertalk-help": "Premmette ll'utente 'e ricevere notifiche p' 'e cagnamiente r' 'e paggene 'e chiacchiera lloro, si l'avessero appicciato dint' 'e preferenze lloro.",
+       "config-email-watchlist": "Appiccia notifica 'osservati speciale",
+       "config-email-auth": "Appiccia autenticaziona via email",
+       "config-email-sender": "Innerizo email e ritorno:",
+       "config-upload-settings": "Immaggene e upload",
+       "config-upload-enable": "Premmette 'a carreca 'e file",
+       "config-upload-deleted": "Cartella p' 'e file scancellate:",
+       "config-upload-deleted-help": "Sciglite na cartella addò s'astipassero 'e file scancellate.\nIdealmente a sta cartella nun s'avess'a trasì r' 'a web",
        "config-logo": "URL d\"o logo:",
+       "config-instantcommons": "Appiccia Instant Commons",
+       "config-cc-error": "'O selettore 'e licienze Creative Commons nun mmustaje nisciuno risultato.\nNzertate manualmente 'o nomme d' 'a licienza.",
        "config-cc-again": "Selezziona 'e novo...",
+       "config-cc-not-chosen": "Sciglite quale licienza Creative Commons desiderate e cliccate ncopp' 'a \"prucede\".",
+       "config-advanced-settings": "Configurazione avanzata",
+       "config-cache-options": "Mpustaziune p' 'a cache d'oggette:",
+       "config-memcached-servers": "Server memcached:",
+       "config-memcached-help": "Elenco 'e ll'indirizzi IP p' 'e putè ausà p' 'o Memcached.\nS'avess'a specificà uno pe' riga e scrivere 'a porta 'e trasuta. P'esempio:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+       "config-memcache-needservers": "È stato scigliuto 'o tipo 'e caching Memcached, ma nun è stato mpustato 'a nisciunu server.",
+       "config-memcache-badip": "È stat'azzeccato nu indirizzo IP nun valido p' 'o Memcached: $1.",
+       "config-memcache-noport": "Nun avite specificato na porta p'ausà 'o server Memcached: $1. Si nun sapite 'a porta, chill' 'e default è 11211.",
+       "config-memcache-badport": "'E nummere 'e porta 'e Memcached avesser'a stà nfra $1 e $2.",
+       "config-extensions": "Estenziune",
+       "config-skins": "Skin",
        "config-install-step-done": "fatto",
+       "config-install-step-failed": "fallito",
+       "config-install-extensions": "Ncludenno 'estenziune",
+       "config-install-database": "Configurazione database",
+       "config-install-schema": "Crianno schema",
+       "config-install-pg-schema-not-exist": "'O schema PostgreSQL nun esiste.",
+       "config-install-pg-commit": "Mannann' 'e cagnamiente",
+       "config-install-pg-plpgsql": "Cuntrollo p' 'o lenguaggio PL/pgSQL",
+       "config-install-user": "Crianno utente 'e database",
        "config-install-updates": "Mpiccià ll'agghiurnamiente ca nun fossero necessarie",
        "config-help": "ajùto"
 }
index 7e5ad43..b4a03cb 100644 (file)
        "config-ns-site-name": "Те ж саме, що й назва вікі: $1",
        "config-ns-other": "Інше (вкажіть)",
        "config-ns-other-default": "MyWiki",
-       "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у \"'''просторі імен проекту'''\".\nУсі назви сторінок у цьому просторі імен починаються з певного префікса, який Ви можете вказати тут.\nТрадиційно цей префікс виводиться з назви вікі, але не може містити знаки пунктуація, як-то \"#\" чи \":\".",
+       "config-project-namespace-help": "За прикладом Вікіпедії, чимало вікі тримають свої сторінки правил окремо від сторінок основного вмісту, у «'''просторі назв проекту'''».\nУсі назви сторінок у цьому просторі назв починаються з певного префікса, який Ви можете вказати тут.\nЗазвичай цей префікс виводиться з назви вікі, але не може містити знаки пунктуації, як-то «#» чи «:».",
        "config-ns-invalid": "Вказаний простір назв «<nowiki>$1</nowiki>» не припустимий.\nВкажіть інший простір назв проекту.",
        "config-ns-conflict": "Вказаний простір назв «<nowiki>$1</nowiki>» конфліктує зі стандартним простором назв MediaWiki.\nВкажіть інший простір назв проекту.",
        "config-admin-box": "Обліковий запис адміністратора",
index 4713f45..414b6e9 100644 (file)
        "config-db-install-account": "用于安装的用户帐号",
        "config-db-username": "数据库用户名:",
        "config-db-password": "数据库密码:",
-       "config-db-password-empty": "请为新数据库用户$1输入密码。尽管您可以创建不使用密码的用户,但这样做并不安全。",
-       "config-db-username-empty": "您必须输入用于“{{int:config-db-username}}”的值。",
        "config-db-install-username": "请输入在安装过程中用于连接数据库的用户名。请勿输入MediaWiki帐号的用户名,请输入您数据库的用户名。",
        "config-db-install-password": "请输入在安装过程中用于连接数据库的密码。请勿输入MediaWiki帐号的密码,请输入您数据库的密码。",
        "config-db-install-help": "请输入在安装过程中用于连接数据库的用户名和密码。",
index ca597ca..c7ee9b6 100644 (file)
@@ -59,6 +59,8 @@ final class EnqueueJob extends Job {
         * @return EnqueueJob
         */
        public static function newFromJobsByWiki( array $jobsByWiki ) {
+               $deduplicate = true;
+
                $jobMapsByWiki = array();
                foreach ( $jobsByWiki as $wiki => $jobs ) {
                        $jobMapsByWiki[$wiki] = array();
@@ -68,10 +70,19 @@ final class EnqueueJob extends Job {
                                } else {
                                        throw new InvalidArgumentException( "Jobs must be of type JobSpecification." );
                                }
+                               $deduplicate = $deduplicate && $job->ignoreDuplicates();
                        }
                }
 
-               return new self( Title::newMainPage(), array( 'jobsByWiki' => $jobMapsByWiki ) );
+               $eJob = new self(
+                       Title::makeTitle( NS_SPECIAL, 'Badtitle/' . __CLASS__ ),
+                       array( 'jobsByWiki' => $jobMapsByWiki )
+               );
+               // If *all* jobs to be pushed are to be de-duplicated (a common case), then
+               // de-duplicate this whole job itself to avoid build up in high traffic cases
+               $eJob->removeDuplicates = $deduplicate;
+
+               return $eJob;
        }
 
        public function run() {
index 3d7fad5..100d2a4 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Liuggio\StatsdClient\Entity\StatsdData;
 use Liuggio\StatsdClient\Entity\StatsdDataInterface;
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 
@@ -75,6 +76,9 @@ class BufferingStatsdDataFactory extends StatsdDataFactory {
                return $entity;
        }
 
+       /**
+        * @return StatsdData[]
+        */
        public function getBuffer() {
                return $this->buffer;
        }
index 2e7ef88..6af3ed5 100644 (file)
@@ -72,7 +72,9 @@ class MultiHttpClient {
                                throw new Exception( "Cannot find CA bundle: " . $this->caBundlePath );
                        }
                }
-               static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy' );
+               static $opts = array(
+                       'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy'
+               );
                foreach ( $opts as $key ) {
                        if ( isset( $options[$key] ) ) {
                                $this->$key = $options[$key];
@@ -222,15 +224,17 @@ class MultiHttpClient {
                        $ch = $handles[$index];
                        curl_multi_remove_handle( $chm, $ch );
 
-                       $info = $infos[(int)$ch];
-
-                       $errno = $info['result'];
-                       if ( $errno !== 0 ) {
-                               $req['response']['error'] = "(curl error: $errno)";
-
-                               if ( function_exists( 'curl_strerror' ) ) {
-                                       $req['response']['error'] .= " " . curl_strerror( $errno );
+                       if ( isset( $infos[(int)$ch] ) ) {
+                               $info = $infos[(int)$ch];
+                               $errno = $info['result'];
+                               if ( $errno !== 0 ) {
+                                       $req['response']['error'] = "(curl error: $errno)";
+                                       if ( function_exists( 'curl_strerror' ) ) {
+                                               $req['response']['error'] .= " " . curl_strerror( $errno );
+                                       }
                                }
+                       } else {
+                               $req['response']['error'] = "(curl error: no status set)";
                        }
 
                        // For convenience with the list() operator
diff --git a/includes/libs/SamplingStatsdClient.php b/includes/libs/SamplingStatsdClient.php
new file mode 100644 (file)
index 0000000..d7791a8
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Copyright 2015
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use Liuggio\StatsdClient\StatsdClient;
+use Liuggio\StatsdClient\Entity\StatsdData;
+use Liuggio\StatsdClient\Entity\StatsdDataInterface;
+
+/**
+ * A statsd client that applies the sampling rate to the data items before sending them.
+ *
+ * @since 1.26
+ */
+class SamplingStatsdClient extends StatsdClient {
+       /**
+        * Sets sampling rate for all items in $data.
+        * The sample rate specified in a StatsdData entity overrides the sample rate specified here.
+        *
+        * {@inheritDoc}
+        */
+       public function appendSampleRate( $data, $sampleRate = 1 ) {
+               if ( $sampleRate < 1 ) {
+                       array_walk( $data, function( $item ) use ( $sampleRate ) {
+                               /** @var $item StatsdData */
+                               if ( $item->getSampleRate() === 1 ) {
+                                       $item->setSampleRate( $sampleRate );
+                               }
+                       });
+               }
+
+               return $data;
+       }
+
+       /**
+        * Sample the metrics according to their sample rate and send the remaining ones.
+        *
+        * {@inheritDoc}
+        */
+       public function send( $data, $sampleRate = 1 ) {
+               if ( !is_array( $data ) ) {
+                       $data = array( $data );
+               }
+               if ( !$data ) {
+                       return;
+               }
+               foreach ( $data as $item ) {
+                       if ( !( $item instanceof StatsdDataInterface ) ) {
+                               throw new InvalidArgumentException(
+                                       'SamplingStatsdClient does not accept stringified messages' );
+                       }
+               }
+
+               // add sampling
+               if ( $sampleRate < 1 ) {
+                       $data = $this->appendSampleRate( $data, $sampleRate );
+               }
+               $data = $this->sampleData( $data );
+
+               $messages = array_map( 'strval', $data );
+
+               // reduce number of packets
+               if ( $this->getReducePacket() ) {
+                       $data = $this->reduceCount( $data );
+               }
+               //failures in any of this should be silently ignored if ..
+               $written = 0;
+               try {
+                       $fp = $this->getSender()->open();
+                       if ( !$fp ) {
+                               return;
+                       }
+                       foreach ( $messages as $message ) {
+                               $written += $this->getSender()->write( $fp, $message );
+                       }
+                       $this->getSender()->close( $fp );
+               } catch ( Exception $e ) {
+                       $this->throwException( $e );
+               }
+
+               return $written;
+       }
+
+       /**
+        * Throw away some of the data according to the sample rate.
+        * @param StatsdDataInterface[] $data
+        * @return array
+        * @throws LogicException
+        */
+       protected function sampleData( $data ) {
+               $newData = array();
+               $mt_rand_max = mt_getrandmax();
+               foreach ( $data as $item ) {
+                       $samplingRate = $item->getSampleRate();
+                       if ( $samplingRate <= 0.0 || $samplingRate > 1.0 ) {
+                               throw new LogicException( 'Sampling rate shall be within ]0, 1]' );
+                       }
+                       if (
+                               $samplingRate === 1 ||
+                               ( mt_rand() / $mt_rand_max <= $samplingRate )
+                       ) {
+                               $newData[] = $item;
+                       }
+               }
+               return $newData;
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       protected function throwException( Exception $exception ) {
+               if ( !$this->getFailSilently() ) {
+                       throw $exception;
+               }
+       }
+}
index cc54fe7..0dbbaba 100644 (file)
@@ -27,7 +27,6 @@
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
-
        /**
         * @var string String to append to each APC key. This may be changed
         *  whenever the handling of values is changed, to prevent existing code
@@ -35,7 +34,7 @@ class APCBagOStuff extends BagOStuff {
         **/
        const KEY_SUFFIX = ':1';
 
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $val = apc_fetch( $key . self::KEY_SUFFIX );
 
                $casToken = $val;
index 65ff0ee..cc07db4 100644 (file)
@@ -59,6 +59,9 @@ abstract class BagOStuff implements LoggerAwareInterface {
        const ERR_UNREACHABLE = 2; // can't connect
        const ERR_UNEXPECTED = 3; // response gave some error
 
+       /** Bitfield constants for get()/getMulti() */
+       const READ_LATEST = 1; // use latest data for replicated stores
+
        public function __construct( array $params = array() ) {
                if ( isset( $params['logger'] ) ) {
                        $this->setLogger( $params['logger'] );
@@ -86,9 +89,10 @@ abstract class BagOStuff implements LoggerAwareInterface {
         * Get an item with the given key. Returns false if it does not exist.
         * @param string $key
         * @param mixed $casToken [optional]
+        * @param integer $flags Bitfield; supports READ_LATEST [optional]
         * @return mixed Returns false on failure
         */
-       abstract public function get( $key, &$casToken = null );
+       abstract public function get( $key, &$casToken = null, $flags = 0 );
 
        /**
         * Set an item.
@@ -138,11 +142,17 @@ abstract class BagOStuff implements LoggerAwareInterface {
         */
        protected function mergeViaCas( $key, $callback, $exptime = 0, $attempts = 10 ) {
                do {
+                       $this->clearLastError();
                        $casToken = null; // passed by reference
                        $currentValue = $this->get( $key, $casToken );
+                       if ( $this->getLastError() ) {
+                               return false; // don't spam retries (retry only on races)
+                       }
+
                        // Derive the new value from the old value
                        $value = call_user_func( $callback, $this, $key, $currentValue );
 
+                       $this->clearLastError();
                        if ( $value === false ) {
                                $success = true; // do nothing
                        } elseif ( $currentValue === false ) {
@@ -152,6 +162,9 @@ abstract class BagOStuff implements LoggerAwareInterface {
                                // Try to update the key, failing if it gets changed in the meantime
                                $success = $this->cas( $casToken, $key, $value, $exptime );
                        }
+                       if ( $this->getLastError() ) {
+                               return false; // IO error; don't spam retries
+                       }
                } while ( !$success && --$attempts );
 
                return $success;
@@ -185,14 +198,17 @@ abstract class BagOStuff implements LoggerAwareInterface {
                        return false;
                }
 
+               $this->clearLastError();
                $currentValue = $this->get( $key );
-               // Derive the new value from the old value
-               $value = call_user_func( $callback, $this, $key, $currentValue );
+               if ( !$this->getLastError() ) {
+                       // Derive the new value from the old value
+                       $value = call_user_func( $callback, $this, $key, $currentValue );
 
-               if ( $value === false ) {
-                       $success = true; // do nothing
-               } else {
-                       $success = $this->set( $key, $value, $exptime ); // set the new value
+                       if ( $value === false ) {
+                               $success = true; // do nothing
+                       } else {
+                               $success = $this->set( $key, $value, $exptime ); // set the new value
+                       }
                }
 
                if ( !$this->unlock( $key ) ) {
@@ -262,14 +278,13 @@ abstract class BagOStuff implements LoggerAwareInterface {
                return false;
        }
 
-       /* *** Emulated functions *** */
-
        /**
         * Get an associative array containing the item for each of the keys that have items.
         * @param array $keys List of strings
+        * @param integer $flags Bitfield; supports READ_LATEST [optional]
         * @return array
         */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $res = array();
                foreach ( $keys as $key ) {
                        $val = $this->get( $key );
index 4ccf270..55e84b0 100644 (file)
@@ -27,7 +27,7 @@
  * @ingroup Cache
  */
 class EmptyBagOStuff extends BagOStuff {
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                return false;
        }
 
index 2c8b05a..185c74b 100644 (file)
@@ -48,7 +48,7 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
                }
index 1b24616..20e146d 100644 (file)
@@ -72,12 +72,16 @@ class ReplicatedBagOStuff extends BagOStuff {
                $this->readStore->setDebug( $debug );
        }
 
-       public function get( $key, &$casToken = null ) {
-               return $this->readStore->get( $key, $casToken );
+       public function get( $key, &$casToken = null, $flags = 0 ) {
+               return ( $flags & self::READ_LATEST )
+                       ? $this->writeStore->get( $key, $casToken, $flags )
+                       : $this->readStore->get( $key, $casToken, $flags );
        }
 
-       public function getMulti( array $keys ) {
-               return $this->readStore->getMulti( $keys );
+       public function getMulti( array $keys, $flags = 0 ) {
+               return ( $flags & self::READ_LATEST )
+                       ? $this->writeStore->getMulti( $keys, $flags )
+                       : $this->readStore->getMulti( $keys, $flags );
        }
 
        public function set( $key, $value, $exptime = 0 ) {
index 5362574..c480aa0 100644 (file)
  * @ingroup Cache
  */
 class WinCacheBagOStuff extends BagOStuff {
-
-       /**
-        * Get a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param int $casToken [optional] Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $val = wincache_ucache_get( $key );
 
                $casToken = $val;
@@ -48,14 +40,6 @@ class WinCacheBagOStuff extends BagOStuff {
                return $val;
        }
 
-       /**
-        * Store a value in the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Value to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
        public function set( $key, $value, $expire = 0 ) {
                $result = wincache_ucache_set( $key, serialize( $value ), $expire );
 
@@ -64,25 +48,10 @@ class WinCacheBagOStuff extends BagOStuff {
                return ( is_array( $result ) && $result === array() ) || $result;
        }
 
-       /**
-        * Store a value in the WinCache object cache, race condition-safe
-        *
-        * @param int $casToken Cas token
-        * @param string $key Cache key
-        * @param int $value Object to store
-        * @param int $exptime Expiration time
-        * @return bool
-        */
        protected function cas( $casToken, $key, $value, $exptime = 0 ) {
                return wincache_ucache_cas( $key, $casToken, serialize( $value ) );
        }
 
-       /**
-        * Remove a value from the WinCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
        public function delete( $key ) {
                wincache_ucache_delete( $key );
 
index cfee923..9dbff6f 100644 (file)
  * @ingroup Cache
  */
 class XCacheBagOStuff extends BagOStuff {
-       /**
-        * Get a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $casToken Cas token
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $val = xcache_get( $key );
 
                if ( is_string( $val ) ) {
@@ -51,14 +44,6 @@ class XCacheBagOStuff extends BagOStuff {
                return $val;
        }
 
-       /**
-        * Store a value in the XCache object cache
-        *
-        * @param string $key Cache key
-        * @param mixed $value Object to store
-        * @param int $expire Expiration time
-        * @return bool
-        */
        public function set( $key, $value, $expire = 0 ) {
                if ( !$this->isInteger( $value ) ) {
                        $value = serialize( $value );
@@ -68,12 +53,6 @@ class XCacheBagOStuff extends BagOStuff {
                return true;
        }
 
-       /**
-        * Remove a value from the XCache object cache
-        *
-        * @param string $key Cache key
-        * @return bool
-        */
        public function delete( $key ) {
                xcache_unset( $key );
                return true;
index eeca9b1..e545aa5 100644 (file)
@@ -57,12 +57,7 @@ class MemcachedBagOStuff extends BagOStuff {
                return $params;
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                return $this->client->get( $this->encodeKey( $key ), $casToken );
        }
 
index f2c4928..7e6a4d7 100644 (file)
@@ -115,12 +115,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                $this->client->addServers( $servers );
        }
 
-       /**
-        * @param string $key
-        * @param float $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $this->debugLog( "get($key)" );
                $result = $this->client->get( $this->encodeKey( $key ), null, $casToken );
                $result = $this->checkResult( $key, $result );
@@ -238,11 +233,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $result;
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
                $callback = array( $this, 'encodeKey' );
                $result = $this->client->getMulti( array_map( $callback, $keys ) );
index 6fba61b..69792ad 100644 (file)
@@ -57,11 +57,7 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
                $this->client->set_debug( $debug );
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $callback = array( $this, 'encodeKey' );
                return $this->client->get_multi( array_map( $callback, $keys ) );
        }
index be54e4d..3a30f83 100644 (file)
@@ -61,14 +61,9 @@ class MultiWriteBagOStuff extends BagOStuff {
                $this->doWrite( 'setDebug', $debug );
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return bool|mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                foreach ( $this->caches as $cache ) {
-                       $value = $cache->get( $key );
+                       $value = $cache->get( $key, null, $flags = 0 );
                        if ( $value !== false ) {
                                return $value;
                        }
index c5850b6..8a99f53 100644 (file)
@@ -29,9 +29,13 @@ use MediaWiki\Logger\LoggerFactory;
  * The word "cache" has two main dictionary meanings, and both
  * are used in this factory class. They are:
  *   - a) A place to store copies or computations on existing data
- *     for higher access speeds (the computer science definition)
+ *        for higher access speeds (the computer science definition)
  *   - b) A place to store lightweight data that is not canonically
- *     stored anywhere else (e.g. a "hoard" of objects)
+ *        stored anywhere else (e.g. a "hoard" of objects)
+ *
+ * The former should always use strongly consistent stores, so callers don't
+ * have to deal with stale reads. The later may be eventually consistent, but
+ * callers can use BagOStuff:READ_LATEST to see the latest available data.
  *
  * @ingroup Cache
  */
@@ -238,9 +242,10 @@ class ObjectCache {
         * In general, this means avoiding updates on idempotent HTTP requests and
         * avoiding an assumption of perfect serializability (or accepting anomalies).
         * Reads may be eventually consistent or data might rollback as nodes flap.
+        * Callers can use BagOStuff:READ_LATEST to see the latest available data.
         *
-        * @since 1.26
         * @return BagOStuff
+        * @since 1.26
         */
        static function getMainStashInstance() {
                global $wgMainStash;
index 11dd660..a9af9b1 100644 (file)
@@ -80,7 +80,7 @@ class RedisBagOStuff extends BagOStuff {
                }
        }
 
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
 
                list( $server, $conn ) = $this->getConnection( $key );
                if ( !$conn ) {
@@ -174,7 +174,7 @@ class RedisBagOStuff extends BagOStuff {
                return $result;
        }
 
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
 
                $batches = array();
                $conns = array();
index 3b46249..e08fec9 100644 (file)
@@ -220,12 +220,7 @@ class SqlBagOStuff extends BagOStuff {
                }
        }
 
-       /**
-        * @param string $key
-        * @param mixed $casToken [optional]
-        * @return mixed
-        */
-       public function get( $key, &$casToken = null ) {
+       public function get( $key, &$casToken = null, $flags = 0 ) {
                $values = $this->getMulti( array( $key ) );
                if ( array_key_exists( $key, $values ) ) {
                        $casToken = $values[$key];
@@ -234,11 +229,7 @@ class SqlBagOStuff extends BagOStuff {
                return false;
        }
 
-       /**
-        * @param array $keys
-        * @return array
-        */
-       public function getMulti( array $keys ) {
+       public function getMulti( array $keys, $flags = 0 ) {
                $values = array(); // array of (key => value)
 
                $keysByTable = array();
index ae28cb8..b129bd2 100644 (file)
@@ -361,18 +361,18 @@ class WikiPage implements Page, IDBAccessObject {
                        return;
                }
 
-               if ( $from === self::READ_LOCKING ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle, array( 'FOR UPDATE' ) );
-               } elseif ( $from === self::READ_LATEST ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
-               } elseif ( $from === self::READ_NORMAL ) {
-                       $data = $this->pageDataFromTitle( wfGetDB( DB_SLAVE ), $this->mTitle );
+               if ( is_int( $from ) ) {
+                       list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
+                       $data = $this->pageDataFromTitle( wfGetDB( $index ), $this->mTitle, $opts );
+
                        if ( !$data
+                               && $index == DB_SLAVE
                                && wfGetLB()->getServerCount() > 1
                                && wfGetLB()->hasOrMadeRecentMasterChanges()
                        ) {
                                $from = self::READ_LATEST;
-                               $data = $this->pageDataFromTitle( wfGetDB( DB_MASTER ), $this->mTitle );
+                               list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
+                               $data = $this->pageDataFromTitle( wfGetDB( $index ), $this->mTitle, $opts );
                        }
                } else {
                        // No idea from where the caller got this data, assume slave database.
index 65d8182..6189997 100644 (file)
@@ -1382,16 +1382,18 @@ class Parser {
                $spdash = "(?:-|$space)"; # a dash or a non-newline space
                $spaces = "$space++"; # possessive match of 1 or more spaces
                $text = preg_replace_callback(
-                       '!(?:                           # Start cases
-                               (<a[ \t\r\n>].*?</a>) |     # m[1]: Skip link text
-                               (<.*?>) |                   # m[2]: Skip stuff inside HTML elements' . "
-                               (\b(?i:$prots)$urlChar+) |  # m[3]: Free external links
-                               \b(?:RFC|PMID) $spaces      # m[4]: RFC or PMID, capture number
+                       '!(?:                            # Start cases
+                               (<a[ \t\r\n>].*?</a>) |      # m[1]: Skip link text
+                               (<.*?>) |                    # m[2]: Skip stuff inside
+                                                            #       HTML elements' . "
+                               (\b(?i:$prots)($urlChar+)) | # m[3]: Free external links
+                                                            # m[4]: Post-protocol path
+                               \b(?:RFC|PMID) $spaces       # m[5]: RFC or PMID, capture number
                                        ([0-9]+)\b |
-                               \bISBN $spaces (            # m[5]: ISBN, capture number
-                                       (?: 97[89] $spdash? )?   # optional 13-digit ISBN prefix
-                                       (?: [0-9]  $spdash? ){9} # 9 digits with opt. delimiters
-                                       [0-9Xx]                 # check digit
+                               \bISBN $spaces (             # m[6]: ISBN, capture number
+                                       (?: 97[89] $spdash? )?   #  optional 13-digit ISBN prefix
+                                       (?: [0-9]  $spdash? ){9} #  9 digits with opt. delimiters
+                                       [0-9Xx]                  #  check digit
                                )\b
                        )!xu", array( &$this, 'magicLinkCallback' ), $text );
                return $text;
@@ -1411,28 +1413,28 @@ class Parser {
                        return $m[0];
                } elseif ( isset( $m[3] ) && $m[3] !== '' ) {
                        # Free external link
-                       return $this->makeFreeExternalLink( $m[0] );
-               } elseif ( isset( $m[4] ) && $m[4] !== '' ) {
+                       return $this->makeFreeExternalLink( $m[0], strlen( $m[4] ) );
+               } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
                        # RFC or PMID
                        if ( substr( $m[0], 0, 3 ) === 'RFC' ) {
                                $keyword = 'RFC';
                                $urlmsg = 'rfcurl';
                                $cssClass = 'mw-magiclink-rfc';
-                               $id = $m[4];
+                               $id = $m[5];
                        } elseif ( substr( $m[0], 0, 4 ) === 'PMID' ) {
                                $keyword = 'PMID';
                                $urlmsg = 'pubmedurl';
                                $cssClass = 'mw-magiclink-pmid';
-                               $id = $m[4];
+                               $id = $m[5];
                        } else {
                                throw new MWException( __METHOD__ . ': unrecognised match type "' .
                                        substr( $m[0], 0, 20 ) . '"' );
                        }
                        $url = wfMessage( $urlmsg, $id )->inContentLanguage()->text();
                        return Linker::makeExternalLink( $url, "{$keyword} {$id}", true, $cssClass );
-               } elseif ( isset( $m[5] ) && $m[5] !== '' ) {
+               } elseif ( isset( $m[6] ) && $m[6] !== '' ) {
                        # ISBN
-                       $isbn = $m[5];
+                       $isbn = $m[6];
                        $space = self::SPACE_NOT_NL; #  non-newline space
                        $isbn = preg_replace( "/$space/", ' ', $isbn );
                        $num = strtr( $isbn, array(
@@ -1453,11 +1455,12 @@ class Parser {
         * Make a free external link, given a user-supplied URL
         *
         * @param string $url
-        *
+        * @param int $numPostProto
+        *   The number of characters after the protocol.
         * @return string HTML
         * @private
         */
-       public function makeFreeExternalLink( $url ) {
+       public function makeFreeExternalLink( $url, $numPostProto ) {
 
                $trail = '';
 
@@ -1498,6 +1501,12 @@ class Parser {
 
                $url = Sanitizer::cleanUrl( $url );
 
+               # Verify that we still have a real URL after trail removal, and
+               # not just lone protocol
+               if ( strlen( $trail ) >= $numPostProto ) {
+                       return $url . $trail;
+               }
+
                # Is this an external image?
                $text = $this->maybeMakeExternalImage( $url );
                if ( $text === false ) {
@@ -6435,4 +6444,15 @@ class Parser {
                        return $this;
                }
        }
+
+       /**
+        * Set's up the PHP implementation of OOUI for use in this request
+        * and instructs OutputPage to enable OOUI for itself.
+        *
+        * @since 1.26
+        */
+       public function enableOOUI() {
+               OutputPage::setupOOUI();
+               $this->mOutput->setEnableOOUI( true );
+       }
 }
index 7068bd7..15321c2 100644 (file)
@@ -49,7 +49,8 @@ class ParserOutput extends CacheTime {
                $mProperties = array(),       # Name/value pairs to be cached in the DB
                $mTOCHTML = '',               # HTML of the TOC
                $mTimestamp,                  # Timestamp of the revision
-               $mTOCEnabled = true;          # Whether TOC should be shown, can't override __NOTOC__
+               $mTOCEnabled = true,          # Whether TOC should be shown, can't override __NOTOC__
+               $mEnableOOUI = false;         # Whether OOUI should be enabled
        private $mIndexPolicy = '';       # 'index' or 'noindex'?  Any other value will result in no change.
        private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
        private $mExtensionData = array(); # extra data used by extensions
@@ -232,6 +233,10 @@ class ParserOutput extends CacheTime {
                return $this->mTOCEnabled;
        }
 
+       public function getEnableOOUI() {
+               return $this->mEnableOOUI;
+       }
+
        public function setText( $text ) {
                return wfSetVar( $this->mText, $text );
        }
@@ -283,6 +288,17 @@ class ParserOutput extends CacheTime {
                $this->mIndicators[$id] = $content;
        }
 
+       /**
+        * Enables OOUI, if true, in any OutputPage instance this ParserOutput
+        * object is added to.
+        *
+        * @since 1.26
+        * @param bool $enable If OOUI should be enabled or not
+        */
+       public function setEnableOOUI( $enable = false ) {
+               $this->mEnableOOUI = $enable;
+       }
+
        public function addLanguageLink( $t ) {
                $this->mLanguageLinks[] = $t;
        }
index 273e9ef..68e5a17 100644 (file)
@@ -46,6 +46,27 @@ class ExtensionProcessor implements Processor {
                'ValidSkinNames',
        );
 
+       /**
+        * Mapping of global settings to their specific merge strategies.
+        *
+        * @see ExtensionRegistry::exportExtractedData
+        * @see getExtractedInfo
+        * @var array
+        */
+       protected static $mergeStrategies = array(
+               'wgGroupPermissions' => 'array_plus_2d',
+               'wgRevokePermissions' => 'array_plus_2d',
+               'wgHooks' => 'array_merge_recursive',
+               // credits are handled in the ExtensionRegistry
+               //'wgExtensionCredits' => 'array_merge_recursive',
+               'wgExtraNamespaces' => 'array_plus',
+               'wgExtraGenderNamespaces' => 'array_plus',
+               'wgNamespacesWithSubpages' => 'array_plus',
+               'wgNamespaceContentModels' => 'array_plus',
+               'wgNamespaceProtection' => 'array_plus',
+               'wgCapitalLinkOverrides' => 'array_plus',
+       );
+
        /**
         * Keys that are part of the extension credits
         *
@@ -156,6 +177,13 @@ class ExtensionProcessor implements Processor {
        }
 
        public function getExtractedInfo() {
+               // Make sure the merge strategies are set
+               foreach ( $this->globals as $key => $val ) {
+                       if ( isset( self::$mergeStrategies[$key] ) ) {
+                               $this->globals[$key][ExtensionRegistry::MERGE_STRATEGY] = self::$mergeStrategies[$key];
+                       }
+               }
+
                return array(
                        'globals' => $this->globals,
                        'defines' => $this->defines,
@@ -198,6 +226,12 @@ class ExtensionProcessor implements Processor {
                                if ( isset( $ns['defaultcontentmodel'] ) ) {
                                        $this->globals['wgNamespaceContentModels'][$id] = $ns['defaultcontentmodel'];
                                }
+                               if ( isset( $ns['protection'] ) ) {
+                                       $this->globals['wgNamespaceProtection'][$id] = $ns['protection'];
+                               }
+                               if ( isset( $ns['capitallinkoverride'] ) ) {
+                                       $this->globals['wgCapitalLinkOverrides'][$id] = $ns['capitallinkoverride'];
+                               }
                        }
                }
        }
index 858f3bf..7414925 100644 (file)
@@ -21,6 +21,18 @@ class ExtensionRegistry {
         */
        const OLDEST_MANIFEST_VERSION = 1;
 
+       /**
+        * Bump whenever the registration cache needs resetting
+        */
+       const CACHE_VERSION = 1;
+
+       /**
+        * Special key that defines the merge strategy
+        *
+        * @since 1.26
+        */
+       const MERGE_STRATEGY = '_merge_strategy';
+
        /**
         * @var BagOStuff
         */
@@ -102,7 +114,7 @@ class ExtensionRegistry {
                }
 
                // See if this queue is in APC
-               $key = wfMemcKey( 'registration', md5( json_encode( $this->queued ) ) );
+               $key = wfMemcKey( 'registration', md5( json_encode( $this->queued ) ), self::CACHE_VERSION );
                $data = $this->cache->get( $key );
                if ( $data ) {
                        $this->exportExtractedData( $data );
@@ -175,31 +187,61 @@ class ExtensionRegistry {
                foreach ( $data['credits'] as $credit ) {
                        $data['globals']['wgExtensionCredits'][$credit['type']][] = $credit;
                }
+               $data['globals']['wgExtensionCredits'][self::MERGE_STRATEGY] = 'array_merge_recursive';
                $data['autoload'] = $autoloadClasses;
                return $data;
        }
 
        protected function exportExtractedData( array $info ) {
                foreach ( $info['globals'] as $key => $val ) {
+                       // If a merge strategy is set, read it and remove it from the value
+                       // so it doesn't accidentally end up getting set.
+                       // Need to check $val is an array for PHP 5.3 which will return
+                       // true on isset( 'string'['foo'] ).
+                       if ( isset( $val[self::MERGE_STRATEGY] ) && is_array( $val ) ) {
+                               $mergeStrategy = $val[self::MERGE_STRATEGY];
+                               unset( $val[self::MERGE_STRATEGY] );
+                       } else {
+                               $mergeStrategy = 'array_merge';
+                       }
+
+                       // Optimistic: If the global is not set, or is an empty array, replace it entirely.
+                       // Will be O(1) performance.
                        if ( !isset( $GLOBALS[$key] ) || ( is_array( $GLOBALS[$key] ) && !$GLOBALS[$key] ) ) {
                                $GLOBALS[$key] = $val;
-                       } elseif ( $key === 'wgHooks' || $key === 'wgExtensionCredits' ) {
-                               // Special case $wgHooks and $wgExtensionCredits, which require a recursive merge.
-                               // Ideally it would have been taken care of in the first if block though.
-                               $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
-                       } elseif ( $key === 'wgGroupPermissions' ) {
-                               // First merge individual groups
-                               foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
-                                       if ( isset( $val[$name] ) ) {
-                                               $groupVal += $val[$name];
+                               continue;
+                       }
+
+                       if ( !is_array( $GLOBALS[$key] ) || !is_array( $val ) ) {
+                               // config setting that has already been overridden, don't set it
+                               continue;
+                       }
+
+                       switch ( $mergeStrategy ) {
+                               case 'array_merge_recursive':
+                                       $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
+                                       break;
+                               case 'array_plus_2d':
+                                       // First merge items that are in both arrays
+                                       foreach ( $GLOBALS[$key] as $name => &$groupVal ) {
+                                               if ( isset( $val[$name] ) ) {
+                                                       $groupVal += $val[$name];
+                                               }
                                        }
-                               }
-                               // Now merge groups that didn't exist yet
-                               $GLOBALS[$key] += $val;
-                       } elseif ( is_array( $GLOBALS[$key] ) && is_array( $val ) ) {
-                               $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
-                       } // else case is a config setting where it has already been overriden, so don't set it
+                                       // Now add items that didn't exist yet
+                                       $GLOBALS[$key] += $val;
+                                       break;
+                               case 'array_plus':
+                                       $GLOBALS[$key] = $val + $GLOBALS[$key];
+                                       break;
+                               case 'array_merge':
+                                       $GLOBALS[$key] = array_merge( $val, $GLOBALS[$key] );
+                                       break;
+                               default:
+                                       throw new UnexpectedValueException( "Unknown merge strategy '$mergeStrategy'" );
+                       }
                }
+
                foreach ( $info['defines'] as $name => $val ) {
                        define( $name, $val );
                }
index b9bc773..eb28109 100644 (file)
@@ -1380,7 +1380,7 @@ MESSAGE;
         * @return string
         */
        public static function makeLoaderConditionalScript( $script ) {
-               return "var RLQ = RLQ || []; RLQ.push( function () {\n" . trim( $script ) . "\n} );";
+               return "window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n" . trim( $script ) . "\n} );";
        }
 
        /**
@@ -1396,7 +1396,7 @@ MESSAGE;
                $js = self::makeLoaderConditionalScript( $script );
                return new WrappedString(
                        Html::inlineScript( $js ),
-                       "<script>var RLQ = RLQ || []; RLQ.push( function () {\n",
+                       "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n",
                        "\n} );</script>"
                );
        }
index b734def..efb151e 100644 (file)
@@ -526,19 +526,16 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
        }
 
        /**
-        * Helper method to gather file mtimes for getDefinitionSummary.
+        * Helper method to gather file hashes for getDefinitionSummary.
         *
-        * Last modified timestamps are calculated from the highest last modified
-        * timestamp of this module's constituent files as well as the files it
-        * depends on. This function is context-sensitive, only performing
-        * calculations on files relevant to the given language, skin and debug
-        * mode.
+        * This function is context-sensitive, only computing hashes of files relevant to the
+        * given language, skin, etc.
         *
         * @see ResourceLoaderModule::getFileDependencies
         * @param ResourceLoaderContext $context
         * @return array
         */
-       protected function getFileMtimes( ResourceLoaderContext $context ) {
+       protected function getFileHashes( ResourceLoaderContext $context ) {
                $files = array();
 
                // Flatten style files into $files
@@ -577,13 +574,10 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                // entry point Less file we already know about.
                $files = array_values( array_unique( $files ) );
 
-               // Don't max() because older files are significant.
-               // While the associated file names are significant, that is already taken care of by the
-               // definition summary. Avoid creating an array keyed by file path here because those are
-               // absolute file paths. Including that would needlessly cause global cache invalidation
-               // when the MediaWiki installation path changes (which is quite common in cases like
-               // Wikimedia where the installation path reflects the MediaWiki branch name).
-               return array_map( array( __CLASS__, 'safeFilemtime' ), $files );
+               // Don't include keys or file paths here, only the hashes. Including that would needlessly
+               // cause global cache invalidation when files move or if e.g. the MediaWiki path changes.
+               // Any significant ordering is already detected by the definition summary.
+               return array_map( array( __CLASS__, 'safeFileHash' ), $files );
        }
 
        /**
@@ -597,6 +591,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
                $options = array();
                foreach ( array(
+                       // T104950: Do not include localBasePath! That path may vary over time and needlessly
+                       // invalidate cache. If the path changes in a way that makes relative file paths point
+                       // to something else, getFileHashes() will incorporate that already.
                        'scripts',
                        'debugScripts',
                        'loaderScripts',
@@ -611,9 +608,6 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        'group',
                        'position',
                        'skipFunction',
-                       // FIXME: localBasePath includes the MediaWiki installation path and
-                       // needlessly causes cache invalidation.
-                       'localBasePath',
                        'remoteBasePath',
                        'debugRaw',
                        'raw',
@@ -623,7 +617,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
                $summary[] = array(
                        'options' => $options,
-                       'fileMtimes' => $this->getFileMTimes( $context ),
+                       'fileHashes' => $this->getFileHashes( $context ),
                        'msgBlobMtime' => $this->getMsgBlobMtime( $context->getLanguage() ),
                );
                return $summary;
index 46b786d..ade99e2 100644 (file)
@@ -835,16 +835,30 @@ abstract class ResourceLoaderModule {
        }
 
        /**
-        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist
-        * but returns 1 instead.
-        * @param string $filename File name
+        * Safe version of filemtime(), which doesn't throw a PHP warning if the file doesn't exist.
+        * Defaults to 1.
+        *
+        * @param string $filePath File path
         * @return int UNIX timestamp
         */
-       protected static function safeFilemtime( $filename ) {
+       protected static function safeFilemtime( $filePath ) {
                MediaWiki\suppressWarnings();
-               $mtime = filemtime( $filename ) ?: 1;
+               $mtime = filemtime( $filePath ) ?: 1;
                MediaWiki\restoreWarnings();
-
                return $mtime;
        }
+
+       /**
+        * Safe version of sha1_file(), which doesn't throw a PHP warning if the file doesn't exist.
+        * Defaults to empty string.
+        *
+        * @param string $filePath File path
+        * @return string Hash
+        */
+       protected static function safeFileHash( $filePath ) {
+               MediaWiki\suppressWarnings();
+               $hash = sha1_file( $filePath ) ?: '';
+               MediaWiki\restoreWarnings();
+               return $hash;
+       }
 }
index 16424a0..64678f4 100644 (file)
@@ -88,6 +88,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgContentNamespaces' => MWNamespace::getContentNamespaces(),
                        'wgSiteName' => $conf->get( 'Sitename' ),
                        'wgDBname' => $conf->get( 'DBname' ),
+                       'wgExtraSignatureNamespaces' => $conf->get( 'ExtraSignatureNamespaces' ),
                        'wgAvailableSkins' => Skin::getSkinNames(),
                        'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ),
                        // MediaWiki sets cookies to have this prefix by default
@@ -100,6 +101,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ),
                        'wgResourceLoaderStorageVersion' => $conf->get( 'ResourceLoaderStorageVersion' ),
                        'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ),
+                       'wgResourceLoaderLegacyModules' => self::getLegacyModules(),
                );
 
                Hooks::run( 'ResourceLoaderGetConfigVars', array( &$vars ) );
@@ -187,6 +189,9 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
                $resourceLoader = $context->getResourceLoader();
                $target = $context->getRequest()->getVal( 'target', 'desktop' );
+               // Bypass target filter if this request is from a unit test context. To prevent misuse in
+               // production, this is only allowed if testing is enabled server-side.
+               $byPassTargetFilter = $this->getConfig()->get( 'EnableJavaScriptTest' ) && $target === 'test';
 
                $out = '';
                $registryData = array();
@@ -195,7 +200,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                foreach ( $resourceLoader->getModuleNames() as $name ) {
                        $module = $resourceLoader->getModule( $name );
                        $moduleTargets = $module->getTargets();
-                       if ( !in_array( $target, $moduleTargets ) ) {
+                       if ( !$byPassTargetFilter && !in_array( $target, $moduleTargets ) ) {
                                continue;
                        }
 
@@ -289,6 +294,20 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return array( 'jquery', 'mediawiki' );
        }
 
+       public static function getLegacyModules() {
+               global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil;
+
+               $legacyModules = array();
+               if ( $wgIncludeLegacyJavaScript ) {
+                       $legacyModules[] = 'mediawiki.legacy.wikibits';
+               }
+               if ( $wgPreloadJavaScriptMwUtil ) {
+                       $legacyModules[] = 'mediawiki.util';
+               }
+
+               return $legacyModules;
+       }
+
        /**
         * Get the load URL of the startup modules.
         *
@@ -335,7 +354,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                }, array(
                        '$VARS.wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ),
                        '$VARS.configuration' => $this->getConfigSettings( $context ),
-                       '$VARS.baseModulesScript' => Html::linkedScript( self::getStartupModulesUrl( $context ) ),
+                       '$VARS.baseModulesUri' => self::getStartupModulesUrl( $context ),
                ) );
                $pairs['$CODE.registrations()'] = str_replace( "\n", "\n\t", trim( $this->getModuleRegistrations( $context ) ) );
 
index 327ef7c..53af3e7 100644 (file)
@@ -180,8 +180,7 @@ abstract class Skin extends ContextSource {
         * @return array Array of modules with helper keys for easy overriding
         */
        public function getDefaultModules() {
-               global $wgIncludeLegacyJavaScript, $wgPreloadJavaScriptMwUtil, $wgUseAjax,
-                       $wgAjaxWatch, $wgEnableAPI, $wgEnableWriteAPI;
+               global $wgUseAjax, $wgAjaxWatch, $wgEnableAPI, $wgEnableWriteAPI;
 
                $out = $this->getOutput();
                $user = $out->getUser();
@@ -191,7 +190,7 @@ abstract class Skin extends ContextSource {
                                'mediawiki.page.ready',
                        ),
                        // modules that exist for legacy reasons
-                       'legacy' => array(),
+                       'legacy' => ResourceLoaderStartUpModule::getLegacyModules(),
                        // modules relating to search functionality
                        'search' => array(),
                        // modules relating to functionality relating to watching an article
@@ -199,18 +198,9 @@ abstract class Skin extends ContextSource {
                        // modules which relate to the current users preferences
                        'user' => array(),
                );
-               if ( $wgIncludeLegacyJavaScript ) {
-                       $modules['legacy'][] = 'mediawiki.legacy.wikibits';
-               }
-
-               if ( $wgPreloadJavaScriptMwUtil ) {
-                       $modules['legacy'][] = 'mediawiki.util';
-               }
 
                // Add various resources if required
                if ( $wgUseAjax ) {
-                       $modules['legacy'][] = 'mediawiki.legacy.ajax';
-
                        if ( $wgEnableAPI ) {
                                if ( $wgEnableWriteAPI && $wgAjaxWatch && $user->isLoggedIn()
                                        && $user->isAllowed( 'writeapi' )
index b6ab112..6356155 100644 (file)
@@ -120,7 +120,7 @@ class EmailConfirmation extends UnlistedSpecialPage {
         * @param string $code Confirmation code
         */
        function attemptConfirm( $code ) {
-               $user = User::newFromConfirmationCode( $code );
+               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
                if ( !is_object( $user ) ) {
                        $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
 
@@ -164,7 +164,7 @@ class EmailInvalidation extends UnlistedSpecialPage {
         * @param string $code Confirmation code
         */
        function attemptInvalidate( $code ) {
-               $user = User::newFromConfirmationCode( $code );
+               $user = User::newFromConfirmationCode( $code, User::READ_LATEST );
                if ( !is_object( $user ) ) {
                        $this->getOutput()->addWikiMsg( 'confirmemail_invalid' );
 
index 4c73f16..fbdefea 100644 (file)
@@ -205,13 +205,27 @@ HTML;
                        'lang' => $this->getLanguage()->getCode(),
                        'skin' => $this->getSkin()->getSkinName(),
                        'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
+                       'target' => 'test',
                );
                $embedContext = new ResourceLoaderContext( $rl, new FauxRequest( $query ) );
                $query['only'] = 'scripts';
                $startupContext = new ResourceLoaderContext( $rl, new FauxRequest( $query ) );
 
+               $query['raw'] = true;
+
                $modules = $rl->getTestModuleNames( 'qunit' );
 
+               // Disable autostart because we load modules asynchronously. By default, QUnit would start
+               // at domready when there are no tests loaded and also fire 'QUnit.done' which then instructs
+               // Karma to end the run before the tests even started.
+               $qunitConfig = 'QUnit.config.autostart = false;'
+                       . 'if (window.__karma__) {'
+                       // karma-qunit's use of autostart=false and QUnit.start conflicts with ours.
+                       // Hack around this by replacing 'karma.loaded' with a no-op and call it ourselves later.
+                       // See <https://github.com/karma-runner/karma-qunit/issues/27>.
+                       . 'window.__karma__.loaded = function () {};'
+                       . '}';
+
                // The below is essentially a pure-javascript version of OutputPage::getHeadScripts.
                $startup = $rl->makeModuleResponse( $startupContext, array(
                        'startup' => $rl->getModule( 'startup' ),
@@ -225,37 +239,42 @@ HTML;
                        'user.options' => $rl->getModule( 'user.options' ),
                        'user.tokens' => $rl->getModule( 'user.tokens' ),
                ) );
-               $code .= Xml::encodeJsCall( 'mw.loader.load', array( $modules ) );
+               // Catch exceptions (such as "dependency missing" or "unknown module") so that we
+               // always start QUnit. Re-throw so that they are caught and reported as global exceptions
+               // by QUnit and Karma.
+               $code .= '(function () {'
+                       . 'var start = window.__karma__ ? window.__karma__.start : QUnit.start;'
+                       . 'try {'
+                       . 'mw.loader.using( ' . Xml::encodeJsVar( $modules ) . ' ).always( start );'
+                       . '} catch ( e ) { start(); throw e; }'
+                       . '}());';
 
                header( 'Content-Type: text/javascript; charset=utf-8' );
                header( 'Cache-Control: private, no-cache, must-revalidate' );
                header( 'Pragma: no-cache' );
+               echo $qunitConfig;
                echo $startup;
-               echo "\n";
-               // Note: The following has to be wrapped in a script tag because the startup module also
-               // writes a script tag (the one loading mediawiki.js). Script tags are synchronous, block
-               // each other, and run in order. But they don't nest. The code appended after the startup
-               // module runs before the added script tag is parsed and executed.
-               echo Xml::encodeJsCall( 'document.write', array( Html::inlineScript( $code ) ) );
+               // The following has to be deferred via RLQ because the startup module is asynchronous.
+               echo ResourceLoader::makeLoaderConditionalScript( $code );
        }
 
        private function plainQUnit() {
                $out = $this->getOutput();
                $out->disable();
 
-               $url = $this->getPageTitle( 'qunit/export' )->getFullURL( array(
-                       'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
-               ) );
-
-               $styles = $out->makeResourceLoaderLink(
-                       'jquery.qunit', ResourceLoaderModule::TYPE_STYLES, false
+               $styles = $out->makeResourceLoaderLink( 'jquery.qunit',
+                       ResourceLoaderModule::TYPE_STYLES
                );
-               // Use 'raw' since this is a plain HTML page without ResourceLoader
-               $scripts = $out->makeResourceLoaderLink(
-                       'jquery.qunit', ResourceLoaderModule::TYPE_SCRIPTS, false, array( 'raw' => 'true' )
+
+               // Use 'raw' because QUnit loads before ResourceLoader initialises (omit mw.loader.state call)
+               // Use 'test' to ensure OutputPage doesn't use the "async" attribute because QUnit must
+               // load before qunit/export.
+               $scripts = $out->makeResourceLoaderLink( 'jquery.qunit',
+                       ResourceLoaderModule::TYPE_SCRIPTS,
+                       array( 'raw' => true, 'sync' => true )
                );
 
-               $head = trim( $styles['html'] . $scripts['html'] );
+               $head = implode( "\n", array_merge( $styles['html'], $scripts['html'] ) );
                $summary = $this->getSummaryHtml();
                $html = <<<HTML
 <!DOCTYPE html>
@@ -264,6 +283,10 @@ $head
 $summary
 <div id="qunit"></div>
 HTML;
+
+               $url = $this->getPageTitle( 'qunit/export' )->getFullURL( array(
+                       'debug' => ResourceLoader::inDebugMode() ? 'true' : 'false',
+               ) );
                $html .= "\n" . Html::linkedScript( $url );
 
                header( 'Content-Type: text/html; charset=utf-8' );
index 56c4eb5..9e7dc00 100644 (file)
@@ -285,13 +285,14 @@ class UsersPager extends AlphabeticPager {
                        ) . ' ';
 
                # Group drop-down list
-               $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' ' .
-                       Xml::openElement( 'select', array( 'name' => 'group', 'id' => 'group' ) ) .
-                       Xml::option( $this->msg( 'group-all' )->text(), '' );
+               $sel = new XmlSelect( 'group', 'group', $this->requestedGroup );
+               $sel->addOption( $this->msg( 'group-all' )->text(), '' );
                foreach ( $this->getAllGroups() as $group => $groupText ) {
-                       $out .= Xml::option( $groupText, $group, $group == $this->requestedGroup );
+                       $sel->addOption( $groupText, $group );
                }
-               $out .= Xml::closeElement( 'select' ) . '<br />';
+
+               $out .= Xml::label( $this->msg( 'group' )->text(), 'group' ) . ' ';
+               $out .= $sel->getHTML() . '<br />';
                $out .= Xml::checkLabel(
                        $this->msg( 'listusers-editsonly' )->text(),
                        'editsOnly',
index 7371da7..f2a315e 100644 (file)
@@ -50,7 +50,11 @@ class SpecialPreferences extends SpecialPage {
 
                if ( $this->getRequest()->getCheck( 'success' ) ) {
                        $out->wrapWikiMsg(
-                               "<div class=\"successbox\">\n$1\n</div>",
+                               Xml::tags(
+                                       'div',
+                                       array( 'class' => 'successbox', 'id' => 'mw-preferences-success' ),
+                                       '$1'
+                               ),
                                'savedprefs'
                        );
                }
index e9c4042..629f88a 100644 (file)
@@ -408,8 +408,6 @@ class SpecialSearch extends SpecialPage {
         * @return bool
         */
        protected function shouldRunSuggestedQuery( SearchResultSet $textMatches ) {
-               global $wgSearchRunSuggestedQueryPercent;
-
                if ( !$this->runSuggestion ||
                        !$textMatches->hasSuggestion() ||
                        $textMatches->numRows() > 0 ||
@@ -421,7 +419,7 @@ class SpecialSearch extends SpecialPage {
                // Generate a random number between 0 and 1. If the
                // number is less than the desired percentages run it.
                $rand = rand( 0, getrandmax() ) / getrandmax();
-               return $wgSearchRunSuggestedQueryPercent > $rand;
+               return $this->getConfig()->get( 'SearchRunSuggestedQueryPercent' ) > $rand;
        }
 
        /**
index f446a98..0b500f4 100644 (file)
@@ -44,6 +44,24 @@ class LoginForm extends SpecialPage {
        const WRONG_TOKEN = 13;
        const USER_MIGRATED = 14;
 
+       public static $statusCodes = array(
+               self::SUCCESS => 'success',
+               self::NO_NAME => 'no_name',
+               self::ILLEGAL => 'illegal',
+               self::WRONG_PLUGIN_PASS => 'wrong_plugin_pass',
+               self::NOT_EXISTS => 'not_exists',
+               self::WRONG_PASS => 'wrong_pass',
+               self::EMPTY_PASS => 'empty_pass',
+               self::RESET_PASS => 'reset_pass',
+               self::ABORTED => 'aborted',
+               self::CREATE_BLOCKED => 'create_blocked',
+               self::THROTTLED => 'throttled',
+               self::USER_BLOCKED => 'user_blocked',
+               self::NEED_TOKEN => 'need_token',
+               self::WRONG_TOKEN => 'wrong_token',
+               self::USER_MIGRATED => 'user_migrated',
+       );
+
        /**
         * Valid error and warning messages
         *
@@ -1049,7 +1067,7 @@ class LoginForm extends SpecialPage {
                LoggerFactory::getInstance( 'authmanager' )->info( 'Login attempt', array(
                        'event' => 'login',
                        'successful' => $status === self::SUCCESS,
-                       'status' => $status,
+                       'status' => LoginForm::$statusCodes[$status],
                ) );
        }
 
index a6f92d6..39980d2 100644 (file)
@@ -323,7 +323,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                static $msgcache = null;
                if ( $msgcache === null ) {
                        static $msgs = array( 'isredirect', 'istemplate', 'semicolon-separator',
-                               'whatlinkshere-links', 'isimage', 'edit' );
+                               'whatlinkshere-links', 'isimage', 'editlink' );
                        $msgcache = array();
                        foreach ( $msgs as $msg ) {
                                $msgcache[$msg] = $this->msg( $msg )->escaped();
@@ -364,7 +364,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                }
 
                # Space for utilities links, with a what-links-here link provided
-               $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'], $msgcache['edit'] );
+               $wlhLink = $this->wlhLink( $nt, $msgcache['whatlinkshere-links'], $msgcache['editlink'] );
                $wlh = Xml::wrapClass(
                        $this->msg( 'parentheses' )->rawParams( $wlhLink )->escaped(),
                        'mw-whatlinkshere-tools'
index 923e65e..7a6bc77 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 79d4200..a3d10dc 100644 (file)
        "special-characters-group-gujarati": "Gujaratí",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laosiano",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index 21ddd55..94ed9b8 100644 (file)
        "readonly_lag": "تم قفل قاعدة البيانات تلقائيا حتى تستطيع الخواديم التابعة ملاحقة الخادوم الرئيسي",
        "internalerror": "عطل داخلي",
        "internalerror_info": "عطل داخلي: $1",
+       "internalerror-fatal-exception": "استثناء مميت من النوع \"$1\"",
        "filecopyerror": "تعذّر نسخ الملف \"$1\" إلى \"$2\".",
        "filerenameerror": "تعذّر تغيير اسم الملف \"$1\" إلى \"$2\".",
        "filedeleteerror": "تعذّر حذف الملف \"$1\".",
        "actionthrottled": "تم كبح الفعل",
        "actionthrottledtext": "احترازا من السُّخام، يُحظر إجراء هذا الفعل مرات كثيرة في فترة زمنية قصيرة، و لقد تجاوزت هذا الحد.\nمن فضلك حاول مجددا بعد عدة دقائق.",
        "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.",
-       "viewsourcetext": "تمكنك مطالعة و نسخ مصدر هذه الصفحة:",
-       "viewyourtext": "Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø§Ø³ØªØ¹Ø±Ø§Ø¶ Ù\88 Ù\86سخ Ù\85صدر ''' ØªØ¹Ø¯Ù\8aÙ\84اتÙ\83 ''' Ù\81Ù\8a Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة:",
+       "viewsourcetext": "يمكنك مطالعة و نسخ مصدر هذه الصفحة.",
+       "viewyourtext": "Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø±Ø¤Ù\8aØ© Ù\88 Ù\86سخ Ù\85صدر <strong>تعدÙ\8aÙ\84اتÙ\83</strong> Ù\84Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة.",
        "protectedinterface": "توفر هذه الصفحة نص الواجهة للبرنامج على هذا الويكي، وهي محمية لمنع سوء أستخدامها.\nلإضافة أو تغيير الترجمات لجميع مشاريع الويكي، رجاءً أستخدم [//translatewiki.net/ translatewiki.net]، مشروع الترجمة الخاص بميدياويكي.",
        "editinginterface": "<strong>تنبيه:</strong> تعديل هذه الصفحة سيحفظ في هذا الويكي فقط. لتعميم التعديل على جميع مشاريع ميدياويكي، عدلها في [//translatewiki.net/ مشروع ترجمة الويكي].",
        "translateinterface": "من أجل إضافة أو تعديل ترجمات في كل مشاريع الويكي يرجى استخدم [//translatewiki.net/ translatewiki.net]، مشروع ميدياويكي لترجمة الواجهة.",
        "yourdiff": "الفروق",
        "copyrightwarning": "من فضلك لاحظ أن جميع المساهمات ل {{SITENAME}} خاضعة وصادرة تحت ترخيص $2 (انظر في $1 للمزيد من التفاصيل)\nإذا لم ترد أن تخضع كتابتك للتعديل والتوزيع الحر، لا تضعها هنا<br />.\nكما أنك تتعهد بأنك قمت بكتابة ما هو موجود بنفسك، أو قمت بنسخها من مصدر يخضع ضمن الملكية العامة، أو مصدر حر آخر.\n'''لا ترسل أي عمل ذي حقوق محفوظة بدون الإذن من صاحب الحق'''.",
        "copyrightwarning2": "من فضلك لاحظ أن جميع المساهمات في {{SITENAME}} يمكن أن تعدل أو تتغير أو تزال من قبل المساهمين الآخرين.\nإذا لم تكن ترغب أن تعدل مشاركاتك بهذا الشكل، لا تضعها هنا.<br />\nأنت تقر أيضا أنك كتبت هذا بنفسك، أو نسخته من مصدر يخضع للملكية العامة، أو مصدر حر آخر (انظر $1 للتفاصيل).\n'''لا تضف أي عمل ذي حقوق محفوظة بدون تصريح!'''",
+       "editpage-cannot-use-custom-model": "نموذج المحتوى لهذه الصفحة لا يمكن تغييره.",
        "longpageerror": "'''خطأ: النص الذي قمت بإدخاله {{PLURAL:$1|واحد كيلوبايت|$1 كيلوبيات}} أطول, وهو أطول من الحد الأقصى {{PLURAL:$2|واحد كيلوبايت|$2 كيلوبايت}}.'''\nو يتعذر حفظه.",
        "readonlywarning": "'''تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.'''\n\nالإداري الذي أغلقها أعطى هذا التفسير: $1",
        "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "semiprotectedpagewarning": "'''ملاحظة:''' هذه الصفحة محمية بحيث يمكن للمستخدمين المسجلين وحدهم تعديلها.",
-       "cascadeprotectedwarning": "'''تحذير:''' تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+       "cascadeprotectedwarning": "<strong>تحذير:</strong> تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
        "titleprotectedwarning": "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
        "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
        "rev-showdeleted": "أظهر",
        "revisiondelete": "حذف/استرجاع المراجعات",
        "revdelete-nooldid-title": "مراجعة هدف غير صحيحة",
-       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة (أو مراجعات) معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
+       "revdelete-nooldid-text": "إما أنك لم تحدد مراجعة معينة هدفا لهذه الوظيفة، أو أن المراجعة المحددة غير موجودة، أو أنك تحاول إخفاء المراجعة الحالية.",
        "revdelete-no-file": "الملف المحدد غير موجود.",
        "revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
        "revdelete-show-file-submit": "نعم",
        "search-category": "(التصنيف $1)",
        "search-file-match": "(يطابق محتوى الملف)",
        "search-suggest": "أتقصد: $1",
+       "search-rewritten": "عرض النتائج ل$1. ابحث بدلا من ذلك عن $2.",
        "search-interwiki-caption": "المشاريع الشقيقة",
        "search-interwiki-default": "نتائح من $1:",
        "search-interwiki-more": "(المزيد)",
        "badsig": "توقيع خام غير صحيح؛ تحقق من وسوم HTML.",
        "badsiglength": "توقيعك طويل جدا.\nيجب أن يكون أقل من $1 {{PLURAL:$1|حرف|حروف}}.",
        "yourgender": "كيف تفضل أن توصف؟",
-       "gender-unknown": "Ø£Ù\81ضÙ\84 Ø¹Ø¯Ù\85 Ø§Ù\84Ø¥Ù\81صاح",
+       "gender-unknown": "عÙ\86د Ø°Ù\83رÙ\83Ø\8c Ø§Ù\84برÙ\86اÙ\85ج Ø³Ù\8aستخدÙ\85 Ù\83Ù\84Ù\85ات Ù\85حاÙ\8aدة Ø§Ù\84Ù\86Ù\88ع Ù\85تÙ\89 Ù\85ا Ù\83اÙ\86 Ø°Ù\84Ù\83 Ù\85Ù\85Ù\83Ù\86ا",
        "gender-male": "هو يعدل صفحات الويكي",
        "gender-female": "هي تعدل صفحات الويكي",
        "prefs-help-gender": "ضبط هذا التفضيل اختياري.\nيستخدم البرنامج هذه القيمة لمخاطبتك ومخاطبة الآخرين عنك وفقا للصيغة النحوية الملائمة للجنس.\nستكون هذه المعلومة علنية.",
        "userrights-lookup-user": "أدِر مجموعات المستخدم",
        "userrights-user-editname": "أدخل اسم مستخدم:",
        "editusergroup": "عدل مجموعات المستخدم",
-       "editinguser": "تغيير صلاحيات {{GENDER:$1|المستخدم|المستخدمة}} '''[[User:$1|$1]]''' $2",
+       "editinguser": "تغيير صلاحيات {{GENDER:$1|المستخدم|المستخدمة}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "تعديل مجموعات المستخدم",
        "saveusergroups": "احفظ مجموعات المستخدم",
        "userrights-groupsmember": "عضو في:",
        "emailccsubject": "نسخة من رسالتك إلى $1: $2",
        "emailsent": "أُرسل البريد الإلكتروني",
        "emailsenttext": "أُرسلت رسالتك الإلكترونية.",
-       "emailuserfooter": "هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة \"مراسلة المستخدم\" في {{SITENAME}}.",
+       "emailuserfooter": "هذا البريد الإلكتروني تم إرساله بواسطة $1 إلى $2 بواسطة وظيفة \"{{int:emailpage}}\" في {{SITENAME}}.",
        "usermessage-summary": "ترك رسالة نظام.",
        "usermessage-editor": "مراسل النظام",
        "watchlist": "قائمة مراقبتي",
        "watchlistanontext": "الرجاء $1 لعرض أو تعديل الصفحات في قائمة مراقبتك.",
        "watchnologin": "غير مسجل الدخول",
        "addwatch": "إضافة إلى قائمة المراقبة",
-       "addedwatchtext": "أضيفت الصفحة  \"[[:$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].\nالتغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك.",
+       "addedwatchtext": "\"[[:$1]]\" وصفحة نقاشها أضيفتا إلى [[Special:Watchlist|قائمة مراقبتك]].",
        "addedwatchtext-short": "أضيفت صفحة \"$1\" إلى قائمة مراقبتك.",
        "removewatch": "إزالة من قائمة المراقبة",
-       "removedwatchtext": "أزيلت الصفحة \"[[:$1]]\" من [[Special:Watchlist|قائمة مراقبتك]].",
+       "removedwatchtext": "\"[[:$1]]\" وصفحة نقاشها أزيلتا من [[Special:Watchlist|قائمة مراقبتك]].",
        "removedwatchtext-short": "أزيلت صفحة \"$1\" من قائمة مراقبتك.",
        "watch": "راقب",
        "watchthispage": "راقب هذه الصفحة",
        "rollback-success": "استرجع تعديلات $1؛\nاسترجع حتى آخر نسخة بواسطة $2.",
        "sessionfailure-title": "فشل في الجلسة",
        "sessionfailure": "يبدو أنه هناك مشكلة في هذه جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك اضغط على مفتاح \"رجوع\" لتحميل الصفحة التي جئت منها، ثم حاول مرة أخرى.",
+       "changecontentmodel": "غير نموذج المحتوى لصفحة",
+       "changecontentmodel-legend": "غير نموذج المحتوى",
        "changecontentmodel-title-label": "عنوان الصفحة",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "changecontentmodel-reason-label": "السبب:",
+       "changecontentmodel-success-title": "نموذج المحتوى تم تغييره",
+       "changecontentmodel-success-text": "نوع المحتوى ل[[:$1]] تم تغييره.",
+       "changecontentmodel-cannot-convert": "المحتوى على [[:$1]] لا يمكن تحويله لنوع من $2.",
+       "changecontentmodel-nodirectediting": "نموذج المحتوى $1 لا يدعم التعديل المباشر",
+       "log-name-contentmodel": "سجل تغيير نموذج المحتوى",
+       "log-description-contentmodel": "الأحداث المرتبطة بنماذج المحتوى لصفحة",
        "logentry-contentmodel-change-revertlink": "استرجع",
        "logentry-contentmodel-change-revert": "استرجع",
        "protectlogpage": "سجل الحماية",
        "protect-locked-blocked": "لا يمكنك تغيير مستويات الحماية وأنت ممنوع.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-dblock": "لا يمكن تغيير مستويات الحماية بسبب غلق قاعدة البيانات حاليا.\nالإعدادات الحالية للصفحة '''$1''' هي:",
        "protect-locked-access": "لا يملك حسابك هذا صلاحية تغيير مستوى حماية الصفحة.\nالإعدادات الحالية للصفحة '''$1''' هي:",
-       "protect-cascadeon": "هذه الصفحة محمية لكونها مضمنة في {{PLURAL:$1||الصفحة التالية|الصفحتين التاليتين|الصفحات التالية}}، والتي بها خيار حماية الصفحات المدمجة فعال.\nلن يؤثر تغيير مستوى حماية هذه الصفحة على حماية الصفحات المدمجة.",
+       "protect-cascadeon": "هذه الصفحة محمية حاليا لكونها مضمنة في {{PLURAL:$1||الصفحة التالية|الصفحتين التاليتين|الصفحات التالية}}، والتي بها خيار حماية الصفحات المدمجة فعال.\nلن يؤثر تغيير مستوى حماية هذه الصفحة على حماية الصفحات المدمجة.",
        "protect-default": "اسمح لكل المستخدمين",
        "protect-fallback": "السماح فقط للمستخدمين ذوي الصلاحية \"$1\"",
        "protect-level-autoconfirmed": "السماح فقط للمستخدمين المؤكدين تلقائيا",
        "thumbnail_image-failure-limit": "هناك الكثير من المحاولات الفاشلة مؤخراً ($1 أو أكثر) لتَصْيير هذه الصورة المصغرة. الرجاء المحاولة مرة أخرى لاحقاً.",
        "import": "استيراد صفحات",
        "importinterwiki": "استورد من ويكي أخرى",
-       "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
+       "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد من الويكيات الأخرى يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
        "import-interwiki-sourcewiki": "الويكي المصدر:",
        "import-interwiki-sourcepage": "الصفحة المصدر:",
        "import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
        "import-interwiki-templates": "ضمن كل القوالب",
        "import-interwiki-submit": "استيراد",
+       "import-mapping-default": "استورد للمواقع القياسية",
        "import-mapping-namespace": "استورد إلى نطاق:",
+       "import-mapping-subpage": "استورد كصفحات فرعية للصفحة التالية:",
        "import-upload-filename": "اسم الملف:",
        "import-comment": "تعليق:",
        "importtext": "من فضلك صدر الملف من الويكي المصدر باستخدام [[Special:Export|أداة التصدير]].\nاحفظها على حاسوبك ثم ارفعها هنا.",
        "importcantopen": "لم يمكن فتح ملف الاستيراد",
        "importbadinterwiki": "وصلة إنترويكي سيئة",
        "importsuccess": "الاستيراد انتهى!",
-       "importnosources": "لم يتم تعريف مصادر للاستيراد عبر الويكي وعمليات رفع التاريخ المباشرة معطلة.",
+       "importnosources": "لا ويكيات للاستيراد منها تم تعريفها وعمليات رفع التاريخ المباشرة معطلة.",
        "importnofile": "لم يتم رفع ملف استيراد.",
        "importuploaderrorsize": "رفع ملف الاستيراد فشل.\nالملف أكبر من حجم الرفع المسموح.",
        "importuploaderrorpartial": "فشل رفع ملف الاستيراد. لم يتم رفع الملف إلا جزئياً.",
        "tags-active-yes": "نعم",
        "tags-active-no": "لا",
        "tags-source-extension": "يعرفه امتداد",
+       "tags-source-manual": "تم تطبيقه يدويا بواسطة المستخدمين والبوتات.",
+       "tags-source-none": "لم يعد قيد الاستخدام",
        "tags-edit": "عدل",
        "tags-delete": "احذف",
        "tags-activate": "نشط",
        "tags-deactivate-reason": "سبب",
        "tags-deactivate-not-allowed": "من غير الممكن تعطيل الوسم \"$1\".",
        "tags-deactivate-submit": "عطل",
+       "tags-apply-not-allowed-one": "السوم \"$1\" غير مسموح أن يتم تطبيقه يدويا.",
+       "tags-apply-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن يتم تطبيقها يدويا: $1",
+       "tags-update-no-permission": "أنت لا تمتلك السماح لإضافة أو إزالة وسوم التغيير من المراجعات أو مدخلات السجل الفردية.",
+       "tags-update-add-not-allowed-one": "الوسم \"$1\" غير مسموح أن تتم إضافته يدويا.",
+       "tags-update-add-not-allowed-multi": "The following {{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إضافتها يدويا: $1",
        "tags-update-remove-not-allowed-one": "من غير المسموح بإزالة وسم \"$1\".",
+       "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|الوسم|الوسوم}} التالية غير مسموح أن تتم إزالتها يدويا: $1",
        "tags-edit-title": "تعديل الوسوم",
        "tags-edit-manage-link": "التحكم بالوسوم",
+       "tags-edit-revision-selected": "{{PLURAL:$1|مراجعة مختارة|مراجعات مختارة}} من [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|حدث سجل مختار|أحداث سجل مختارة}}:",
+       "tags-edit-revision-legend": "أضف أو أزل الوسوم من {{PLURAL:$1|هذه المراجعة|كل $1 المراجعات}}",
        "tags-edit-existing-tags": "الوسوم الموجودة:",
        "tags-edit-existing-tags-none": "\"لا وسوم\"",
        "tags-edit-new-tags": "وسوم جديدة:",
        "tags-edit-chosen-placeholder": "اختر بعض الوسوم",
        "tags-edit-chosen-no-results": "لا وسوم مطابقة",
        "tags-edit-reason": "السبب:",
+       "tags-edit-revision-submit": "طبق التغييرات ل{{PLURAL:$1|هذه المراجعة|$1 مراجعات}}",
+       "tags-edit-logentry-submit": "طبق التغييرات ل{{PLURAL:$1|مدخلة السجل هذه|$1 مدخلات السجل}}",
        "tags-edit-success": "طبقت التغييرات بنجاح.",
        "tags-edit-failure": "التغييرات لم تطبق: $1",
        "tags-edit-nooldid-title": "مراجعة هدف غير صالحة",
+       "tags-edit-none-selected": "من فضلك اختر على الأقل وسما واحدا للإضافة أو الإزالة.",
        "comparepages": "قارن صفحات",
        "compare-page1": "صفحة 1",
        "compare-page2": "صفحة 2",
        "htmlform-cloner-create": "إضافة المزيد",
        "htmlform-cloner-delete": "إزالة",
        "htmlform-cloner-required": "مطلوب قيمة واحدة على الأقل.",
+       "htmlform-title-badnamespace": "[[:$1]] ليس في نطاق \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" ليس عنوان صفحة يمكن إنشاؤه",
+       "htmlform-title-not-exists": "[[:$1]] غير موجود.",
        "htmlform-user-not-exists": "<strong>$1</strong> غير موجود",
        "htmlform-user-not-valid": "اسم المستخدم <strong>$1</strong> غير صالح.",
        "sqlite-has-fts": "$1 بدعم البحث في كامل النص",
        "revdelete-restricted": "طبق الضوابط لمديري النظام",
        "revdelete-unrestricted": "أزال الضوابط لمديري النظام",
        "logentry-block-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|رفع منع}} {{GENDER:$4|$3}}",
        "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|استورد}} $3 بواسطة رفع ملف",
        "logentry-import-interwiki": "$1 {{GENDER:$2|استورد|استوردت}} $3 من ويكي أخرى",
        "logentry-merge-merge": "{{GENDER:$2|دمج|دمجت}} $1 $3 إلى $4 (المراجعات حتى $5).",
        "logentry-move-move": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4",
        "feedback-cancel": "إلغاء",
        "feedback-close": "تم",
        "feedback-external-bug-report-button": "أرسل تقرير علة تقنية",
+       "feedback-dialog-title": "أرسل تغذية راجعة",
        "feedback-error-title": "خطأ",
        "feedback-error1": "خطأ: لا يمكن التعرف عليها من API",
        "feedback-error2": "خطأ: فشل في تحرير",
        "mediastatistics-header-archive": "صيغ مضغوطة",
        "json-warn-trailing-comma": "تمت إزالة {{PLURAL:$1|فاصلة انتهائية واحدة|فاصلتين انتهائيتين|$1 فاصلات انتهائية|$1 فاصلة انتهائية}} من JSON",
        "json-error-unknown": "وقعت مشكلة مع JSON. رسالة الخطأ: $1",
+       "json-error-depth": "عمق الستاك الأقصى تم تجاوزه",
+       "json-error-state-mismatch": "JSON غير صحيح أو غير مهيأ",
        "json-error-ctrl-char": "خطأ في محرف التحكم، ربما نتيجة سوء ترميزه.",
        "json-error-syntax": "خطأ صياغة",
        "json-error-utf8": "خطأ في تشكيل محارف UTF-8، ربما نتيجة سوء ترميزها.",
        "special-characters-title-endash": "واصلة قصيرة",
        "special-characters-title-emdash": "واصلة طويلة",
        "special-characters-title-minus": "علامة الطرح",
+       "mw-widgets-dateinput-no-date": "لا تاريخ تم اختياره",
        "mw-widgets-titleinput-description-new-page": "الصفحة غير موجودة بعد",
        "mw-widgets-titleinput-description-redirect": "تحويل إلى $1"
 }
index c0ccbb3..8b03f04 100644 (file)
        "actionthrottled": "Aición llendada",
        "actionthrottledtext": "Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.\nPor favor vuelvi intentalo nunos minutos.",
        "protectedpagetext": "Esta páxina ta candada pa torgar ediciones y otres aiciones.",
-       "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina:",
-       "viewyourtext": "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
+       "viewsourcetext": "Pues ver y copiar la fonte d'esta páxina.",
+       "viewyourtext": "Pues ver y copiar la fonte de <strong>les tos ediciones</strong> d'esta páxina.",
        "protectedinterface": "Esta páxina proporciona'l testu de la interfaz del software d'esta wiki, y ta candada pa torgar abusos.\nP'amestar o cambiar les traducciones de toles wikis, por favor usa [//translatewiki.net/translatewiki.net], el proyeutu de llocalización de MediaWiki.",
        "editinginterface": "<strong>Avisu:</strong> Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz del programa.\nLos cambeos nesta páxina afeutarán al aspeutu de la interfaz pa otros usuarios d'esta wiki.",
        "translateinterface": "P'amestar o camudar les traducciones pa toles wikis, usa [//translatewiki.net/ translatewiki.net], el proyeutu de traducción de MediaWiki.",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuariu|ususarios}} vixilando]",
-       "rc_categories": "Llímite pa les categoríes (dixebrar con \"|\")",
-       "rc_categories_any": "Cualesquiera",
+       "rc_categories": "Llendar a les categoríes (dixebrar con \"|\"):",
+       "rc_categories_any": "Cualquiera de les esbillaes",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} dempués del cambiu",
        "newsectionsummary": "/* $1 */ nueva seición",
        "rc-enhanced-expand": "Amosar detalles",
        "special-characters-title-endash": "guión curtiu",
        "special-characters-title-emdash": "guión llargu",
        "special-characters-title-minus": "signu menos",
+       "mw-widgets-dateinput-no-date": "Nenguna data seleicionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la páxina inda nun esiste",
        "mw-widgets-titleinput-description-redirect": "redirixir a $1"
 }
index 38c8498..45623a6 100644 (file)
@@ -14,7 +14,8 @@
                        "아라",
                        "Koroğlu",
                        "Baloch Afghanistan",
-                       "Macofe"
+                       "Macofe",
+                       "Sadiqr"
                ]
        },
        "tog-underline": "باغلانتی‌لارین آلتینی خطله:",
        "no-null-revision": "\"$1\" صحیفه‌سی اوچون یئنی بوش بیر نوسخه یارادیلا بیلمه‌دی",
        "badtitle": "پیس باشلیق",
        "badtitletext": "آختاریلان صحیفه‌‌ آدی سهودیر و يا بوْشدور، يا دا دۆزگون اوْلمايان دیللر‌آراسی، ياخود ویکیلرآراسی کئچید ایستیفاده ائدیلیب. \nباشلیقلاردا ایستیفاده ائدیلمه‌سی قاداغان اوْلونان بیر و يا داها چوْخ سیمووْل ایستیفاده ائدیلمیش اوْلا بیلر.",
+       "title-invalid-empty": "آختاردیٛغیٛنیٛز صفحه‌‌نین آدیٛ بوْشدۇر و یا آدلارفضاسیٛندا یالنیٛز آدیٛ وار.",
+       "title-invalid-utf8": "ایستنیلن صفحه‌نین آدیندا بیر یانلیش UTF-8 کاراکتِری وار.",
+       "title-invalid-interwiki": "آختاردیٛغیٛنیٛز صفحه‌ آدیٛیٛندا بیر ایستیفاده‌ اوْلۇنا بیلمه‌‌ین اینتئر ویکی باغلانتیٛسیٛ وار.",
+       "title-invalid-characters": "ایستنیلن صفحه‌نین آدیندا، یانلیش کاراکتِرلر وار: «$1»",
        "perfcached": "بو بیلگی، کَش اولوب‌دور و اولا بیلر گونجل اولماسین. چوخو {{PLURAL:$1|بیر نتیجه|$1 نتیجه}} کَش‌ده‌دیر.",
        "perfcachedts": "بو بیلگی کَش اولوب‌دور، سون دفعه $1 واختیندا گونجلیب‌دیر. چوخو {{PLURAL:$4|بیر نتیجه|$4 نتیجه}} کَش‌ده‌دیر.",
        "querypage-no-updates": "بو یارپاق‌دا گونجل‌له‌مک ایندی باغلانیب‌دیر.\nبورداکی بیلگیلر یئنی‌لشمیه‌جکلر.",
        "actionthrottled": "سیزین چالیشمانیزین قاباغی آلیندی",
        "actionthrottledtext": "آنتی-ایسپام حرکت‌لری گؤره، بیر حرکتی قیسا بیر زامان آرالیغیندا چوخئتمه‌نیز انگللندی، و سیز حدی آشمیسینیز. لطفاً بیر نئچه دقیقه سونرا یئنی‌دن یوخلایین.",
        "protectedpagetext": "بو صحیفه دیَیشدیرمک و باشقا ایشلر اوچون باغلی‌دیر.",
-       "viewsourcetext": "سیز بو صحیفه‌نین مزمونونو گؤره و کؤچوره بیلرسینیز:",
-       "viewyourtext": "'''اؤز دَییشیکلیکلرینیز''' ین کودونو گؤروب و بو صحیفه‌یه کوپی ائده بیلرسینیز:",
+       "viewsourcetext": "سیز بو صفحه‌نین قایناغینی گؤروب و کؤچوره بیلرسینیز.",
+       "viewyourtext": "سیز بو صفحه‌ده <strong>اؤز دَییشیکلیکلرینیزین</strong> قایناغینی گؤروب و کوپی ائده بیلرسینیز.",
        "protectedinterface": "بو صحیفه‌ده پروقرام تأمیناتی اوچون سیستئم بیلگی‌لری وار و سوی-ایستیفاده‌نین قارشی‌سینی آلماق اوچون محافظه اولونما‌لی‌دیر.",
        "editinginterface": "<strong>دیقت:</strong> سیز بیر یازیلیم آرا-اوزونه یازی تعمین ائدن صحیفه‌نی دَییشدیرمک‌ده‌سینیز.\nبو صحیفه‌نی دَییشدیرمک، بو ویکی‌نی ایستیفاده ائدن باشقا ایستیفاده‌چیلرین گؤرونوشونو دَییشه‌جک‌دیر.",
        "translateinterface": "ترجومه و یا اونون دَییشدیرمک هامی ویکی لر اوچون [//translatewiki.net/ translatewiki.net]،مدیا ویکی نین یئرلری ائتمک پروژه سیندن ایستفاده ائدین",
        "boteditletter": "ب",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|بیر|$1}} ایزله‌ین ایستیفاده‌چی]",
        "rc_categories": "بؤلمه‌لره محدودلاشدیر («|» ایله آییر)",
-       "rc_categories_any": "هر",
+       "rc_categories_any": "سئچیلمیشلرین هر بیریسی",
        "rc-change-size-new": "دَییشیکلیک‌دن سونرا {{PLURAL:|بیر|$1}} بایت",
        "newsectionsummary": "/* $1 */ یئنی بؤلمه",
        "rc-enhanced-expand": "تفصیل‌لری گؤستر",
        "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
        "randomincategory-category": "بؤلمه:",
        "randomincategory-legend": "بؤلمه‌ده راست‌گله صفحه",
+       "randomincategory-submit": "گئت",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "statistics": "آمارلار",
        "tooltip-pt-logout": "چیخیش",
        "tooltip-pt-createaccount": "سیزدن دعوت اولونور ایشلدن حسابی آچیب و گیریش ائده‌سیز؛ آنجاق حساب یاراتماق ایستگه باغلی‌دیر",
        "tooltip-ca-talk": "ایچینده‌کیلره گؤره دانیشیق",
-       "tooltip-ca-edit": "سÛ\8cز Ø¨Ù\88 ØµÙ\81Ø­Ù\87â\80\8cÙ\86Û\8c Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cرÙ\87 Ø¨Û\8cÙ\84رسÛ\8cÙ\86Û\8cز. Ù\84Ø·Ù\81اÙ\8b Ù\82ئÛ\8cد Ø§Ø¦ØªÙ\85Ù\87â\80\8cدÙ\86 Ù\82اباÙ\82 Ø§Ø¤Ù\86â\80\8cگؤسترÛ\8cØ´ Ø¯Ù\88Ú¯Ù\85Ù\87â\80\8cسÛ\8cÙ\86Û\8c Ø§Û\8cØ´Ù\84دÛ\8cÙ\86",
+       "tooltip-ca-edit": "بÛ\87 ØµÙ\81Ø­Ù\87â\80\8câ\80\8cÙ\86Û\8c Ø¯Ù\8eÛ\8cÛ\8cشدÛ\8cر",
        "tooltip-ca-addsection": "یئنی بؤلوم یارات",
        "tooltip-ca-viewsource": "بو صحیفه‌‌ قورونوب‌دور.\nاونون قایناغینا باخا بیلرسیز",
        "tooltip-ca-history": "بو صفحه‌نین گئچمیش سۆروملری",
        "watchlistedit-raw-done": "ایزله‌دیکلرینیز گونجل‌لندی.",
        "watchlistedit-raw-added": "{{PLURAL:$1|بیر|$1}} باشلیق آرلیریلدی:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|بیر|$1}} باشلیق چیخاریلدی:",
+       "watchlistedit-clear-legend": "ایزلدیکلریمین لیستین سیل",
        "watchlistedit-clear-titles": "باشلیق‌لار:",
+       "watchlisttools-clear": "ایزلدیکلریمین لیستین سیل",
        "watchlisttools-view": "ایلگیلی دَییشیکلیکلره باخین",
        "watchlisttools-edit": "ایزله‌دیکلره باخ و اونلاری دَییشدیر",
        "watchlisttools-raw": "چیی ایزله‌دیکلری دَییشدیر",
        "version-libraries": "نصب اولونموش کیتابخانا",
        "version-libraries-library": "کیتاب‌ائوی",
        "version-libraries-version": "نوسخه‌",
+       "version-libraries-authors": "یازارلار",
        "redirect": "فایل، ایستیفاده‌چی، صفحه یا نوسخه آی‌دی-سی ایله یول‌لاندیرما",
        "redirect-legend": "بیر فایل یا صحیفه‌یه یول‌لاندیرما",
        "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله) یا ایستیفاده‌چی صفحه‌سینه (ایستیفاده‌چی نومره آی‌دی-سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، یا [[{{#Special:Redirect}}/user/101]].",
        "tags-active-no": "یوْخ",
        "tags-edit": "دَییشدیر",
        "tags-delete": "سیل",
+       "tags-activate": "ائتکینلشدیر",
        "tags-hitcount": "$1 {{PLURAL:$1|دییشیکلیک|دییشیک‌لیک}}",
        "tags-create-submit": "یارات",
        "tags-edit-title": "اِتیکِتلری دَییشدیر",
        "htmlform-cloner-create": "چوْخراق آرتیر",
        "htmlform-cloner-delete": "سیل",
        "htmlform-cloner-required": "ان آزی بیر دیَر گرکلیدیر.",
+       "htmlform-title-badnamespace": "[[:$1]]، «{{ns:$2}}» آدفضاسیندا دئییل.",
+       "htmlform-title-not-creatable": "«$1» بیر یارانا بیلن صفحه آدی دئییل",
+       "htmlform-title-not-exists": "[[:$1]] یوخدور.",
+       "htmlform-user-not-exists": "<strong>$1</strong> یوخدور.",
+       "htmlform-user-not-valid": "<strong>$1</strong> بیر دوزگون ایشلدن آدی دئییل.",
        "sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
        "sqlite-no-fts": "$1 بوتون یازی آختارماماق‌لا",
        "logentry-delete-delete": "$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}",
        "pagelang-name": "صفحه",
        "pagelang-language": "دیل",
        "pagelang-select-lang": "دیل سئچمه‌سی",
+       "right-pagelang": "صفحه دیلینی دَییشدیر",
+       "action-pagelang": "صفحه دیلینی دَییشدیر",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ائتکین)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ائتکیسیز''')",
+       "mediastatistics": "مئدیا آمارلاری",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1}} بایت ($2؛ ٪$3)",
+       "mediastatistics-table-mimetype": "MIME تیپی",
        "mediastatistics-table-count": "فایل‌لارین سایی",
        "mediastatistics-header-unknown": "بیلینمه‌ین",
        "mediastatistics-header-bitmap": "بیت‌مپ گؤرونتولر",
        "mediastatistics-header-audio": "سس",
        "mediastatistics-header-video": "ویدیولار",
        "mediastatistics-header-office": "دفتر",
+       "mediastatistics-header-text": "یازیلی",
        "headline-anchor-title": "بو بؤلومه باغلانتی",
        "special-characters-group-latin": "لاتین",
        "special-characters-group-latinextended": "لاتین گئنیشلندیریلمیش",
        "special-characters-group-khmer": "خمر",
        "special-characters-title-endash": "آرالیق خطی دی",
        "special-characters-title-emdash": "آرالیق خطی چکیلیب",
-       "special-characters-title-minus": "منفی علامتی"
+       "special-characters-title-minus": "منفی علامتی",
+       "mw-widgets-dateinput-no-date": "تاریخ سئچیلمه‌ییب",
+       "mw-widgets-titleinput-description-new-page": "صفحه هله‌لیک یوخدور",
+       "mw-widgets-titleinput-description-redirect": "$1-ه یول‌لاندیر"
 }
index 010629d..1b0e2ed 100644 (file)
        "expand_templates_remove_comments": "Tanggalon an mga komento",
        "expand_templates_remove_nowiki": "Pugulan an mga taktak na <nowiki> sa resulta",
        "expand_templates_generate_xml": "Ipahiling an panlunhay na kahoy nin XML",
-       "expand_templates_preview": "Patânaw"
+       "expand_templates_preview": "Patânaw",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index 93ca5fb..88dec32 100644 (file)
        "special-characters-title-endash": "кароткі працяжнік",
        "special-characters-title-emdash": "доўгі працяжнік",
        "special-characters-title-minus": "мінус",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "старонка яшчэ не існуе"
 }
index e931c0d..5f71422 100644 (file)
        "special-characters-group-khmer": "кхмерски",
        "special-characters-title-endash": "средно тире",
        "special-characters-title-emdash": "дълго тире",
-       "special-characters-title-minus": "знак минус"
+       "special-characters-title-minus": "знак минус",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ"
 }
index 0bb94da..fce5289 100644 (file)
        "actionthrottled": "কাজের গতি ধীরকরণ",
        "actionthrottledtext": "স্প্যাম-রোধী সমাধান হিসেবে এই কাজটি খুব কম সময়ে অনেক বেশিবার সম্পাদনা করার সীমা বেঁধে দেওয়া হয়েছে। আপনি সেই সীমা অতিক্রম করেছেন। অনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।",
        "protectedpagetext": "সম্পাদনা অথবা স্থানান্তর এড়াতে এ পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে।",
-       "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:",
-       "viewyourtext": "আপনি এই পাতায় <strong>আপনার সম্পাদনা</strong>দেখতে এবং অনুলিপি করতে পারেন:",
+       "viewsourcetext": "এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন",
+       "viewyourtext": "আপনি এই পাতায় <strong>আপনার সম্পাদনা</strong>দেখতে এবং অনুলিপি করতে পারেন",
        "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
        "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
        "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [//translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
        "newpageletter": "ন",
        "boteditletter": "ব",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|জন ব্যবহারকারী|জন ব্যবহারকারী}} এই পাতার উপর নজর রাখছেন]",
-       "rc_categories": "à¦\8fà¦\87 à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80à¦\97à§\81লিতà§\87 à¦¸à§\80মাবদà§\8dধ à¦\95রা à¦¹à§\8bà¦\95 (\"|\" à¦¦à¦¿à¦¯à¦¼à§\87 à¦\86লাদা à¦\95রà§\87 à¦²à¦¿à¦\96à§\81ন)",
-       "rc_categories_any": "যà§\87à¦\95à§\8bনà§\8b",
+       "rc_categories": "বিষয়শà§\8dরà§\87ণà§\80à¦\97à§\81লিতà§\87 à¦¸à§\80মা (\"|\" à¦¦à¦¿à¦¯à¦¼à§\87 à¦\86লাদা à¦\95রà§\81ন):",
+       "rc_categories_any": "à¦\9aয়নà§\87র à¦\9cনà§\8dয à¦¯à§\87à¦\95à§\8bনà§\8b à¦\95িà¦\9bà§\81",
        "rc-change-size-new": "পরিবর্তনের পর $1 {{PLURAL:$1|বাইট}}",
        "newsectionsummary": "/* $1 */ নতুন অনুচ্ছেদ",
        "rc-enhanced-expand": "বিস্তারিত দেখাও",
index c106768..fad172e 100644 (file)
        "viewsourcelink": "pogledaj izvor",
        "editsectionhint": "Uredi sekciju: $1",
        "toc": "Sadržaj",
-       "showtoc": "pokaži",
+       "showtoc": "prikaži",
        "hidetoc": "sakrij",
        "collapsible-collapse": "sklopi",
        "collapsible-expand": "Proširi",
        "actionthrottled": "Akcija je usporena",
        "actionthrottledtext": "Kao anti-spam mjera, ograničene su vam izmjene u određenom vremenu, i trenutačno ste dostigli to ograničenje. Pokušajte ponovo poslije nekoliko minuta.",
        "protectedpagetext": "Ova stranica je zaključana da bi se spriječile izmjene.",
-       "viewsourcetext": "Možete vidjeti i kopirati izvorni kôd ove stranice:",
+       "viewsourcetext": "Možete vidjeti i kopirati izvorni kôd ove stranice.",
        "viewyourtext": "Možete da pogledate i kopirate izvor '''vaših izmjena''' na ovoj stranici:",
        "protectedinterface": "Ova stranica sadrži tekst korisničkog okruženja za softver na ovom wikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili izmjenili prijevode svih wikija, posjetite [//translatewiki.net/  translatewiki.net], projekat za lokalizaciju Mediawikija.",
        "editinginterface": "<strong>Upozorenje:</strong> Mijenjate stranicu koja sadrži aktivan tekst programa.\nPromjene na ovoj stranici dovode i do promjena za druge korisnike ovog wikija.\nZa dodavanje ili promjene prijevoda za sve wikije, molimo Vas koristite [//translatewiki.net/ translatewiki.net], projekt prijevoda za MediaWiki.",
        "php-mail-error-unknown": "Nepoznata greška u PHP funkciji mail()",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez navedene e-mail adrese.",
        "user-mail-no-body": "Pokušano slanje e-poruke s praznim ili nerazumno kratkim sadržajem.",
-       "changepassword": "Promijeni lozinku",
+       "changepassword": "Promijeni šifru",
        "resetpass_announce": "Da biste završili prijavu, morate postaviti novu šifru.",
        "resetpass_text": "<!-- Unesi tekst ovdje -->",
        "resetpass_header": "Obnovi šifru za račun",
        "passwordreset-emailsent": "Podsjetnik na lozinku poslan je na Vašu e-mail adresu.",
        "passwordreset-emailsent-capture": "Poslan je podsjetnik preko e-pošte (prikazano ispod).",
        "passwordreset-emailerror-capture": "E-poruka za resetiranje lozinke, prikazano ispod, poslana je, ali slanje {{GENDER:$2|korisniku|korisnici}} nije uspjelo: $1",
-       "changeemail": "Promijeni e-mail adresu",
-       "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju e-mail adresu. Morat ćete upisati svoj pasvord da potvrdite ovu promjenu.",
+       "changeemail": "Promjena e-adrese",
+       "changeemail-text": "Ispunite ovaj formular da biste promijenili svoju adresu e-pošte, odnosno e-adresu. Morat ćete upisati svoju šifru kako biste potvrdili ovu promjenu.",
        "changeemail-no-info": "Morate biti prijavljeni za direktan pristup ovoj stranici.",
-       "changeemail-oldemail": "Trenutna e-mail adresa:",
-       "changeemail-newemail": "Nova e-mail adresa:",
+       "changeemail-oldemail": "Trenutna adresa e-pošte:",
+       "changeemail-newemail": "Nova adresa e-pošte:",
        "changeemail-none": "(ništa)",
-       "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
-       "changeemail-submit": "Promijeni e-mail",
+       "changeemail-password": "Vaša šifra za {{SITENAME}}:",
+       "changeemail-submit": "Promijeni adresu e-pošte",
        "changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resettokens": "Resetovanje žetona",
        "resettokens-text": "Možete ponovno postaviti tokene koji će vam omogućiti pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTrebali bi to učiniti ako ih mimo volje podijelite s nekim ili ako je vaš račun ugrožen.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazan objekat",
        "content-json-empty-array": "Prazan niz",
-       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] sa više od jedne vrijednosti za paramentar \"$3\". Bit će prikazana samo posljednja vrijednosti.",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] sa više od jedne vrijednosti za parametar \"$3\". Koristit će se samo posljednja navedena vrijednost.",
        "duplicate-args-category": "Stranice sa istim argumentima kod poziva šablona",
        "duplicate-args-category-desc": "Stranica sadrži pozive šablona koji koriste argumente dvojnike, kao što su <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ili <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše poziva opterećujućih parserskih funkcija.\n\nTrebalo bi imati manje od $2 {{PLURAL:$2|poziv|poziva}}, a sad ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "rev-deleted-diff-view": "Jedna od revizija u ovoj razlici je '''obrisana'''.\nVi možete vidjeti ovu razliku; detalji o tome se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku brisanja].",
        "rev-suppressed-diff-view": "Jedna od revizija u ovoj razlici je '''sakrivena'''.\nVi možete vidjeti ovu razliku; detalji se mogu vidjeti u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} zapisniku sakrivanja].",
        "rev-delundel": "pokaži/sakrij",
-       "rev-showdeleted": "Pokaži",
+       "rev-showdeleted": "prikaži",
        "revisiondelete": "Obriši/vrati revizije",
        "revdelete-nooldid-title": "Nije unesena tačna revizija",
        "revdelete-nooldid-text": "Niste odredili odredišnu verziju da se izvrši ova funkcija, ili ta verzija ne postoji, ili pokušavate sakriti trenutnu verziju.",
        "mergelog": "Zapisnik spajanja",
        "revertmerge": "Vrati spajanje",
        "mergelogpagetext": "Ispod je spisak nedavnih spajanja historija stranica.",
-       "history-title": "Historija revizija \"$1\"",
+       "history-title": "Historija izmjena stranice \"$1\"",
        "difference-title": "Razlike između revizija od \"$1\"",
        "difference-title-multipage": "Razlika između stranica \"$1\" i \"$2\"",
        "difference-multipage": "(Razlika između stranica)",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove izmjene počev od $3 $2",
-       "rcshowhideminor": "$1 male izmjene",
-       "rcshowhideminor-show": "Pokaži",
+       "rcshowhideminor": "$1 manje izmjene",
+       "rcshowhideminor-show": "Prikaži",
        "rcshowhideminor-hide": "Sakrij",
        "rcshowhidebots": "$1 botove",
-       "rcshowhidebots-show": "Pokaži",
+       "rcshowhidebots-show": "Prikaži",
        "rcshowhidebots-hide": "Sakrij",
        "rcshowhideliu": "$1 registrovane korisnike",
-       "rcshowhideliu-show": "Pokaži",
+       "rcshowhideliu-show": "Prikaži",
        "rcshowhideliu-hide": "Sakrij",
        "rcshowhideanons": "$1 anonimne korisnike",
-       "rcshowhideanons-show": "Pokaži",
+       "rcshowhideanons-show": "Prikaži",
        "rcshowhideanons-hide": "Sakrij",
        "rcshowhidepatr": "$1 patrolirane izmjene",
-       "rcshowhidepatr-show": "Pokaži",
+       "rcshowhidepatr-show": "Prikaži",
        "rcshowhidepatr-hide": "Sakrij",
        "rcshowhidemine": "$1 moje izmjene",
-       "rcshowhidemine-show": "Pokaži",
+       "rcshowhidemine-show": "Prikaži",
        "rcshowhidemine-hide": "Sakrij",
-       "rclinks": "Prikaži najskorijih $1 izmjena u posljednjih $2 dana<br />$3",
+       "rclinks": "Prikaži posljednjih $1 izmjena u posljednjih $2 dana<br />$3",
        "diff": "razl",
        "hist": "hist",
        "hide": "Sakrij",
        "withoutinterwiki": "Članci bez interwiki linkova",
        "withoutinterwiki-summary": "Slijedeće stranice nemaju linkove prema verzijama na drugim jezicima.",
        "withoutinterwiki-legend": "Prefiks",
-       "withoutinterwiki-submit": "Pokaži",
+       "withoutinterwiki-submit": "Prikaži",
        "fewestrevisions": "Stranice sa najmanje izmjena",
        "nbytes": "$1 {{PLURAL:$1|bajt|bajtova}}",
        "ncategories": "$1 {{PLURAL:$1|kategorija|kategorije}}",
        "showhideselectedlogentries": "Pokaži/sakrij izabrane zapise u evidenciji",
        "log-edit-tags": "Uredi oznake izabranih zapisničkih unosa",
        "allpages": "Sve stranice",
-       "nextpage": "Sljedeća strana ($1)",
+       "nextpage": "Sljedeća stranica ($1)",
        "prevpage": "Prethodna stranica ($1)",
        "allpagesfrom": "Prikaži stranice počev od:",
        "allpagesto": "Prikaži stranice koje završavaju na:",
-       "allarticles": "Svi članci",
+       "allarticles": "Sve stranice",
        "allinnamespace": "Sve stranice (imenski prostor $1)",
        "allpagessubmit": "Idi",
        "allpagesprefix": "Prikaži stranice sa prefiksom:",
        "linksearch-line": "$1 vodi sa $2",
        "linksearch-error": "Džokeri se mogu pojavljivati samo na početku adrese.",
        "listusersfrom": "Prikaži korisnike koji počinju sa:",
-       "listusers-submit": "Pokaži",
+       "listusers-submit": "Prikaži",
        "listusers-noresult": "Nije pronađen korisnik.",
        "listusers-blocked": "(blokiran)",
        "activeusers": "Spisak aktivnih korisnika",
        "emailuser-title-target": "Pošalji e-poruku {{GENDER:$1|korisniku|korisnici|korisniku}}",
        "emailuser-title-notarget": "Pošalji e-mail korisniku",
        "emailpage": "Pošalji e-mail korisniku",
-       "emailpagetext": "Možete korisiti formu ispod za slanje e-mail poruka {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku}}.\nE-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.",
+       "emailpagetext": "Možete korisiti obrazac ispod za slanje poruke e-poštom {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku}}.\nAdresa e-pošte koju ste unijeli u [[Special:Preferences|svojim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.",
        "defemailsubject": "{{SITENAME}} e-pošta od {{GENDER:$1|korisnika|korisnice|korisnika}} $1",
        "usermaildisabled": "Korisnički e-mail onemogućen",
        "usermaildisabledtext": "Ne možete poslati e-mail drugim korisnicima na ovoj wiki",
        "emailtarget": "Unesite korisnika za primanje e-mailova",
        "emailusername": "Korisničko ime:",
        "emailusernamesubmit": "Pošalji",
-       "email-legend": "Slanje e-maila drugom {{SITENAME}} korisniku",
+       "email-legend": "Slanje e-poruke drugom {{SITENAME}} korisniku",
        "emailfrom": "Od:",
        "emailto": "Za:",
        "emailsubject": "Naslov:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi kopiju moje poruke.",
+       "emailccme": "Pošalji mi kopiju moje poruke e-poštom.",
        "emailccsubject": "Kopiraj Vašu poruku za $1: $2",
        "emailsent": "Poruka poslata",
        "emailsenttext": "Vaša poruka je poslata e-poštom.",
        "emailuserfooter": "Ovaj e-mail je poslao $1 korisniku $2 putem funkcije \"{{int:emailpage}}\" sa {{SITENAME}}.",
        "usermessage-summary": "Ostavljanje sistemske poruke.",
        "usermessage-editor": "Sistem za poruke",
-       "watchlist": "Praćeni članci",
-       "mywatchlist": "Praćeni članci",
+       "watchlist": "Spisak praćenja",
+       "mywatchlist": "Spisak praćenja",
        "watchlistfor2": "Za $1 $2",
        "nowatchlist": "Nemate ništa na svom spisku praćenih članaka.",
        "watchlistanontext": "Morate biti prijavljeni kako biste vidjeli ili uređivali svoj spisak praćenih članaka.",
        "notanarticle": "Nije članak",
        "notvisiblerev": "Revizija je obrisana",
        "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica }} na vašem spisku praćenja, ne računajući posebno stranice za razgovor.",
-       "wlheader-enotif": "Obavještavanje e-poštom je omogućeno.",
-       "wlheader-showupdated": "Stranice koje su izmijenjene okad ste ih posljednji put posjetili su prikazane <strong>podebljanim slovima</strong>.",
+       "wlheader-enotif": "Uključeno je obavještenje e-poštom.",
+       "wlheader-showupdated": "Stranice koje su izmijenjene otkad ste ih posljednji put posjetili su prikazane <strong>podebljanim slovima</strong>.",
        "wlnote": "Ispod {{PLURAL:$1|je najskorija izmjena|su <strong>$1</strong> najskorije izmjene|<strong>$1</strong> najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Opcije spiska praćenja",
        "watching": "Pratim...",
        "unwatching": "Ne pratim...",
        "watcherrortext": "Desila se greška pri promjeni postavki vašeg spiska praćenja za \"$1\".",
-       "enotif_reset": "Označi sve strane kao posjećene",
+       "enotif_reset": "Označi sve stranice kao posjećene",
        "enotif_impersonal_salutation": "{{SITENAME}} korisnik",
        "enotif_subject_deleted": "{{gender:$2|Korisnik|Korisnica}} $2 {{gender:$2|obrisao|obrisala}} je stranicu $1 projekta {{SITENAME}}",
        "enotif_subject_created": "{{gender:$2|Korisnik|Korisnica}} $2 {{gender:$2|napravio|napravila}} je stranicu $1 projekta {{SITENAME}}",
        "delete-legend": "Obriši",
        "historywarning": "<strong>Upozorenje</strong>: Stranica koju želite da obrišete ima historiju sa otprilike $1 {{PLURAL:$1|revizijom|revizije|revizija}}:",
        "confirmdeletetext": "Brisanjem ćete obrisati stranicu ili sliku zajedno sa historijom iz baze podataka, ali će se iste moći vratiti kasnije.\nMolim potvrdite svoju namjeru, da razumijete posljedice i da ovo radite u skladu sa [[{{MediaWiki:Policy-url}}|pravilima]].",
-       "actioncomplete": "Akcija završena",
+       "actioncomplete": "Radnja je izvršena",
        "actionfailed": "Akcija nije uspjela",
        "deletedtext": "Stranica \"$1\" je obrisana.\nPogledajte $2 za zapisnik nedavnih brisanja.",
        "dellogpage": "Zapisnik brisanja",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Izmijeni odabir",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 revizija vraćena|$1 revizije vraćene|$1 revizija vraćeno}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revizija|$1 revizije|$1 revizija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
+       "undeletedrevisions": "{{PLURAL:$1|$1 verzija vraćena|$1 verzije vraćene|$1 verzija vraćeno}}",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 verzija|$1 verzije|$1 verzija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
        "undeletedfiles": "{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}",
        "cannotundelete": "Vraćanje nije uspjelo:\n$1",
        "undeletedpage": "'''$1 je vraćena'''\n\nProvjerite [[Special:Log/delete|zapis brisanja]] za zapise najskorijih brisanja i vraćanja.",
        "undelete-error-long": "Desile su se pogreške pri vraćanju datoteke:\n\n$1",
        "undelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "undelete-show-file-submit": "Da",
-       "namespace": "Vrsta članka:",
+       "namespace": "Imenski prostor:",
        "invert": "Sve osim odabranog",
        "tooltip-invert": "Označite ovu kutiju za sakrivanje promjena na stranicama u odabranom imenskom prostoru (i povezanim imenskim prostorima ako je označeno)",
        "tooltip-whatlinkshere-invert": "Označite ovu kutiju za sakrivanje linkova sa stranica u izabranom imenskom prostoru.",
        "blanknamespace": "(Glavno)",
        "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}",
        "contributions-title": "Doprinosi korisnika $1",
-       "mycontris": "Doprinos",
+       "mycontris": "Doprinosi",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
        "tooltip-pt-mytalk": "Vaša stranica za razgovor",
        "tooltip-pt-anontalk": "Razgovor o doprinosu sa ove IP adrese",
        "tooltip-pt-preferences": "Vaše postavke",
-       "tooltip-pt-watchlist": "Spisak članaka koje pratite.",
-       "tooltip-pt-mycontris": "Spisak vašeg doprinosa",
+       "tooltip-pt-watchlist": "Spisak stranica koje pratite",
+       "tooltip-pt-mycontris": "Spisak vaših doprinosa",
        "tooltip-pt-login": "Predlažemo da se prijavite, ali nije obvezno.",
        "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
        "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno",
        "watchlistedit-clear-done": "Vaš spisak praćenja je očišćen.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 naslov je uklonjen|$1 naslova su uklonjena|$1 naslova je uklonjeno}}:",
        "watchlistedit-too-many": "Ima previše stranica za prikaz ovdje.",
-       "watchlisttools-clear": "Očisti spisak nadgledanja",
+       "watchlisttools-clear": "Očisti spisak praćenja",
        "watchlisttools-view": "Pogledaj srodne izmjene",
        "watchlisttools-edit": "Pogledaj i uredi spisak praćenja",
        "watchlisttools-raw": "Uredi spisak praćenja u okviru za uređivanje",
        "tags-edit-nooldid-title": "Neispravna odredišna verzija",
        "tags-edit-nooldid-text": "Niste izabrali odredišnu verziju na koju treba primijeniti ovu funkciju, ili odredišna verzija na postoji.",
        "tags-edit-none-selected": "Izaberite bar jednu oznaku koju treba dodati ili ukloniti.",
-       "comparepages": "Usporedi stranice",
+       "comparepages": "Uporedi stranice",
        "compare-page1": "Stranica 1",
        "compare-page2": "Stranica 2",
        "compare-rev1": "Ispravljanje 1",
        "compare-rev2": "Ispravljanje 2",
-       "compare-submit": "Usporedi",
+       "compare-submit": "Uporedi",
        "compare-invalid-title": "Naslov koji ste unijeli je nevaljan.",
        "compare-title-not-exists": "Naslov koji ste naveli ne postoji.",
        "compare-revision-not-exists": "Izmjena koji ste naveli ne postoji.",
index f171f04..5f12248 100644 (file)
        "special-characters-title-endash": "guió curt",
        "special-characters-title-emdash": "guió llarg",
        "special-characters-title-minus": "signe menys",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la pàgina no existeix encara",
        "mw-widgets-titleinput-description-redirect": "redirigeix a $1"
 }
index 0759943..3992509 100644 (file)
@@ -8,7 +8,8 @@
                        "Sasan700",
                        "Умар",
                        "아라",
-                       "Kaganer"
+                       "Kaganer",
+                       "Исмаил Садуев"
                ]
        },
        "tog-underline": "КӀел сиз хьакха хьажорган:",
        "undo-summary": "Юхадаьккхина {{GENDER:$2|декъашхочун}} [[Special:Contributions/$2|$2]] ([[User talk:$2|дийц.]]) нисдар $1",
        "undo-summary-username-hidden": "Юхадаьккхина декъашхочун нисдарш $1, цунна цӀе дӀахьулйина",
        "cantcreateaccounttitle": "Декъашхочун дӀаяздар кхолла йиш яц",
-       "viewpagelogs": "Гайта хlокху агlонан тептар",
+       "viewpagelogs": "Гайта хӀокху агӀонан тептар",
        "nohistory": "ХӀокху агӀона хийцамаш бина хила бац.",
        "currentrev": "Карара верси",
        "currentrev-asof": "Карара верси $1",
        "diff-empty": "(башхалла яц)",
        "diff-multi-sameuser": "(ца {{PLURAL:$1|гайтина юккъера цхьа верси|гайтина юккъера цхьа версеш}} оьцу декъашхочун)",
        "diff-multi-otherusers": "(ца {{PLURAL:$1|гайтина юккъера верси|гайтина юккъера версеш}} {{PLURAL:$2|кхин цхьан декъашхочун|$2 декъашхойн}})",
-       "diff-multi-manyusers": "({{PLURAL:$1|гайÑ\82ина Ñ\8fÑ\86 $1 Ñ\8eккÑ\8aеÑ\80а Ð²ÐµÑ\80Ñ\81и, Ð¹Ð¸Ð½Ð°|не Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ\8b $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
+       "diff-multi-manyusers": "({{PLURAL:$1|гайÑ\82ина Ñ\8fÑ\86 $1 Ñ\8eккÑ\8aеÑ\80а Ð²ÐµÑ\80Ñ\81и, Ð¹Ð¸Ð½Ð°|гайÑ\82ина Ñ\8fÑ\86 $1 юккъера версеш, йина}} {{PLURAL:$2|$2 декъашхочо|$2 декъашхоша}})",
        "searchresults": "Карийнарш",
        "searchresults-title": "Лахар «$1»",
        "titlematches": "АгӀонийн цӀерш цхьаьнанисялар",
        "search-category": "(категори $1)",
        "search-file-match": "(файлан чулацаме тера хилар)",
        "search-suggest": "Хила мега ахьа лоьхарг: $1",
+       "search-rewritten": "Гайтина карийнарш $1. Цуна метта лаха $2.",
        "search-interwiki-caption": "Гергара проекташ",
        "search-interwiki-default": "$1 хилам:",
        "search-interwiki-more": "(кхин)",
        "recentchanges-legend": "Керлачу хийцамийн нисдарш",
        "recentchanges-summary": "Лахахь гайтина хене хьаьжжина Википедин агӀонашкахь тӀаьхьара бина хийцамаш",
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
-       "recentchanges-feed-description": "Тергам бе тlаьхьара вики хийцаман хlокху ларца.",
+       "recentchanges-feed-description": "Тергам бе тӀаьххьара вики хийцаман хӀокху ларца.",
        "recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
        "recentchanges-label-minor": "Хlара нисдинарг къастийна жимо долушсан",
        "recentchanges-label-bot": "ХӀара нисдар бото дина",
        "removedwatchtext": "АгӀо «[[:$1]]» дӀаяьккхина яра хьан [[Special:Watchlist|тергаме могӀанан юкъар]].",
        "removedwatchtext-short": "«$1» агӀо хьан тергаман магӀам чура дӀаяьккхина.",
        "watch": "Тидам бе",
-       "watchthispage": "Тергам бé хlокху агlон",
+       "watchthispage": "Тергам бé хӀокху агӀона",
        "unwatch": "Тергамах къаста",
        "unwatchthispage": "ДӀадаккха терго яр",
        "notanarticle": "Бац яззам",
        "tooltip-ca-edit": "Тае хӀара агӀо",
        "tooltip-ca-addsection": "Кхолла керла дакъа",
        "tooltip-ca-viewsource": "Хlара агlо хийцам цабайта гароллехь ю, хьоьга далундерг хьажар а дезахь чура йоза хьаэцар",
-       "tooltip-ca-history": "Хlокху агlон хийцамаш болу тептар",
+       "tooltip-ca-history": "ХӀокху агӀона хийцамаш болу тептар",
        "tooltip-ca-protect": "Ларъе агӀо хийцамаш цабайта",
        "tooltip-ca-unprotect": "Дlадаккха хlокху агlонна долу гаролла",
        "tooltip-ca-delete": "ДӀаяккха хӀара агӀо",
        "tooltip-n-help": "ГӀоде меттиг",
        "tooltip-t-whatlinkshere": "Массо агӀон могӀам, хӀокху агӀонтӀе хьажийна йолу",
        "tooltip-t-recentchangeslinked": "Тlаьхьарлера хийцамаш хlокху агlонашкахь, мичхьа хьажийна хlара агlо",
-       "tooltip-feed-rss": "Хьагайтар оцу RSS цани хlокху агlон",
+       "tooltip-feed-rss": "ХӀокху агӀона трансляци RSS-рца",
        "tooltip-feed-atom": "Хьагайтар оцу Atom цани хlокху агlон",
        "tooltip-t-contributions": "ХӀокху декъашхочо хийцина йолу агӀонийн могӀам",
        "tooltip-t-emailuser": "ДӀабахьийта хаам оцу декъашхона",
        "tooltip-t-upload": "Чуйаха файлаш",
        "tooltip-t-specialpages": "Белхан агӀонанийн могӀам",
-       "tooltip-t-print": "Хlокху агlонна зорба туху башхо",
+       "tooltip-t-print": "ХӀокху агӀонна зорба туху башхо",
        "tooltip-t-permalink": "Даима йолу хьажорг хӀокху башха агӀонна",
        "tooltip-ca-nstab-main": "Яззамна чулацам",
        "tooltip-ca-nstab-user": "ХӀора декъашхочун долахь йолу агӀо ю",
index c8828d1..5d0ff29 100644 (file)
        "revertmerge": "Айыр",
        "mergelogpagetext": "Саифелернинъ кечмиш версияларынынъ бир-бирлеринен энъ сонъки бирлештирильмелери ашагъыдаки джедвельде косьтерильген.",
        "history-title": "\"$1\" саифесининъ денъиштирмелер тарихы",
+       "difference-title": "«$1» саифесининъ версиялары арасындаки фаркъ",
+       "difference-title-multipage": "«$1» иле «$2» саифелери арасындаки фаркъ",
        "difference-multipage": "(Саифелер арасындаки фаркъ)",
        "lineno": "$1 сатыр:",
        "compareselectedversions": "Сайлангъан версияларны тенъештир",
        "showhideselectedversions": "Сайлангъан версияларны косьтер/гизле",
        "editundo": "лягъу эт",
+       "diff-empty": "(фаркъ ёкъ)",
        "diff-multi-manyusers": "($2-ден зияде {{PLURAL:$2|1=къулланыджы|къулланыджы}}нынъ япкъан {{PLURAL:$1|1=бир ара версиясы|$1 ара версиясы}} косьтерильмей)",
        "searchresults": "Къыдырув нетиджелери",
        "searchresults-title": "«$1» ичюн къыдырув нетиджелери",
        "nlinks": "{{PLURAL:$1|1=1 багъланты|$1 багъланты}}",
        "nmembers": "{{PLURAL:$1|1=1 аза|$1 аза}}",
        "nrevisions": "{{PLURAL:$1|1=1 версия|$1 версия}}",
-       "nviews": "{{PLURAL:$1|1=1 корюнюв|$1 корюнюв}}",
        "specialpage-empty": "Бу соратма ичюн ич нетидже ёкъ.",
        "lonelypages": "Озюне ич багъланты олмагъан саифелер",
        "lonelypagestext": "Ашагъыдаки саифелерге {{SITENAME}} сайтындаки дигер саифелерден багъланты берильмеген, ондан да гъайры мезкюр саифелер дигер саиферлрге кирсетильмеген.",
index 47e30dd..ff168b4 100644 (file)
        "revertmerge": "Ayır",
        "mergelogpagetext": "Saifelerniñ keçmiş versiyalarınıñ bir-birlerinen eñ soñki birleştirilmeleri aşağıdaki cedvelde kösterilgen.",
        "history-title": "\"$1\" saifesiniñ deñiştirmeler tarihı",
+       "difference-title": "“$1” saifesiniñ versiyaları arasındaki farq",
+       "difference-title-multipage": "“$1” ile “$2” saifeleri arasındaki farq",
        "difference-multipage": "(Saifeler arasındaki farq)",
        "lineno": "$1 satır:",
        "compareselectedversions": "Saylanğan versiyalarnı teñeştir",
        "showhideselectedversions": "Saylanğan versiyalarnı köster/gizle",
        "editundo": "lâğu et",
+       "diff-empty": "(farq yoq)",
        "diff-multi-manyusers": "($2-den ziyade {{PLURAL:$2|qullanıcı|qullanıcı}}nıñ yapqan {{PLURAL:$1|bir ara versiyası|$1 ara versiyası}} kösterilmey)",
        "searchresults": "Qıdıruv neticeleri",
        "searchresults-title": "\"$1\" içün qıdıruv neticeleri",
        "nlinks": "{{PLURAL:$1|1 bağlantı|$1 bağlantı}}",
        "nmembers": "{{PLURAL:$1|1 aza|$1 aza}}",
        "nrevisions": "{{PLURAL:$1|1 versiya|$1 versiya}}",
-       "nviews": "{{PLURAL:$1|1 körünüv|$1 körünüv}}",
        "specialpage-empty": "Bu soratma içün iç netice yoq.",
        "lonelypages": "Özüne iç bağlantı olmağan saifeler",
        "lonelypagestext": "Aşağıdaki saifelerge {{SITENAME}} saytındaki diger saifelerden bağlantı berilmegen, ondan da ğayrı mezkür saifeler diger saiferlrge kirsetilmegen.",
index 6f15117..eb515b8 100644 (file)
        "special-characters-title-endash": "krátká pomlčka",
        "special-characters-title-emdash": "dlouhá pomlčka",
        "special-characters-title-minus": "znaménko minus",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "stránka zatím neexistuje",
        "mw-widgets-titleinput-description-redirect": "přesměrování na $1"
 }
index 144fcbe..241494e 100644 (file)
@@ -6,7 +6,8 @@
                        "Svetko",
                        "Wolliger Mensch",
                        "ОйЛ",
-                       "아라"
+                       "아라",
+                       "Илья Драконов"
                ]
        },
        "tog-oldsig": "нꙑнѣшьн҄ь аѵтографъ :",
        "minoreditletter": "м҃л",
        "newpageletter": "н҃в",
        "boteditletter": "а҃ѵ",
+       "rc_categories_any": "Любы из выбраных",
        "rc-change-size-new": "$1 {{PLURAL:$1|баитъ|баита|баитъ}} послѣди мѣнꙑ",
        "rc-old-title": "напрьва страница створѥна ꙗко ⁖ $1 ⁖",
        "recentchangeslinked": "съвѧꙁанꙑ страницѧ",
        "protectedarticle": "⁖ [[$1]] ⁖ ꙁабранѥна ѥстъ",
        "prot_1movedto2": "⁖ [[$1]] ⁖ нарєчєнъ ⁖ [[$2]] ⁖ ѥстъ",
        "protectcomment": "какъ съмꙑслъ :",
+       "protect-cascadeon": "Эта страница защищена от редактирования {{PLURAL:$1|page, which has|pages, which have}}.",
        "protect-level-sysop": "толико съмотритєлє",
        "protect-othertime": "ино врѣмѧ :",
        "protect-othertime-op": "ино врѣмѧ",
index 7b9a02d..81a1bd2 100644 (file)
        "category-file-count": "{{PLURAL:$2|1=Ку категоринче пĕр файл кăна.|Ку категоринчи $2 файлтан $1 кăтартнă.}}",
        "category-file-count-limited": "Ку категоринче $1 файл.",
        "listingcontinuesabbrev": "(малалли)",
-       "about": "Ä\82нланÑ\82аÑ\80кÄ\83Ñ\87",
+       "about": "Ä\82нланÑ\82аÑ\80ни",
        "article": "Статья",
        "newwindow": "(çĕнĕ чӳречере)",
        "cancel": "Пăрахăçла",
        "disclaimers": "Яваплăха тивĕçтерменни",
        "disclaimerpage": "Project:Яваплăха тивĕçтерменни",
        "edithelp": "Улшăнусене кĕртме пулăшакан пулăшу",
+       "helppage-top-gethelp": "Пулăшу",
        "mainpage": "Тĕп страницă",
        "mainpage-description": "Тĕп страницă",
        "policy-url": "Project:Йĕркесем",
        "yourpassword": "Вăрттăн сăмах:",
        "yourpasswordagain": "Вăрттăн сăмах тепре çырăр:",
        "remembermypassword": "Ку компьютер çинче мана астуса хăвармалла (for a maximum of $1 {{PLURAL:$1|1=day|days}})",
-       "yourdomainname": "Сирĕн домен",
+       "yourdomainname": "Сирĕн доменă:",
        "login": "Кĕрĕр",
        "nav-login-createaccount": "Сайта кĕр / регистрацилен",
        "userlogin": "Кĕр / аккаунт ту",
        "prefixindex": "Сăмах пуçламăшĕсен кăтартмăшĕ",
        "shortpages": "Кĕске статьясем",
        "longpages": "Вăрăм страницăсем",
-       "deadendpages": "Ниăçта та урăх ертмен страницăсем",
+       "deadendpages": "Нимĕнпе те çыхăнман страницăсем",
        "protectedpages": "Хӳтĕленĕ страницăсем",
        "protectedtitles": "Юраман ятсем",
        "listusers": "Хутшăнакансен списокĕ",
        "noimages": "Ӳкерчĕксем çук.",
        "ilsubmit": "Шырамалла",
        "bydate": "дата тăрăх",
+       "yesterday-at": "Ĕнер $1",
        "metadata": "Метаданнăйсем:",
        "exif-exifversion": "Exif версийĕ",
        "exif-flashpixversion": "Ĕçлеме пултаракан FlashPix версийĕ",
index b67d4a6..20b5624 100644 (file)
        "special-characters-group-khmer": "Chmereg",
        "special-characters-title-endash": "heiffen en",
        "special-characters-title-emdash": "heiffen em",
-       "special-characters-title-minus": "arwydd minws"
+       "special-characters-title-minus": "arwydd minws",
+       "mw-widgets-dateinput-placeholder-day": "BBBB-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "BBBB-MM"
 }
index 0f8b6ce..affb473 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tankestreg",
        "special-characters-title-emdash": "lang tankestreg",
-       "special-characters-title-minus": "minustegn"
+       "special-characters-title-minus": "minustegn",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index a374515..b9367f9 100644 (file)
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|beobachtender|beobachtende}} Benutzer]",
        "rc_categories": "Nur Seiten aus den Kategorien (getrennt mit „|“):",
-       "rc_categories_any": "Alle",
+       "rc_categories_any": "Beliebige der ausgewählten",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} nach der Änderung",
        "newsectionsummary": "Neuer Abschnitt /* $1 */",
        "special-characters-title-endash": "Halbgeviertstrich",
        "special-characters-title-emdash": "Geviertstrich",
        "special-characters-title-minus": "Minus",
+       "mw-widgets-dateinput-no-date": "Kein Datum ausgewählt",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Seite ist noch nicht vorhanden",
        "mw-widgets-titleinput-description-redirect": "Weiterleitung nach $1"
 }
index 5db0c35..445e27c 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tira kılme",
        "special-characters-title-emdash": "tira derge",
-       "special-characters-title-minus": "işaretê kemiye"
+       "special-characters-title-minus": "işaretê kemiye",
+       "mw-widgets-dateinput-placeholder-day": "SSSS-AA-RR",
+       "mw-widgets-dateinput-placeholder-month": "SSSS-AA"
 }
index d317838..cb61770 100644 (file)
        "special-characters-group-khmer": "καμποτζιανά",
        "special-characters-title-endash": "παύλα",
        "special-characters-title-emdash": "διπλή παύλα",
-       "special-characters-title-minus": "σύμβολο πλην"
+       "special-characters-title-minus": "σύμβολο πλην",
+       "mw-widgets-dateinput-placeholder-day": "ΕΕΕΕ-ΜΜ-ΗΗ",
+       "mw-widgets-dateinput-placeholder-month": "ΕΕΕΕ-ΜΜ"
 }
index fd87239..c406253 100644 (file)
        "unpatrolledletter": "!",
        "number_of_watching_users_RCview": "[$1]",
        "number_of_watching_users_pageview": "[$1 watching {{PLURAL:$1|user|users}}]",
-       "rc_categories": "Limit to categories (separate with \"|\")",
-       "rc_categories_any": "Any",
+       "rc_categories": "Limit to categories (separate with \"|\"):",
+       "rc_categories_any": "Any of the chosen",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} after change",
        "newsectionsummary": "/* $1 */ new section",
        "tooltip-ca-nstab-category": "View the category page",
        "tooltip-minoredit": "Mark this as a minor edit",
        "tooltip-save": "Save your changes",
-       "tooltip-preview": "Preview your changes, please use this before saving!",
+       "tooltip-preview": "Preview your changes. Please use this before saving.",
        "tooltip-diff": "Show which changes you made to the text",
        "tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
        "tooltip-watch": "Add this page to your watchlist",
        "spam_reverting": "Reverting to last revision not containing links to $1",
        "spam_blanking": "All revisions contained links to $1, blanking",
        "spam_deleting": "All revisions contained links to $1, deleting",
-       "simpleantispam-label": "Anti-spam check.\nDo <strong>NOT</strong> fill this in!",
+       "simpleantispam-label": "Anti-spam check.\nDo <strong>not</strong> fill this in!",
        "pageinfo-header": "-",
        "pageinfo-title": "Information for \"$1\"",
        "pageinfo-not-current": "Sorry, it's impossible to provide this information for old revisions.",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "minus sign",
        "mw-widgets-dateinput-no-date": "No date selected",
+       "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "YYYY-MM",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
        "mw-widgets-titleinput-description-redirect": "redirect to $1"
 }
index 5b08fa0..f86e4e7 100644 (file)
        "special-characters-group-khmer": "kmera",
        "special-characters-title-endash": "mallonga streketo",
        "special-characters-title-emdash": "longa streketo",
-       "special-characters-title-minus": "minus-signo"
+       "special-characters-title-minus": "minus-signo",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 1a045c5..0fe4b4d 100644 (file)
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página.",
        "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> en esta página.",
        "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, por favor, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
-       "editinginterface": "<strong>Advertencia:</strong> Estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
+       "editinginterface": "<strong>Advertencia:</strong> estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
        "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida contra edición porque está transcluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} con la opción de «cascada» activa:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
        "missingsummary": "<strong>Atención:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
        "selfredirect": "<strong>Advertencia:</strong> estás redirigiendo esta página a sí misma.\nPuede que hayas especificado erróneamente el destino de la redirección, o quizá estés editando la página equivocada. En cualquier caso, si haces clic de nuevo en \"{{int:savearticle}}\", se creará la redirección.",
        "missingcommenttext": "Escribe un comentario a continuación.",
-       "missingcommentheader": "<strong>Atención:</strong> No has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
+       "missingcommentheader": "<strong>Atención:</strong> no has escrito un asunto/encabezado para este comentario.\nSi haces clic nuevamente en \"{{int:savearticle}}\" tu edición se grabará sin él.",
        "summary-preview": "Previsualización del resumen:",
        "subject-preview": "Previsualización del asunto/encabezado:",
        "previewerrortext": "Se ha producido un error al intentar la vista previa de los cambios.",
        "userpage-userdoesnotexist-view": "El usuario «$1» no está registrado.",
        "blocked-notice-logextract": "Este usuario se encuentra actualmente bloqueado.\nA continuación se muestra la última entrada del registro de bloqueos para más información:",
        "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> vacía la caché en <em>Herramientas → Preferencias</em>",
-       "usercssyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
-       "userjsyoucanpreview": "<strong>Consejo:</strong> Usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
-       "usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario. ¡Aún no se ha guardado!</strong>",
-       "userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario. ¡Aún no se ha guardado!</strong>",
-       "sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS. ¡Aún no se ha guardado!</strong>",
-       "sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript. ¡Aún no se ha guardado!</strong>",
-       "userinvalidcssjstitle": "<strong>Advertencia:</strong> No existe la apariencia «$1». Recuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
+       "usercssyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
+       "userjsyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
+       "usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario.\n¡Aún no se ha guardado!</strong>",
+       "userjspreview": "<strong>¡Recuerda que solo estás previsualizando tu JavaScript de usuario.\n¡Aún no se ha guardado!</strong>",
+       "sitecsspreview": "<strong>Recuerda que solo estás previsualizando este CSS.\n¡Aún no se ha guardado!</strong>",
+       "sitejspreview": "<strong>Recuerda que solo estás previsualizando este código JavaScript.\n¡Aún no se ha guardado!</strong>",
+       "userinvalidcssjstitle": "<strong>Advertencia:</strong> no existe la apariencia «$1».\nRecuerda que las páginas personalizadas .css y .js tienen un título en minúsculas. Por ejemplo, se usa {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
        "updated": "(Actualizado)",
        "note": "<strong>Nota:</strong>",
        "previewnote": "<strong>Recuerda que esto no es más que una previsualización.</strong>\nAún no se han guardado tus cambios.",
        "undo-summary": "Se ha deshecho la revisión $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc.]])",
        "undo-summary-username-hidden": "Se ha deshecho la revisión $1 de un usuario oculto",
        "cantcreateaccounttitle": "No se puede crear la cuenta",
-       "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP ('''$1''').\n\nEl motivo dado por $3 es <em>$2</em>",
+       "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP (<strong>$1</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
        "cantcreateaccount-range-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas de usuario desde direcciones IP en el rango '''$1''', en el que se encuentra tu dirección IP ('''$4''').\n\nEl motivo dado por $3 es ''$2''",
        "viewpagelogs": "Ver los registros de esta página",
        "nohistory": "No hay historial de ediciones para esta página.",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuario|usuarios}} vigilando]",
-       "rc_categories": "Limitar a las categorías (separadas por «|»)",
-       "rc_categories_any": "Cualquiera",
+       "rc_categories": "Limitar a las categorías (separadas por «|»):",
+       "rc_categories_any": "Cualquiera de las elegidas",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} después del cambio",
        "newsectionsummary": "Sección nueva: /* $1 */",
        "rc-enhanced-expand": "Mostrar detalles",
        "upload-options": "Opciones de subida",
        "watchthisupload": "Vigilar este archivo",
        "filewasdeleted": "Un archivo con este nombre se subió con anterioridad y posteriormente ha sido borrado. Deberías revisar el $1 antes de subirlo de nuevo.",
-       "filename-bad-prefix": "El nombre del archivo que estás subiendo comienza por '''«$1»''', un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales.\n\nPor favor, elige un nombre más descriptivo.",
+       "filename-bad-prefix": "El nombre del archivo que estás subiendo comienza por <strong>«$1»</strong>, un nombre nada descriptivo de su contenido. Es un típico nombre de los que asignan automáticamente las cámaras digitales.\nElige un nombre más descriptivo para tu archivo.",
        "filename-prefix-blacklist": " #<!-- deja esta línea exactamente como está --> <pre>\n# La sintaxis de esta página es la siguiente:\n#   * Todo texto que se encuentre después del carácter \"#\" hasta el final de la línea se tratará como un comentario y será ignorado\n#   * Cualquier línea que no esté en blanco será interpretada como un prefijo típico en nombres de archivo que suelen asignar automáticamente las cámaras digitales\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # algunos teléfonos móviles / celulares\nIMG # genérico\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- deja esta línea exactamente como está -->",
        "upload-success-subj": "Subida con éxito",
        "upload-success-msg": "La subida desde [$2] se realizó correctamente. Está disponible aquí: [[:{{ns:file}}:$1]]",
        "upload-disallowed-here": "No puedes sobrescribir este archivo.",
        "filerevert": "Revertir $1",
        "filerevert-legend": "Reversión de archivos",
-       "filerevert-intro": "Estás revirtiendo '''[[Media:$1|$1]]''' a la [$4 versión del $2 a las $3].",
+       "filerevert-intro": "Estás por revertir <strong>[[Media:$1|$1]]</strong> a la [$4 versión del $2 a las $3].",
        "filerevert-comment": "Motivo:",
        "filerevert-defaultcomment": "Revertido a la versión subida el $1 a las $2",
        "filerevert-submit": "Revertir",
-       "filerevert-success": "'''[[Media:$1|$1]]''' ha sido revertido a la [$4 versión del $2 a las $3].",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> ha sido revertido a la [$4 versión del $2 a las $3].",
        "filerevert-badversion": "No existe versión local previa de este archivo con esa marca de tiempo.",
        "filedelete": "Borrar $1",
        "filedelete-legend": "Borrar archivo",
-       "filedelete-intro": "Estás borrando el archivo '''[[Media:$1|$1]]''' así como todo su historial.",
-       "filedelete-intro-old": "Estás borrando la versión de '''[[Media:$1|$1]]''' del [$4 $2 a las $3].",
+       "filedelete-intro": "Estás por borrar el archivo <strong>[[Media:$1|$1]]</strong> así como todo su historial.",
+       "filedelete-intro-old": "Estás borrando la versión de <strong>[[Media:$1|$1]]</strong> del [$4 $2 a las $3].",
        "filedelete-comment": "Motivo:",
        "filedelete-submit": "Eliminar",
-       "filedelete-success": "'''$1''' ha sido borrado.",
+       "filedelete-success": "<strong>$1</strong> ha sido borrado.",
        "filedelete-success-old": "La versión de <strong>[[Media:$1|$1]]</strong> del $2 a las $3 ha sido borrada.",
-       "filedelete-nofile": "'''$1''' no existe.",
-       "filedelete-nofile-old": "No existe una versión guardada de '''$1''' con los atributos especificados.",
+       "filedelete-nofile": "<strong>$1</strong> no existe.",
+       "filedelete-nofile-old": "No existe una versión guardada de <strong>$1</strong> con los atributos especificados.",
        "filedelete-otherreason": "Otra razón:",
        "filedelete-reason-otherlist": "Otra razón",
        "filedelete-reason-dropdown": "*Razones habituales de borrado\n** Violación de derechos de autor\n** Archivo duplicado",
        "mostrevisions": "Artículos con más ediciones",
        "prefixindex": "Todas las páginas con prefijo",
        "prefixindex-namespace": "Todas las páginas con el prefijo (espacio de nombres $1)",
-       "prefixindex-strip": "Prefijo de la hilera en la lista",
+       "prefixindex-strip": "Quitar prefijos en la lista",
        "shortpages": "Páginas cortas",
        "longpages": "Páginas largas",
        "deadendpages": "Páginas sin salida",
        "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} en tu lista de seguimiento, sin contar las de discusión.",
        "wlheader-enotif": "La notificación por correo está activada.",
        "wlheader-showupdated": "Las páginas modificadas desde tu última visita aparecen en <strong>negrita</strong>.",
-       "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos '''$1''' cambios}} en {{PLURAL:$2|la última hora|las últimas '''$2''' horas}} a fecha de $4 $3.",
+       "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos <strong>$1</strong> cambios}} en {{PLURAL:$2|la última hora|las últimas <strong>$2</strong> horas}} a fecha de $4 $3.",
        "wlshowlast": "Ver los cambios de las últimas $1 horas, $2 días",
        "watchlist-options": "Opciones de la lista de seguimiento",
        "watching": "Vigilando...",
        "delete-confirm": "Borrar «$1»",
        "delete-legend": "Borrar",
        "historywarning": "<strong>Atención:</strong> la página que estás a punto de borrar tiene un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
-       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nPor favor, confirma que realmente quieres hacer eso, que entiendes las consecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
+       "confirmdeletetext": "Estás a punto de borrar una página, así como todo su historial.\nConfirma que realmente quieres hacer esto, que entiendes las consecuencias y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
        "actioncomplete": "Acción completada",
        "actionfailed": "Falló la acción",
        "deletedtext": "«$1» ha sido borrado.\nVéase $2 para un registro de los borrados recientes.",
        "protect_expiry_invalid": "Tiempo de caducidad incorrecto.",
        "protect_expiry_old": "El tiempo de expiración está en el pasado.",
        "protect-unchain-permissions": "Desbloquear opciones de protección adicionales",
-       "protect-text": "Puedes ver y modificar el nivel de protección de la página '''$1'''.",
+       "protect-text": "Aquí puedes ver y modificar el nivel de protección de la página <strong>$1</strong>.",
        "protect-locked-blocked": "No puedes cambiar los niveles de protección estando bloqueado.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
-       "protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página '''$1''':",
+       "protect-locked-dblock": "Los niveles de protección no se pueden cambiar debido a un bloqueo activo de la base de datos.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
        "protect-locked-access": "Tu cuenta no tiene permiso para cambiar los niveles de protección de una página.\nA continuación se muestran las opciones actuales de la página <strong>$1</strong>:",
        "protect-cascadeon": "Actualmente esta página está protegida porque está transcluida en {{PLURAL:$1|la siguiente página, que tiene|las siguientes páginas, que tienen}} activada la opción de protección de cascada.\nPuedes cambiar el nivel de protección de esta página, pero no afectará a la protección de cascada.",
        "protect-default": "Permitir todos los usuarios",
        "restriction-level-all": "cualquier nivel",
        "undelete": "Restaurar una página borrada",
        "undeletepage": "Ver y restaurar páginas borradas",
-       "undeletepagetitle": "'''Las siguientes son las revisiones borradas de [[:$1|$1]]'''.",
+       "undeletepagetitle": "<strong>Las siguientes son las revisiones borradas de [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Ver páginas borradas",
        "undeletepagetext": "{{PLURAL:$1|La siguiente página ha sido borrada, pero aún está en el archivo y puede ser restaurada.|Las siguientes $1 páginas han sido borradas, pero aún están en el archivo y pueden ser restauradas.}}\nPuede que el archivo se limpie periódicamente.",
        "undelete-fieldset-title": "Restaurar revisiones",
-       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>. Para realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleteextrahelp": "Para restaurar todo el historial de la página, deja todas las casillas sin seleccionar y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.\nPara realizar una restauración selectiva, marca las revisiones que deban restaurarse y pulsa en <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|revisión archivada|revisiones archivadas}}",
        "undeletehistory": "Si restauras la página, todas sus revisiones se restaurarán en el historial.\nSi una nueva página con el mismo nombre se ha creado desde que se borró la original, las versiones restauradas aparecerán en el historial previo.",
        "undeleterevdel": "No se deshará el borrado si éste resulta en el borrado parcial de la última revisión de la página. En tal caso, desmarque o muestre las revisiones borradas más recientes. Las revisiones de archivos que no tiene permitido ver no se restaurarán.",
        "undeletedrevisions-files": "{{PLURAL:$1|1 revisión|$1 revisiones}} y {{PLURAL:$2|1 archivo|$2 archivos}} restaurados",
        "undeletedfiles": "$1 {{PLURAL:$1|archivo restaurado|archivos restaurados}}",
        "cannotundelete": "Hubo un error durante la restauración:\n$1",
-       "undeletedpage": "'''Se ha restaurado $1'''\n\nConsulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados y restauraciones.",
+       "undeletedpage": "<strong>Se ha restaurado $1</strong>\n\nConsulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados y restauraciones.",
        "undelete-header": "En el [[Special:Log/delete|registro de borrados]] se listan las páginas eliminadas.",
        "undelete-search-title": "Buscar páginas borradas",
        "undelete-search-box": "Buscar páginas borradas",
        "whatlinkshere-title": "Páginas que enlazan con «$1»",
        "whatlinkshere-page": "Página:",
        "linkshere": "Las siguientes páginas enlazan a <strong>[[:$1]]</strong>:",
-       "nolinkshere": "Ninguna página enlaza con '''[[:$1]]'''.",
-       "nolinkshere-ns": "Ninguna página enlaza con '''[[:$1]]''' en el espacio de nombres elegido.",
+       "nolinkshere": "Ninguna página enlaza con <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "Ninguna página enlaza con <strong>[[:$1]]</strong> en el espacio de nombres elegido.",
        "isredirect": "página redirigida",
        "istemplate": "inclusión",
        "isimage": "enlace de archivo",
        "ipb-needreblock": "$1 ya está bloqueado. ¿Quieres cambiar el bloqueo?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Otro bloqueo|Otros bloqueos}}",
        "unblock-hideuser": "No puedes desbloquear a este usuario porque su nombre ha sido ocultado.",
-       "ipb_cant_unblock": "'''Error''': Número ID $1 de bloqueo no encontrado. Pudo haber sido desbloqueado ya.",
+       "ipb_cant_unblock": "Error: no se encuentra el identificador de bloque $1. Pudo haber sido desbloqueado ya.",
        "ipb_blocked_as_range": "Error: la dirección IP $1 no está bloqueada directamente y no puede ser desbloqueada.\nSin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado.",
        "ip_range_invalid": "El rango de IP no es válido.",
        "ip_range_toolarge": "Los bloqueos de rango superiores a /$1 no están permitidos.",
        "movepagetalktext": "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''\n*Estés trasladando la página entre espacios de nombres diferentes,\n*Una página de discusión no vacía ya exista con el nombre nuevo, o\n*No marques el recuadro «Renombrar la página de discusión asociada».\n\nEn estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
        "movearticle": "Renombrar página",
        "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
-       "movecategorypage-warning": "<strong>Advertencia:</strong> Estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página y las páginas en la antigua categoría <em>no</em> serán recategorizadas en la nueva.",
+       "movecategorypage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página, y las páginas en la antigua categoría <em>no</em> se recategorizarán en la nueva.",
        "movenologintext": "Es necesario ser usuario registrado y [[Special:UserLogin|haber iniciado sesión]] para renombrar una página.",
        "movenotallowed": "No tienes permiso para trasladar páginas.",
        "movenotallowedfile": "No tienes permiso para trasladar archivos.",
        "move-watch": "Vigilar páginas de origen y destino",
        "movepagebtn": "Renombrar página",
        "pagemovedsub": "Renombrado realizado con éxito",
-       "movepage-moved": "'''«$1» ha sido trasladado a «$2».'''",
+       "movepage-moved": "<strong>«$1» ha sido trasladada a «$2»</strong>",
        "movepage-moved-redirect": "Se ha creado una redirección.",
        "movepage-moved-noredirect": "Se ha suprimido la creación de la redirección.",
        "articleexists": "Ya existe una página con ese nombre o el nombre que elegiste no es válido.\nElige otro nombre.",
        "imageinvalidfilename": "El nombre del archivo de destino no es válido.",
        "fix-double-redirects": "Actualizar las redirecciones que apuntan al título original",
        "move-leave-redirect": "Dejar una redirección",
-       "protectedpagemovewarning": "'''Advertencia:''' Esta página ha sido bloqueada de tal manera que solamente usuarios con privilegios de administrador puedan trasladarla.\nA continuación se muestra la última entrada de registro para referencia:",
-       "semiprotectedpagemovewarning": "'''Nota:''' Esta página ha sido bloqueada para que  solamente usuarios registrados pueden moverla.\nA continuación se muestra la última entrada de registro para referencia:",
+       "protectedpagemovewarning": "<strong>Advertencia:</strong> esta página ha sido protegida de tal manera que solamente usuarios con privilegios de administrador puedan trasladarla.\nA continuación se muestra la última entrada de registro como referencia:",
+       "semiprotectedpagemovewarning": "<strong>Nota:</strong> esta página ha sido protegida de tal manera que solamente usuarios registrados puedan trasladarla.\nA continuación se muestra la última entrada de registro como referencia:",
        "move-over-sharedrepo": "== El archivo existe ==\n[[:$1]] existe en un repositorio compartido. El traslado a este título invalidará la compartición del archivo.",
        "file-exists-sharedrepo": "El nombre de archivo elegido ya está siendo usado en un repositorio compartido.\nPor favor, elige otro nombre.",
        "export": "Exportar páginas",
        "exporttext": "Puedes exportar el texto y el historial de ediciones de una página en particular o de un conjunto de páginas a un texto XML. En el futuro, este texto podría importarse en otro wiki que ejecutase MediaWiki a través de [[Special:Import|importar página]].\n\nPara exportar páginas, escribe los títulos en la caja de texto de abajo, un título por línea, y selecciona si quieres la versión actual junto a las versiones anteriores, con las líneas del historial, o sólo la versión actual con la información sobre la última edición.\n\nEn el último caso también puedes usar un enlace, por ejemplo [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para la página \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Exportar todas las páginas",
        "exportcuronly": "Incluye sólo la revisión actual, no el historial de revisiones al completo.",
-       "exportnohistory": "----\n'''Nota:''' Exportar el historial completo de páginas a través de este formulario ha sido deshabilitado debido a problemas de rendimiento del servidor.",
+       "exportnohistory": "----\n<strong>Nota:</strong> la exportación del historial completo de páginas a través de este formulario ha sido desactivada debido a razones de rendimiento.",
        "exportlistauthors": "Incluir una lista completa de colaboradores para cada página",
        "export-submit": "Exportar",
        "export-addcattext": "Añadir páginas desde la categoría:",
        "allmessagesdefault": "Texto predeterminado",
        "allmessagescurrent": "Texto actual",
        "allmessagestext": "Esta es una lista de mensajes del sistema disponibles en el espacio de nombres MediaWiki.\nVisita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Localización MediaWiki] y [//translatewiki.net translatewiki.net] si deseas contribuir a la localización genérica de MediaWiki.",
-       "allmessagesnotsupportedDB": "Esta página no está disponible porque '''$wgUseDatabaseMessages''' está deshabilitado.",
+       "allmessagesnotsupportedDB": "Esta página no está disponible porque <strong>$wgUseDatabaseMessages</strong> está desactivado.",
        "allmessages-filter-legend": "Filtro",
        "allmessages-filter": "Filtrar por estado de personalización:",
        "allmessages-filter-unmodified": "Sin modificar",
        "file-info-png-looped": "bucleado",
        "file-info-png-repeat": "reproducido $1 {{PLURAL:$1|vez|veces}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|marco|marcos}}",
-       "file-no-thumb-animation": "'''Nota: debido a limitaciones técnicas, las miniaturas de este archivo no están animadas.'''",
-       "file-no-thumb-animation-gif": "'''Nota: Debido a limitaciones técnicas, las miniaturas de imágenes GIF de alta resolución como esta no están animadas.'''",
+       "file-no-thumb-animation": "<strong>Nota: debido a limitaciones técnicas, las miniaturas de este archivo no estarán animadas.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Nota: debido a limitaciones técnicas, las miniaturas de imágenes GIF de alta resolución como esta no estarán animadas.</strong>",
        "newimages": "Galería de imágenes nuevas",
        "imagelisttext": "Debajo hay una lista de <strong>$1</strong> {{PLURAL:$1|archivo ordenado|archivos ordenados}} $2.",
        "newimages-summary": "Esta página especial muestra una galería de los últimos archivos subidos.",
        "watchlisttools-edit": "Ver y editar tu lista de seguimiento",
        "watchlisttools-raw": "Editar lista de seguimiento en crudo",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discusión]])",
-       "duplicate-defaultsort": "'''Atención:''' La clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
+       "duplicate-defaultsort": "<strong>Advertencia:</strong> la clave de ordenamiento predeterminada «$2» anula la clave de ordenamiento anterior «$1».",
        "duplicate-displaytitle": "<strong>Advertencia:</strong> El título visualizado \"$2\" sobreescribe al anterior \"$1\".",
        "invalid-indicator-name": "<strong>Error:</strong> el atributo <code>name</code> de los indicadores de estado de página no debe estar vacío.",
        "version": "Versión",
        "version-license-not-found": "No se han encontrado información detallada de licencia para esta extensión.",
        "version-credits-title": "Reconocimiento para $1",
        "version-credits-not-found": "No se ha encontrado información detallada de reconocimiento para esta extensión.",
-       "version-poweredby-credits": "Este wiki funciona gracias a '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+       "version-poweredby-credits": "Este wiki funciona gracias a <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
        "version-poweredby-others": "otros",
        "version-poweredby-translators": "Traductores de translatewiki.net",
        "version-credits-summary": "Queremos reconocer a las siguientes personas por su contribución a [[Special:Version|MediaWiki]].",
        "special-characters-title-endash": "semirraya",
        "special-characters-title-emdash": "raya",
        "special-characters-title-minus": "signo de resta",
+       "mw-widgets-dateinput-no-date": "Ninguna fecha seleccionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la página aún no existe",
        "mw-widgets-titleinput-description-redirect": "redirigir a $1"
 }
index a5d0571..160ed73 100644 (file)
@@ -24,7 +24,8 @@
                        "לערי ריינהארט",
                        "Boxmein",
                        "Roland",
-                       "Postituvi"
+                       "Postituvi",
+                       "Purodha"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "special-characters-title-endash": "mõttekriips",
        "special-characters-title-emdash": "pikk mõttekriips",
        "special-characters-title-minus": "miinusmärk",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-KK-PP",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-KK",
        "mw-widgets-titleinput-description-new-page": "lehekülge pole veel",
        "mw-widgets-titleinput-description-redirect": "ümbersuunamine leheküljele \"$1\""
 }
index 12bc1d8..25d08d7 100644 (file)
        "jumptonavigation": "nabigazioa",
        "jumptosearch": "bilatu",
        "view-pool-error": "Barkatu, zerbitzariak gainezka daude uneotan.\nErabiltzaile gehiegi ari da orrialde hau ikusi nahiean.\nMesedez itxaron ezazu unetxo bat orrialde honetara berriz sartzen saiatu baino lehen.\n\n$1",
+       "generic-pool-error": "Barkatu, zerbitzariak gainezka daude uneotan.\nErabiltzaile gehiegi ari da baliabide  hau ikusi nahiean.\nMesedez itxaron ezazu unetxo bat baliabide  honetara berriz sartzen saiatu baino lehen.",
        "pool-timeout": "Lock-a itxoiten denbora amaitu da",
        "pool-queuefull": "Prozesuen zerrenda beteta dago",
        "pool-errorunknown": "Errore ezezaguna",
        "gotaccountlink": "Saioa hasi",
        "userlogin-resetlink": "Saioa hasteko datuak ahaztu dituzu?",
        "userlogin-resetpassword-link": "Zure pasahitza ahaztu duzu?",
+       "userlogin-helplink2": "Saioa hasteko laguntza",
        "userlogin-loggedin": "Dagoeneko izena emana zaude {{GENDER:$1|$1}}.\nBeheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.",
        "userlogin-createanother": "Beste kontu bat sortu",
        "createacct-emailrequired": "E-posta helbidea",
        "preview": "Aurrebista erakutsi",
        "showpreview": "Aurrebista erakutsi",
        "showdiff": "Aldaketak erakutsi",
-       "anoneditwarning": "'''Oharra:''' Ez duzu saioa hasi. Zure IP helbidea orrialde honetako historian gordeko da.",
+       "anoneditwarning": "'''Oharra:''' Ez duzu saioa hasi. Aldaketak egiten badituzu, zure IP helbidea ikusgai geratuko da.  <strong>[$1 Saioa hasi]</strong> edo <strong>[$2 kontu bat sortzen]</strong> baduzu, zure aldaketak lankide izenari egotziko zaizkio, eta beste abantaila batzuk ere izango dituzu.",
        "anonpreviewwarning": "''Ez duzu saioa hasi. Gordez gero, zure IP helbidea grabatuko da orri honen edizio historian.''",
        "missingsummary": "'''Gogorarazpena:''' Ez duzu aldaketa laburpen bat zehaztu. Berriz ere gordetzeko aukeratzen baduzu, laburpen mezurik gordeko da.",
        "missingcommenttext": "Mesedez, iruzkin bat idatzi jarraian.",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|lankide|lankide}} jarraitzen]",
        "rc_categories": "Kategorietara mugatu (\"|\" karaktereaz banandu)",
-       "rc_categories_any": "Edozein",
+       "rc_categories_any": "Aukeratutako edozein",
        "rc-change-size-new": "{{PLURAL:$1|Byte 1|$1 byte}} aldaketaren ostean",
        "newsectionsummary": "/* $1 */ atal berria",
        "rc-enhanced-expand": "Erakutsi xehetasunak",
        "sessionfailure-title": "Saio-akatsa",
        "sessionfailure": "Badirudi saioarekin arazoren bat dagoela; bandalismoak saihesteko ekintza hau ezeztatu egin da. Mesedez, nabigatzaileko \"atzera\" botoian klik egin, hona ekarri zaituen orrialde hori berriz kargatu, eta saiatu berriz.",
        "changecontentmodel-title-label": "Orriaren izenburua",
+       "changecontentmodel-reason-label": "Arrazoia:",
        "logentry-contentmodel-change-revertlink": "desegin",
        "logentry-contentmodel-change-revert": "desegin",
        "protectlogpage": "Babes erregistroa",
        "tags-create-submit": "Sortu",
        "tags-delete-title": "Etiketa ezabatu",
        "tags-delete-reason": "Arrazoia:",
+       "tags-delete-not-found": "\"$1\" etiketa  ez da existitzen.",
        "tags-activate-reason": "Arrazoia:",
        "tags-activate-submit": "Aktibatu",
        "tags-deactivate-reason": "Arrazoia:",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
        "logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuzpena patruilatutzat {{GENDER:$2|markatu}} du",
        "logentry-newusers-newusers": "$1 erabiltzaile kontua sortu da",
-       "logentry-newusers-create": "$1 erabiltzaile kontua sortu da",
+       "logentry-newusers-create": "$1 erabiltzaile kontua {{GENDER:$2|sortu da}}",
        "logentry-newusers-create2": "$1 wikilariak $3 erabiltzaile kontua sortu du",
        "logentry-upload-upload": "$1(e)k $3 {{GENDER:$2|igo du}}",
        "rightsnone": "(bat ere ez)",
index 5add3cc..c2796bf 100644 (file)
        "throttled-mailpassword": "یک ایمیل بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک ایمیل بازنشانی گذرواژه فرستاده می‌شود.",
        "mailerror": "خطا در ارسال ایمیل: $1",
        "acct_creation_throttle_hit": "بازدیدکنندگان این ویکی که از نشانی آی‌پی شما استفاده می‌کنند در روز گذشته {{PLURAL:$1|یک حساب کاربری|$1 حساب کاربری}} ساخته‌اند، که بیشترین تعداد مجاز در آن بازهٔ زمانی است.\nبه همین خاطر، بازدیدکنندگانی که از این نشانی آی‌پی استفاده می‌کنند نمی‌توانند در حال حاضر حساب جدیدی بسازند.",
-       "emailauthenticated": "آدرس ایمیل شما در $2 ساعت $3 تأیید شده است.",
+       "emailauthenticated": "نشانی ایمیل شما در $2 ساعت $3 تأیید شده است.",
        "emailnotauthenticated": "آدرس ایمیل شما هنوز تأیید نشده است.\nبرای هیچ‌یک از ویژگی‌های زیر، ایمیل ارسال نخواهد شد.",
        "noemailprefs": "برای راه‌اندازی این قابلیت‌ها یک آدرس ایمیل در ترجیحات خود مشخص کنید.",
-       "emailconfirmlink": "آدرس ایمیل خود را تأیید کنید",
+       "emailconfirmlink": "نشانی ایمیل خود را تأیید کنید",
        "invalidemailaddress": "آدرس ایمیل واردشدهٔ قابل قبول نیست، چرا که دارای ساختار نامعتبری است.\nلطفاً آدرسی با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.",
        "cannotchangeemail": "آدرس‌های ایمیل حساب کاربری در این ویکی قابل تغییر نیست.",
        "emaildisabled": "این وب سایت قادر به ارسال ایمیل نیست.",
        "hr_tip": "خط افقی (از آن کم استفاده کنید)",
        "summary": "خلاصه:",
        "subject": "موضوع/عنوان:",
-       "minoredit": "این ویرایش جزئی‌است",
+       "minoredit": "این ویرایش، جزئی است",
        "watchthis": "پی‌گیری این صفحه",
        "savearticle": "صفحه ذخیره شود",
        "preview": "پیش‌نمایش",
        "exif-compression-3": "رمزگذاری نمابر سی‌سی‌آی‌تی‌تی گروه ۳",
        "exif-compression-4": "رمزگذاری نمابر سی‌سی‌آی‌تی‌تی گروه ۴",
        "exif-copyrighted-true": "دارای حق تکثیر",
-       "exif-copyrighted-false": "وضعیت حق‌تکثیر تعیین نشدهاست",
+       "exif-copyrighted-false": "وضعیت حق‌تکثیر تعیین نشده است",
        "exif-unknowndate": "تاریخ نامعلوم",
        "exif-orientation-1": "عادی",
        "exif-orientation-2": "افقی پشت و روشده",
        "exif-urgency-other": "اولویت تعریف شده توسط کاربر ($1)",
        "namespacesall": "همه",
        "monthsall": "همهٔ ماه‌ها",
-       "confirmemail": "تأیید آدرس ایمیل",
+       "confirmemail": "تأیید نشانی ایمیل",
        "confirmemail_noemail": "شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود آدرس ایمیل معتبری وارد نکرده‌اید.",
        "confirmemail_text": "این ویکی، شما را ملزم به تأیید آدرس ایمیل خود، پیش از استفاده از خدمات ایمیل در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا ایمیلی تأییدی به آدرس ایمیل شما فرستاده شود. این ایمیل دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید کنید تا آدرس ایمیل شما تأیید شود.",
        "confirmemail_pending": "یک کد تأییدی پیشتر برای شما به صورت ایمیل فرستاده شده است. اگر همین اواخر حساب خود را باز کرده‌اید شاید بد نباشد که پیش از درخواست یک کد جدید چند دقیقه درنگ کنید تا شاید ایمیل قبلی برسد.",
        "confirmemail_invalid": "کد تأیید نامعتبر است. ممکن است که منقضی شده باشد.",
        "confirmemail_needlogin": "لطفاً برای تأیید آدرس ایمیلتان $1.",
        "confirmemail_success": "آدرس ایمیل شما تأیید شده‌است.\n\nاکنون می‌توانید [[Special:UserLogin|به سیستم وارد شوید]] و از ویکی لذت ببرید.",
-       "confirmemail_loggedin": "آدرس ایمیل شما تأیید شد.",
-       "confirmemail_subject": "تأیید آدرس ایمیل {{SITENAME}}",
+       "confirmemail_loggedin": "نشانی ایمیل شما تأیید شد.",
+       "confirmemail_subject": "تأیید نشانی ایمیل {{SITENAME}}",
        "confirmemail_body": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 حساب کاربری‌ای با نام «$2» و این آدرس ایمیل در {{SITENAME}} ایجاد کرده است.\n\nبرای تأیید این که این حساب واقعاً متعلق به شماست و نیز برای فعال سازی قابلیت ایمیل {{SITENAME}} پیوند زیر را در مرورگر اینترنت خود باز کنید:\n\n$3\n\nاگر شما این حساب کاربری را ثبت *نکرده‌اید*، لطفاً پیوند زیر را\nباز کنید تا تأیید آدرس ایمیل لغو شود:\n\n$5\n\nاین کدِ تأیید در تاریخ $4 منقضی خواهد شد.",
        "confirmemail_body_changed": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1 آدرس ایمیل حساب «$2» در {{SITENAME}} را تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز کنید تا تغییر آدرس ایمیل لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
        "confirmemail_body_set": "یک نفر، احتمالاً خود شما، از نشانی آی‌پی $1,\nآدرس ایمیل حساب «$2» در {{SITENAME}} را به این آدرس تغییر داده است.\n\nبرای تأیید این که این حساب واقعاً به شما تعلق دارد و فعال کردن دوبارهٔ قابلیت ایمیل در {{SITENAME}}، پیوند زیر را در مرورگرتان باز کنید:\n\n$3\n\nاگر این حساب متعلق به شما نیست، پیوند زیر را باز تا تغییر آدرس ایمیل، لغو شود:\n\n$5\n\nاین تأییدیه در $4 منقضی می‌گردد.",
-       "confirmemail_invalidated": "تأیید آدرس ایمیل لغو شد",
-       "invalidateemail": "لغو تأیید آدرس ایمیل",
+       "confirmemail_invalidated": "تأیید نشانی ایمیل لغو شد",
+       "invalidateemail": "لغو تأیید نشانی ایمیل",
        "scarytranscludedisabled": "[تراگنجانش بین‌ویکیانه فعال نیست]",
        "scarytranscludefailed": "[فراخوانی الگو برای $1 میسر نشد]",
        "scarytranscludefailed-httpstatus": "[فراخوانی الگو برای $1 میسر نشد: خطای اچ‌تی‌تی‌پی $2]",
index 5ce31d9..5b4282d 100644 (file)
        "newpageletter": "U",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|tarkkaileva käyttäjä|tarkkailevaa käyttäjää}}]",
-       "rc_categories": "Vain luokista (erotin on ”|”)",
-       "rc_categories_any": "Mikä tahansa",
+       "rc_categories": "Rajoita luokkiin (erota luokat merkillä ”|”)",
+       "rc_categories_any": "Mikä tahansa valituista",
        "rc-change-size-new": "$1 {{PLURAL:$1|tavu|tavua}} muutosten jälkeen",
        "newsectionsummary": "/* $1 */ uusi osio",
        "rc-enhanced-expand": "Näytä yksityiskohdat",
        "special-characters-title-endash": "ajatusviiva",
        "special-characters-title-emdash": "pitkä ajatusviiva",
        "special-characters-title-minus": "miinusmerkki",
+       "mw-widgets-dateinput-no-date": "Ei ole valittu mitään päivää",
+       "mw-widgets-dateinput-placeholder-day": "VVVV-KK-PP",
+       "mw-widgets-dateinput-placeholder-month": "VVVV-KK",
        "mw-widgets-titleinput-description-new-page": "sivua ei ole olemassa vielä",
        "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1"
 }
index 319c398..058248d 100644 (file)
        "passwordreset": "Nullstilla loyniorðið",
        "passwordreset-text-one": "Útfyll henda teigin fyri at nullstilla títt loyniorð.",
        "passwordreset-text-many": "{{PLURAL:$1|Útfyll í ein av teigunum fyri at móttaka eitt fyribils loyniorð við telduposti.}}",
-       "passwordreset-legend": "Nulstilla loyniorðið",
        "passwordreset-disabled": "Tað ber ikki til at nullstilla loyniorðið á hesi wiki.",
        "passwordreset-emaildisabled": "Teldupost funksjónir eru óvirknar á hesi wiki.",
        "passwordreset-username": "Brúkaranavn:",
        "resettokens": "Nullstilla lyklar",
        "resettokens-text": "Tú kanst nullstilla lyklar sum geva atgongd til ávís privat dáta sum eru knýtt at tínari konto her.\n\nTú eigur at gera tað um tú av óvart hevur deilt lyklarnar við onkran, ella um tín konta hevur verið útsett fyri vandastøðu.",
        "resettokens-no-tokens": "Tað eru ongir lyklar at nullstilla.",
-       "resettokens-legend": "Nullstilla lyklar",
        "resettokens-tokens": "Lyklar:",
        "resettokens-token-label": "$1 (dagsins virði: $2)",
        "resettokens-done": "Nullstilla lyklar.",
        "nlinks": "$1 {{PLURAL:$1|slóð|slóðir}}",
        "nmembers": "$1 {{PLURAL:$1|limur|limir}}",
        "nrevisions": "$1 {{PLURAL:$1|versjón|versjónir}}",
-       "nviews": "$1 {{PLURAL:$1|skoðan|skoðanir}}",
        "nimagelinks": "Brúkt á $1 {{PLURAL:$1|síðu|síðum}}",
        "ntransclusions": "brúkt á $1 {{PLURAL:$1|síðu|síðum}}",
        "specialpage-empty": "Tað eru ongi úrslit fyri hesa rapportina.",
        "duration-centuries": "$1 {{PLURAL:$1|øld|øldir}}",
        "expand_templates_output": "Úrslit",
        "expand_templates_ok": "Í lagi",
-       "expand_templates_preview": "Forskoðan"
+       "expand_templates_preview": "Forskoðan",
+       "mw-widgets-dateinput-placeholder-day": "ÁÁÁÁ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÁÁÁÁ-MM",
+       "mw-widgets-titleinput-description-new-page": "síðan er ikki til enn"
 }
index 1d78005..d35e3b2 100644 (file)
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 utilisateur{{PLURAL:$1||s}} en train de suivre]",
-       "rc_categories": "Limite des catégories (séparation avec « | »)",
-       "rc_categories_any": "Toutes",
+       "rc_categories": "Limiter aux catégories (séparées par « | ») :",
+       "rc_categories_any": "Une des sélectionnées",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octets}} après changement",
        "newsectionsummary": "/* $1 */ nouvelle section",
        "rc-enhanced-expand": "Voir les détails",
        "deadendpages": "Pages en impasse",
        "deadendpagestext": "Les pages suivantes ne contiennent aucun lien vers d'autres pages du wiki.",
        "protectedpages": "Pages protégées",
-       "protectedpages-indef": "Uniquement les protections permanentes",
+       "protectedpages-indef": "Uniquement les protections indéfinies",
        "protectedpages-summary": "Cette page liste les pages existantes actuellement protégées. Pour une liste des titres protégés contre la création, voir [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Uniquement les protections en cascade",
        "protectedpages-noredirect": "Masquer les redirections",
        "ipblocklist-submit": "Rechercher",
        "ipblocklist-localblock": "Blocage local",
        "ipblocklist-otherblocks": "{{PLURAL:$1|Autre blocage|Autres blocages}}",
-       "infiniteblock": "permanent",
+       "infiniteblock": "infini",
        "expiringblock": "expire le $1 à $2",
        "anononlyblock": "utilisateur non enregistré uniquement",
        "noautoblockblock": "blocage automatique désactivé",
        "special-characters-title-endash": "tiret demi-cadratin",
        "special-characters-title-emdash": "tiret cadratin",
        "special-characters-title-minus": "signe moins",
+       "mw-widgets-dateinput-no-date": "Aucune date sélectionnée",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la page n’existe pas encore",
        "mw-widgets-titleinput-description-redirect": "redirection vers $1"
 }
index f3a43cb..3c89d9a 100644 (file)
        "recentchanges": "Changements récent",
        "rcshowhidebots": "$1 les robots",
        "rcshowhidepatr": "$1 les modifications patrouillés",
+       "diff": "diff",
+       "hist": "hist",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "listfiles-latestversion-yes": "Oui",
        "listfiles-latestversion-no": "Non",
        "file-anchor-link": "Dossier",
+       "filehist": "Historique du fichier",
        "filehist-deleteall": "effacer tout",
        "filehist-deleteone": "effacer",
        "filehist-user": "Useur",
+       "imagelinks": "Utilisation du fichier",
        "shared-repo-from": "de: $1",
        "filerevert-comment": "Raison:",
        "filedelete": "Effacer $1",
        "ancientpages": "Pages les plus anciennement changées",
        "move": "Renommer",
        "movethispage": "Renommer cette page",
+       "booksources-search": "Charcher",
        "allpagessubmit": "Aller",
        "categories": "Classes",
        "special-categories-sort-count": "tri par nombre d'éléments",
        "block-log-flags-nocreate": "création de compte interdite",
        "tooltip-pt-login": "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier mais ce n’est pas obligatoire.",
        "tooltip-ca-talk": "Discussion de cette page de contenu",
+       "tooltip-ca-watch": "Additionner cette page à votre liste de suivi",
        "tooltip-search": "Charche {{SITENAME}}",
        "tooltip-search-fulltext": "Charche les pages pour ce texte",
        "tooltip-p-logo": "Visitez la page d'acceuil",
        "tooltip-n-randompage": "Afficher un page au hasard",
        "tooltip-n-help": "La place pour savoir",
        "tooltip-t-specialpages": "Liste de tout les pages speciales",
+       "tooltip-ca-nstab-special": "Ceci est une page spéciale, vous ne pouvez pas la changer.",
        "bad_image_list": "Le format est le suivant :\n\nSeules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.\nLes autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.",
-       "redirect-file": "Nom du fichier"
+       "namespacesall": "Tous",
+       "redirect-file": "Nom du fichier",
+       "searchsuggest-search": "Charcher"
 }
index 2c94b47..7f61067 100644 (file)
        "special-characters-group-khmer": "C’mère",
        "special-characters-title-endash": "terèt anglès",
        "special-characters-title-emdash": "terèt èm",
-       "special-characters-title-minus": "segno muens"
+       "special-characters-title-minus": "segno muens",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-JJ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index b445673..4a352d0 100644 (file)
@@ -7,7 +7,8 @@
                        "Merlissimo",
                        "Murma174",
                        "Pyt",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Ferwisangen onerstrik:",
index 377f1f2..d98e655 100644 (file)
        "actionthrottled": "Acción limitada",
        "actionthrottledtext": "Como unha medida de loita contra o ''spam'', limítase a realización desta acción a un número determinado de veces nun curto espazo de tempo, e vostede superou este límite.\nInténteo de novo nuns minutos.",
        "protectedpagetext": "Esta páxina foi protexida para evitar a edición e outras accións.",
-       "viewsourcetext": "Pode ver e copiar o código fonte desta páxina:",
-       "viewyourtext": "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
+       "viewsourcetext": "Pode ver e copiar o código fonte desta páxina.",
+       "viewyourtext": "Pode ver e copiar o código fonte <strong>das súas edicións</strong> nesta páxina.",
        "protectedinterface": "Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.\nPara engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
        "editinginterface": "<strong>Aviso:</strong> Está editando unha páxina usada para fornecer o texto da interface do software.\nOs cambios feitos nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.",
        "translateinterface": "Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Special:MainPage?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
        "search-category": "(categoría $1)",
        "search-file-match": "(coincide co contido do ficheiro)",
        "search-suggest": "Quizais quixo dicir: $1",
+       "search-rewritten": "Móstranse os resultados para \"$1\". Buscar no seu lugar \"$2\".",
        "search-interwiki-caption": "Proxectos irmáns",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(máis)",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuario|usuarios}} vixiando]",
-       "rc_categories": "Límite para categorías (separado con \"|\")",
-       "rc_categories_any": "Calquera",
+       "rc_categories": "Limitar ás categorías (separadas por \"|\"):",
+       "rc_categories_any": "Calquera das elixidas",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} despois da modificación",
        "newsectionsummary": "Nova sección: /* $1 */",
        "rc-enhanced-expand": "Mostrar os detalles",
        "watchlistanontext": "Acceda ao sistema para ver ou editar os elementos da súa lista de vixilancia.",
        "watchnologin": "Non accedeu ao sistema",
        "addwatch": "Engadir á lista vixilancia",
-       "addedwatchtext": "A páxina \"[[:$1]]\" foi engadida á súa [[Special:Watchlist|lista de vixilancia]].\nOs cambios futuros nesta páxina e na súa páxina de conversa asociada serán listados alí.",
+       "addedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron engadidas á súa [[Special:Watchlist|lista de vixilancia]].",
        "addedwatchtext-short": "A páxina \"$1\" foi engadida á súa lista de vixilancia.",
        "removewatch": "Eliminar da lista de vixilancia",
-       "removedwatchtext": "A páxina \"[[:$1]]\" foi eliminada [[Special:Watchlist|da súa lista de vixilancia]].",
+       "removedwatchtext": "A páxina \"[[:$1]]\" e mais a súa conversa foron eliminadas da súa [[Special:Watchlist|lista de vixilancia]].",
        "removedwatchtext-short": "A páxina \"$1\" foi eliminada da súa lista de vixilancia.",
        "watch": "Vixiar",
        "watchthispage": "Vixiar esta páxina",
        "changecontentmodel-success-title": "O modelo de contido foi modificado",
        "changecontentmodel-success-text": "O tipo de contido de [[:$1]] foi modificado.",
        "changecontentmodel-cannot-convert": "O contido en [[:$1]] non pode converterse ó tipo de $2.",
-       "changecontentmodel-title-cantexist": "Imposible ter unha páxina en $1.",
        "changecontentmodel-nodirectediting": "O modelo de contido $1 non permite a modificación directa",
        "log-name-contentmodel": "Rexistro de cambios de modelo de contido",
        "log-description-contentmodel": "Eventos relacinados cos modelos de contido dunha páxina",
        "htmlform-cloner-create": "Engadir máis",
        "htmlform-cloner-delete": "Eliminar",
        "htmlform-cloner-required": "Necesítase, polo menos, un valor.",
-       "htmlform-title-badnamespace": "[[:$1]] non está no espazo de nomes \"{{ns:$2}}\".",
+       "htmlform-title-badnamespace": "\"[[:$1]]\" non está no espazo de nomes \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" non é un título de páxina que se poida crear",
-       "htmlform-title-not-exists": "[[:$1]] non existe.",
+       "htmlform-title-not-exists": "\"[[:$1]]\" non existe.",
+       "htmlform-user-not-exists": "\"<strong>$1</strong>\" non existe.",
+       "htmlform-user-not-valid": "\"<strong>$1</strong>\" non é un nome de usuario válido.",
        "sqlite-has-fts": "$1 con soporte para procuras de texto completo",
        "sqlite-no-fts": "$1 sen soporte para procuras de texto completo",
        "logentry-delete-delete": "$1 {{GENDER:$2|borrou}} a páxina \"$3\"",
        "special-characters-title-endash": "guión",
        "special-characters-title-emdash": "raia",
        "special-characters-title-minus": "signo menos",
+       "mw-widgets-dateinput-no-date": "Non se seleccionou ningunha data",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a páxina aínda non existe",
        "mw-widgets-titleinput-description-redirect": "redirección cara a $1"
 }
index 8a86f66..7427399 100644 (file)
@@ -21,6 +21,7 @@
        "tog-watchdefault": "हांवें संपादीत केल्लीं पानां आनी फायल म्हजे ध्यानसूचीक जोड",
        "tog-previewontop": "संपादन पेटीच्या मुखार प्रीव्यु दाखय",
        "tog-previewonfirst": "पयल्याच संपादनाचेर पुर्वनियाळ दाखय",
+       "tog-enotifwatchlistpages": "म्हज्या लक्षवळेरेंतलें पान वा फायल बदल्ली जाल्यार म्हाका इमेल करात",
        "tog-shownumberswatching": "ध्यान दवरपी वांगड्यांची संख्या दाखय",
        "tog-oldsig": "सद्याची निशाणी",
        "tog-uselivepreview": "लायव पुर्वनियाळाचो उपेग कर",
        "search-redirect": "($1 नव्यान नामो दियात)",
        "search-section": "(विभाग $1)",
        "search-suggest": "तुमकां $1 अशें म्हणपाचें आसलें?",
+       "search-rewritten": "$1 हाचो निकाल दाखयता.नाजाल्यार $2 हें सोदात.",
        "search-interwiki-more": "(आनी)",
        "search-relatedarticle": "संबंदीत",
        "searchrelated": "संबंदीत",
        "minoreditletter": "द",
        "newpageletter": "न",
        "boteditletter": "र",
+       "rc_categories_any": "वेंचिल्ल्या मदलें खंयचेय",
        "rc-change-size-new": "$1 {{बहुवचन:$1|byte|bytes}}बदल केल्या उपरांत",
        "rc-enhanced-expand": "म्हायती दाखय",
        "rc-enhanced-hide": "म्हायती लिपय",
        "watchlist": "लक्ष वळेरी",
        "mywatchlist": "लक्ष वळेरी",
        "watchlistfor2": "$1 $2 खातीर",
+       "addedwatchtext": "आनी \"[[:$1]]\" हाचे भासाभास पान तुमचें [[खास:लक्षवळेरी|लक्षवळेरेक]] जोडलां.",
        "watch": "नदर दवरात",
        "unwatch": "पळोवंक नासलें",
        "watchlist-details": "लक्ष {{PLURAL:$1|$1वळेरींतलें|$1 वळेंरींतली}} {{PLURAL:$1|$1पान|$1 पानां}} उलोवपाची पानां सोडून",
        "rollbacklink": "फाटीं घेयात",
        "rollbacklinkcount": "$1 {{PLURAL:$1|संपादन}} फाटीं घेयात",
        "changecontentmodel-title-label": "पानाचो माथाळो",
-       "changecontentmodel-reason-label": "Reason:कारण",
+       "changecontentmodel-reason-label": "कारण:",
        "protectlogpage": "सुरक्षितेचें सोत्र",
        "protectedarticle": "राखिल्ले\"[[$1]]\"",
        "restriction-edit": "संस्करण",
        "logentry-move-move": "$1 न $3 पानाचेर $4 {{GENDER:$2|हालयला}}",
        "logentry-newusers-create": "उपयोगकत्याचें $1 {{GENDER:$2|तयार केलें}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|अपलोड केला}} $3",
-       "searchsuggest-search": "सोद"
+       "searchsuggest-search": "सोद",
+       "mw-widgets-dateinput-no-date": "तारीख निवडूंक ना",
+       "mw-widgets-dateinput-placeholder-day": "वर्स-म्हयनो-दीस",
+       "mw-widgets-dateinput-placeholder-month": "वर्स-म्हयनो"
 }
index f87ed52..6302baa 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 315a591..ee06fca 100644 (file)
@@ -46,7 +46,7 @@
        "tog-watchdefault": "מעקב אחרי דפים וקבצים שערכתי",
        "tog-watchmoves": "מעקב אחרי דפים וקבצים שהעברתי",
        "tog-watchdeletion": "מעקב אחרי דפים וקבצים שמחקתי",
-       "tog-watchrollback": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×\91×\94×\9d ×\91×\99צעת×\99 ×©×\97×\96×\95ר ×\9e×\94×\99ר",
+       "tog-watchrollback": "×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×©×©×\97×\96רת×\99",
        "tog-minordefault": "הגדרת כל פעולת עריכה כמשנית אם לא צוין אחרת",
        "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה",
        "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה ראשונה",
        "newpageletter": "ח",
        "boteditletter": "ב",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|משתמש אחד עוקב|$1 משתמשים עוקבים}} אחרי הדף]",
-       "rc_categories": "×\94×\92×\91×\9c×\94 ×\9cק×\98×\92×\95ר×\99×\95ת (×\99ש ×\9c×\94פר×\99×\93 ×¢×\9d \"|\")",
-       "rc_categories_any": "×\94×\9b×\95×\9c",
+       "rc_categories": "×\94×\92×\91×\9c×\94 ×\9cק×\98×\92×\95ר×\99×\95ת (×\9e×\95פר×\93×\95ת ×\91ת×\95 \"|\"):",
+       "rc_categories_any": "×\9b×\9c ×\90×\97ת ×\9e×\94× ×\91×\97ר×\95ת",
        "rc-change-size-new": "{{PLURAL:$1|בית אחד|$1 בתים}} לאחר השינוי",
        "newsectionsummary": "/* $1 */ פסקה חדשה",
        "rc-enhanced-expand": "הצגת הפרטים",
        "special-characters-title-endash": "קו מפריד",
        "special-characters-title-emdash": "קו מפריד ארוך",
        "special-characters-title-minus": "מינוס",
+       "mw-widgets-dateinput-no-date": "לא נבחר תאריך",
        "mw-widgets-titleinput-description-new-page": "הדף עדיין לא קיים",
        "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}"
 }
index 8a0887e..9f4b618 100644 (file)
        "content-model-css": "CSS",
        "content-json-empty-object": "Prazan objekt",
        "content-json-empty-array": "Prazno polje",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva na [[:$2]] s više od jedne vrijednosti za parametar \"$3\". Rabit će se samo posljednja navedena vrijenost.",
        "expensive-parserfunction-warning": "Upozorenje: Ova stranica sadrži previše opterećujućih poziva parserskih funkcija\n\nTrebala bi imati manje od $2 {{PLURAL:$2|poziva|poziva}}, sada ima {{PLURAL:$1|$1 poziv|$1 poziva}}.",
        "expensive-parserfunction-category": "Stranice s previše poziva opterećujućih parserskih funkcija",
        "post-expand-template-inclusion-warning": "Upozorenje: Veličina uključenih predložaka je prevelika.\nNeki predlošci neće biti uključeni.",
        "special-characters-group-thai": "Tajlandski (tajski) znakovi",
        "special-characters-group-lao": "laoski znakovi",
        "special-characters-group-khmer": "kmerski",
+       "mw-widgets-dateinput-placeholder-day": "GGGG-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
        "mw-widgets-titleinput-description-redirect": "preusmjeravanje na $1"
 }
index 38b4f8d..eace87c 100644 (file)
        "tooltip-pt-logout": "so wotzjewić",
        "tooltip-pt-createaccount": "Pozbudźujemy će, konto załožić a so přizjewić; njeje wšak nuznje trěbne",
        "tooltip-ca-talk": "diskusija wo stronje",
-       "tooltip-ca-edit": "Móžeš stronu wobdźěłać. Prošu wužij tłóčku „Přehlad” do składowanja.",
+       "tooltip-ca-edit": "Tutu stronu wobdźěłać",
        "tooltip-ca-addsection": "Nowy wotrězk započeć",
        "tooltip-ca-viewsource": "Strona je škitana. Móžeš pak jeje žórło wobhladać.",
        "tooltip-ca-history": "stawizny tuteje strony",
        "special-characters-group-khmer": "Khmeršćina",
        "special-characters-title-endash": "krótka ležaca smužka",
        "special-characters-title-emdash": "dołha ležaca smužka",
-       "special-characters-title-minus": "minusowe znamješko"
+       "special-characters-title-minus": "minusowe znamješko",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 2bd0d3f..fa948a7 100644 (file)
        "tooltip-pt-logout": "Dekonekte ou",
        "tooltip-pt-createaccount": "N ap ankouraje w ouvè yon kont epi konekte; men sa pa obligatwa",
        "tooltip-ca-talk": "Diskisyon apwopo kontni paj sa a",
-       "tooltip-ca-edit": "Ou mèt modifye paj sa a. Tanpri, itilize bouton \"Kout je\" anvan ou anrejistre.",
+       "tooltip-ca-edit": "Edit paj sa a",
        "tooltip-ca-addsection": "Komanse yon nouvo seksyon",
        "tooltip-ca-viewsource": "Paj sa a pwoteje. Ou kapab wè kòd sous li.",
        "tooltip-ca-history": "Vèsyon ki ansyen pou paj sa (ak tout kontribitè ki te travay sou li)",
        "version": "Vèsyon",
        "specialpages": "Paj espesyal yo",
        "tag-filter": "Filtre [[Special:Tags|Tag]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
        "htmlform-reset": "Revoke chanjman yo",
        "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
        "logentry-newusers-create": "Kont itilizatè $1 a kreye",
index 449f8a5..b437279 100644 (file)
        "actionthrottled": "Művelet megszakítva",
        "actionthrottledtext": "A spamek elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.",
        "protectedpagetext": "Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység.",
-       "viewsourcetext": "Megtekintheted és másolhatod a lap forrását:",
-       "viewyourtext": "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
+       "viewsourcetext": "Megtekintheted és másolhatod a lap forrását.",
+       "viewyourtext": "Megtekintheted és kimásolhatod a <strong>saját szerkesztéseidet</strong> az alábbi lapra.",
        "protectedinterface": "Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.",
        "editinginterface": "<strong>Vigyázat:</strong> egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot.",
        "translateinterface": "Minden wikire kiterjedő fordítások hozzáadásához vagy szerkesztésére használd a [//translatewiki.net/ translatewiki.net]-et, a MédiaWiki lokalizációs projektjét.",
        "readonlywarning": "FIGYELMEZTETÉS: A wiki adatbázisát karbantartás miatt zárolták, ezért most nem fogod tudni elmenteni a szerkesztéseidet!\nA lap szövegét másold egy szövegfájlba, amit később felhasználhatsz!'''\n\nAz adatbázist lezáró adminisztrátor az alábbi magyarázatot adta: $1",
        "protectedpagewarning": "'''Figyelem: Ez a lap le van védve, így csak adminisztrátori jogosultságokkal rendelkező szerkesztők módosíthatják.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "semiprotectedpagewarning": "'''Megjegyzés:''' ez a lap védett, így regisztrálatlan vagy újonnan regisztrált szerkesztők nem módosíthatják.",
-       "cascadeprotectedwarning": "'''Figyelem:''' ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} szerepel beillesztve:",
+       "cascadeprotectedwarning": "<strong>Figyelem:</strong> ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} be van illesztve:",
        "titleprotectedwarning": "'''Figyelem: Ez a lap le van védve, így csak a [[Special:ListGroupRights|megfelelő jogosultságokkal]] rendelkező szerkesztők hozhatják létre.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "templatesused": "A lapon használt {{PLURAL:$1|sablon|sablonok}}:",
        "templatesusedpreview": "Az előnézet megjelenítésekor használt {{PLURAL:$1|sablon|sablonok}}:",
        "logdelete-selected": "{{PLURAL:$1|Kiválasztott naplóesemény|Kiválasztott naplóesemények}}:",
        "revdelete-text-text": "A törölt változatok megmaradnak a laptörténetben, de a tartalmuk a nyilvánosan nem elérhető.",
        "revdelete-text-file": "A törölt változatok megmaradnak a fájl történetben, de a tartalmuk egy része nyilvánosan nem elérhető.",
-       "logdelete-text": "A törölt napló események megmaradnak a naplóban, de a tartalmuk nyilvánosan nem elérhető.",
+       "logdelete-text": "A törölt naplóesemények megmaradnak a naplóban, de a tartalmuk nyilvánosan nem elérhető.",
        "revdelete-text-others": "Más adminisztrátorok elérhetik az elrejtett tartalmat és visszaállíthatják, hacsak további korlátozások nem kerültek bevezetésre.",
        "revdelete-confirm": "Kérlek erősítsd meg, hogy valóban ezt szeretnéd tenni; megértetted a következményeket, és amit teszel, az összhangban van [[{{MediaWiki:Policy-url}}|az irányelvekkel]].",
        "revdelete-suppress-text": "Az elrejtés '''csak''' a következő esetekben használható:\n* Illetlen személyes információk\n*: ''otthoni cím, telefonszámok, társadalombiztosítási számok stb.''",
        "search-category": "($1 kategória)",
        "search-file-match": "(fájl tartalma egyezik)",
        "search-suggest": "Keresési javaslat: $1",
+       "search-rewritten": "Találatok mutatása a következőre: $1. Inkább erre szeretnék rákeresni: $2.",
        "search-interwiki-caption": "Társlapok",
        "search-interwiki-default": "$1 találatok:",
        "search-interwiki-more": "(több)",
        "uploaddisabledtext": "A fájlfeltöltés nem engedélyezett.",
        "php-uploaddisabledtext": "A PHP-s fájlfeltöltés le van tiltva. Ellenőrizd a file_uploads beállítást.",
        "uploadscripted": "Ez a fájl olyan HTML- vagy parancsfájlkódot tartalmaz, melyet tévedésből egy webböngésző esetleg értelmezni próbálhatna.",
+       "upload-scripted-pi-callback": "Nem tölthetsz fel olyan fájlt, ami XML-stíluslap feldolgozási utasításokat tartalmaz.",
+       "uploaded-script-svg": "A feltöltött SVG fájlodban szkriptelemet találtunk: \"$1\".",
+       "uploaded-hostile-svg": "Nem biztonságos CSS kódot találtunk a feltöltött SVG fájlod stíluselemei között.",
+       "uploaded-event-handler-on-svg": "Az alábbi eseménykezelő-attribútum beállítása nem megengedett az SVG fájlokban: <code>$1=$2</code>.",
+       "uploaded-href-attribute-svg": "Az alábbi nem lokális célra (pl. http://, javascript, stb.) mutató href attribútum nem megengedett az SVG fájlokban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Nem biztonságos célra mutató href-et találtam a feltöltött SVG fájlban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "A feltöltött SVG fájlban \"animate\" taget találtam, ami az alábbi \"from\" attribútumával megváltoztathat egy href-et: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-setting-handler-svg": "Az SVG kódok, amelyek a \"handler\" attribútumot távolra/adatra/szkriptre állítják, le vannak tiltva. A feltöltött SVG fájlban a következőt találtam: <code>$1=\"$2\"</code>.",
+       "uploaded-remote-url-svg": "Az SVG kódok, amelyek bármely stílus-attribútumot távoli URL-ra állítják, le vannak tiltva. A feltöltött SVG fájlban a következőt találtam: <code>$1=\"$2\"</code>.",
+       "uploaded-image-filter-svg": "A feltöltött SVG fájl URL-t tartalmazó képfiltert tartalmaz: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadscriptednamespace": "Ez az SVG fájl érvénytelen névteret (\"$1\") tartalmaz.",
        "uploadinvalidxml": "A feltöltött XML fájlt nem lehet feldolgozni.",
        "uploadvirus": "Ez a fájl vírust tartalmaz! A részletek: $1",
        "watchlistanontext": "Jelentkezz be a figyelőlistád megtekintéséhez és szerkesztéséhez.",
        "watchnologin": "Nem vagy bejelentkezve",
        "addwatch": "Hozzáadás a figyelőlistához",
-       "addedwatchtext": "A(z) „[[:$1]]” lapot hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].\nEzután minden, a lapon vagy annak vitalapján történő változást ott fogsz látni.",
+       "addedwatchtext": "A(z) „[[:$1]]” lapot és vitalapját hozzáadtam a [[Special:Watchlist|figyelőlistádhoz]].",
        "addedwatchtext-short": "Az oldal: \"$1\" hozzá lett adva a figyelőlistádhoz.",
        "removewatch": "Eltávolítás a figyelőlistáról",
-       "removedwatchtext": "A(z) „[[:$1]]” lapot eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
+       "removedwatchtext": "A(z) „[[:$1]]” lapot és vitalapját eltávolítottam a [[Special:Watchlist|figyelőlistáról]].",
        "removedwatchtext-short": "Az oldal: \"$1\" el lett távolítva a figyelőlistádról.",
        "watch": "Lap figyelése",
        "watchthispage": "Lap figyelése",
        "changecontentmodel-success-title": "A tartalommodell megváltozott",
        "changecontentmodel-success-text": "A(z) [[:$1]] lap tartalommodellje sikeresen megváltoztatva.",
        "changecontentmodel-cannot-convert": "A(z) [[:$1]] lap nem alakítható át $2 típusúvá.",
-       "changecontentmodel-title-cantexist": "Nem lehet oldal a(z) $1 helyen.",
        "changecontentmodel-nodirectediting": "A(z) $1 tartalommodell nem támogatja a közvetlen szerkesztést",
        "log-name-contentmodel": "Tartalommodell-változások naplója",
        "log-description-contentmodel": "Egy lap tartalommodelljéhez kapcsolódó események",
        "protect-locked-blocked": "Nem változtathatod meg a védelmi szinteket, amíg blokkolnak. Itt vannak a(z)\n'''$1''' lap jelenlegi beállításai:",
        "protect-locked-dblock": "A védelmi szinteket egy aktív adatbázis zárolás miatt nem változtathatod meg.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
        "protect-locked-access": "A fiókod számára nem engedélyezett a védelmi szintek megváltoztatása.\nItt vannak a(z) '''$1''' lap jelenlegi beállításai:",
-       "protect-cascadeon": "A lap jelenleg le van védve, mert {{PLURAL:$1|tartalmazza az alábbi lap, amelyen|tartalmazzák az alábbi lapok, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
+       "protect-cascadeon": "A lap jelenleg le van védve, mert be van illesztve az alábbi {{PLURAL:$1|lapra, amelyen|lapokra, amelyeken}} be van kapcsolva a kaszkád védelem.\nEzen lap védelmi szintjének megváltoztatása nem lesz hatással a kaszkád védelemre.",
        "protect-default": "minden szerkesztő számára engedélyezett",
        "protect-fallback": "„$1”-i engedély szükséges hozzá",
        "protect-level-autoconfirmed": "automatikusan megerősített szerkesztők számára",
        "saturday-at": "$1 (szombat)",
        "sunday-at": "$1 (vasárnap)",
        "yesterday-at": "Tegnap $1",
-       "bad_image_list": "A formátum a következő:\n\nCsak a listatételek (csillaggal * kezdődő tételek) vannak figyelembe véve. Egy sor első hivatkozásának egy rossz képre mutató hivatkozásnak kell lennie.\nUgyanazon sor további hivatkozásai kivételnek tekintettek, pl. a szócikkek, ahol a kép bennük fordulhat elő.",
+       "bad_image_list": "A formátum a következő:\n\nCsak a listatételek (csillaggal * kezdődő sorok) vannak figyelembe véve.\nEgy sor első hivatkozásának egy rossz képre mutató hivatkozásnak kell lennie.\nUgyanazon sor további hivatkozásai kivételnek tekintettek: szócikkek, amikben a kép előfordulhat.",
        "metadata": "Metaadatok",
        "metadata-help": "Ez a kép járulékos adatokat tartalmaz, amelyek feltehetően a kép létrehozásához használt digitális fényképezőgép vagy lapolvasó beállításairól adnak tájékoztatást.  Ha a képet az eredetihez képest módosították, ezen adatok eltérhetnek a kép tényleges jellemzőitől.",
        "metadata-expand": "További képadatok",
        "htmlform-cloner-create": "További hozzáadása",
        "htmlform-cloner-delete": "Eltávolítás",
        "htmlform-cloner-required": "Legalább egy érték szükséges.",
+       "htmlform-title-badnamespace": "[[:$1]] nem a(z) „{{ns:$2}}” névtérben található.",
+       "htmlform-title-not-creatable": "„$1” nem egy létrehozható lapcím",
+       "htmlform-title-not-exists": "[[:$1]] nem létezik.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nem létezik.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nem egy érvényes felhasználónév.",
        "sqlite-has-fts": "$1 teljes szöveges keresés támogatással",
        "sqlite-no-fts": "$1 teljes szöveges keresés támogatása nélkül",
        "logentry-delete-delete": "$1 törölte a következő lapot: $3",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
        "special-characters-title-minus": "minusz jel",
+       "mw-widgets-dateinput-no-date": "Nincs kiválasztott dátum",
+       "mw-widgets-dateinput-placeholder-day": "ÉÉÉÉ-HH-NN",
+       "mw-widgets-dateinput-placeholder-month": "ÉÉÉÉ-HH",
        "mw-widgets-titleinput-description-new-page": "a lap még nem létezik",
        "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1"
 }
index bb5dc9b..149cc42 100644 (file)
        "content-model-wikitext": "վիքիտեքստ",
        "content-model-javascript": "ՋավաՍկրիպտ",
        "content-model-css": "ՍիԷսԷս",
+       "duplicate-args-category": "Կաղապարներում կրկնակի արգումենտներով էջեր",
        "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
        "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
        "undo-summary": "Հետ է շրջվում $1 խմբագրումը, որի հեղինակն է՝ [[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) {{GENDER:$2|մասնակիցը|մասնակցուհին}}",
index d00739c..93a4a25 100644 (file)
        "actionthrottled": "Action limitate",
        "actionthrottledtext": "Como mesura anti-spam, tu es limitate de executar iste action troppo de vices durante un curte periodo de tempore, e tu ha excedite iste limite.\nPer favor reprova post alcun minutas.",
        "protectedpagetext": "Iste pagina ha essite protegite pro impedir le modification o altere actiones.",
-       "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina:",
-       "viewyourtext": "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
+       "viewsourcetext": "Tu pote vider e copiar le codice-fonte de iste pagina.",
+       "viewyourtext": "Tu pote vider e copiar le fonte de <strong>tu modificationes</strong> de iste pagina.",
        "protectedinterface": "Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
        "editinginterface": "<strong>Attention:</strong> Le texto de iste pagina face parte del interfacie pro le software.\nOmne modification apportate a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.",
        "translateinterface": "Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de localisation de MediaWiki.",
        "search-category": "(categoria $1)",
        "search-file-match": "(corresponde al contento del file)",
        "search-suggest": "Esque tu vole dicer: $1",
+       "search-rewritten": "Es monstrate le resultatos pro $1. Cerca $2 in su loco.",
        "search-interwiki-caption": "Projectos fratres",
        "search-interwiki-default": "Resultatos de $1:",
        "search-interwiki-more": "(plus)",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[observate per $1 {{PLURAL:$1|usator|usatores}}]",
-       "rc_categories": "Limite a categorias (separar con \"|\")",
-       "rc_categories_any": "Qualcunque",
+       "rc_categories": "Limitar al categorias (separar con \"|\"):",
+       "rc_categories_any": "Qualcunque categoria seligite",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} post cambio",
        "newsectionsummary": "/* $1 */ nove section",
        "rc-enhanced-expand": "Revelar detalios",
        "uploaddisabledtext": "Le incargamento de files es disactivate.",
        "php-uploaddisabledtext": "Le incargamento de files PHP es disactivate. Per favor verifica le configuration file_uploads.",
        "uploadscripted": "Iste file contine codice de HTML o de script que pote esser interpretate erroneemente per un navigator del web.",
+       "upload-scripted-pi-callback": "Non pote incargar un file que contine instructiones pro le tractamento de folios de stilo XML.",
+       "uploaded-script-svg": "Un elemento de script \"$1\" se trova in le file SVG incargate.",
+       "uploaded-hostile-svg": "Certe codice CSS insecur se trova in le elemento de stilo del file SVG incargate.",
+       "uploaded-event-handler-on-svg": "Fixar attributos de gestion de eventos <code>$1=\"$2\"</code> non es permittite in files SVG.",
+       "uploaded-href-attribute-svg": "Attributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con objectivos non local (p.ex. http://, javascript:, etc) non es permittite in files SVG.",
+       "uploaded-href-unsafe-target-svg": "Un href a un objectivo non secur <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-animate-svg": "Un etiqueta \"animate\" que poterea cambiar le href, usante le attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, se trova in le file SVG incargate.",
+       "uploaded-setting-event-handler-svg": "Fixar le attributos de gestion de eventos non es permittite, ma le codice <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-setting-href-svg": "Usar le etiquetta \"set\" pro adder le attributo \"href\" al elemento genitor non es permittite.",
+       "uploaded-wrong-setting-svg": "Le uso del etiquetta \"set\" pro adder un objectivo remote, de datos o de script a un attributo es blocate, ma le codice <code>&lt;set to=\"$1\"&gt;</code> se trova in le file SVG incargate.",
+       "uploaded-setting-handler-svg": "Le SVG que fixa le attributo \"handler\" con un objectivo remote, de datos o de script es blocate, ma le codice <code>$1=\"$2\"</code> se trova in le file SVG incargate.",
+       "uploaded-remote-url-svg": "Le SVG que contine un URL remote in un attributo de stilo es blocate, ma le codice <code>$1=\"$2\"</code> se trova in le file SVG incargate.",
+       "uploaded-image-filter-svg": "Se trova un filtro de imagine con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> in le file SVG incargate.",
        "uploadscriptednamespace": "Iste file SVG contine un spatio de nomines invalide: \"$1\"",
        "uploadinvalidxml": "Le codice XML in le file incargate non pote esser interpretate.",
        "uploadvirus": "Le file contine un virus! Detalios: $1",
        "listfiles-delete": "deler",
        "listfiles-summary": "Iste pagina special monstra tote le files incargate.",
        "listfiles_search_for": "Cercar un nomine de media:",
+       "listfiles-userdoesnotexist": "Le conto de usator \"$1\" non es registrate.",
        "imgfile": "file",
        "listfiles": "Lista de files",
        "listfiles_thumb": "Miniatura",
        "unusedimages": "Imagines non usate",
        "wantedcategories": "Categorias plus demandate",
        "wantedpages": "Paginas plus demandate",
-       "wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas que ha solmente redirectiones que liga verso illos. Pro un lista del paginas non existente que ha redirectiones que liga verso illos, vide [[{{#special:BrokenRedirects}}]].",
+       "wantedpages-summary": "Lista del paginas non existente con le major numero de ligamines verso illos, excludente le paginas verso le quales solmente redirectiones liga. Pro un lista del paginas non existente verso le quales redirectiones liga, vide [[{{#special:BrokenRedirects}}|le lista de redirectiones rupte]].",
        "wantedpages-badtitle": "Titulo invalide in le gruppo de resultatos: $1",
        "wantedfiles": "Files desirate",
        "wantedfiletext-cat": "Le sequente files es usate ma non existe. Le files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].",
        "logempty": "Le registro contine nihil pro iste pagina.",
        "log-title-wildcard": "Cercar titulos que comencia con iste texto",
        "showhideselectedlogentries": "Monstrar/celar le entratas de registro seligite",
+       "log-edit-tags": "Modificar le etiquettas del entratas de registro seligite",
        "allpages": "Tote le paginas",
        "nextpage": "Sequente pagina ($1)",
        "prevpage": "Precedente pagina ($1)",
        "watchlistanontext": "Per favor, aperi session pro poter vider o modificar entratas in tu observatorio.",
        "watchnologin": "Tu non ha aperite un session",
        "addwatch": "Adder al observatorio",
-       "addedwatchtext": "Le pagina \"[[:$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].\nLe modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.",
+       "addedwatchtext": "Le pagina \"[[:$1]]\", e su pagina de discussion, ha essite addite a [[Special:Watchlist|tu observatorio]].",
        "addedwatchtext-short": "Le pagina \"$1\" ha essite addite a tu observatorio.",
        "removewatch": "Remover del observatorio",
-       "removedwatchtext": "Le pagina \"[[:$1]]\" ha essite removite de [[Special:Watchlist|tu observatorio]].",
+       "removedwatchtext": "Le pagina \"[[:$1]]\", e su pagina de discussion, ha essite removite de [[Special:Watchlist|tu observatorio]].",
        "removedwatchtext-short": "Le pagina \"$1\" ha essite removite de tu observatorio.",
        "watch": "Observar",
        "watchthispage": "Observar iste pagina",
        "rollback-success": "Revocava modificationes per $1;\nretornava al version per $2.",
        "sessionfailure-title": "Error de session",
        "sessionfailure": "Il pare haber un problema con tu session de conto;\niste action ha essite cancellate como precaution contra le sequestramento de sessiones.\nPer favor preme \"retro\" e recarga le pagina de ubi tu ha venite, postea reprova.",
+       "changecontentmodel": "Cambiar le modello de contento de un pagina",
+       "changecontentmodel-legend": "Cambiar modello de contento",
+       "changecontentmodel-title-label": "Titulo del pagina",
+       "changecontentmodel-model-label": "Nove modello de contento",
+       "changecontentmodel-reason-label": "Motivo:",
+       "changecontentmodel-success-title": "Le modello de contento ha essite cambiate",
+       "changecontentmodel-success-text": "Le typo de contento de [[:$1]] ha essite cambiate.",
+       "changecontentmodel-cannot-convert": "Le contento de [[:$1]] non pote esser convertite a un typo de $2.",
+       "changecontentmodel-nodirectediting": "Le modello de contento $1 non supporta le modification directe",
+       "log-name-contentmodel": "Registro de cambiamentos de modello de contento",
+       "log-description-contentmodel": "Eventos relative al modellos de contento de un pagina",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cambiava}} le modello de contento del pagina $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-change-revertlink": "reverter",
+       "logentry-contentmodel-change-revert": "reversion",
        "protectlogpage": "Registro de protectiones",
        "protectlogtext": "Ecce un lista de cambios de protection de paginas.\nVide le [[Special:ProtectedPages|lista de paginas protegite]] pro le lista de protectiones de paginas actualmente in operation.",
        "protectedarticle": "protegeva \"[[$1]]\"",
        "protect-locked-blocked": "Tu non pote cambiar le nivellos de protection durante que tu es blocate.\nEcce le configurationes actual del pagina '''$1''':",
        "protect-locked-dblock": "Le nivellos de protection non pote esser cambiate proque es active un blocada del base de datos.\nEcce le configurationes actual del pagina '''$1''':",
        "protect-locked-access": "Tu conto non ha le permission de cambiar le nivellos de protection de paginas.\nEcce le configurationes actual del pagina '''$1''':",
-       "protect-cascadeon": "Iste pagina es actualmente protegite proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.\nCambiamentos in le nivello de protection de iste pagina non influentia le protection in cascada.",
+       "protect-cascadeon": "Iste pagina es actualmente protegite proque illo es transcludite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} ha activate le protection in cascada.\nCambiamentos in le nivello de protection de iste pagina non influentia le protection in cascada.",
        "protect-default": "Permitter a tote le usatores",
        "protect-fallback": "Permitter solmente al usatores con le privilegio de \"$1\"",
        "protect-level-autoconfirmed": "Permitter solmente al usatores autoconfirmate",
        "thumbnail_image-failure-limit": "Il ha habite recentemente troppo de tentativas fallite ($1 o plus) de generar iste miniatura. Per favor reproba plus tarde.",
        "import": "Importar paginas",
        "importinterwiki": "Importar ab un altere wiki",
-       "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
+       "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera conservate.\nTote le actiones de importation ab altere wikis se registra in le [[Special:Log/import|registro de importationes]].",
        "import-interwiki-sourcewiki": "Wiki de origine:",
        "import-interwiki-sourcepage": "Pagina de origine:",
        "import-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
        "import-interwiki-templates": "Includer tote le patronos",
        "import-interwiki-submit": "Importar",
+       "import-mapping-default": "Importar in destinationes predefinite",
+       "import-mapping-namespace": "Importar in un spatio de nomines:",
+       "import-mapping-subpage": "Importar como subpaginas del pagina sequente:",
        "import-upload-filename": "Nomine del file:",
        "import-comment": "Commento:",
        "importtext": "Per favor exporta le file del wiki de origine con le [[Special:Export|facilitate de exportation]].\nSalveguarda lo in tu computator e incarga lo hic.",
        "importcantopen": "Impossibile aperir le file de importation",
        "importbadinterwiki": "Ligamine interwiki invalide",
        "importsuccess": "Importation complete!",
-       "importnosources": "Nulle origine de importation transwiki ha essite definite e le incargamento directe de historias es disactivate.",
+       "importnosources": "Nulle wiki ab le qual importar ha essite definite e le incargamento directe de historias es disactivate.",
        "importnofile": "Nulle file de importation esseva incargate.",
        "importuploaderrorsize": "Le incargamento del file de importation ha fallite. Le grandor del file excede le limite pro incargamentos.",
        "importuploaderrorpartial": "Le incargamento del file de importation ha fallite. Le file esseva incargate solmente in parte.",
        "pageinfo-robot-index": "Permittite",
        "pageinfo-robot-noindex": "Non permittite",
        "pageinfo-watchers": "Numero de observatores del pagina",
+       "pageinfo-visiting-watchers": "Numero de observatores del pagina qui ha visitate le modificationes recente",
        "pageinfo-few-watchers": "Minus de $1 {{PLURAL:$1|observator|observatores}}",
+       "pageinfo-few-visiting-watchers": "Il pote haber o non haber un usator observante le modificationes recente",
        "pageinfo-redirects-name": "Numero de redirectiones verso iste pagina",
        "pageinfo-subpages-name": "Subpaginas de iste pagina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirection|redirectiones}}; $3 {{PLURAL:$3|non-redirection|non-redirectiones}})",
        "pageinfo-protect-cascading-yes": "Si",
        "pageinfo-protect-cascading-from": "Protection in cascada a partir de",
        "pageinfo-category-info": "Information de categoria",
+       "pageinfo-category-total": "Numero total de membros",
        "pageinfo-category-pages": "Numero de paginas",
        "pageinfo-category-subcats": "Numero de subcategorias",
        "pageinfo-category-files": "Numero de files",
        "patrol-log-page": "Registro de patrulia",
        "patrol-log-header": "Isto es un registro de versiones patruliate.",
        "log-show-hide-patrol": "$1 le registro de versiones patruliate",
+       "log-show-hide-tag": "$1 registro de etiquettas",
        "deletedrevision": "Deleva le ancian version $1",
        "filedeleteerror-short": "Error durante le deletion del file: $1",
        "filedeleteerror-long": "Se incontrava errores durante le deletion del file:\n\n$1",
        "tags-activate": "activar",
        "tags-deactivate": "disactivar",
        "tags-hitcount": "$1 {{PLURAL:$1|modification|modificationes}}",
+       "tags-manage-no-permission": "Tu non ha le permission de gerer le etiquettas de modification.",
+       "tags-create-heading": "Crear un nove etiquetta",
+       "tags-create-explanation": "Per configuration predefinite, le etiquettas novemente create essera disponibile pro le uso per usatores e robots.",
+       "tags-create-tag-name": "Nomine del etiquetta:",
        "tags-create-reason": "Motivo:",
        "tags-create-submit": "Crear",
+       "tags-create-no-name": "Tu debe specificar le nomine del etiquetta.",
+       "tags-create-invalid-chars": "Le nomines de etiquetta non pote continer commas (<code>,</code>) o barras oblique (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Le nomines de etiquetta non pote continer characteres que non pote esser usate in titulos de pagina.",
+       "tags-create-already-exists": "Le etiquetta \"$1\" jam existe.",
+       "tags-create-warnings-above": "Le sequente {{PLURAL:$2|advertimento|advertimentos}} ha essite incontrate durante le tentativa de crear le etiquetta \"$1\":",
+       "tags-create-warnings-below": "Vole tu continuar a crear le etiquetta?",
        "tags-delete-title": "Deler etiquetta",
+       "tags-delete-explanation-initial": "Tu es sur le puncto de deler le etiquetta \"$1\" del base de datos.",
+       "tags-delete-explanation-in-use": "Illo essera removite ab {{PLURAL:$2|$2 version o entrata de registro al qual|tote le $2 versiones e/o entratas de registro al quales}} illo es actualmente applicate.",
+       "tags-delete-explanation-warning": "Iste action es <strong>irreversibile</strong> e <strong>non pote esser disfacite</strong>, non mesmo per le administratores del base de datos. Sia certe que iste es le etiquetta que tu intende deler.",
+       "tags-delete-explanation-active": "<strong>Le etiquetta \"$1\" es ancora active, e essera applicate anque in le futuro.</strong> Pro impedir isto, va al loco(s) ubi le etiquetta es applicate e disactiva lo.",
        "tags-delete-reason": "Motivo:",
+       "tags-delete-submit": "Deler irreversibilemente iste etiquetta",
+       "tags-delete-not-allowed": "Etiquettas definite per un extension non pote esser delite a minus que le extension specificamente lo permitte.",
+       "tags-delete-not-found": "Le etiquetta \"$1\" non existe.",
+       "tags-delete-too-many-uses": "Le etiquetta \"$1\" es applicate a plus de $2 {{PLURAL:$2|version|versiones}}, e per isto non pote esser delite.",
+       "tags-delete-warnings-after-delete": "Le etiquetta \"$1\" ha essite delite, ma le sequente {{PLURAL:$2|advertimento|advertimentos}} ha essite incontrate:",
+       "tags-activate-title": "Activar etiquetta",
+       "tags-activate-question": "Tu es sur le puncto de activar le etiquetta \"$1\".",
+       "tags-activate-reason": "Motivo:",
+       "tags-activate-not-allowed": "Non es possibile activar le etiquetta \"$1\".",
+       "tags-activate-not-found": "Le etiquetta \"$1\" non existe.",
+       "tags-activate-submit": "Activar",
+       "tags-deactivate-title": "Disactivar etiquetta",
+       "tags-deactivate-question": "Tu es sur le puncto de disactivar le etiquetta \"$1\".",
+       "tags-deactivate-reason": "Motivo:",
+       "tags-deactivate-not-allowed": "Non es possibile disactivar le etiquetta \"$1\".",
+       "tags-deactivate-submit": "Disactivar",
+       "tags-apply-no-permission": "Tu non ha le permission de adjunger etiquettas de cambiamento a tu cambiamentos.",
+       "tags-apply-not-allowed-one": "Non es permittite applicar le etiquetta \"$1\" manualmente.",
+       "tags-apply-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente applicate: $1",
+       "tags-update-no-permission": "Tu non ha le permission de adder o remover etiquettas de cambiamento sur individual versiones o entratas de registro.",
+       "tags-update-add-not-allowed-one": "Non es permittite adjunger le etiquetta \"$1\" manualmente.",
+       "tags-update-add-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente adjungite: $1",
+       "tags-update-remove-not-allowed-one": "Non es permittite remover le etiquetta \"$1\".",
+       "tags-update-remove-not-allowed-multi": "Le sequente {{PLURAL:$2|etiquetta|etiquettas}} non es autorisate a esser manualmente removite: $1",
+       "tags-edit-title": "Modificar etiquettas",
+       "tags-edit-manage-link": "Gerer etiquettas",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Version|Versiones}} seligite de [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Evento|Eventos}} de registro seligite:",
+       "tags-edit-revision-legend": "Adder o remover etiquettas de {{PLURAL:$1|iste version|tote le $1 versiones}}",
+       "tags-edit-logentry-legend": "Adder o remover etiquettas de {{PLURAL:$1|iste entrata|tote le $1 entratas}} de registro",
+       "tags-edit-existing-tags": "Etiquettas existente:",
+       "tags-edit-existing-tags-none": "\"Nulle\"",
+       "tags-edit-new-tags": "Nove etiquettas:",
+       "tags-edit-add": "Adder iste etiquettas:",
+       "tags-edit-remove": "Remover iste etiquettas:",
+       "tags-edit-remove-all-tags": "(remover tote le etiquettas)",
+       "tags-edit-chosen-placeholder": "Seliger alcun etiquettas",
+       "tags-edit-chosen-no-results": "Nulle etiquetta correspondente trovate",
+       "tags-edit-reason": "Motivo:",
+       "tags-edit-revision-submit": "Applicar cambiamentos a {{PLURAL:$1|iste version|$1 versiones}}",
+       "tags-edit-logentry-submit": "Applicar cambiamentos a {{PLURAL:$1|iste entrata|$1 entratas}} de registro",
+       "tags-edit-success": "Le cambiamentos ha essite applicate con successo.",
+       "tags-edit-failure": "Le cambiamentos non ha potite esser applicate:\n$1",
+       "tags-edit-nooldid-title": "Le version de destination es invalide",
+       "tags-edit-nooldid-text": "O tu non ha specificate un version de destination sur le qual exequer iste function, o le version specificate non existe.",
+       "tags-edit-none-selected": "Selige al minus un etiquetta a adder o remover.",
        "comparepages": "Comparar paginas",
        "compare-page1": "Pagina 1",
        "compare-page2": "Pagina 2",
        "htmlform-cloner-create": "Adder plus",
        "htmlform-cloner-delete": "Remover",
        "htmlform-cloner-required": "Al minus un valor es requirite.",
+       "htmlform-title-badnamespace": "[[:$1]] non es in le spatio de nomines \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" non es un titulo de pagina creabile",
+       "htmlform-title-not-exists": "[[:$1]] non existe.",
+       "htmlform-user-not-exists": "<strong>$1</strong> non existe.",
+       "htmlform-user-not-valid": "<strong>$1</strong> non es un nomine de usator valide.",
        "sqlite-has-fts": "$1 con supporto de recerca de texto integre",
        "sqlite-no-fts": "$1 sin supporto de recerca de texto integre",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleva}} le pagina $3",
        "revdelete-uname-unhid": "nomine de usator non plus celate",
        "revdelete-restricted": "restrictiones applicate al administratores",
        "revdelete-unrestricted": "restrictiones eliminate pro administratores",
+       "logentry-block-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|disblocava}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|importava}} $3 per incargamento de file",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importava}} $3 ab un altere wiki",
        "logentry-merge-merge": "$1 {{GENDER:$2|fusionava}} $3 in $4 (versiones usque a $5)",
        "logentry-move-move": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|renominava}} le pagina $3 a $4 sin lassar un redirection",
        "logentry-upload-upload": "$1 {{GENDER:$2|ha incargate}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ha incargate}} un nove version de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
+       "log-name-managetags": "Registro de gestion de etiquettas",
+       "log-description-managetags": "Iste pagina lista le cargas de gestion relative a [[Special:Tags|etiquettas]]. Le registro contine solmente le actiones exequite manualmente per un administrator; etiquettas pote esser create o delite per le software wiki sin insertion de un entrata in iste registro.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|creava}} le etiquetta \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|deleva}} le etiquetta \"$4\" (removite ab $5 {{PLURAL:$5|version o entrata|versiones e/o entratas}} de registro)",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|activava}} le etiquetta \"$4\" pro uso per usatores e robots",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|disactivava}} le etiquetta \"$4\" pro uso per usatores e robots",
+       "log-name-tag": "Registro de etiquettas",
+       "log-description-tag": "Iste pagina monstra quando usatores ha addite o removite [[Special:Tags|etiquettas]] a individual versiones o entratas de registro. Le registro non include actiones de etiquettage que face parte de un modification, deletion o action similar.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|addeva}} le {{PLURAL:$7|etiquetta|etiquettas}} $6 al version $4 del pagina $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|addeva}} le {{PLURAL:$7|etiquetta|etiquettas}} $6 al entrata de registro $5 del pagina $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|removeva}} le {{PLURAL:$9|etiquetta|etiquettas}} $8 ab le version $4 del pagina $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|removeva}} le {{PLURAL:$9|etiquetta|etiquettas}} $8 ab le entrata de registro $5 del pagina $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|actualisava}} etiquettas sur le version $4 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualisava}} etiquettas sur le entrata de registro $5 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
        "rightsnone": "(nulle)",
        "revdelete-summary": "summario del modification",
        "feedback-adding": "Le responsa es addite al pagina...",
+       "feedback-back": "Retornar",
        "feedback-bugcheck": "Bon! Ma per favor verifica que iste falta non es [$1 jam cognoscite].",
        "feedback-bugnew": "Si, io lo ha verificate; reportar un nove falta",
        "feedback-bugornote": "Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].\nSi non, tu pote usar le formulario facile hic infra. Tu commento essera addite al pagina \"[$3 $2]\", con tu nomine de usator e le navigator del web que tu usa.",
        "feedback-cancel": "Cancellar",
        "feedback-close": "Finite",
+       "feedback-external-bug-report-button": "Signalar un problema technic",
+       "feedback-dialog-title": "Submitter commentario",
+       "feedback-dialog-intro": "Usa le formulario sequente pro submitter tu commentario, le qual apparera in le pagina \"$1\" insimul a tu nomine de usator.",
+       "feedback-error-title": "Error",
        "feedback-error1": "Error: Resultato del API non recognoscite",
        "feedback-error2": "Error: Modification fallite",
        "feedback-error3": "Error: Nulle responsa del API",
+       "feedback-error4": "Error: Impossibile adjunger le commentario sub le titulo specificate",
        "feedback-message": "Message:",
        "feedback-subject": "Subjecto:",
        "feedback-submit": "Submitter",
+       "feedback-terms": "Io comprende que mi information de agente usator include le information sur le version exacte de mi navigator del web e systema de operation e essera publicate insimul a mi commentario.",
+       "feedback-termsofuse": "Io accepta de fornir commentarios in accordo con le Conditiones de Uso.",
        "feedback-thanks": "Gratias! Tu evalutation ha essite publicate in le pagina \"[$2 $1]\".",
+       "feedback-thanks-title": "Gratias!",
+       "feedback-useragent": "Agente usator:",
        "searchsuggest-search": "Cercar",
        "searchsuggest-containing": "continente...",
        "api-error-badaccess-groups": "Tu non ha le permission de incargar files in iste wiki.",
        "log-name-pagelang": "Registro de cambios de lingua",
        "log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5.",
-       "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente apparentias. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar los e seliger le predefinite.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente lineas in <code>LocalSettings.php</code> pro activar tote le apparentias actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
-       "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonar un del repositorios <code>mediawiki/skins/*</code> via git in le directorio <code dir=\"ltr\">skins/</code> de tu installation de MediaWiki.\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar skins e seliger le predefinite.",
+       "default-skin-not-found": "Attention! Le apparentia predefinite de tu wiki, definite in <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nLe installation pare includer le sequente {{PLURAL:$4|apparentia|apparentias}}. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar {{PLURAL:$4|lo|los e seliger le predefinite}}.\n\n$2\n\n; Si tu ha justo installate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias indidivual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki.\n\n; Si tu ha justo actualisate MediaWiki:\n: MediaWiki a partir del version 1.24 non plus activa automaticamente le apparentias installate (vide [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Tu pote collar le sequente {{PLURAL:$5|linea|lineas}} in <code>LocalSettings.php</code> pro activar {{PLURAL:$5|le apparentia|tote le apparentias}} actualmente installate:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si tu ha justo modificate <code>LocalSettings.php</code>:\n: Verifica meticulosemente que le nomines del apparentias non ha errores.",
+       "default-skin-not-found-no-skins": "Attention! Le apparentia predefinite de tu wiki, definite in <code>$wgDefaultSkin</code> como <code>$1</code>, non es disponibile.\n\nTu non ha apparentias installate.\n\n; Si tu ha justo installate o actualisate MediaWiki:\n: Tu lo ha probabilemente installate a partir de git, o directemente del codice fonte con un altere methodo. Isto es normal. Essaya installar alcun apparentias desde [https://www.mediawiki.org/wiki/Category:All_skins le directorio de apparentias de mediawiki.org], per:\n:* Discargar le [https://www.mediawiki.org/wiki/Download archivo tar del installator], que include plure apparentias e extensiones. Tu pote copiar e collar le directorio <code>skins/</code> de illo.\n:* Discargar archivos tar con apparentias individual ab [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usar Git pro discargar apparentias].\n: Facer isto non deberea interferer con tu repositorio git si tu es un disveloppator de MediaWiki. Vide [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pro saper como activar apparentias e seliger le predefinite.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')",
        "mediastatistics": "Statisticas de multimedia",
        "json-error-recursion": "Il ha un o plure referentias recursive in le valor a codificar",
        "json-error-inf-or-nan": "Un o plure valores NAN o INF se trova in le valor a codificar",
        "json-error-unsupported-type": "Un valor de un typo que non pote esser codificate ha essite date",
+       "headline-anchor-title": "Ligamine a site section",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Latin extendite",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-thai": "Thailandese",
        "special-characters-group-lao": "Laotiano",
        "special-characters-group-khmer": "Cambodgiano",
-       "special-characters-title-minus": "signo minus"
+       "special-characters-title-endash": "lineetta en",
+       "special-characters-title-emdash": "lineetta em",
+       "special-characters-title-minus": "signo minus",
+       "mw-widgets-dateinput-no-date": "Nulle data seligite",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
+       "mw-widgets-titleinput-description-new-page": "pagina non existe ancora",
+       "mw-widgets-titleinput-description-redirect": "redirection a $1"
 }
index 9a0c69c..83f90fa 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
-       "special-characters-title-minus": "tanda kurang"
+       "special-characters-title-minus": "tanda kurang",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-HH",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index 53653c4..0fc53ab 100644 (file)
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "senial a panagkissay",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
        "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1"
 }
index b623469..82c6acc 100644 (file)
        "special-characters-title-endash": "lineetta enne",
        "special-characters-title-emdash": "lineetta emme",
        "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "questa pagina non esiste ancora",
        "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1"
 }
index 01d5379..aae8177 100644 (file)
        "boteditletter": "ボ",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 人の利用者}}がウォッチしています]",
-       "rc_categories": "カテゴリを限定 (「|」で区切る)",
-       "rc_categories_any": "すべて",
+       "rc_categories": "カテゴリを限定 (「|」で区切る):",
+       "rc_categories_any": "選択したもの全部",
        "rc-change-size": "$1",
        "rc-change-size-new": "変更後は $1 {{PLURAL:$1|バイト}}",
        "newsectionsummary": "/* $1 */ 新しい節",
index a8c052b..58c5ed7 100644 (file)
        "special-characters-title-endash": "ტირე",
        "special-characters-title-emdash": "გრძელი ტირე",
        "special-characters-title-minus": "მინუსის ნიშანი",
+       "mw-widgets-dateinput-placeholder-day": "წწწწ-თთ-დდ",
+       "mw-widgets-dateinput-placeholder-month": "წწწწ-თთ",
        "mw-widgets-titleinput-description-new-page": "გვერდი ჯერ არ არსებობს",
        "mw-widgets-titleinput-description-redirect": "გადამისამართება $1-ზე"
 }
index f6e71d6..a3d5478 100644 (file)
        "copyrightwarning": "{{SITENAME}} жобасына қосқан барлық үлестеріңіз $2 (көбірек ақпарат үшін: $1) аясында жарияланатынын ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін және ақысыз көпшілікке таралуын қаламасаңыз мұнда жарияламаңыз<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "copyrightwarning2": "{{SITENAME}} жобасына қосқан барлық үлестеріңізді басқа үлескерлер өңдеуге, өзгертуге немесе аластауы мүмкін екенін ескеріңіз.\nЕгер еңбегіңіздің еркін өңделуін қаламасаңыз осында жарияламаңыз.<br />\nТағы да бұл мәліметті өзіңіз жазғаныңызға не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз. (көбірек ақпарат үшін $1 құжатын қараңыз).\n<strong>Авторлық құқықпен қорғалған мәліметті рұқсатсыз жарияламаңыз!</strong>",
        "longpageerror": "<strong>ҚАТЕЛІК: Сақтамақшы болған мәтініңіздің көлемі {{PLURAL:$1|бір килобайт|$1 килобайт}} ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
-       "readonlywarning": "<strong>Ð\95СÐ\9aÐ\95РТУ: Ð\94еÑ\80екÒ\9bоÑ\80 Ñ\82еÑ\85никалÑ\8bÒ\9b Ð¶Ò±Ð¼Ñ\8bÑ\81Ñ\82аÑ\80 Ð¶Ð°Ñ\81аÑ\83 Ò¯Ñ\88Ñ\96н Ò\9bұлÑ\8bпÑ\82алÒ\93ан Ñ\81ондÑ\8bÒ\9bÑ\82ан Ð´Ó\99л Ò\9bазÑ\96Ñ\80 Ó©Ò£Ð´ÐµÐ¼ÐµÒ£Ñ\96здÑ\96 Ñ\81аÒ\9bÑ\82ай Ð°Ð»Ð¼Ð°Ð¹Ñ\81Ñ\8bз.</strong>\nÐ\9aейÑ\96н Ñ\81аÒ\9bÑ\82аÑ\83 Ò¯Ñ\88Ñ\96н Ð¼Ó\99Ñ\82Ñ\96нÑ\96Ò£Ñ\96здÑ\96 Ð¼Ó\99Ñ\82Ñ\96н Ñ\84айлÑ\8bна ÐºÓ©Ñ\88Ñ\96Ñ\80Ñ\96п Ð°Ð»Ñ\8bпÑ\83Ò£Ñ\8bзÒ\93а Ð±Ð¾Ð»Ð°Ð´Ñ\8b. \n\nÐ\90дминÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 Ð¾Ð½Ñ\8b Ò\9bұлÑ\8bпÑ\82аÑ\83 Ñ\81ебебÑ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96дей Ñ\82Ò¯Ñ\81Ñ\96ндÑ\96Ñ\80едÑ\96: $1",
+       "readonlywarning": "<strong>ЕСКЕРТУ: Дерекқор техникалық жұмыстар жасау үшін құлыпталған сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.</strong>\nКейін сақтау үшін мәтініңізді мәтін файлына көшіріп алуңызға болады. \n\nАдминстратор оны құлыптау себебін келесідей түсіндіреді: $1",
        "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде соңғы журнал жазбасы көрсетілген:",
        "semiprotectedpagewarning": "<strong>Ескерту:</strong> Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:",
        "cascadeprotectedwarning": "<strong>Ескерту:</strong> Бұл бет қорғалған, сондықтан тек әкімші құқықтары бар қатысушылар ғана өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:",
        "special-characters-title-endash": "дефис",
        "special-characters-title-emdash": "сызықша",
        "special-characters-title-minus": "минус белгісі",
+       "mw-widgets-dateinput-placeholder-day": "ЖЖЖЖ-АА-КК",
+       "mw-widgets-dateinput-placeholder-month": "ЖЖЖЖ-АА",
        "mw-widgets-titleinput-description-new-page": "бет жоқ екен",
        "mw-widgets-titleinput-description-redirect": "$1 дегенге бағыттату"
 }
index ad72533..3725c9e 100644 (file)
        "pool-queuefull": "풀 대기열이 가득 찼습니다",
        "pool-errorunknown": "알 수 없는 오류",
        "pool-servererror": "풀 카운터 서비스는 사용할 수 없습니다 ($1).",
-       "poolcounter-usage-error": "ì\96´ë²\95 ì\97\90ë\9f¬: $1",
+       "poolcounter-usage-error": "ì\82¬ì\9a©ë²\95 ì\98¤ë¥\98: $1",
        "aboutsite": "{{SITENAME}} 소개",
        "aboutpage": "Project:소개",
        "copyright": "내용은 별도로 명시하지 않을 경우 $1에 따라 사용할 수 있습니다.",
        "badaccess-group0": "요청한 명령을 실행할 권한이 없습니다.",
        "badaccess-groups": "요청한 명령은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게 제한됩니다: $1.",
        "versionrequired": "미디어위키 $1 버전 필요",
-       "versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참하세요.",
+       "versionrequiredtext": "이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.\n[[Special:Version|설치된 미디어위키 버전]]을 참하세요.",
        "ok": "확인",
        "retrievedfrom": "원본 주소 \"$1\"",
        "youhavenewmessages": "다른 사용자로부터의 $1가 {{PLURAL:$3|있습니다}}. ($2)",
        "link_sample": "링크 제목",
        "link_tip": "안쪽 링크",
        "extlink_sample": "http://www.example.com 사이트 이름",
-       "extlink_tip": "바깥 링크 (주소 앞에 http://가 있어야 합니다)",
+       "extlink_tip": "바깥 링크 (http://를 앞에 붙여야 합니다)",
        "headline_sample": "제목",
        "headline_tip": "2단계 문단 제목",
        "nowiki_sample": "여기에 위키 문법을 사용하지 않을 글을 적어 주세요",
        "image_tip": "파일 넣기",
        "media_tip": "파일 링크하기",
        "sig_tip": "내 서명과 현재 시각",
-       "hr_tip": "가로 줄 (되도록 사용하지 말아 주세요)",
+       "hr_tip": "가로 줄 (되도록 사용하지 말아주세요)",
        "summary": "요약:",
        "subject": "주제/제목:",
        "minoredit": "사소한 편집입니다",
        "accmailtitle": "비밀번호를 보냈습니다",
        "accmailtext": "[[User talk:$1|$1]] 사용자의 비밀번호를 임의로 만들어 $2(으)로 보냈습니다. 로그인하고 나서 [[Special:ChangePassword|비밀번호를 바꿀]] 수 있습니다.",
        "newarticle": "(새 문서)",
-       "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+       "newarticletext": "아직 없는 문서의 링크를 따라왔습니다.\n새 문서를 만들려면 아래 상자에 내용을 입력하면 됩니다. (자세한 내용은 [$1 도움말 문서]를 참하세요)\n만약 잘못 찾아왔다면, 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
        "anontalkpagetext": "----\n여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.\n익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.\nIP 주소는 여러 사용자가 공유할 수 있습니다.\n자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인해서]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.",
        "noarticletext": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]],\n이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,\n문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.",
        "noarticletext-nopermission": "이 문서가 현재 존재하지 않습니다.\n이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색하거나]], 이 문서에 관련된 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.",
        "revdelete-edit-reasonlist": "삭제 이유 편집",
        "revdelete-offender": "판 작성자:",
        "suppressionlog": "숨기기 기록",
-       "suppressionlogtext": "다음은 관리자로부터 숨겨진 내용에 관한 삭제와 차단 기록입니다.\n현재 차단된 사용자 목록을 보려면 [[Special:BlockList|차단된 사용자 목록]]을 참하세요.",
+       "suppressionlogtext": "다음은 관리자로부터 숨겨진 내용에 관한 삭제와 차단 기록입니다.\n현재 차단된 사용자 목록을 보려면 [[Special:BlockList|차단된 사용자 목록]]을 참하세요.",
        "mergehistory": "문서 역사 합치기",
        "mergehistory-header": "이 문서는 한 문서에서 다른 문서로 문서 역사를 합치게 할 것입니다.\n이전 문서를 역사적 기록으로 계속 남겨둘 것인지 확인해주세요.",
        "mergehistory-box": "두 문서의 판 합치기:",
        "unusedimages": "사용하지 않는 파일 목록",
        "wantedcategories": "필요한 분류 목록",
        "wantedpages": "필요한 문서 목록",
-       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참하세요.",
+       "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참하세요.",
        "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1",
        "wantedfiles": "필요한 파일 목록",
        "wantedfiletext-cat": "다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.",
        "cachedspecial-viewing-cached-ts": "현재 이 문서는 캐시 처리된 버전으로 현재 문서 상태를 반영하지 않을 수도 있습니다.",
        "cachedspecial-refresh-now": "최신 버전 보기.",
        "categories": "분류 목록",
-       "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참하세요.",
+       "categoriespagetext": "문서나 자료를 {{PLURAL:$1|포함하고 있는 분류}} 목록입니다.\n[[Special:UnusedCategories|사용되지 않는 분류]]는 여기에 보이지 않습니다.\n[[Special:WantedCategories|필요한 분류]]도 참하세요.",
        "categoriesfrom": "다음으로 시작하는 분류를 보여주기:",
        "special-categories-sort-count": "갯수 순으로 정렬",
        "special-categories-sort-abc": "알파벳순으로 정렬",
        "activeusers-hidesysops": "관리자를 숨기기",
        "activeusers-noresult": "사용자가 없습니다.",
        "listgrouprights": "사용자 권한 목록",
-       "listgrouprights-summary": "다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.\n각각의 권한에 대해서는 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]를 참하세요.",
+       "listgrouprights-summary": "다음은 이 위키에 있는 사용자 권한 그룹의 목록입니다.\n각각의 권한에 대해서는 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]를 참하세요.",
        "listgrouprights-key": "범례:\n* <span class=\"listgrouprights-granted\">부여된 권한</span>\n* <span class=\"listgrouprights-revoked\">해제된 권한</span>",
        "listgrouprights-group": "그룹",
        "listgrouprights-rights": "권한",
        "logentry-contentmodel-change-revertlink": "되돌리기",
        "logentry-contentmodel-change-revert": "되돌리기",
        "protectlogpage": "문서 보호 기록",
-       "protectlogtext": "아래의 목록은 문서 보호에 관한 바뀜에 대한 기록입니다.\n현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참하세요.",
+       "protectlogtext": "아래의 목록은 문서 보호에 관한 바뀜에 대한 기록입니다.\n현재 보호된 문서의 목록에 대해서는 [[Special:ProtectedPages|보호된 문서 목록]]을 참하세요.",
        "protectedarticle": "사용자가 \"[[$1]]\" 문서를 보호했습니다",
        "modifiedarticleprotection": "사용자가 \"[[$1]]\" 문서의 보호 설정을 바꿨습니다",
        "unprotectedarticle": "사용자가 \"[[$1]]\" 문서를 보호 해제했습니다",
        "movepagetext-noredirectfixer": "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 된 문서로 옮길 수 있습니다.\n원래의 문서는 새 문서로 넘겨주는 링크로만 남게 됩니다.\n[[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]를 확인해주세요.\n당신은 링크와 가리키는 대상이 서로 일치하도록 해야 하는 책임을 집니다.\n\n만약 이미 있는 문서의 이름을 새 이름으로 입력했을 때는 그 문서가 넘겨주기 문서이고 문서 역사가 없어야만 이동이 됩니다. 그렇지 않을 경우에는 이동되지 <strong>않습니다</strong>.\n이것은 실수로 옮긴 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.\n\n<strong>주의!</strong>\n자주 사용하는 문서를 이동하면 해결하기 어려운 문제를 일으킬 수도 있습니다.\n이동하기 전에 반드시 이 문서를 이동해도 문제가 없는지 확인해주세요.",
        "movepagetalktext": "딸린 토론 문서도 자동으로 이동합니다. 하지만 다음의 경우는 '''이동하지 않습니다''':\n* 이동할 이름으로 된 문서가 이미 있는 경우\n* 아래의 선택을 해제하는 경우\n\n이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
        "movearticle": "문서 옮기기:",
-       "moveuserpage-warning": "'''경고:''' 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 '''않는다'''는 점을 참고하세요.",
+       "moveuserpage-warning": "<strong>경고:</strong> 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 <strong>않는다</strong>는 점을 참고하세요.",
        "movecategorypage-warning": "<strong>경고:</strong> 분류 문서를 옮기려고 합니다. 해당 문서만 옮겨지고 옛 분류에 있는 문서는 새 분류 안에 다시 분류되지 <em>않음</em>을 참고하세요.",
        "movenologintext": "문서를 이동하려면 [[Special:UserLogin|로그인]]해야 합니다.",
        "movenotallowed": "문서를 옮길 권한이 없습니다.",
index 902d5d9..67a4470 100644 (file)
        "searchbutton": "em Tex",
        "go": "Lohß Jonn!",
        "searcharticle": "Sigg",
-       "history": "Versione",
-       "history_short": "Versione",
+       "history": "Väsjohne",
+       "history_short": "Väsjohne",
        "updatedmarker": "(jeändert)",
        "printableversion": "För ze Drocke",
        "permalink": "Ne Permalink noh heh",
        "newpage": "Neu Sigg",
        "talkpage": "Övver di Sigg heh schwahde",
        "talkpagelinktext": "Klaaf",
-       "specialpage": "Extrasigg",
+       "specialpage": "Äxtrasigg",
        "personaltools": "Metmaacher Werkzüch",
        "articlepage": "Aanluure wat op dä Sigg drop steiht",
        "talk": "Klaafe",
        "actionthrottled": "Dat ka'mer nit esu öff maache",
        "actionthrottledtext": "Dat darf mer nor en jeweße Zahl Mole hengerenander maache. Do bes jrad aan de Jrenz jekumme. Kannze jo en e paar Menutte widder probeere.",
        "protectedpagetext": "Di Sigg es jeschöz, un mer kann se nit änndere.",
-       "viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere:",
-       "viewyourtext": "Do kanns Ding Änderonge aan heh dä Sigg beloore un kopeere:",
+       "viewsourcetext": "Heh es dä Sigg ier Wikitex zom Belooere un Koppeere.",
+       "viewyourtext": "Mer kann de Quälle vun de eije Ännderonge aan heh dä Sigg beloore un kopeere.",
        "protectedinterface": "Op dä Sigg heh schteihd ene Täx uß dä Schnettschtäll vun de Wikki nom Minsch. Dröm es däh och jäje Ännderonge jeschöz, domet keine Meßß domet aanjestallt weed.",
        "editinginterface": "<strong>Opjepass:</strong>\nOp dä Sigg heh schteiht Täx uß de Beehnbovverfläsch vum Wikki.\nDenk dran, heh Änndere deit et\nUßsinn un de Wöht ändere, met dänne et Wikki op de Metmaacher un de\nBesöhker aankütt!",
        "translateinterface": "Övversäzonge för <stron>alle</strong> Wikis jonn blohß op [//translatewiki.net/ translatewiki.net], woh mer MedijaWiki övversaz weed.",
        "undo-norev": "Do kam_mer nix zeröck nämme. Di väsjohn jidd_et nit, udder se es verschtoche udder fottjeschmeße woode.",
        "undo-nochange": "Di Änderong schingk ald retuur jemaat woode ze sin.",
        "undo-summary": "De Änderong $1 fum [[Special:Contributions/$2|$2]] ([[User talk:$2|Klaaf]]) zeröck jenomme.",
-       "undo-summary-username-hidden": "Nemm di Väsjohn $1 vun enem verschtoche Metmaacher widder retuur.",
+       "undo-summary-username-hidden": "Nemm di Väsjohn $1 vun enem verschtoche Metmaacher widder retuhr.",
        "cantcreateaccounttitle": "Kann keine Zojang enrichte",
        "cantcreateaccount-text": "Dä [[User:$3|$3]] hät verbodde, dat mer sich vun dä IP-Adress '''$1''' uß als ene neue Metmaacher aanmelde könne soll.\n\nAls Jrund för et Sperre es enjedraare: ''$2''",
        "cantcreateaccount-range-text": "Ne neue Metmaacher aanmälde vun <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräße em Berett vun <strong>$1</strong>, woh de Dinge dren es, wood vum {{GENDER:$3|vum|vum|vumm Metmaacher|vun dä|vum}} [[User:$3|$3]] verbodde.\nDer Jrond: <em><$2</em>\n\nDing <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß es: <strong>$4</strong>",
        "histlast": "de Neuste",
        "historysize": "({{PLURAL:$1|1 Byte|$1 Bytes|0 Byte}})",
        "historyempty": "(leddich)",
-       "history-feed-title": "De Versione",
+       "history-feed-title": "De Väsjohne",
        "history-feed-description": "Ähler Versione vun dä Wikisigg",
        "history-feed-item-nocomment": "$1 aam $3 öm $4 Uhr",
        "history-feed-empty": "De aanjefrochte Sigg jidd et nit. Künnt sin, dat se enzwesche fottjeschmeße udder ömjenannt woode es. Kanns jo ens [[Special:Search|em Wiki söhke looße]], öm de zopaß, neuje Sigge ze fenge.",
        "logdelete-success": "'''Dä Enndraach em Logbohch wood verschtoche udder seeschbaa jemaat.'''",
        "logdelete-failure": "'''Däm Enndraach em Logbohch sing Seeschbaakeit kunnte mer nit ändere:''' $1",
        "revdel-restore": "Verschteische udder seeschba maache",
-       "pagehist": "Älldere Versione",
+       "pagehist": "Älldere Väsjohne",
        "deletedhist": "Fottjeschmeße Väsjohne",
        "revdelete-hide-current": "Ene Fähler es opjetodde beim Verschteische. De Version vum $1 öm $2 Uhr es de neuste Version, un kann dröm nit verschtoche wääde.",
        "revdelete-show-no-access": "Ene Fähler es opjetodde beim Aanloore. De Version vum $1 öm $2 Uhr es verschtoche, un De häß dröm keine Zohjang doh drop.",
        "mergehistory-same-destination": "De Quell-Sigg un de Ziel-Sigg dörve nit deselve Sigg sinn.",
        "mergehistory-reason": "Der Jrond:",
        "mergelog": "Logbohch fum Sigge zesamme Lähje",
-       "revertmerge": "Dat Zosammelääje widder retuur maache",
+       "revertmerge": "Dat Zosammelääje widder retuhr maache",
        "mergelogpagetext": "Dat heh es dat Logbohch fun de zesammejelaate Väsjohne fun Sigge",
        "history-title": "Älder Versione vun dä Sigg „$1“",
        "difference-title": "Ongerscheide zwesche Versione vun dä Sigg „$1“",
        "rows": "Reihe:",
        "columns": "Spalte:",
        "searchresultshead": "Beim Söhke",
-       "stub-threshold": "Lengks  zopaß för <a href=\"#\" class=\"stub\">klein Sigge</a> fomatehre av esu vill Bytes:",
+       "stub-threshold": "Lengks zopaß för <a href=\"#\" class=\"stub\">klein Sigge</a> fomatehre av esu vill <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\">Bytes</i>:",
        "stub-threshold-disabled": "Ußjeschalldt",
        "recentchangesdays": "de Aanzahl Dähsch en de Leß met de „Neuste Änderonge“ — als Standatt:",
        "recentchangesdays-max": "(Nit mih wie {{PLURAL:$1|eine Daach|$1 Dääsh|keine Daach}})",
        "group-autoconfirmed": "Bestätichte Metmaacher",
        "group-bot": "Bots",
        "group-sysop": "Wiki-Köbesse",
-       "group-bureaucrat": "Bürrokrade",
+       "group-bureaucrat": "Bürrokrahde",
        "group-suppress": "Kontrollettis",
        "group-all": "(jeede)",
        "group-user-member": "{{GENDER:$1|Metmaacher|Metmaacherėn}}",
        "grouppage-autoconfirmed": "{{ns:project}}:Bestätichte Metmaacher",
        "grouppage-bot": "{{ns:project}}:Bots",
        "grouppage-sysop": "{{ns:project}}:Wiki Köbes",
-       "grouppage-bureaucrat": "{{ns:project}}:Bürrokrad",
+       "grouppage-bureaucrat": "{{ns:project}}:Bürrokrahd",
        "grouppage-suppress": "{{ns:project}}:Kontrolletti",
        "right-read": "Sigge lesse",
        "right-edit": "Sigge ändere",
        "right-hideuser": "Ene Metmaacher sperre un em singe Name versteiche",
        "right-ipblock-exempt": "Es ußjenomme vun automatesche Sperre, vun Sperre fun IP-Adresse, un vun Sperre vun Bereiche vun IP-Adresse",
        "right-proxyunbannable": "Es ußjenomme fun automatische Sperre fun Proxy-Servere",
-       "right-unblockself": "Retuur nämme, wam_mer sellver jesperrt woode es",
+       "right-unblockself": "Retuhr nämme, wam_mer sellver jesperrt woode es",
        "right-protect": "Sigge schöze, jeschözde Sigge änndere, un der iere Schoz widder ophevve",
        "right-editprotected": "Sigge ändere, di met „{{int:protect-level-sysop}}“ jezöz sin",
        "right-editsemiprotected": "Sigge met däm Schoz „{{int:protect-level-autoconfirmed}}“ ändere",
        "right-viewmyprivateinfo": "ding eije päsöhnlesche Dahte belohre, wi de Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> udder Dinge ääschte Nahme",
        "right-editmyprivateinfo": "ding eije päsöhnlesche Dahte ändere, wi de Adräß för de <i lang=\"en\" xml:lang=\"en\">e-mail</i> udder der ääschte Nahme",
        "right-editmyoptions": "De eije Enschtällonge ändere",
-       "right-rollback": "All de letzte Änderunge fom letzte Metmaacher aan ene Sigg retur maache",
-       "right-markbotedits": "Retur jemahte Änderonge als Bot_Änderong makkehre",
+       "right-rollback": "All de letzte Ännderonge vum läzde Metmaacher aan ene Sigg retuhr maache",
+       "right-markbotedits": "Retuhr jenumme Ännderonge als Ännderonge vun Bots makkehre",
        "right-noratelimit": "Kein Beschränkonge dorsch Jränze (<i lang=\"en\">[http://www.mediawiki.org/wiki/Manual:%24wgRateLimits $wgRateLimits]</i>)",
        "right-import": "Sigge uß ander Wikis empochteere",
        "right-importupload": "Sigge övver et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Extensible Markup Language\">XML</i>-Dattei-Huhlahde empotteere",
        "action-suppressionlog": "heh dat jeheime Logbohch aanzelohre",
        "action-block": "hee dämm Metmaacher et Sigge Ändere ze verbeede",
        "action-protect": "hee dä Sigg iere Sigge-Schotz ze ändere",
-       "action-rollback": "all de letzte Änderunge fom letzte Metmaacher aan ene beshtemmpte Sigg flöck retur ze maache",
+       "action-rollback": "all de läzde Ännderonge vum läzde Metmaacher aan ene beschtemmpte Sigg flöck retuur ze maache",
        "action-import": "Sigge uss_enem andere Wiki ze empotteere",
        "action-importupload": "Sigge uss_ene huhjelaade Dattei ze empotteere",
        "action-patrol": "anderlüx Änderonge als „nohjelohrt“ ze makkehre",
        "rcshowhidemine-hide": "verschteihsche",
        "rclinks": "Zeisch de läzde {{int:pipe-separator}}$1{{int:pipe-separator}} Änderonge us de läzde {{int:pipe-separator}}$2{{int:pipe-separator}} Däch, un dun {{int:pipe-separator}} $3.",
        "diff": "Ongerscheid",
-       "hist": "Versione",
+       "hist": "Väsjohne",
        "hide": "Ußblände!",
        "show": "Zeije:",
        "minoreditletter": "M",
        "boteditletter": "B",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|eine|$1|kein}} Oppasser]",
-       "rc_categories": "Nor de Saachjroppe (met „|“ dozwesche):",
-       "rc_categories_any": "All, wat mer han",
+       "rc_categories": "Bejränz op de Saachjroppe (schrihv „|“ dozwesche):",
+       "rc_categories_any": "Öhndseijne vun dä aanjejovve Saachjroppe",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes|Bytes}} noh dem Ändere",
        "newsectionsummary": "Neu Avschnet /* $1 */",
        "listgrouprights-group": "Jropp",
        "listgrouprights-rights": "Räächte",
        "listgrouprights-helppage": "Help:Jrupperäächte",
-       "listgrouprights-members": "(opliste)",
+       "listgrouprights-members": "(oplte)",
        "listgrouprights-addgroup": "Metmaacher en {{PLURAL:$2|de Metmaacher-Jropp|de Metmaacher-Jroppe|kein Metmaacher-Jropp}} $1 erin donn",
        "listgrouprights-removegroup": "Metmaacher us {{PLURAL:$2|dä Metmaacher_Jropp|de Metmaacher_Jroppe|jaa kei Metmaacher_Jropp}} $1 eruß nämme",
        "listgrouprights-addgroup-all": "Metmaacher en alle Metmaacher-Jroppe erin donn",
        "trackingcategories-name": "Dä Nohreesch udder däm Täxschtöck singe Nahme",
        "trackingcategories-desc": "Bedengonge för enjeschloße ze sin",
        "noindex-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne nit opjenumme wähde, weil dat Zauberwoot <code><nowiki>__NOINDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es.",
-       "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwies nit vun de Robots dorschsöhk weed.",
+       "index-category-desc": "Di Sigg sull vun de Wäbkrauler Robots un de Söhkmaschihne opjenumme wähde, weil dat Zauberwoot <code><nowiki>__INDEX__</nowiki></code> dren schteiht un se en enem Appachemang es, woh dat zohjelohße es, un wat nommahlerwihs nit vun de Robots dorschsöhk weed.",
        "post-expand-template-inclusion-category-desc": "Nohdämm a paa Schablohne enjesaz woode sen, hät di Sigg mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß. Et sin nit alle Oprohve vun Schablohne opjelöhß.",
        "post-expand-template-argument-category-desc": "Di Sigg hät mieh Dahte wi <code xml:lang=\"en\" lang=\"en\">$wgMaxArticleSize</code> zohlöhß, nohdämm dä Wäät för ene Parramehter — jät met drei jeschweifte Klammere drömeröm, wi <code>{{{Dengenskersche}}}</code> — enjesaz woode es.",
        "expensive-parserfunction-category-desc": "Di Sigg hät zoh vill düüre Befähle met Pahserfonxjuhne, för e Beijschpell esu jät, wi <code xml:lang=\"en\" lang=\"en\">#ifexist</code>. Mih doh drövver schteihd em [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Handbohch].",
        "group-user.css": "/* Dat CSS heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
        "group-bot.css": "/* Dat CSS heh aan dä Stell krijje nur de Bot-Projrammee jescheck */",
        "group-sysop.css": "/* Dat CSS heh aan dä Stell krijje nur dem Wiki sing Köbeße jescheck */",
-       "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokraate jescheck */",
+       "group-bureaucrat.css": "/* Dat CSS heh aan dä Stell krijje nur de Bürrokrahde jescheck */",
        "common.js": "/* Jedes JavaScrip hee kütt för jede Metmaacher in jede Sigg erinn */",
        "group-autoconfirmed.js": "/* De JavaSkreppte fun hee krijje bloß de autemattesch beshtääteschte Metmaacher jescheck */",
        "group-user.js": "/* De JavaSkreppte heh aan dä Schtäll wirrek sesch nur op de enjeloggte Metmaacher uß */",
        "group-bot.js": "/* De JavaSkreppte fun hee krijje bloß de Bots jescheck */",
        "group-sysop.js": "/* De JavaSkreppte fun hee krijje bloß de Wiki_Köbeße jescheck */",
-       "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokraate jescheck */",
+       "group-bureaucrat.js": "/* De JavaSkreppte fun hee krijje bloß de Bürrokrahde jescheck */",
        "anonymous": "Namelose {{PLURAL:$1|Metmaacher|Metmaacher|Metmaacher}} vun {{GRAMMAR:Dat|{{SITENAME}}}}",
        "siteuser": "{{SITENAME}}-Metmaacher $1",
        "anonuser": "dä nameloose Metmaacher $1 {{GRAMMAR:Genitive vum|{{SITENAME}}}}",
        "confirmemail_needlogin": "Do muss Dich $1, för de E-Mail Adress ze bestätije.",
        "confirmemail_success": "Ding E-Mail Adress es jetz bestätich.\nJetz künns De och noch enlogge. Vill Spass!",
        "confirmemail_loggedin": "Ding Addräß fö de <i lang=\"en\">e-mail</i> es jäz beschtäätesch!",
-       "confirmemail_subject": "Dun Ding e-mail Adress för {{GRAMMAR:Akkusativ|{{SITENAME}}}} bestäteje.",
+       "confirmemail_subject": "Don Ding e-mail-Adräß för {{GRAMMAR:Akkusativ|{{SITENAME}}}} beschtähteje.",
        "confirmemail_body": "Künnt jod sin, Do wors et selver, vun de IP_Adress $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" {{GRAMMAR:vun|{{SITENAME}}}}\nsin, un hät en E-Mail Adress aanjejovve.\n\nÖm jetz klor ze krije, dat di e-mail Adräß un dä neue Metmaacher och\nzosamme jehüre, muss dä Neue en singem Brauser dä Link:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding e-mail Adräß aanjejovve hät, do bruchs de\njar nix ze don. De e-mail Adräß kann nit jebruch wääde, ih dat se nit\nbestätich es. Do kanns ävver och op he dä Lengk jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adräß nit bestätije wells.",
        "confirmemail_body_changed": "Künnt jod sin, Do wors et selver. Vun de IP_Adräß $1 hät sich\njedenfalls einer jemeldt, un well dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nsin, un hät en neu Adress för sing e-mail aanjejovve.\n\nÖm jetz klor ze krije, dat di neu Adräß un dä Metmaacher och\nzosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nwidder aanzschallde, moss dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann de et selver bes.\n\nWann nit Do, sondern söns wä Ding E-Mail Adress aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit bestätich es.\nDo kanns ävver och op heh dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adress nit bestätije wells.",
-       "confirmemail_body_set": "Künnt jod sin, Do wors et selver. Vun dä IP_Adress $1 hät op\njede Fall einer för dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nheh di Adräß för däm sing e-mail aanjejovve.\n\nÖm jäz kloh ze krije, dat di neu Adräß un dä Metmaacher och\nzosamme jehüre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\naanzschallde, moß dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann dat sing\nReeschteschkeit hät.\n\nWann nit Do, sondern söns wä Ding Addräß för de e-Mail aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit bestätesch es.\nDo kanns ävver och op heh dä Link jon:\n\n$5\n\nDomet deiß De tirek sare, dat De di Adräß nit bestäteje wells.",
+       "confirmemail_body_set": "Künnt johd sin, Do wors et sällver. Vun dä IP-Adräß $1 hät op\njede Fall einer för dä Metmaacher \"$2\" op {{GRAMMAR:Akk bet|{{SITENAME}}}}\nheh di Adräß för däm sing e-mail aanjejovve.\n\nÖm jäz kloh ze kreje, dat di neu Adräß un dä Metmaacher och\nzosamme jehühre, un öm de e-mail op {{GRAMMAR:Akk bet|{{SITENAME}}}}\naanzschallde, moß dä Metmaacher en singem Brauser dä Lengk:\n\n$3\n\nopmaache. Noch för em $6 öm $7 Uhr. Alsu dun dat, wann dat sing\nReeschteschkeijt hät.\n\nWann nit Doh, sönders söns wä Ding Addräß för de e-Mail aanjejovve hät, bruchs\nDe jar nix ze don. Di Adräß weed nit jebruch, wann se nit beschtähtesch es.\nDo kanns ävver och op heh dä Lengk jon:\n\n$5\n\nDomet deiß De tirek vermällde, dat De di Adräß nit beschtähteje wells.",
        "confirmemail_invalidated": "Et Beschtähtejje för di <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"„de eläktrohnesche Poß“\">e-mail</i>-Adräß es afjebroche wohde, un di Adräß es '''nit''' beschtähtesch.",
        "invalidateemail": "E-Mail-Adress nit bestätich",
        "scarytranscludedisabled": "[Et Enbinge per Interwiki es avjeschalt]",
        "specialpages-group-other": "Ander {{int:nstab-special}}e",
        "specialpages-group-login": "Enlogge udder Aanmälde",
        "specialpages-group-changes": "Läzde Änderonge un Logböhscher",
-       "specialpages-group-media": "Dateie — Huhlaade un Opliste",
+       "specialpages-group-media": "Dateije — Huhlahde un Opleßte",
        "specialpages-group-users": "Metmaacher un denne ier Rääschte",
        "specialpages-group-highuse": "Öff jebruch…",
        "specialpages-group-pages": "Siggeliste",
        "rightsnone": "(nix)",
        "revdelete-summary": "dä Täx en „{{int:summary}}“",
        "feedback-adding": "Ben di Röckmäldong op di Sigg aam donn&nbsp;…",
-       "feedback-back": "Retuur",
+       "feedback-back": "Retuhr",
        "feedback-bugcheck": "Joot. Donn op jeede Vall nohlooer, dat dat bes jäz noch nit [$1 bikannt wohr].",
        "feedback-bugnew": "Hann esch nohjelooert. Esch jävven ene neue Fähler enn.",
        "feedback-bugornote": "Wann de em Bejreff bes, övver e täschnesch Problehm ze schrieve, bes esu jood un donn dat als en [$1 Fählermäldong].\nSöns, nemm dat koote Fommulaa heh dronger.\nWat De doh ennjiß, kütt met Dingem Metmaachername un Dingem Brauser op di Sigg „[$3 $2]“ drop.",
        "special-characters-title-endash": "Ene Halfjeviertschtresch",
        "special-characters-title-emdash": "Ene Jeviertschtresch",
        "special-characters-title-minus": "Et Winnijer-Zeische",
+       "mw-widgets-dateinput-no-date": "Kein Dattom es ußjewählt",
        "mw-widgets-titleinput-description-new-page": "di Sigg jidd_et noch nit",
        "mw-widgets-titleinput-description-redirect": "ömleijde op „$1“"
 }
index d63b44b..ddf03c9 100644 (file)
        "tooltip-pt-mycontris": "Lîsteya beşdariyên min",
        "tooltip-pt-logout": "Derkeve",
        "tooltip-ca-talk": "Gotûbêj li ser rûpela naverokê",
-       "tooltip-ca-edit": "Vê rûpelê biguherîne! Berê qeydkirinê bişkoka \"Pêşdîtin\"",
+       "tooltip-ca-edit": "Vê rûpelê biguherîne",
        "tooltip-ca-addsection": "Beşekê zêde bike.",
        "tooltip-ca-viewsource": "Ev rûpel tê parastin.\nTu dikarî tenê li çavkaniyê binêrî.",
        "tooltip-ca-history": "Guhertoyên berê yên vê rûpelê",
        "tooltip-n-mainpage": "Here Destpêkê",
        "tooltip-n-mainpage-description": "Here Destpêkê",
        "tooltip-n-portal": "Agahdarî li ser {{SITENAME}}, tu dikarî çi bikî, tu dikarî çi li ku bîbînî",
+       "tooltip-n-currentevents": "Der barê bûyerên dawî de agahîyên nûjen bibîne",
        "tooltip-n-recentchanges": "Lîsteya guherandinên dawî di vê wîkiyê da",
        "tooltip-n-randompage": "Rûpeleka ketober bar bike",
        "tooltip-n-help": "Bersivên ji bo pirsên te.",
index b309886..c815397 100644 (file)
        "search-category": "(Kategorie $1)",
        "search-file-match": "(Inhalt vum Fichier passt)",
        "search-suggest": "Mengt Dir: $1",
+       "search-rewritten": "D'Resultater fir $1 gi gewisen. Amplaz no $2 sichen.",
        "search-interwiki-caption": "Schwësterprojeten",
        "search-interwiki-default": "Resultater vu(n) $1:",
        "search-interwiki-more": "(méi)",
        "newpageletter": "N",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 Benotzer {{PLURAL:$1|iwwerwaacht|iwwerwaachen}}]",
-       "rc_categories": "Nëmme Säiten aus de Kategorien (getrennt mat \"|\"):",
-       "rc_categories_any": "All",
+       "rc_categories": "Limitéieren op d'Kategorie (getrennt mat \"|\"):",
+       "rc_categories_any": "Aus iergendenger vun den erausgesichten",
        "rc-change-size": "$1 {{PLURAL:$1|Byte|Bytes}}",
        "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} no der Ännerung",
        "newsectionsummary": "Neien Abschnitt /* $1 */",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-minus": "Minus-Zeechen",
+       "mw-widgets-dateinput-no-date": "Keen Datum erausgesicht",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "Säit gëtt et nach net",
        "mw-widgets-titleinput-description-redirect": "viruleeden op $1"
 }
index 6fd2b5e..896496b 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Cambodzjaans"
+       "special-characters-group-khmer": "Cambodzjaans",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM"
 }
index 5ce7682..6ddab68 100644 (file)
        "actionthrottled": "Veiksmas apribotas",
        "actionthrottledtext": "Kad būtų apsisaugota nuo reklamų, jums neleidžiama daug kartų atlikti šį veiksmą per trumpą laiko tarpą, bet jūs pasiekėte šį limitą. Prašome vėl pamėginti po kelių minučių.",
        "protectedpagetext": "Šis puslapis yra užrakintas, saugant jį nuo redagavimo.",
-       "viewsourcetext": "Jūs galite žiūrėti ir kopijuoti puslapio kodą:",
-       "viewyourtext": "Jūs galite matyti ir kopijuoti '''savo redagavimų''' tekstą į šį puslapį:",
+       "viewsourcetext": "Jūs galite peržiūrėti ir kopijuoti puslapio kodą:",
+       "viewyourtext": "Jūs galite peržiūrėti ir kopijuoti <strong>savo pakeitimų</strong> kodą į šį puslapį:",
        "protectedinterface": "Šiame puslapyje yra apsaugotas nuo piktnaudžiavimo programinės įrangos sąsajos tekstas. Norėdami pridėti ar pakeisti vertimus visose wiki, naudokite [//translatewiki.net/ translatewiki.net] MediaWiki vertimų projektą.",
        "editinginterface": "'''Dėmesio:''' Jūs redaguojate puslapį, kuris yra naudojamas programinės įrangos sąsajos tekste. Pakeitimai šiame puslapyje taip pat pakeis naudotojo sąsajos išvaizdą ir kitiems naudotojams šiame wiki.",
        "translateinterface": "Kad pridėtumėte vertimus visoms wiki, naudokitės  [//translatewiki.net/ translatewiki.net] – projektu, skirtu MediaWiki vertimams į vietines kalbas.",
        "newpageletter": "N",
        "boteditletter": "R",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|stebintis naudotojas|stebintys naudotojai|stebinčių naudotojų}}]",
-       "rc_categories": "Rodyti tik šias kategorijas (atskirkite naudodami „|“)",
-       "rc_categories_any": "Bet kokia",
+       "rc_categories": "Riboti kategorijoms (atskirkite su „|“)",
+       "rc_categories_any": "Bet kuris iš pasirinktųjų",
        "rc-change-size-new": "$1 {{PLURAL:$1|baitas|baitai|baitų}} po pakeitimo",
        "newsectionsummary": "/* $1 */ naujas skyrius",
        "rc-enhanced-expand": "Rodyti detales",
        "special-characters-title-endash": "en brūkšnys",
        "special-characters-title-emdash": "em brūkšnys",
        "special-characters-title-minus": "minuso ženklas",
+       "mw-widgets-dateinput-no-date": "Nepasirinkta data",
        "mw-widgets-titleinput-description-new-page": "puslapis dar neegzistuoja",
        "mw-widgets-titleinput-description-redirect": "nukreipti į $1"
 }
index 88cae64..1513f00 100644 (file)
        "resetpass-wrong-oldpass": "Thurûk dik lo emaw thi tawh.\nI thurûk i thlâk hlawhtling tawh a nih loh pawhin thurûk lailâwk i dil a ni thei.",
        "resetpass-temp-password": "Thurûk lailâwk:",
        "passwordreset": "Thurûk ziakţha rawh",
-       "passwordreset-legend": "Thurûk ziakţha rawh",
        "passwordreset-username": "Hmangtu hming:",
        "passwordreset-domain": "Huamchin:",
        "passwordreset-email": "E-chenhmun:",
        "nlinks": "$1 {{PLURAL:$1||}} Zawmna $1",
        "nmembers": "A chhungah  {{PLURAL:$1||$1}} a awm.",
        "nrevisions": "siamṭhatna $1 {{PLURAL:$1||}}",
-       "nviews": "vawi $1 {{PLURAL:$1||}} ràwn a ni tawh.",
        "nimagelinks": "Phêk $1-ah {{PLURAL:$1||}} hman a ni.",
        "ntransclusions": "phêk $1-ah {{PLURAL:$1||}} hman a ni.",
        "specialpage-empty": "Thuhawn a awm lo tlat.",
        "delete-toobig": "Hë phêk hian siam danglam a tâwk ngun mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.\nHetiang phêk nuaibo hi hrêk deuh hlek a ni, tum loh puia {{SITENAME}} tihchingpen däl tùrin.",
        "delete-warning-toobig": "Hë phêk hian tihdanglam a lo tâwk nasa tawh mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.\nHemi nuaibo hian {{SITENAME}} hriatna-khawlpui hnathawh a tisukuk palh thei; \nfimkhur zui hräm ang che.",
        "rollback": "Siamṭhatna sûtna",
-       "rollback_short": "Sûtlêtna",
        "rollbacklink": "sûtlêtna",
        "rollbackfailed": "Sûtlêt a tlawlh",
        "cantrollback": "Siamṭhatna a sûtlêt theih loh;\na siamṭhatu hnuhnüng ber hi hë phêk tawktu awm chhun a la ni tlat.",
        "logentry-newusers-create": "$1 hian hmangtu siangchan a siam.",
        "logentry-newusers-create2": "$1 hian hmangtu siangchan $3 a siam.",
        "logentry-newusers-autocreate": "Siangchan $1 hi amahin a insiam.",
-       "feedback-subject": "Thupui:",
-       "feedback-message": "Thu",
        "feedback-cancel": "Sûtna",
+       "feedback-message": "Thu",
+       "feedback-subject": "Thupui:",
        "searchsuggest-search": "Zawnna",
-       "searchsuggest-containing": "hemi thu telna hi..."
+       "searchsuggest-containing": "hemi thu telna hi...",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-latinextended": "Latin säwizàu",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Chhinchhiahnate",
+       "special-characters-group-greek": "Grik",
+       "special-characters-group-cyrillic": "Sirilik (russia hawrawp ang chi)",
+       "special-characters-group-arabic": "arabik",
+       "special-characters-group-arabicextended": "Arabik sâwizàu",
+       "special-characters-group-persian": "Persia",
+       "special-characters-group-hebrew": "Hebrai",
+       "special-characters-group-bangla": "benggawli",
+       "special-characters-group-tamil": "Tamil ṭawng",
+       "special-characters-group-telugu": "Telegu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Hindihawrawp",
+       "special-characters-group-thai": "Thaiţawng",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "KKKK-TT-NN",
+       "mw-widgets-dateinput-placeholder-month": "KKKK-TT"
 }
index 5dfc242..7fc613a 100644 (file)
        "userlogin-joinproject": "ملحق شۉ ۉھ {{SITENAME}}",
        "nologin": "اکانت ناریت؟ $1.",
        "nologinlink": "راست کردن یه حساو کاروری",
-       "createaccount": "راس کیردأن حیسآۉ",
+       "createaccount": "راس کیردأن حیسآڤ",
        "gotaccount": "اکانت داریت؟ $1.",
        "gotaccountlink": "اویدن وه سیستم",
        "userlogin-resetlink": "مشخصه یل ورود خوتونه نونیت؟",
        "nmembers": "$1 {{PLURAL:$1|عضۉ|اعضۉل}}",
        "newpages": "بألگە یل نوٙ",
        "pager-older-n": "{{PLURAL:$1|قدیمی تر 1|قدیمی تر $1}}",
-       "booksources": "سأرچیشمیل کیتآۉ",
+       "booksources": "سأرچیشمیل کیتآڤ",
        "booksources-search-legend": "جستن سی سرچشمل کتآۉ",
        "booksources-search": "جستن",
        "log": "نیمایل",
        "whatlinkshere": "لینکل ئی بألگە",
        "whatlinkshere-title": "بألگل کە لینک دائنە ڤە \"$1\"",
        "whatlinkshere-page": "بألگە:",
-       "linkshere": "لینک بألگل دوٙمین الذیکر ڤە '''[[:$1]]''':",
+       "linkshere": "لینک ھ بألگل دوٙمین الذیکر ڤە '''[[:$1]]''':",
        "isredirect": "بألگە تأغییر مأسیر",
        "istemplate": "ئیستیفادھ ڤابیدھ داخل بألگە",
-       "isimage": "لینک فایل",
-       "whatlinkshere-prev": "{{PLURAL:$1|قأبلی |مۉرد قأبلی$1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|بأعدی |مۉرد بأعدی $1}}",
+       "isimage": "لینک ھ فایل",
+       "whatlinkshere-prev": "{{PLURAL:$1|قأبلی |مۉرید قأبلی$1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|بأعدی |مۉرید بأعدی $1}}",
        "whatlinkshere-links": "← لینکل",
        "whatlinkshere-hideredirs": "$1 تأغییرل مأسیر",
        "whatlinkshere-hidetrans": "$1 تأراگۉنجاییش",
index c9a50df..e4f3d6e 100644 (file)
        "no-null-revision": "Tsy nahaforona famerenana poaka aty ho an'ny pejy \"$1\"",
        "badtitle": "Tsy mety ny lohateny",
        "badtitletext": "Tsy mety io anaram-pejy nangatahinao io na tsy misy n'inon'inona na rohy dikan-teny vahiny misy diso tsipelina.",
+       "title-invalid-empty": "Ny lohatenin'ny pejy angatahana dia na tsy misy, na ahitana ny anaram-balan'anarana fotsiny.",
+       "title-invalid-utf8": "Ahitana fitohizana UTF-8 tsy azo ekena ny lohatenim-pejy angatahana.",
+       "title-invalid-interwiki": "Ahitana rohy interwiki tsy azo ampiasaina amin'ny lohateny ny pejy angatahana.",
+       "title-invalid-talk-namespace": "Mampatsiahy pejin-dresaka tsy misy ilay pejy angatahana.",
+       "title-invalid-characters": "Ahitana soratra tsy azo ekena ny lohatenim-pejy angatahana: \"$1\".",
        "perfcached": "Ao amin'ny voatakona ireo data manaraka ireo ary mety tsy voavao. $1{{PLURAL:}} ihany no isan'ireo zavatra voatahiry ao amin'ny voatakona",
        "perfcachedts": "Ao amin'ny voatakona (cache) ny data aseho, ary tamin'ny $1 izy no navaozina farany. $4{{PLURAL:}} no isan'ny valim-pikarohana ao amin'ilay voatakona.",
        "querypage-no-updates": "Amin'izao fotoana izao dia tsy havaozina ny votoatin'ity pejy ity. Noho izany dia tsy mitaratra ny tena zava-misy ny votoatiny ato.",
        "actionthrottled": "Tao voafetra",
        "actionthrottledtext": "Mba hiady amin'ny spam, ny hatetika momba ny fanaovana io otao io dia ferana ho foifoy, ary niaotra io fetra io ianao.\nAndramo indray afaka minitra vitsivitsy.",
        "protectedpagetext": "Narovana mba tsy hisiana fanovana na tao hafa ity pejy ity.",
-       "viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity :",
-       "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny '''fanovanao''' tamin'ity pejy ity:",
+       "viewsourcetext": "Azonao atao no mijery sy mandrika ny votoatin'ity pejy ity.",
+       "viewyourtext": "Azonao atao ny mijery ary mandika ny fangon'ny <strong>fanovanao</strong> tamin'ity pejy ity.",
        "protectedinterface": "Ity pejy ity dia manome ny lahatsoratra ho an'ny rindrankajy eto amin'ity Wiki ity, ary narovana mba tsy hisian'ny fanararaotana. Raha tia hanampy na hanova ny dikanteny ho an'ny wiki rehetra, ampiasao [//translatewiki.net/ translatewiki.net], izay tetikasa fandikanan ny rindrankajy Mediawiki.",
        "editinginterface": "<strong> Fampitandremana: <strong> manova pejy ampiasaina amin'ny famoronan-tsoratry ny rindrankajy ianao. Hisy fiatraika amin'ny fisehon'ny interfasim-pikambana ho an'ny mpikambana hafan'ity wiki ity ny fiovana ho atao.",
        "translateinterface": "Mba hanampy na hanova dikanteny ho an'ny wiki rehetra, dia ampiasao  [//translatewiki.net/ translatewiki.net], na ny tetikasa fandikana Mediawiki.",
-       "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1||$1}}1 mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"en cascade\" :\n\n$2",
+       "cascadeprotected": "Ankehitriny dia voaaro ity pejy ity satria misy pejy voaaro {{PLURAL:$1|iray|$1}} mampiasa ity pejy ity. Io pejy io dia mampiasa ny fiarovana \"mirihana\":\n\n$2",
        "namespaceprotected": "Tsy manana alalàna manova ny toeran'anarana « '''$1''' » ianao.",
        "customcssprotected": "Tsy afaka manova ity pejy CSS ity ianao satria misy ny safidy manokan'ny mpikambana hafa.",
        "customjsprotected": "Tsy afaka manova ity pejy JavaScript ity inaao satria misy ny safidin'ny mpikambana hafa.",
        "wrongpassword": "Diso ny tenimiafina. Manandrama tenimiafina hafa azafady.",
        "wrongpasswordempty": "Tsy nampiditra tenimiafina ianao, azafady mba avereno indray.",
        "passwordtooshort": "{{PLURAL:}}Fohy loatra io tenimiafina io.\nFarafahakeliny tokony hisy litera $1 ny tenimiafina.",
+       "passwordtoolong": "Tsy azo atao ho lava noho ny soratra {{PLURAL:$1|iray|$1}} ny tenimiafina.",
        "password-name-match": "Tsy maintsy samihafa ny solonanaranao sy ny tenimiafinao tompoko.",
        "password-login-forbidden": "Norarana ny fampiasana io anaram-pikambana ary io tenimiafina io.",
        "mailmypassword": "Hamerina ny tenimiafina",
        "readonlywarning": "'''FAMPITANDREMANA: Nohidiana noho ny antony fikolokoloana aloha ny banky angona,\nkoa tsy afaka mitahiry ny fanovana nataonao aloha ianao izao. Angamba tokony hanao Couper coller aloha\nianao dia tehirizo anaty rakitra ny fanovanao mandra-paha.'''\n\nNy mpandrindra nanidy ny banky angona dia nanome ny antony : <br />$1",
        "protectedpagewarning": "'''FAMPITANDREMANA:  Voaaro ity pejy ity ka ny mpikambana manana ny fahazoan-dàlana sysop ihany no afaka manova azy.'''",
        "semiprotectedpagewarning": "'''Naoty''' : Voaaro ity pejy ity, ny mpikambana nanokatra kaonty tato ihany no afaka manova azy.",
-       "cascadeprotectedwarning": "'''Tandremo : ''' Voaaro ity pejy ity ary ny mpandrindra ihany no afaka manova azy. Natao ny fiarovana satria ao anatina pejy voaaro mampiasa ny « fiarovana an-driana (protection en cascade) » {{PLURAL:$1}}",
+       "cascadeprotectedwarning": "<strong>Tandremo :</strong> Voaaro ity pejy ity ary ny mpandrindra ihany no afaka manova azy. Natao ny fiarovana satria ao anatina pejy voaaro mampiasa ny « fiarovana an-driana (protection en cascade) » {{PLURAL:$1}}",
        "titleprotectedwarning": "'''TANDREMO''' : Ny mpikambana manana [[Special:ListGroupRights|alàlana manokana]] ihany no afaka manova ity pejy ity.",
        "templatesused": "endrika{{PLURAL:$1||}} miasa eto amin'ity pejy ity:",
        "templatesusedpreview": "endrika{{PLURAL:$1||}} ampiasaina anatin'ity topi-maso ity :",
        "history-feed-description": "Tantaran'ity pejy ity teto amin'ity wiki ity.",
        "history-feed-item-nocomment": "$1 tamin'ny $2",
        "history-feed-empty": "Tsy misy ny pejy notadiavina.\nMety efa voafafa na voafindra angamba izy.\nMitadiava amin'ny '''[[Special:Search|fiasàna fitadiavina]]''' mba hitady ny pejy misy fifandraisana.",
+       "history-edit-tags": "Hanova ny balizin'ny versiôna nofidiana",
        "rev-deleted-comment": "(ambangovangom-panovana nesorina)",
        "rev-deleted-user": "(solonanarana nesorina)",
        "rev-deleted-event": "(nesorina ny antsipirihan'ny laogy)",
        "rev-showdeleted": "aseho",
        "revisiondelete": "Hamafa na hamerina versiona",
        "revdelete-nooldid-title": "versiona tanjona tsy azo ekena.",
-       "revdelete-nooldid-text": "Tsy voalazanao ny versiona tanjona hanaovana ity tao ity, \ntsy misy ilay izy, na ny santiôna ankehitriny no andramana asitrika.",
+       "revdelete-nooldid-text": "Tsy nambara versiona tanjona hanaovana ity asa ity ianao, na tsy misy ilay versiona voafidy, na am-panitrihana ilay versiona ankehitriny ianao.",
        "revdelete-no-file": "Tsy misy ilay rakitra hofafàna.",
        "revdelete-show-file-confirm": "Tapa-kevitra hamafa ny ''revision''-n'i rakitra <nowiki>$1</nowiki> tamin'ny $2 tamin'ny $3 ve ianao ?",
        "revdelete-show-file-submit": "Eny",
        "showhideselectedversions": "Aseho/asitrika ireo ny versiona voasafidy",
        "editundo": "esory",
        "diff-empty": "(Tsy misy mahasamihafa)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Versiona mielanelana tsy miseho iray|Versiona mielanelana tsy miseho $1}} nataon'ilay mpikambana)",
        "diff-multi-manyusers": "Tsy naseho ny antiôna $1{{PLURAL:}} nataon'ny mpikambana $2.",
        "difference-missing-revision": "Tsy hita ny versiona $2{{PLURAL:$2||}} ny fahasamihafanna ($1) an'ity pejy ity.\n\nVokatry ny fanarahana rohy fampitahana lany daty mankany amy pejy efa voafafa izan . Ho hita eo amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafàna] ny antsipirihany.",
        "searchresults": "Valim-pikarohana",
        "searchrelated": "voadinika",
        "searchall": "rehetra",
        "showingresults": "Omeo ny valiny{{PLURAL:$1||}} miisa hatramin'ny <b>$1</b> manomboka ny #<b>$2</b>.",
+       "search-showingresults": "{{PLURAL:$4|Valim-pikarohana <strong>$1</strong> amin'ny <strong>$3</strong>| Valim-pikarohana <strong>$1 - $2</strong> amin'ny <strong>$3</strong>}}",
        "search-nonefound": "Tsy nahitana valiny ilay fanontaniana.",
        "powersearch-legend": "Fikarohana havanana",
        "powersearch-ns": "Hitady anatin'ny anaran-tsehatra :",
        "randomincategory-invalidcategory": "Tsy anaran-tsokajy azo raisina \"$1\"",
        "randomincategory-nopages": "Tsy misy pejy ao amin'i [[:Category:$1]]",
        "randomincategory-category": "Sokajy:",
+       "randomincategory-submit": "Lasa",
        "randomredirect": "Pejy fihodinana kisendra",
        "randomredirect-nopages": "Tsy misy pejy fihodinana eo amin'ny anaran-tsehatra «$1»",
        "statistics": "Statistika",
        "undelete-show-file-submit": "Eny",
        "namespace": "Anaran-tsehatra :",
        "invert": "Ampifamadiho ny safidy",
+       "tooltip-invert": "Marino ity boaty ity mba hanakona ireo fiovam-pejy ao amin'ny valan'anarana voafidinao (ary ny valan'anarana miaraka aminy raha voamarina ihany koa)",
        "namespace_association": "Anaran-tsehatra nampiarahana",
        "tooltip-namespace_association": "Mariho ity boaty ity mba hampiditra ny pejin-dresaky ny anaran-tsehatra voafidy",
        "blanknamespace": "(fotony)",
        "imagelisttext": "{{PLURAL:}}Eto ambany ny lisitran'ny rakitra $1 milahatra araka ny $2.",
        "newimages-legend": "Anaran-drakitra",
        "newimages-label": "Anaran-drakitra (na singan'izy io) :",
+       "newimages-showbots": "Haneho ireo fanondranana nataon'ny rôbô",
        "noimages": "Tsy misy sary ato.",
        "ilsubmit": "Karohy",
        "bydate": "araka ny daty",
        "exif-stripoffsets": "Toerana isian'ny datan'ny sary",
        "exif-rowsperstrip": "Isan'ny andininy isaky ny bandy",
        "exif-stripbytecounts": "Haben'ny bandy amin'ny oktety",
+       "exif-jpeginterchangeformat": "Fipetraky ny SOI JPEG",
+       "exif-jpeginterchangeformatlength": "Oktetin'angona JPEG",
        "exif-whitepoint": "Krômatisiten'ny teboka fotsy",
        "exif-primarychromaticities": "Krômatisiten'ny reniloko",
        "exif-ycbcrcoefficients": "Fatra YCbCr",
+       "exif-referenceblackwhite": "Sanda tsiahy fotsy sy mainty",
        "exif-datetime": "Daty fanovana",
        "exif-imagedescription": "Visavisan'ilay sary",
        "exif-make": "Mpanamboatra ilay fakan-tsary",
        "exif-exifversion": "Versiona EXIF",
        "exif-flashpixversion": "Versiona FlashPix",
        "exif-colorspace": "Valan-doko",
+       "exif-componentsconfiguration": "Dikan'ny mpanorina tsirairay",
+       "exif-compressedbitsperpixel": "Fomba famintinan-tsary",
        "exif-pixelydimension": "Haavon-tsary",
        "exif-pixelxdimension": "Halala-tsary",
        "exif-usercomment": "Diniky ny mpikambana",
        "exif-datetimeoriginal": "Daty fangalana niaviana",
        "exif-datetimedigitized": "Daty nanaovana numerisation",
        "exif-subsectime": "Daty nanovana",
+       "exif-subsectimeoriginal": "Daty nangalana voalohany",
+       "exif-subsectimedigitized": "Daty nahadijitaly",
        "exif-exposuretime": "Fitaona famakiana",
        "exif-exposuretime-format": "$1 s ($2 s)",
        "exif-fnumber": "Isa F",
        "exif-exposureprogram": "Fomba famakiana",
+       "exif-spectralsensitivity": "Fahatsapana ara-balandoko",
        "exif-isospeedratings": "ISO",
        "exif-shutterspeedvalue": "hafaingam-panapenana ny APEX",
        "exif-aperturevalue": "Fisanasana APEX",
        "exif-meteringmode": "Fomba fandrefesana",
        "exif-lightsource": "Loharanon-kazavana",
        "exif-flash": "Tselatra",
+       "exif-focallength": "Halavam-pifantohana",
        "exif-subjectarea": "Faritry ny alain-tsary",
        "exif-flashenergy": "Angôvon'akonkazavana",
+       "exif-focalplanexresolution": "Halava X an'ny fifantohana",
+       "exif-focalplaneyresolution": "Halava Y an'ny fifantohana",
+       "exif-focalplaneresolutionunit": "Mari-drefin'ny fifantohana",
        "exif-subjectlocation": "Toeram-pisian'ny alaina sary",
+       "exif-exposureindex": "Tondrom-piharihariana",
+       "exif-sensingmethod": "Fomba tsikariny",
        "exif-filesource": "Fangon-drakitra",
+       "exif-scenetype": "Karazan-tsehatra",
+       "exif-customrendered": "Fikarakaran-tsary natao manokana",
+       "exif-exposuremode": "Fomba fiharihariana",
+       "exif-whitebalance": "Lanjalanjam-potsy",
        "exif-digitalzoomratio": "Tahan'ny zoom arak'isa",
+       "exif-focallengthin35mmfilm": "Halavam-pifantohana anaty filma 35 mm",
+       "exif-scenecapturetype": "Karazam-pandraiketan-tsehatra",
+       "exif-gaincontrol": "Fifehezan-tsehatra",
+       "exif-contrast": "Fifanoheran-doko",
+       "exif-saturation": "Fahafenoan-doko",
+       "exif-sharpness": "Haranitana",
+       "exif-devicesettingdescription": "Famisavisana mikasika ny fikiram-pitaovana",
+       "exif-subjectdistancerange": "Halaviran'ny alain-tsary",
        "exif-imageuniqueid": "ID an'io sary io manokana",
+       "exif-gpsversionid": "Versiônan'ny balizy GPS",
        "exif-gpslatituderef": "Laharam-pehintany avaratra na atsimo",
        "exif-gpslatitude": "Laharam-pehintany",
        "exif-gpslongituderef": "Laharan-jarahasina andrefana na atsinanana",
        "exif-gpsaltitude": "Haambo",
        "exif-gpstimestamp": "Ora GPS (famantaranandro atômika)",
        "exif-gpssatellites": "Zanabolana mampiasaina ho an'ilay refy",
+       "exif-gpsstatus": "Toetry ny mpandray",
        "exif-gpsmeasuremode": "Fomba fandrefesana",
        "exif-gpsdop": "Hatsiko ny fandrefesana",
        "exif-gpsspeedref": "Mari-drefi-kafainganana",
        "exif-gpsspeed": "Hafaingam-pandray GPS",
+       "exif-gpstrackref": "Tsiahy ho an'ny fizotry ny hetsika",
+       "exif-gpstrack": "Fizotry ny hetsika",
+       "exif-gpsimgdirectionref": "Tsiahy ho an'ny fizotry ny hetsika",
        "exif-gpsimgdirection": "Fitodihan'ny sary",
+       "exif-gpsmapdatum": "Rafitra jeodezika nampaisaina",
+       "exif-gpsdestlatituderef": "Tsiahy ho an'ny laharam-pehintany tanjona",
        "exif-gpsdestlatitude": "Laharam-pehintany tanjona",
+       "exif-gpsdestlongituderef": "Tsiahy ho an'ny laharan-jarahasina tanjona",
        "exif-gpsdestlongitude": "Laharan-jarahasina tanjona",
+       "exif-gpsdestbearingref": "Tsiahy ho an'ny fitazomana-tanjona",
+       "exif-gpsdestbearing": "Fitazoman-tanjona",
+       "exif-gpsdestdistanceref": "Tsiahy ho an'ny halavirana amin'ny tanjona",
+       "exif-gpsdestdistance": "Halavirana amin'ny tanjona",
+       "exif-gpsprocessingmethod": "Anaran'ny fomba fanodinana GPS",
        "exif-gpsareainformation": "Anaram-paritra GPS",
        "exif-gpsdatestamp": "Daty GPS",
+       "exif-gpsdifferential": "Fanitsiana arak'elana GPS",
+       "exif-jpegfilecomment": "Resa-drakitra JPEG",
+       "exif-keywords": "Tenifototra",
        "exif-worldregioncreated": "Faritany nangalana ity ilay sary",
        "exif-countrycreated": "Firenena nangalana ilay sary",
        "exif-countrycodecreated": "Kaontim-pirenena nangalana ilay sary",
        "exif-lens": "Lojy nampiasaina",
        "exif-serialnumber": "Isa laharan'ny fakan-tsary",
        "exif-cameraownername": "Tompon'ilay mpaka sary",
+       "exif-label": "Marika",
        "exif-datetimemetadata": "Daty nanovana faran'ny metadata",
        "exif-nickname": "Solonanaran'ilay sary",
        "exif-rating": "Naoty (ampahan'ny 5)",
        "exif-giffilecomment": "Famoahan-kevitry ny rakirta GIF",
        "exif-intellectualgenre": "Karazan-javatra",
        "exif-subjectnewscode": "Kaodin'ny lohahevitra",
+       "exif-scenecode": "Kaodin-tsehatra IPTC",
        "exif-event": "Zava-mitranga azo sary",
        "exif-organisationinimage": "Fikambanana azo sary",
        "exif-personinimage": "Olona azo sary",
        "exif-originalimageheight": "Haambon-tsary talohan'ny nanovana azy",
+       "exif-compression-1": "Tsy nafintina",
+       "exif-compression-2": "CCITT vondrona 3 Halavan-kaody Huffman novaina iray saka",
+       "exif-compression-3": "CCITT Vondrona telo kaody fax",
+       "exif-compression-4": "CCITT Vondrona 4 kaody fax",
        "exif-copyrighted-true": "Iharan'ny zom-pamorona",
        "exif-copyrighted-false": "Toetran'ny zom-pamorona tsy voafaritra",
        "exif-unknowndate": "Daty tsy fantatra",
        "exif-orientation-1": "Tsotra",
+       "exif-orientation-2": "Navadika ara-marindrano",
        "exif-orientation-3": "Ahodina 180°",
        "exif-orientation-4": "Navadika ambony ambany",
        "exif-orientation-5": "Navadika 90° miankavia ary navadika ambony ambany",
        "exif-orientation-6": "Navadika 90° miankavia",
        "exif-orientation-7": "Navadika 90° miankavanana ary navadika ambony ambany",
        "exif-orientation-8": "Navadika 90° miankavanana",
+       "exif-planarconfiguration-1": "Angona miraibolongana",
        "exif-planarconfiguration-2": "Data misaraka",
        "exif-componentsconfiguration-0": "tsy nahitana",
        "exif-exposureprogram-0": "Tsy nolazaina",
        "logentry-rights-rights": "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5{{GENDER:$2}}",
        "logentry-rights-rights-legacy": "{{GENDER:$2}}$1 nanova ny vonodrom-pikambana isian'i $3",
        "logentry-rights-autopromote": "{{GENDER:$2}}Lasa $5 ho azy i $1 izay $4 taloha",
+       "logentry-upload-upload": "Nampiditra an'i $3 i $1{{GENDER:$2}}",
        "rightsnone": "(tsy misy)",
        "revdelete-summary": "ambangovangon'ny fanovàna",
        "feedback-adding": "Manampy ny fahenoan-kevitra amin'ilay pejy...",
index e966e3a..0038b14 100644 (file)
        "actionthrottled": "Дејството е успорено",
        "actionthrottledtext": "Како анти-спам мерка, ограничени сте од вршење на ова дејство премногу пати во краток временски период, а го преминавте ограничувањето.\nВе молиме обидете се повторно за неколку минути.",
        "protectedpagetext": "Оваа страница е заклучена за уредувања и други дејства.",
-       "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница:",
-       "viewyourtext": "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
+       "viewsourcetext": "Можете да го погледнете и копирате кодот на оваа страница.",
+       "viewyourtext": "Можете да го погледнете и копирате кодот на <strong>вашите уредувања</strong> на оваа страница.",
        "protectedinterface": "Оваа страница содржи текст од посредникот на програмот на ова вики и е превентивно заштитена поради можна злоупотреба.\nЗа да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
        "editinginterface": "<strong>Предупредување:</strong> Уредувате страница која е дел од корисничкиот посредник на програмот МедијаВики.\nПромените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.",
        "translateinterface": "За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] — проектот за преведување на МедијаВики.",
        "newpageletter": "Н",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|корисник што набљудува|корисници што набљудуваат}}]",
-       "rc_categories": "Само од категории (одделувајќи со „|“)",
-       "rc_categories_any": "Било кои",
+       "rc_categories": "Само од категории (одделувајќи со „|“):",
+       "rc_categories_any": "Било која од избраните",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|бајт|бајти}} по промената",
        "newsectionsummary": "/* $1 */ ново заглавие",
        "special-characters-title-endash": "цртичка",
        "special-characters-title-emdash": "тире",
        "special-characters-title-minus": "минус",
+       "mw-widgets-dateinput-no-date": "Немате одбрано датум",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страницата сè уште не постои",
        "mw-widgets-titleinput-description-redirect": "пренасочување кон $1"
 }
index 3647b77..d1a1150 100644 (file)
@@ -28,7 +28,8 @@
                        "Ævar Arnfjörð Bjarmason <avarab@gmail.com>",
                        "לערי ריינהארט",
                        "아라",
-                       "Viswaprabha"
+                       "Viswaprabha",
+                       "Nesi"
                ]
        },
        "tog-underline": "കണ്ണികൾക്ക് അടിവരയിടുക:",
        "unpatrolledletter": "(!)",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|ഒരു ഉപയോക്താവ്|$1 ഉപയോക്താക്കൾ}} ഈ താൾ ശ്രദ്ധിക്കുന്നുണ്ട്]",
        "rc_categories": "വർഗ്ഗങ്ങളുടെ പരിധി (\"|\" ഉപയോഗിച്ച് പിരിക്കുക)",
-       "rc_categories_any": "à´\8fà´¤ും",
+       "rc_categories_any": "തിരà´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´¤àµ\8dതതിൽ à´\8fà´¤àµ\86à´\99àµ\8dà´\95à´¿à´²ും",
        "rc-change-size-new": "മാറ്റത്തിനു ശേഷം {{PLURAL:$1|ഒരു ബൈറ്റ്|$1 ബൈറ്റുകൾ}}",
        "newsectionsummary": "/* $1 */ പുതിയ ഉപവിഭാഗം",
        "rc-enhanced-expand": "അധികവിവരങ്ങൾ പ്രദർശിപ്പിക്കുക",
index 3264963..361049c 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Tajlandiż",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "SSSS-XX-ĠĠ",
+       "mw-widgets-dateinput-placeholder-month": "SSSS-XX"
 }
index c35e221..99d2248 100644 (file)
@@ -38,7 +38,7 @@
        "tog-shownumberswatching": "Невтемс зяро теицятнеде, конат аравтызь лопанть эсест ванома лемрисьментень",
        "tog-oldsig": "Уликс кедьпутовксось:",
        "tog-fancysig": "Лемпутовксось прок викитекст (сонсь теевиця сюлмавома певтеме)",
-       "tog-uselivepreview": "Максомс эриця васнянь невтевкс (варчамонь сон)",
+       "tog-uselivepreview": "Максомс эриця васнянь невтевкс",
        "tog-forceeditsummary": "Невтик монень, мезе сёрмадомс витнемадо-петнемадо ёвтамонь вальминентень",
        "tog-watchlisthideown": "Кекшить монь теевть витневкстнэнь ванома лемрисьменть эйстэ",
        "tog-watchlisthidebots": "Кекшить бот витневкстнэнь-петневкстнэнь ванома лемрисьсенть эйстэ",
        "actions": "Тев теемат",
        "namespaces": "Лемпотмот",
        "variants": "Вариантт",
+       "navigation-heading": "Навигациянь меню",
        "errorpagetitle": "Ильведькс",
        "returnto": "Велявтомс $1 лопантень.",
        "tagline": "{{SITENAME}} -нь пельде",
        "permalink": "Свалшкас сюлмавомапе",
        "print": "Нолдамс",
        "view": "Ванома потмо",
+       "view-foreign": "Ваномс «$1» сайтасонть",
        "edit": "Витнеме-петнеме",
+       "edit-local": "Витнемс-петнемс тескень ёвтнеманзо",
        "create": "Тейть-шкак",
+       "create-local": "Поладомс тескень ёвтнеманзо",
        "editthispage": "Витнемс-петнемс те лопанть",
        "create-this-page": "Теик-шкик те лопанть",
        "delete": "Нардамс",
        "otherlanguages": "Лия кельсэ",
        "redirectedfrom": "(Ютавтозь $1 вельде)",
        "redirectpagesub": "Лиясто ютавтозь лопа",
+       "redirectto": "Кучомс седе тов:",
        "lastmodifiedat": "Те лопанть меельседе витнезь-петнезь $2, $1.",
        "viewcount": "Те лопантень совасть {{PLURAL:$1|весть|$1-ксть}}.",
        "protectedpage": "Те лопась ванстомасо",
        "view-pool-error": "Кежеть иляст са, сервертнень виест а сатыть ней.\nПекень пек ламо теицят стараить ваномс те лопанть.\nУчокая аламос, мейле одов варчасак тезэнь совамонть.\n$1",
        "pool-queuefull": "Процесспулось пешксе",
        "pool-errorunknown": "Апак содань ильведькс",
+       "poolcounter-usage-error": "Тевс нолдамонь ильведевкс: $1",
        "aboutsite": "{{SITENAME}} ланга",
        "aboutpage": "Project:Эстэдензэ",
        "copyright": "$1-сто муят мезе тесэ, бути лиякс апак ёвта.",
        "disclaimers": "Видечинь кортамотне",
        "disclaimerpage": "Project:Видечинь прякс кортнема",
        "edithelp": "Витнемань-петнемань лезкс",
+       "helppage-top-gethelp": "Лезкс",
        "mainpage": "Прявтлопа",
        "mainpage-description": "Прявтлопа",
        "policy-url": "Project:Политика",
        "privacypage": "Project:Салавачинь политикась",
        "badaccess": "Меревемань асатыкс",
        "badaccess-group0": "Тонеть а мерить теемс мезе вешить.",
-       "badaccess-groups": "Тевтеемась, конань вешить, тееви ансяк «$1» {{PLURAL:$2|1=куронь|куротнень}} теицятненень.",
+       "badaccess-groups": "Тевтеемась, конань вешить, тееви ансяк «$1» {{PLURAL:$2|куронть|куротнень}} теицятненень.",
        "versionrequired": "МедияВикинь $1 версиясь эряви",
        "versionrequiredtext": "МедияВикинь $1 версиясь эряви те лопанть тевс нолдамга.\nВант [[Special:Version|версиянь лопанть]].",
        "ok": "Маштови",
        "retrievedfrom": "Лисмапрясь \"$1\"-сто",
        "youhavenewmessages": "Тонеть сась $1 ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|од сёрма|999=од сёрмат}}",
+       "newmessagesdifflinkplural": "меельце {{PLURAL:$1|полавтнемась|999=полавтнематне}}",
        "youhavenewmessagesmulti": "Од сёрминеть учить эйсэть $1-со",
        "editsection": "витнеме-петнеме",
        "editold": "витнеме-петнеме",
        "hidetoc": "кекшемс",
        "collapsible-collapse": "Вишкалгавтомс",
        "collapsible-expand": "Келейгавтомс",
+       "confirmable-confirm": "{{GENDER:$1|Тон}} истя арсят?",
+       "confirmable-yes": "Алкукс истя",
+       "confirmable-no": "Арась",
        "thisisdeleted": "$1-нть ваномс эли велявтомс мекев?",
        "viewdeleted": "Ванномс $1?",
        "restorelink": "{{PLURAL:$1|нардазь вейке витнема-петнема|нардазь $1 витнемат-петнемат}}",
        "nstab-category": "Категория",
        "nosuchaction": "Истямо тев арась",
        "nosuchspecialpage": "Истямо башка лопа арась",
+       "nospecialpagetext": "<strong>Лопась, конань вешик, арась.</strong>\n\nВант те лемрисьменть [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Ильведькс",
        "databaseerror": "Датабазань ильведькс",
+       "databaseerror-query": "Вешемась: $1",
+       "databaseerror-function": "Функциясь: $1",
        "databaseerror-error": "Ильведькс: $1",
        "laggedslavemode": "Ванок: Кизды, лопасонть материалось таштомсь.",
        "readonly": "Датабазась панжома экшсэ",
        "filerenameerror": "Файлантень а маштови \"$1\" максомс од лем \"$2\".",
        "filedeleteerror": "\"$1\" файлась шукшпряв эзь ливтеве.",
        "directorycreateerror": "\"$1\" директориясь а тееви.",
+       "directoryreadonlyerror": "\"$1\" каталогось ансяк ловнови.",
+       "directorynotreadableerror": "\"$1\" каталогось а ловнови.",
        "filenotfound": "\"$1\" файлась а муеви.",
        "unexpected": "Апак учонь вейкетстямо: \"$1\"=\"$2\".",
        "formerror": "Ильведевкс: Формась а кучови",
        "badarticleerror": "Те лопасонть вешезь тевесь а тееви.",
+       "cannotdelete": "\"$1\" лопась эли файлась эзь нардаво.\nПаряк кияк лия икельдинзеть нардамосонзо.",
        "cannotdelete-title": "\"$1\" лопась а нардави",
+       "no-null-revision": "Од чаво ревизия эзь шкаво-тееве \"$1\" лопанть туртов",
        "badtitle": "Амаштовикс конякс",
        "badtitletext": "Вешезь лопанть лемезэ аволь виде, чаво, эли аволь видестэ сюлмазь келеньйутковань эли интервикинь лем. Паряк, лемсэнть тевс нолдазь анолдавикс тешкст.",
        "viewsource": "Ванномс лисьмапрянть",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.",
        "loginlanguagelabel": "Кель: $1",
        "pt-login": "Совамс",
+       "pt-createaccount": "Шкамс совамо тарка",
        "pt-userlogout": "Лисемс",
        "user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.",
        "changepassword": "Салавань валонь полавтома",
        "resetpass-temp-password": "А куватень совамо валось:",
        "resetpass-expired": "Салававалот таштомсь. Аравтт од салававал, мейле совават.",
        "passwordreset": "Совамо валонь лиялгавтома",
-       "passwordreset-legend": "Полавтык совамо валонть",
        "passwordreset-username": "Теиця леметь:",
        "passwordreset-email": "Е-сёрмапаргот:",
        "passwordreset-emailelement": "Теицянь леметь: $1\nНурькине шкань салававалот: $2",
        "revdelete-legend": "Аравтомс неявомачынь петне",
        "revdelete-hide-text": "Лиякстомтомань текстэсь",
        "revdelete-hide-image": "Кекшемс мезе файлатнесэ",
-       "revdelete-hide-name": "Ð\9aекÑ\88емÑ\81 Ñ\82ев Ñ\82ееманÑ\82Ñ\8c Ð´Ñ\8b Ð½Ð¾Ñ\80овамо Ñ\82аÑ\80канзо",
+       "revdelete-hide-name": "Ð\9aекÑ\88емÑ\81 Ñ\82ев Ñ\82ееманÑ\82Ñ\8c Ð½Ð¾Ñ\80овамо Ñ\82аÑ\80канзо Ð´Ñ\8b Ð¿Ð°Ñ\80амеÑ\82Ñ\80анзо",
        "revdelete-hide-comment": "Витнемс-петнемс сёрмадовксонть зэмензэ.",
        "revdelete-hide-user": "Витницянть-петницянть совамолемезэ/IP сёрмапаргозо",
        "revdelete-radio-same": "(иляк лиякстомто)",
        "gender-male": "Сон витни-петни викилопатнесэ",
        "gender-female": "Сон витни-петни викилопатнесэ",
        "email": "Е-сёрма",
-       "prefs-help-realname": "Алкуксонь леметь (арась мелеть, иляк путо): путсак, ды сон карми неявомо не таркатнесэ, косо тон тев теят.",
+       "prefs-help-realname": "Алкуксонь леметь ... арась мелеть, иляк путо. Путындерясак, леметь карми неявомо не таркатнесэ, косо тон тев теят.",
        "prefs-help-email": "Е-сёрмапаргот а эряви тешкстамс. Сон карми эрявомо ансяк салававалонь одов пачтямсто ёмавтындерясак неень салавань валот.",
        "prefs-help-email-others": "Мелеть сайтянзат, путыка кортамо лопазот е-сёрмапаргот, конань вельде лия ломантне сёрмадовить тенть. Минек вельде е-сёрмапаргот зярдояк а неяви, зярдо лия совицятне сёрмалить тенть.",
        "prefs-help-email-required": "Е-сёрмань адресэть эряви.",
        "minoreditletter": "а",
        "newpageletter": "О",
        "boteditletter": "б",
-       "rc_categories_any": "Кодамо илязо уле",
+       "rc_categories_any": "Кочказетнень эйстэ кодамо-понгсь",
        "newsectionsummary": "/* $1 */ од пелькс",
        "rc-enhanced-expand": "Невтемс седе ламо тень ланга",
        "rc-enhanced-hide": "Кекшемс келейстэ ёвтазенть",
        "uploadbtn": "Ёвкстамс файла",
        "uploadnologin": "Эзить сова",
        "uploaderror": "Ёвкстамсто манявома",
-       "upload-permitted": "Файлань форматт, конат меревить: $1.",
-       "upload-preferred": "Файлань типт, конатне паро мельсэ учовить: $1.",
-       "upload-prohibited": "Файлань типт, конатне кардазь: $1.",
+       "upload-permitted": "Файлань маштовикс {{PLURAL:$2|типесь|типтне}}: $1.",
+       "upload-preferred": "Файлань  {{PLURAL:$2|тип, кона паро мельсэ учови|типть, конатне паро мельсэ учовить}}: $1.",
+       "upload-prohibited": "Файлань {{PLURAL:$2|тип, конась|типть, конатне}} кардазь: $1.",
        "uploadlogpage": "Файлань ёвкстамодо журнал",
        "filename": "Файлань лем",
        "filedesc": "Нурькинестэ",
        "unusedtemplates": "Тевс апак нолда лопа парцунт",
        "unusedtemplateswlh": "лия сюлмавома пенеть",
        "randompage": "Кодамо понгсь лопа",
-       "randompage-nopages": "{{PLURAL:$2|1=Те лем потмосо|Не лем потмотнесэ}}: $1 лопат арасть.",
+       "randompage-nopages": "Лопат арасть {{PLURAL:$2|те лемпотмосонть|неть лемпотмотнесэ}}: $1",
+       "randomincategory-submit": "Адя",
        "randomredirect": "Апак фатя ёнксось",
        "randomredirect-nopages": "\"$1\"  лем потмосонть лияв ютавтомат арасть.",
        "statistics": "Статистикат",
        "withoutinterwiki-submit": "Невтемс",
        "fewestrevisions": "Лопат, конатнесэ весемеде аламо лиякстомтомат",
        "nbytes": "$1 {{PLURAL:$1|байт|байтт}}",
-       "ncategories": "$1 {{PLURAL:$1|1=категория|категорият}}",
-       "nlinks": "$1 {{PLURAL:$1|невтевкс|невтевкснедэ|невтевкст}}",
+       "ncategories": "$1 {{PLURAL:$1|категория|категорият}}",
+       "nlinks": "$1 {{PLURAL:$1|сюлмавома пене|сюлмавома пенеть}}",
        "nmembers": "куронь $1 {{PLURAL:$1|ломань|ломанть}}",
-       "nrevisions": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
-       "nviews": "$1 {{PLURAL:$1|1=ванома потмо|ванома потмот}}",
+       "nrevisions": "$1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "lonelypages": "Лопаурозкэть",
        "uncategorizedpages": "Категориявтомо лопат",
        "uncategorizedcategories": "Категориявтомо категорият",
        "wantedtemplates": "Вешезь лопа парцунт",
        "mostlinked": "Лопат конатнес сехте ламо сюлмавома пенеть невтить",
        "mostlinkedcategories": "Сехте сюлмавозь категориятнень марто",
-       "mostlinkedtemplates": "СеÑ\85Ñ\82е Ð»Ð°Ð¼Ð¾ Ñ\81Ñ\8eлмавома Ð¿Ðµ Ð¼Ð°Ñ\80Ñ\82о Ð»Ð¾Ð¿Ð° Ð¿Ð°Ñ\80Ñ\86Ñ\83нÑ\82",
+       "mostlinkedtemplates": "Ð\9bопаÑ\82, ÐºÐ¾Ð½Ð°Ñ\82не Ñ\81еÑ\85Ñ\82е Ð»Ð°Ð¼Ð¾ Ñ\81Ñ\8eлмавома Ð¿Ðµ Ð¼Ð°Ñ\80Ñ\82о",
        "mostcategories": "Весемеде ламо категория марто лопат",
        "mostimages": "Весемеде ламо сюлмавкс марто файлат",
        "mostrevisions": "Лопат конатнесэ теезь сехте ламо лиякстомтомат",
        "listusers": "Теицят-кить",
        "listusers-editsonly": "Невтемс ансяк витнема-петнема марто совийтнень-лисийтнень",
        "listusers-creationsort": "Аравтомс мельга мельцек шкамо чинь коряс",
-       "usereditcount": "$1 {{PLURAL:$1|1=витнема-петнема|витнемат-петнемат}}",
+       "usereditcount": "$1 {{PLURAL:$1|витнема-петнема|витнемат-петнемат}}",
        "usercreated": "{{GENDER:$3|Шказь}} on $1 чистэ $2 шкасто",
        "newpages": "Од лопат",
        "newpages-username": "Теицянь лем:",
        "nopagetitle": "Истямо вешема лопа арась",
        "nopagetext": "Истямо лопа, конань вешить, арась.",
        "pager-newer-n": "$1 седе {{PLURAL:$1|од|одт}}",
-       "pager-older-n": "{{PLURAL:$1|1=седе ташто 1|седе таштт $1}}",
+       "pager-older-n": "{{PLURAL:$1|седе ташто 1|седе таштт $1}}",
        "suppress": "А ванома",
        "booksources": "Кинигань лисьмапрят",
        "booksources-search-legend": "Вешнемс кинигань лисьмапрят",
        "allpagesprefix": "Невтевкс лопась полаткс марто:",
        "allpages-bad-ns": "{{SITENAME}} сайтсэнть арась лем потмо \"$1\".",
        "categories": "Категорият",
-       "categoriespagetext": "{{PLURAL:$1|1=Те категориясонть|Не категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешень категориятнень]].",
+       "categoriespagetext": "{{PLURAL:$1|Те категориясонть|Неть категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешема категориятнень]].",
        "special-categories-sort-count": "аравтомс цётонь коряс",
        "special-categories-sort-abc": "аравтомс альфавитэнь коряс",
        "sp-deletedcontributions-contribs": "путовксонзо",
        "nowatchlist": "Ванома керьксэзэть мезеяк апак путо.",
        "watchnologin": "Апак сова",
        "addedwatchtext": "Лопась «[[:$1]]» совавтозь [[Special:Watchlist|ванома потмозот]].\nСеде тов те лопасонть ды мартонзо сюлмавозь кортнема лопасонть теезь витьнематне тешкставтовить те потмонтень, истяжо кармить кикстазь те лопасонть[[Special:RecentChanges|потмо од витнематне]], истя седе шождасто сынь неявить.",
-       "removedwatchtext": "«[[:$1]]» лопась нардавсь [[Special:Watchlist|ванома потмоксстот]].",
+       "removedwatchtext": "«[[:$1]]» Ð»Ð¾Ð¿Ð°Ñ\81Ñ\8c ÐºÐ¾Ñ\80Ñ\82нема Ð»Ð¾Ð¿Ð°Ð½ÐµÐº Ð½Ð°Ñ\80давÑ\81Ñ\8c [[Special:Watchlist|ванома Ð¿Ð¾Ñ\82мокÑ\81Ñ\81Ñ\82оÑ\82]].",
        "watch": "Ванстнемс",
        "watchthispage": "Ванстнемс те лопа мельга",
        "unwatch": "А ванстнемс тень мельга",
        "unwatchthispage": "Лоткамс ванстомадонзо",
        "notvisiblerev": "Лиякстомтомась нардазь",
-       "watchlist-details": "Ванома лемрисьмесэть $1 {{PLURAL:$1|лопа|лопат}}, кортнема лопатнень лангс апак вано.",
-       "wlshowlast": "Ð\9dевÑ\82емÑ\81 Ð¼ÐµÐ»Ñ\8cÑ\81е $1 цяст $2 чить",
+       "watchlist-details": "Ванома лемрисьмесэть {{PLURAL:$1|$1 лопа|$1 лопат}}, кортнема лопатнень лангс апак вано.",
+       "wlshowlast": "Ð\9dевÑ\82емÑ\81 Ð¼ÐµÐµÐ»Ñ\8cÑ\86е $1 цяст $2 чить",
        "watchlist-options": "Ванома потмонь аравтнемат",
        "watching": "Ванома...",
        "unwatching": "Аванома...",
        "exbeforeblank": "чамдомадо икеле эйсэнзэ ульнесь: '$1'",
        "delete-confirm": "Нардамс \"$1\"",
        "delete-legend": "Нардамс",
-       "historywarning": "Ванок: Лопанть, конань нардамонзо пурнат,  лиякстомтомань икелькс $1 {{PLURAL:$1|1=умазо|уманзо}}:",
+       "historywarning": "<strong>Ванок:</strong> Лопанть, конань нардамонзо пурнат,  лиякстомтомань икелькс $1 {{PLURAL:$1|умазо|уманзо}}:",
        "confirmdeletetext": "Кундыть нардамо лопа (эли невтевкс-артовкс) вейтьсэ лиякстомтоматнеде икелькс уманзо марто.<br />\nИнеськеть,  кемекстык, эсеть мелеть коряс тень тейсак, алкукс содат, мезе лияды теде мейле, ды алкукс теят тень видечинть (правилатьнень) коряс, конат сёрмадозь [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Тевень теемась топавтовсь",
        "actionfailed": "Тев теемась эзь лисе",
        "undeleteinvert": "Кочказень таркас апаконь кочкамо",
        "undeletecomment": "Тувталось:",
        "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
-       "undeletedrevisions-files": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1=1 файла|$2 файлат}} вельмевтезь",
-       "undeletedfiles": "{{PLURAL:$1|1=1 файла|$1 файлат}} вельмевтезь",
+       "undeletedrevisions-files": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1 файла|$2 файлат}} вельмевтезь",
+       "undeletedfiles": "{{PLURAL:$1|1 файла|$1 файлат}} вельмевтезь",
        "undelete-search-box": "Вешнемс нардазь лопатнень ютксто",
        "undelete-search-prefix": "Невтемс лопат тестэ саезь:",
        "undelete-search-submit": "Вешнемс",
        "contributions": "{{GENDER:$1|Теицянть}} путовксонзо",
        "contributions-title": "Теицянть путовксонзо $1 таркантень",
        "mycontris": "Монь путовкстнэ",
-       "contribsub2": "$1 ($2) туртов",
+       "contribsub2": "{{GENDER:$3|$1}}-нь кладозо ($2)",
        "uctop": "(течеме чинь)",
        "month": "Ковстонть (ды седе икеле):",
        "year": "Иестэнть (ды седе икеле):",
        "isredirect": "Лиякс витнинк-петнинк лопанть",
        "istemplate": "совавтомс",
        "isimage": "файлань сюлмавома пене",
-       "whatlinkshere-prev": "{{PLURAL:$1|1=икеле|седе икелень $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|1=сыця|сы $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|седе икелень|седе икелень $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|сыця|сыця $1}}",
        "whatlinkshere-links": "← сюлмавомапеть",
        "whatlinkshere-hideredirs": "$1 ютавты козонь-козонь",
        "whatlinkshere-hidetrans": "$1 сюлмавозь пелькстнэнь",
        "whatlinkshere-filters": "Фильтрат",
        "block": "Аравтомс теицянть саймас",
        "unblock": "Нолдамс теицянть саймасто",
-       "blockip": "Аравтомс теицянть саймас",
+       "blockip": "Аравтомс {{GENDER:$1|теицянть}} саймас",
        "blockip-legend": "Аравтомс теицянть саймас",
        "ipaddressorusername": "IP адрес эли теицянь лем:",
        "ipbexpiry": "Таштомома шказо:",
        "ipb-edit-dropdown": "Витнемс-петнемс саймес озавтомань тувталтнэнь",
        "ipb-unblock-addr": "Нолдамс $1-нть сайместэ",
        "ipb-blocklist": "Ваномс саймес озавтозетнень",
-       "ipb-blocklist-contribs": "$1 лопас путовкст",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-нь путовксонзо",
        "unblockip": "Нолдамс теицянть сайместэ",
        "ipusubmit": "Нардамс те саймас аравтоманть",
        "blocklist": "Саймес саень теицят",
        "movepage-page-moved": "\"$1\" лопась печтевтезь \"$2\"-с.",
        "movepage-page-unmoved": "Лопа $1 эзь печтевтеве $2 лопас.",
        "movelogpage": "Печтевтемань журнал",
-       "movesubpage": "{{PLURAL:$1|1=Алкслопа|Алкслопа}}",
-       "movesubpagetext": "Те лопасонть ало невтеви $1 {{PLURAL:$1|1=алкслопа|алкслопа}}.",
+       "movesubpage": "{{PLURAL:$1|Алкслопа}}",
+       "movesubpagetext": "Те лопасонть ало невтеви $1 {{PLURAL:$1|алкслопа|алкслопат}}.",
        "movenosubpage": "Те лопасонть алкслопат арасть.",
        "movereason": "Тувталось:",
        "revertmove": "велявтодо",
        "import-upload-filename": "Файла лемесь:",
        "import-comment": "Арсемат-мельть:",
        "importstart": "Лопатне совавтовить...",
-       "import-revision-count": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
+       "import-revision-count": "$1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "importnopages": "Ёвкстамс лопат арасть",
        "importfailed": "Совавтома тевесь эзь лисе: <nowiki>$1</nowiki>",
        "importcantopen": "Совавтозь файлась эзь панжово",
        "import-noarticle": "Совавтомс лопат арасть!",
        "import-upload": "Ёвкстамс XML датанть",
        "importlogpage": "Импортонть журналось",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|1=лиякстомтома|лиякстомтомат}}",
+       "import-logentry-upload-detail": "Совавтозь $1 {{PLURAL:$1|лиякстомтома|лиякстомтомат}}",
        "tooltip-pt-userpage": "Теицянь лопат",
        "tooltip-pt-mytalk": "Кортнемалопам",
        "tooltip-pt-preferences": "Мейсэ явован лиятнень эйстэ",
        "tooltip-pt-login": "Совавтовлить эсь прят тезэнь, арась мелеть, иля.",
        "tooltip-pt-logout": "Лисемс",
        "tooltip-ca-talk": "Кортавтома пек паро лопадонть",
-       "tooltip-ca-edit": "Те Ð»Ð¾Ð¿Ð°Ñ\81Ñ\8cкак Ð²Ð¸Ñ\82неви-пеÑ\82неви. Ð\90нÑ\81Ñ\8fк, Ð²Ð°Ð½Ñ\81Ñ\82омадо Ð¸ÐºÐµÐ»Ðµ Ñ\8fла Ð²Ð°Ñ\81нÑ\8fнÑ\8c Ð½ÐµÐ²Ñ\82евкÑ\81 Ð¿Ð¾Ð²Ð½Ñ\8dнÑ\82Ñ\8c Ð»ÐµÐ¿Ñ\88Ñ\82ика.",
+       "tooltip-ca-edit": "Ð\92иÑ\82немÑ\81-пеÑ\82немÑ\81 Ñ\82е Ð»Ð¾Ð¿Ð°Ð½Ñ\82Ñ\8c",
        "tooltip-ca-addsection": "Ушодомс од явкс.",
        "tooltip-ca-viewsource": "Те лопась ванстозь. Ули меленк ваномонзо сонзе лисмапрянть.",
        "tooltip-ca-history": "Те лопанть ютазь версиянзо.",
        "tooltip-undo": "\"Велявтомс мекев\" велявтсы витнемань-петнемань тевенть ды панжсы васнянь невтемань формасо.\nСонзэ вельде маштови поладомс полавтомадо тувтал.",
        "tooltip-preferences-save": "Ванстомс эсень аравтоматнень",
        "tooltip-summary": "Сёрмадт нурькинестэ совавтозденть",
-       "anonymous": "{{SITENAME}} сайтэнть лемтеме {{PLURAL:$1|1=теицязо|теицянзо}}",
+       "anonymous": "{{SITENAME}} сайтэнть лемтеме {{PLURAL:$1|теицязо|теицянзо}}",
        "siteuser": "{{SITENAME}}-нь теиця $1",
        "lastmodifiedatby": "Меельседе те лопанть полавтызе $3 $2, $1.",
        "othercontribs": "$1-нь важодеманзо лангс нежедезь.",
        "others": "лият",
-       "siteusers": "{{SITENAME}} сайтэнть {{PLURAL:$2|1=теицязо|теицянзо}} $1",
+       "siteusers": "{{SITENAME}} сайтэнть {{PLURAL:$2|теицязо|теицянзо}} $1",
        "creditspage": "Лопасонть кинь путовксонзо",
        "spamprotectiontitle": "Шукшто ванстома филтра",
        "spambot_username": "MediaWiki-нь шукшто ванькскавтома",
        "previousdiff": "← Седе икелень верзиязо",
        "nextdiff": "Од верзиязо →",
        "thumbsize": "Кенжешканть покшолмазо:",
-       "widthheightpage": "$1 × $2, {{PLURAL:$3|1=лопа|$3 лопат}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|лопа|лопат}}",
        "file-info": "файлонть-путовксонть сталмозо: $1, MIME типезе: $2",
        "file-info-size": "$1 × $2 пиксельть, файлонть-путовксонть сталмозо: $3, MIME типезе: $4",
        "file-nohires": "Арась версия покш разрешения марто.",
        "autosumm-new": "Шкавсь-теевсь од лопа $1 марто",
        "watchlistedit-normal-title": "Витнемс-петнемс ванстома лопанть",
        "watchlistedit-normal-submit": "Нардамс конякстнэнь",
-       "watchlistedit-normal-done": "{{PLURAL:$1|1=1 конякс|$1 конякст}} нардазь ваномань лопастот:",
+       "watchlistedit-normal-done": "{{PLURAL:$1|1 конякс нардазель|$1 конякст нардазельть}} ваномань лопастот:",
        "watchlistedit-raw-title": "Витнеме-петнеме верек ваномалопанть",
        "watchlistedit-raw-legend": "Витнеме-петнеме верек ваномалопанть",
        "watchlistedit-raw-titles": "Конякст:",
        "watchlistedit-raw-submit": "Мезе мельга ванстнят, спискаст одкстомтомс",
-       "watchlistedit-raw-added": "Поладозь {{PLURAL:$1|1=1 конякс|$1 конякст}}:",
-       "watchlistedit-raw-removed": "{{PLURAL:$1|1=1 конякс нардазь|$1 конякст нардазь}}:",
+       "watchlistedit-raw-added": "{{PLURAL:$1|1 конякс поладозель|$1 конякст поладозельть}}:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|1 конякс нардазель|$1 конякст нардазельть}}:",
        "watchlisttools-view": "Лиякстоматьне лопатнесэ потмоксстонть",
        "watchlisttools-edit": "Ваномс ды витнемс-петнемс мезе мельга ванстнят",
        "watchlisttools-raw": "Витнеме-петнеме верек ваномалопанть",
        "duplicate-defaultsort": "'''Ванок!''' Рядс аравтомань те \"$2\" панжомась саеви те \"$1\" панжомадо икеле.",
        "version": "Версия",
-       "version-skins": "Ð\9bангт",
+       "version-skins": "Ð\90Ñ\80авÑ\82озÑ\8c Ð»ангт",
        "version-specialpages": "Башка тевень лопат",
        "version-variables": "Полавтневикс тевть",
        "version-other": "Лия",
        "version-hook-name": "Кечказонть лемезэ",
        "version-hook-subscribedby": "Сёрмадстызе",
        "version-version": "($1)",
-       "version-license": "Лицензия",
+       "version-license": "MediaWiki лицензиясь",
        "version-software": "Нолдань программат",
        "version-software-product": "Шкавкс-нолдавкс",
        "version-software-version": "Верзия",
        "api-error-filename-tooshort": "Керьмазлементь а саты кувалмозо",
        "api-error-illegal-filename": "Керьмазлемесь а маштови.",
        "api-error-unknownerror": "Апак содань ильведевкс: «$1».",
-       "duration-seconds": "$1 {{PLURAL:$1|1=секунда|секундат}}",
-       "duration-minutes": "$1 {{PLURAL:$1|1=минут|минутт}}",
-       "duration-hours": "$1 {{PLURAL:$1|1=цяс|цяст}}",
-       "duration-days": "$1 {{PLURAL:$1|1=чи|чить}}",
-       "duration-weeks": "$1 {{PLURAL:$1|1=тарго|таргот}}",
-       "duration-years": "$1 {{PLURAL:$1|1=ие|иеть}}",
-       "duration-decades": "$1 {{PLURAL:$1|1=кеменьие|кеменьиеть}}",
-       "duration-centuries": "$1 {{PLURAL:$1|1=пинге|пингеть}}",
-       "duration-millennia": "$1 {{PLURAL:$1|1=тёжтьие|тёжтьиеть}}",
+       "duration-seconds": "$1 {{PLURAL:$1|секунда|секундат}}",
+       "duration-minutes": "$1 {{PLURAL:$1|минут|минутат}}",
+       "duration-hours": "$1 {{PLURAL:$1|цяс|цяст}}",
+       "duration-days": "$1 {{PLURAL:$1|чи|чить}}",
+       "duration-weeks": "$1 {{PLURAL:$1|тарго|таргот}}",
+       "duration-years": "$1 {{PLURAL:$1|ие|иеть}}",
+       "duration-decades": "$1 {{PLURAL:$1|кеменьие|кеменьиеть}}",
+       "duration-centuries": "$1 {{PLURAL:$1|пинге|пингеть}}",
+       "duration-millennia": "$1 {{PLURAL:$1|тёжтьие|тёжтьиеть}}",
        "expand_templates_preview": "Васнянь неевтезэ",
        "special-characters-group-latin": "Латиница",
        "special-characters-group-symbols": "Тешкстт",
index e625bfc..e20b385 100644 (file)
        "aboutpage": "Project:درباره",
        "copyright": "این صفحه ره بَنوشته‌ئون  $1  زیر شِمه دسـت دَرنه.",
        "copyrightpage": "{{ns:project}}:کـوپـی‌راسـت‌ئون",
-       "currentevents": "خـَوِرون",
+       "currentevents": "تازÙ\87 Ø®Ù\80Ù\8eÙ\88Ù\90رÙ\88Ù\86",
        "currentevents-url": "Project:خورون",
        "disclaimers": "تکذیب‌نومه‌ئون",
        "disclaimerpage": "Project:تکذیب‌نومه",
        "log-fulllog": "بدی‌ین سیاهه کامل",
        "edit-gone-missing": ".شما نتوندی صفحه ره دباره هارشی\nاحتمالا صفحه پاک بیه.",
        "edit-conflict": "دِ نفر با هم درنه نویسنه.\nاتا ته هستی.",
+       "viewpagelogs": "سیاهه‌ئون ِسِراق هدائن این صفحه وسّه",
        "currentrev-asof": "اِسایی نسخه تا $1",
        "revisionasof": "دچی‌یه‌ئونی که $1 جا دکتنه",
+       "revision-info": "$1 ِنسخه که {{GENDER:$6|$2}}$7 دَچی‌یه",
        "previousrevision": "→ پیشی دگاردسته‌ئون",
        "nextrevision": "جدیدته نسخه ←",
        "currentrevisionlink": "اِسایی نسخه ره هارشی‌ین",
        "revdel-restore": "دیاری تغییر هدائن",
        "mergehistory": "صفحه‌ئون تاریخچه ره اتا هاکردن",
        "revertmerge": "سِوا هاکردن",
+       "history-title": "$1: دچی‌یه‌ئون ِتاریخچه",
        "difference-title": "$1: نسخه‌ئون ِفرق",
        "lineno": "بند  $1:",
        "editundo": "واچی‌ین",
        "searchresults-title": "چرخه‌ئوی نتیجه «$1» وسّه",
        "prevn": "پـیـشـیـن {{PLURAL:$1|$1}}",
        "nextn": "تا پَس‌تر {{PLURAL:$1|$1}}",
-       "nextn-title": "$1 بعدی {{PLURAL:$1|نتیجه|نتیجه}}",
-       "shown-title": "$1 ِ{{PLURAL:$1|نتیجه|نتیجه}} سِراق هِدائن هر صفحه دله",
+       "nextn-title": "$1 {{PLURAL:$1|نتیجه}} بعدی",
+       "shown-title": "$1 ِسِراق هِدائن {{PLURAL:$1|نتیجه}} هر صفحه دله",
        "viewprevnext": "هارشائن ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-new": "'''« [[:$1]] » ِ صفحه ره این ویکی دله بساجین!'''",
+       "searchmenu-new": "<strong>«[[:$1]]» ِصفحه ره این ویکی دله بسازین!</strong> {{PLURAL:$2|0=البته بتونّی ونه چرخه‌تو (=جستجو) نتیجه ره هم هارشین.|البته بتونّی ونه چرخه‌تو (=جستجو) نتایج ره هم هارشین.}}",
        "searchprofile-articles": "بنویشته‌ئون صفحه",
        "searchprofile-images": "مالتی‌مدیا",
        "searchprofile-everything": "همه‌چی",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|تازه بساته صفحه‌ئون]] ره هم هارشین)",
        "rclistfrom": "نِمایش تازه‌دگاردسته‌ئون با شروع از $3 $2",
        "rcshowhideminor": "پچیک دچی‌یه‌ئون $1",
+       "rcshowhideminor-show": "سِراق هِدائِن",
        "rcshowhideminor-hide": "پنهون هاکن",
        "rcshowhidebots": "ربوت‌ئون $1",
        "rcshowhidebots-show": "سِراق هاده",
+       "rcshowhidebots-hide": "پنهون هاکن",
        "rcshowhideliu": "ثبت‌نوم هاکرده کارورون $1",
        "rcshowhideliu-hide": "پنهون هاکن",
        "rcshowhideanons": "ناشناس ِکارورون $1",
+       "rcshowhideanons-show": "سِراق هِدائِن",
        "rcshowhideanons-hide": "پنهون هاکن",
        "rcshowhidepatr": "گشت‌بخارد ِدچی‌یه‌ئون $1",
        "rcshowhidemine": "مه دچی‌یه‌ئون $1",
+       "rcshowhidemine-show": "سِراق هِدائِن",
        "rcshowhidemine-hide": "پنهون هاکن",
        "rclinks": "نـِشون هـِدائن  $1 پایانی دَچی‌‌یه‌ئون، $2 اِسـا روز ره دلـه؛ $3",
        "diff": "فرق",
        "recentchangeslinked-feed": "واری دچی‌یه‌ئون",
        "recentchangeslinked-toolbox": "واری دچی‌یه‌ئون",
        "recentchangeslinked-title": "مرتبط تغییرات $1 جه",
+       "recentchangeslinked-summary": "این بـِن فهرستی تازه دگاردسته‌ئونی که این صفحه جه لینک دارنه (یا ونه رج دله درنه) جه وینّی.\nصفحه‌هایی که [[Special:Watchlist|شمه دمبال‌هاکرده‌ئون لیست]] دله دَواشه '''پررنگ''' سِراق هِدا وانه.",
        "recentchangeslinked-page": "صفحه ایسم:",
        "recentchangeslinked-to": "تغییرات صفحه‌ئونی که این صفحه جه ربط دارنه ره سِراق هِدائن",
        "upload": "باربی‌یشتن فـایـل",
        "randompage": "شانسی صفحه",
        "statistics": "آمار",
        "nbytes": "$1 {{PLURAL:$1|بایت|بایت}}",
+       "nmembers": "$1 {{PLURAL:$1|عضو}}",
        "specialpage-empty": "این صفحه دله هچّی دَنی‌یه",
        "unusedcategories": "کـار نـأزو رج‌ئون",
        "unusedimages": "کـار نأزو فایل‌ئون",
        "dellogpage": "وه ره بییته‌ئون گوزارش",
        "rollback": "دچی‌یه‌ئون ره واچی‌ین",
        "rollbacklink": "واچی‌ین",
+       "rollbacklinkcount": "وادچی‌ین $1 {{PLURAL:$1|دچی‌یه}}",
        "revertpage": "\"چـیـزونی که [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) دأچـیـه ده‌گـه‌ره‌س بـأیـه هـأمونـتـایی که [[User:$1|$1]] ای وألگ ده‌لـه، پـایـانی بـار هـه‌کـارده\"",
        "revertpage-nouser": "\"چیزونی که (ونـه کـاروری نـوم پـاک بَیّه) دچی‌یه دگـاردسته بیّه همونتایی که [[User:$1|$1]] آخرسری دچی‌ین دلـه هاکرده\"",
        "rollback-success": "چیزونی که $1 دچی‌ین دگاردسته بیّه همونتایی که $2 آخرسری دچی‌ین دلـه هاکرده",
+       "protectlogpage": "زلفن بزوئن ِسیاهه",
        "protectedarticle": "«[[$1]]» ره محافظت هاکرده",
        "modifiedarticleprotection": "«[[$1]]» محافظت تنظیمات ره تغییر هدائه",
        "movedarticleprotection": "«[[$2]]» محافظت تنظیمات ره «[[$1]]» رو منتقل هاکرده",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "اینان صفحه‌ئون به '''[[:$1]]''' لینک هدانه:",
        "isredirect": "دکشی‌ین صفحه",
-       "istemplate": "$1 تراگنجانشون",
+       "istemplate": "تراگنجانش‌ئون",
        "isimage": "فایل ِلینک",
        "whatlinkshere-prev": "{{PLURAL:$1|پـیـشـیـن|$1 تـای پـیـشـیـن}}",
        "whatlinkshere-next": "{{PLURAL:$1|پَس|$1 تا پَس‌تر}}",
        "tooltip-pt-logout": "سیستم جه دأیابـوری",
        "tooltip-pt-createaccount": "شِما ره پیشنهاد کامبی که اتا کاروری حیساب بسازین و لاگین بَواشین؛ البته این کار اختیاری هسته.",
        "tooltip-ca-talk": "این صفحه خَوری گپ بَزوئن",
-       "tooltip-ca-edit": "شِما بتوندی این صفحه ره دَچینی.",
+       "tooltip-ca-edit": "شِما بتوندی این صفحه ره ویکی‌تکست جه دَچینی.",
        "tooltip-ca-addsection": "أتـا نـه گـب را دأکـه‌تـه‌ن",
        "tooltip-ca-viewsource": "این صفحه ره نتوندی دَچینی.\nشِما بِتوندی ونه منبع ره هارشی.",
        "tooltip-ca-history": "کهنه دگاردسته‌ئونی که این صفحه دله دکته",
        "tooltip-n-mainpage": "گت صفحه ره بدی‌ین",
        "tooltip-n-mainpage-description": "گَت ِصفحه ره هارشائن",
        "tooltip-n-portal": "اینجه بتونّی بقیه جه کومک بَیرین یا سؤال هاکنین",
-       "tooltip-n-currentevents": "تازه چی‌ئون درباره بدونستن",
+       "tooltip-n-currentevents": "تازه اخبار ره بخوندِستن",
        "tooltip-n-recentchanges": "تازه دچی‌یه‌ئون ره لیست",
        "tooltip-n-randompage": "اتت شانسی صفحه بَدی‌ین",
        "tooltip-n-help": "أتـا جـا کـه...",
        "tooltip-preview": "شـه ده‌گـه‌ره‌سـه‌ئون ره پـیـشـاپـیـش بـأویـنـه‌ن،\n خـا‌هـه‌ش بـونـه، شـه کـارئون ره جـا دأکـه‌تـه‌ن پـیـش، ای ره کـار بـأزه‌نـی.",
        "tooltip-diff": "تغییراتی که ته هِدایی ره سِراق هِدائن",
        "tooltip-rollback": "«دِگاردنی‌ین» اون دچی‌یه(ئون) که آخرین نفر انجام هِدائه ره اتا کلیک جه وَرگِردنانده.",
+       "tooltip-undo": "«واچی‌ین» این دچی‌یه ره خنثی کانده و دچی‌ین ِجعبه ره پیش-پیش سِراق هِدائِن ِحالت دله وا کانده تا شه دچی‌یه‌ئون ِدلیل ره اضافه هاکنین.",
        "tooltip-summary": "خلاصه بنویسین",
        "siteusers": "$1، {{PLURAL:$2|کارور|کارورون}} {{SITENAME}}",
        "simpleantispam-label": "!آنتی‌اسپم ِچک‌هاکردن.\nاین قسمت ره پـِر <strong>نکان!</strong>",
        "logentry-move-move_redir-noredirect": "$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده",
        "logentry-newusers-newusers": "$1  بساتن اتا حساب کاروری",
        "logentry-newusers-create": "$1 کاروری حساب {{GENDER:$2|بساته بیّه}}",
+       "logentry-upload-upload": "$1 $3 ره {{GENDER:$2|بار بی‌یشته}}",
        "rightsnone": "(هچّی)",
        "feedback-adding": "بی‌یشتن پیشنهادات و انتقادات...",
        "feedback-cancel": "ول هاکردن",
index e5efedb..63d9878 100644 (file)
        "group-sysop": "koán-lí jîn-oân",
        "group-bureaucrat": "Koaⁿ-liâu",
        "group-bot-member": "{{GENDER:$1|Ke-khì-lâng}}",
-       "group-sysop-member": "{{GENDER:$1|goán-lí jîn-oân}}",
+       "group-sysop-member": "{{GENDER:$1|koán-lí jîn-oân}}",
        "group-bureaucrat-member": "{{GENDER:$1|Koaⁿ-liâu}}",
        "grouppage-sysop": "{{ns:project}}:Hêng-chèng jîn-oân",
        "grouppage-bureaucrat": "{{ns:project}}:Koaⁿ-liâu",
index 3cd6724..90c14bf 100644 (file)
        "actionthrottled": "Azione ritardata",
        "actionthrottledtext": "Comme misura anti-spam, site lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere pruvate n'ata vota dint'a cocche minuto.",
        "protectedpagetext": "Sta paggena s'è prutetta pe' ne bloccà 'a mudifeca o n'ata azione.",
-       "viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
-       "viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
+       "viewsourcetext": "Putite vedé e copià 'o codece surgiva 'e sta paggena.",
+       "viewyourtext": "Putite vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte vuoste</strong> a sta paggena.",
        "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
        "editinginterface": "<strong>Attenziò:</strong>  'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.",
        "translateinterface": "Si se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
        "readonlywarning": "<strong>Attenziò</strong>: 'o database è bloccato pe se ffà 'a manutenzione. P' 'o mumento nun se ponno sarvà 'e cagnamiente fatte.\nPe' nun 'e sperdere, copia sti cuntenute dint'a nu file 'e testo e sarvatillo pe' tramente c'aspiette 'o sblocco d' 'o database.\n\nL'ammenistratore ca mpustaje 'o blocco ave scritto sta spiegazione: $1.",
        "protectedpagewarning": "'''Attenziò: sta paggena è stata bloccata 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà.'''\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:",
        "semiprotectedpagewarning": "'''Nota:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente riggistrate 'a ponno cagnà.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:",
-       "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
+       "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è appennuta dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
        "titleprotectedwarning": "'''Attenziò: sta paggena è stata bloccata 'n modo ca fossero necessarie [[Special:ListGroupRights|deritte specifici]] p' 'a crià.'''\nL'urdemo elemento d' 'o riggistro è riportato ccà abbascio pe nfurmazione:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} ausate 'a chesta paggena:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ausate dint'a st'anteprimma:",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[osservata 'a {{PLURAL:$1|n'utente|$1 utente}}]",
-       "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\")",
-       "rc_categories_any": "Qualònca",
+       "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\"):",
+       "rc_categories_any": "Qualunque d' 'e scigliute",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} aropp'ô cagnamiento",
        "newsectionsummary": "/* $1 */ sezziona nnova",
        "rc-enhanced-expand": "Fa vede dettaglie",
        "addedwatchtext": "'A paggena \"[[:$1]]\" e 'a paggena 'e chiacchiera è stata azzeccata dint'a l'elenco 'e [[Special:Watchlist|paggene cuntrullate]].",
        "addedwatchtext-short": "Chista paggena \"$1\" è stata azzeccata a l'elenco 'e paggene cuntrullate.",
        "removewatch": "Leva 'a l'elenco 'e paggene cuntrullate",
-       "removedwatchtext": "'A paggena \"[[:$1]]\" è stata scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] tuojo.",
+       "removedwatchtext": "\"[[:$1]]\" 'e 'a paggena 'e chiacchiera soja so' state scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] vuosto.",
        "removedwatchtext-short": "Chista paggena \"$1\" è stata luvata a l'elenco 'e paggene cuntrullate.",
        "watch": "Secuta",
        "watchthispage": "Tiene d'uocchio chesta paggena",
        "changecontentmodel-nodirectediting": "'O mudello 'e cuntenute $1 nun suppurtasse 'o cagnamiento diretto",
        "log-name-contentmodel": "Riggistro 'e cagnamiente d' 'o mudello 'e cuntenute",
        "log-description-contentmodel": "Evvente azzeccate c' 'o mudello 'e cuntenute 'e na paggena",
-       "logentry-contentmodel-change": "$1 cagnaje 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
+       "logentry-contentmodel-change": "$1 {{GENDER:$2|cagnaje}} 'o mudello 'e cuntenute 'e na paggena $3 'a \"$4\" a \"$5\"",
        "logentry-contentmodel-change-revertlink": "arrepiglia",
        "logentry-contentmodel-change-revert": "arrepiglia",
        "protectlogpage": "Riggistro 'e prutezzione",
        "pageinfo-robot-index": "Permesso",
        "pageinfo-robot-noindex": "Nun permesso",
        "pageinfo-watchers": "Nummero 'e visite â paggena",
-       "pageinfo-visiting-watchers": "Nummero 'e utente ca stanno a vedè 'e cagnamiente cchiù nuove",
+       "pageinfo-visiting-watchers": "Nummero 'e utente ca so' state a vedè 'e cagnamiente cchiù nuove",
        "pageinfo-few-watchers": "Meno 'e $1 {{PLURAL:$1|visita|visite}}",
        "pageinfo-few-visiting-watchers": "Esistesse o forse nun esistesse n'utente ca stesse a vedé 'e cagnamiente cchiù ricente",
        "pageinfo-redirects-name": "Nummero 'e redirect a sta paggena",
        "special-characters-title-endash": "trattino enne",
        "special-characters-title-emdash": "trattino emme",
        "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-no-date": "Nisciuna data scigliuta",
        "mw-widgets-titleinput-description-new-page": "'a pàggene nun esiste ancore",
        "mw-widgets-titleinput-description-redirect": "redirezionate ncopp' a $1"
 }
index 0f1aad0..630cb5b 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tankestrek",
        "special-characters-title-emdash": "lang tankestrek",
-       "special-characters-title-minus": "minustegn"
+       "special-characters-title-minus": "minustegn",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index b5d8e11..7f90b7d 100644 (file)
        "search-category": "(categorie $1)",
        "search-file-match": "(komt overeen met de inhoud van het bestand)",
        "search-suggest": "Bedoelde u: $1",
+       "search-rewritten": "Resultaten voor $1 getoond. Zoek in plaats daarvan naar $2.",
        "search-interwiki-caption": "Zusterprojecten",
        "search-interwiki-default": "Resultaten van $1:",
        "search-interwiki-more": "(meer)",
        "uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld.",
        "php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
        "uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
-       "upload-scripted-pi-callback": "Kan geen bestand met XML-stylesheet-processing-instructies uploaden.",
+       "upload-scripted-pi-callback": "Het uploaden van een bestand met instructies voor de verwerking van XML-stijlbladen is niet mogelijk.",
        "uploaded-script-svg": "Gevonden scriptable element \"$1\" in het geüploade SVG-bestand.",
        "uploaded-hostile-svg": "Gevonden onveilige CSS in de stijl element van het geüploade SVG-bestand .",
        "uploaded-event-handler-on-svg": "Het instellen van de event-handler attributen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
        "special-characters-title-endash": "liggend streepje",
        "special-characters-title-emdash": "gedachtenstreepje",
        "special-characters-title-minus": "minteken",
+       "mw-widgets-dateinput-placeholder-day": "JJJJ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
        "mw-widgets-titleinput-description-new-page": "pagina bestaat nog niet",
        "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1"
 }
index fe0345f..ab7404e 100644 (file)
        "pool-timeout": "Tidsavbrot under venting på låsing.",
        "pool-queuefull": "Køen er full.",
        "pool-errorunknown": "Ukjend feil",
+       "poolcounter-usage-error": "Bruksfeil: $1",
        "aboutsite": "Om {{SITENAME}}",
        "aboutpage": "Project:Om",
        "copyright": "Innhaldet er utgjeve under $1 minder anna er oppgjeve.",
        "revdelete-uname-unhid": "brukarnamn gjort synleg",
        "revdelete-restricted": "la til avgrensingar for administratorar",
        "revdelete-unrestricted": "fjerna avgrensingar for administratorar",
+       "logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
        "logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flytte}} sida $3 til $4 utan å lata etter ei omdirigering",
        "logentry-move-move_redir": "$1 {{GENDER:$2|flytte}} sida $3 til $4 over ei omdirigering",
        "special-characters-group-bangla": "Bengali",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singalesisk",
-       "special-characters-group-gujarati": "Gujarati"
+       "special-characters-group-gujarati": "Gujarati",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM"
 }
index 1bf6dc2..5e0e4a8 100644 (file)
        "download": "Runnerlaade",
        "listredirects": "Lischt vun Weiderleidinge",
        "randompage": "Ennich Ardickel",
+       "randomincategory-submit": "OK",
        "randomredirect": "Random Weiderleiding",
        "statistics": "Nummere",
        "statistics-header-pages": "Nummere vun Bledder",
index 007387b..c39ce4c 100644 (file)
@@ -7,7 +7,8 @@
                        "Manuae",
                        "SPS",
                        "Xqt",
-                       "아라"
+                       "아라",
+                       "Purodha"
                ]
        },
        "tog-underline": "Ling'g unnaschdraische",
        "resetpass-abort-generic": "S'Passwoad weggsle isch vunna Eawaidarung unnabroche worre.",
        "resetpass-expired": "Doi Passwoad isch abgloffe. Gebbä naijes Passwoad oi.",
        "passwordreset": "Kennword zriggsedze",
-       "passwordreset-legend": "Kennword zriggsedze",
        "passwordreset-username": "Middawaida:",
        "passwordreset-capture": "E-Mail õgugge?",
        "changeemail": "E-Mail-Adress ännare",
index 8f51507..c9d7de5 100644 (file)
        "unusedimages": "Nieużywane pliki",
        "wantedcategories": "Brakujące kategorie",
        "wantedpages": "Najpotrzebniejsze strony",
-       "wantedpages-summary": "Lista najczęściej linkowanych, nieistniejących stron, z wyłączeniem stron, do których linkują wyłącznie przekierowania. By zobaczyć listę nieistniejących stron, do których linkują przekierowania, zobacz [[{{#special:BrokenRedirects}}|listę zerwanych przekierowań]].",
+       "wantedpages-summary": "Lista najczęściej linkowanych, nieistniejących stron, z wyłączeniem takich stron, do których linkują wyłącznie przekierowania. By zobaczyć listę nieistniejących stron, do których linkują przekierowania, zobacz [[{{#special:BrokenRedirects}}|listę zerwanych przekierowań]].",
        "wantedpages-badtitle": "Nieprawidłowy tytuł wśród wyników – $1",
        "wantedfiles": "Potrzebne pliki",
        "wantedfiletext-cat": "Następujące pliki są używane, ale nie istnieją. Pliki z obcych repozytoriów mogą być wymienione pomimo istnienia. Takie fałszywe wyniki zostaną <del>przekreślone</del>. Ponadto strony, które osadzają pliki, które nie istnieją, są wymienione w [[:$1]].",
        "special-characters-title-endash": "półpauza",
        "special-characters-title-emdash": "pauza",
        "special-characters-title-minus": "minus",
+       "mw-widgets-dateinput-no-date": "Nie wybrano daty",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "strona jeszcze nie istnieje",
        "mw-widgets-titleinput-description-redirect": "przekierowanie do $1"
 }
index 0536304..9b3450e 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "tratin en",
        "special-characters-title-emdash": "tratin em",
-       "special-characters-title-minus": "segn meno"
+       "special-characters-title-minus": "segn meno",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index c7fab64..1235939 100644 (file)
        "actions": "کم",
        "namespaces": "ناواں دی جگہ:",
        "variants": "قسماں",
+       "navigation-heading": "کھوج پتر",
        "errorpagetitle": "مسئلہ",
        "returnto": "واپس $1 چلو",
        "tagline": " {{SITENAME}} توں",
        "permalink": "پکا جوڑ",
        "print": "چھاپو",
        "view": "وکھالہ",
+       "view-foreign": "$1 تے ویکھو",
        "edit": "لکھو",
        "create": "بناؤ",
        "editthispage": "اس صفحہ تے لکھو",
        "articlepage": "مضمون آلا صفحہ",
        "talk": "گل بات",
        "views": "وکھالے",
-       "toolbox": "اوزار ڈبہ",
+       "toolbox": "اوزار",
        "userpage": "ورتن آلے دا صفہ ویکھو",
        "projectpage": "ویونت والا صفہ ویکھو",
        "imagepage": "فائل آلا صفہ ویکھو",
        "login-abort-generic": "تسی لاگ ان نئیں ہوسکے۔",
        "loginlanguagelabel": "بولی: $1",
        "suspicious-userlogout": "تھواڈی لاگ آؤٹ ہوں دی کوشش رک گئی اینج لگدا اے  جیویں اے ٹٹے براؤزر یا کیشنگ پراکسی توں پیجیا گیا سی۔",
+       "pt-login": "لاگ ان ہوو",
+       "pt-createaccount": "کھاتہ کھولو",
        "php-mail-error-unknown": "PHP میل دے کم چ کوئی انجانی غلطی۔",
        "user-mail-no-addy": "ای-میل پتے بنا ای-میل کلن دی کوشش۔",
        "changepassword": "کنجی بدلو",
        "action-siteadmin": "ڈیٹابیس نوں کھولو یا بند کرو",
        "action-sendemail": "ای-میلاں پیجو",
        "nchanges": "$1 {{PLURAL:$1|change|تبدیلیاں}}",
+       "enhancedrc-history": "پچھلا کم",
        "recentchanges": "نویاں تبدیلیاں",
        "recentchanges-legend": "نویاں تبدیلیاں دیاں راواں",
        "recentchanges-summary": "ایس وکی تے نیڑے نیڑے ہون والیاں تبدیلیاں ایس صفے تے دسو۔",
        "recentchanges-label-minor": "اے اک چھوٹی تبدیلی اے۔",
        "recentchanges-label-bot": "ایس تبدیلی نوں بوٹ نے کیتا اے۔",
        "recentchanges-label-unpatrolled": "ایس تبدیلی تے ہلے گشت نئیں ہوئی۔",
+       "recentchanges-label-plusminus": "صفے دا ناپ اینے بائٹاں نال بدلیا گیا",
+       "recentchanges-legend-heading": "'''وات:'''",
        "rcnotefrom": "ہلے تک '''$2''' توں '''$1''' تبدیلیاں تھلے دتیاں گئیاں نیں۔",
        "rclistfrom": "$3 $2 توں ہونے آلیاں نویاں تبدیلیاں وکھاؤ",
        "rcshowhideminor": "$1 معمولی تبدیلیاں",
+       "rcshowhideminor-hide": "لکاؤ",
        "rcshowhidebots": "$1 بوٹ",
+       "rcshowhidebots-show": "وکھاؤ",
        "rcshowhideliu": "$1 ورتن آلے اندر نیں",
+       "rcshowhideliu-hide": "لکاؤ",
        "rcshowhideanons": "$1 گمنام ورتن والے",
+       "rcshowhideanons-hide": "لکاؤ",
        "rcshowhidepatr": "$1 ویکھی گئی لکھائی",
        "rcshowhidemine": "$1 میرے کم",
+       "rcshowhidemine-hide": "لکاؤ",
        "rclinks": "آخری $2 دناں دیاں $1 تبدیلیاں وکھاؤ<br />$3",
        "diff": "فرق",
        "hist": "پچھلا کم",
        "uploadnewversion-linktext": "اس فائل دا نوا ورژن چھڑھاؤ",
        "shared-repo-from": "$1 توں",
        "shared-repo": "اک سانجی ریپوزیٹری",
+       "upload-disallowed-here": "تسیں ایس فائل تے نہیں لکھ سکدے",
        "filerevert": "$1 واپس",
        "filerevert-legend": "فائل پچھلی حالت چ لے جاؤ",
        "filerevert-intro": "تسیں فائل '''[[Media:$1|$1]]''' نوں واپس کرن والے او [$4 ورین $3, $2] ول۔",
        "namespace_association": "رلدے ناں تھاں",
        "tooltip-namespace_association": "ایس ڈبے نون وی ویکھو گل بات یا ناںتھاں  چونویں ناںتھاں نال رلدا۔",
        "blanknamespace": "(مکھ)",
-       "contributions": "ورتن آلے دا حصہ",
+       "contributions": " $1 ورتن آلے دا حصہ",
        "contributions-title": "$1 دے کم",
        "mycontris": "میرے کم",
        "contribsub2": "$1 آستے ($2)",
        "tooltip-pt-mycontris": "میرے کم",
        "tooltip-pt-login": "ایہ بہتر اے کہ لاگ ان ہو جاؤ، فیر وی ایہ لازمی نئیں۔",
        "tooltip-pt-logout": "باہر آؤ",
+       "tooltip-pt-createaccount": "ایہ تواڈے لئی چنگا اے جے تسیں کھاتہ بناؤ تے لاگ ان ہوو؛ پر ایہ لازمی وی نئیں",
        "tooltip-ca-talk": "اس صفے بارے گل بات",
-       "tooltip-ca-edit": "تسÛ\8cÚº Ø§Ø³ ØµÙ\81Û\92 ØªÛ\92 Ù\84Ú©Ú¾ Ø³Ú©Ø¯Û\92 Ø§Ù\88Û\94\nبÚ\86اÙ\86 ØªÙ\88Úº Ù¾Û\81Ù\84اں Ú©Ú\86Û\92 Ú©Ù\85 Ù\86Ù\88Úº Ù\88Û\8cÚ©Ú¾ Ù\84Ù\88Û\94",
+       "tooltip-ca-edit": "اس ØµÙ\81Û\92 ØªÛ\92 Ù\84Ú©Ú¾Ù\88",
        "tooltip-ca-addsection": "اس گل بات وچ حصہ لے لو۔",
        "tooltip-ca-viewsource": "اے صفحہ بچایا گیا اے۔\nتسی اینو صرف ویکھ سکدے او۔",
        "tooltip-ca-history": "اس صفحے دا پرانہ ورژن۔",
        "spambot_username": "میڈیاوکی سپام سفائی",
        "spam_reverting": "آخری ریوین ول جیدے چ $1 دے جوڑ ناں ہون۔",
        "spam_blanking": "سارے ریوین جناں چ $1 نوں جوڑ نیں، طاف کیتا جاریا اے۔",
-       "simpleantispam-label": "سپام روک پھاٹک\nایدے تے ناں لکھو۔",
+       "simpleantispam-label": "سپام روک پھاٹک\nایدے تے '''ناں''' لکھو۔",
        "pageinfo-title": "\"$1\" لئی جانکاری",
        "pageinfo-header-edits": "تبدیلیاں",
        "pageinfo-watchers": "ویکھن والے",
        "pageinfo-edits": "تبدیلیاں گنتی",
        "pageinfo-authors": "وکھرے لکھاریاں دی گنتی",
+       "pageinfo-toolboxlink": "صفہ وات",
        "markaspatrolleddiff": "ویکھے گۓ دا نشان لاؤ",
        "markaspatrolledtext": "ایس صفے تے ویکھن دا نشان لاؤ",
        "markedaspatrolled": "ویکھن دا نشان لاؤ",
        "file-info-size-pages": "$1 × $2 پکسل, فائل ناپ: $3, مائم ٹائپ: $4, $5 {{PLURAL:$5|صفہ|صفے}}",
        "file-nohires": "اس توں وڈی فوٹو موجود نہیں۔",
        "svg-long-desc": "ایس وی جی فائل، پکسل:$1 × $2، فائل سائز: $3",
-       "show-big-image": "وڈی مورت",
+       "show-big-image": "اصلی فائل",
        "show-big-image-preview": "ایس وکھالے دا ناپ: $1۔",
        "show-big-image-other": "دوجے {{PLURAL:$2|ریزولوشن|ریزولوشنز}}: $1.",
        "show-big-image-size": "$1 × $2 پکسلز",
index 459e3e5..613a05e 100644 (file)
        "special-characters-group-khmer": "Cambojano",
        "special-characters-title-endash": "traço",
        "special-characters-title-emdash": "travessão",
-       "special-characters-title-minus": "sinal de menos"
+       "special-characters-title-minus": "sinal de menos",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index abdf905..e5f06e5 100644 (file)
        "actionthrottled": "Operação limitada",
        "actionthrottledtext": "Como medida anti-spam, está impedido de realizar esta operação demasiadas vezes num espaço de tempo curto e já excedeu esse limite. Tente de novo dentro de alguns minutos, por favor.",
        "protectedpagetext": "Esta página foi protegida para prevenir a sua edição.",
-       "viewsourcetext": "Pode ver e copiar o conteúdo desta página:",
-       "viewyourtext": "Pode ver e copiar o código-fonte das '''suas edições''' desta página:",
+       "viewsourcetext": "Pode ver e copiar o conteúdo desta página.",
+       "viewyourtext": "Pode ver e copiar o código-fonte das <strong>suas edições</strong> desta página.",
        "protectedinterface": "Esta página fornece o texto da interface ao software, e está protegida para prevenir abusos.",
        "editinginterface": "<strong>Aviso:</strong> Está a editar uma página usada para fornecer texto de interface ao software. Alterações a esta página afetarão a aparência da interface de utilizador para os outros utilizadores.",
        "translateinterface": "Para traduções, considere utilizar a [//translatewiki.net/wiki/Main_Page?setlang=pt translatewiki.net], um projeto destinado à tradução do MediaWiki.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Objeto vazio",
        "content-json-empty-array": "Matriz vazia",
+       "duplicate-args-warning": "<strong>Aviso:</strong> [[:$1]] chama [[:$2]] com mais de um valor para o parâmetro \"$3\". Somente o último valor fornecido será utilizado.",
        "duplicate-args-category": "Páginas que utilizam argumentos duplicados ao chamar predefinições",
        "duplicate-args-category-desc": "A página contém campos de predefinições que utilizam duplicatas de argumentos, tais como <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Aviso:''' Esta página contém demasiadas chamadas de funções exigentes do analisador sintático.\n\nDevia ter menos de $2 {{PLURAL:$2|chamada|chamadas}}. Neste momento tem $1 {{PLURAL:$1|chamada|chamadas}}.",
        "search-category": "(categoria $1)",
        "search-file-match": "(coincide com o conteúdo do ficheiro)",
        "search-suggest": "Será que quis dizer: $1",
+       "search-rewritten": "A mostrar resultados para $1. Pesquise antes por $2.",
        "search-interwiki-caption": "Projetos irmãos",
        "search-interwiki-default": "Resultados de $1:",
        "search-interwiki-more": "(mais)",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[{{PLURAL:$1|$1 utilizador|$1 utilizadores}} a vigiar]",
-       "rc_categories": "Limitar às categorias (separar com \"|\")",
+       "rc_categories": "Limitar às categorias (separar com \"|\"):",
        "rc_categories_any": "Qualquer",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} após mudança",
        "newsectionsummary": "/* $1 */ nova secção",
        "watchlisttools-raw": "Editar a lista de páginas vigiadas em forma de texto",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussão]])",
        "duplicate-defaultsort": "<strong>Aviso:</strong> A chave de ordenação padrão \"$2\" sobrepõe-se à anterior \"$1\".",
-       "duplicate-displaytitle": "<strong>Aviso:</strong> Exibir título \"$2\" substituindo o título anteriormente em exibição \"$1\".",
+       "duplicate-displaytitle": "<strong>Aviso:</strong> O título em exibição \"$2\" anula o título anteriormente em exibição \"$1\".",
        "invalid-indicator-name": "<strong>Erro:</strong> O atributo <code>name</code>, da página de estados, não deve estar em branco.",
        "version": "Versão",
        "version-extensions": "Extensões instaladas",
        "special-characters-title-endash": "hífen",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de subtração",
+       "mw-widgets-dateinput-no-date": "Nenhuma data selecionada",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
        "mw-widgets-titleinput-description-redirect": "redirecionar para $1"
 }
index 53f5828..17f1c46 100644 (file)
        "unpatrolledletter": "{{optional}}\n\nUsed in {{msg-mw|Recentchanges-label-legend}}, meaning \"unpatrolled\".",
        "number_of_watching_users_RCview": "{{notranslate}}\nParameters:\n* $1 - number of users who are watching",
        "number_of_watching_users_pageview": "Used if <code>$wgPageShowWatchingUsers</code> is true.\n* $1 - number of watching user(s)",
-       "rc_categories": "Probably to do with 'recent changes' special page, either in a particular skin, or for a particular user group.\n\nI guess that this should appear before an input box where you can specify that recent changes should be shown for pages belonging to certain categories only. You name the categories in the input box, and separate them by a pipe character. If this is right, then you should be able to use 'restrict' instead of 'limit', or even 'show pages in the following categories only'.",
-       "rc_categories_any": "Used in the CategoryFilter form on [[Special:RecentChanges]], if <code>$wgAllowCategorizedRecentChanges</code> is true.\n{{Identical|Any}}",
+       "rc_categories": "A label of an input box. Appears on Special:RecentChanges if filtering recent changes by category is enabled (that is, $wgAllowCategorizedRecentChanges is set to true).",
+       "rc_categories_any": "Appears ''after'' the input box the label of which is {{msg-mw|rc_categories}}, which appears on [[Special:RecentChanges]], if <code>$wgAllowCategorizedRecentChanges</code> is true. \"Chosen\" refers to categories.",
        "rc-change-size": "{{optional}}\nDoes not work under $wgMiserMode ([[mwr:48986|r48986]]).\n\nParameters:\n* $1 - size of diff",
        "rc-change-size-new": "Tooltip when hovering a change list diff size. Parameters:\n* $1 - the resulting new size (in bytes)",
        "newsectionsummary": "Default summary when adding a new section to a page. Parameters:\n* $1 - section title",
        "sunday-at": "Phrase for indicating that something occurred at a particular time on the most recent Sunday.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
        "today-at": "Phrase for indicating that something occurred at a particular time today.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
        "yesterday-at": "Phrase for indicating that something occurred at a particular time yesterday.\n\nParameters:\n* $1 - the time (localized)\n{{Related|Day-at}}",
-       "bad_image_list": "箇条信息只出现在引导管理员用正确个格式加链接。弗会徕Mediawiki别荡处出现。",
+       "bad_image_list": "This message only appears to guide administrators to add links with the right format. This will not appear anywhere else in MediaWiki.",
        "variantname-zh-hans": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "variantname-zh-hant": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "variantname-zh-cn": "{{Optional}}\n\nVariant option for wikis with variants conversion enabled.",
        "special-characters-title-emdash": "Title tooltip for the em dash character (—); See https://en.wikipedia.org/wiki/Dash",
        "special-characters-title-minus": "Title tooltip for the minus sign character (−), not to be confused with a hyphen",
        "mw-widgets-dateinput-no-date": "Label of a date input field when no date has been selected.",
+       "mw-widgets-dateinput-placeholder-day": "[[File:DateInputWidget active, empty.png|frame|Screenshot]]\nPlaceholder displayed in a date input field when it's empty, representing a date format with 4 digits for year, 2 digits for month, and 2 digits for day, separated with hyphens. This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
+       "mw-widgets-dateinput-placeholder-month": "Placeholder displayed in a date input field when it's empty, representing a date format with 4 digits for year and 2 digits for month, separated with hyphens (without a day). This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "mw-widgets-titleinput-description-new-page": "Description label for a new page in the title input widget.",
        "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget."
 }
index 01c6c7d..4302767 100644 (file)
        "boteditletter": "b",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utilizator|utilizatori|de utilizatori}} care urmăresc]",
-       "rc_categories": "Limitează la categoriile (separate prin \"|\")",
-       "rc_categories_any": "Oricare",
+       "rc_categories": "Limitează la categoriile (separate prin „|”):",
+       "rc_categories_any": "Oricare dintre cele alese",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|octet|octeți|de octeți}} după modificare",
        "newsectionsummary": "/* $1 */ secțiune nouă",
        "special-characters-title-endash": "linie de pauză (en dash)",
        "special-characters-title-emdash": "linie de pauză (em dash)",
        "special-characters-title-minus": "semnul minus",
+       "mw-widgets-dateinput-no-date": "Nicio dată selectată",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-LL-ZZ",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-LL",
        "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
        "mw-widgets-titleinput-description-redirect": "redirecționare către $1"
 }
index 6c8ce05..f80d0a7 100644 (file)
@@ -7,7 +7,8 @@
                        "Reder",
                        "아라",
                        "C.R.",
-                       "Macofe"
+                       "Macofe",
+                       "Purodha"
                ]
        },
        "tog-underline": "Collegaminde sottolinèate:",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|utende|utinde}} ca condrollene]",
        "rc_categories": "Limite de le categorije (separate cu \"|\")",
-       "rc_categories_any": "Tutte",
+       "rc_categories_any": "Qualsiasi de le scacchiate",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} apprisse 'u cangiamende",
        "newsectionsummary": "/* $1 */ seziona nove",
index fa19c15..634e161 100644 (file)
        "boteditletter": "б",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|наблюдающий участник|наблюдающих участника|наблюдающих участников}}]",
-       "rc_categories": "Только из категорий (разделитель «|»)",
-       "rc_categories_any": "Ð\9bÑ\8eбой",
+       "rc_categories": "Только из категорий (разделитель «|»):",
+       "rc_categories_any": "Ð\9bÑ\8eбаÑ\8f Ð¸Ð· Ð²Ñ\8bбÑ\80аннÑ\8bÑ\85",
        "rc-change-size-new": "Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}",
        "newsectionsummary": "/* $1 */ новая тема",
        "rc-enhanced-expand": "Показать подробности",
        "special-characters-title-endash": "среднее тире",
        "special-characters-title-emdash": "длинное тире",
        "special-characters-title-minus": "знак минус",
+       "mw-widgets-dateinput-no-date": "Дата не выбрана",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница ещё не существует",
        "mw-widgets-titleinput-description-redirect": "перенаправление на $1"
 }
index 98ffb27..8946049 100644 (file)
        "special-characters-group-gujarati": "Ґуджараті",
        "special-characters-group-thai": "Тайськы",
        "special-characters-group-lao": "Лаоськы",
-       "special-characters-group-khmer": "Кгмерськы"
+       "special-characters-group-khmer": "Кгмерськы",
+       "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ"
 }
index 4450cb3..100b45a 100644 (file)
        "randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
        "randomincategory-category": "Категория:",
        "randomincategory-legend": "Категория түбэспиччэ ыстатыйата",
+       "randomincategory-submit": "Көс",
        "randomredirect": "Түбэспиччэ утаарыы",
        "randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
        "statistics": "Статистика",
        "rollback-success": "$1 көннөрүүлэр бу торумҥа төннөрүлүннүлэр: $2.",
        "sessionfailure-title": "Сиэссийэ алҕаһа",
        "sessionfailure": "Арааһа туох эрэ сатаммата, дьайыыҥ оҥоһуллубата. Браузергар \"Төнүн\" тимэҕи баттаа уонна бу иннинээҕи сирэйгин иккистээн киллэрэн көр.",
+       "changecontentmodel": "Сирэй ис тутулун киэбин уларытыы",
+       "changecontentmodel-title-label": "Сирэй баһа",
+       "changecontentmodel-model-label": "Иһинээҕитин саҥа киэбэ",
+       "changecontentmodel-reason-label": "Төрүөтэ:",
+       "changecontentmodel-success-title": "Иһинээҕитин киэбэ уларыйда",
+       "changecontentmodel-success-text": "[[:$1]] иһинээҕитин киэбэ уларыйда.",
+       "changecontentmodel-cannot-convert": "[[:$1]] иһинээҕитэ $2 көрүҥҥэ уларыйар кыаҕа суох эбит.",
+       "changecontentmodel-nodirectediting": "$1 иһинээҕитин киэбин быһа уларытар сатаммат эбит",
+       "log-name-contentmodel": "Иһинээҕитин киэбин уларытыы сурунаала",
+       "log-description-contentmodel": "Сирэй иһинээҕитин киэбин кытта ситимнээх",
+       "logentry-contentmodel-change-revertlink": "төннөрүү",
+       "logentry-contentmodel-change-revert": "төннөрүү",
        "protectlogpage": "Харысхал сурунаала (көннөрүүттэн көмүскэммит билэлэр испииһэктэрэ)",
        "protectlogtext": "Манна сирэйи көмүскээһин устуоруйата суруллубут.\nЭн өссө [[Special:ProtectedPages|билигин уларытыллыбат гына көмүскэммит сирэйдэр тиһиктэрин]] көрүөххүн сөп.",
        "protectedarticle": "\"[[$1]]\" сирэй уларытыллыбат",
        "protect-locked-blocked": "Уларытыы таһымын учуотунай суругуҥ бобуллубут кэмигэр уларытар кыаҕыҥ суох.\n'''$1''' сирэй уларытыытын таһыма:",
        "protect-locked-dblock": "Уларытыы таһыма уларыйар кыаҕа суох - дааннайдар баазаларын уларытар бобулунна.\n'''$1''' сирэй уларытыытын таһыма билиҥҥи туругунан маннык:",
        "protect-locked-access": "Эн аккаунуҥ уларытыы таһымын көннөрөр кыаҕа суох.\n'''$1''' сирэй уларыыттын таһыма билиҥҥи туругунан маннык:",
-       "protect-cascadeon": "Бу сирэй уларытыыттан көмүскэммит {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} (каскааднай көмүскэл) киирэр буолан эмиэ көмүскэммит. Эн көмүскэнии таһымын уларытыаххын сөп, ол каскаднай көмүскэли уларыппат.",
+       "protect-cascadeon": "Бу сирэй көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр буолан уларытыыттан көмүскэммит. Көмүскэл таһымын уларытыаххын сөп эрээри, ол каскаднай көмүскэли уларыппат.",
        "protect-default": "Барыларыгар көҥүллэнэр",
        "protect-fallback": "\"$1\" кыттааччылар эрэ маны оҥорор кыахтаахтар",
        "protect-level-autoconfirmed": "Аптамаатынан бигэргэммит кыттааччыларга эрэ көҥүллэнэр",
        "namespace": "Аат дала (Пространство имён):",
        "invert": "Бэлиэтэниллибити таҥнары тут",
        "tooltip-invert": "Бу бэлиэни туруоран талбыт аат далгар баар сирэйдэри уларытыыны көстүбэт оҥор (уонна анаан ыйыллыбыт буоллаҕына ситимнээх аат далларыгар)",
+       "tooltip-whatlinkshere-invert": "Бу чыычааҕы туруордаххына талбыт аат далгыттан сигэлэри кистиэҥ",
        "namespace_association": "Ситимнээх аат даллара",
        "tooltip-namespace_association": "Бу бэлиэни туруордаххына талбыт аат далгын кытта ситимнээх аат даллара эмиэ холбоһуохтара",
        "blanknamespace": "(Сүрүн)",
        "autoblockid": "Аптамаатынан хааччахтааһын #$1",
        "block": "Кыттааччыны хааччахтааһын",
        "unblock": "Кытааччы хааччаҕын устуу",
-       "blockip": "IP аадырыстан киириини бобуу",
+       "blockip": "{{GENDER:$1|Кыттааччыны}} хааччахтаа",
        "blockip-legend": "Кыттааччыны хааччахтааһын",
        "blockiptext": "Ханнык эмит IP-ттан суруйары манна баар форманы туһанан боп.\nВандализмы утаран уонна [[{{MediaWiki:Policy-url}}]]\nбыраабылалрын тутуһан эрэ бобуохтааххын.\nХайаан да бобуу төрүөтүн кэпсээ (холобур, вандализм баар сирэйдэриттэн\nбыһа тардан манна көрдөр).",
        "ipaddressorusername": "IP аадырыһа эбэтэр кыттааччы аата:",
        "ipb-unblock-addr": "$1 бобуутун суох гын",
        "ipb-unblock": "Кыттаачыны эбэтэр IP-ны бобуллубуттар испииһэктэриттэн таһаар",
        "ipb-blocklist": "Бобуулары көрдөр",
-       "ipb-blocklist-contribs": "$1 кыттааччы кылаата/киллэриитэ",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} суруйуута",
        "unblockip": "Кыттааччыны көҥүллээ",
        "unblockiptext": "IP эбэтэр кыттааччы көннөрөр/уларытар быраабын манна баар форманы туһанан төннөр.",
        "ipusubmit": "Хааччаҕын уһул",
        "unblocked": "[[User:$1|$1]] хааччахтаныыта уһулунна",
        "unblocked-range": "$1 хааччаҕа уһулунна",
        "unblocked-id": "$1 хааччахтаныыта уһулунна",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] хааччаҕа уһулунна.",
        "blocklist": "Бобуллубут кыттааччылар",
        "ipblocklist": "Хааччахтаммыт кыттааччылар",
        "ipblocklist-legend": "Хааччахтаммыт/бобуллубут кыттааччыны көрдөөһүн",
        "thumbnail-temp-create": "Эскииз быстах билэтин оҥорор табыллыбата",
        "thumbnail-dest-create": "Эскииһи ыйбыт сиргэр угар табыллыбата",
        "thumbnail_invalid_params": "Кыра ойуу кээмэйэ сыыһалаах",
+       "thumbnail_toobigimagearea": "Билэ кээмэйэ мантан - $1 - улахан",
        "thumbnail_dest_directory": "Наадалаах каталогы оҥорор табыллыбата",
        "thumbnail_image-type": "Маннык ойуу көрүҥэ манна туттуллубат",
        "thumbnail_gd-library": "GD бибилитиэкэ толору конфигурацията суох, бу функция суох: $1",
        "thumbnail_image-missing": "Арааһа бу билэ суох быһыылаах: $1",
        "thumbnail_image-failure-limit": "Эскииһи наһаа элбэхтик киллэрэ сатаатыҥ ($1 төгүл, биитэр өссө элбэх). Бука диэн, кэлин хатылаан көрөөр.",
        "import": "Сирэйдэри импортааһын",
-       "importinterwiki": "Ð\91иики Ñ\8bккаÑ\80дÑ\8bнааÒ\95Ñ\8b Ð¸Ð¼Ð¿Ð¾Ñ\80Ñ\82",
-       "import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.",
+       "importinterwiki": "Ð\90Ñ\82Ñ\8bн Ð±Ð¸Ð¸ÐºÐ¸Ñ\82Ñ\82Ñ\8dн ÐºÐ¸Ð»Ð»Ñ\8dÑ\80ии",
+       "import-interwiki-text": "Биикини уонна импортанар сирэй аатын ый.\nУларытыылар күннэрэ-ыйдара уонна ааптардар ааттара оннуларынан хаалыаҕа.\nАтын биикиттэн ылыы [[Special:Log/import|аналлаах сурунаалга]] бэлиэтэниэҕэ.",
        "import-interwiki-sourcewiki": "Ийэ биики:",
        "import-interwiki-sourcepage": "Бастааҥы сирэй:",
        "import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
        "import-interwiki-templates": "Бары халыыптары киллэр",
        "import-interwiki-submit": "Импортаа",
+       "import-mapping-default": "Атыны эппэтэххэ угар сир аадырыһа",
+       "import-mapping-namespace": "Бу аат далыгар:",
+       "import-mapping-subpage": "Бу сирэй хос сирэйин курдук импортаа:",
        "import-upload-filename": "Билэ аата:",
        "import-comment": "Хос быһаарыы:",
        "importtext": "Сирэйи [[Special:Export|экспорт үнүстүрүмүөнүн]] көмөтүнэн бастакы биикиттэн экспортаа. \nБилэни бастаан бэйэҥ көмпүүтэргэр суруй, онтон манна көһөр.",
        "duplicate-defaultsort": "Болҕой: Наардааһын «$2» күлүүһэ урукку «$1» күлүүһү сабар (Ключ сортировки переопределяет прежний ключ).",
        "version": "MediaWiki барыла (биэрсийэтэ)",
        "version-extensions": "Туруоруллубут расширениялар",
-       "version-skins": "Тас көстүү барыллара",
+       "version-skins": "Туруоруллубут тас көстүү барыллара",
        "version-specialpages": "Аналлаах сирэйдэр",
        "version-parserhooks": "синтаксическай анализатор перехватчиктара",
        "version-variables": "Уларыйар дааннайдар (переменнайдар)",
        "version-libraries": "Олордуллубут бибилэтиэкэлэр",
        "version-libraries-library": "Бибилэтиэкэ",
        "version-libraries-version": "Биэрсийэтэ",
+       "version-libraries-license": "Лиссиэнсийэ",
+       "version-libraries-description": "Ойуулааһын",
+       "version-libraries-authors": "Ааптар",
        "redirect": "Билэттэн, кыттааччыттан, сирэйтэн эбэтэр барыл идентификаторыттан утаарыы",
        "redirect-legend": "Билэҕэ эбэтэр сирэйгэ утаарыы",
        "redirect-summary": "Бу аналлаах сирэй билэҕэ (билэ аатыттан), сирэйгэ (барыл эбэтэр сирэй идентификааторыттан) эбэтэр кыттааччы сирэйигэр (кыттааччы идентификаторыттан) утаарар. Туһаныы: \n[[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], \n[[{{#Special:Redirect}}/revision/328429]] эбэтэр\n[[{{#Special:Redirect}}/user/101]].",
        "tags-activate": "холбоо",
        "tags-deactivate": "араар",
        "tags-hitcount": "$1 {{PLURAL:$1|уларытыы|уларытыылар}}",
+       "tags-manage-no-permission": "Тиэктэри уларытар кыаҕыҥ суох эбит.",
+       "tags-create-heading": "Саҥа тиэги оҥоруу",
+       "tags-create-explanation": "Саҥа оҥоһуллубут тиэктэри кыттааччылар уонна буоттар уларытар кыахтаах буолуохтара.",
        "tags-create-tag-name": "Бэлиэ аата:",
        "tags-create-reason": "Төрүөтэ:",
        "tags-create-submit": "Оҥоруу",
        "right-pagelang": "Сирэй тылын уларыт",
        "action-pagelang": "сирэй тылын уларытар буол",
        "log-name-pagelang": "Тылы уларытыы сурунаала",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (холбоммут)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''арахсыбыт''')",
        "mediastatistics": "Миэдьийэ ыстатыыстыката",
        "mediastatistics-nbytes": "$1 баайт ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME көрүҥэ",
index e6b5f97..5a4c688 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "pomlčka",
        "special-characters-title-emdash": "dlhá pomlčka",
-       "special-characters-title-minus": "mínus"
+       "special-characters-title-minus": "mínus",
+       "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "RRRR-MM"
 }
index fb8b79b..e683244 100644 (file)
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[temo {{PLURAL:$1|spremlja|spremljata|spremljajo|spremlja|spremlja}} $1 {{PLURAL:$1|uporabnik|uporabnika|uporabniki|uporabnikov|uporabnikov}}]",
-       "rc_categories": "Omejitev na kategorije (ločite jih z »|«)",
-       "rc_categories_any": "Katerokoli",
+       "rc_categories": "Omejitev na kategorije (ločite jih z »|«):",
+       "rc_categories_any": "Katera koli od izbranih",
        "rc-change-size-new": "po spremembi: $1 {{PLURAL:$1|zlog|zloga|zlogi|zlogov}}",
        "newsectionsummary": "/* $1 */ nov razdelek",
        "rc-enhanced-expand": "Pokaži podrobnosti",
        "special-characters-title-endash": "navaden pomišljaj",
        "special-characters-title-emdash": "dolgi pomišljaj",
        "special-characters-title-minus": "znak za minus",
+       "mw-widgets-dateinput-no-date": "Datum ni izbran",
+       "mw-widgets-dateinput-placeholder-day": "LLLL-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "LLLL-MM",
        "mw-widgets-titleinput-description-new-page": "stran še ne obstaja",
        "mw-widgets-titleinput-description-redirect": "preusmeritev na $1"
 }
index 25606f5..d26b052 100644 (file)
        "special-characters-group-gujarati": "Guxharati",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "VVVV-MM"
 }
index cedbafc..5456efb 100644 (file)
        "pool-timeout": "Истек времена чека на закључавање",
        "pool-queuefull": "Ред је пун захтева",
        "pool-errorunknown": "Непозната грешка",
+       "pool-servererror": "Услуга бројача пула није доступна ($1).",
+       "poolcounter-usage-error": "Грешка при употреби: $1",
        "aboutsite": "О пројекту {{SITENAME}}",
        "aboutpage": "Project:О нама",
        "copyright": "Садржај је доступан под лиценцом $1 осим ако је другачије наведено.",
        "readonly_lag": "База података је аутоматски закључана да би се секундарни сервери базе података ускладили с главним.",
        "internalerror": "Унутрашња грешка",
        "internalerror_info": "Унутрашња грешка: $1",
+       "internalerror-fatal-exception": "Фатална грешка типа „$1“",
        "filecopyerror": "Не могу да умножим датотеку „$1“ у „$2“.",
        "filerenameerror": "Не могу да преименујем датотеку „$1“ у „$2“.",
        "filedeleteerror": "Не могу да обришем датотеку „$1“.",
        "cannotdelete": "Не могу да обришем страницу или датотеку „$1“.\nВероватно ју је неко други обрисао.",
        "cannotdelete-title": "Не могу да обришем страницу „$1“",
        "delete-hook-aborted": "Брисање је прекинула кука.\nНије дато никакво образложење.",
+       "no-null-revision": "Не могу да направим нову празну верзију за страницу „$1“",
        "badtitle": "Неисправан наслов",
        "badtitletext": "Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.\nМожда садржи знакове који се не могу користити у насловима.",
+       "title-invalid-empty": "Тражено име странице је празно или садржи само назив именског простора.",
+       "title-invalid-utf8": "Тражени назив странице садржи неважећи UTF-8 знак.",
+       "title-invalid-interwiki": "Тражени наслов странице садржи унутрашњу вики везу која не може бити кориштена у насловима.",
+       "title-invalid-talk-namespace": "Тражени наслов странице се односи на страницу за разговор која не може постојати.",
        "title-invalid-characters": "Тражени наслов има неважеће карактере: „$1“.",
+       "title-invalid-relative": "Наслов има релативну путању. Релативни наслови страница (./, ../) нису важећи јер ће често бити недоступни у корисничком прегледачу.",
+       "title-invalid-magic-tilde": "Тражени наслов странице садржи неважећи след магичног знака тилда (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Тражени назив странице је предугачак. Не сме бити дужи од $1 {{PLURAL:$1|бајта|бајтова}} у UTF-8 кодирању.",
+       "title-invalid-leading-colon": "Захтевани наслов странице садржи неважећу двотачку на почетку.",
        "perfcached": "Следећи подаци су кеширани и могу бити застарели. Кеш садржи највише {{PLURAL:$1|један резултат|$1 резултата|$1 резултата}}.",
        "perfcachedts": "Следећи подаци су кеширани и последњи пут су ажурирани $2 у $3. У кешу {{PLURAL:$4|1=је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
        "querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
        "actionthrottled": "Радња је успорена",
        "actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
        "protectedpagetext": "Ова страница је закључана за измене и друге радње.",
-       "viewsourcetext": "Можете читати и копирати садржај ове странице:",
-       "viewyourtext": "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
+       "viewsourcetext": "Можете читати и копирати садржај ове странице.",
+       "viewyourtext": "Можете да погледате и копирате извор <strong>ваших измена</strong> на овој страници.",
        "protectedinterface": "Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
        "translateinterface": "Да додате или промените преводе за све викије, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "changeemail-submit": "Промени",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "resettokens": "Ресетовање жетона",
+       "resettokens-text": "Можете поново поставити жетоне који ће вам омогућити приступ одређеним приватним подацима повезаним са вашим налогом овде.\n\nТребали бисте то да урадите ако их мимо воље поделите с неким или ако је ваш налог угрожен.",
        "resettokens-no-tokens": "Нема жетона за ресетовање.",
        "resettokens-tokens": "Жетони:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
        "missingcommentheader": "'''Напомена:''' нисте унели наслов овог коментара.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без наслова.",
        "summary-preview": "Преглед описа:",
        "subject-preview": "Преглед теме/наслова:",
+       "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
        "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "yourdiff": "Разлике",
        "copyrightwarning": "Имајте на уму да се сви доприноси на овом викију сматрају као објављени под лиценцом $2 (више на $1).\nАко не желите да се ваши текстови мењају и размењују без ограничења, онда их не шаљите овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву.\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
        "copyrightwarning2": "Имајте на уму да се сви доприноси на овом викију могу мењати, враћати или брисати од других корисника.\nАко не желите да се ваши текстови слободно мењају и расподељују, не шаљите их овде.<br />\nИсто тако обећавате да сте ви аутор текста, или да сте га умножили с извора који је у јавном власништву (више на $1).\n'''Не шаљите радове заштићене ауторским правима без дозволе!'''",
+       "editpage-cannot-use-custom-model": "Модел садржаја ове странице се не може променити.",
        "longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
        "readonlywarning": "'''Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.'''\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nАдминистратор који је закључао базу дао је следеће објашњење: $1",
        "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
        "content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[$2]]",
        "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
        "editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
+       "editpage-notsupportedcontentformat-text": "Формат садржаја $1 није подржан за модел садржаја $2.",
        "content-model-wikitext": "викитекст",
        "content-model-text": "чист текст",
        "content-model-javascript": "јаваскрипт",
        "content-model-css": "CSS",
        "content-json-empty-object": "Празан објекат",
+       "content-json-empty-array": "Празан низ",
        "duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
+       "duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
+       "duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Упозорење:''' ова страница садржи превише позива за рашчлањивање.\n\nТребало би да има мање од $2 {{PLURAL:$2|позив|позива|позива}}, а сада има $1.",
        "expensive-parserfunction-category": "Странице с превише позива за рашчлањивање",
        "post-expand-template-inclusion-warning": "'''Упозорење:''' величина укљученог шаблона је превелика.\nНеки шаблони неће бити укључени.",
        "parser-template-recursion-depth-warning": "Дубина укључивања шаблона је прекорачена ($1)",
        "language-converter-depth-warning": "Прекорачена је граница дубине језичког претварача ($1)",
        "node-count-exceeded-category": "Странице у којима је прекорачен број чворова",
+       "node-count-exceeded-category-desc": "Страница је прекорачила број чворова.",
        "node-count-exceeded-warning": "Страница у којој је прекорачен број чворова",
        "expansion-depth-exceeded-category": "Странице у којима је прекорачена дубина проширења",
+       "expansion-depth-exceeded-category-desc": "Страница је прекорачила највећу дубину проширења.",
        "expansion-depth-exceeded-warning": "Страница у којој је прекорачена дубина проширења",
        "parser-unstrip-loop-warning": "Утврђена је петља",
        "parser-unstrip-recursion-limit": "Прекорачено је ограничење рекурзије ($1)",
        "history-feed-description": "Историја измена ове странице на викију",
        "history-feed-item-nocomment": "$1 у $2",
        "history-feed-empty": "Тражена страница не постоји.\nМогуће да је обрисана с викија или је преименована.\nПокушајте да [[Special:Search|претражите вики]] за сличне странице.",
+       "history-edit-tags": "Уреди ознаке изабраних измена",
        "rev-deleted-comment": "(опис измене уклоњен)",
        "rev-deleted-user": "(корисничко име уклоњено)",
        "rev-deleted-event": "(детаљи дневника уклоњени)",
        "rev-deleted-user-contribs": "[корисничко име или ИП адреса је уклоњена – измена је сакривена са списка доприноса]",
        "rev-deleted-text-permission": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
+       "rev-suppressed-text-permission": "Измена ове странице је <strong>сакривена</strong>. Више детаља можете наћи у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].",
        "rev-deleted-text-unhide": "Измена ове странице је '''обрисана'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
        "rev-suppressed-text-unhide": "Измена ове странице је '''сакривена'''.\nДетаље можете видети у [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} историји сакривања].\nИпак можете да [$1 видите ову измену] ако желите да наставите.",
        "rev-deleted-text-view": "Измена ове странице је '''обрисана'''.\nМожете је погледати; више детаља можете наћи у [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} историји брисања].",
        "rev-showdeleted": "прикажи",
        "revisiondelete": "Обриши/врати измене",
        "revdelete-nooldid-title": "Нема тражене измене",
-       "revdelete-nooldid-text": "Ð\9dиÑ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð¶ÐµÑ\99енÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83, Ð¾Ð½Ð° Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и Ð¸Ð»Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аваÑ\82е Ð´Ð° Ñ\98е Ñ\81акÑ\80иÑ\98еÑ\82е.",
+       "revdelete-nooldid-text": "Ð\9dиÑ\81Ñ\82е Ð¸Ð·Ð°Ð±Ñ\80али Ð¾Ð´Ñ\80едиÑ\88нÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð½Ð° ÐºÐ¾Ñ\98оÑ\98 Ñ\82Ñ\80еба Ð´Ð° Ñ\81е Ð¸Ð·Ð²Ñ\80Ñ\88и Ð¾Ð²Ð° Ñ\84Ñ\83нкÑ\86иÑ\98а, Ñ\82а Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ðµ Ð¿Ð¾Ñ\81Ñ\82оÑ\98и, Ð¸Ð»Ð¸ Ð¿Ð¾ÐºÑ\83Ñ\88аваÑ\82е Ñ\81акÑ\80иÑ\82и Ñ\82Ñ\80енÑ\83Ñ\82нÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83.",
        "revdelete-no-file": "Тражена датотека не постоји.",
        "revdelete-show-file-confirm": "Желите ли да видите обрисану измену датотеке „<nowiki>$1</nowiki>“ од $2; $3?",
        "revdelete-show-file-submit": "Да",
        "stub-threshold": "Праг за обликовање <a href=\"#\" class=\"stub\">везе као клице</a> (у бајтовима):",
        "stub-threshold-disabled": "Онемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
-       "recentchangesdays-max": "(највише $1 {{PLURAL:$1|дан|дана|дана}})",
+       "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
        "recentchangescount": "Број измена за приказ:",
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
        "prefs-help-watchlist-token2": "Ово је тајни кључ за веб довод вашег списка надгледања.\nСвако ко зна овај кључ биће у могућности да види ваша надгледања стога немојте га одавати никоме.\nАко је потребно можете га [[Special:ResetTokens|ресетовати]].",
        "userrights-lookup-user": "Управљање корисничким групама",
        "userrights-user-editname": "Унесите корисничко име:",
        "editusergroup": "Промени корисничке групе",
-       "editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице|корисника}} '''[[User:$1|$1]]''' $2",
+       "editinguser": "Мењате корисничка права {{GENDER:$1|корисника|кориснице}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Промена корисничких група",
        "saveusergroups": "Сачувај корисничке групе",
        "userrights-groupsmember": "Члан:",
        "right-protect": "промени нивое заштите и уреди странице са преносивом заштитом",
        "right-editprotected": "уређивање страница под заштитом „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "уређивање страница под заштитом „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "мењање модела садржаја странице",
        "right-editinterface": "уређивање корисничког окружења",
        "right-editusercssjs": "уређивање туђих CSS и јаваскрипт датотека",
        "right-editusercss": "уређивање туђих CSS датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
        "right-viewmywatchlist": "види сопствени списак надгледања",
+       "right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
        "right-viewmyprivateinfo": "видите своје личне податке (нпр. адресу е-поште, право име)",
        "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. адресу е-поште, право име)",
        "right-editmyoptions": "уређивање сопствених подешавања",
        "right-sendemail": "слање е-порука другим корисницима",
        "right-passwordreset": "прегледање порука за обнављање лозинке",
        "right-managechangetags": "прављење и/или брисање [[Special:Tags|ознака]] из базе података",
+       "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
+       "right-changetags": "додавање и уклањање разних [[Special:Tags|ознака]] на појединачним изменама и уносима у дневницима",
        "newuserlogpage": "Дневник нових корисника",
        "newuserlogpagetext": "Ово је историја нових корисника.",
        "rightslog": "Дневник корисничких права",
        "action-viewmywatchlist": "преглед вашег списак надгледања",
        "action-viewmyprivateinfo": "прегледање ваших личних података",
        "action-editmyprivateinfo": "уређивање ваших личних података",
+       "action-editcontentmodel": "мењање модела садржаја странице",
        "action-managechangetags": "прављење и/или брисање ознака из базе података",
+       "action-applychangetags": "додавање ознака на ваше измене",
+       "action-changetags": "додавање и уклањање разних ознака на појединачним изменама и уносима у дневницима",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
        "enhancedrc-history": "историја",
        "windows-nonascii-filename": "Овај вики не подржава називе датотека с посебним знацима.",
        "fileexists": "Датотека с овим називом већ постоји. Погледајте <strong>[[:$1]]</strong> ако нисте сигурни да ли желите да је промените.\n[[$1|thumb]]",
        "filepageexists": "Страница с описом ове датотеке је већ направљена овде <strong>[[:$1]]</strong>, иако датотека не постоји.\nОпис који сте навели се неће појавити на страници с описом.\nДа би се ваш опис овде нашао, потребно је да га ручно измените.\n[[$1|thumb]]",
-       "fileexists-extension": "Ð\94аÑ\82оÑ\82ека Ñ\81а Ñ\81лиÑ\87ним Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð²ÐµÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и: [[$2|thumb]]\n* Ð\9dазив Ð´Ð°Ñ\82оÑ\82еке ÐºÐ¾Ñ\98Ñ\83 Ñ\88аÑ\99еÑ\82е: <strong>[[:$1]]</strong>\n* Ð\9dазив Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bе Ð´Ð°Ñ\82оÑ\82еке: <strong>[[:$2]]</strong>\nÐ\98забеÑ\80иÑ\82е Ð´Ñ\80Ñ\83гаÑ\87иÑ\98и Ð½Ð°Ð·Ð¸Ð².",
+       "fileexists-extension": "Ð\94аÑ\82оÑ\82ека Ñ\81а Ñ\81лиÑ\87ним Ð½Ð°Ð·Ð¸Ð²Ð¾Ð¼ Ð²ÐµÑ\9b Ð¿Ð¾Ñ\81Ñ\82оÑ\98и: [[$2|thumb]]\n* Ð\9dазив Ð´Ð°Ñ\82оÑ\82еке ÐºÐ¾Ñ\98Ñ\83 Ñ\88аÑ\99еÑ\82е: <strong>[[:$1]]</strong>\n* Ð\9dазив Ð¿Ð¾Ñ\81Ñ\82оÑ\98еÑ\9bе Ð´Ð°Ñ\82оÑ\82еке: <strong>[[:$2]]</strong>\nÐ\94а Ð»Ð¸ Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¿Ñ\80епознаÑ\82Ñ\99ивиÑ\98е Ð¸Ð¼Ðµ?",
        "fileexists-thumbnail-yes": "Изгледа да је датотека умањено издање слике ''(thumbnail)''.\n[[$1|thumb]]\nПроверите датотеку <strong>[[:$1]]</strong>.\nАко је проверена датотека иста слика оригиналне величине, није потребно слати додатну слику.",
        "file-thumbnail-no": "Датотека почиње са <strong>$1</strong>.\nИзгледа да се ради о умањеној слици ''(thumbnail)''.\nУколико имате ову слику у пуној величини, пошаљите је, а ако немате, промените назив датотеке.",
        "fileexists-forbidden": "Датотека с овим називом већ постоји и не може се заменити.\nАко и даље желите да пошаљете датотеку, вратите се и изаберите други назив.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Датотека с овим називом већ постоји у заједничкој остави.\nВратите се и пошаљите датотеку с другим називом.\n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Ово је дупликат {{PLURAL:$1|следеће датотеке|следећих датотека}}:",
        "file-deleted-duplicate": "Датотека истоветна овој ([[:$1]]) је претходно обрисана.\nПогледајте историју брисања пре поновног слања.",
+       "file-deleted-duplicate-notitle": "Датотека идентична овој претходно је обрисана и име јој је сакривено.\nТребали бисте питати некога ко може видети податке скривених датотека да прегледа ситуацију пре него што поново отпремите датотеку.",
        "uploadwarning": "Упозорење при отпремању",
        "uploadwarning-text": "Измените опис датотеке и покушајте поново.",
        "savefile": "Сачувај датотеку",
        "uploaddisabledtext": "Отпремање датотека је онемогућено.",
        "php-uploaddisabledtext": "Слање датотека је онемогућено у PHP-у.\nПроверите поставке file_uploads.",
        "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
+       "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
+       "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
+       "uploaded-hostile-svg": "Пронађен небезбедан CSS у стилском елементу постављене SVG датотеке.",
+       "uploaded-event-handler-on-svg": "Није дозвољено постављање атрибута који контролишу догађаје <code>$1=\"$2\"</code> у SVG датотекама.",
+       "uploaded-href-attribute-svg": "href атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> са нелокалном метом (нпр. http://, javascript:, итд) нису дозвољени у SVG датотекама.",
+       "uploaded-href-unsafe-target-svg": "Пронађен href са несигурном метом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
+       "uploaded-animate-svg": "Пронађена „animate“ ознака која можда мења href користећи се „from“ атрибутом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploadscriptednamespace": "Ова SVG датотека садржи погрешан именски простор „$1“",
        "uploadvirus": "Датотека садржи вирус!\nДетаљи: $1",
        "uploadjava": "Датотека је формата ZIP који садржи јава .class елемент.\nСлање јава датотека није дозвољено јер оне могу изазвати заобилажење сигурносних ограничења.",
        "log-description-contentmodel": "Догађаји који имају везу са моделима садржаја страница",
        "logentry-contentmodel-change": "$1 је {{GENDER:$2|променио|променила}} модел садржаја странице $3 из „$4“ у „$5“",
        "logentry-contentmodel-change-revertlink": "врати",
+       "logentry-contentmodel-change-revert": "врати",
        "protectlogpage": "Дневник закључавања",
        "protectlogtext": "Испод је списак заштићених страница.\nПогледајте [[Special:ProtectedPages|списак заштићених страница]] за више детаља.",
        "protectedarticle": "{{GENDER:|је заштитио|је заштитила}} „[[$1]]“",
        "special-characters-group-thai": "тајландски",
        "special-characters-group-lao": "лаоски",
        "special-characters-group-khmer": "кмерски",
+       "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
        "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
        "mw-widgets-titleinput-description-redirect": "преусмерава на $1"
 }
index 14a169c..f893bce 100644 (file)
        "content-model-text": "čist tekst",
        "content-model-javascript": "javaskript",
        "content-model-css": "CSS",
+       "duplicate-args-warning": "<strong>Upozorenje:</strong> [[:$1]] poziva [[:$2]] sa više vrednosti za parametar „$3“. Samo poslednja navedena vrednost će biti korišćena.",
        "expensive-parserfunction-warning": "'''Upozorenje:''' ova stranica sadrži previše poziva za raščlanjivanje.\n\nTrebalo bi da ima manje od $2 {{PLURAL:$2|poziv|poziva|poziva}}, a sada ima $1.",
        "expensive-parserfunction-category": "Stranice s previše poziva za raščlanjivanje",
        "post-expand-template-inclusion-warning": "'''Upozorenje:''' veličina uključenog šablona je prevelika.\nNeki šabloni neće biti uključeni.",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
        "search-suggest": "Da li ste mislili na: $1",
+       "search-rewritten": "Prikazani rezultati za $1. Ipak pretraži $2.",
        "search-interwiki-caption": "Bratski projekti",
        "search-interwiki-default": "Rezultati sa $1:",
        "search-interwiki-more": "(više)",
        "stub-threshold": "Prag za oblikovanje <a href=\"#\" class=\"stub\">veze kao klice</a> (u bajtovima):",
        "stub-threshold-disabled": "Onemogućeno",
        "recentchangesdays": "Broj dana u skorašnjim izmenama:",
-       "recentchangesdays-max": "(najviše $1 {{PLURAL:$1|dan|dana|dana}})",
+       "recentchangesdays-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "recentchangescount": "Broj izmena za prikaz:",
        "prefs-help-recentchangescount": "Podrazumeva skorašnje izmene, istorije stranica i dnevnike.",
        "prefs-help-watchlist-token2": "Ovo je tajni ključ za veb dovod vašeg spiska nadgledanja.\nSvako ko zna ovaj ključ biće u mogućnosti da vidi vaša nadgledanja stoga nemojte ga odavati nikome.\nAko je potrebno možete ga [[Special:ResetTokens|resetovati]].",
        "htmlform-cloner-create": "Dodaj još",
        "htmlform-cloner-delete": "Ukloni",
        "htmlform-cloner-required": "Bar jedna vrednost je potrebna.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ne postoji.",
+       "htmlform-user-not-valid": "<strong>$1</strong> nije ispravno korisničko ime.",
        "sqlite-has-fts": "$1 s podrškom pretrage celog teksta",
        "sqlite-no-fts": "$1 bez podrške pretrage celog teksta",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
        "special-characters-group-thai": "tajlandski",
        "special-characters-group-lao": "laoski",
        "special-characters-group-khmer": "kmerski",
+       "mw-widgets-dateinput-placeholder-day": "GGGG-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
        "mw-widgets-titleinput-description-new-page": "stranica još uvek ne postoji",
        "mw-widgets-titleinput-description-redirect": "preusmerava na $1"
 }
index dca2888..a32a5c4 100644 (file)
        "actionthrottled": "Åtgärden stoppades",
        "actionthrottledtext": "Som skydd mot spam finns det en begränsning av hur många gånger du kan utföra den här åtgärden under en viss tid. Du har överskridit den gränsen. Försök igen om några minuter.",
        "protectedpagetext": "Den här sidan har skrivskyddats för att förhindra redigering eller andra åtgärder.",
-       "viewsourcetext": "Du kan se och kopiera denna sidas källtext:",
-       "viewyourtext": "Du kan se och kopiera källan för '''dina redigeringar''' av denna sida:",
+       "viewsourcetext": "Du kan se och kopiera denna sidas källtext.",
+       "viewyourtext": "Du kan se och kopiera källan för <strong>dina redigeringar</strong> av denna sida.",
        "protectedinterface": "Denna sida innehåller text för mjukvarans gränssnitt på denna wiki, och är skrivskyddad för att förebygga missbruk.\nFör att lägga till eller ändra översättningar för alla wikis, var god använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "editinginterface": "<strong>Varning:</strong> Du redigerar en sida som används för texten i gränssnittet.\nÄndringar på denna sida kommer att påverka användargränssnittets utseende för andra användare på denna wiki.",
        "translateinterface": "För att lägga till eller ändra översättningar för alla wikis, använd [//translatewiki.net/ translatewiki.net], lokaliseringsprojektet för MediaWiki.",
        "search-category": "(kategorin $1)",
        "search-file-match": "(överensstämmer filens innehåll)",
        "search-suggest": "Menade du: $1",
+       "search-rewritten": "Visar resultat för $1. Sök istället efter $2.",
        "search-interwiki-caption": "Systerprojekt",
        "search-interwiki-default": "Resultat från $1:",
        "search-interwiki-more": "(mer)",
        "newpageletter": "N",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 bevakande {{PLURAL:$1|användare|användare}}]",
-       "rc_categories": "Begränsa till följande kategorier (separera med \"|\")",
-       "rc_categories_any": "Vilken som helst",
+       "rc_categories": "Begränsa till följande kategorier (separera med \"|\"):",
+       "rc_categories_any": "Någon av de valda",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte}} efter ändring",
        "newsectionsummary": "/* $1 */ nytt avsnitt",
        "rc-enhanced-expand": "Visa detaljer",
        "watchlistanontext": "Du måste logga in för att se eller redigera din bevakningslista.",
        "watchnologin": "Inte inloggad",
        "addwatch": "Lägg till i bevakningslistan",
-       "addedwatchtext": "Sidan \"[[:$1]]\" har lagts till på din [[Special:Watchlist|bevakningslista]].\nFramtida ändringar av den här sidan och dess diskussionssida kommer att listas där.",
+       "addedwatchtext": "\"[[:$1]]\" har lagts till i din [[Special:Watchlist|bevakningslista]].",
        "addedwatchtext-short": "Sidan \"$1\" har lagts till i din bevakningslista.",
        "removewatch": "Ta bort från bevakningslistan",
-       "removedwatchtext": "Sidan \"[[:$1]]\" har tagits bort från [[Special:Watchlist|din bevakningslista]].",
+       "removedwatchtext": "\"[[:$1]]\" och dess diskussionssida har tagits bort från [[Special:Watchlist|din bevakningslista]].",
        "removedwatchtext-short": "Sidan \"$1\" har tagits bort från din bevakningslista.",
        "watch": "Bevaka",
        "watchthispage": "Bevaka denna sida",
        "pageinfo-watchers": "Antal användare som bevakar sidan",
        "pageinfo-visiting-watchers": "Antalet sidbevakare som har besökt senaste ändringar",
        "pageinfo-few-watchers": "Färre än $1 {{PLURAL:$1|bevakare}}",
+       "pageinfo-few-visiting-watchers": "Det kan finnas någon bevakande användare som granskar nyliga redigeringar",
        "pageinfo-redirects-name": "Antal omdirigeringar till denna sida",
        "pageinfo-subpages-name": "Undersidor till denna sida",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringar}}; $3 {{PLURAL:$3|icke-omdirigering|icke-omdirigeringar}})",
        "special-characters-title-endash": "tankstreck",
        "special-characters-title-emdash": "långt tankstreck",
        "special-characters-title-minus": "minustecken",
+       "mw-widgets-dateinput-no-date": "Inget valt datum",
+       "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
+       "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "sidan existerar inte ännu",
        "mw-widgets-titleinput-description-redirect": "omdirigerar till $1"
 }
index 093635c..a14238c 100644 (file)
@@ -39,7 +39,8 @@
                        "Macofe",
                        "AntanO",
                        "கலைவாணன்",
-                       "Mohammed Ammar"
+                       "Mohammed Ammar",
+                       "Shrikarsan"
                ]
        },
        "tog-underline": "இணைப்புகளுக்கு அடிக்கோடிடு",
        "tooltip-pt-logout": "விடுபதிகை",
        "tooltip-pt-createaccount": "நீங்கள் ஒரு பயனர் கணக்கைத் துவங்கி உள்புக வரவேற்கப்படுகிறீர்கள்; எனினும் இது கட்டாயம் அல்ல.",
        "tooltip-ca-talk": "உள்ளடக்கப் பக்கம் தொடர்பான உரையாடல் பக்கம்",
-       "tooltip-ca-edit": "நà¯\80à®\99à¯\8dà®\95ளà¯\8d à®\87பà¯\8dபà®\95à¯\8dà®\95தà¯\8dதà¯\88தà¯\8d à®¤à¯\8aà®\95à¯\81à®\95à¯\8dà®\95 à®®à¯\81à®\9fியà¯\81à®®à¯\8d. \"à®®à¯\81னà¯\8dதà¯\8bà®±à¯\8dறமà¯\8d à®\95ாà®\9fà¯\8dà®\9fà¯\81\" à®ªà¯\8aதà¯\8dதானà¯\88பà¯\8d à®ªà®¯à®©à¯\8dபà®\9fà¯\81தà¯\8dதிய à®ªà®¿à®©à¯\8dனரà¯\8d à®\89à®\99à¯\8dà®\95ளà¯\8d à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளà¯\88 à®\9aà¯\87மிà®\95à¯\8dà®\95வà¯\81à®®à¯\8d.",
+       "tooltip-ca-edit": "à®\87பà¯\8dபà®\95à¯\8dà®\95தà¯\8dதà¯\88தà¯\8d à®¤à¯\8aà®\95à¯\81",
        "tooltip-ca-addsection": "புதிய பகுதியைத் தொடங்கு",
        "tooltip-ca-viewsource": "இப்பக்கம் காக்கப்பட்டுள்ளது. நீங்கள் இதன் மூலத்தைப் பார்க்கலாம்.",
        "tooltip-ca-history": "இப்பக்கத்தின் பழைய பதிப்புகள்.",
index 338fa0b..5ae0a43 100644 (file)
        "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
+       "mw-widgets-dateinput-placeholder-month": "TTTT-BB"
 }
index e34fc5c..b3b7537 100644 (file)
        "logentry-move-move_redir": "$1, $3 sayfasını $4 sayfasına yönlendirme üzerinden {{GENDER:$2|taşıdı}}",
        "logentry-move-move_redir-noredirect": "$1, $3 sayfasını bir yönlendirme üzerine yönlendirme bırakmadan $4 olarak {{GENDER:$2|taşıdı}}",
        "logentry-patrol-patrol": "$1, $3 sayfasının $4 revizyonunu kontrol edildi olarak {{GENDER:$2|işaretledi}}",
-       "logentry-patrol-patrol-auto": "$1, $3 sayfasının $4 sürümümü otomatik olarak {{GENDER:$2|kontrol etti}}",
+       "logentry-patrol-patrol-auto": "$1, $3 sayfasının $4 sürümünü otomatik olarak {{GENDER:$2|kontrol etti}}",
        "logentry-newusers-newusers": "Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}",
        "logentry-newusers-create": "Kullanıcı hesabı $1 {{GENDER:$2|oluşturuldu}}",
        "logentry-newusers-create2": "$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}}",
index 226f6fd..2605791 100644 (file)
        "mergelog": "Берләштерүләр көндәлеге",
        "revertmerge": "Бүлү",
        "history-title": "$1 битенең үзгәртү тарихы",
-       "difference-title": "$1 — юрамалар арасындагы аермалар",
+       "difference-title": "«$1» битенең юрамалары арасындагы аермалар",
        "lineno": "$1 юл:",
        "compareselectedversions": "Сайланган юрамаларны чагыштыру",
        "showhideselectedversions": "Сайланган юрамаларны күрсәтү/яшерү",
        "revdelete-uname-unhid": "кулланучының исеме ачылган",
        "revdelete-restricted": "чикләүләр идарәчеләргә дә кулланыла",
        "revdelete-unrestricted": "чикләүләр идарәчеләр өчен бетерелгән",
-       "logentry-move-move": "$1 {{GENDER:$2|итеп күчерде}} $3 сәхифәсен $4",
-       "logentry-move-move-noredirect": "$1 $3 сәхифәсен $4 итеп үзгәртте һәм юнәлтүне калдырмады",
-       "logentry-move-move_redir": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте",
-       "logentry-move-move_redir-noredirect": "$1 $3 сәхифәсен $4 юнәлтү аша үзгәртте һәм юнәлтүне калдырмады",
+       "logentry-move-move": "$1 $3 сәхифәсен $4 {{GENDER:$2|итеп күчерде}}",
+       "logentry-move-move-noredirect": "$1 юнәлтү калдырмыйча $3 сәхифәсен $4 итеп күчерде",
+       "logentry-move-move_redir": "$1 юнәлтү аша $3 сәхифәсен $4 итеп күчерде",
+       "logentry-move-move_redir-noredirect": "$1 юнәлтү аша, юнәлтү калдырмыйча $3 сәхифәсен $4 итеп күчерде",
        "logentry-patrol-patrol": "$1 $3 мәкаләсенең  $4 санлы версиясен тикшерде",
        "logentry-patrol-patrol-auto": "$1 $3 мәкаләсенең $4 санлы версиясен автоматик рәвештә тикшерде",
        "logentry-newusers-newusers": "$1 кулланучының хисап язмасын төзеде",
index 3eb7b98..18593be 100644 (file)
@@ -95,7 +95,7 @@
        "tog-watchlisthideminor": "Приховати незначні редагування у списку спостереження",
        "tog-watchlisthideliu": "Приховати редагування зареєстрованих дописувачів у списку спостереження",
        "tog-watchlisthideanons": "Приховати редагування анонімних користувачів у списку спостереження",
-       "tog-watchlisthidepatrolled": "Приховати відпатрульовані правки у списку спостереження",
+       "tog-watchlisthidepatrolled": "Приховати відпатрульовані редагування у списку спостереження",
        "tog-ccmeonemails": "Надсилати мені копії листів, які я надсилаю іншим користувачам",
        "tog-diffonly": "Не показувати вміст сторінки під різницею версій",
        "tog-showhiddencats": "Показувати приховані категорії",
        "showpreview": "Попередній перегляд",
        "showdiff": "Показати зміни",
        "blankarticle": "'''Попередження:''' Створена вами сторінка порожня.\nЯкщо Ви знову натиснете «{{int:savearticle}}», сторінку буде створено без вмісту.",
-       "anoneditwarning": "<strong>Увага!</strong> Ð\92и Ð½Ðµ Ð°Ð²Ñ\82оÑ\80изÑ\83валиÑ\81Ñ\8f Ð½Ð° Ñ\81айÑ\82Ñ\96. Ð\92аÑ\88а IP-адÑ\80еÑ\81а Ð±Ñ\83де Ð¿Ñ\83блÑ\96Ñ\87но Ð²Ð¸Ð´Ð¸Ð¼Ð°, Ñ\8fкÑ\89о Ð²Ð¸ Ð±Ñ\83деÑ\82е Ð²Ð½Ð¾Ñ\81иÑ\82и Ð±Ñ\83дÑ\8c\8fкÑ\96 Ð¿Ñ\80авки. Ð¯ÐºÑ\89о Ð²Ð¸ <strong>[$1 Ñ\83вÑ\96йдеÑ\82е]</strong> Ð°Ð±Ð¾ <strong>[$2 Ñ\81Ñ\82воÑ\80иÑ\82е Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81]</strong>, Ð¿Ñ\80авки Ð·Ð°Ð¼Ñ\96Ñ\81Ñ\82Ñ\8c Ñ\86Ñ\8cого Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð¿Ð¾Ð²'Ñ\8fзанÑ\96 Ð· Ð²Ð°Ñ\88им Ñ\96м'Ñ\8fм ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а, Ð° Ñ\82акож Ñ\83 Ð²ас з'являться інші переваги.",
+       "anoneditwarning": "<strong>Увага!</strong> Ð\92и Ð½Ðµ Ð°Ð²Ñ\82оÑ\80изÑ\83валиÑ\81Ñ\8f Ð½Ð° Ñ\81айÑ\82Ñ\96. Ð\92аÑ\88а IP-адÑ\80еÑ\81а Ð±Ñ\83де Ð¿Ñ\83блÑ\96Ñ\87но Ð²Ð¸Ð´Ð¸Ð¼Ð°, Ñ\8fкÑ\89о Ð\92и Ð±Ñ\83деÑ\82е Ð²Ð½Ð¾Ñ\81иÑ\82и Ð±Ñ\83дÑ\8c\8fкÑ\96 Ñ\80едагÑ\83ваннÑ\8f. Ð¯ÐºÑ\89о Ð\92и <strong>[$1 Ñ\83вÑ\96йдеÑ\82е]</strong> Ð°Ð±Ð¾ <strong>[$2 Ñ\81Ñ\82воÑ\80иÑ\82е Ð¾Ð±Ð»Ñ\96ковий Ð·Ð°Ð¿Ð¸Ñ\81]</strong>, Ñ\80едагÑ\83ваннÑ\8f Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð½Ð°Ñ\82омÑ\96Ñ\81Ñ\82Ñ\8c Ð¿Ð¾Ð²'Ñ\8fзанÑ\96 Ð· Ð\92аÑ\88им Ñ\96менем ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а, Ð° Ñ\89е Ñ\83 Ð\92ас з'являться інші переваги.",
        "anonpreviewwarning": "''Ви не увійшли в систему. Якщо ви виконаєте збереження, то в історію сторінки буде записана ваша IP-адреса.''",
        "missingsummary": "'''Нагадування''': Ви не дали короткого опису змін.\nНатиснувши кнопку «Зберегти» ще раз, ви збережете зміни без коментаря.",
        "selfredirect": "<strong>Попередження:</strong> Ви створюєте перенаправлення на цю ж сторінку.\nВи могли вказати невірну цільову сторінку, або ж редагуєте хибну сторінку.\nЯкщо Ви натиснете \"{{int:savearticle}}\" ще раз, перенаправлення буде створено.",
        "blockedtext": "'''Ваш обліковий запис або IP-адреса заблоковані.'''\n\nБлокування виконане адміністратором $1.\nЗазначена наступна причина: ''$2''.\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністратору, якщо ви не зареєстровані або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте ці дані у своїх запитах.",
        "autoblockedtext": "Ваша IP-адреса автоматично заблокована у зв'язку з тим, що вона раніше використовувалася кимось із заблокованих користувачів. Адміністратор ($1), що її заблокував, зазначив наступну причину блокування:\n\n:''$2''\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Блокування виконав: $7\n\nВи можете надіслати листа користувачеві $1 або будь-якому іншому [[{{MediaWiki:Grouppage-sysop}}|адміністратору]], щоб обговорити блокування.\n\nЗверніть увагу, що ви не зможете надіслати листа адміністраторові, якщо ви не зареєстровані у проекті або не підтвердили свою електронну адресу в [[Special:Preferences|особистих налаштуваннях]], а також якщо вам було заборонено надсилати листи при блокуванні.\n\nВаша поточна IP-адреса — $3, ідентифікатор блокування — #$5. Будь ласка, зазначайте його у своїх запитах.",
        "blockednoreason": "не вказано причини",
-       "whitelistedittext": "Ви повинні $1 щоб редагувати сторінки.",
+       "whitelistedittext": "Ви повинні $1, щоб редагувати сторінки.",
        "confirmedittext": "Ви повинні підтвердити вашу адресу електронної пошти перед редагуванням сторінок.\nБудь-ласка вкажіть і підтвердіть вашу електронну адресу на [[Special:Preferences|сторінці налаштувань]].",
        "nosuchsectiontitle": "Не вдається знайти розділ",
        "nosuchsectiontext": "Ви намагаєтесь редагувати розділ, якого не існує.\nМожливо, він був перейменований або вилучений, поки ви переглядали сторінку.",
        "session_fail_preview": "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.\nЯкщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову.'''",
        "session_fail_preview_html": "<strong>Вибачте! Неможливо зберегти ваші зміни через втрату даних HTML-сесії.</strong>\n\n''Оскільки {{SITENAME}} дозволяє використовувати чистий HTML, попередній перегляд відключено, щоб попередити JavaScript-атаки.''\n\n<strong>Якщо це легітимна спроба редагування, будь ласка, спробуйте ще раз. Якщо не вийде знову, — спробуйте [[Special:UserLogout|завершити сеанс роботи]] й ще раз ввійти до системи.</strong>",
        "token_suffix_mismatch": "'''Ваше редагування було відхилене, оскільки ваша програма неправильно обробляє знаки пунктуації у вікні редагування. Редагування було скасоване для запобігання спотворенню тексту статті.\nПодібні проблеми можуть виникати при використанні анонімізуючих веб-проксі, що містять помилки.'''",
-       "edit_form_incomplete": "'''Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені ваші правки і спробуйте ще раз.'''",
+       "edit_form_incomplete": "<strong>Частина даних із форми редагування не досягла сервера. Уважно перевірте, чи не пошкоджені Ваші редагування і спробуйте ще раз.</strong>",
        "editing": "Редагування $1",
        "creating": "Створення $1",
        "editingsection": "Редагування $1 (розділ)",
        "undo-norev": "Редагування не може бути скасоване, бо його не існує або було вилучено.",
        "undo-nochange": "Схоже, редагування вже було скасовано.",
        "undo-summary": "Скасування редагування № $1 користувача [[Special:Contribs/$2|$2]] ([[User talk:$2|обговорення]])",
-       "undo-summary-username-hidden": "СкаÑ\81Ñ\83ваÑ\82и Ð¿Ñ\80авкÑ\83 $1, виконану прихованим користувачем",
+       "undo-summary-username-hidden": "СкаÑ\81Ñ\83ваÑ\82и Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e $1, виконану прихованим користувачем",
        "cantcreateaccounttitle": "Неможливо створити обліковий запис",
        "cantcreateaccount-text": "Створення облікових записів із цієї IP-адреси ('''$1''') було заблоковане [[User:$3|користувачем $3]].\n\n$3 зазначив таку причину: ''$2''",
        "cantcreateaccount-range-text": "Створення облікового запису із IP-адрес у діапазоні  '''$1''', який включає вашу IP-адресу ('''$4'''), було заблоковано користувачем [[User:$3|$3]].\n\nКористувач $3 вказав як причину ''$2''",
        "revdelete-selected-text": "{{PLURAL:$1|Вибрана редакція|Вибрані редакції}} із [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Вибрана версія файлу|Вибрані версії файлу}} із [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|1=Обраний запис|Обрані записи}} журналу:",
-       "revdelete-text-text": "Видалені версії будуть як і раніше, показані в історії сторінки, але частини їх вмісту будуть недоступні для учасників.",
-       "revdelete-text-file": "Видалені версії файлу будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для учасників.",
-       "logdelete-text": "Ð\92идаленÑ\96 Ð¿Ð¾Ð´Ñ\96Ñ\97 Ð² Ð¶Ñ\83Ñ\80налÑ\96 Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ñ\8fк Ñ\96 Ñ\80анÑ\96Ñ\88е Ð²Ð¸Ð´Ð½Ð¾ Ð² Ð¶Ñ\83Ñ\80налаÑ\85, Ð°Ð»Ðµ Ñ\87аÑ\81Ñ\82ини Ñ\97Ñ\85 Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð»Ñ\8f Ñ\83Ñ\87аÑ\81никÑ\96в.",
+       "revdelete-text-text": "Видалені версії будуть, як і раніше, показані в історії сторінки, але частини їх вмісту будуть недоступні для загалу.",
+       "revdelete-text-file": "Видалені версії файлу будуть як і раніше видно в історії сторінки, але їх частини вмісту будуть доступні для загалу.",
+       "logdelete-text": "Ð\86нÑ\84оÑ\80маÑ\86Ñ\96Ñ\8f Ð¿Ñ\80о Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ñ\96 Ð¿Ð¾Ð´Ñ\96Ñ\97 Ð±Ñ\83де, Ñ\8fк Ñ\96 Ñ\80анÑ\96Ñ\88е, Ð²Ð¸Ð´Ð¸Ð¼Ð° Ð² Ð¶Ñ\83Ñ\80налаÑ\85, Ð°Ð»Ðµ Ñ\87аÑ\81Ñ\82ина Ñ\97Ñ\85 Ñ\82екÑ\81Ñ\82Ñ\83 Ð±Ñ\83де Ð½ÐµÐ´Ð¾Ñ\81Ñ\82Ñ\83пна Ð´Ð»Ñ\8f Ð·Ð°Ð³Ð°Ð»Ñ\83.",
        "revdelete-text-others": "Інші адміністратори, як і раніше, будуть мати можливість доступу до прихованого вмісту і зможуть відновити його, якщо не встановлено додаткові обмеження.",
        "revdelete-confirm": "Будь ласка, підтвердіть, що ви справді бажаєте це здійснити, що усвідомлюєте наслідки та робите це згідно з [[{{MediaWiki:Policy-url}}|правилами]].",
        "revdelete-suppress-text": "Приховування може відбуватися '''лише''' в таких випадках:\n* Потенційно наклепницькі відомості\n* Недоречна особиста інформація\n*: ''домашні адреси, номери телефонів, номер паспорта тощо.''",
        "showhideselectedversions": "Показати/приховати обрані версії",
        "editundo": "скасувати",
        "diff-empty": "(Немає відмінностей)",
-       "diff-multi-sameuser": "(не {{PLURAL:$1|показано Ð¾Ð´Ð½Ñ\83 Ð¿Ñ\80омÑ\96жнÑ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показано $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ñ\86Ñ\8cого Ñ\83Ñ\87аÑ\81ника)",
-       "diff-multi-otherusers": "(не {{PLURAL:$1|показана $1 Ð¿Ñ\80омÑ\96жна Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|показано $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} {{PLURAL:$2|Ñ\89е Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñ\83Ñ\87аÑ\81ника|$2 Ñ\83Ñ\87аÑ\81ників}})",
+       "diff-multi-sameuser": "(Ð\9dе {{PLURAL:$1|показано Ð¾Ð´Ð½Ñ\83 Ð¿Ñ\80омÑ\96жнÑ\83 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8e|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показано $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} Ñ\86Ñ\8cого ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а)",
+       "diff-multi-otherusers": "(Ð\9dе {{PLURAL:$1|показана $1 Ð¿Ñ\80омÑ\96жна Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f|показано $1 Ð¿Ñ\80омÑ\96жнÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97|показанÑ\96 $1 Ð¿Ñ\80омÑ\96жниÑ\85 Ð²ÐµÑ\80Ñ\81Ñ\96й}} {{PLURAL:$2|Ñ\89е Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87а|$2 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ів}})",
        "diff-multi-manyusers": "({{PLURAL:$1|не показана $1 проміжна версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|1=$1 користувачем|$2 користувачами}})",
        "difference-missing-revision": "{{PLURAL:$2|$2 версія|$2 версії|$2 версій}} для цього порівняння ($1) не {{PLURAL:$2|1=знайдена|знайдені}}.\n\nІмовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.\nПодробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].",
        "searchresults": "Результати пошуку",
        "boteditletter": "б",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|користувач спостерігає|користувачі спостерігають|користувачів спостерігають}}]",
-       "rc_categories": "ТÑ\96лÑ\8cки Ð· ÐºÐ°Ñ\82егоÑ\80Ñ\96й (Ñ\80аздÑ\96лÑ\8eваÑ\87 Â«|»)",
-       "rc_categories_any": "Ð\91Ñ\83дÑ\8c\8fкий",
+       "rc_categories": "ТÑ\96лÑ\8cки Ð· ÐºÐ°Ñ\82егоÑ\80Ñ\96й (Ñ\80оздÑ\96лÑ\8eваÑ\87 Â«|»):",
+       "rc_categories_any": "Ð\91Ñ\83дÑ\8c\8fка Ð· Ð¾Ð±Ñ\80аниÑ\85",
        "rc-change-size": "$1",
        "rc-change-size-new": "Розмір після зміни: $1 {{PLURAL:$1|байт|байти|байтів}}",
        "newsectionsummary": "/* $1 */ нова тема",
        "listgrouprights-removegroup-self-all": "може вилучати всі групи зі свого облікового запису",
        "listgrouprights-namespaceprotection-header": "Обмеження простору назв",
        "listgrouprights-namespaceprotection-namespace": "Простір назв",
-       "listgrouprights-namespaceprotection-restrictedto": "Права, що дозволяють учаснику редагувати",
+       "listgrouprights-namespaceprotection-restrictedto": "Права, що дозволяють користувачу редагувати",
        "trackingcategories": "Відстежувані категорії",
-       "trackingcategories-summary": "На цій сторінці перераховані відстежують категорії, які заповнюються автоматично програмним забезпеченням MediaWiki. Їх можна перейменувати, змінивши відповідні системні повідомлення в просторі імен {{ns:8}}.",
+       "trackingcategories-summary": "На цій сторінці перераховані відстежують категорії, які заповнюються автоматично програмним забезпеченням MediaWiki. Їх можна перейменувати, змінивши відповідні системні повідомлення в просторі назв {{ns:8}}.",
        "trackingcategories-msg": "Відстежувана категорія",
        "trackingcategories-name": "Ім'я повідомлення",
        "trackingcategories-desc": "Критерій включення в категорію",
        "noindex-category-desc": "Сторінка не індексується пошуковими роботами, тому що на ній є «чарівне слово» <code><nowiki>__NOINDEX__</nowiki></code>, і вона знаходиться в просторі імен, де дозволений цей прапор).",
-       "index-category-desc": "На сторінці є «чарівне слово» <nowiki>__INDEX__</nowiki> (і сторінка знаходиться в просторі імен, де дозволений цей прапор), тому вона індексуються пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
+       "index-category-desc": "На сторінці є «чарівне слово» <code><nowiki>__INDEX__</nowiki></code> (і сторінка знаходиться в просторі назв, де дозволений цей прапор), тому вона індексується пошуковими роботами в тих випадках, коли цього зазвичай не відбувається.",
        "post-expand-template-inclusion-category-desc": "Розмір сторінки стане більший за <code>$wgMaxArticleSize</code> після показу всіх шаблонів, тому деякі з них не були показані повністю.",
        "post-expand-template-argument-category-desc": "Сторінка стане більшою за <code>$wgMaxArticleSize</code> після розкриття аргументу шаблона (що-небудь в потрійних фігурних дужках, наприклад, <code>{{{Foo}}})</code>).",
        "expensive-parserfunction-category-desc": "На сторінці також використовується занадто багато ресурсомістких функцій (таких, як <code>#ifexist</code>). Детальніше - на сторінці [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "import-error-special": "Сторінку «$1» не було імпортовано, оскільки вона належить до особливого простору назв, що не дозволяє створення сторінок.",
        "import-error-invalid": "Сторінку «$1» не було імпортовано, оскільки назва, у яку вона імпортується, неприпустима у цій вікі.",
        "import-error-unserialize": "Версія $2 сторінки «$1» не може бути деструктурованою (десеріалізованою). Отримано повідомлення, що у цій версії використано модель $3 сериалізована як $4.",
-       "import-error-bad-location": "Ð\9fÑ\80авка $2, що використовує модель вмісту $3, не може бути збережена у «$1» цієї вікі, тому що ця модель не підтримується на цій сторінці.",
+       "import-error-bad-location": "Ð\92еÑ\80Ñ\81Ñ\96Ñ\8f $2, що використовує модель вмісту $3, не може бути збережена у «$1» цієї вікі, тому що ця модель не підтримується на цій сторінці.",
        "import-options-wrong": "{{PLURAL:$2|1=Неправильна опція|Неправильні опції}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Вказана некоректна назва кореневої сторінки",
        "import-rootpage-nosubpage": "В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки",
        "pageinfo-firstuser": "Створив сторінку",
        "pageinfo-firsttime": "Дата створення сторінки",
        "pageinfo-lastuser": "Останній редактор",
-       "pageinfo-lasttime": "Дата останньої правки",
+       "pageinfo-lasttime": "Дата останнього редагування",
        "pageinfo-edits": "Загальна кількість редагувань",
        "pageinfo-authors": "Загальна кількість унікальних авторів",
        "pageinfo-recent-edits": "Кількість поточних редагувань в історії (протягом $1)",
        "special-characters-title-endash": "коротке тире",
        "special-characters-title-emdash": "довге тире",
        "special-characters-title-minus": "мінус",
+       "mw-widgets-dateinput-no-date": "Дати не вибрано",
+       "mw-widgets-dateinput-placeholder-day": "РРРР-ММ-ДД",
+       "mw-widgets-dateinput-placeholder-month": "РРРР-ММ",
        "mw-widgets-titleinput-description-new-page": "сторінка ще не існує",
        "mw-widgets-titleinput-description-redirect": "перенаправлення на $1"
 }
index df2b2ba..8f009ca 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "special-characters-title-endash": "lineeta ene",
        "special-characters-title-emdash": "lineeta eme",
-       "special-characters-title-minus": "segno meno"
+       "special-characters-title-minus": "segno meno",
+       "mw-widgets-dateinput-placeholder-day": "AAAA-MM-GG",
+       "mw-widgets-dateinput-placeholder-month": "AAAA-MM"
 }
index c8155da..027eb74 100644 (file)
        "passwordreset": "igreset an tigaman-hit-pagsulod",
        "passwordreset-text-one": "Kompletoha ini nga porma paramakareset hin imo tigaman-panakob.",
        "passwordreset-text-many": "{{PLURAL:$1|Butanga it usa nga mga surodlan basi makakarawat ko hin temporaryo nga tigaman-pansulod pinaagi ha email.}}",
-       "passwordreset-legend": "igreset an tigaman-hit-pagsulod",
        "passwordreset-disabled": "Waray ginpaandar an password reset hini nga wiki.",
        "passwordreset-emaildisabled": "Mga mga higamit ha email in waray pinaandar hini nga wiki.",
        "passwordreset-username": "Agnay hiton gumaramit:",
        "resettokens": "Igrest an mga token",
        "resettokens-text": "Puydi nimo mareset an mga token para makahatag hin pipira nga pribado nga datos nga may pakahisumpay ha imo akawnt dinhi.\nKinahanglan mo ini buhaton kun aksidenti nim nasaro hira ha iba nga tawo o an imo akawnt in nakompromiso.",
        "resettokens-no-tokens": "Waray token nga marereset.",
-       "resettokens-legend": "Igreset an mga token",
        "resettokens-tokens": "Mga token:",
        "resettokens-token-label": "$1 (yana nga balor: $2)",
        "resettokens-watchlist-token": "Token para han web feed (Atom/RSS) han[[Special:Watchlist|mga pagbag-o ha imo pakli han talaan-barantayon]]",
        "preview": "Pahiuna nga pagawas",
        "showpreview": "Pakit-a an pahiuna nga pagawas",
        "showdiff": "Igpakita an mga ginliwat",
-       "anoneditwarning": "'''Pahimatngon:''' Diri ka pa naka log-in.\nAn imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
+       "anoneditwarning": "<strong>Pahimatngon:</strong> Diri ka nakalog-in. An imo IP address in makikit-an han publiko kun magbuhat ka hin mga pagliwat. Kun ikaw in <strong>[$1 maglog-in]</strong> o <strong>[$2 maghimo hin account]</strong>, an imo mga pagliwat in maa-attribute ha imo agnay-hit-gumaramit, upod han pipira pa nga mga benepisyo.",
        "anonpreviewwarning": "''Diri ka naka-log in.  Mahisusurat an imo IP address ngada ha kanan pakli kaagi hit pagliwat kun igtipig nimo.''",
        "missingsummary": "<strong>Pahinumdom:</strong> Waray ka humatag hin halipotay nga masisiring hiton pagliwat. Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
        "missingcommenttext": "Alayon pagbutang hin komento ha ilarom.",
        "action-userrights": "Igliwat an ngatanan nga mga katungod han gumaramit",
        "action-sendemail": "Padara hin mga e-mail",
        "nchanges": "$1 {{PLURAL:$1|pagbag-o|mga pagbabag-o}}",
+       "enhancedrc-history": "kasaysayan",
        "recentchanges": "Mga kabag-ohan",
        "recentchanges-legend": "Mga pirilion han mga lab-as nga pagbag-o",
        "recentchanges-summary": "Nasubay han pinakalab-as nga pagbag-o ha wiki dinhi nga pakli.",
        "recentchanges-label-minor": "Gutiay ini nga pagliwat",
        "recentchanges-label-bot": "Ini nga pagliwat in ginbuhat han bot",
        "recentchanges-label-unpatrolled": "Ini nga pagliwat in diri pa nakapatrol",
+       "recentchanges-label-plusminus": "An kadako han pakli in nabag-o hin ini nga numero nga mga byte",
+       "recentchanges-legend-heading": "'''Leyenda:'''",
        "rcnotefrom": "An ha ubos in mga pagbabag-o tikang han <strong>$2</strong> (kutob ngadto ha <strong>$1</strong> nga ginpakita).",
        "rclistfrom": "Pakit-a an mga ginbag-ohan tikang han $3 $2",
        "rcshowhideminor": "$1 gudti nga mga pagliwat",
        "newpageletter": "B",
        "boteditletter": "b",
        "rc_categories_any": "Bisan ano nga",
+       "rc-change-size-new": "$1 {{PLURAL:$1|nga byte|nga mga byte}} kahuman han pagbag-o",
        "newsectionsummary": "/* $1 */ bag-o nga bahin",
        "rc-enhanced-expand": "Igpakita an detalye",
        "rc-enhanced-hide": "Igtago an mga detalye",
        "nlinks": "$1 {{PLURAL:$1|nga sumpay|nga mga sumpay}}",
        "nmembers": "$1 {{PLURAL:$1|nga api|nga mga api}}",
        "nrevisions": "$1 {{PLURAL:$1|nga pagliwat|nga mga pagliwat}}",
-       "nviews": "$1 {{PLURAL:$1|nga pangita|nga mga pangita}}",
        "nimagelinks": "Gingamit ha $1 {{PLURAL:$1|nga pakli|nga mga pakli}}",
        "ntransclusions": "gingamit ha $1 {{PLURAL:$1|nga pakli|nga mga pakli}}",
        "specialpage-empty": "Waray mga resulta para hini nga report.",
        "tooltip-pt-mycontris": "Talaan han imo mga ámot",
        "tooltip-pt-login": "Gin-aaghat ka nga mag log-in, pero diri ini ginpipirit.",
        "tooltip-pt-logout": "gawas",
+       "tooltip-pt-createaccount": "Ginaag-hat ka nga maghimo hin account ngan maglog-in; pero diri ini mandatorya",
        "tooltip-ca-talk": "Hiruhimangraw mahiunong han sulod nga pakli",
-       "tooltip-ca-edit": "Puydi ka makaliwat hini nga pakli.  Alayon la paggamit han pahiuna nga paggawas nga piridlitan san-o an pagtipig",
+       "tooltip-ca-edit": "Igliwat ini nga pakli",
        "tooltip-ca-addsection": "Pagtikang hin bag-o nga bahin",
        "tooltip-ca-viewsource": "Ini nga pakli in pinaliporan.\nMakikit-an nimo an ginkuhaaan",
        "tooltip-ca-history": "Mga kahadto nga mga pagliwat hini nga pakli",
index db366ac..840b50e 100644 (file)
        "search-category": "(קאטעגאריע $1)",
        "search-file-match": "(פאסט צו טעקע אינהאלט)",
        "search-suggest": "צי האט איר געמיינט: $1",
+       "search-rewritten": "רעזולטאטן וועגן $1 ווערן געוויזן. איר קענט אויך זוכן $2.",
        "search-interwiki-caption": "שוועסטער פראיעקטן",
        "search-interwiki-default": "רעזולטאטן פון $1:",
        "search-interwiki-more": "(נאך)",
index 4be54ad..2006ec4 100644 (file)
        "newpageletter": "新",
        "boteditletter": "机",
        "number_of_watching_users_pageview": "[$1个关注用户]",
-       "rc_categories": "分类限制(用“|”分隔)",
-       "rc_categories_any": "任",
+       "rc_categories": "分类限制(用“|”分隔)",
+       "rc_categories_any": "任何选择的",
        "rc-change-size-new": "更改后有$1字节",
        "newsectionsummary": "/* $1 */ 新段落",
        "rc-enhanced-expand": "显示细节",
        "scarytranscludefailed": "[提取$1失败]",
        "scarytranscludefailed-httpstatus": "[模板$1读取失败:HTTP $2]",
        "scarytranscludetoolong": "[URL过长]",
-       "deletedwhileediting": "'''警告''':此页在您开始编辑之后已经被删除!",
+       "deletedwhileediting": "<strong>警告:</strong>此页在您开始编辑之后已经被删除!",
        "confirmrecreate": "在您开始编辑这个页面后,用户[[User:$1|$1]] ([[User talk:$1|讨论]])以下列原因删除了这个页面:\n: ''$2''\n请确认在您重新创建页面前三思。",
        "confirmrecreate-noreason": "用户 [[User:$1|$1]]([[User talk:$1|talk]]) 在您开始编辑之后删除此页面。请确认您确实要重新创建此页面。",
        "recreate": "重新创建",
        "special-characters-title-endash": "短划线",
        "special-characters-title-emdash": "长划线",
        "special-characters-title-minus": "减号",
+       "mw-widgets-dateinput-no-date": "没有选定日期",
        "mw-widgets-titleinput-description-new-page": "页面不存在",
        "mw-widgets-titleinput-description-redirect": "重定向至$1"
 }
index bc61235..37d03db 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** South Azerbaijani (تورکجه)
+/** South Azerbaijani (تۆرکجه)
  *
  * To improve a translation please visit https://translatewiki.net
  *
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 1d7a1ce..a338ff0 100644 (file)
@@ -22,7 +22,6 @@
                                "name": "General",
                                "classes": [
                                        "mw.Title",
-                                       "mw.Upload*",
                                        "mw.Uri",
                                        "mw.RegExp",
                                        "mw.messagePoster.*",
@@ -59,8 +58,8 @@
                        {
                                "name": "Interfaces",
                                "classes": [
-                                       "mw.Feedback",
-                                       "mw.Feedback.Dialog"
+                                       "mw.Feedback*",
+                                       "mw.Upload*"
                                ]
                        },
                        {
index fca839d..2c42364 100644 (file)
                        log( error + '\n' + filePath + ':' + linerNr  );
                };
        </script>
-       <script src="modules/src/startup.js"></script>
        <script>
                function startUp() {
                        mw.config = new mw.Map();
                }
        </script>
        <script src="modules/lib/jquery/jquery.js"></script>
+       <script src="modules/lib/phpjs-sha1/sha1.js"></script>
        <script src="modules/src/mediawiki/mediawiki.js"></script>
        <script src="modules/src/mediawiki/mediawiki.errorLogger.js"></script>
        <script src="modules/src/mediawiki/mediawiki.startUp.js"></script>
index 5d311ad..f6c721f 100644 (file)
@@ -327,13 +327,14 @@ class RefreshLinks extends Maintenance {
 
                foreach ( $linksTables as $table => $field ) {
                        $this->output( "    $table: 0" );
+                       $tableStart = $start;
                        $counter = 0;
                        do {
                                $ids = $dbr->selectFieldValues(
                                        $table,
                                        $field,
                                        array(
-                                               self::intervalCond( $dbr, $field, $start, $end ),
+                                               self::intervalCond( $dbr, $field, $tableStart, $end ),
                                                "$field NOT IN ({$dbr->selectSQLText( 'page', 'page_id' )})",
                                        ),
                                        __METHOD__,
@@ -346,10 +347,10 @@ class RefreshLinks extends Maintenance {
                                        wfWaitForSlaves();
                                        $dbw->delete( $table, array( $field => $ids ), __METHOD__ );
                                        $this->output( ", $counter" );
-                                       $start = $ids[$numIds - 1] + 1;
+                                       $tableStart = $ids[$numIds - 1] + 1;
                                }
 
-                       } while ( $numIds >= $batchSize && ( $end === null || $start <= $end ) );
+                       } while ( $numIds >= $batchSize && ( $end === null || $tableStart <= $end ) );
 
                        $this->output( " deleted.\n" );
 
index a0c0744..2396128 100644 (file)
@@ -822,7 +822,7 @@ return array(
 
        'mediawiki' => array(
                'class' => 'ResourceLoaderRawFileModule',
-               // Keep maintenance/jsduck/eg-iframe.html in sync
+               // Keep in sync with maintenance/jsduck/eg-iframe.html
                'scripts' => array(
                        'resources/lib/phpjs-sha1/sha1.js',
                        'resources/src/mediawiki/mediawiki.js',
@@ -1530,10 +1530,12 @@ return array(
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
                        'saveprefs',
+                       'savedprefs',
                ),
                'dependencies' => array(
                        'mediawiki.language',
                        'mediawiki.confirmCloseWindow',
+                       'mediawiki.notification',
                ),
        ),
        'mediawiki.special.recentchanges' => array(
@@ -1667,14 +1669,6 @@ return array(
 
        /* MediaWiki Legacy */
 
-       'mediawiki.legacy.ajax' => array(
-               'scripts' => 'resources/src/mediawiki.legacy/ajax.js',
-               'dependencies' => array(
-                       'mediawiki.util',
-                       'mediawiki.legacy.wikibits',
-               ),
-               'position' => 'top',
-       ),
        'mediawiki.legacy.commonPrint' => array(
                'position' => 'top',
                'styles' => array(
@@ -1703,6 +1697,7 @@ return array(
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => 'mediawiki.util',
                'position' => 'top',
+               'targets' => array( 'desktop', 'mobile' ),
        ),
 
        /* MediaWiki UI */
@@ -1810,6 +1805,8 @@ return array(
                ),
                'messages' => array(
                        'mw-widgets-dateinput-no-date',
+                       'mw-widgets-dateinput-placeholder-day',
+                       'mw-widgets-dateinput-placeholder-month',
                        'mw-widgets-titleinput-description-new-page',
                        'mw-widgets-titleinput-description-redirect',
                ),
index 29c533d..abe912d 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var idleTimeout = 4000,
+               var idleTimeout = 3000,
                        api = new mw.Api(),
                        pending = null,
                        $form = $( '#editform' ),
diff --git a/resources/src/mediawiki.legacy/ajax.js b/resources/src/mediawiki.legacy/ajax.js
deleted file mode 100644 (file)
index 3660c20..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Remote Scripting Library
- * Copyright 2005 modernmethod, inc
- * Under the open source BSD license
- * http://www.modernmethod.com/sajax/
- */
-
-/*jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
-/*global alert */
-( function ( mw ) {
-
-       /**
-        * if sajax_debug_mode is true, this function outputs given the message into
-        * the element with id = sajax_debug; if no such element exists in the document,
-        * it is injected.
-        */
-       function debug( text ) {
-               if ( !window.sajax_debug_mode ) {
-                       return false;
-               }
-
-               var b, m,
-                       e = document.getElementById( 'sajax_debug' );
-
-               if ( !e ) {
-                       e = document.createElement( 'p' );
-                       e.className = 'sajax_debug';
-                       e.id = 'sajax_debug';
-
-                       b = document.getElementsByTagName( 'body' )[0];
-
-                       if ( b.firstChild ) {
-                               b.insertBefore( e, b.firstChild );
-                       } else {
-                               b.appendChild( e );
-                       }
-               }
-
-               m = document.createElement( 'div' );
-               m.appendChild( document.createTextNode( text ) );
-
-               e.appendChild( m );
-
-               return true;
-       }
-
-       /**
-        * Compatibility wrapper for creating a new XMLHttpRequest object.
-        */
-       function createXhr() {
-               debug( 'sajax_init_object() called..' );
-               var a;
-               try {
-                       // Try the new style before ActiveX so we don't
-                       // unnecessarily trigger warnings in IE 7 when
-                       // set to prompt about ActiveX usage
-                       a = new XMLHttpRequest();
-               } catch ( xhrE ) {
-                       try {
-                               a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
-                       } catch ( msXmlE ) {
-                               try {
-                                       a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
-                               } catch ( msXhrE ) {
-                                       a = null;
-                               }
-                       }
-               }
-               if ( !a ) {
-                       debug( 'Could not create connection object.' );
-               }
-
-               return a;
-       }
-
-       /**
-        * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
-        *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
-        *   args - an array of arguments to that function
-        *   target - the target that will handle the result of the call. If this is a function,
-        *            if will be called with the XMLHttpRequest as a parameter; if it's an input
-        *            element, its value will be set to the resultText; if it's another type of
-        *            element, its innerHTML will be set to the resultText.
-        *
-        * Example:
-        *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
-        *
-        * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
-        * (1, 2, 3) as the parameter list, and will show the result in the element
-        * with id = showFoo
-        */
-       function doAjaxRequest( func_name, args, target ) {
-               var i, x, uri, post_data;
-               uri = mw.util.wikiScript() + '?action=ajax';
-               if ( window.sajax_request_type === 'GET' ) {
-                       if ( uri.indexOf( '?' ) === -1 ) {
-                               uri = uri + '?rs=' + encodeURIComponent( func_name );
-                       } else {
-                               uri = uri + '&rs=' + encodeURIComponent( func_name );
-                       }
-                       for ( i = 0; i < args.length; i++ ) {
-                               uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
-                       }
-                       // uri = uri + '&rsrnd=' + new Date().getTime();
-                       post_data = null;
-               } else {
-                       post_data = 'rs=' + encodeURIComponent( func_name );
-                       for ( i = 0; i < args.length; i++ ) {
-                               post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
-                       }
-               }
-               x = createXhr();
-               if ( !x ) {
-                       alert( 'AJAX not supported' );
-                       return false;
-               }
-
-               try {
-                       x.open( window.sajax_request_type, uri, true );
-               } catch ( e ) {
-                       if ( location.hostname === 'localhost' ) {
-                               alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
-                       }
-                       throw e;
-               }
-               if ( window.sajax_request_type === 'POST' ) {
-                       x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
-                       x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
-               }
-               x.setRequestHeader( 'Pragma', 'cache=yes' );
-               x.setRequestHeader( 'Cache-Control', 'no-transform' );
-               x.onreadystatechange = function () {
-                       if ( x.readyState !== 4 ) {
-                               return;
-                       }
-
-                       debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
-
-                       // if ( x.status != 200 )
-                       //   alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
-                       // else
-
-                       if ( typeof target === 'function' ) {
-                               target( x );
-                       } else if ( typeof target === 'object' ) {
-                               if ( target.tagName === 'INPUT' ) {
-                                       if ( x.status === 200 ) {
-                                               target.value = x.responseText;
-                                       }
-                                       // else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
-                               } else {
-                                       if ( x.status === 200 ) {
-                                               target.innerHTML = x.responseText;
-                                       } else {
-                                               target.innerHTML = '<div class="error">Error: ' + x.status +
-                                                       ' ' + x.statusText + ' (' + x.responseText + ')</div>';
-                                       }
-                               }
-                       } else {
-                               alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
-                       }
-               };
-
-               debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
-               x.send( post_data );
-               debug( func_name + ' waiting..' );
-
-               return true;
-       }
-
-       /**
-        * @return {boolean} Whether the browser supports AJAX
-        */
-       function wfSupportsAjax() {
-               var request = createXhr(),
-                       supportsAjax = request ? true : false;
-
-               request = undefined;
-               return supportsAjax;
-       }
-
-       // Expose + Mark as deprecated
-       var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-       // Variables
-       mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-       // Methods
-       mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-       mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-       mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
-
-}( mediaWiki ) );
index 27c3841..b69e59d 100644 (file)
@@ -78,6 +78,14 @@ abbr[title],
        cursor: help;
 }
 
+@supports (text-decoration: underline dotted) {
+       abbr[title],
+       .explain[title] {
+               border-bottom: none;
+               text-decoration: underline dotted;
+       }
+}
+
 /* Colored watchlist and recent changes numbers */
 .mw-plusminus-pos {
        color: #006400; /* dark green */
index 32cd79a..05954ff 100644 (file)
        win.importScript = importScript;
        win.importStylesheet = importStylesheet;
 
+       // Replace document.write/writeln with basic html parsing that appends
+       // to the <body> to avoid blanking pages. Added JavaScript will not run.
+       $.each( [ 'write', 'writeln' ], function ( idx, method ) {
+               mw.log.deprecate( document, method, function ( html ) {
+                       $( 'body' ).append( $.parseHTML( html ) );
+               }, 'Use jQuery or mw.loader.load instead.' );
+       } );
+
 }( mediaWiki, jQuery ) );
index cc72e16..f9b0d35 100644 (file)
@@ -17,7 +17,7 @@
                        var $spinner, href, rcid, apiRequest;
 
                        // Start preloading the notification module (normally loaded by mw.notify())
-                       mw.loader.load( ['mediawiki.notification'], null, true );
+                       mw.loader.load( 'mediawiki.notification' );
 
                        // Hide the link and create a spinner to show it inside the brackets.
                        $spinner = $.createSpinner( {
@@ -43,7 +43,7 @@
                                        mw.notify( mw.msg( 'markedaspatrollednotify', title.toText() ) );
                                } else {
                                        // This should never happen as errors should trigger fail
-                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ), { type: 'error' } );
                                }
                        } )
                        .fail( function ( error ) {
@@ -53,9 +53,9 @@
                                $patrolLinks.show();
                                if ( error === 'noautopatrol' ) {
                                        // Can't patrol own
-                                       mw.notify( mw.msg( 'markedaspatrollederror-noautopatrol' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederror-noautopatrol' ), { type: 'warn' } );
                                } else {
-                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ) );
+                                       mw.notify( mw.msg( 'markedaspatrollederrornotify' ), { type: 'error' } );
                                }
                        } );
 
index ddd4f0c..708dcb5 100644 (file)
@@ -1,12 +1,11 @@
 ( function ( mw, $ ) {
 
-       mw.page = {};
+       // Support: MediaWiki < 1.26
+       // Cached HTML will not yet have this from OutputPage::getHeadScripts.
+       document.documentElement.className = document.documentElement.className
+               .replace( /(^|\s)client-nojs(\s|$)/, '$1client-js$2' );
 
-       // Client profile classes for <html>
-       // Allows for easy hiding/showing of JS or no-JS-specific UI elements
-       $( document.documentElement )
-               .addClass( 'client-js' )
-               .removeClass( 'client-nojs' );
+       mw.page = {};
 
        $( function () {
                mw.util.init();
index 50f280a..9724c56 100644 (file)
                        var action, api, $link;
 
                        // Start preloading the notification module (normally loaded by mw.notify())
-                       mw.loader.load( ['mediawiki.notification'], null, true );
+                       mw.loader.load( 'mediawiki.notification' );
 
                        action = mwUriGetAction( this.href );
 
                                        msg = mw.message( 'watcherrortext', link );
 
                                        // Report to user about the error
-                                       mw.notify( msg, { tag: 'watch-self' } );
+                                       mw.notify( msg, {
+                                               tag: 'watch-self',
+                                               type: 'error'
+                                       } );
                                } );
                } );
        } );
index e27e34a..0e71d30 100644 (file)
@@ -19,3 +19,8 @@
        height: 0;
        zoom: 1;
 }
+
+/* When JS is enabled, .successbox is replaced with a mw.notification */
+.successbox {
+       display: none;
+}
index a385ad3..893db98 100644 (file)
@@ -1,3 +1,4 @@
+
 /*!
  * JavaScript for Special:Preferences
  */
@@ -5,7 +6,8 @@ jQuery( function ( $ ) {
        var $preftoc, $preferences, $fieldsets, $legends,
                hash, labelFunc,
                $tzSelect, $tzTextbox, $localtimeHolder, servertime,
-               $checkBoxes, allowCloseWindow;
+               $checkBoxes, allowCloseWindow,
+               notif;
 
        labelFunc = function () {
                return this.id.replace( /^mw-prefsection/g, 'preftab' );
@@ -84,6 +86,21 @@ jQuery( function ( $ ) {
                }
        }
 
+       // If there is a #mw-preferences-success box and javascript is enabled, use a slick notification instead!
+       if ( $( '#mw-preferences-success' ).length ) {
+               notif = mediaWiki.notification.notify( mediaWiki.message( 'savedprefs' ), { autoHide: false } );
+               $( '#preftoc, .prefsection' ).one( 'change keydown mousedown', function () { // 'change' event not reliable!
+                       if ( notif ) {
+                               notif.close();
+                       }
+               } );
+
+               // Remove now-unnecessary success=1 querystring to prevent reappearance of notification on reload
+               if ( history.replaceState ) {
+                       history.replaceState( {}, document.title, document.URL.replace( /&?success=1/, '' ) );
+               }
+       }
+
        // Populate the prefToc
        $legends.each( function ( i, legend ) {
                var $legend = $( legend ),
index 8d3e86a..7628ff8 100644 (file)
@@ -28,7 +28,7 @@
                                        mw.notify( mw.msg( 'addedwatchtext-short', title ) );
                                } ).fail( function () {
                                        $link.text( mw.msg( 'watch' ) );
-                                       mw.notify( mw.msg( 'watcherrortext', title ) );
+                                       mw.notify( mw.msg( 'watcherrortext', title ), { type: 'error' } );
                                } );
                        } else {
                                $link.text( mw.msg( 'unwatching' ) );
@@ -38,7 +38,7 @@
                                        mw.notify( mw.msg( 'removedwatchtext-short', title ) );
                                } ).fail( function () {
                                        $link.text( mw.msg( 'unwatch' ) );
-                                       mw.notify( mw.msg( 'watcherrortext', title ) );
+                                       mw.notify( mw.msg( 'watcherrortext', title ), { type: 'error' } );
                                } );
                        }
 
index 9016e89..f1a08a3 100644 (file)
@@ -10,6 +10,8 @@
        /**
         * Creates an mw.widgets.CalendarWidget object.
         *
+        * You will most likely want to use mw.widgets.DateInputWidget instead of CalendarWidget directly.
+        *
         * @class
         * @extends OO.ui.Widget
         * @mixins OO.ui.mixin.TabIndexedElement
@@ -17,8 +19,9 @@
         * @constructor
         * @param {Object} [config] Configuration options
         * @cfg {string} [precision='day'] Date precision to use, 'day' or 'month'
-        * @cfg {string|null} [date=null] Day or month date (depending on `precision`), in the
-        *     format 'YYYY-MM-DD' or 'YYYY-MM'. When null, defaults to current date.
+        * @cfg {string|null} [date=null] Day or month date (depending on `precision`), in the format
+        *     'YYYY-MM-DD' or 'YYYY-MM'. When null, the calendar will show today's date, but not select
+        *     it.
         */
        mw.widgets.CalendarWidget = function MWWCalendarWidget( config ) {
                // Config initialization
 
                if (
                        this.displayLayer === this.previousDisplayLayer &&
+                       this.date === this.previousDate &&
                        this.previousMoment &&
                        this.previousMoment.isSame( this.moment, this.precision === 'month' ? 'month' : 'day' )
                ) {
 
                this.previousMoment = moment( this.moment );
                this.previousDisplayLayer = this.displayLayer;
+               this.previousDate = this.date;
 
                this.$body.on( 'click', this.onBodyClick.bind( this ) );
        };
         * Set the date.
         *
         * @param {string|null} [date=null] Day or month date, in the format 'YYYY-MM-DD' or 'YYYY-MM'.
-        *     When null, defaults to current date. When invalid, the date is not changed.
+        *     When null, the calendar will show today's date, but not select it. When invalid, the date
+        *     is not changed.
         */
        mw.widgets.CalendarWidget.prototype.setDate = function ( date ) {
                var mom = date !== null ? moment( date, this.getDateFormat() ) : moment();
                if ( mom.isValid() ) {
                        this.moment = mom;
-                       this.setDateFromMoment();
+                       if ( date !== null ) {
+                               this.setDateFromMoment();
+                       } else if ( this.date !== null ) {
+                               this.date = null;
+                               this.emit( 'change', this.date );
+                       }
                        this.displayLayer = this.getDisplayLayers()[ 0 ];
                        this.updateUI();
                }
         * Get current date, in the format 'YYYY-MM-DD' or 'YYYY-MM', depending on precision. Digits will
         * not be localised.
         *
-        * @returns {string} Date string
+        * @returns {string|null} Date string
         */
        mw.widgets.CalendarWidget.prototype.getDate = function () {
                return this.date;
index 582a316..21a9019 100644 (file)
 }
 
 .mw-widget-calendarWidget-day-today {
-       border: 1px solid #3787fb;
+       box-shadow: inset 0 0 0 1px #3787fb;
        border-radius: ((@calendarHeight / 7) / 2);
-       margin: -1px;
 }
 
 .mw-widget-calendarWidget-item-selected {
        &.mw-widget-calendarWidget-day-heading {
                border-radius: ((@calendarHeight / 7) / 4);
                // Hide the border from .mw-widget-calendarWidget-day-today
-               border: 0;
-               margin: 0;
+               box-shadow: none;
        }
 
        &.mw-widget-calendarWidget-month {
index 3888fc7..8d952e5 100644 (file)
        /**
         * Creates an mw.widgets.DateInputWidget object.
         *
+        *     @example
+        *     // Date input widget showcase
+        *     var fieldset = new OO.ui.FieldsetLayout( {
+        *       items: [
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget(),
+        *           {
+        *             align: 'top',
+        *             label: 'Select date'
+        *           }
+        *         ),
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget( { precision: 'month' } ),
+        *           {
+        *             align: 'top',
+        *             label: 'Select month'
+        *           }
+        *         ),
+        *         new OO.ui.FieldLayout(
+        *           new mw.widgets.DateInputWidget( {
+        *             inputFormat: 'DD.MM.YYYY',
+        *             displayFormat: 'Do [of] MMMM [anno Domini] YYYY'
+        *           } ),
+        *           {
+        *             align: 'top',
+        *             label: 'Select date (custom formats)'
+        *           }
+        *         )
+        *       ]
+        *     } );
+        *     $( 'body' ).append( fieldset.$element );
+        *
+        * The value is stored in 'YYYY-MM-DD' or 'YYYY-MM' format:
+        *
+        *     @example
+        *     // Accessing values in a date input widget
+        *     var dateInput = new mw.widgets.DateInputWidget();
+        *     var $label = $( '<p>' );
+        *     $( 'body' ).append( $label, dateInput.$element );
+        *     dateInput.on( 'change', function () {
+        *       // The value will always be a valid date or empty string, malformed input is ignored
+        *       var date = dateInput.getValue();
+        *       $label.text( 'Selected date: ' + ( date || '(none)' ) );
+        *     } );
+        *
         * @class
         * @extends OO.ui.InputWidget
         *
         *     while the widget is inactive. Should be as unambiguous as possible (for example, prefer to
         *     spell out the month, rather than rely on the order), even if that makes it longer. When not
         *     given, the default is language-specific.
+        * @cfg {string} [placeholder] User-visible date format string displayed in the textual input
+        *     field when it's empty. Should be the same as `inputFormat`, but translated to the user's
+        *     language. When not given, defaults to a translated version of 'YYYY-MM-DD' or 'YYYY-MM',
+        *     depending on `precision`.
         */
        mw.widgets.DateInputWidget = function MWWDateInputWidget( config ) {
                // Config initialization
-               config = config || {};
+               config = $.extend( { precision: 'day' }, config );
+
+               var placeholder;
+               if ( config.placeholder ) {
+                       placeholder = config.placeholder;
+               } else if ( config.inputFormat ) {
+                       // We have no way to display a translated placeholder for custom formats
+                       placeholder = '';
+               } else {
+                       // Messages: mw-widgets-dateinput-placeholder-day, mw-widgets-dateinput-placeholder-month
+                       placeholder = mw.msg( 'mw-widgets-dateinput-placeholder-' + config.precision );
+               }
 
                // Properties (must be set before parent constructor, which calls #setValue)
                this.handle = new OO.ui.LabelWidget();
                this.textInput = new OO.ui.TextInputWidget( {
+                       placeholder: placeholder,
                        validate: this.validateDate.bind( this )
                } );
                this.calendar = new mw.widgets.CalendarWidget( {
         * @private
         */
        mw.widgets.DateInputWidget.prototype.activate = function () {
-               if ( this.getValue() === '' ) {
-                       // Setting today's date is probably more helpful than leaving the widget empty? We could just
-                       // display the placeholder and leave it there, but it's likely that at least the year will be
-                       // the same as today's.
-
-                       // Use English locale to avoid number formatting
-                       this.setValue( moment().locale( 'en' ).format( this.getInternalFormat() ) );
-               }
-
                this.$element.addClass( 'mw-widget-dateInputWidget-active' );
                this.handle.toggle( false );
                this.textInput.toggle( true );
index f87869c..1feb8f0 100644 (file)
@@ -59,6 +59,7 @@
                border: 1px solid #ccc;
                border-radius: 0.1em;
                line-height: 1.275em;
+               background-color: white;
        }
 
        > .oo-ui-textInputWidget input {
index b842545..2d4bef0 100644 (file)
@@ -9,6 +9,40 @@
         * but this model class will tie it together as well as let you perform
         * actions in a logical way.
         *
+        * A simple example:
+        *
+        *      var file = new OO.ui.SelectFileWidget(),
+        *              button = new OO.ui.ButtonWidget( { label: 'Save' } ),
+        *              upload = new mw.Upload;
+        *
+        *      button.on( 'click', function () {
+        *              upload.setFile( file.getValue() );
+        *              upload.setFilename( file.getValue().name );
+        *              upload.upload();
+        *      } );
+        *
+        *      $( 'body' ).append( file.$element, button.$element );
+        *
+        * You can also choose to {@link #uploadToStash stash the upload} and
+        * {@link #finishStashUpload finalize} it later:
+        *
+        *      var file, // Some file object
+        *              upload = new mw.Upload,
+        *              stashPromise = $.Deferred();
+        *
+        *      upload.setFile( file );
+        *      upload.uploadToStash().then( function () {
+        *              stashPromise.resolve();
+        *      } );
+        *
+        *      stashPromise.then( function () {
+        *              upload.setFilename( 'foo' );
+        *              upload.setText( 'bar' );
+        *              upload.finishStashUpload().then( function () {
+        *                      console.log( 'Done!' );
+        *              } );
+        *      } );
+        *
         * @constructor
         * @param {Object} apiconfig Passed to the constructor of mw.Api.
         */
index 7825f22..6548896 100644 (file)
                        }
 
                        /**
-                        * Adds a script tag to the DOM, either using document.write or low-level DOM manipulation,
-                        * depending on whether document-ready has occurred yet and whether we are in async mode.
+                        * Load and execute a script with callback.
                         *
                         * @private
                         * @param {string} src URL to script, will be used as the src attribute in the script tag
                         * @param {Function} [callback] Callback which will be run when the script is done
-                        * @param {boolean} [async=false] Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
-                       function addScript( src, callback, async ) {
-                               // Using isReady directly instead of storing it locally from a $().ready callback (bug 31895)
-                               if ( $.isReady || async ) {
-                                       $.ajax( {
-                                               url: src,
-                                               dataType: 'script',
-                                               // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
-                                               // XHR for a same domain request instead of <script>, which changes the request
-                                               // headers (potentially missing a cache hit), and reduces caching in general
-                                               // since browsers cache XHR much less (if at all). And XHR means we retreive
-                                               // text, so we'd need to $.globalEval, which then messes up line numbers.
-                                               crossDomain: true,
-                                               cache: true,
-                                               async: true
-                                       } ).always( callback );
-                               } else {
-                                       /*jshint evil:true */
-                                       document.write( mw.html.element( 'script', { 'src': src }, '' ) );
-                                       if ( callback ) {
-                                               // Document.write is synchronous, so this is called when it's done.
-                                               // FIXME: That's a lie. doc.write isn't actually synchronous.
-                                               callback();
-                                       }
-                               }
+                       function addScript( src, callback ) {
+                               $.ajax( {
+                                       url: src,
+                                       dataType: 'script',
+                                       // Force jQuery behaviour to be for crossDomain. Otherwise jQuery would use
+                                       // XHR for a same domain request instead of <script>, which changes the request
+                                       // headers (potentially missing a cache hit), and reduces caching in general
+                                       // since browsers cache XHR much less (if at all). And XHR means we retreive
+                                       // text, so we'd need to $.globalEval, which then messes up line numbers.
+                                       crossDomain: true,
+                                       cache: true
+                               } ).always( callback );
                        }
 
                        /**
                                }
 
                                function runScript() {
-                                       var script, markModuleReady, nestedAddScript;
+                                       var script, markModuleReady, nestedAddScript, legacyWait,
+                                               // Expand to include dependencies since we have to exclude both legacy modules
+                                               // and their dependencies from the legacyWait (to prevent a circular dependency).
+                                               legacyModules = resolve( mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
                                        try {
                                                script = registry[module].script;
                                                markModuleReady = function () {
                                                        registry[module].state = 'ready';
                                                        handlePending( module );
                                                };
-                                               nestedAddScript = function ( arr, callback, async, i ) {
+                                               nestedAddScript = function ( arr, callback, i ) {
                                                        // Recursively call addScript() in its own callback
                                                        // for each element of arr.
                                                        if ( i >= arr.length ) {
                                                        }
 
                                                        addScript( arr[i], function () {
-                                                               nestedAddScript( arr, callback, async, i + 1 );
-                                                       }, async );
+                                                               nestedAddScript( arr, callback, i + 1 );
+                                                       } );
                                                };
 
-                                               if ( $.isArray( script ) ) {
-                                                       nestedAddScript( script, markModuleReady, registry[module].async, 0 );
-                                               } else if ( $.isFunction( script ) ) {
-                                                       // Pass jQuery twice so that the signature of the closure which wraps
-                                                       // the script can bind both '$' and 'jQuery'.
-                                                       registry[module].state = 'ready';
-                                                       script( $, $ );
-                                                       handlePending( module );
-                                               } else if ( typeof script === 'string' ) {
-                                                       // Site and user modules are a legacy scripts that run in the global scope.
-                                                       // This is transported as a string instead of a function to avoid needing
-                                                       // to use string manipulation to undo the function wrapper.
-                                                       if ( module === 'user' ) {
-                                                               // Implicit dependency on the site module. Not real dependency because
-                                                               // it should run after 'site' regardless of whether it succeeds or fails.
-                                                               mw.loader.using( 'site' ).always( function () {
+                                               legacyWait = ( $.inArray( module, legacyModules ) !== -1 )
+                                                       ? $.Deferred().resolve()
+                                                       : mw.loader.using( legacyModules );
+
+                                               legacyWait.always( function () {
+                                                       if ( $.isArray( script ) ) {
+                                                               nestedAddScript( script, markModuleReady, 0 );
+                                                       } else if ( $.isFunction( script ) ) {
+                                                               // Pass jQuery twice so that the signature of the closure which wraps
+                                                               // the script can bind both '$' and 'jQuery'.
+                                                               registry[module].state = 'ready';
+                                                               script( $, $ );
+                                                               handlePending( module );
+                                                       } else if ( typeof script === 'string' ) {
+                                                               // Site and user modules are a legacy scripts that run in the global scope.
+                                                               // This is transported as a string instead of a function to avoid needing
+                                                               // to use string manipulation to undo the function wrapper.
+                                                               if ( module === 'user' ) {
+                                                                       // Implicit dependency on the site module. Not real dependency because
+                                                                       // it should run after 'site' regardless of whether it succeeds or fails.
+                                                                       mw.loader.using( 'site' ).always( function () {
+                                                                               registry[module].state = 'ready';
+                                                                               $.globalEval( script );
+                                                                               handlePending( module );
+                                                                       } );
+                                                               } else {
                                                                        registry[module].state = 'ready';
                                                                        $.globalEval( script );
                                                                        handlePending( module );
-                                                               } );
-                                                       } else {
-                                                               registry[module].state = 'ready';
-                                                               $.globalEval( script );
-                                                               handlePending( module );
+                                                               }
                                                        }
-                                               }
+                                               } );
                                        } catch ( e ) {
                                                // This needs to NOT use mw.log because these errors are common in production mode
                                                // and not in debug mode, such as when a symbol that should be global isn't exported
                                        mw.templates.set( module, registry[module].templates );
                                }
 
-                               if ( $.isReady || registry[module].async ) {
-                                       // Make sure we don't run the scripts until all (potentially asynchronous)
-                                       // stylesheet insertions have completed.
-                                       ( function () {
-                                               var pending = 0;
-                                               checkCssHandles = function () {
-                                                       // cssHandlesRegistered ensures we don't take off too soon, e.g. when
-                                                       // one of the cssHandles is fired while we're still creating more handles.
-                                                       if ( cssHandlesRegistered && pending === 0 && runScript ) {
-                                                               runScript();
-                                                               runScript = undefined; // Revoke
+                               // Make sure we don't run the scripts until all stylesheet insertions have completed.
+                               ( function () {
+                                       var pending = 0;
+                                       checkCssHandles = function () {
+                                               // cssHandlesRegistered ensures we don't take off too soon, e.g. when
+                                               // one of the cssHandles is fired while we're still creating more handles.
+                                               if ( cssHandlesRegistered && pending === 0 && runScript ) {
+                                                       runScript();
+                                                       runScript = undefined; // Revoke
+                                               }
+                                       };
+                                       cssHandle = function () {
+                                               var check = checkCssHandles;
+                                               pending++;
+                                               return function () {
+                                                       if ( check ) {
+                                                               pending--;
+                                                               check();
+                                                               check = undefined; // Revoke
                                                        }
                                                };
-                                               cssHandle = function () {
-                                                       var check = checkCssHandles;
-                                                       pending++;
-                                                       return function () {
-                                                               if ( check ) {
-                                                                       pending--;
-                                                                       check();
-                                                                       check = undefined; // Revoke
-                                                               }
-                                                       };
-                                               };
-                                       }() );
-                               } else {
-                                       // We are in blocking mode, and so we can't afford to wait for CSS
-                                       cssHandle = function () {};
-                                       // Run immediately
-                                       checkCssHandles = runScript;
-                               }
+                                       };
+                               }() );
 
                                // Process styles (see also mw.loader.implement)
                                // * back-compat: { <media>: css }
                         * @param {string|string[]} dependencies Module name or array of string module names
                         * @param {Function} [ready] Callback to execute when all dependencies are ready
                         * @param {Function} [error] Callback to execute when any dependency fails
-                        * @param {boolean} [async=false] Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
-                       function request( dependencies, ready, error, async ) {
+                       function request( dependencies, ready, error ) {
                                // Allow calling by single module name
                                if ( typeof dependencies === 'string' ) {
                                        dependencies = [dependencies];
                                                        return;
                                                }
                                                queue.push( module );
-                                               if ( async ) {
-                                                       registry[module].async = true;
-                                               }
                                        }
                                } );
 
                        }
 
                        /**
-                        * Asynchronously append a script tag to the end of the body
-                        * that invokes load.php
+                        * Load modules from load.php
                         * @private
                         * @param {Object} moduleMap Module map, see #buildModulesString
                         * @param {Object} currReqBase Object with other parameters (other than 'modules') to use in the request
                         * @param {string} sourceLoadScript URL of load.php
-                        * @param {boolean} async Whether to load modules asynchronously.
-                        *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
                         */
-                       function doRequest( moduleMap, currReqBase, sourceLoadScript, async ) {
+                       function doRequest( moduleMap, currReqBase, sourceLoadScript ) {
                                var request = $.extend(
                                        { modules: buildModulesString( moduleMap ) },
                                        currReqBase
                                );
                                request = sortQuery( request );
                                // Support: IE6
-                               // Append &* to satisfy load.php's WebRequest::checkUrlExtension test. This script
-                               // isn't actually used in IE6, but MediaWiki enforces it in general.
-                               addScript( sourceLoadScript + '?' + $.param( request ) + '&*', null, async );
+                               // Append &* to satisfy load.php's WebRequest::checkUrlExtension test.
+                               // This script isn't actually used in IE6, but MediaWiki enforces it in general.
+                               addScript( sourceLoadScript + '?' + $.param( request ) + '&*' );
                        }
 
                        /**
                                        var     reqBase, splits, maxQueryLength, q, b, bSource, bGroup, bSourceGroup,
                                                source, concatSource, origBatch, group, i, modules, sourceLoadScript,
                                                currReqBase, currReqBaseLength, moduleMap, l,
-                                               lastDotIndex, prefix, suffix, bytesAdded, async;
+                                               lastDotIndex, prefix, suffix, bytesAdded;
 
                                        // Build a list of request parameters common to all requests.
                                        reqBase = {
                                                                currReqBase.user = mw.config.get( 'wgUserName' );
                                                        }
                                                        currReqBaseLength = $.param( currReqBase ).length;
-                                                       async = true;
                                                        // We may need to split up the request to honor the query string length limit,
                                                        // so build it piece by piece.
                                                        l = currReqBaseLength + 9; // '&modules='.length == 9
                                                                if ( maxQueryLength > 0 && !$.isEmptyObject( moduleMap ) && l + bytesAdded > maxQueryLength ) {
                                                                        // This request would become too long, create a new one
                                                                        // and fire off the old one
-                                                                       doRequest( moduleMap, currReqBase, sourceLoadScript, async );
+                                                                       doRequest( moduleMap, currReqBase, sourceLoadScript );
                                                                        moduleMap = {};
-                                                                       async = true;
                                                                        l = currReqBaseLength + 9;
                                                                        mw.track( 'resourceloader.splitRequest', { maxQueryLength: maxQueryLength } );
                                                                }
                                                                        moduleMap[prefix] = [];
                                                                }
                                                                moduleMap[prefix].push( suffix );
-                                                               if ( !registry[modules[i]].async ) {
-                                                                       // If this module is blocking, make the entire request blocking
-                                                                       // This is slightly suboptimal, but in practice mixing of blocking
-                                                                       // and async modules will only occur in debug mode.
-                                                                       async = false;
-                                                               }
                                                                l += bytesAdded;
                                                        }
                                                        // If there's anything left in moduleMap, request that too
                                                        if ( !$.isEmptyObject( moduleMap ) ) {
-                                                               doRequest( moduleMap, currReqBase, sourceLoadScript, async );
+                                                               doRequest( moduleMap, currReqBase, sourceLoadScript );
                                                        }
                                                }
                                        }
                                 * @param {string} [type='text/javascript'] MIME type to use if calling with a URL of an
                                 *  external script or style; acceptable values are "text/css" and
                                 *  "text/javascript"; if no type is provided, text/javascript is assumed.
-                                * @param {boolean} [async] Whether to load modules asynchronously.
-                                *  Ignored (and defaulted to `true`) if the document-ready event has already occurred.
-                                *  Defaults to `true` if loading a URL, `false` otherwise.
                                 */
-                               load: function ( modules, type, async ) {
+                               load: function ( modules, type ) {
                                        var filtered, l;
 
                                        // Validate input
                                        // Allow calling with an external url or single dependency as a string
                                        if ( typeof modules === 'string' ) {
                                                if ( /^(https?:)?\/\//.test( modules ) ) {
-                                                       if ( async === undefined ) {
-                                                               // Assume async for bug 34542
-                                                               async = true;
-                                                       }
                                                        if ( type === 'text/css' ) {
                                                                // Support: IE 7-8
                                                                // Use properties instead of attributes as IE throws security
                                                                return;
                                                        }
                                                        if ( type === 'text/javascript' || type === undefined ) {
-                                                               addScript( modules, null, async );
+                                                               addScript( modules );
                                                                return;
                                                        }
                                                        // Unknown type
                                                return;
                                        }
                                        // Since some modules are not yet ready, queue up a request.
-                                       request( filtered, undefined, undefined, async );
+                                       request( filtered, undefined, undefined );
                                },
 
                                /**
index 954de22..632ae82 100644 (file)
 .mw-notification-title {
        font-weight: bold;
 }
+
+.mw-notification-type-warn {
+       border-color: #F5BE00; /* yellow */
+       background-color: #FFFFE8;
+}
+
+.mw-notification-type-error {
+       border-color: #EB3941; /* red */
+       background-color: #FFF8F8;
+}
index 132c334..004e710 100644 (file)
                        }
                }
 
+               if ( options.type ) {
+                       // Sanitize options.type
+                       options.type = options.type.replace( /[ _\-]+/g, '-' ).replace( /[^\-a-z0-9]+/ig, '' );
+                       $notification.addClass( 'mw-notification-type-' + options.type );
+               }
+
                if ( options.title ) {
                        $notificationTitle = $( '<div class="mw-notification-title"></div>' )
                                .text( options.title )
                 * - title:
                 *   An optional title for the notification. Will be displayed above the
                 *   content. Usually in bold.
+                *
+                * - type:
+                *   An optional string for the type of the message used for styling:
+                *   Examples: 'info', 'warn', 'error'.
                 */
                defaults: {
                        autoHide: true,
                        tag: false,
-                       title: undefined
+                       title: undefined,
+                       type: false
                },
 
                /**
index c1e1dab..0f3a086 100644 (file)
@@ -6,8 +6,9 @@
 
        /**
         * @see mw.notification#notify
-        * @param message
-        * @param options
+        * @see mw.notification#defaults
+        * @param {HTMLElement|HTMLElement[]|jQuery|mw.Message|string} message
+        * @param {Object} options See mw.notification#defaults for details.
         * @return {jQuery.Promise}
         */
        mw.notify = function ( message, options ) {
index 1332459..3b79bd3 100644 (file)
@@ -76,20 +76,31 @@ function startUp() {
 
        $CODE.registrations();
 
+       mw.config.set( $VARS.configuration );
+
+       // Must be after mw.config.set because these callbacks may use mw.loader which
+       // needs to have values 'skin', 'debug' etc. from mw.config.
        window.RLQ = window.RLQ || [];
        while ( RLQ.length ) {
                RLQ.shift()();
        }
-       RLQ = {
+       window.RLQ = {
                push: function ( fn ) {
                        fn();
                }
        };
-
-       mw.config.set( $VARS.configuration );
 }
 
 // Conditional script injection
 if ( isCompatible() ) {
-       document.write( $VARS.baseModulesScript );
+       ( function () {
+               var script = document.createElement( 'script' );
+               script.src = $VARS.baseModulesUri;
+               document.getElementsByTagName( 'head' )[0].appendChild( script );
+       }() );
+} else {
+       // Undo class swapping in case of an unsupported browser.
+       // See OutputPage::getHeadScripts().
+       document.documentElement.className = document.documentElement.className
+               .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
 }
index ab33d89..2e1806d 100644 (file)
@@ -160,6 +160,22 @@ Template:table_attribs_5
 |</noinclude>style="color:red;"||Bar
 !! endarticle
 
+!! article
+Template:table_attribs_6
+!! text
+style="background: <nowiki>
+
+
+red;</nowiki>" |
+!! endarticle
+
+!! article
+Template:table_attribs_7
+!! text
+<noinclude>
+|</noinclude>style{{=}}"background:&#35;f9f9f9;"|Foo<ref>foo</ref>
+!! endarticle
+
 !! article
 Template:table_header_cells
 !! text
@@ -1314,7 +1330,7 @@ Non-word characters don't terminate tag names + tidy
 Non-word characters are valid in extension tags (T19663)
 !! wikitext
 <tåg>tåg</tåg>
-!! html
+!! html/php
 <pre>
 'tåg'
 array (
@@ -1325,11 +1341,15 @@ array (
 
 !! test
 Isolated close tags should be treated as literal text (bug 52760)
+!! options
+parsoid=wt2html
 !! wikitext
 </b>
 
 <s.foo>s</s>
-!! html+tidy
+!! html/php+tidy
+<p>&lt;s.foo&gt;s</p>
+!! html/parsoid
 <p>&lt;s.foo&gt;s</p>
 !! end
 
@@ -1363,9 +1383,11 @@ Bare pipe character from a template (bug 52363)
 <nowiki> unordered list
 !! wikitext
 <nowiki>* This is not an unordered list item.</nowiki>
-!! html
+!! html/php
 <p>* This is not an unordered list item.
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">* This is not an unordered list item.</span></p>
 !! end
 
 !! test
@@ -1378,7 +1400,7 @@ sed abit.
 
 :and a colon
 </nowiki>
-!! html
+!! html/php
 <p>Lorem ipsum dolor
 
 sed abit.
@@ -1387,6 +1409,14 @@ sed abit.
 :and a colon
 
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">Lorem ipsum dolor
+
+sed abit.
+  sed nullum.
+
+:and a colon
+</span></p>
 !! end
 
 !! test
@@ -1400,7 +1430,7 @@ nowiki 3
 
 *There is not nowiki.
 *There is <nowiki>nowiki</nowiki>.
-!! html
+!! html/php
 <dl><dd>There is not nowiki.</dd>
 <dd>There is nowiki.</dd></dl>
 <ol><li>There is not nowiki.</li>
@@ -1408,6 +1438,15 @@ nowiki 3
 <ul><li>There is not nowiki.</li>
 <li>There is nowiki.</li></ul>
 
+!! html/parsoid
+<dl><dd data-parsoid='{}'>There is not nowiki.</dd>
+<dd data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</dd></dl>
+
+<ol><li data-parsoid='{}'>There is not nowiki.</li>
+<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ol>
+
+<ul><li data-parsoid='{}'>There is not nowiki.</li>
+<li data-parsoid='{}'>There is <span typeof="mw:Nowiki">nowiki</span>.</li></ul>
 !! end
 
 !! test
@@ -1436,7 +1475,7 @@ parsoid=html2wt
 !! html
 <p>* &lt;/nowiki&gt; tag</p>
 !! wikitext
-<nowiki>* &lt;/nowiki&gt;</nowiki> tag
+<nowiki>*</nowiki> <nowiki>&lt;/nowiki&gt;</nowiki> tag
 !! end
 
 !! test
@@ -2223,7 +2262,7 @@ Entities inside <pre>
 </nowiki>
 </pre>
 
-!! html
+!! html/php
 <pre>
 &lt;nowiki&gt;
 </pre>
@@ -2236,6 +2275,18 @@ Entities inside <pre>
 
 &lt;/pre&gt;
 </p>
+!! html/parsoid
+<pre data-parsoid='{"stx":"html","strippedNL":true}'>&lt;nowiki>
+</pre>
+<p><span typeof="mw:Placeholder" data-parsoid='{"src":"&lt;/nowiki>"}'>&lt;/nowiki></span>
+&lt;/pre></p>
+
+<p><span typeof="mw:Nowiki">
+&lt;pre>
+&lt;nowiki>
+&lt;/pre>
+</span>
+&lt;/pre></p>
 !! end
 
 !! test
@@ -3397,7 +3448,7 @@ HTML-pre: 3: other wikitext
 '' no-italic ''
 [[ NoLink ]]
 </pre>
-!! html
+!! html/php
 <pre>
 * foo
 # bar
@@ -3406,6 +3457,13 @@ HTML-pre: 3: other wikitext
 [[ NoLink ]]
 </pre>
 
+!! html/parsoid
+<pre data-parsoid='{"stx":"html","strippedNL":true}'>* foo
+# bar
+= no-h =
+'' no-italic ''
+[[ NoLink ]]
+</pre>
 !!end
 
 ###
@@ -4236,6 +4294,17 @@ Definition Lists: colons occurring in tags
 </dl>
 </dd>
 </dl>
+!! html/parsoid
+<dl><dt>a</dt><dd data-parsoid='{"stx":"row"}'>b</dd>
+<dt><b>a:b</b></dt>
+<dt><i data-parsoid='{"stx":"html"}'>a:b</i></dt>
+<dt><span data-parsoid='{"stx":"html"}'>a:b</span></dt>
+<dt><div data-parsoid='{"stx":"html"}'>a:b</div></dt>
+<dt><div data-parsoid='{"stx":"html","autoInsertedEnd":true}'>a</div></dt>
+<dd>b</dd>
+<dt><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a:b"}},"i":0}}]}'>a:b</span></dt>
+<dt><i about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&#39;&#39;a:b&#39;&#39;"}},"i":0}}]}'>a:b</i>
+<dl><dt><dl><dt><i>a:b</i></dt></dl></dt></dl></dt></dl>
 !! end
 
 !! test
@@ -4556,6 +4625,25 @@ http://example.com/url_with_entity&#60;
 <a rel="mw:ExtLink" href="http://example.com/url_with_entity&lt;">http://example.com/url_with_entity&lt;</a></p>
 !! end
 
+!! test
+External links: Lone protocols are never linked (T105697)
+!! wikitext
+http://
+http://;
+(http://)
+bitcoin:
+bitcoin:;
+(bitcoin:)
+!! html
+<p>http://
+http://;
+(http://)
+bitcoin:
+bitcoin:;
+(bitcoin:)
+</p>
+!! end
+
 !! test
 External links: No preceding word characters allowed (bug 65278)
 !! wikitext
@@ -6163,6 +6251,21 @@ Indented table markup mixed with indented pre content (proposed in bug 6200)
 </tbody></table>
 !! end
 
+## Edge case fix to prevent future regressions
+!! test
+T107652: <ref>s in templates that also generate table cell attributes should be rendered properly
+!! wikitext
+{|
+|{{table_attribs_7}}
+|}
+<references />
+!! html/parsoid
+<table>
+<tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<span class="mw-ref" id="cite_ref-1" rel="dc:references" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></td></tr>
+</tbody></table>
+<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+!! end
+
 !! test
 Table with row followed by newlines and table heading
 !! wikitext
@@ -8273,8 +8376,8 @@ Handling html with a br self-closing tag
 <br title=bar/>
 <br title=bar/ >
 !! html/php
-<p><br title="title" />
-<br title="title" />
+<p><br title="" />
+<br title="" />
 <br />
 <br title="bar" />
 <br title="bar" />
@@ -9632,6 +9735,15 @@ __NOEDITSECTION__
 <meta property="mw:PageProp/noeditsection" data-parsoid='{"magicSrc":"__NOEDITSECTION__"}'/>
 !! end
 
+!!test
+__proto__ is treated as normal wikitext (T105997)
+!!wikitext
+__proto__
+!!html
+<p>__proto__
+</p>
+!!end
+
 ###
 ### Magic links
 ###
@@ -10216,7 +10328,7 @@ File:Foobar.jpg
 msgnw keyword
 !! wikitext
 {{msgnw:MSGNW test}}
-!! html
+!! html/php
 <p>&#39;&#39;None&#39;&#39; of &#39;&#39;&#39;this&#39;&#39;&#39; should be 
 &#42; interpreted
 &#32;but rather passed unmodified
@@ -11004,6 +11116,25 @@ Templates: Support for templates generating attributes and content
 </tbody></table>
 !! end
 
+# T107622
+!! test
+4. Entities and nowikis inside templated attributes should be handled correctly inside templated tables
+!! wikitext
+{|
+| {{table_attribs_6}} hi
+|}
+!! html/php
+<table>
+<tr>
+<td style="background: red;"> hi
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td style="background:  red;" typeof="mw:Transclusion" about="#mwt1" data-parsoid='{"autoInsertedEnd":true,"pi":[[]]}' data-mw='{"parts":["| ",{"template":{"target":{"wt":"table_attribs_6","href":"./Template:Table_attribs_6"},"params":{},"i":0}}," hi"]}'> hi</td></tr>
+</tbody></table>
+!! end
+
 !!test
 Templates: HTML Tables: 1. Generating start of a HTML table
 !! wikitext
@@ -11468,41 +11599,40 @@ Parser Functions: 2. Nested use (only outermost should be marked up)
 !! test
 pre-save transform: subst:
 !! options
-PST
+pst
 !! wikitext
 {{subst:test}}
-!! html
+!! html/php
 This is a test template
 !! end
 
 !! test
 pre-save transform: normal template
 !! options
-PST
+pst
 !! wikitext
 {{test}}
-!! html
+!! html/php
 {{test}}
 !! end
 
 !! test
 pre-save transform: nonexistent template
 !! options
-PST
+pst
 !! wikitext
 {{thistemplatedoesnotexist}}
-!! html
+!! html/php
 {{thistemplatedoesnotexist}}
 !! end
 
-
 !! test
 pre-save transform: subst magic variables
 !! options
-PST
+pst
 !! wikitext
 {{subst:SITENAME}}
-!! html
+!! html/php
 MediaWiki
 !! end
 
@@ -11513,7 +11643,7 @@ pre-save transform: subst: templates with parameters
 pst
 !! wikitext
 {{subst:paramtest|param="something else"}}
-!! html
+!! html/php
 This is a test template with parameter "something else"
 !! end
 
@@ -11529,11 +11659,10 @@ pre-save transform: nowiki in subst (bug 1188)
 pst
 !! wikitext
 {{subst:nowikitest}}
-!! html
+!! html/php
 <nowiki>'''not wiki'''</nowiki>
 !! end
 
-
 !! article
 Template:commenttest
 !! text
@@ -11546,7 +11675,7 @@ pre-save transform: comment in subst (bug 1936)
 pst
 !! wikitext
 {{subst:commenttest}}
-!! html
+!! html/php
 This template has <!-- a comment --> in it.
 !! end
 
@@ -11556,7 +11685,7 @@ pre-save transform: unclosed tag
 pst noxml
 !! wikitext
 <nowiki>'''not wiki'''
-!! html
+!! html/php
 <nowiki>'''not wiki'''
 !! end
 
@@ -11566,7 +11695,7 @@ pre-save transform: mixed tag case
 pst noxml
 !! wikitext
 <NOwiki>'''not wiki'''</noWIKI>
-!! html
+!! html/php
 <NOwiki>'''not wiki'''</noWIKI>
 !! end
 
@@ -11576,7 +11705,7 @@ pre-save transform: unclosed comment in <nowiki>
 pst noxml
 !! wikitext
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
-!! html
+!! html/php
 wiki<nowiki>nowiki<!--nowiki</nowiki>wiki
 !!end
 
@@ -11604,7 +11733,7 @@ pre-save transform: comment containing gallery (bug 5024)
 pst
 !! wikitext
 <!-- <gallery>data</gallery> -->
-!! html
+!! html/php
 <!-- <gallery>data</gallery> -->
 !!end
 
@@ -11614,7 +11743,7 @@ pre-save transform: comment containing extension
 pst
 !! wikitext
 <!-- <tag>data</tag> -->
-!! html
+!! html/php
 <!-- <tag>data</tag> -->
 !!end
 
@@ -11624,7 +11753,7 @@ pre-save transform: comment containing nowiki
 pst
 !! wikitext
 <!-- <nowiki>data</nowiki> -->
-!! html
+!! html/php
 <!-- <nowiki>data</nowiki> -->
 !!end
 
@@ -11634,7 +11763,7 @@ pre-save transform: <noinclude> in subst (bug 3298)
 pst
 !! wikitext
 {{subst:Includes}}
-!! html
+!! html/php
 Foobar
 !! end
 
@@ -11644,7 +11773,7 @@ pre-save transform: <onlyinclude> in subst (bug 3298)
 pst
 !! wikitext
 {{subst:Includes2}}
-!! html
+!! html/php
 Foo
 !! end
 
@@ -11666,7 +11795,7 @@ bug 22297: safesubst: works during PST
 pst
 !! wikitext
 {{subst:SafeSubstTest}}{{safesubst:SubstTest}}
-!! html
+!! html/php
 FoobarFoobar
 !! end
 
@@ -11702,7 +11831,7 @@ pst
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 [[Bar:Article|Article]]
 [[:Bar:Article|Article]]
@@ -11723,7 +11852,7 @@ pst
 [[:interwiki:Article|]]
 [[interwiki:Bar:Article|]]
 [[:interwiki:Bar:Article|]]
-!! html
+!! html/php
 [[interwiki:Article|Article]]
 [[:interwiki:Article|Article]]
 [[interwiki:Bar:Article|Bar:Article]]
@@ -11736,7 +11865,7 @@ pre-save transform: context links ("pipe trick") with parens in title
 pst title=[[Somearticle (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 !! end
 
@@ -11748,7 +11877,7 @@ pst title=[[Someplace, Somewhere]]
 [[|Otherplace]]
 [[Otherplace, Elsewhere|]]
 [[Otherplace, Elsewhere, Anywhere|]]
-!! html
+!! html/php
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace, Elsewhere|Otherplace]]
 [[Otherplace, Elsewhere, Anywhere|Otherplace]]
@@ -11761,7 +11890,7 @@ pst title=[[Someplace (IGNORED), Somewhere]]
 !! wikitext
 [[|Otherplace]]
 [[Otherplace (place), Elsewhere|]]
-!! html
+!! html/php
 [[Otherplace, Somewhere|Otherplace]]
 [[Otherplace (place), Elsewhere|Otherplace]]
 !! end
@@ -11773,7 +11902,7 @@ pst title=[[Who, me? (context)]]
 !! wikitext
 [[|Yes, you.]]
 [[Me, Myself, and I (1937 song)|]]
-!! html
+!! html/php
 [[Yes, you. (context)|Yes, you.]]
 [[Me, Myself, and I (1937 song)|Me, Myself, and I]]
 !! end
@@ -11784,7 +11913,7 @@ pre-save transform: context links ("pipe trick") with namespace
 pst title=[[Ns:Somearticle]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article|Article]]
 !! end
 
@@ -11794,7 +11923,7 @@ pre-save transform: context links ("pipe trick") with namespace and parens
 pst title=[[Ns:Somearticle (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -11804,7 +11933,7 @@ pre-save transform: context links ("pipe trick") with namespace and comma
 pst title=[[Ns:Somearticle, Context, Whatever]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article, Context, Whatever|Article]]
 !! end
 
@@ -11814,7 +11943,7 @@ pre-save transform: context links ("pipe trick") with namespace, comma and paren
 pst title=[[Ns:Somearticle, Context (context)]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article (context)|Article]]
 !! end
 
@@ -11824,7 +11953,7 @@ pre-save transform: context links ("pipe trick") with namespace, parens and comm
 pst title=[[Ns:Somearticle (IGNORED), Context]]
 !! wikitext
 [[|Article]]
-!! html
+!! html/php
 [[Ns:Article, Context|Article]]
 !! end
 
@@ -11839,7 +11968,7 @@ pst
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! html
+!! html/php
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -11859,7 +11988,7 @@ pst
 [[|Article (context)]]
 [[Bar:X (Y) Z|]]
 [[:Bar:X (Y) Z|]]
-!! html
+!! html/php
 [[Article (context)|Article]]
 [[Bar:Article (context)|Article]]
 [[:Bar:Article (context)|Article]]
@@ -11879,7 +12008,7 @@ pst
 [[|Article(context)]]
 [[Bar:X(Y)Z|]]
 [[:Bar:X(Y)Z|]]
-!! html
+!! html/php
 [[Article(context)|Article]]
 [[Bar:Article(context)|Article]]
 [[:Bar:Article(context)|Article]]
@@ -11899,7 +12028,7 @@ pst
 [[Bar:Article (context),context|]]
 [[:Bar:Article (context), context|]]
 [[:Bar:Article (context),context|]]
-!! html
+!! html/php
 [[Article (context), context|Article]]
 [[Article (context),context|Article]]
 [[Bar:Article (context), context|Article]]
@@ -11918,7 +12047,7 @@ Empty lines are trimmed
 
 
 
-!! html
+!! html/php
 Empty lines are trimmed
 !! end
 
@@ -11931,7 +12060,7 @@ pst
 * <noinclude>~~~</noinclude>
 * <includeonly>~~~</includeonly>
 * <onlyinclude>~~~</onlyinclude>
-!! html
+!! html/php
 * [[Special:Contributions/127.0.0.1|127.0.0.1]]
 * <noinclude>[[Special:Contributions/127.0.0.1|127.0.0.1]]</noinclude>
 * <includeonly>[[Special:Contributions/127.0.0.1|127.0.0.1]]</includeonly>
@@ -11962,7 +12091,7 @@ As well as inside noinclude/onlyinclude
 
 But not inside includeonly
 <includeonly>{{subst:Foo}}</includeonly>
-!! html
+!! html/php
 Shall not expand:
 
 <nowiki>~~~~</nowiki>
@@ -15171,13 +15300,19 @@ Attribute test: unquoted but illegal value (hash)
 </p>
 !! end
 
+# Parsoid does not serialize to empty attribute syntax,
+# so wt2wt and html2wt cases are skipped
 !! test
-Attribute test: no value
+Attribute test: no value (T54330)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 <font color>foo</font>
-!! html
-<p><font color="color">foo</font>
+!! html/php
+<p><font color="">foo</font>
 </p>
+!! html/parsoid
+<p><font color="">foo</font></p>
 !! end
 
 !! test
@@ -15606,7 +15741,7 @@ evil <math>-wiki-tags without Extension:Math enabled
 Parser hook: empty input
 !! wikitext
 <tag></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
@@ -15619,7 +15754,7 @@ array (
 Parser hook: empty input using terminated empty elements
 !! wikitext
 <tag/>
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15632,7 +15767,7 @@ array (
 Parser hook: empty input using terminated empty elements (space before)
 !! wikitext
 <tag />
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15645,7 +15780,7 @@ array (
 Parser hook: basic input
 !! wikitext
 <tag>input</tag>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15659,7 +15794,7 @@ array (
 Parser hook: case insensitive
 !! wikitext
 <TAG>input</TAG>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15673,7 +15808,7 @@ array (
 Parser hook: case insensitive, redux
 !! wikitext
 <TaG>input</TAg>
-!! html
+!! html/php
 <pre>
 'input'
 array (
@@ -15688,7 +15823,7 @@ Parser hook: nested tags
 noxml
 !! wikitext
 <tag><tag></tag></tag>
-!! html
+!! html/php
 <pre>
 '<tag>'
 array (
@@ -15701,14 +15836,14 @@ array (
 Parser hook: basic arguments
 !! wikitext
 <tag width=200 height = "100" depth = '50' square></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
   'width' => '200',
   'height' => '100',
   'depth' => '50',
-  'square' => 'square',
+  'square' => '',
 )
 </pre>
 
@@ -15718,7 +15853,7 @@ array (
 Parser hook: argument containing a forward slash (bug 5344)
 !! wikitext
 <tag filename='/tmp/bla'></tag>
-!! html
+!! html/php
 <pre>
 ''
 array (
@@ -15732,7 +15867,7 @@ array (
 Parser hook: empty input using terminated empty elements (bug 2374)
 !! wikitext
 <tag foo=bar/>text
-!! html
+!! html/php
 <pre>
 NULL
 array (
@@ -15749,14 +15884,14 @@ Parser hook: basic arguments using terminated empty elements (bug 2374)
 <tag width=200 height = "100" depth = '50' square/>
 other stuff
 </tag>
-!! html
+!! html/php
 <pre>
 NULL
 array (
   'width' => '200',
   'height' => '100',
   'depth' => '50',
-  'square' => 'square',
+  'square' => '',
 )
 </pre>
 <p>other stuff
@@ -15773,7 +15908,7 @@ Parser hook: static parser hook not inside a comment
 !! wikitext
 <statictag>hello, world</statictag>
 <statictag action=flush/>
-!! html
+!! html/php
 <p>hello, world
 </p>
 !! end
@@ -15784,7 +15919,7 @@ Parser hook: static parser hook inside a comment
 !! wikitext
 <!-- <statictag>hello, world</statictag> -->
 <statictag action=flush/>
-!! html
+!! html/php
 <p><br />
 </p>
 !! end
@@ -15843,20 +15978,24 @@ Sanitizer: Closing of open but not closed tags
 
 !! test
 Sanitizer: Closing of closed but not open tags
+!! options
+parsoid=wt2html
 !! wikitext
 </s>
-!! html
-<p>&lt;/s&gt;
-</p>
+!! html/php+tidy
+!! html/parsoid
 !! end
 
 !! test
 Sanitizer: Closing of closed but not open table tags
+!! options
+parsoid=wt2html
 !! wikitext
 Table not started</td></tr></table>
-!! html
-<p>Table not started&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
-</p>
+!! html/php+tidy
+<p>Table not started</p>
+!! html/parsoid
+<p>Table not started</p>
 !! end
 
 !! test
@@ -15903,7 +16042,7 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
        <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
 </div>
 !! html
-<div itemscope="itemscope">
+<div itemscope="">
 <p>    <meta itemprop="hello" content="world" />
        &lt;meta http-equiv="refresh" content="5"&gt;
        <meta itemprop="hello" content="5" />
@@ -16655,7 +16794,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 !! end
 
@@ -16675,7 +16814,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==a==
 ===aa===
 ====aaa====
@@ -16697,7 +16836,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===aa===
 ====aaa====
 !! end
@@ -16718,7 +16857,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ====aaa====
 !! end
 
@@ -16738,7 +16877,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==b==
 ===ba===
 ===bb===
@@ -16762,7 +16901,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===ba===
 !! end
 
@@ -16782,7 +16921,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===bb===
 ====bba====
 !! end
@@ -16803,7 +16942,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ====bba====
 !! end
 
@@ -16823,7 +16962,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===bc===
 !! end
 
@@ -16843,7 +16982,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ==c==
 ===ca===
 !! end
@@ -16864,7 +17003,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 ===ca===
 !! end
 
@@ -16884,7 +17023,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 !! end
 
 !! test
@@ -16895,7 +17034,7 @@ section=1
 ==a==
 ==bogus== not a legal section
 ==b==
-!! html
+!! html/php
 ==a==
 ==bogus== not a legal section
 !! end
@@ -16908,7 +17047,7 @@ section=2
 ==a==
 ==bogus== not a legal section
 ==b==
-!! html
+!! html/php
 ==b==
 !! end
 
@@ -16920,7 +17059,7 @@ section=1
 ==a==
 ==b== <!-- -->
 ==c==
-!! html
+!! html/php
 ==a==
 !! end
 
@@ -16932,7 +17071,7 @@ section=2
 ==a==
 ==b== <!-- -->
 ==c==
-!! html
+!! html/php
 ==b== <!-- -->
 !! end
 
@@ -16944,7 +17083,7 @@ section=1
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! html
+!! html/php
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 !! end
@@ -16957,11 +17096,10 @@ section=2
 ==a==
 ==bogus== <nowiki>not a legal section</nowiki>
 ==b==
-!! html
+!! html/php
 ==b==
 !! end
 
-
 # Formerly testing for bug 2587, now resolved by the use of unmarked sections
 # instead of respecting commented sections
 !! test
@@ -16971,7 +17109,7 @@ section=1
 !! wikitext
 <!-- -->==sec1==
 ==sec2==
-!! html
+!! html/php
 ==sec2==
 !!end
 
@@ -16982,11 +17120,10 @@ section=2
 !! wikitext
 <!-- -->==sec1==
 ==sec2==
-!! html
+!! html/php
 
 !!end
 
-
 # Formerly testing for bug 2607, now resolved by the use of unmarked sections
 # instead of respecting HTML-style headings
 !! test
@@ -17000,7 +17137,7 @@ unmarked
 one
 ==2==
 two
-!! html
+!! html/php
 ==1==
 one
 !! end
@@ -17016,7 +17153,7 @@ unmarked
 one
 ==2==
 two
-!! html
+!! html/php
 ==2==
 two
 !! end
@@ -17030,7 +17167,7 @@ section=1
 !! wikitext
 <noinclude>==unmarked==</noinclude>
 ==marked==
-!! html
+!! html/php
 ==marked==
 !!end
 
@@ -17045,7 +17182,7 @@ The line above must have a trailing space
 === <!--
 --> <!-- -->
 But just in case it doesn't...
-!! html
+!! html/php
 === <!--
 --> <!-- -->
 But just in case it doesn't...
@@ -17067,7 +17204,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 xxx
 
 ==a==
@@ -17098,7 +17235,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 xxx
 
@@ -17127,7 +17264,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 xxx
@@ -17157,7 +17294,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17188,7 +17325,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17215,7 +17352,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17246,7 +17383,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17276,7 +17413,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17307,7 +17444,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17338,7 +17475,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17367,7 +17504,7 @@ start
 ===bc===
 ==c==
 ===ca===
-!! html
+!! html/php
 start
 ==a==
 ===aa===
@@ -17389,7 +17526,7 @@ replace=2,"xxx"
  Preformatted initial line
 ==a==
 ===a===
-!! html
+!! html/php
  Preformatted initial line
 ==a==
 xxx
@@ -17403,7 +17540,7 @@ section=1
 !! wikitext
 ==a==
                     a
-!! html
+!! html/php
 ==a==
                     a
 !! end
@@ -17415,7 +17552,7 @@ section=1
 !! wikitext
 ==a==
                    a
-!! html
+!! html/php
 ==a==
                    a
 !! end
@@ -17433,7 +17570,7 @@ noxml section=2
 
 == Section Two ==
 stuff
-!! html
+!! html/php
 == Section Two ==
 stuff
 !! end
@@ -17450,7 +17587,7 @@ noxml replace=2,"xxx"
 
 == Section Two ==
 stuff
-!! html
+!! html/php
 == Section One ==
 <pre>
 =======
@@ -17460,7 +17597,6 @@ xxx
 !! end
 
 
-
 !! test
 Handling of &#x0A; in URLs
 !! wikitext
@@ -18247,7 +18383,7 @@ Don't fall for the self-closing div
 MSGNW magic word
 !! wikitext
 {{MSGNW:msg}}
-!! html
+!! html/php
 <p>&#91;&#91;:Template:Msg&#93;&#93;
 </p>
 !! end
@@ -19680,7 +19816,7 @@ wgAllowDisplayTitle=true
 wgRestrictDisplayTitle=false
 !! wikitext
 this is not the the title
-!! html
+!! html/php
 Parser test
 <p>this is not the the title
 </p>
@@ -19697,7 +19833,7 @@ wgRestrictDisplayTitle=false
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! html
+!! html/php
 whatever
 <p>this is not the the title
 </p>
@@ -19714,7 +19850,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:whatever}}
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 </p>
@@ -19731,7 +19867,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! html
+!! html/php
 screen
 <p>this is not the the title
 </p>
@@ -19747,7 +19883,7 @@ wgAllowDisplayTitle=false
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:screen}}
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 <a href="/index.php?title=Template:DISPLAYTITLE:screen&amp;action=edit&amp;redlink=1" class="new" title="Template:DISPLAYTITLE:screen (page does not exist)">Template:DISPLAYTITLE:screen</a>
@@ -19763,7 +19899,7 @@ title=[[Screen]]
 wgAllowDisplayTitle=false
 !! wikitext
 this is not the the title
-!! html
+!! html/php
 Screen
 <p>this is not the the title
 </p>
@@ -19780,7 +19916,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="display: none;">s</span>creen}}
-!! html
+!! html/php
 <span style="/* attempt to bypass $wgRestrictDisplayTitle */">s</span>creen
 <p>this is not the the title
 </p>
@@ -19797,7 +19933,7 @@ wgRestrictDisplayTitle=true
 !! wikitext
 this is not the the title
 {{DISPLAYTITLE:<span style="color: red;">s</span>creen}}
-!! html
+!! html/php
 <span style="color: red;">s</span>creen
 <p>this is not the the title
 </p>
@@ -19822,7 +19958,7 @@ Page status indicators: Weird syntaxes that are okay
 showindicators
 !! wikitext
 <indicator name="empty" />
-<indicator name></indicator>
+<indicator name="name"></indicator>
 !! html
 empty=
 name=
@@ -19885,7 +20021,7 @@ preload: check <noinclude> and <includeonly>
 preload
 !! wikitext
 Hello <noinclude>cruel</noinclude><includeonly>kind</includeonly> world.
-!! html
+!! html/php
 Hello kind world.
 !! end
 
@@ -19895,7 +20031,7 @@ preload: check <onlyinclude>
 preload
 !! wikitext
 Goodbye <onlyinclude>Hello world</onlyinclude>
-!! html
+!! html/php
 Hello world
 !! end
 
@@ -19905,7 +20041,7 @@ preload: can pass tags through if we want to
 preload
 !! wikitext
 <includeonly><</includeonly>includeonly>Hello world<includeonly><</includeonly>/includeonly>
-!! html
+!! html/php
 <includeonly>Hello world</includeonly>
 !! end
 
@@ -19915,7 +20051,7 @@ preload: check that it doesn't try to do tricks
 preload
 !! wikitext
 * <!-- Hello --> ''{{world}}'' {{<includeonly>subst:</includeonly>How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
-!! html
+!! html/php
 * <!-- Hello --> ''{{world}}'' {{subst:How are you}}{{ {{{|safesubst:}}} #if:1|2|3}}
 !! end
 
@@ -20747,6 +20883,30 @@ parsoid=wt2html,wt2wt
 <small><figure class="mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure></small>
 !! end
 
+!! test
+3. Bad treebuilder fixup of formatting elt is cleaned up
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+<small>'''foo[[File:Foobar.jpg|thumb|caption]]bar'''</small>
+!! html/parsoid
+<p><small><b>foo</b></small></p>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><small><b>caption</b></small></figcaption></figure>
+<p><small><b>bar</b></small></p>
+!! end
+
+!! test
+4. Bad treebuilder fixup of formatting elt is cleaned up: formatting tags around captionless images are ignored
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+'''<small>[[Image:Foobar.jpg|right|300px]]</small>'''
+!! html/parsoid
+<p><b><small></small></b></p>
+<figure class="mw-halign-right" typeof="mw:Image"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="34" width="300"/></a></figure>
+<p></p>
+!! end
+
 #### ----------------------------------------------------------------
 #### Parsoid-only testing of Parsoid's impl of <ref> and <references>
 #### tags. Parsoid's output for these tags differs from that of the
@@ -21600,8 +21760,6 @@ Headings: 5. Empty headings
 
 !! test
 Headings: 6a. Heading chars in SOL context (with trailing spaces)
-!! options
-parsoid
 !! wikitext
 <nowiki>=a=</nowiki>
 
@@ -21610,17 +21768,24 @@ parsoid
 <nowiki>=a=</nowiki>   
 
 <nowiki>=a=</nowiki>   
-!! html
-<p>=a=</p>
-<p>=a= </p>
-<p>=a= </p>
-<p>=a=         </p>
+!! html/php
+<p>=a=
+</p><p>=a= 
+</p><p>=a=     
+</p><p>=a=     
+</p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">=a=</span></p>
+
+<p><span typeof="mw:Nowiki">=a=</span></p> 
+
+<p><span typeof="mw:Nowiki">=a=</span></p>     
+
+<p><span typeof="mw:Nowiki">=a=</span></p>     
 !!end
 
 !! test
 Headings: 6b. Heading chars in SOL context (with trailing newlines)
-!! options
-parsoid
 !! wikitext
 <nowiki>=a=
 b</nowiki>
@@ -21633,48 +21798,65 @@ b</nowiki>
 
 <nowiki>=a=     
 b</nowiki>
-!! html
+!! html/php
 <p>=a=
-b</p>
-<p>=a= 
-b</p>
-<p>=a= 
-b</p>
-<p>=a=  
-b</p>
+b
+</p><p>=a= 
+b
+</p><p>=a=     
+b
+</p><p>=a=      
+b
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">=a=
+b</span></p>
+
+<p><span typeof="mw:Nowiki">=a= 
+b</span></p>
+
+<p><span typeof="mw:Nowiki">=a=        
+b</span></p>
+
+<p><span typeof="mw:Nowiki">=a=         
+b</span></p>
 !!end
 
 !! test
 Headings: 6c. Heading chars in SOL context (leading newline break)
-!! options
-parsoid
 !! wikitext
 a
 <nowiki>=b=</nowiki>
-!! html
+!! html/php
 <p>a
-=b=</p>
+=b=
+</p>
+!! html/parsoid
+<p>a
+<span typeof="mw:Nowiki">=b=</span>
 !!end
 
 !! test
 Headings: 6d. Heading chars in SOL context (with interspersed comments)
-!! options
-parsoid
 !! wikitext
 <!--c0--><nowiki>=a=</nowiki>
 
 <!--c1--><nowiki>=a=</nowiki> <!--c2-->         <!--c3-->
-!! html
-<p><!--c0-->=a=</p>
-<p><!--c1-->=a= <!--c2-->       <!--c3--></p>
+!! html/php
+<p>=a=
+</p><p>=a=      
+</p>
+!! html/parsoid
+<!--c0--><p><span typeof="mw:Nowiki">=a=</span></p>
+
+<!--c1--><p><span typeof="mw:Nowiki">=a=</span></p> <!--c2-->   <!--c3-->
 !!end
 
 !! test
 Headings: 6d. Heading chars in SOL context (No escaping needed)
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 =a=<div>b</div>
 !! wikitext
 =a=<div>b</div>
@@ -21684,11 +21866,11 @@ parsoid=html2wt
 Headings: 7. Insert a newline between new content and headings
 !! options
 parsoid=html2wt
-!! html
+!! html/parsoid
 <h2>NEW</h2>
 <p>new</p>
-<h2 data-parsoid='{"dsr":[0,5,2,2]}'>A</h2>
-<p data-parsoid='{"dsr":[6,7,0,0]}'>a</p>
+<h2 data-parsoid='{}'>A</h2>
+<p data-parsoid='{}'>a</p>
 !! wikitext
 == NEW ==
 new
@@ -21717,11 +21899,17 @@ Lists: 0. Outside nests
 <nowiki>#</nowiki>foo
 
 <nowiki>;Foo:</nowiki>bar
-!! html
+!! html/php
 <p>*foo
 </p><p>#foo
 </p><p>;Foo:bar
 </p>
+!! html/parsoid
+<p><span typeof="mw:Nowiki">*</span>foo</p>
+
+<p><span typeof="mw:Nowiki">#</span>foo</p>
+
+<p><span typeof="mw:Nowiki">;Foo:</span>bar</p>
 !!end
 
 !! test
@@ -23392,9 +23580,9 @@ Improperly nested inline or quotes tags with whitespace in between
 !!test
 Encapsulate protected attributes from wt
 !! wikitext
-<div typeof="mw:placeholder stuff" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
+<div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
 !! html/parsoid
-<body><div data-x-typeof="mw:placeholder stuff" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
+<body><div data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
 </body>
 !!end
 
@@ -24109,9 +24297,43 @@ parsoid=html2wt
 !! end
 
 !! test
-Headings: Force sol-transparent links and behavior switches to serialize before/after
+1. Headings: Force sol-transparent links and behavior switches to serialize before/after
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html
+<h2>hello there<link href="Category:A1" rel="mw:PageProp/Category" /></h2>
+<h2><link href="Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
+
+<h2><!--foo-->  <link href="Category:A3" rel="mw:PageProp/Category" />   how goes it</h2>
+<h2>it goes well   <link href="Category:A4" rel="mw:PageProp/Category" />  <!--bar--></h2>
+
+<h2 data-parsoid='{}'>howdy<link href="Category:A5" rel="mw:PageProp/Category" /></h2>
+
+<h2><meta property="mw:PageProp/toc" /> ok</h2>
+!! wikitext
+== hello there [[Category:A1]]  ==
+
+==  [[Category:A2]] hi pal ==
+
+== <!--foo-->   [[Category:A3]]    how goes it ==
+
+== it goes well    [[Category:A4]]  <!--bar-->  ==
+
+==howdy [[Category:A5]] ==
+
+==  __TOC__  ok ==
+!! end
+
+!! test
+2. Headings: Force sol-transparent links and behavior switches to serialize before/after
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
 !! html
 <h2>hello there<link href="Category:A1" rel="mw:PageProp/Category" /></h2>
 <h2><link href="Category:A2" rel="mw:PageProp/Category" />hi pal</h2>
@@ -24146,7 +24368,10 @@ __TOC__
 !! test
 Headings: Don't hoist metas that come from templates
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
 !! html
 <h2><span about="#mwt1" typeof="mw:Transclusion" data-parsoid="{}" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo [[Category:Foo]]"}},"i":0}}]}'>foo </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid="{}" /></h2>
 !! wikitext
@@ -24156,7 +24381,10 @@ parsoid=html2wt
 !! test
 Headings: Category in ref isn't hoisted
 !! options
-parsoid=html2wt
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
 !! html
 <h2> foo <span about="#mwt2" class="reference" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="#cite_note-1">[1]</a></span> </h2>
 
@@ -24261,6 +24489,16 @@ bar
 baz</li>
 <li>foo <b>bar</b>
 baz</li></ul>
+
+<dl><dt>hi
+ho </dt><dd data-parsoid='{"stx":"row"}'> hi
+ho</dd></dl>
+
+<dl><dd> <table>
+<tbody><tr><td> ha
+ha
+ha</td></tr>
+</tbody></table></dd></dl>
 !! wikitext
 == testing 123 ==
 
@@ -24276,6 +24514,14 @@ there</ref> ==
 
 * foo bar baz
 * foo '''bar''' baz
+
+; hi ho : hi ho
+
+: {|
+| ha
+ha
+ha
+|}
 !! end
 
 !! test
@@ -24603,6 +24849,31 @@ x<nowiki/>http://cscott.net<nowiki/>x
 x<nowiki/>http://cscott.net<nowiki/>x
 !! end
 
+!! test
+WTS of edited autolink-like text (T103364)
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    [ "span[typeof]", "removeAttr", "typeof" ]
+  ]
+}
+!! wikitext
+Not a link: <nowiki>http://example.com</nowiki>.
+!! wikitext/edited
+Not a link: <span><nowiki>http://example.com</nowiki></span>.
+!! end
+
+!! test
+WTS of newly-authored autolink-like text (T103364)
+!! options
+parsoid=html2wt
+!! html/parsoid
+<p>http://example.com is not a link.</p>
+!! wikitext
+<nowiki>http://example.com is not a link.</nowiki>
+!! end
+
 !! test
 Edited Redirect link should emit a non-piped wikitext link
 !! options
@@ -24761,7 +25032,7 @@ parsoid=html2wt
 !! end
 
 !! test
-Headings: Add space before/after == (T53744)
+1. Headings: Add space before/after == (T53744)
 !! options
 parsoid=html2wt
 !! html
@@ -24769,9 +25040,6 @@ parsoid=html2wt
 <h2> bar</h2>
 <h2>baz </h2>
 <h2><span> baz</span></h2>
-
-<!-- Even after hoisted content -->
-<h2> <link href="Category:A2" rel="mw:PageProp/Category" />ok</h2>
 !! wikitext
 == foo ==
 
@@ -24780,8 +25048,18 @@ parsoid=html2wt
 == baz ==
 
 == <span> baz</span> ==
+!! end
 
-<!-- Even after hoisted content -->
+!! test
+2. Headings: Add space before/after == even after hoisted content
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<h2> <link href="Category:A2" rel="mw:PageProp/Category" />ok</h2>
+!! wikitext
  [[Category:A2]]
 
 == ok ==
@@ -24853,8 +25131,11 @@ parsoid={
 }
 !! html
 <p> hi</p>
+<p>    hello</p>
 !! wikitext
 hi
+
+hello
 !! end
 
 !! test
 parsoid=html2wt
 !! html
 <p> hi</p>
+<p>    hello</p>
 !! wikitext
 <nowiki> </nowiki>hi
+
+<nowiki> </nowiki>   hello
+!! end
+
+!! test
+3. Indent Pre Nowiki: suppress whitespace after newlines in new paragraph or table cell
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<p>Foo
+ bar
+baz</p>
+
+<table><tr><td>Foo
+ bar
+ baz bang</td></tr></table>
+
+<p><!--boo--> foo
+ bar</p>
+
+<p> foo
+ bar<span>boo</span></p>
+!! wikitext
+Foo
+bar
+baz
+
+{|
+|Foo
+bar
+baz bang
+|}
+
+<!--boo-->foo
+bar
+
+foo
+bar<span>boo</span>
+!! end
+
+!! test
+1. New links that end in spaces
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html
+<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
+!! wikitext
+[[Berlin ]]<nowiki/>is the capital of Germany.
+
+[[Foo ]]'''bar'''
+!! end
+
+!! test
+2. New links that end in spaces
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin">Berlin </a>is the capital of Germany.</p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo </a><b>bar</b></p>
+!! wikitext
+[[Berlin]] is the capital of Germany.
+
+[[Foo]] '''bar'''
+!! end
+
+!! test
+3. Existing links that end in spaces
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html
+<p><a rel="mw:WikiLink" href="./Berlin" title="Berlin" data-parsoid='{"stx":"simple","a":{"href":"./Berlin"},"sa":{"href":"Berlin "}}'>Berlin </a>is the capital of Germany.</p>
+
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"Foo "}}'>Foo </a><b>bar</b></p>
+!! wikitext
+[[Berlin ]]<nowiki/>is the capital of Germany.
+
+[[Foo ]]'''bar'''
 !! end
 
 # ---------------------------------------------------
index 0b38168..4b90372 100644 (file)
@@ -141,16 +141,14 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load module script only
                        array(
                                array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               "<script>var RLQ = RLQ || []; RLQ.push( function () {\n"
-                                       . 'document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?'
-                                       . 'debug=false\u0026amp;lang=en\u0026amp;modules=test.foo\u0026amp;only'
-                                       . '=scripts\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");'
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.foo\u0026only=scripts\u0026skin=fallback\u0026*");'
                                        . "\n} );</script>"
                        ),
                        array(
                                // Don't condition wrap raw modules (like the startup module)
                                array( 'test.raw', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               '<script src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback&amp;*"></script>'
+                               '<script async src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.raw&amp;only=scripts&amp;skin=fallback&amp;*"></script>'
                        ),
                        // Load module styles only
                        // This also tests the order the modules are put into the url
@@ -162,28 +160,18 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load private module (only=scripts)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
-                               "<script>var RLQ = RLQ || []; RLQ.push( function () {\n"
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
                                        . "mw.test.baz({token:123});mw.loader.state({\"test.quux\":\"ready\"});\n"
                                        . "\n} );</script>"
                        ),
                        // Load private module (combined)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
-                               "<script>var RLQ = RLQ || []; RLQ.push( function () {\n"
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
                                        . "mw.loader.implement(\"test.quux\",function($,jQuery){"
                                        . "mw.test.baz({token:123});},{\"css\":[\".mw-icon{transition:none}\\n"
                                        . "\"]});\n\n} );</script>"
                        ),
-                       // Load module script with ESI
-                       array(
-                               array( 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS, true ),
-                               '<script><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=scripts&amp;skin=fallback&amp;*" /></script>'
-                       ),
-                       // Load module styles with ESI
-                       array(
-                               array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
-                               '<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.foo&amp;only=styles&amp;skin=fallback&amp;*" /></style>',
-                       ),
                        // Load no modules
                        array(
                                array( array(), ResourceLoaderModule::TYPE_COMBINED ),
@@ -197,11 +185,11 @@ class OutputPageTest extends MediaWikiTestCase {
                        // Load two modules in separate groups
                        array(
                                array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
-                               "<script>var RLQ = RLQ || []; RLQ.push( function () {\n"
-                                       . 'document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.bar\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");'
+                               "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.bar\u0026skin=fallback\u0026*");'
                                        . "\n} );</script>\n"
-                                       . "<script>var RLQ = RLQ || []; RLQ.push( function () {\n"
-                                       . 'document.write("\u003Cscript src=\"http://127.0.0.1:8080/w/load.php?debug=false\u0026amp;lang=en\u0026amp;modules=test.group.foo\u0026amp;skin=fallback\u0026amp;*\"\u003E\u003C/script\u003E");'
+                                       . "<script>window.RLQ = window.RLQ || []; window.RLQ.push( function () {\n"
+                                       . 'mw.loader.load("http://127.0.0.1:8080/w/load.php?debug=false\u0026lang=en\u0026modules=test.group.foo\u0026skin=fallback\u0026*");'
                                        . "\n} );</script>"
                        ),
                );
@@ -219,7 +207,6 @@ class OutputPageTest extends MediaWikiTestCase {
        public function testMakeResourceLoaderLink( $args, $expectedHtml ) {
                $this->setMwGlobals( array(
                        'wgResourceLoaderDebug' => false,
-                       'wgResourceLoaderUseESI' => true,
                        'wgLoadScript' => 'http://127.0.0.1:8080/w/load.php',
                        // Affects whether CDATA is inserted
                        'wgWellFormedXml' => false,
index 880572b..575efd6 100644 (file)
@@ -53,7 +53,7 @@ class ApiBlockTest extends ApiTestCase {
                        'action' => 'block',
                        'user' => 'UTApiBlockee',
                        'reason' => 'Some reason',
-                       'token' => $tokens['blocktoken'] ), null, false, self::$users['sysop']->user );
+                       'token' => $tokens['blocktoken'] ), null, false, self::$users['sysop']->getUser() );
 
                $block = Block::newFromTarget( 'UTApiBlockee' );
 
@@ -77,7 +77,7 @@ class ApiBlockTest extends ApiTestCase {
                        ),
                        null,
                        false,
-                       self::$users['sysop']->user
+                       self::$users['sysop']->getUser()
                );
        }
 }
index e006bf7..61a8ad1 100644 (file)
@@ -262,18 +262,18 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // conflicting edit to redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit, following the redirect
@@ -284,7 +284,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'basetimestamp' => $baseTime,
                        'section' => 'new',
                        'redirect' => true,
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no problems expected when following redirect" );
@@ -308,18 +308,18 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // conflicting edit to redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]\n\n[[Category:Test]]" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit, following the redirect but without creating a section
@@ -330,7 +330,7 @@ class ApiEditPageTest extends ApiTestCase {
                                'text' => 'nix bar!',
                                'basetimestamp' => $baseTime,
                                'redirect' => true,
-                       ), null, self::$users['sysop']->user );
+                       ), null, self::$users['sysop']->getUser() );
 
                        $this->fail( 'redirect-appendonly error expected' );
                } catch ( UsageException $ex ) {
@@ -350,13 +350,13 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // conflicting edit
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $page, '20120101020202' );
 
                // try to save edit, expect conflict
@@ -366,7 +366,7 @@ class ApiEditPageTest extends ApiTestCase {
                                'title' => $name,
                                'text' => 'nix bar!',
                                'basetimestamp' => $baseTime,
-                       ), null, self::$users['sysop']->user );
+                       ), null, self::$users['sysop']->getUser() );
 
                        $this->fail( 'edit conflict expected' );
                } catch ( UsageException $ex ) {
@@ -389,13 +389,13 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
                $baseTime = $page->getRevision()->getTimestamp();
 
                // conflicting edit
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $page, '20120101020202' );
 
                // try to save edit, expect no conflict
@@ -405,7 +405,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => 'nix bar!',
                        'basetimestamp' => $baseTime,
                        'section' => 'new',
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no edit conflict expected here" );
@@ -432,17 +432,17 @@ class ApiEditPageTest extends ApiTestCase {
 
                // base edit for content
                $page->doEditContent( new WikitextContent( "Foo" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $page, '20120101000000' );
 
                // base edit for redirect
                $rpage->doEditContent( new WikitextContent( "#REDIRECT [[$name]]" ),
-                       "testing 1", EDIT_NEW, false, self::$users['sysop']->user );
+                       "testing 1", EDIT_NEW, false, self::$users['sysop']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101000000' );
 
                // new edit to content
                $page->doEditContent( new WikitextContent( "Foo bar" ),
-                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->user );
+                       "testing 2", EDIT_UPDATE, $page->getLatest(), self::$users['uploader']->getUser() );
                $this->forceRevisionDate( $rpage, '20120101020202' );
 
                // try to save edit; should work, following the redirect.
@@ -452,7 +452,7 @@ class ApiEditPageTest extends ApiTestCase {
                        'text' => 'nix bar!',
                        'section' => 'new',
                        'redirect' => true,
-               ), null, self::$users['sysop']->user );
+               ), null, self::$users['sysop']->getUser() );
 
                $this->assertEquals( 'Success', $re['edit']['result'],
                        "no edit conflict expected here" );
index 88a99e9..7dfd14f 100644 (file)
@@ -23,7 +23,7 @@ class ApiLoginTest extends ApiTestCase {
                global $wgServer;
 
                $user = self::$users['sysop'];
-               $user->user->logOut();
+               $user->getUser()->logOut();
 
                if ( !isset( $wgServer ) ) {
                        $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
@@ -68,7 +68,7 @@ class ApiLoginTest extends ApiTestCase {
                }
 
                $user = self::$users['sysop'];
-               $user->user->logOut();
+               $user->getUser()->logOut();
 
                $ret = $this->doApiRequest( array(
                                "action" => "login",
index b03836e..362d647 100644 (file)
@@ -25,7 +25,7 @@ class ApiRevisionDeleteTest extends ApiTestCase {
        }
 
        public function testHidingRevisions() {
-               $user = self::$users['sysop']->user;
+               $user = self::$users['sysop']->getUser();
                $revid = array_shift( $this->revs );
                $out = $this->doApiRequest( array(
                        'action' => 'revisiondelete',
@@ -80,7 +80,7 @@ class ApiRevisionDeleteTest extends ApiTestCase {
        }
 
        public function testUnhidingOutput() {
-               $user = self::$users['sysop']->user;
+               $user = self::$users['sysop']->getUser();
                $revid = array_shift( $this->revs );
                // Hide revisions
                $this->doApiRequest( array(
index e9dff9f..a374f09 100644 (file)
@@ -25,7 +25,7 @@ class ApiUnblockTest extends ApiTestCase {
                        ),
                        null,
                        false,
-                       self::$users['sysop']->user
+                       self::$users['sysop']->getUser()
                );
        }
 }
index b7f7d10..c852d72 100644 (file)
@@ -80,7 +80,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                try {
                        $this->doApiRequestWithToken( array(
                                'action' => 'upload',
-                       ), $session, self::$users['uploader']->user );
+                       ), $session, self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                        $this->assertEquals( "One of the parameters filekey, file, url, statuskey is required",
@@ -126,7 +126,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -165,7 +165,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
 
                $exception = false;
                try {
-                       $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->user );
+                       $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $this->assertContains( 'The file you submitted was empty', $e->getMessage() );
                        $exception = true;
@@ -215,7 +215,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -232,7 +232,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -286,7 +286,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -311,7 +311,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -331,7 +331,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
         */
        public function testUploadStash( $session ) {
                $this->setMwGlobals( array(
-                       'wgUser' => self::$users['uploader']->user, // @todo FIXME: still used somewhere
+                       'wgUser' => self::$users['uploader']->getUser(), // @todo FIXME: still used somewhere
                ) );
 
                $extension = 'png';
@@ -368,7 +368,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user ); // FIXME: leaks a temporary file
+                               self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -397,7 +397,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
@@ -415,7 +415,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
        public function testUploadChunks( $session ) {
                $this->setMwGlobals( array(
                        // @todo FIXME: still used somewhere
-                       'wgUser' => self::$users['uploader']->user,
+                       'wgUser' => self::$users['uploader']->getUser(),
                ) );
 
                $chunkSize = 1048576;
@@ -473,7 +473,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                                // Upload fist chunk ( and get the session key )
                                try {
                                        list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                                               self::$users['uploader']->user );
+                                               self::$users['uploader']->getUser() );
                                } catch ( UsageException $e ) {
                                        $this->markTestIncomplete( $e->getMessage() );
                                }
@@ -501,7 +501,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                        // Upload current chunk
                        try {
                                list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session,
-                                       self::$users['uploader']->user );
+                                       self::$users['uploader']->getUser() );
                        } catch ( UsageException $e ) {
                                $this->markTestIncomplete( $e->getMessage() );
                        }
@@ -541,7 +541,7 @@ class ApiUploadTest extends ApiTestCaseUpload {
                $exception = false;
                try {
                        list( $result ) = $this->doApiRequestWithToken( $params, $session,
-                               self::$users['uploader']->user );
+                               self::$users['uploader']->getUser() );
                } catch ( UsageException $e ) {
                        $exception = true;
                }
index 451d82a..3db9172 100644 (file)
@@ -189,18 +189,34 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
        public function testDuplicateTableStructure() {
                $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                $db->query( 'CREATE TABLE foo(foo, barfoo)' );
+               $db->query( 'CREATE INDEX index1 ON foo(foo)' );
+               $db->query( 'CREATE UNIQUE INDEX index2 ON foo(barfoo)' );
 
                $db->duplicateTableStructure( 'foo', 'bar' );
                $this->assertEquals( 'CREATE TABLE "bar"(foo, barfoo)',
                        $db->selectField( 'sqlite_master', 'sql', array( 'name' => 'bar' ) ),
                        'Normal table duplication'
                );
+               $indexList = $db->query( 'PRAGMA INDEX_LIST("bar")' );
+               $index = $indexList->next();
+               $this->assertEquals( 'bar_index1', $index->name );
+               $this->assertEquals( '0', $index->unique );
+               $index = $indexList->next();
+               $this->assertEquals( 'bar_index2', $index->name );
+               $this->assertEquals( '1', $index->unique );
 
                $db->duplicateTableStructure( 'foo', 'baz', true );
                $this->assertEquals( 'CREATE TABLE "baz"(foo, barfoo)',
                        $db->selectField( 'sqlite_temp_master', 'sql', array( 'name' => 'baz' ) ),
                        'Creation of temporary duplicate'
                );
+               $indexList = $db->query( 'PRAGMA INDEX_LIST("baz")' );
+               $index = $indexList->next();
+               $this->assertEquals( 'baz_index1', $index->name );
+               $this->assertEquals( '0', $index->unique );
+               $index = $indexList->next();
+               $this->assertEquals( 'baz_index2', $index->name );
+               $this->assertEquals( '1', $index->unique );
                $this->assertEquals( 0,
                        $db->selectField( 'sqlite_master', 'COUNT(*)', array( 'name' => 'baz' ) ),
                        'Create a temporary duplicate only'
index 38000f6..a618889 100644 (file)
@@ -6,7 +6,7 @@
  * @group medium
  */
 class SwiftFileBackendTest extends MediaWikiTestCase {
-       /** @var SwiftFileBackend */
+       /** @var TestingAccessWrapper Proxy to SwiftFileBackend */
        private $backend;
 
        protected function setUp() {
@@ -29,6 +29,7 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
        /**
         * @dataProvider provider_testSanitzeHdrs
         * @covers SwiftFileBackend::sanitzeHdrs
+        * @covers SwiftFileBackend::getCustomHeaders
         */
        public function testSanitzeHdrs( $raw, $sanitized ) {
                $hdrs = $this->backend->sanitizeHdrs( array( 'headers' => $raw ) );
@@ -44,7 +45,7 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
                                        'content-type'   => 'image+bitmap/jpeg',
                                        'content-disposition' => 'inline',
                                        'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
+                                       'content-Custom' => 'hello',
                                        'x-content-custom' => 'hello'
                                ),
                                array(
@@ -58,7 +59,7 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
                                array(
                                        'content-length' => 345,
                                        'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
+                                       'content-Disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
                                        'x-content-custom' => 'hello'
@@ -88,4 +89,60 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
                        )
                );
        }
+
+       /**
+        * @dataProvider provider_testGetMetadataHeaders
+        * @covers SwiftFileBackend::getMetadataHeaders
+        */
+       public function testGetMetadataHeaders( $raw, $sanitized ) {
+               $hdrs = $this->backend->getMetadataHeaders( $raw );
+
+               $this->assertEquals( $hdrs, $sanitized, 'getMetadataHeaders() has expected result' );
+       }
+
+       public static function provider_testGetMetadataHeaders() {
+               return array(
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello',
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1Base36' => 'a3deadfg...',
+                               ),
+                               array(
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1base36' => 'a3deadfg...',
+                               )
+                       )
+               );
+       }
+
+       /**
+        * @dataProvider provider_testGetMetadata
+        * @covers SwiftFileBackend::getMetadata
+        */
+       public function testGetMetadata( $raw, $sanitized ) {
+               $hdrs = $this->backend->getMetadata( $raw );
+
+               $this->assertEquals( $hdrs, $sanitized, 'getMetadata() has expected result' );
+       }
+
+       public static function provider_testGetMetadata() {
+               return array(
+                       array(
+                               array(
+                                       'content-length' => 345,
+                                       'content-custom' => 'hello',
+                                       'x-content-custom' => 'hello',
+                                       'x-object-meta-custom' => 5,
+                                       'x-object-meta-sha1Base36' => 'a3deadfg...',
+                               ),
+                               array(
+                                       'custom' => 5,
+                                       'sha1base36' => 'a3deadfg...',
+                               )
+                       )
+               );
+       }
 }
\ No newline at end of file
diff --git a/tests/phpunit/includes/libs/SamplingStatsdClientTest.php b/tests/phpunit/includes/libs/SamplingStatsdClientTest.php
new file mode 100644 (file)
index 0000000..be6732d
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+
+use Liuggio\StatsdClient\Entity\StatsdData;
+
+class SamplingStatsdClientTest extends PHPUnit_Framework_TestCase {
+       /**
+        * @dataProvider samplingDataProvider
+        */
+       public function testSampling( $data, $sampleRate, $seed, $expectWrite ) {
+               $sender = $this->getMock( 'Liuggio\StatsdClient\Sender\SenderInterface' );
+               $sender->expects( $this->any() )->method( 'open' )->will( $this->returnValue( true ) );
+               if ( $expectWrite ) {
+                       $sender->expects( $this->once() )->method( 'write' )
+                               ->with( $this->anything(), $this->equalTo( $data ) );
+               } else {
+                       $sender->expects( $this->never() )->method( 'write' );
+               }
+               mt_srand( $seed );
+               $client = new SamplingStatsdClient( $sender );
+               $client->send( $data, $sampleRate );
+       }
+
+       public function samplingDataProvider() {
+               $unsampled = new StatsdData();
+               $unsampled->setKey( 'foo' );
+               $unsampled->setValue( 1 );
+
+               $sampled = new StatsdData();
+               $sampled->setKey( 'foo' );
+               $sampled->setValue( 1 );
+               $sampled->setSampleRate( '0.1' );
+
+               return array(
+                       // $data, $sampleRate, $seed, $expectWrite
+                       array( $unsampled, 1, 0 /*0.44*/, $unsampled ),
+                       array( $sampled, 1, 0 /*0.44*/, null ),
+                       array( $sampled, 1, 4 /*0.03*/, $sampled ),
+                       array( $unsampled, 0.1, 4 /*0.03*/, $sampled ),
+                       array( $sampled, 0.5, 0 /*0.44*/, null ),
+                       array( $sampled, 0.5, 4 /*0.03*/, $sampled ),
+               );
+       }
+}
index a79c9a8..0964137 100644 (file)
@@ -38,6 +38,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
        }
 
        public static function provideRegisterHooks() {
+               $merge = array( ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive' );
                // Format:
                // Current $wgHooks
                // Content in extension.json
@@ -47,19 +48,19 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                        array(
                                array(),
                                self::$default,
-                               array(),
+                               $merge,
                        ),
                        // No current hooks, adding one for "FooBaz"
                        array(
                                array(),
                                array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
-                               array( 'FooBaz' => array( 'FooBazCallback' ) ),
+                               array( 'FooBaz' => array( 'FooBazCallback' ) ) + $merge,
                        ),
                        // Hook for "FooBaz", adding another one
                        array(
                                array( 'FooBaz' => array( 'PriorCallback' ) ),
                                array( 'Hooks' => array( 'FooBaz' => 'FooBazCallback' ) ) + self::$default,
-                               array( 'FooBaz' => array( 'PriorCallback', 'FooBazCallback' ) ),
+                               array( 'FooBaz' => array( 'PriorCallback', 'FooBazCallback' ) ) + $merge,
                        ),
                        // Hook for "BarBaz", adding one for "FooBaz"
                        array(
@@ -68,7 +69,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array(
                                        'BarBaz' => array( 'BarBazCallback' ),
                                        'FooBaz' => array( 'FooBazCallback' ),
-                               ),
+                               ) + $merge,
                        ),
                        // Callbacks for FooBaz wrapped in an array
                        array(
@@ -76,7 +77,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array( 'Hooks' => array( 'FooBaz' => array( 'Callback1' ) ) ) + self::$default,
                                array(
                                        'FooBaz' => array( 'Callback1' ),
-                               ),
+                               ) + $merge,
                        ),
                        // Multiple callbacks for FooBaz hook
                        array(
@@ -84,7 +85,7 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                                array( 'Hooks' => array( 'FooBaz' => array( 'Callback1', 'Callback2' ) ) ) + self::$default,
                                array(
                                        'FooBaz' => array( 'Callback1', 'Callback2' ),
-                               ),
+                               ) + $merge,
                        ),
                );
        }
index 515ce11..b8b1b06 100644 (file)
@@ -101,6 +101,50 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                        ),
                                )
                        ),
+                       array(
+                               'Global already set, 1d array that appends',
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'foobar',
+                                               'foo'
+                                       ),
+                               ),
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'barbaz',
+                                       ),
+                               ),
+                               array(
+                                       'mwAvailableRights' => array(
+                                               'barbaz',
+                                               'foobar',
+                                               'foo',
+                                       ),
+                               )
+                       ),
+                       array(
+                               'Global already set, 2d array with integer keys',
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => true,
+                                               102 => false
+                                       ),
+                               ),
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => false,
+                                               500 => true,
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_plus',
+                                       ),
+                               ),
+                               array(
+                                       'mwNamespacesFoo' => array(
+                                               100 => false,
+                                               102 => false,
+                                               500 => true,
+                                       ),
+                               )
+                       ),
                        array(
                                'No global already set, $wgHooks',
                                array(
@@ -111,6 +155,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                'FooBarEvent' => array(
                                                        'FooBarClass::onFooBarEvent'
                                                ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive'
                                        ),
                                ),
                                array(
@@ -138,6 +183,7 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                'FooBarEvent' => array(
                                                        'BazBarClass::onFooBarEvent',
                                                ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive',
                                        ),
                                ),
                                array(
@@ -173,7 +219,8 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                                        'right' => true,
                                                        'somethingtwo' => false,
                                                        'nonduplicated' => true,
-                                               )
+                                               ),
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_plus_2d',
                                        ),
                                ),
                                array(
index 41754b4..78771de 100644 (file)
                                },
 
                                teardown: function () {
-                                       var timers, active;
+                                       var timers, pending, $activeLen;
 
                                        localEnv.teardown.call( this );
 
                                        }
 
                                        // Test should use fake XHR, wait for requests, or call abort()
-                                       if ( $.active !== undefined && $.active !== 0 ) {
-                                               active = $.grep( ajaxRequests, function ( ajax ) {
+                                       $activeLen = $.active;
+                                       if ( $activeLen !== undefined && $activeLen !== 0 ) {
+                                               pending = $.grep( ajaxRequests, function ( ajax ) {
                                                        return ajax.xhr.state() === 'pending';
                                                } );
-                                               if ( active.length !== $.active ) {
+                                               if ( pending.length !== $activeLen ) {
                                                        mw.log.warn( 'Pending requests does not match jQuery.active count' );
                                                }
                                                // Force requests to stop to give the next test a clean start
-                                               $.each( active, function ( i, ajax ) {
-                                                       mw.log.warn( 'Unfinished AJAX request #' + i, ajax.options );
+                                               $.each( pending, function ( i, ajax ) {
+                                                       mw.log.warn( 'Pending AJAX request #' + i, ajax.options );
                                                        ajax.xhr.abort();
                                                } );
                                                ajaxRequests = [];
 
-                                               throw new Error( 'Unfinished AJAX requests: ' + active.length );
+                                               throw new Error( 'Pending AJAX requests: ' + pending.length + ' (active: ' + $activeLen + ')' );
                                        }
                                }
                        };
index 03a3f35..12173c5 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -310,7 +310,6 @@ function wfStreamThumb( array $params ) {
                        wfThumbError( 500, 'Could not stream the file' );
                } else {
                        RequestContext::getMain()->getStats()->timing( 'media.thumbnail.stream', $streamtime );
-                       wfDebugLog( 'thumbnailaccess', time() . ' ' . $thumbPath . ' ' . ob_get_length() . ' Streamed ' );
                }
                return;
        }