Merge "Move some more classes to comply with class per file"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 25 May 2017 16:15:31 +0000 (16:15 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 25 May 2017 16:15:31 +0000 (16:15 +0000)
167 files changed:
.mailmap
CREDITS
RELEASE-NOTES-1.30
autoload.php
composer.json
docs/extension.schema.v2.json
includes/Autopromote.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Sanitizer.php
includes/WatchedItemStore.php
includes/actions/InfoAction.php
includes/api/ApiHelp.php
includes/api/ApiParse.php
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/hu.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/zh-hans.json
includes/auth/AuthManager.php
includes/auth/Throttler.php
includes/cache/FileCacheBase.php
includes/changes/EnhancedChangesList.php
includes/changetags/ChangeTags.php
includes/exception/MWException.php
includes/exception/MWExceptionRenderer.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/htmlform/fields/HTMLUsersMultiselectField.php
includes/installer/MssqlInstaller.php
includes/installer/MysqlInstaller.php
includes/installer/i18n/hu.json
includes/installer/i18n/lij.json
includes/libs/objectcache/MemcachedClient.php
includes/libs/objectcache/MemcachedPeclBagOStuff.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/media/DjVu.php
includes/media/Exif.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/GIFMetadataExtractor.php
includes/media/MediaHandler.php
includes/media/PNGMetadataExtractor.php
includes/media/XCF.php
includes/parser/Parser.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoader.php
includes/session/SessionBackend.php
includes/session/SessionManager.php
includes/skins/Skin.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialSearch.php
includes/specials/pagers/NewFilesPager.php
includes/user/User.php
includes/widget/search/InterwikiSearchResultSetWidget.php
languages/data/ZhConversion.php
languages/i18n/af.json
languages/i18n/ar.json
languages/i18n/atj.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bs.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/lij.json
languages/i18n/lzh.json
languages/i18n/mhr.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/pam.json
languages/i18n/ps.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sah.json
languages/i18n/sd.json
languages/i18n/shn.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/th.json
languages/i18n/tl.json
languages/i18n/tt-cyrl.json
languages/i18n/tyv.json
languages/i18n/udm.json
languages/i18n/uk.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/importImages.php
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/refreshFileHeaders.php
resources/Resources.php
resources/src/jquery/jquery.makeCollapsible.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.newFiles.js [new file with mode: 0644]
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/page/ready.js
resources/src/mediawiki/page/startup.js
resources/src/mediawiki/page/watch.js
tests/common/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/AutopromoteTest.php [new file with mode: 0644]
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TestingAccessWrapper.php [deleted file]
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/logging/NewUsersLogFormatterTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/media/ExifTest.php
tests/phpunit/includes/media/GIFMetadataExtractorTest.php
tests/phpunit/includes/media/GIFTest.php
tests/phpunit/includes/media/JpegTest.php
tests/phpunit/includes/media/PNGTest.php
tests/phpunit/includes/media/TiffTest.php
tests/phpunit/includes/media/XCFTest.php
tests/phpunit/includes/pager/RangeChronologicalPagerTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/search/SearchEnginePrefixTest.php
tests/phpunit/includes/session/SessionBackendTest.php
tests/phpunit/includes/session/TestBagOStuff.php
tests/phpunit/includes/user/UserGroupMembershipTest.php
tests/phpunit/includes/user/UserTest.php
tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js

index ae18878..e649fb1 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -412,6 +412,7 @@ Sucheta Ghoshal <sghoshal@wikimedia.org>
 Sumit Asthana <asthana.sumit23@gmail.com>
 TerraCodes <terracodes@tools.wmflabs.org>
 Thalia Chan <thalia@cantorion.org>
+Thalia Chan <thalia@cantorion.org> <thalia.e.chan@googlemail.com>
 Thiemo Mättig <thiemo.maettig@wikimedia.de>
 Thiemo Mättig <thiemo.maettig@wikimedia.de> <mr.heat@gmx.de>
 This, that and the other <at.light@live.com.au>
diff --git a/CREDITS b/CREDITS
index 1530425..14c454e 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -16,6 +16,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Aashaka Shah
 * abhinand
 * Abhishek Das
+* Ad Huikeshoven
 * Adam Miller
 * Adam Roses Wight
 * addshore
@@ -358,6 +359,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Ltrlg
 * Luc Van Oostenryck
 * Lucas Garczewski
+* Lucas Werkmeister
 * Luigi Corsaro
 * Luis Felipe Schenone
 * Luke Faraone
@@ -434,6 +436,7 @@ The following list can be found parsed under Special:Version/Credits -->
 * Mohamed Magdy
 * Molly White
 * Moriel Schottlender
+* Moritz Oberhauser
 * Mormegil
 * Mr. E23
 * MrBlueSky
@@ -618,10 +621,11 @@ The following list can be found parsed under Special:Version/Credits -->
 * T.D. Corell
 * Tarquin
 * TerraCodes
+* Thalia Chan
 * The Discoverer
 * The Evil IP address
 * theopolisme
-* Thiemo Mättig (WMDE)
+* Thiemo Mättig
 * This, that and the other
 * tholam
 * Thomas Arrow
index fbe23ab..9ff7e97 100644 (file)
@@ -17,6 +17,10 @@ production.
   This is intended for extensions that want control
   over the instantiation of their jobs,
   to allow for proper dependency injection.
+* $wgResourceModules may now specify callback functions as an alternative
+  to plain class names, using the 'factory' key in the module description
+  array. This allows dependency injection to be used for ResourceLoader modules.
+* $wgExceptionHooks has been removed.
 
 === New features in 1.30 ===
 * (T37247) Output from Parser::parse() will now be wrapped in a div with
@@ -34,7 +38,8 @@ production.
 * …
 
 ==== New external libraries ====
-* …
+* The class \TestingAccessWrapper has been moved to the external library
+  wikimedia/testing-access-wrapper and renamed \Wikimedia\TestingAccessWrapper.
 
 ==== Removed and replaced external libraries ====
 * …
@@ -72,6 +77,12 @@ changes to languages because of Phabricator reports.
 * The ExtractThumbParameters hook (deprecated in 1.21) was removed.
 * The OutputPage::addParserOutputNoText and ::getHeadLinks methods (both
   deprecated in 1.24) were removed.
+* wfMemcKey() and wfGlobalCacheKey() were deprecated. BagOStuff::makeKey() and
+  BagOStuff::makeGlobalKey() should be used instead.
+* (T146304) Preprocessor handling of LanguageConverter markup has been improved.
+  As a result of the new uniform handling, '-{' may need to be escaped
+  (for example, as '-<nowiki/>{') where it occurs inside template arguments
+  or wikilinks.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index 5576e84..6d2b66b 100644 (file)
@@ -684,6 +684,7 @@ $wgAutoloadLocalClasses = [
        'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php',
        'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php',
        'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php',
+       'LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php',
        'LCStore' => __DIR__ . '/includes/cache/localisation/LCStore.php',
        'LCStoreCDB' => __DIR__ . '/includes/cache/localisation/LCStoreCDB.php',
        'LCStoreDB' => __DIR__ . '/includes/cache/localisation/LCStoreDB.php',
index c68faa6..e6f2d5e 100644 (file)
@@ -58,7 +58,7 @@
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
                "phpunit/phpunit": "4.8.35",
-               "psy/psysh": "0.8.3",
+               "psy/psysh": "0.8.5",
                "wikimedia/avro": "1.7.7",
                "wikimedia/testing-access-wrapper": "~1.0",
                "wmde/hamcrest-html-matchers": "^0.1.0"
index d5a9b65..6345632 100644 (file)
                                                        }
                                                },
                                                {
-                                                       "description": "An arbitrary ResourceLoaderModule definition",
+                                                       "description": "An arbitrary ResourceLoaderModule definition by class",
                                                        "properties": {
                                                                "class": {
                                                                        "type": "string",
                                                                }
                                                        },
                                                        "required": ["class"]
+                                               },
+                                               {
+                                                       "description": "An arbitrary ResourceLoaderModule definition with instantiator",
+                                                       "properties": {
+                                                               "factory": {
+                                                                       "type": "string",
+                                                                       "description": "A static instantiator function for creating the ResourceLoaderModule object."
+                                                               }
+                                                       },
+                                                       "required": ["factory"]
                                                }
                                        ]
                                }
index 56fbb07..a01465e 100644 (file)
@@ -177,7 +177,13 @@ class Autopromote {
                                }
                                return false;
                        case APCOND_EDITCOUNT:
-                               return $user->getEditCount() >= $cond[1];
+                               $reqEditCount = $cond[1];
+
+                               // T157718: Avoid edit count lookup if specified edit count is 0 or invalid
+                               if ( $reqEditCount <= 0 ) {
+                                       return true;
+                               }
+                               return $user->getEditCount() >= $reqEditCount;
                        case APCOND_AGE:
                                $age = time() - wfTimestampOrNull( TS_UNIX, $user->getRegistration() );
                                return $age >= $cond[1];
index 0d82d35..19c585d 100644 (file)
@@ -7431,15 +7431,6 @@ $wgSpecialPageCacheUpdates = [
        'Statistics' => [ 'SiteStatsUpdate', 'cacheUpdate' ]
 ];
 
-/**
- * Hooks that are used for outputting exceptions.  Format is:
- *   $wgExceptionHooks[] = $funcname
- * or:
- *   $wgExceptionHooks[] = [ $class, $funcname ]
- * Hooks should return strings or false
- */
-$wgExceptionHooks = [];
-
 /**
  * Page property link table invalidation lists. When a page property
  * changes, this may require other link tables to be updated (eg
index d21cc1d..1859c02 100644 (file)
@@ -1276,7 +1276,7 @@ function wfIncrStats( $key, $count = 1 ) {
  * @return bool
  */
 function wfReadOnly() {
-       return \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+       return MediaWikiServices::getInstance()->getReadOnlyMode()
                ->isReadOnly();
 }
 
@@ -1289,7 +1289,7 @@ function wfReadOnly() {
  * @return string|bool String when in read-only mode; false otherwise
  */
 function wfReadOnlyReason() {
-       return \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+       return MediaWikiServices::getInstance()->getReadOnlyMode()
                ->getReason();
 }
 
@@ -1300,7 +1300,7 @@ function wfReadOnlyReason() {
  * @since 1.27
  */
 function wfConfiguredReadOnlyReason() {
-       return \MediaWiki\MediaWikiServices::getInstance()->getConfiguredReadOnlyMode()
+       return MediaWikiServices::getInstance()->getConfiguredReadOnlyMode()
                ->getReason();
 }
 
@@ -2962,6 +2962,7 @@ function wfGetPrecompiledData( $name ) {
 /**
  * Make a cache key for the local wiki.
  *
+ * @deprecated since 1.30 Call makeKey on a BagOStuff instance
  * @param string $args,...
  * @return string
  */
@@ -2998,6 +2999,7 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
  * instead. Must have a prefix as otherwise keys that use a database name
  * in the first segment will clash with wfMemcKey/wfForeignMemcKey.
  *
+ * @deprecated since 1.30 Call makeGlobalKey on a BagOStuff instance
  * @since 1.26
  * @param string $args,...
  * @return string
@@ -3079,9 +3081,9 @@ function wfGetDB( $db, $groups = [], $wiki = false ) {
  */
 function wfGetLB( $wiki = false ) {
        if ( $wiki === false ) {
-               return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancer();
+               return MediaWikiServices::getInstance()->getDBLoadBalancer();
        } else {
-               $factory = \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $factory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                return $factory->getMainLB( $wiki );
        }
 }
@@ -3094,7 +3096,7 @@ function wfGetLB( $wiki = false ) {
  * @return \Wikimedia\Rdbms\LBFactory
  */
 function wfGetLBFactory() {
-       return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+       return MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
 }
 
 /**
index e71cf18..c739b30 100644 (file)
@@ -285,9 +285,9 @@ class OutputPage extends ContextSource {
        private $mTarget = null;
 
        /**
-        * @var bool Whether parser output should contain table of contents
+        * @var bool Whether parser output contains a table of contents
         */
-       private $mEnableTOC = true;
+       private $mEnableTOC = false;
 
        /**
         * @var bool Whether parser output should contain section edit links
@@ -1839,6 +1839,14 @@ class OutputPage extends ContextSource {
                $outputPage = $this;
                Hooks::run( 'LanguageLinks', [ $this->getTitle(), &$this->mLanguageLinks, &$linkFlags ] );
                Hooks::run( 'OutputPageParserOutput', [ &$outputPage, $parserOutput ] );
+
+               // This check must be after 'OutputPageParserOutput' runs in addParserOutputMetadata
+               // so that extensions may modify ParserOutput to toggle TOC.
+               // This cannot be moved to addParserOutputText because that is not
+               // called by EditPage for Preview.
+               if ( $parserOutput->getTOCEnabled() && $parserOutput->getTOCHTML() ) {
+                       $this->mEnableTOC = true;
+               }
        }
 
        /**
@@ -1879,7 +1887,6 @@ class OutputPage extends ContextSource {
         */
        function addParserOutput( $parserOutput ) {
                $this->addParserOutputMetadata( $parserOutput );
-               $parserOutput->setTOCEnabled( $this->mEnableTOC );
 
                // Touch section edit links only if not previously disabled
                if ( $parserOutput->getEditSectionTokens() ) {
@@ -2405,26 +2412,10 @@ class OutputPage extends ContextSource {
                        }
 
                        $sk = $this->getSkin();
-                       // add skin specific modules
-                       $modules = $sk->getDefaultModules();
-
-                       // Enforce various default modules for all pages and all skins
-                       $coreModules = [
-                               // Keep this list as small as possible
-                               'site',
-                               'mediawiki.page.startup',
-                               'mediawiki.user',
-                       ];
-
-                       // Support for high-density display images if enabled
-                       if ( $config->get( 'ResponsiveImages' ) ) {
-                               $coreModules[] = 'mediawiki.hidpi';
-                       }
-
-                       $this->addModules( $coreModules );
-                       foreach ( $modules as $group ) {
+                       foreach ( $sk->getDefaultModules() as $group ) {
                                $this->addModules( $group );
                        }
+
                        MWDebug::addModules( $this );
 
                        // Avoid PHP 7.1 warning of passing $this by reference
@@ -3017,7 +3008,7 @@ class OutputPage extends ContextSource {
                        && $this->userCanPreview();
        }
 
-       private function isUserCssPreview() {
+       protected function isUserCssPreview() {
                return $this->getConfig()->get( 'AllowUserCss' )
                        && $this->getTitle()
                        && $this->getTitle()->isCssSubpage()
@@ -3918,15 +3909,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Enables/disables TOC, doesn't override __NOTOC__
-        * @param bool $flag
-        * @since 1.22
-        */
-       public function enableTOC( $flag = true ) {
-               $this->mEnableTOC = $flag;
-       }
-
-       /**
+        * Whether the output has a table of contents
         * @return bool
         * @since 1.22
         */
index c8e29c1..5a440c4 100644 (file)
@@ -3,10 +3,6 @@
 // @codingStandardsIgnoreFile Generic.Files.LineLength
 // @codingStandardsIgnoreFile MediaWiki.Usage.DirUsage.FunctionFound
 /**
- * Check PHP Version, as well as for composer dependencies in entry points,
- * and display something vaguely comprehensible in the event of a totally
- * unrecoverable error.
- *
  * 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
  *
  * @file
  */
+
+/**
+ * Check PHP Version, as well as for composer dependencies in entry points,
+ * and display something vaguely comprehensible in the event of a totally
+ * unrecoverable error.
+ * @class
+ */
 class PHPVersionCheck {
        /* @var string The number of the MediaWiki version used */
        var $mwVersion = '1.30';
-       /* @var string The minimum php version for MediaWiki to run */
-       var $minimumVersionPHP = '5.5.9';
        var $functionsExtensionsMapping = array(
                'mb_substr'   => 'mbstring',
                'utf8_encode' => 'xml',
@@ -63,10 +64,41 @@ class PHPVersionCheck {
        /**
         * Returns the version of the installed php implementation.
         *
-        * @return string
+        * @param string $impl By default, the function returns the info of the currently installed PHP
+        *  implementation. Using this parameter the caller can decide, what version info will be
+        *  returned. Valid values: HHVM, PHP
+        * @return array An array of information about the php implementation, containing:
+        *  - 'version': The version of the php implementation (specific to the implementation, not
+        *  the version of the implemented php version)
+        *  - 'implementation': The name of the implementation used
+        *  - 'vendor': The development group, vendor or developer of the implementation.
+        *  - 'upstreamSupported': The minimum version of the implementation supported by the named vendor.
+        *  - 'minSupported': The minimum version supported by MediWiki
+        *  - 'upgradeURL': The URL to the website of the implementation that contains
+        *  upgrade/installation instructions.
         */
-       function getPHPImplVersion() {
-               return PHP_VERSION;
+       function getPHPInfo( $impl = false ) {
+               if (
+                       ( defined( 'HHVM_VERSION' ) && $impl !== 'PHP' ) ||
+                       $impl === 'HHVM'
+               ) {
+                       return array(
+                               'implementation' => 'HHVM',
+                               'version' => defined( 'HHVM_VERSION' ) ? HHVM_VERSION : 'undefined',
+                               'vendor' => 'Facebook',
+                               'upstreamSupported' => '3.6.5',
+                               'minSupported' => '3.6.5',
+                               'upgradeURL' => 'https://docs.hhvm.com/hhvm/installation/introduction',
+                       );
+               }
+               return array(
+                       'implementation' => 'PHP',
+                       'version' => PHP_VERSION,
+                       'vendor' => 'the PHP Group',
+                       'upstreamSupported' => '5.5.0',
+                       'minSupported' => '5.5.9',
+                       'upgradeURL' => 'http://www.php.net/downloads.php',
+               );
        }
 
        /**
@@ -75,31 +107,44 @@ class PHPVersionCheck {
         * @return $this
         */
        function checkRequiredPHPVersion() {
+               $phpInfo = $this->getPHPInfo();
+               $minimumVersion = $phpInfo['minSupported'];
+               $otherInfo = $this->getPHPInfo( $phpInfo['implementation'] === 'HHVM' ? 'PHP' : 'HHVM' );
                if (
                        !function_exists( 'version_compare' )
-                       || version_compare( $this->getPHPImplVersion(), $this->minimumVersionPHP ) < 0
+                       || version_compare( $phpInfo['version'], $minimumVersion ) < 0
                ) {
-                       $shortText = "MediaWiki $this->mwVersion requires at least PHP version"
-                               . " $this->minimumVersionPHP, you are using PHP {$this->getPHPImplVersion()}.";
+                       $shortText = "MediaWiki $this->mwVersion requires at least {$phpInfo['implementation']}"
+                               . " version $minimumVersion or {$otherInfo['implementation']} version "
+                               . "{$otherInfo['minSupported']}, you are using {$phpInfo['implementation']} "
+                               . "{$phpInfo['version']}.";
 
-                       $longText = "Error: You might be using on older PHP version. \n"
-                               . "MediaWiki $this->mwVersion needs PHP $this->minimumVersionPHP or higher.\n\n"
-                               . "Check if you have a newer php executable with a different name, "
-                               . "such as php5.\n\n";
+                       $longText = "Error: You might be using an older {$phpInfo['implementation']} version. \n"
+                               . "MediaWiki $this->mwVersion needs {$phpInfo['implementation']}"
+                               . " $minimumVersion or higher or {$otherInfo['implementation']} version "
+                               . "{$otherInfo['minSupported']}.\n\nCheck if you have a"
+                               . " newer php executable with a different name, such as php5.\n\n";
 
                        $longHtml = <<<HTML
-                       Please consider <a href="http://www.php.net/downloads.php">upgrading your copy of PHP</a>.
-                       PHP versions less than 5.5.0 are no longer supported by the PHP Group and will not receive
+                       Please consider <a href="{$phpInfo['upgradeURL']}">upgrading your copy of
+                       {$phpInfo['implementation']}</a>.
+                       {$phpInfo['implementation']} versions less than {$phpInfo['upstreamSupported']} are no 
+                       longer supported by {$phpInfo['vendor']} and will not receive
                        security or bugfix updates.
                </p>
                <p>
-                       If for some reason you are unable to upgrade your PHP version, you will need to
-                       <a href="https://www.mediawiki.org/wiki/Download">download</a> an older version
-                       of MediaWiki from our website.  See our
-                       <a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
-                       for details of which versions are compatible with prior versions of PHP.
+                       If for some reason you are unable to upgrade your {$phpInfo['implementation']} version,
+                       you will need to <a href="https://www.mediawiki.org/wiki/Download">download</a> an 
+                       older version of MediaWiki from our website.
+                       See our<a href="https://www.mediawiki.org/wiki/Compatibility#PHP">compatibility page</a>
+                       for details of which versions are compatible with prior versions of {$phpInfo['implementation']}.
 HTML;
-                       $this->triggerError( 'Supported PHP versions', $shortText, $longText, $longHtml );
+                       $this->triggerError(
+                               "Supported {$phpInfo['implementation']} versions",
+                               $shortText,
+                               $longText,
+                               $longHtml
+                       );
                }
        }
 
index e9519c3..c4883ba 100644 (file)
@@ -835,7 +835,7 @@ class Sanitizer {
 
                        # NOTE: even though elements using href/src are not allowed directly, supply
                        #       validation code that can be used by tag hook handlers, etc
-                       if ( $attribute === 'href' || $attribute === 'src' ) {
+                       if ( $attribute === 'href' || $attribute === 'src' || $attribute === 'poster' ) {
                                if ( !preg_match( $hrefExp, $value ) ) {
                                        continue; // drop any href or src attributes not using an allowed protocol.
                                        // NOTE: this also drops all relative URLs
@@ -1760,6 +1760,10 @@ class Sanitizer {
                        # true
                        'img'        => array_merge( $common, [ 'alt', 'src', 'width', 'height' ] ),
 
+                       'video'      => array_merge( $common, [ 'poster', 'controls', 'preload', 'width', 'height' ] ),
+                       'source'     => array_merge( $common, [ 'type', 'src' ] ),
+                       'track'      => array_merge( $common, [ 'type', 'src', 'srclang', 'kind', 'label' ] ),
+
                        # 15.2.1
                        'tt'         => $common,
                        'b'          => $common,
index 228f93b..06f93c6 100644 (file)
@@ -581,7 +581,8 @@ class WatchedItemStore implements StatsdAwareInterface {
                );
 
                foreach ( $res as $row ) {
-                       $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+                       $timestamps[$row->wl_namespace][$row->wl_title] =
+                               wfTimestampOrNull( TS_MW, $row->wl_notificationtimestamp );
                }
 
                return $timestamps;
index df7afca..0f13b17 100644 (file)
@@ -73,8 +73,9 @@ class InfoAction extends FormlessAction {
                        $revid = $revision ? $revision->getId() : null;
                }
                if ( $revid !== null ) {
-                       $key = self::getCacheKey( $title, $revid );
-                       ObjectCache::getMainWANInstance()->delete( $key );
+                       $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+                       $key = self::getCacheKey( $cache, $title, $revid );
+                       $cache->delete( $key );
                }
        }
 
@@ -690,9 +691,10 @@ class InfoAction extends FormlessAction {
        protected function pageCounts( Page $page ) {
                $fname = __METHOD__;
                $config = $this->context->getConfig();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
 
-               return ObjectCache::getMainWANInstance()->getWithSetCallback(
-                       self::getCacheKey( $page->getTitle(), $page->getLatest() ),
+               return $cache->getWithSetCallback(
+                       self::getCacheKey( $cache, $page->getTitle(), $page->getLatest() ),
                        WANObjectCache::TTL_WEEK,
                        function ( $oldValue, &$ttl, &$setOpts ) use ( $page, $config, $fname ) {
                                $title = $page->getTitle();
@@ -903,11 +905,12 @@ class InfoAction extends FormlessAction {
        }
 
        /**
+        * @param WANObjectCache $cache
         * @param Title $title
         * @param int $revId
         * @return string
         */
-       protected static function getCacheKey( Title $title, $revId ) {
-               return wfMemcKey( 'infoaction', md5( $title->getPrefixedText() ), $revId, self::VERSION );
+       protected static function getCacheKey( WANObjectCache $cache, Title $title, $revId ) {
+               return $cache->makeKey( 'infoaction', md5( $title->getPrefixedText() ), $revId, self::VERSION );
        }
 }
index df9ca98..7cd6d58 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use HtmlFormatter\HtmlFormatter;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Class to output help for an API module
@@ -108,7 +109,7 @@ class ApiHelp extends ApiBase {
                }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
 
-               $cache = ObjectCache::getMainWANInstance();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
                $cacheKey = null;
                if ( count( $modules ) == 1 && $modules[0] instanceof ApiMain &&
                        $options['recursivesubmodules'] && $context->getLanguage() === $wgContLang
@@ -116,7 +117,7 @@ class ApiHelp extends ApiBase {
                        $cacheHelpTimeout = $context->getConfig()->get( 'APICacheHelpTimeout' );
                        if ( $cacheHelpTimeout > 0 ) {
                                // Get help text from cache if present
-                               $cacheKey = wfMemcKey( 'apihelp', $modules[0]->getModulePath(),
+                               $cacheKey = $cache->makeKey( 'apihelp', $modules[0]->getModulePath(),
                                        (int)!empty( $options['toc'] ),
                                        str_replace( ' ', '_', SpecialVersion::getVersion( 'nodb' ) ) );
                                $cached = $cache->get( $cacheKey );
index 7d22d9c..d09978e 100644 (file)
@@ -22,6 +22,8 @@
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @ingroup API
  */
@@ -278,6 +280,47 @@ class ApiParse extends ApiBase {
                $result_array['title'] = $titleObj->getPrefixedText();
                $result_array['pageid'] = $pageid ?: $pageObj->getId();
 
+               if ( $params['disabletoc'] ) {
+                       $p_result->setTOCEnabled( false );
+               }
+
+               if ( isset( $params['useskin'] ) ) {
+                       $factory = MediaWikiServices::getInstance()->getSkinFactory();
+                       $skin = $factory->makeSkin( Skin::normalizeKey( $params['useskin'] ) );
+               } else {
+                       $skin = null;
+               }
+
+               $outputPage = null;
+               if ( $skin || isset( $prop['headhtml'] ) ) {
+                       // Enabling the skin via 'useskin' or 'headhtml' gets OutputPage and
+                       // Skin involved, which (among others) applies these hooks:
+                       // - ParserOutputHooks
+                       // - Hook: LanguageLinks
+                       // - Hook: OutputPageParserOutput
+                       $context = new DerivativeContext( $this->getContext() );
+                       $context->setTitle( $titleObj );
+                       $context->setWikiPage( $pageObj );
+
+                       if ( $skin ) {
+                               // Use the skin specified by 'useskin'
+                               $context->setSkin( $skin );
+                               // Context clones the skin, refetch to stay in sync. (T166022)
+                               $skin = $context->getSkin();
+                       }
+
+                       $outputPage = new OutputPage( $context );
+                       $outputPage->addParserOutputMetadata( $p_result );
+                       $context->setOutput( $outputPage );
+
+                       if ( $skin ) {
+                               // Based on OutputPage::output()
+                               foreach ( $skin->getDefaultModules() as $group ) {
+                                       $outputPage->addModules( $group );
+                               }
+                       }
+               }
+
                if ( !is_null( $oldid ) ) {
                        $result_array['revid'] = intval( $oldid );
                }
@@ -286,10 +329,6 @@ class ApiParse extends ApiBase {
                        $result_array['redirects'] = $redirValues;
                }
 
-               if ( $params['disabletoc'] ) {
-                       $p_result->setTOCEnabled( false );
-               }
-
                if ( isset( $prop['text'] ) ) {
                        $result_array['text'] = $p_result->getText();
                        $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'text';
@@ -303,19 +342,19 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['langlinks'] ) ) {
-                       $langlinks = $p_result->getLanguageLinks();
-
-                       if ( $params['effectivelanglinks'] ) {
-                               // Link flags are ignored for now, but may in the future be
-                               // included in the result.
-                               $linkFlags = [];
-                               Hooks::run( 'LanguageLinks', [ $titleObj, &$langlinks, &$linkFlags ] );
+                       if ( $skin ) {
+                               $langlinks = $outputPage->getLanguageLinks();
+                       } else {
+                               $langlinks = $p_result->getLanguageLinks();
+                               // The deprecated 'effectivelanglinks' option depredates OutputPage
+                               // support via 'useskin'. If not already applied, then run just this
+                               // one hook of OutputPage::addParserOutputMetadata here.
+                               if ( $params['effectivelanglinks'] ) {
+                                       $linkFlags = [];
+                                       Hooks::run( 'LanguageLinks', [ $titleObj, &$langlinks, &$linkFlags ] );
+                               }
                        }
-               } else {
-                       $langlinks = false;
-               }
 
-               if ( isset( $prop['langlinks'] ) ) {
                        $result_array['langlinks'] = $this->formatLangLinks( $langlinks );
                }
                if ( isset( $prop['categories'] ) ) {
@@ -350,38 +389,42 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['headitems'] ) ) {
-                       $result_array['headitems'] = $this->formatHeadItems( $p_result->getHeadItems() );
+                       if ( $skin ) {
+                               $result_array['headitems'] = $this->formatHeadItems( $outputPage->getHeadItemsArray() );
+                       } else {
+                               $result_array['headitems'] = $this->formatHeadItems( $p_result->getHeadItems() );
+                       }
                        $this->addDeprecation( 'apiwarn-deprecation-parse-headitems', 'action=parse&prop=headitems' );
                }
 
                if ( isset( $prop['headhtml'] ) ) {
-                       $context = new DerivativeContext( $this->getContext() );
-                       $context->setTitle( $titleObj );
-                       $context->setWikiPage( $pageObj );
-
-                       // We need an OutputPage tied to $context, not to the
-                       // RequestContext at the root of the stack.
-                       $output = new OutputPage( $context );
-                       $output->addParserOutputMetadata( $p_result );
-
-                       $result_array['headhtml'] = $output->headElement( $context->getSkin() );
+                       $result_array['headhtml'] = $outputPage->headElement( $context->getSkin() );
                        $result_array[ApiResult::META_BC_SUBELEMENTS][] = 'headhtml';
                }
 
                if ( isset( $prop['modules'] ) ) {
-                       $result_array['modules'] = array_values( array_unique( $p_result->getModules() ) );
-                       $result_array['modulescripts'] = array_values( array_unique( $p_result->getModuleScripts() ) );
-                       $result_array['modulestyles'] = array_values( array_unique( $p_result->getModuleStyles() ) );
+                       if ( $skin ) {
+                               $result_array['modules'] = $outputPage->getModules();
+                               $result_array['modulescripts'] = $outputPage->getModuleScripts();
+                               $result_array['modulestyles'] = $outputPage->getModuleStyles();
+                       } else {
+                               $result_array['modules'] = array_values( array_unique( $p_result->getModules() ) );
+                               $result_array['modulescripts'] = array_values( array_unique( $p_result->getModuleScripts() ) );
+                               $result_array['modulestyles'] = array_values( array_unique( $p_result->getModuleStyles() ) );
+                       }
                }
 
                if ( isset( $prop['jsconfigvars'] ) ) {
-                       $result_array['jsconfigvars'] =
-                               ApiResult::addMetadataToResultVars( $p_result->getJsConfigVars() );
+                       $jsconfigvars = $skin ? $outputPage->getJsConfigVars() : $p_result->getJsConfigVars();
+                       $result_array['jsconfigvars'] = ApiResult::addMetadataToResultVars( $jsconfigvars );
                }
 
                if ( isset( $prop['encodedjsconfigvars'] ) ) {
+                       $jsconfigvars = $skin ? $outputPage->getJsConfigVars() : $p_result->getJsConfigVars();
                        $result_array['encodedjsconfigvars'] = FormatJson::encode(
-                               $p_result->getJsConfigVars(), false, FormatJson::ALL_OK
+                               $jsconfigvars,
+                               false,
+                               FormatJson::ALL_OK
                        );
                        $result_array[ApiResult::META_SUBELEMENTS][] = 'encodedjsconfigvars';
                }
@@ -392,7 +435,11 @@ class ApiParse extends ApiBase {
                }
 
                if ( isset( $prop['indicators'] ) ) {
-                       $result_array['indicators'] = (array)$p_result->getIndicators();
+                       if ( $skin ) {
+                               $result_array['indicators'] = (array)$outputPage->getIndicators();
+                       } else {
+                               $result_array['indicators'] = (array)$p_result->getIndicators();
+                       }
                        ApiResult::setArrayType( $result_array['indicators'], 'BCkvp', 'name' );
                }
 
@@ -794,7 +841,10 @@ class ApiParse extends ApiBase {
                        'wrapoutputclass' => 'mw-parser-output',
                        'pst' => false,
                        'onlypst' => false,
-                       'effectivelanglinks' => false,
+                       'effectivelanglinks' => [
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ],
                        'section' => null,
                        'sectiontitle' => [
                                ApiBase::PARAM_TYPE => 'string',
@@ -816,6 +866,9 @@ class ApiParse extends ApiBase {
                        'preview' => false,
                        'sectionpreview' => false,
                        'disabletoc' => false,
+                       'useskin' => [
+                               ApiBase::PARAM_TYPE => array_keys( Skin::getAllowedSkins() ),
+                       ],
                        'contentformat' => [
                                ApiBase::PARAM_TYPE => ContentHandler::getAllContentFormats(),
                        ],
index 3e0f270..e1588e7 100644 (file)
        "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
        "apihelp-parse-param-sectionpreview": "Im Abschnitt Vorschau-Modus parsen (aktiviert ebenfalls den Vorschau-Modus)",
        "apihelp-parse-param-disabletoc": "Inhaltsverzeichnis in der Ausgabe weglassen.",
+       "apihelp-parse-param-useskin": "Wendet die ausgewählte Benutzeroberfläche auf die Parserausgabe an. Kann Auswirkungen auf die folgenden Eigenschaften haben: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
        "apihelp-parse-param-contentmodel": "Inhaltsmodell des eingegebenen Textes. Fall ausgelassen, muss $1title angegeben werden und Standardwert wird das Modell des angegebenen Titels. Ist nur gültig im Zusammenhang mit $1text.",
        "apihelp-parse-example-page": "Eine Seite parsen.",
        "apihelp-parse-example-text": "Wikitext parsen.",
index 5f52a1e..9670260 100644 (file)
        "apihelp-parse-param-preview": "Parse in preview mode.",
        "apihelp-parse-param-sectionpreview": "Parse in section preview mode (enables preview mode too).",
        "apihelp-parse-param-disabletoc": "Omit table of contents in output.",
+       "apihelp-parse-param-useskin": "Apply the selected skin to the parser output. May affect the following properties: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
        "apihelp-parse-param-contentformat": "Content serialization format used for the input text. Only valid when used with $1text.",
        "apihelp-parse-param-contentmodel": "Content model of the input text. If omitted, $1title must be specified, and default will be the model of the specified title. Only valid when used with $1text.",
        "apihelp-parse-example-page": "Parse a page.",
        "apihelp-query+search-param-limit": "How many total pages to return.",
        "apihelp-query+search-param-interwiki": "Include interwiki results in the search, if available.",
        "apihelp-query+search-param-backend": "Which search backend to use, if not the default.",
-       "apihelp-query+search-param-enablerewrites": "Enable internal query rewriting. Some search backends can rewrite the query into one its thinks gives better results, such as correcting spelling errors.",
+       "apihelp-query+search-param-enablerewrites": "Enable internal query rewriting. Some search backends can rewrite the query into another which is thought to provide better results, for instance by correcting spelling errors.",
        "apihelp-query+search-example-simple": "Search for <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Search texts for <kbd>meaning</kbd>.",
        "apihelp-query+search-example-generator": "Get page info about the pages returned for a search for <kbd>meaning</kbd>.",
        "apihelp-query+tags-example-simple": "List available tags.",
 
        "apihelp-query+templates-description": "Returns all pages transcluded on the given pages.",
-       "apihelp-query+templates-param-namespace": "Show templates in this namespaces only.",
+       "apihelp-query+templates-param-namespace": "Show templates in these namespaces only.",
        "apihelp-query+templates-param-limit": "How many templates to return.",
        "apihelp-query+templates-param-templates": "Only list these templates. Useful for checking whether a certain page uses a certain template.",
        "apihelp-query+templates-param-dir": "The direction in which to list.",
index 2aaa374..c55c3c8 100644 (file)
        "apihelp-parse-param-preview": "Analyser en mode aperçu.",
        "apihelp-parse-param-sectionpreview": "Analyser en mode aperçu de section (active aussi le mode aperçu).",
        "apihelp-parse-param-disabletoc": "Omettre la table des matières dans la sortie.",
+       "apihelp-parse-param-useskin": "Appliquer l’habillage sélectionné à la sortie de l’analyseur. Cela peut affecter les propriétés suivantes : <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
        "apihelp-parse-param-contentformat": "Format de sérialisation du contenu utilisé pour le texte d’entrée. Valide uniquement si utilisé avec $1text.",
        "apihelp-parse-param-contentmodel": "Modèle de contenu du texte d’entrée. Si omis, $1title doit être spécifié, et la valeur par défaut sera le modèle du titre spécifié. Valide uniquement quand utilisé avec $1text.",
        "apihelp-parse-example-page": "Analyser une page.",
        "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
        "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
        "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
-       "apihelp-query+search-param-enablerewrites": "Activer la réécriture interne de la requête. Les serveurs de recherche peuvent changer la requête en une autre dont ils estiment qu'elle donne de meilleurs résultats, par exemple en corrigeant l'orthographe.",
+       "apihelp-query+search-param-enablerewrites": "Activer la réécriture interne de la requête. Les serveurs de recherche peuvent réécrire la requête en une autre qui est censée donner de meilleurs résultats, par exemple en corrigeant les erreurs d’orthographe.",
        "apihelp-query+search-example-simple": "Rechercher <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Rechercher des textes pour <kbd>meaning</kbd>.",
        "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de <kbd>meaning</kbd>.",
index 180a68b..7613b84 100644 (file)
@@ -14,7 +14,8 @@
                        "MojoMann",
                        "Mikey641",
                        "Esh77",
-                       "שמזן"
+                       "שמזן",
+                       "Or"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|תיעוד]]\n* [[mw:Special:MyLanguage/API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:Special:MyLanguage/API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות ר' [[Special:ApiSandbox]].",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "מזהה הגרסה.",
        "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-user": "×\94×\9eשת×\9eש ×©×¢×©×\94 ×\90ת ×\94×\92רס×\94",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "מזהה המשתמש של יוצר הגרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-size": "אורך (בבייטים) של הגרסה.",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (בבסיס 16) של הגרסה.",
index d132920..250ec2f 100644 (file)
        "apihelp-query+allmessages-param-prefix": "Ezzel kezdődő nevű üzenetek visszaadása.",
        "apihelp-query+allmessages-example-ipb": "<kbd>ipb-</kbd> előtagú üzenetek lekérése.",
        "apihelp-query+allmessages-example-de": "Az <kbd>august</kbd> és <kbd>mainpage</kbd> üzenetek lekérése német nyelven.",
+       "apihelp-query+allpages-description": "Egy adott névtér összes lapjának visszaadása.",
+       "apihelp-query+allpages-param-from": "A lapok listázása ettől a címtől.",
+       "apihelp-query+allpages-param-to": "A lapok listázása eddig a címig.",
+       "apihelp-query+allpages-param-prefix": "Ezzel kezdődő című lapok keresése.",
+       "apihelp-query+allpages-param-namespace": "A listázandó névtér.",
+       "apihelp-query+allpages-param-filterredir": "A listázandó lapok.",
+       "apihelp-query+allpages-param-minsize": "A lapok minimális hossza bájtban.",
+       "apihelp-query+allpages-param-maxsize": "A lapok maximális hossza bájtban.",
+       "apihelp-query+allpages-param-prtype": "Csak védett lapok listázása.",
+       "apihelp-query+allpages-param-prlevel": "A védelmek szűrése a védelmi szint alapján (csak az <var>$1prtype=</var> paraméterrel együtt használható).",
+       "apihelp-query+allpages-param-limit": "A visszaadandó lapok maximális száma.",
+       "apihelp-query+allpages-param-dir": "A listázás iránya.",
+       "apihelp-query+allpages-param-filterlanglinks": "Szűrés az alapján, hogy vannak-e nyelvközi hivatkozások a lapon. Nem biztos, hogy figyelembe veszi a kiterjesztések által hozzáadott nyelvközi hivatkozásokat.",
+       "apihelp-query+allpages-param-prexpiry": "Szűrés a védelem lejárata alapján:\n;indefinite: Csak meghatározatlan idejű védelemmel ellátott lapok.\n;definite: Csak meghatározott idejű (konkrét lejáratú) védelemmel ellátott lapok.\n;all: Bármilyen lejáratú védelemmel ellátott lapok.",
+       "apihelp-query+allpages-example-B": "Lapok listázása <kbd>B</kbd>-től kezdve.",
+       "apihelp-query+allpages-example-generator": "Információk 4 lapról <kbd>T</kbd>-től kezdve.",
+       "apihelp-query+allpages-example-generator-revisions": "Az első két nem átirányító lap tartalmának megjelenítése <kbd>Re</kbd>-től kezdve.",
+       "apihelp-query+allredirects-description": "Egy adott névtérbe mutató összes átirányítás listázása.",
+       "apihelp-query+allredirects-param-from": "Listázás ettől az átirányításcímtől.",
+       "apihelp-query+allredirects-param-to": "Listázás eddig az átirányításcímig.",
+       "apihelp-query+allredirects-param-prefix": "Ezzel kezdődő című céllapok keresése.",
+       "apihelp-query+allredirects-param-unique": "Csak különböző céllapok listázása. Nem használható együtt az <kbd>$1prop=ids|fragment|interwiki</kbd> paraméterrel.\nGenerátorként használva a céllapokat adja vissza a forráslapok helyett.",
+       "apihelp-query+allredirects-param-prop": "Visszaadandó információk:",
+       "apihelp-query+allredirects-paramvalue-prop-ids": "Az átirányító lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Az átirányítás címe.",
+       "apihelp-query+allredirects-paramvalue-prop-fragment": "Az átirányítás célszakasza, ha van (nem használható együtt az <var>$1unique</var> paraméterrel).",
+       "apihelp-query+allredirects-paramvalue-prop-interwiki": "Az átirányítás céljának interwiki-előtagja, ha van (nem használható együtt az <var>$1unique</var> paraméterrel).",
+       "apihelp-query+allredirects-param-namespace": "A listázandó névtér.",
+       "apihelp-query+allredirects-param-limit": "A visszaadandó elemek maximális száma.",
+       "apihelp-query+allredirects-param-dir": "A listázás iránya.",
+       "apihelp-query+allredirects-example-B": "Céllapok listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+       "apihelp-query+allredirects-example-unique": "Különböző céllapok listázása.",
+       "apihelp-query+allredirects-example-unique-generator": "Az összes céllap lekérése, hiányzók megjelölése.",
+       "apihelp-query+allredirects-example-generator": "Az átirányításokat tartalmazó lapok lekérése.",
+       "apihelp-query+allrevisions-description": "Az összes lapváltozat listázása.",
+       "apihelp-query+allrevisions-param-start": "A listázás kezdő időbélyege.",
+       "apihelp-query+allrevisions-param-end": "A lista végét jelentő időbélyeg.",
+       "apihelp-query+allrevisions-param-user": "Csak ezen felhasználó szerkesztéseinek listázása.",
+       "apihelp-query+allrevisions-param-excludeuser": "Ezen felhasználó szerkesztéseinek kihagyása.",
+       "apihelp-query+allrevisions-param-namespace": "Lapok listázása csak ebben a névtérben.",
+       "apihelp-query+allrevisions-param-generatetitles": "Generátorként használva címek visszaadása lapváltozat-azonosítók helyett.",
+       "apihelp-query+allrevisions-example-user": "<kbd>Example</kbd> 50 legutóbbi szerkesztésének listázása.",
+       "apihelp-query+allrevisions-example-ns-main": "A fő névtér első 50 szerkesztésének listázása.",
+       "apihelp-query+mystashedfiles-param-prop": "A fájlok lekérendő tulajdonságai.",
+       "apihelp-query+mystashedfiles-paramvalue-prop-size": "A fájlméret és a kép dimenziói (szélessége és magassága).",
+       "apihelp-query+mystashedfiles-paramvalue-prop-type": "A fájl MIME-típusa és médiatípusa.",
+       "apihelp-query+mystashedfiles-param-limit": "A lekérendő fájlok száma.",
+       "apihelp-query+alltransclusions-description": "Az összes beillesztés listázása (&#123;&#123;x&#125;&#125; kóddal beillesztett lapok), beleértve a nem létező lapokét is.",
+       "apihelp-query+alltransclusions-param-from": "Listázás ettől a beillesztett laptól.",
+       "apihelp-query+alltransclusions-param-to": "Listázás eddig a beillesztett lapig.",
+       "apihelp-query+alltransclusions-param-prefix": "Ezzel kezdődő című beillesztett lapok keresése.",
+       "apihelp-query+alltransclusions-param-unique": "Csak különböző beillesztett címek listázása. Nem használható együtt az <kbd>$1prop=ids</kbd> paraméterrel.\nGenerátorként használva a céllapokat adja vissza a forráslapok helyett.",
+       "apihelp-query+alltransclusions-param-prop": "Visszaadandó információk:",
+       "apihelp-query+alltransclusions-paramvalue-prop-ids": "A lapokat beillesztő lapok lapazonosítói (nem használható együtt az <var>$1unique</var> paraméterrel).",
+       "apihelp-query+alltransclusions-paramvalue-prop-title": "A beillesztés címe.",
+       "apihelp-query+alltransclusions-param-namespace": "A listázandó névtér.",
+       "apihelp-query+alltransclusions-param-limit": "A visszaadandó elemek maximális száma.",
+       "apihelp-query+alltransclusions-param-dir": "A listázás iránya.",
+       "apihelp-query+alltransclusions-example-B": "Beillesztett lapok listázása, a hiányzókat is beleértve, a forráslapok lapazonosítójával, <kbd>B</kbd>-től kezdve.",
+       "apihelp-query+alltransclusions-example-unique": "Különböző beillesztett címek listázása.",
+       "apihelp-query+alltransclusions-example-unique-generator": "Az összes beillesztett lap lekérése, hiányzók megjelölése.",
+       "apihelp-query+alltransclusions-example-generator": "A beillesztéseket tartalmazó lapok lekérése.",
+       "apihelp-query+allusers-description": "Az összes regisztrált felhasználó visszaadása.",
+       "apihelp-query+allusers-param-from": "A felhasználók listázása ettől a névtől.",
+       "apihelp-query+allusers-param-to": "A felhasználók listázása eddig a névig.",
+       "apihelp-query+allusers-param-prefix": "Ezzel kezdődő nevű felhasználók keresése.",
+       "apihelp-query+allusers-param-dir": "A rendezés iránya.",
+       "apihelp-query+allusers-param-group": "Csak megadott csoportokba tartozó felhasználók visszaadása.",
+       "apihelp-query+allusers-param-excludegroup": "Csak a megadott csoportokba <em>nem</em> tartozó felhasználók visszaadása.",
+       "apihelp-query+allusers-param-rights": "Csak a megadott jogosultságokkal rendelkező felhasználók visszaadása. Ez nem tartalmazza azokat a jogosultságokat, amiket implicit vagy automatikusan hozzáadott csoportok adnak meg, mint a *, a user vagy az autoconfirmed.",
+       "apihelp-query+allusers-param-prop": "Visszaadandó információk:",
+       "apihelp-query+allusers-paramvalue-prop-blockinfo": "Információk a felhasználó jelenleg érvényes blokkjáról.",
+       "apihelp-query+allusers-paramvalue-prop-groups": "A felhasználó csoportjai. Ez több szervererőforrást használ, és lehet, hogy a limitnél kevesebb eredményt ad vissza.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "A felhasználó automatikus csoportjai.",
+       "apihelp-query+allusers-paramvalue-prop-rights": "A felhasználó jogosultságai.",
+       "apihelp-query+allusers-paramvalue-prop-editcount": "A felhasználó szerkesztésszáma.",
+       "apihelp-query+allusers-paramvalue-prop-registration": "A felhasználó regisztrációjának időbélyege, ha elérhető (lehet üres).",
+       "apihelp-query+allusers-paramvalue-prop-centralids": "A felhasználó központi azonosítói és az összekapcsolási státusza.",
+       "apihelp-query+allusers-param-limit": "A visszaadandó felhasználónevek maximális száma.",
+       "apihelp-query+allusers-param-witheditsonly": "Csak szerkesztéssel rendelkező felhasználók listázása.",
+       "apihelp-query+allusers-param-activeusers": "Csak az elmúlt $1 napban aktív felhasználók listázása.",
+       "apihelp-query+allusers-param-attachedwiki": "Az <kbd>$1prop=centralids</kbd> paraméter mellett annak jelzése, hogy a felhasználó össze van-e kapcsolva a megadott wikivel.",
+       "apihelp-query+allusers-example-Y": "A felhasználók listázása <kbd>Y</kbd>-tól kezdve.",
+       "apihelp-query+authmanagerinfo-description": "Információk lekérése az aktuális azonosítási státuszról.",
+       "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Annak ellenőrzése, hogy a felhasználó jelenlegi azonosítási státusza megfelelő-e a megadott biztonságkritikus művelethez.",
+       "apihelp-query+authmanagerinfo-param-requestsfor": "Információk lekérése a megadott azonosítási művelethez szükséges azonosítási kérésekről.",
+       "apihelp-query+authmanagerinfo-example-login": "Egy bejelentkezés elkezdéséhez használható kérések lekérése.",
+       "apihelp-query+authmanagerinfo-example-login-merged": "Egy bejelentkezés elkezdéséhez használható kérések lekérése, az űrlapmezők összevonásával.",
+       "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Annak ellenőrzése, hogy a hitelesítés megfelelő-e a <kbd>foo</kbd> művelethez.",
+       "apihelp-query+backlinks-description": "Egy adott lapra hivatkozó más lapok megkeresése.",
+       "apihelp-query+backlinks-param-title": "A keresendő cím. Nem használható együtt a <var>$1pageid</var> paraméterrel.",
+       "apihelp-query+backlinks-param-pageid": "A keresendő lapazonosító. Nem használható együtt a <var>$1title</var> paraméterrel.",
+       "apihelp-query+backlinks-param-namespace": "A listázandó névtér.",
+       "apihelp-query+backlinks-param-dir": "A listázás iránya.",
+       "apihelp-query+backlinks-param-filterredir": "Az átirányítások szűrése. Ha <kbd>nonredirects</kbd>, és a <var>$1redirect</var> paraméter engedélyezett, csak a második szintre érvényes.",
+       "apihelp-query+backlinks-param-limit": "A visszaadandó lapok maximális száma. Ha a <var>$1redirect</var> engedélyezve van, ez a limit minden szintre külön érvényes (vagyis összesen 2 × <var>$1limit</var> eredmény lehet a válaszban).",
+       "apihelp-query+backlinks-param-redirect": "Ha a hivatkozó lap átirányítás, az arra hivatkozó lapok keresése szintén. A maximális limit feleződik.",
+       "apihelp-query+backlinks-example-simple": "A <kbd>Main Page</kbd> lapra mutató hivatkozások keresése.",
+       "apihelp-query+backlinks-example-generator": "Információk lekérése a <kbd>Main Page</kbd>-re hivatkozó lapokról.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Mód|Módok}}: $2",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "SHA-1 hash hozzáadása a fájlhoz.",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "MIME-típus hozzáadása a fájlhoz.",
index 21987fd..dcf14ab 100644 (file)
        "apihelp-rollback-example-simple": "利用者 <kbd>Example</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を巻き戻す。",
        "apihelp-rollback-example-summary": "IP利用者 <kbd>192.0.2.5</kbd> による <kbd>Main Page</kbd> への最後の一連の編集を <kbd>Reverting vandalism</kbd> という理由で、それらの編集とその差し戻しをボットの編集としてマークして差し戻す。",
        "apihelp-stashedit-param-title": "編集されているページのページ名。",
+       "apihelp-stashedit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
+       "apihelp-stashedit-param-sectiontitle": "新しい節の名前です。",
        "apihelp-stashedit-param-text": "ページの本文。",
        "apihelp-stashedit-param-contentmodel": "新しいコンテンツのコンテンツ・モデル。",
        "apihelp-tag-description": "個々の版または記録項目に対しタグの追加または削除を行います。",
        "apihelp-userrights-param-userid": "利用者ID。",
        "apihelp-userrights-param-add": "利用者をこのグループに追加します。",
        "apihelp-userrights-param-reason": "変更の理由。",
+       "apihelp-userrights-example-expiry": "利用者 <kbd>SometimeSysop</kbd> を 1ヶ月間 <kbd>sysop</kbd> グループに追加する。",
        "apihelp-watch-description": "現在の利用者のウォッチリストにページを追加/除去します。",
        "apihelp-watch-example-watch": "<kbd>Main Page</kbd> をウォッチする。",
        "apihelp-watch-example-unwatch": "<kbd>Main Page</kbd> のウォッチを解除する。",
        "api-help-permissions-granted-to": "{{PLURAL:$1|権限を持つグループ}}: $2",
        "api-help-open-in-apisandbox": "<small>[サンドボックスで開く]</small>",
        "apierror-missingparam": "パラメーター <var>$1</var> を設定してください。",
+       "apiwarn-invalidcategory": "「$1」はカテゴリではありません。",
+       "apiwarn-notfile": "「$1」はファイルではありません。",
        "api-credits-header": "クレジット",
        "api-credits": "API の開発者:\n* Roan Kattouw (2007年9月-2009年の主任開発者)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (作成者、2006年9月-2007年9月の主任開発者)\n* Brad Jorsch (2013年-現在の主任開発者)\n\nコメント、提案、質問は mediawiki-api@lists.wikimedia.org にお送りください。\nバグはこちらへご報告ください: https://phabricator.wikimedia.org/"
 }
index 1e942d8..ed9511f 100644 (file)
        "apihelp-query+tags-paramvalue-prop-name": "태그의 이름을 추가합니다.",
        "apihelp-query+tags-paramvalue-prop-description": "태그의 설명을 추가합니다.",
        "apihelp-query+tags-paramvalue-prop-hitcount": "판의 수와 이 판을 가진 로그 엔트리를 추가합니다.",
+       "apihelp-query+templates-param-namespace": "이 이름공간에 속한 틀만 표시합니다.",
        "apihelp-query+templates-param-limit": "반환할 틀 수.",
        "apihelp-query+tokens-param-type": "요청할 토큰의 종류.",
        "apihelp-query+tokens-example-simple": "csrf 토큰을 가져옵니다. (기본값)",
        "apihelp-rawfm-description": "디버깅 요소를 포함하여 데이터를 JSON 형식으로 출력합니다. (HTML의 가독성 증가)",
        "apihelp-xml-param-includexmlnamespace": "지정하면 XML 이름공간을 추가합니다.",
        "api-format-title": "미디어위키 API 결과",
+       "api-login-fail-aborted": "인증은 사용자의 상호작용이 필요하지만, <kbd>action=login</kbd>에 의해 지원되지 않습니다. <kbd>action=login</kbd>으로 로그인할 수 있게 하려면 [[Special:BotPasswords]]를 참조하십시오. 주 계정 로그인의 사용을 계속하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 참조하십시오.",
+       "api-login-fail-aborted-nobotpw": "인증은 사용자의 상호작용이 필요하지만, <kbd>action=login</kbd>에 의해 지원되지 않습니다. 로그인하려면 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>을 참조하십시오.",
        "api-login-fail-badsessionprovider": "$1을(를) 사용할 경우 로그인할 수 없습니다.",
+       "api-login-fail-sameorigin": "기원이 동일한 정책이 적용되지 않으면 로그인할 수 없습니다.",
        "api-pageset-param-titles": "작업할 제목의 목록입니다.",
        "api-pageset-param-pageids": "작업할 페이지 ID의 목록입니다.",
        "api-pageset-param-revids": "작업할 판 ID의 목록입니다.",
index feba73c..24d0246 100644 (file)
                        "Felipe L. Ewald"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentação]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página devem ter o comportamento documentado mas a API ainda está em desenvolvimento ativo e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:API:Errors_and_warnings|API:Erros e avisos]].\n\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentação]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página devem ter o comportamento documentado, mas a API ainda está em desenvolvimento ativo e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Erros e avisos]].\n\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].",
        "apihelp-main-param-action": "A operação a ser realizada.",
        "apihelp-main-param-format": "O formato do resultado.",
-       "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num ''cluster'' de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do ''site'', este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
+       "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num ''cluster'' de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do ''site'', este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
        "apihelp-main-param-smaxage": "Definir no cabeçalho HTTP <code>s-maxage</code> de controlo da ''cache'' este número de segundos. Os erros nunca são armazenados na ''cache''.",
        "apihelp-main-param-maxage": "Definir no cabeçalho HTTP <code>max-age</code> de controlo da ''cache'' este número de segundos. Os erros nunca são armazenados na ''cache''.",
        "apihelp-main-param-assert": "Se definido com o valor <kbd>user</kbd>, verificar que o utilizador está autenticado. Se definido com o valor <kbd>bot</kbd>, verificar que o utilizador tem o privilégio de conta robô.",
@@ -37,7 +37,7 @@
        "apihelp-block-param-autoblock": "Bloquear automaticamente o último endereço IP usado e quaisquer outros endereços IP subsequentes a partir do quais o utilizador tente iniciar uma sessão.",
        "apihelp-block-param-noemail": "Impedir o utilizador de enviar correio eletrónico através da wiki. (Requer o privilégio <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Ocultar o nome do utilizador do registo de bloqueios. (Requer o privilégio <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "Permitir que o utilizador edite a sua própria página de discussão (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Permitir que o utilizador edite a sua própria página de discussão (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Se o utilizador já está bloqueado, sobrescrever o bloco existente.",
        "apihelp-block-param-watchuser": "Vigiar as páginas de utilizador e de discussão, do utilizador ou do endereço IP.",
        "apihelp-block-param-tags": "Etiquetas de modificação a aplicar à entrada no registo de bloqueios.",
        "apihelp-opensearch-param-search": "Texto a pesquisar.",
        "apihelp-opensearch-param-limit": "O número máximo de resultados a serem devolvidos.",
        "apihelp-opensearch-param-namespace": "Espaços nominais a pesquisar.",
-       "apihelp-opensearch-param-suggest": "Não fazer nada se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> for falso.",
+       "apihelp-opensearch-param-suggest": "Não fazer nada se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> for falso.",
        "apihelp-opensearch-param-redirects": "Como tratar redirecionamentos:\n;return:Devolver o próprio redirecionamento.\n;resolve:Devolver a página de destino. Pode devolver menos de $1limit resultados.\nPor razões históricas, o valor por omissão é \"return\" para o formato $1format=json e \"resolve\" para outros formatos.",
        "apihelp-opensearch-param-format": "O formato do resultado.",
        "apihelp-opensearch-param-warningsaserror": "Se forem gerados avisos com <kbd>format=json</kbd>, devolver um erro da API em vez de ignorá-los.",
        "apihelp-parse-paramvalue-prop-limitreportdata": "Fornece o relatório de limites de forma estruturada. Não fornece dados quando <var>$1disablelimitreport</var> está definido.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Fornece a versão HTML do relatório de limites. Não fornece dados quando <var>$1disablelimitreport</var> está definido.",
        "apihelp-parse-paramvalue-prop-parsetree": "A árvore de análise XML do conteúdo da revisão (requer o modelo de conteúdo <code>$1</code>).",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Fornece os avisos gerados durante a análise sintática do conteúdo.",
+       "apihelp-parse-param-wrapoutputclass": "A classe CSS a utilizar para envolver o resultado do analisador sintático.",
        "apihelp-parse-param-pst": "Fazer uma transformação de pré-gravação ao texto de entrada, antes de analisá-lo. Só é válido quando usado com texto.",
        "apihelp-parse-param-onlypst": "Fazer uma transformação de pré-gravação (PST, ''pre-save transform'') ao texto de entrada, mas não o analisar. Devolve o mesmo texto após aplicação da PST. Só é válido quando usado com <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclui links interlínguas fornecidos por extensões (para ser usado com <kbd>$1prop=langlinks</kbd>).",
        "apihelp-parse-param-preview": "Executar a análise em modo de antevisão.",
        "apihelp-parse-param-sectionpreview": "Executar a análise em modo de antevisão (também ativa o modo de antevisão).",
        "apihelp-parse-param-disabletoc": "Omitir a tabela de conteúdo no resultado.",
+       "apihelp-parse-param-useskin": "Aplicar o tema selecionado ao resultado do analisador sintático. Pode afetar as seguintes propriedades: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
        "apihelp-parse-param-contentformat": "O formato da seriação de conteúdo, usado para o texto de entrada. Só é válido quando usado com $1text.",
        "apihelp-parse-param-contentmodel": "Modelo de conteúdo do texto de entrada. Se omitido, $1title tem de ser especificado e o valor por omissão será o modelo do título especificado. Só é válido quando usado com $1text.",
        "apihelp-parse-example-page": "Fazer a análise sintática de uma página.",
        "apihelp-query+alldeletedrevisions-param-user": "Listar só as revisões feitas por este utilizador.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Não listar as revisões feitas por este utilizador.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Listar só as páginas neste espaço nominal.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Devido ao [[mw:Manual:$wgMiserMode|modo avarento]], o uso de <var>$1user</var> e <var>$1namespace</var> em conjunto pode resultar na devolução de menos de <var>$1limit</var> resultados antes de continuar; em casos extremos pode não ser devolvido qualquer resultado.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Devido ao [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo avarento]], o uso de <var>$1user</var> e <var>$1namespace</var> em conjunto pode resultar na devolução de menos de <var>$1limit</var> resultados antes de continuar; em casos extremos pode não ser devolvido qualquer resultado.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "Ao ser usado como gerador, gerar títulos em vez de identificadores de revisões.",
        "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribuições eliminadas do utilizador <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as primeiras 50 revisões eliminadas no espaço nominal principal.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Adiciona o nome de ficheiro da versão arquivada das versões anteriores à última.",
        "apihelp-query+filearchive-example-simple": "Mostrar uma lista de todos os ficheiros eliminados.",
        "apihelp-query+filerepoinfo-description": "Devolver meta informação sobre os repositórios de imagens configurados na wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
+       "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
        "apihelp-query+filerepoinfo-example-simple": "Obter informações sobre os repositórios de ficheiros.",
        "apihelp-query+fileusage-description": "Encontrar todas as páginas que usam os ficheiros indicados.",
        "apihelp-query+fileusage-param-prop": "As propriedades a serem obtidas:",
        "apihelp-query+redirects-example-generator": "Obter informação sobre todos os redirecionamentos para a página [[Main Page]].",
        "apihelp-query+revisions-description": "Obter informação da revisão.\n\nPode ser usado de várias maneiras:\n# Obter dados sobre um conjunto de páginas (última revisão), definindo títulos ou identificadores de páginas.\n# Obter as revisões de uma página indicada, usando títulos ou identificadores de páginas, com start, end ou limit.\n# Obter dados sobre um conjunto de revisões definindo os respetivos identificadores de revisões.",
        "apihelp-query+revisions-paraminfo-singlepageonly": "Só pode ser usado com uma única página (modo #2)",
-       "apihelp-query+revisions-param-startid": "O identificador de revisão a partir do qual será começada a enumeração.",
-       "apihelp-query+revisions-param-endid": "Terminar a enumeração de revisões neste identificador de revisão.",
+       "apihelp-query+revisions-param-startid": "Iniciar a enumeração a partir da data e hora desta revisão. A revisão tem de existir, mas não precisa de pertencer a esta página.",
+       "apihelp-query+revisions-param-endid": "Terminar a enumeração na data e hora desta revisão. A revisão tem de existir, mas não precisa de pertencer a esta página.",
        "apihelp-query+revisions-param-start": "A data e hora da revisão a partir da qual será começada a enumeração.",
        "apihelp-query+revisions-param-end": "A data e hora da revisão na qual será terminada a enumeração.",
        "apihelp-query+revisions-param-user": "Incluir só as revisões deste utilizador.",
        "apihelp-query+search-param-limit": "O número total de páginas a serem devolvidas.",
        "apihelp-query+search-param-interwiki": "Incluir resultados interwikis na pesquisa, se disponíveis.",
        "apihelp-query+search-param-backend": "O servidor de pesquisas a ser usado, se diferente do servidor padrão.",
-       "apihelp-query+search-param-enablerewrites": "Ativar a reescrita da pesquisa interna. Alguns motores de pesquisa podem reescrever a pesquisa, substituindo-a por outra que consideram que dará melhores resultados, como acontece na correção de erros de ortografia.",
+       "apihelp-query+search-param-enablerewrites": "Ativar a reescrita da pesquisa interna. Alguns motores de pesquisa podem reescrever a pesquisa substituindo-a por outra que consideram que dará melhores resultados, por exemplo, por corrigir erros de ortografia.",
        "apihelp-query+search-example-simple": "Pesquisar <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Pesquisar <kbd>meaning</kbd> nos textos.",
        "apihelp-query+search-example-generator": "Obter informação sobre as páginas devolvidas por uma pesquisa do termo <kbd>meaning</kbd>.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devolve informação sobre os direitos (a licença) da wiki, se disponível.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devolve informação sobre os tipos de restrição (proteção) disponíveis.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Devolve uma lista das línguas que o MediaWiki suporta (opcionalmente localizada, usando <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve uma lista dos códigos de língua para os quais o [[mw:LanguageConverter|LanguageConverter]] está ativado, e as variantes suportadas para cada código.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve uma lista dos códigos de língua para os quais o [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] está ativado, e as variantes suportadas para cada código.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "Devolve uma lista de todos os temas ativados (opcionalmente localizada, usando <var>$1inlanguagecode</var>, ou então na língua do conteúdo).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devolve uma lista dos elementos de extensões do analisador sintático.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve uma lista dos ''hooks'' de funções do analisador sintático.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve uma lista de todos os ''hooks'' subscritos (conteúdo de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve uma lista de todos os ''hooks'' subscritos (conteúdo de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve uma lista de identificadores de variáveis.",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve uma lista dos protocolos permitidos nos ''links'' externos.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores padrão para as preferências dos utilizadores.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "Adiciona as etiquetas da edição.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Etiqueta as edições patrulhadas.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as etiquetas da edição.",
-       "apihelp-query+usercontribs-param-show": "Mostrar só as contribuições que correspondem a estes critérios; por exemplo, só as edições não menores: <kbd>$2show=!minor</kbd>.\n\nSe um dos valores <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> estiver definido, as revisões feitas há mais de <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) não serão mostradas.",
+       "apihelp-query+usercontribs-param-show": "Mostrar só as contribuições que correspondem a estes critérios; por exemplo, só as edições não menores: <kbd>$2show=!minor</kbd>.\n\nSe um dos valores <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> estiver definido, as revisões feitas há mais de <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) não serão mostradas.",
        "apihelp-query+usercontribs-param-tag": "Listar só as revisões marcadas com esta etiqueta.",
        "apihelp-query+usercontribs-param-toponly": "Listar só as alterações que são a revisão mais recente.",
        "apihelp-query+usercontribs-example-user": "Mostrar as contribuições do utilizador <kbd>Example</kbd>.",
        "apihelp-removeauthenticationdata-description": "Remover os dados de autenticação do utilizador atual.",
        "apihelp-removeauthenticationdata-example-simple": "Tentar remover os dados do utilizador atual para o pedido de autenticação <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "Enviar a um utilizador uma mensagem eletrónica de reinício da palavra-passe.",
-       "apihelp-resetpassword-description-noroutes": "Não estão disponíveis rotas de reinício da palavra-passe.\n\nPara usar este módulo, ative uma rota em <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
+       "apihelp-resetpassword-description-noroutes": "Não estão disponíveis rotas de reinício da palavra-passe.\n\nPara usar este módulo, ative uma rota em <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
        "apihelp-resetpassword-param-user": "O utilizar cuja palavra-passe será reiniciada.",
        "apihelp-resetpassword-param-email": "O correio eletrónico do utilizador cuja palavra-passe será reiniciada.",
        "apihelp-resetpassword-example-user": "Enviar uma mensagem eletrónica para reinício da palavra-passe ao utilizador <kbd>Example</kbd>.",
index 672b7f0..adea9ab 100644 (file)
        "apihelp-parse-param-preview": "{{doc-apihelp-param|parse|preview}}",
        "apihelp-parse-param-sectionpreview": "{{doc-apihelp-param|parse|sectionpreview}}",
        "apihelp-parse-param-disabletoc": "{{doc-apihelp-param|parse|disabletoc}}",
+       "apihelp-parse-param-useskin": "{{doc-apihelp-param|parse|useskin}}",
        "apihelp-parse-param-contentformat": "{{doc-apihelp-param|parse|contentformat}}",
        "apihelp-parse-param-contentmodel": "{{doc-apihelp-param|parse|contentmodel}}",
        "apihelp-parse-example-page": "{{doc-apihelp-example|parse}}",
index d86c395..5992b40 100644 (file)
        "apihelp-paraminfo-param-formatmodules": "Список названий форматных модулей (значения параметра <var>format</var>). Вместо этого используйте <var>$1modules</var>.",
        "apihelp-paraminfo-example-1": "Показать информацию для <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, и <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-paraminfo-example-2": "Показать информацию для всех подмодулей <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
-       "apihelp-parse-description": "Ð\90нализиÑ\80Ñ\83еÑ\82 Ñ\81одеÑ\80жимое Ð¸ Ð²Ð¾Ð·Ð²Ñ\80аÑ\89аеÑ\82 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82 Ð°Ð½Ð°Ð»Ð¸Ð·Ð°.\n\nСм. Ñ\80азлиÑ\87нÑ\8bе prop-модÑ\83ли <kbd>[[Special:ApiHelp/query|action=query]]</kbd> Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82екÑ\83Ñ\89ей Ð²ÐµÑ\80Ñ\81ии Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\n\nÐ\95Ñ\81Ñ\82Ñ\8c Ð½ÐµÑ\81колÑ\8cко Ñ\81поÑ\81обов Ñ\83казаÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ð´Ð»Ñ\8f Ð°Ð½Ð°Ð»Ð¸Ð·а:\n# Указать страницы или версию, используя <var>$1page</var>, <var>$1pageid</var> или <var>$1oldid</var>.\n# Явно указать содержимое, используя <var>$1text</var>, <var>$1title</var> и <var>$1contentmodel</var>.\n# Указать описание правки. Параметру <var>$1prop</var> должно быть присвоено пустое значение.",
+       "apihelp-parse-description": "Ð\9fаÑ\80Ñ\81иÑ\82 Ñ\81одеÑ\80жимое Ð¸ Ð²Ð¾Ð·Ð²Ñ\80аÑ\89аеÑ\82 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82 Ð¿Ð°Ñ\80Ñ\81инга.\n\nСм. Ñ\80азлиÑ\87нÑ\8bе prop-модÑ\83ли <kbd>[[Special:ApiHelp/query|action=query]]</kbd> Ð´Ð»Ñ\8f Ð¿Ð¾Ð»Ñ\83Ñ\87ениÑ\8f Ð¸Ð½Ñ\84оÑ\80маÑ\86ии Ð¾ Ñ\82екÑ\83Ñ\89ей Ð²ÐµÑ\80Ñ\81ии Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.\n\nÐ\95Ñ\81Ñ\82Ñ\8c Ð½ÐµÑ\81колÑ\8cко Ñ\81поÑ\81обов Ñ\83казаÑ\82Ñ\8c Ñ\82екÑ\81Ñ\82 Ð´Ð»Ñ\8f Ð¿Ð°Ñ\80Ñ\81инга:\n# Указать страницы или версию, используя <var>$1page</var>, <var>$1pageid</var> или <var>$1oldid</var>.\n# Явно указать содержимое, используя <var>$1text</var>, <var>$1title</var> и <var>$1contentmodel</var>.\n# Указать описание правки. Параметру <var>$1prop</var> должно быть присвоено пустое значение.",
        "apihelp-parse-param-title": "Название страницы, которой принадлежит текст. Если опущено, должен быть указан параметр <var>$1contentmodel</var>, и в качестве заголовка будет использовано [[API]].",
-       "apihelp-parse-param-text": "Ð\90нализиÑ\80Ñ\83емый текст. Используйте <var>$1title</var> или <var>$1contentmodel</var> для управления моделью содержимого.",
+       "apihelp-parse-param-text": "РаÑ\81паÑ\80Ñ\81иваемый текст. Используйте <var>$1title</var> или <var>$1contentmodel</var> для управления моделью содержимого.",
        "apihelp-parse-param-summary": "Анализируемое описание правки.",
-       "apihelp-parse-param-page": "Ð\90нализиÑ\80овать содержимое этой страницы. Не может быть использовано совместно с <var>$1text</var> и <var>$1title</var>.",
+       "apihelp-parse-param-page": "РаÑ\81паÑ\80Ñ\81ить содержимое этой страницы. Не может быть использовано совместно с <var>$1text</var> и <var>$1title</var>.",
        "apihelp-parse-param-pageid": "Анализировать содержимое этой страницы. Переопределяет <var>$1page</var>.",
        "apihelp-parse-param-redirects": "Если значением <var>$1page</var> или <var>$1pageid</var> указано перенаправление, разрешить его.",
-       "apihelp-parse-param-oldid": "Ð\90нализиÑ\80овать содержимое этой версии. Переопределяет <var>$1page</var> и <var>$1pageid</var>.",
+       "apihelp-parse-param-oldid": "РаÑ\81паÑ\80Ñ\81ить содержимое этой версии. Переопределяет <var>$1page</var> и <var>$1pageid</var>.",
        "apihelp-parse-param-prop": "Какую информацию включить:",
-       "apihelp-parse-paramvalue-prop-text": "Возвращает текст проанализированного вики-текста.",
-       "apihelp-parse-paramvalue-prop-langlinks": "Возвращает языковые ссылки из проанализированного вики-текста.",
+       "apihelp-parse-paramvalue-prop-text": "Возвращает текст распарсенного вики-текста.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Возвращает языковые ссылки из распарсенного вики-текста.",
        "apihelp-parse-paramvalue-prop-categories": "Возвращает категории из проанализированного вики-текста.",
        "apihelp-parse-paramvalue-prop-categorieshtml": "Возвращает HTML-версию категорий.",
-       "apihelp-parse-paramvalue-prop-links": "Возвращает внутренние ссылки из проанализированного вики-текста.",
+       "apihelp-parse-paramvalue-prop-links": "Возвращает внутренние ссылки из распарсенного вики-текста.",
        "apihelp-parse-paramvalue-prop-templates": "Возвращает шаблоны из проанализированного вики-текста.",
-       "apihelp-parse-paramvalue-prop-images": "Возвращает изображения из проанализированного вики-текста.",
-       "apihelp-parse-paramvalue-prop-externallinks": "Возвращает внешние ссылки из проанализированного вики-текста.",
+       "apihelp-parse-paramvalue-prop-images": "Возвращает изображения из распарсенного вики-текста.",
+       "apihelp-parse-paramvalue-prop-externallinks": "Возвращает внешние ссылки из распарсенного вики-текста.",
        "apihelp-parse-paramvalue-prop-sections": "Возвращает разделы из проанализированного вики-текста.",
-       "apihelp-parse-paramvalue-prop-revid": "Добавляет идентификатор версии проанализированной страницы.",
+       "apihelp-parse-paramvalue-prop-revid": "Добавляет идентификатор версии распарсенной страницы.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Добавляет название проанализированного вики-текста.",
        "apihelp-parse-paramvalue-prop-headitems": "<span class=\"apihelp-deprecated\">Не поддерживается.</span> Возвращает элементы, которые следует поместить в <code>&lt;head&gt;</code> страницы.",
-       "apihelp-parse-paramvalue-prop-headhtml": "Возвращает проанализированный <code>&lt;head&gt;</code> страницы.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Возвращает распарсенный <code>&lt;head&gt;</code> страницы.",
        "apihelp-parse-paramvalue-prop-modules": "Возвращает использованные на странице модули ResourceLoader. Для загрузки, используйте <code>mw.loader.using()</code>. Одновременно с <kbd>modules</kbd> должно быть запрошено либо <kbd>jsconfigvars</kbd>, либо <kbd>encodedjsconfigvars</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы. Для их применения используйте <code>mw.condig.set()</code>.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы в виде JSON-строки.",
        "apihelp-parse-paramvalue-prop-indicators": "Возвращает HTML-код индикаторов, использованных на данной странице.",
-       "apihelp-parse-paramvalue-prop-iwlinks": "Возвращает интервики-ссылки из проанализированного вики-текста.",
-       "apihelp-parse-paramvalue-prop-wikitext": "Возвращает исходный анализируемый вики-текст.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "Возвращает интервики-ссылки из распарсенного вики-текста.",
+       "apihelp-parse-paramvalue-prop-wikitext": "Возвращает исходный распарсиваемый вики-текст.",
        "apihelp-parse-paramvalue-prop-properties": "Возвращает различные свойства, объявленные в проанализированном вики-тексте.",
        "apihelp-parse-paramvalue-prop-limitreportdata": "Возвращает структурированный отчёт о лимите. Не возвращает данных, если задан <var>$1disablelimitreport</var>.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Возвращает HTML-версию отчёта о лимите. Не возвращает данных, если задан <var>$1disablelimitreport</var>.",
-       "apihelp-parse-paramvalue-prop-parsetree": "XML-дерево анализа содержимого версии (требуется модель содержимого <code>$1</code>).",
+       "apihelp-parse-paramvalue-prop-parsetree": "Дерево парсинга XML содержимого версии (требуется модель содержимого <code>$1</code>).",
        "apihelp-parse-paramvalue-prop-parsewarnings": "Возвращает предупреждения, возникшие во время анализа.",
-       "apihelp-parse-param-wrapoutputclass": "CSS-клаÑ\81Ñ\81, Ð¸Ñ\81полÑ\8cзÑ\83емÑ\8bй Ð´Ð»Ñ\8f Ð¾Ð±Ð¾Ñ\80аÑ\87иваниÑ\8f Ð²Ñ\8bвода Ð°Ð½Ð°Ð»Ð¸Ð·Ð°Ñ\82ора.",
+       "apihelp-parse-param-wrapoutputclass": "CSS-клаÑ\81Ñ\81, Ð¸Ñ\81полÑ\8cзÑ\83емÑ\8bй Ð´Ð»Ñ\8f Ð¾Ð±Ð¾Ñ\80аÑ\87иваниÑ\8f Ð²Ñ\8bвода Ð¿Ð°Ñ\80Ñ\81ера.",
        "apihelp-parse-param-pst": "Выполнить преобразование перед записью правки (PST) до того, как начать анализировать текст. Доступно только когда используется с текстом.",
-       "apihelp-parse-param-onlypst": "Ð\92Ñ\8bполниÑ\82Ñ\8c Ð¿Ñ\80еобÑ\80азование Ð¿ÐµÑ\80ед Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e Ð¿Ñ\80авки (PST) Ð²Ñ\85однÑ\8bÑ\85 Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð½Ð¾ Ð½Ðµ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ\80овать их. Возвращает тот же вики-текст после применения PST. Доступно только при применении с <var>$1text</var>.",
+       "apihelp-parse-param-onlypst": "Ð\92Ñ\8bполниÑ\82Ñ\8c Ð¿Ñ\80еобÑ\80азование Ð¿ÐµÑ\80ед Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e Ð¿Ñ\80авки (PST) Ð²Ñ\85однÑ\8bÑ\85 Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð½Ð¾ Ð½Ðµ Ð¿Ð°Ñ\80Ñ\81ить их. Возвращает тот же вики-текст после применения PST. Доступно только при применении с <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Включает языковые ссылки, обеспечиваемые расширениями (для использования с <kbd>$1prop=langlinks</kbd>).",
-       "apihelp-parse-param-section": "Ð\9fÑ\80оанализиÑ\80оваÑ\82Ñ\8c Ñ\81одеÑ\80жимое Ñ\82олÑ\8cко Ñ\81екÑ\86ии Ñ\81 Ð·Ð°Ð´Ð°Ð½Ð½Ñ\8bм Ð½Ð¾Ð¼ÐµÑ\80ом.\n\nÐ\95Ñ\81ли Ð·Ð°Ð´Ð°Ð½ <kbd>new</kbd>, Ð¿Ñ\80оанализиÑ\80овать <var>$1text</var> и <var>$1sectiontitle</var> так, как будто добавлена новая секция на страницу.\n\n<kbd>new</kbd> доступен только при заданном <var>text</var>.",
+       "apihelp-parse-param-section": "РаÑ\81паÑ\80Ñ\81иÑ\82Ñ\8c Ñ\81одеÑ\80жимое Ñ\82олÑ\8cко Ñ\81екÑ\86ии Ñ\81 Ð·Ð°Ð´Ð°Ð½Ð½Ñ\8bм Ð½Ð¾Ð¼ÐµÑ\80ом.\n\nÐ\95Ñ\81ли Ð·Ð°Ð´Ð°Ð½ <kbd>new</kbd>, Ñ\80аÑ\81паÑ\80Ñ\81ить <var>$1text</var> и <var>$1sectiontitle</var> так, как будто добавлена новая секция на страницу.\n\n<kbd>new</kbd> доступен только при заданном <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Название новой секции, когда <var>section</var> имеет значение <kbd>new</kbd>.\n\nВ отличие от редактирования страницы, оно не примет значение параметра <var>summary</var>, если опустить его или оставить пустым.",
-       "apihelp-parse-param-disablelimitreport": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ð¾Ñ\82Ñ\87Ñ\91Ñ\82 Ð¾ Ð»Ð¸Ð¼Ð¸Ñ\82е («NewPP limit report») Ð¸Ð· Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а Ð°Ð½Ð°Ð»Ð¸Ð·а.",
+       "apihelp-parse-param-disablelimitreport": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ð¾Ñ\82Ñ\87Ñ\91Ñ\82 Ð¾ Ð»Ð¸Ð¼Ð¸Ñ\82е («NewPP limit report») Ð¸Ð· Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а Ð¿Ð°Ñ\80Ñ\81инга.",
        "apihelp-parse-param-disablepp": "Вместо этого используйте <var>$1disablelimitreport</var>.",
-       "apihelp-parse-param-disableeditsection": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\81Ñ\81Ñ\8bлки Ð½Ð° Ñ\80едакÑ\82иÑ\80ование Ñ\80азделов Ð¸Ð· Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а Ð°Ð½Ð°Ð»Ð¸Ð·а.",
-       "apihelp-parse-param-disabletidy": "Ð\9dе Ð¿Ñ\80оводиÑ\82Ñ\8c Ð¾Ñ\87иÑ\81Ñ\82кÑ\83 HTML (напÑ\80имеÑ\80, Ñ\81 Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e tidy) Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов Ð°Ð½Ð°Ð»Ð¸Ð·а.",
-       "apihelp-parse-param-generatexml": "Сгенерировать XML-дерево анализа (требуется модель содержимого <code>$1</code>, замещено <kbd>$2prop=parsetree</kbd>).",
+       "apihelp-parse-param-disableeditsection": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ñ\81Ñ\81Ñ\8bлки Ð½Ð° Ñ\80едакÑ\82иÑ\80ование Ñ\80азделов Ð¸Ð· Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82а Ð¿Ð°Ñ\80Ñ\81инга.",
+       "apihelp-parse-param-disabletidy": "Ð\9dе Ð¿Ñ\80оводиÑ\82Ñ\8c Ð¾Ñ\87иÑ\81Ñ\82кÑ\83 HTML (напÑ\80имеÑ\80, Ñ\81 Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e tidy) Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82ов Ð¿Ð°Ñ\80Ñ\81инга.",
+       "apihelp-parse-param-generatexml": "Сгенерировать дерево парсинга XML (требуется модель содержимого <code>$1</code>, замещено <kbd>$2prop=parsetree</kbd>).",
        "apihelp-parse-param-preview": "Проанализировать в режиме препросмотра.",
-       "apihelp-parse-param-sectionpreview": "Ð\9fÑ\80оанализиÑ\80овать в режиме предпросмотра раздела (также активирует режим предпросмотра).",
+       "apihelp-parse-param-sectionpreview": "РаÑ\81паÑ\80Ñ\81ить в режиме предпросмотра раздела (также активирует режим предпросмотра).",
        "apihelp-parse-param-disabletoc": "Не включать в вывод содержание.",
        "apihelp-parse-param-contentformat": "Формат сериализации содержимого, использующийся во входном тексте. Доступен только при использовании с $1text.",
        "apihelp-parse-param-contentmodel": "Модель содержимого входного текста. Если пропущена, должен быть задан $1title, и значение по умолчанию будет взято в зависимости от указанного названия. Доступно только при использовании с $1text.",
-       "apihelp-parse-example-page": "Ð\90нализ страницы.",
+       "apihelp-parse-example-page": "Ð\9fаÑ\80Ñ\81инг страницы.",
        "apihelp-parse-example-text": "Анализ вики-текста.",
-       "apihelp-parse-example-texttitle": "Ð\90нализ вики-текста с заданным заголовком страницы.",
+       "apihelp-parse-example-texttitle": "Ð\9fаÑ\80Ñ\81инг вики-текста с заданным заголовком страницы.",
        "apihelp-parse-example-summary": "Анализ описания правки.",
        "apihelp-patrol-description": "Патрулирование страницы или версии.",
        "apihelp-patrol-param-rcid": "Идентификатор патрулируемой последней правки.",
        "apihelp-query+allmessages-description": "Возвращает сообщения с этого сайта.",
        "apihelp-query+allmessages-param-messages": "Какие сообщения выводить. <kbd>*</kbd> (по умолчанию) означает «все сообщения».",
        "apihelp-query+allmessages-param-prop": "Какие свойства получить:",
-       "apihelp-query+allmessages-param-enableparser": "УÑ\81Ñ\82ановиÑ\82е, Ñ\87Ñ\82обÑ\8b Ð°ÐºÑ\82ивиÑ\80оваÑ\82Ñ\8c Ð°Ð½Ð°Ð»Ð¸Ð·Ð°Ñ\82ор, который будет обрабатывать вики-текст сообщений (подставлять магические слова, обрабатывать шаблоны, и так далее).",
+       "apihelp-query+allmessages-param-enableparser": "УÑ\81Ñ\82ановиÑ\82е, Ñ\87Ñ\82обÑ\8b Ð°ÐºÑ\82ивиÑ\80оваÑ\82Ñ\8c Ð¿Ð°Ñ\80Ñ\81ер, который будет обрабатывать вики-текст сообщений (подставлять магические слова, обрабатывать шаблоны, и так далее).",
        "apihelp-query+allmessages-param-nocontent": "Если установлен, ничего не делать с содержимым сообщений перед выводом.",
        "apihelp-query+allmessages-param-includelocal": "Также включить локальные сообщения, то есть, сообщения, не существующие в программе, но существующие в пространстве имён {{ns:MediaWiki}}. Это перечислит все страницы из пространства {{ns:MediaWiki}}, поэтому в результат также могут попасть страницы, не являющимися сообщениями — например, [[MediaWiki:Common.js|Common.js]].",
        "apihelp-query+allmessages-param-args": "Аргументы, подставляемые в сообщение.",
index e7e7997..5f82a78 100644 (file)
        "apihelp-query+search-param-limit": "返回的总计页面数。",
        "apihelp-query+search-param-interwiki": "搜索结果中包含跨wiki结果,如果可用。",
        "apihelp-query+search-param-backend": "要使用的搜索后端,如果没有则为默认。",
-       "apihelp-query+search-param-enablerewrites": "å\90¯ç\94¨å\86\85é\83¨æ\9f¥è¯¢é\87\8då\86\99ã\80\82ä¸\80äº\9bæ\90\9cç´¢å\90\8e端å\8f¯ä»¥é\87\8då\86\99æ\9f¥è¯¢å\88°å®\83认为ä¼\9aç»\99å\87ºæ\9b´å¥½ç»\93æ\9e\9cç\9a\84å\9c°æ\96¹,例如纠正拼写错误。",
+       "apihelp-query+search-param-enablerewrites": "å\90¯ç\94¨å\86\85é\83¨æ\9f¥è¯¢é\87\8då\86\99ã\80\82ä¸\80äº\9bæ\90\9cç´¢å\90\8e端å\8f¯ä»¥é\87\8då\86\99æ\9f¥è¯¢å\88°å\8f¦ä¸\80个被认为è\83½æ\8f\90ä¾\9bæ\9b´å¥½ç»\93æ\9e\9cç\9a\84ä½\8dç½®,例如纠正拼写错误。",
        "apihelp-query+search-example-simple": "搜索<kbd>meaning</kbd>。",
        "apihelp-query+search-example-text": "搜索文本<kbd>meaning</kbd>。",
        "apihelp-query+search-example-generator": "获取有关搜索<kbd>meaning</kbd>返回页面的页面信息。",
index e9a6edc..c3f798f 100644 (file)
@@ -1660,7 +1660,7 @@ class AuthManager implements LoggerAwareInterface {
                        }
                }
 
-               $backoffKey = wfMemcKey( 'AuthManager', 'autocreate-failed', md5( $username ) );
+               $backoffKey = $cache->makeKey( 'AuthManager', 'autocreate-failed', md5( $username ) );
                if ( $cache->get( $backoffKey ) ) {
                        $this->logger->debug( __METHOD__ . ': {username} denied by prior creation attempt failures', [
                                'username' => $username,
index 8a10ecb..3125bd3 100644 (file)
@@ -127,7 +127,7 @@ class Throttler implements LoggerAwareInterface {
                                continue;
                        }
 
-                       $throttleKey = wfGlobalCacheKey( 'throttler', $this->type, $index, $ipKey, $userKey );
+                       $throttleKey = $this->cache->makeGlobalKey( 'throttler', $this->type, $index, $ipKey, $userKey );
                        $throttleCount = $this->cache->get( $throttleKey );
 
                        if ( !$throttleCount ) { // counter not started yet
@@ -170,7 +170,7 @@ class Throttler implements LoggerAwareInterface {
                $userKey = $username ? md5( $username ) : null;
                foreach ( $this->conditions as $index => $specificThrottle ) {
                        $ipKey = isset( $specificThrottle['allIPs'] ) ? null : $ip;
-                       $throttleKey = wfGlobalCacheKey( 'throttler', $this->type, $index, $ipKey, $userKey );
+                       $throttleKey = $this->cache->makeGlobalKey( 'throttler', $this->type, $index, $ipKey, $userKey );
                        $this->cache->delete( $throttleKey );
                }
        }
index 0a302b6..f2da08a 100644 (file)
@@ -242,14 +242,14 @@ abstract class FileCacheBase {
                                : IP::sanitizeRange( "$ip/16" );
 
                        # Bail out if a request already came from this range...
-                       $key = wfMemcKey( static::class, 'attempt', $this->mType, $this->mKey, $ip );
+                       $key = $cache->makeKey( static::class, 'attempt', $this->mType, $this->mKey, $ip );
                        if ( $cache->get( $key ) ) {
                                return; // possibly the same user
                        }
                        $cache->set( $key, 1, self::MISS_TTL_SEC );
 
                        # Increment the number of cache misses...
-                       $key = $this->cacheMissKey();
+                       $key = $this->cacheMissKey( $cache );
                        if ( $cache->get( $key ) === false ) {
                                $cache->set( $key, 1, self::MISS_TTL_SEC );
                        } else {
@@ -265,13 +265,14 @@ abstract class FileCacheBase {
        public function getMissesRecent() {
                $cache = ObjectCache::getLocalClusterInstance();
 
-               return self::MISS_FACTOR * $cache->get( $this->cacheMissKey() );
+               return self::MISS_FACTOR * $cache->get( $this->cacheMissKey( $cache ) );
        }
 
        /**
+        * @param BagOStuff $cache Instance that the key will be used with
         * @return string
         */
-       protected function cacheMissKey() {
-               return wfMemcKey( static::class, 'misses', $this->mType, $this->mKey );
+       protected function cacheMissKey( BagOStuff $cache ) {
+               return $cache->makeKey( static::class, 'misses', $this->mType, $this->mKey );
        }
 }
index 1a2da1a..b34a33f 100644 (file)
@@ -717,6 +717,11 @@ class EnhancedChangesList extends ChangesList {
                if ( $rc->getAttribute( 'rc_type' ) == RC_CATEGORIZE ) {
                        // For categorizations we must swap the category title with the page title!
                        $pageTitle = Title::newFromID( $rc->getAttribute( 'rc_cur_id' ) );
+                       if ( !$pageTitle ) {
+                               // The page has been deleted, but the RC entry
+                               // deletion job has not run yet. Just skip.
+                               return '';
+                       }
                }
 
                $retVal = ' ' . $this->msg( 'parentheses' )
index 146d9c6..ff6a873 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Change tagging
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\Database;
 
 class ChangeTags {
@@ -1177,8 +1178,9 @@ class ChangeTags {
                if ( !Hooks::isRegistered( 'ChangeTagsListActive' ) ) {
                        return $tags;
                }
-               return ObjectCache::getMainWANInstance()->getWithSetCallback(
-                       wfMemcKey( 'active-tags' ),
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'active-tags' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $tags ) {
                                $setOpts += Database::getCacheSetOptions( wfGetDB( DB_REPLICA ) );
@@ -1188,7 +1190,7 @@ class ChangeTags {
                                return $tags;
                        },
                        [
-                               'checkKeys' => [ wfMemcKey( 'active-tags' ) ],
+                               'checkKeys' => [ $cache->makeKey( 'active-tags' ) ],
                                'lockTSE' => WANObjectCache::TTL_MINUTE * 5,
                                'pcTTL' => WANObjectCache::TTL_PROC_LONG
                        ]
@@ -1231,8 +1233,9 @@ class ChangeTags {
        public static function listExplicitlyDefinedTags() {
                $fname = __METHOD__;
 
-               return ObjectCache::getMainWANInstance()->getWithSetCallback(
-                       wfMemcKey( 'valid-tags-db' ),
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'valid-tags-db' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
                                $dbr = wfGetDB( DB_REPLICA );
@@ -1244,7 +1247,7 @@ class ChangeTags {
                                return array_filter( array_unique( $tags ) );
                        },
                        [
-                               'checkKeys' => [ wfMemcKey( 'valid-tags-db' ) ],
+                               'checkKeys' => [ $cache->makeKey( 'valid-tags-db' ) ],
                                'lockTSE' => WANObjectCache::TTL_MINUTE * 5,
                                'pcTTL' => WANObjectCache::TTL_PROC_LONG
                        ]
@@ -1266,8 +1269,9 @@ class ChangeTags {
                if ( !Hooks::isRegistered( 'ListDefinedTags' ) ) {
                        return $tags;
                }
-               return ObjectCache::getMainWANInstance()->getWithSetCallback(
-                       wfMemcKey( 'valid-tags-hook' ),
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'valid-tags-hook' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $tags ) {
                                $setOpts += Database::getCacheSetOptions( wfGetDB( DB_REPLICA ) );
@@ -1276,7 +1280,7 @@ class ChangeTags {
                                return array_filter( array_unique( $tags ) );
                        },
                        [
-                               'checkKeys' => [ wfMemcKey( 'valid-tags-hook' ) ],
+                               'checkKeys' => [ $cache->makeKey( 'valid-tags-hook' ) ],
                                'lockTSE' => WANObjectCache::TTL_MINUTE * 5,
                                'pcTTL' => WANObjectCache::TTL_PROC_LONG
                        ]
@@ -1300,11 +1304,11 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagCacheAll() {
-               $cache = ObjectCache::getMainWANInstance();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
 
-               $cache->touchCheckKey( wfMemcKey( 'active-tags' ) );
-               $cache->touchCheckKey( wfMemcKey( 'valid-tags-db' ) );
-               $cache->touchCheckKey( wfMemcKey( 'valid-tags-hook' ) );
+               $cache->touchCheckKey( $cache->makeKey( 'active-tags' ) );
+               $cache->touchCheckKey( $cache->makeKey( 'valid-tags-db' ) );
+               $cache->touchCheckKey( $cache->makeKey( 'valid-tags-hook' ) );
 
                self::purgeTagUsageCache();
        }
@@ -1314,9 +1318,9 @@ class ChangeTags {
         * @since 1.25
         */
        public static function purgeTagUsageCache() {
-               $cache = ObjectCache::getMainWANInstance();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
 
-               $cache->touchCheckKey( wfMemcKey( 'change-tag-statistics' ) );
+               $cache->touchCheckKey( $cache->makeKey( 'change-tag-statistics' ) );
        }
 
        /**
@@ -1331,8 +1335,9 @@ class ChangeTags {
         */
        public static function tagUsageStatistics() {
                $fname = __METHOD__;
-               return ObjectCache::getMainWANInstance()->getWithSetCallback(
-                       wfMemcKey( 'change-tag-statistics' ),
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'change-tag-statistics' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
                                $dbr = wfGetDB( DB_REPLICA, 'vslow' );
@@ -1355,7 +1360,7 @@ class ChangeTags {
                                return $out;
                        },
                        [
-                               'checkKeys' => [ wfMemcKey( 'change-tag-statistics' ) ],
+                               'checkKeys' => [ $cache->makeKey( 'change-tag-statistics' ) ],
                                'lockTSE' => WANObjectCache::TTL_MINUTE * 5,
                                'pcTTL' => WANObjectCache::TTL_PROC_LONG
                        ]
index 4ff8636..8c1f8dc 100644 (file)
@@ -63,17 +63,6 @@ class MWException extends Exception {
                return $wgLang instanceof Language;
        }
 
-       /**
-        * Run hook to allow extensions to modify the text of the exception
-        *
-        * @param string $name Class name of the exception
-        * @param array $args Arguments to pass to the callback functions
-        * @return string|null String to output or null if any hook has been called
-        */
-       public function runHooks( $name, $args = [] ) {
-               return MWExceptionRenderer::runHooks( $this, $name, $args );
-       }
-
        /**
         * Get a message from i18n
         *
@@ -164,12 +153,7 @@ class MWException extends Exception {
                if ( $this->useOutputPage() ) {
                        $wgOut->prepareErrorPage( $this->getPageTitle() );
 
-                       $hookResult = $this->runHooks( static::class );
-                       if ( $hookResult ) {
-                               $wgOut->addHTML( $hookResult );
-                       } else {
-                               $wgOut->addHTML( $this->getHTML() );
-                       }
+                       $wgOut->addHTML( $this->getHTML() );
 
                        $wgOut->output();
                } else {
@@ -183,12 +167,7 @@ class MWException extends Exception {
                                '<style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style>' .
                                "</head><body>\n";
 
-                       $hookResult = $this->runHooks( static::class . 'Raw' );
-                       if ( $hookResult ) {
-                               echo $hookResult;
-                       } else {
-                               echo $this->getHTML();
-                       }
+                       echo $this->getHTML();
 
                        echo "</body></html>\n";
                }
index 435fde3..bd43934 100644 (file)
@@ -84,51 +84,6 @@ class MWExceptionRenderer {
                }
        }
 
-       /**
-        * Run hook to allow extensions to modify the text of the exception
-        *
-        * Called by MWException for b/c
-        *
-        * @param Exception|Throwable $e
-        * @param string $name Class name of the exception
-        * @param array $args Arguments to pass to the callback functions
-        * @return string|null String to output or null if any hook has been called
-        */
-       public static function runHooks( $e, $name, $args = [] ) {
-               global $wgExceptionHooks;
-
-               if ( !isset( $wgExceptionHooks ) || !is_array( $wgExceptionHooks ) ) {
-                       return null; // Just silently ignore
-               }
-
-               if ( !array_key_exists( $name, $wgExceptionHooks ) ||
-                       !is_array( $wgExceptionHooks[$name] )
-               ) {
-                       return null;
-               }
-
-               $hooks = $wgExceptionHooks[$name];
-               $callargs = array_merge( [ $e ], $args );
-
-               foreach ( $hooks as $hook ) {
-                       if (
-                               is_string( $hook ) ||
-                               ( is_array( $hook ) && count( $hook ) >= 2 && is_string( $hook[0] ) )
-                       ) {
-                               // 'function' or [ 'class', 'hook' ]
-                               $result = call_user_func_array( $hook, $callargs );
-                       } else {
-                               $result = null;
-                       }
-
-                       if ( is_string( $result ) ) {
-                               return $result;
-                       }
-               }
-
-               return null;
-       }
-
        /**
         * @param Exception|Throwable $e
         * @return bool Should the exception use $wgOut to output the error?
@@ -167,16 +122,11 @@ class MWExceptionRenderer {
                                $wgOut->prepareErrorPage( self::msg( 'internalerror', 'Internal error' ) );
                        }
 
-                       $hookResult = self::runHooks( $e, get_class( $e ) );
-                       if ( $hookResult ) {
-                               $wgOut->addHTML( $hookResult );
-                       } else {
-                               // Show any custom GUI message before the details
-                               if ( $e instanceof MessageSpecifier ) {
-                                       $wgOut->addHTML( Message::newFromSpecifier( $e )->escaped() );
-                               }
-                               $wgOut->addHTML( self::getHTML( $e ) );
+                       // Show any custom GUI message before the details
+                       if ( $e instanceof MessageSpecifier ) {
+                               $wgOut->addHTML( Message::newFromSpecifier( $e )->escaped() );
                        }
+                       $wgOut->addHTML( self::getHTML( $e ) );
 
                        $wgOut->output();
                } else {
@@ -191,12 +141,7 @@ class MWExceptionRenderer {
                                '<style>body { font-family: sans-serif; margin: 0; padding: 0.5em 2em; }</style>' .
                                "</head><body>\n";
 
-                       $hookResult = self::runHooks( $e, get_class( $e ) . 'Raw' );
-                       if ( $hookResult ) {
-                               echo $hookResult;
-                       } else {
-                               echo self::getHTML( $e );
-                       }
+                       echo self::getHTML( $e );
 
                        echo "</body></html>\n";
                }
index 7116c22..0ad0527 100644 (file)
@@ -2170,7 +2170,7 @@ abstract class File implements IDBAccessObject {
                                        $metadata = MediaWiki\quietCall( 'unserialize', $metadata );
                                }
 
-                               return $handler->getContentHeaders( $metadata );
+                               return $handler->getContentHeaders( $metadata, $this->getWidth(), $this->getHeight() );
                        }
                }
 
index 194c0ed..8514cc8 100644 (file)
@@ -1202,7 +1202,9 @@ class LocalFile extends File {
                if ( $handler ) {
                        $metadata = MediaWiki\quietCall( 'unserialize', $props['metadata'] );
 
-                       $options['headers'] = $handler->getContentHeaders( $metadata );
+                       $options['headers'] = $handler->getContentHeaders(
+                               $metadata, $props['width'], $props['height']
+                       );
                } else {
                        $options['headers'] = [];
                }
index 8c1241d..8829f66 100644 (file)
@@ -72,7 +72,13 @@ class HTMLUsersMultiselectField extends HTMLUserTextField {
                        $params['default'] = $values;
                }
 
-               return new UsersMultiselectWidget( $params );
+               // Make the field auto-infusable when it's used inside a legacy HTMLForm rather than OOUIHTMLForm
+               $params['infusable'] = true;
+               $params['classes'] = [ 'mw-htmlform-field-autoinfuse' ];
+               $widget = new UsersMultiselectWidget( $params );
+               $widget->setAttributes( [ 'data-mw-modules' => implode( ',', $this->getOOUIModules() ) ] );
+
+               return $widget;
        }
 
        protected function shouldInfuseOOUI() {
index ba9818d..43d3574 100644 (file)
@@ -577,7 +577,7 @@ class MssqlInstaller extends DatabaseInstaller {
                                        $grantableNames[] = $dbUser;
                                } catch ( DBQueryError $dqe ) {
                                        $this->db->rollback();
-                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
                                }
                        } elseif ( !$this->userExists( $dbUser ) ) {
                                try {
@@ -588,7 +588,7 @@ class MssqlInstaller extends DatabaseInstaller {
                                        $grantableNames[] = $dbUser;
                                } catch ( DBQueryError $dqe ) {
                                        $this->db->rollback();
-                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
                                }
                        } else {
                                $status->warning( 'config-install-user-alreadyexists', $dbUser );
@@ -620,7 +620,7 @@ class MssqlInstaller extends DatabaseInstaller {
                                        $this->db->commit();
                                } catch ( DBQueryError $dqe ) {
                                        $this->db->rollback();
-                                       $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getText() );
+                                       $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getMessage() );
                                }
                                // Also try to grant SHOWPLAN on the db, but don't fail if we can't
                                // (just makes a couple things in mediawiki run slower since
@@ -646,7 +646,7 @@ class MssqlInstaller extends DatabaseInstaller {
                                $this->db->query( "CREATE FULLTEXT INDEX ON $searchindex (si_title, si_text) "
                                        . "KEY INDEX si_page ON $schema" );
                        } catch ( DBQueryError $dqe ) {
-                               $status->fatal( 'config-install-tables-failed', $dqe->getText() );
+                               $status->fatal( 'config-install-tables-failed', $dqe->getMessage() );
                        }
                }
 
index 4f0b66c..cbb79f8 100644 (file)
@@ -584,7 +584,7 @@ class MysqlInstaller extends DatabaseInstaller {
                                                        // If we couldn't create for some bizzare reason and the
                                                        // user probably doesn't exist, skip the grant
                                                        $this->db->rollback( __METHOD__ );
-                                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getText() );
+                                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
                                                }
                                        }
                                } else {
@@ -604,7 +604,7 @@ class MysqlInstaller extends DatabaseInstaller {
                                $this->db->commit( __METHOD__ );
                        } catch ( DBQueryError $dqe ) {
                                $this->db->rollback( __METHOD__ );
-                               $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getText() );
+                               $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getMessage() );
                        }
                }
 
index 3edc40d..759b82d 100644 (file)
@@ -10,7 +10,8 @@
                        "Dorgan",
                        "Macofe",
                        "Máté",
-                       "Seb35"
+                       "Seb35",
+                       "Urbalazs"
                ]
        },
        "config-desc": "A MediaWiki telepítője",
@@ -70,6 +71,7 @@
        "config-apc": "Az [http://www.php.net/apc APC] telepítve van",
        "config-apcu": "Az [http://www.php.net/apcu APCu] telepítve van",
        "config-wincache": "A [http://www.iis.net/download/WinCacheForPhp WinCache] telepítve van",
+       "config-no-cache-apcu": "<strong>Figyelmeztetés:</strong> nem találhatók a következők: [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] vagy [http://www.iis.net/download/WinCacheForPhp WinCache].\nAz objektum gyorsítótárazása nincs engedélyezve.",
        "config-diff3-bad": "GNU diff3 nem található.",
        "config-git": "Megtaláltam a Git verziókezelő szoftvert: <code>$1</code>.",
        "config-git-bad": "A Git verziókezelő rendszer nem található.",
index 3670744..c23e1f6 100644 (file)
        "config-unicode-using-intl": "Adoeuvia [http://pecl.php.net/intl l'estenscion PECL intl] pe-a normalizzaçion Unicode.",
        "config-unicode-pure-php-warning": "'''Attençion:''' [http://pecl.php.net/intl l'estenscion PECL intl] a no l'è disponibile pe gestî a normalizzaçion Unicode, quindi se torna a-a lenta implementaçion in PHP puo.\nSe ti esegui un scito a ato traffego, ti doviesci leze arcun-e conscidiaçioin in sciâ [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzaçion Unicode].",
        "config-unicode-update-warning": "'''Attençion:''' a verscion installaa do gestô pe-a normalizzaçion Unicode a l'adoeuvia una vegia verscion da libraia [http://site.icu-project.org/ do progetto ICU].\nTi doviesci [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations aggiornâ] se ti voeu doeuviâ l'Unicode.",
-       "config-no-db": "Imposcibile trovâ un driver adatto pe-o database! L'è necessaio installâ un driver pe PHP.\n{{PLURAL:$2|O seguente formato de database o l'è supportou|I seguenti formati de database son supportæ}}: $1.\n\nSe ti compilli PHP aotonomamente, riconfiguilo attivando un client database, presempio utilizzando <code>./configure --with-mysqli</code>.\nQualoa t'avesci installou PHP pe mezo de 'n pacchetto Debian ò Ubuntu, alloa ti devi installâ o pacchetto <code>php5-mysql</code> ascì."
+       "config-no-db": "Imposcibile trovâ un driver adatto pe-o database! L'è necessaio installâ un driver pe PHP.\n{{PLURAL:$2|O seguente formato de database o l'è supportou|I seguenti formati de database son supportæ}}: $1.\n\nSe ti compilli PHP aotonomamente, riconfiguilo attivando un client database, presempio utilizzando <code>./configure --with-mysqli</code>.\nQualoa t'avesci installou PHP pe mezo de 'n pacchetto Debian ò Ubuntu, alloa ti devi installâ o pacchetto <code>php5-mysql</code> ascì.",
+       "config-outdated-sqlite": "'''Atençion''': ti g'hæ SQLite $1, ma te ghe voeu comme minnimo a verscion $2. SQLite o no saiâ disponibile.",
+       "config-no-fts3": "'''Atençion''': SQLite o l'è compilou sença o [//sqlite.org/fts3.html modulo FTS3], e fonçioin de çerchia no saian disponibile insce sto motô.",
+       "config-pcre-old": "<strong>Fatale:</strong> se richiede PCRE  $1 o succescivo.\nO to PHP binaio o l'è conligou con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/Ciu informaçioin insce PCRE].",
+       "config-pcre-no-utf8": "'''Fatale''': o modulo PCRE de PHP pâ ch'o segge stæto compilou sença o supporto PCRE_UTF8. A MediaWiki a-o richiede pe fonçionâ corettamente.",
+       "config-memory-raised": "O valô <code>memory_limit</code> de PHP o l'è $1, aomentou a $2.",
+       "config-memory-bad": "''Atençion:''' O valô de <code>memory_limit</code> do PHP o l'è $1.\nFoscia o l'è troppo basso.\nL'installaçion a porriæ fallî!",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] o l'è installou",
+       "config-apc": "[http://www.php.net/apc APC] o l'è installou",
+       "config-apcu": "[http://www.php.net/apc APC] o l'è installou",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] o l'è installou",
+       "config-no-cache-apcu": "'''Atençion:''' [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] ò [http://www.iis.net/download/WinCacheForPhp WinCache] no son stæti trovæ.\nA caching di ogetti a no l'è attivâ.",
+       "config-mod-security": "<strong>Atençion:</strong> O to serviou web o g'ha o [http://modsecurity.org/ mod_security] abilitou. Gh'è tante configuaçioin che crean di problemi a-a MediaWiki ò a atro software ch'o permette a-i utenti de pubbricâ quâ-se-segge contegnuo. Se poscibbile o doviæ ese disabilitou.\nFanni rifeimento a-a [http://modsecurity.org/documentation/ documentaçion insce-o mod_security] ò contatta o supporto tecnico do to provider de hosting se se veifica di erroî.",
+       "config-diff3-bad": "GNU diff3 non trovou.",
+       "config-git": "Trovou software de controllo da verscion Git: <code>$1</code>.",
+       "config-git-bad": "Software de controllo da verscion Git non trovou.",
+       "config-imagemagick": "Trovou ImageMagick: <code>$1</code>.\nE miniatue de inmaggine saian presente se i upload vegnan abilitæ.",
+       "config-gd": "Trovou a libraja graffica GD integrâ.\nE miniatue de inmaggine saian presente se i upload vegnan abilitæ.",
+       "config-no-scaling": "Imposcibbile trovâ a libraja GD ò ImageMagick.\nE miniatue de inmaggine saian disabilitæ.",
+       "config-no-uri": "'''Errô:''' Imposcibbile determinâ l'URI attoale.\nInstallaçion interotta.",
+       "config-no-cli-uri": "'''Atençion''': <code>--scriptpath</code> non specificou, s'adoeuvia o valô predefinio: <code>$1</code>.",
+       "config-using-server": "Nomme do serviou in uso \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "URL do serviou in uso \"<nowiki>$1$2</nowiki>\".",
+       "config-uploads-not-safe": "<strong>Atençion:</strong> a directory predefinia pe-i caregamenti <code>$1</code> a l'è vulnerabile a l'execuçion arbitraia de script.\nSciben che, a difeisa da segueçça, a MediaWiki a controlla tutti i file caregæ, l'è fortemente racomandou de [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security serâ questa menaçça] primma d'abilitâ i caregamenti.",
+       "config-no-cli-uploads-check": "<strong>Atençion:</strong> a directory predefinia pe-i caregamenti (<code>$1</code>) a no l'è stæta veificâ pe-a vulnerabilitæ insce l'esecuçion arbitraia de script durante l'installaçion da linnia de comando.",
+       "config-brokenlibxml": "O to scistema o g'ha 'na combinaçion de verscioin de PHP e libxml2 ch'a l'è difettosa e ch'a poeu provocâ un danno ascozo a-i dæti da MediaWiki e d'atre apricaçioin web.\nAgiorna a libxml2 2.7.3 ò succescivo ([https://bugs.php.net/bug.php?id=45996 o babollo o l'è studiou da-o lao PHP]).\nInstallaçion interotta.",
+       "config-suhosin-max-value-length": "Suhosin o l'è installou e o limmita o parammetro GET <code>length</code> a $1 byte.\nO componente MediaWiki ResourceLoader o fonçioniâ inte sto limmite, ma questo o reduiâ e prestaçioin.\nSe poscibbile, ti doviesci impostâ <code>suhosin.get.max_value_length</code> a 1024 ò ciu in <code>php.ini</code>, e impostâ <code>$wgResourceLoaderMaxQueryLength</code> a-o mæximo valô in <code>LocalSettings.php</code>.",
+       "config-db-type": "Tipo de database:",
+       "config-db-host": "Host do database:",
+       "config-db-host-help": "Se o serviou do to database o l'è insce 'n serviou despægio, inmetti chì o nomme de l'host ò o so adresso IP.\n\nSe ti doeuvi un web hosting condiviso, o to hosting provider o doviæ fornite o nomme host corretto inta so documentaçion.\n\nSe t'ê aproeuvo a instalâ insce 'n serviou Windows con uso de MySQL, l'uso de \"localhost\" o porriæ no fonçionâ correttamente comme nomme do serviou. In caxo de problemi, proeuva a impostâ \"127.0.0.1\" comme adresso IP locale.\n\nSe ti t'adoeuvi PostgreSQL, lascia questo campo voeuo pe consentî de connettise trammite un socket Unix.",
+       "config-db-host-oracle": "TNS do database:",
+       "config-db-host-oracle-help": "Inseisci un vallido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora o dev'ese vixibbile a questa installaçion.<br />Se ti t'adoeuvi a libraia cliente 10g o ciù reçente ti poeu ascì doeuviâ o mettodo de denominaçion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
+       "config-db-wiki-settings": "Identiffica questo wiki",
+       "config-db-name": "Nomme do database:",
+       "config-db-name-help": "Çerni un nomme ch'o l'identiffiche o to wiki.\nO no deve contegnî de spaççi.\n\nSe ti doeuvi un web hosting condiviso, o to hosting provider o te fornisce un speciffico nomme de database da doeuviâ, opû o ti consentiâ de creâ o database trammite un panello de controllo.",
+       "config-db-name-oracle": "Schema do database:"
 }
index c3fcab9..a94f86a 100644 (file)
@@ -1114,9 +1114,13 @@ class MemcachedClient {
                if ( $this->_debug ) {
                        $this->_debugprint( sprintf( "%s %s (%s)", $cmd, $key, $line ) );
                }
-               if ( $line == "STORED" ) {
+               if ( $line === "STORED" ) {
+                       return true;
+               } elseif ( $line === "NOT_STORED" && $cmd === "set" ) {
+                       // "Not stored" is always used as the mcrouter response with AllAsyncRoute
                        return true;
                }
+
                return false;
        }
 
index 5983c1b..c568e7b 100644 (file)
@@ -149,7 +149,12 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
 
        public function set( $key, $value, $exptime = 0, $flags = 0 ) {
                $this->debugLog( "set($key)" );
-               return $this->checkResult( $key, parent::set( $key, $value, $exptime ) );
+               $result = parent::set( $key, $value, $exptime );
+               if ( $result === false && $this->client->getResultCode() === Memcached::RES_NOTSTORED ) {
+                       // "Not stored" is always used as the mcrouter response with AllAsyncRoute
+                       return true;
+               }
+               return $this->checkResult( $key, $result );
        }
 
        protected function cas( $casToken, $key, $value, $exptime = 0 ) {
@@ -163,9 +168,8 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                if ( $result === false && $this->client->getResultCode() === Memcached::RES_NOTFOUND ) {
                        // "Not found" is counted as success in our interface
                        return true;
-               } else {
-                       return $this->checkResult( $key, $result );
                }
+               return $this->checkResult( $key, $result );
        }
 
        public function add( $key, $value, $exptime = 0 ) {
index 28efcb5..ee7644f 100644 (file)
@@ -416,6 +416,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $conn;
        }
 
+       /**
+        * Set the PSR-3 logger interface to use for query logging. (The logger
+        * interfaces for connection logging and error logging can be set with the
+        * constructor.)
+        *
+        * @param LoggerInterface $logger
+        */
        public function setLogger( LoggerInterface $logger ) {
                $this->queryLogger = $logger;
        }
@@ -576,6 +583,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->mTrxLevel ? $this->mTrxWriteCallers : [];
        }
 
+       /**
+        * Get the list of method names that have pending write queries or callbacks
+        * for this transaction
+        *
+        * @return array
+        */
        protected function pendingWriteAndCallbackCallers() {
                if ( !$this->mTrxLevel ) {
                        return [];
@@ -664,6 +677,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         */
        abstract function strencode( $s );
 
+       /**
+        * Set a custom error handler for logging errors during database connection
+        */
        protected function installErrorHandler() {
                $this->mPHPError = false;
                $this->htmlErrors = ini_set( 'html_errors', '0' );
@@ -671,6 +687,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 
        /**
+        * Restore the previous error handler and return the last PHP error for this DB
+        *
         * @return bool|string
         */
        protected function restoreErrorHandler() {
@@ -697,6 +715,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 
        /**
+        * Error handler for logging errors during database connection
         * This method should not be used outside of Database classes
         *
         * @param int $errno
@@ -953,6 +972,17 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $res;
        }
 
+       /**
+        * Helper method for query() that handles profiling and logging and sends
+        * the query to doQuery()
+        *
+        * @param string $sql Original SQL query
+        * @param string $commentedSql SQL query with debugging/trace comment
+        * @param bool $isWrite Whether the query is a (non-temporary) write operation
+        * @param string $fname Name of the calling function
+        * @return bool|ResultWrapper True for a successful write query, ResultWrapper
+        *     object for a successful read query, or false on failure
+        */
        private function doProfiledQuery( $sql, $commentedSql, $isWrite, $fname ) {
                $isMaster = !is_null( $this->getLBInfo( 'master' ) );
                # generalizeSQL() will probably cut down the query to reasonable
@@ -1034,6 +1064,16 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                }
        }
 
+       /**
+        * Determine whether or not it is safe to retry queries after a database
+        * connection is lost
+        *
+        * @param string $sql SQL query
+        * @param bool $priorWritesPending Whether there is a transaction open with
+        *     possible write queries or transaction pre-commit/idle callbacks
+        *     waiting on it to finish.
+        * @return bool True if it is safe to retry the query, false otherwise
+        */
        private function canRecoverFromDisconnect( $sql, $priorWritesPending ) {
                # Transaction dropped; this can mean lost writes, or REPEATABLE-READ snapshots.
                # Dropped connections also mean that named locks are automatically released.
@@ -1054,6 +1094,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return true;
        }
 
+       /**
+        * Clean things up after transaction loss due to disconnection
+        *
+        * @return null|Exception
+        */
        private function handleSessionLoss() {
                $this->mTrxLevel = 0;
                $this->mTrxIdleCallbacks = []; // T67263
@@ -2338,6 +2383,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->insert( $destTable, $rows, $fname, $insertOptions );
        }
 
+       /**
+        * Native server-side implementation of insertSelect() for situations where
+        * we don't want to select everything into memory
+        *
+        * @see IDatabase::insertSelect()
+        */
        protected function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds,
                $fname = __METHOD__,
                $insertOptions = [], $selectOptions = []
@@ -2982,7 +3033,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 
        /**
-        * @return bool
+        * Close existing database connection and open a new connection
+        *
+        * @return bool True if new connection is opened successfully, false if error
         */
        protected function reconnect() {
                $this->closeConnection();
@@ -3350,6 +3403,14 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->doLockTables( $read, $write, $method );
        }
 
+       /**
+        * Helper function for lockTables() that handles the actual table locking
+        *
+        * @param array $read Array of tables to lock for read access
+        * @param array $write Array of tables to lock for write access
+        * @param string $method Name of caller
+        * @return true
+        */
        protected function doLockTables( array $read, array $write, $method ) {
                return true;
        }
@@ -3364,6 +3425,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->doUnlockTables( $method );
        }
 
+       /**
+        * Helper function for unlockTables() that handles the actual table unlocking
+        *
+        * @param string $method Name of caller
+        * @return true
+        */
        protected function doUnlockTables( $method ) {
                return true;
        }
index e8210c8..53d5ef4 100644 (file)
@@ -577,3 +577,5 @@ abstract class LBFactory implements ILBFactory {
                $this->destroy();
        }
 }
+
+class_alias( LBFactory::class, 'LBFactory' );
index 374e166..dcd276c 100644 (file)
@@ -465,9 +465,12 @@ class DjVuHandler extends ImageHandler {
        /**
        * Get useful response headers for GET/HEAD requests for a file with the given metadata
        * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
-       * @return array
+       * @param $fallbackWidth int|null Width to fall back to if metadata doesn't have any
+       * @param $fallbackHeight int|null Height to fall back to if metadata doesn't have any
+       * @return Array
+       * @since 1.30
        */
-       public function getContentHeaders( $metadata ) {
+       public function getContentHeaders( $metadata, $fallbackWidth = null, $fallbackHeight = null ) {
                if ( !is_array( $metadata ) || !isset( $metadata['xml'] ) ) {
                        return [];
                }
index 621a4aa..95fa859 100644 (file)
@@ -117,11 +117,6 @@ class Exif {
                 * @link http://exif.org/Exif2-2.PDF The Exif 2.2 specification
                 */
                $this->mExifTags = [
-                       'COMPUTED' => [
-                               'Width' => Exif::SHORT_OR_LONG, # Image width
-                               'Height' => Exif::SHORT_OR_LONG, # Image height
-                       ],
-
                        # TIFF Rev. 6.0 Attribute Information (p22)
                        'IFD0' => [
                                # Tags relating to image structure
index cf4b12e..0e10abb 100644 (file)
@@ -242,36 +242,4 @@ class ExifBitmapHandler extends BitmapHandler {
 
                return 0;
        }
-
-       /**
-       * Get useful response headers for GET/HEAD requests for a file with the given metadata
-       * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
-       * @return Array
-       */
-       public function getContentHeaders( $metadata ) {
-               if ( !isset( $metadata['Width'] ) || !isset( $metadata['Height'] ) ) {
-                       return [];
-               }
-
-               $dimensionsMetadata = [];
-
-               if ( $this->autoRotateEnabled() && isset( $metadata['Orientation'] ) ) {
-                       switch ( $metadata['Orientation'] ) {
-                               case 5: // CCW flipped
-                               case 6: // CCW
-                               case 7: // CW flipped
-                               case 8: // CW
-                                       $dimensionsMetadata['width'] = $metadata['Height'];
-                                       $dimensionsMetadata['height'] = $metadata['Width'];
-                                       break;
-                       }
-               }
-
-               if ( !isset( $dimensionsMetadata['width'] ) ) {
-                       $dimensionsMetadata['width'] = $metadata['Width'];
-                       $dimensionsMetadata['height'] = $metadata['Height'];
-               }
-
-               return parent::getContentHeaders( $dimensionsMetadata );
-       }
 }
index 2c541e0..69982c2 100644 (file)
@@ -24,6 +24,7 @@
  * @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
  * @file
  */
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Timestamp\TimestampException;
 
 /**
@@ -101,9 +102,6 @@ class FormatMetadata extends ContextSource {
        public function makeFormattedData( $tags ) {
                $resolutionunit = !isset( $tags['ResolutionUnit'] ) || $tags['ResolutionUnit'] == 2 ? 2 : 3;
                unset( $tags['ResolutionUnit'] );
-               // Width and height are for internal use and already available & displayed outside of metadata
-               unset( $tags['Width'] );
-               unset( $tags['Height'] );
 
                foreach ( $tags as $tag => &$vals ) {
                        // This seems ugly to wrap non-array's in an array just to unwrap again,
@@ -1584,14 +1582,14 @@ class FormatMetadata extends ContextSource {
         * @since 1.23
         */
        public function fetchExtendedMetadata( File $file ) {
-               $cache = ObjectCache::getMainWANInstance();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
 
                // If revision deleted, exit immediately
                if ( $file->isDeleted( File::DELETED_FILE ) ) {
                        return [];
                }
 
-               $cacheKey = wfMemcKey(
+               $cacheKey = $cache->makeKey(
                        'getExtendedMetadata',
                        $this->getLanguage()->getCode(),
                        (int)$this->singleLang,
index b4c3d6e..ac5fc81 100644 (file)
@@ -254,8 +254,6 @@ class GIFMetadataExtractor {
                        'duration' => $duration,
                        'xmp' => $xmp,
                        'comment' => $comment,
-                       'width' => $width,
-                       'height' => $height,
                ];
        }
 
index a8744a1..ec4d372 100644 (file)
@@ -916,12 +916,26 @@ abstract class MediaHandler {
        /**
        * Get useful response headers for GET/HEAD requests for a file with the given metadata
        * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
+       * @param $fallbackWidth int|null Width to fall back to if metadata doesn't have any
+       * @param $fallbackHeight int|null Height to fall back to if metadata doesn't have any
        * @return Array
        * @since 1.30
        */
-       public function getContentHeaders( $metadata ) {
-               if ( !isset( $metadata['width'] ) || !isset( $metadata['height'] ) ) {
-                       return [];
+       public function getContentHeaders( $metadata, $fallbackWidth = null, $fallbackHeight = null ) {
+               if ( !isset( $metadata['width'] ) ) {
+                       if ( is_null( $fallbackWidth ) ) {
+                               return [];
+                       }
+
+                       $metadata['width'] = $fallbackWidth;
+               }
+
+               if ( !isset( $metadata['height'] ) ) {
+                       if ( is_null( $fallbackHeight ) ) {
+                               return [];
+                       }
+
+                       $metadata['height'] = $fallbackHeight;
                }
 
                $dimensionString = $metadata['width'] . 'x' . $metadata['height'];
index 1cb2ec0..c12ca0b 100644 (file)
@@ -406,8 +406,6 @@ class PNGMetadataExtractor {
                        'text' => $text,
                        'bitDepth' => $bitDepth,
                        'colorType' => $colorType,
-                       'width' => $width,
-                       'height' => $height,
                ];
        }
 
index bc1e2fb..c419524 100644 (file)
@@ -175,9 +175,6 @@ class XCFHandler extends BitmapHandler {
                                $metadata['colorType'] = 'unknown';
 
                        }
-
-                       $metadata['width'] = $header['width'];
-                       $metadata['height'] = $header['height'];
                } else {
                        // Marker to prevent repeated attempted extraction
                        $metadata['error'] = true;
index ecee0e2..b3e37a4 100644 (file)
@@ -4400,7 +4400,6 @@ class Parser {
                        $toc = Linker::tocList( $toc, $this->mOptions->getUserLangObj() );
                        $this->mOutput->setTOCHTML( $toc );
                        $toc = self::TOC_START . $toc . self::TOC_END;
-                       $this->mOutput->addModules( 'mediawiki.toc' );
                }
 
                if ( $isMain ) {
index 426b550..cb8e3a7 100644 (file)
@@ -51,9 +51,9 @@ abstract class Preprocessor {
                ],
                '-{' => [
                        'end' => '}-',
-                       'names' => [ 1 => null ],
-                       'min' => 1,
-                       'max' => 1,
+                       'names' => [ 2 => null ],
+                       'min' => 2,
+                       'max' => 2,
                ],
        ];
 
index b93c617..7539307 100644 (file)
@@ -223,8 +223,7 @@ class Preprocessor_DOM extends Preprocessor {
 
                $searchBase = "[{<\n"; # }
                if ( !$wgDisableLangConversion ) {
-                       // FIXME: disabled due to T153761
-                       // $searchBase .= '-';
+                       $searchBase .= '-';
                }
 
                // For fast reverse searches
@@ -277,6 +276,13 @@ class Preprocessor_DOM extends Preprocessor {
                                $search = $searchBase;
                                if ( $stack->top === false ) {
                                        $currentClosing = '';
+                               } elseif (
+                                       $stack->top->close === '}-' &&
+                                       $stack->top->count > 2
+                               ) {
+                                       # adjust closing for -{{{...{{
+                                       $currentClosing = '}';
+                                       $search .= $currentClosing;
                                } else {
                                        $currentClosing = $stack->top->close;
                                        $search .= $currentClosing;
@@ -333,11 +339,15 @@ class Preprocessor_DOM extends Preprocessor {
                                        } elseif ( isset( $this->rules[$curChar] ) ) {
                                                $found = 'open';
                                                $rule = $this->rules[$curChar];
-                                       } elseif ( $curChar == '-' ) {
-                                               $found = 'dash';
                                        } else {
-                                               # Some versions of PHP have a strcspn which stops on null characters
-                                               # Ignore and continue
+                                               # Some versions of PHP have a strcspn which stops on
+                                               # null characters; ignore these and continue.
+                                               # We also may get '-' and '}' characters here which
+                                               # don't match -{ or $currentClosing.  Add these to
+                                               # output and continue.
+                                               if ( $curChar == '-' || $curChar == '}' ) {
+                                                       $accum .= $curChar;
+                                               }
                                                ++$i;
                                                continue;
                                        }
@@ -615,7 +625,10 @@ class Preprocessor_DOM extends Preprocessor {
                        } elseif ( $found == 'open' ) {
                                # count opening brace characters
                                $curLen = strlen( $curChar );
-                               $count = ( $curLen > 1 ) ? 1 : strspn( $text, $curChar, $i );
+                               $count = ( $curLen > 1 ) ?
+                                       # allow the final character to repeat
+                                       strspn( $text, $curChar[$curLen-1], $i+1 ) + 1 :
+                                       strspn( $text, $curChar, $i );
 
                                # we need to add to stack only if opening brace count is enough for one of the rules
                                if ( $count >= $rule['min'] ) {
@@ -635,17 +648,25 @@ class Preprocessor_DOM extends Preprocessor {
                                        # Add literal brace(s)
                                        $accum .= htmlspecialchars( str_repeat( $curChar, $count ) );
                                }
-                               $i += $curLen * $count;
+                               $i += $count;
                        } elseif ( $found == 'close' ) {
                                $piece = $stack->top;
                                # lets check if there are enough characters for closing brace
                                $maxCount = $piece->count;
+                               if ( $piece->close === '}-' && $curChar === '}' ) {
+                                       $maxCount--; # don't try to match closing '-' as a '}'
+                               }
                                $curLen = strlen( $curChar );
-                               $count = ( $curLen > 1 ) ? 1 : strspn( $text, $curChar, $i, $maxCount );
+                               $count = ( $curLen > 1 ) ? $curLen :
+                                       strspn( $text, $curChar, $i, $maxCount );
 
                                # check for maximum matching characters (if there are 5 closing
                                # characters, we will probably need only 3 - depending on the rules)
                                $rule = $this->rules[$piece->open];
+                               if ( $piece->close === '}-' && $piece->count > 2 ) {
+                                       # tweak for -{..{{ }}..}-
+                                       $rule = $this->rules['{'];
+                               }
                                if ( $count > $rule['max'] ) {
                                        # The specified maximum exists in the callback array, unless the caller
                                        # has made an error
@@ -663,14 +684,16 @@ class Preprocessor_DOM extends Preprocessor {
                                if ( $matchingCount <= 0 ) {
                                        # No matching element found in callback array
                                        # Output a literal closing brace and continue
-                                       $accum .= htmlspecialchars( str_repeat( $curChar, $count ) );
-                                       $i += $curLen * $count;
+                                       $endText = substr( $text, $i, $count );
+                                       $accum .= htmlspecialchars( $endText );
+                                       $i += $count;
                                        continue;
                                }
                                $name = $rule['names'][$matchingCount];
                                if ( $name === null ) {
                                        // No element, just literal text
-                                       $element = $piece->breakSyntax( $matchingCount ) . str_repeat( $rule['end'], $matchingCount );
+                                       $endText = substr( $text, $i, $matchingCount );
+                                       $element = $piece->breakSyntax( $matchingCount ) . $endText;
                                } else {
                                        # Create XML element
                                        # Note: $parts is already XML, does not need to be encoded further
@@ -703,7 +726,7 @@ class Preprocessor_DOM extends Preprocessor {
                                }
 
                                # Advance input pointer
-                               $i += $curLen * $matchingCount;
+                               $i += $matchingCount;
 
                                # Unwind the stack
                                $stack->pop();
@@ -719,7 +742,12 @@ class Preprocessor_DOM extends Preprocessor {
                                                $stack->push( $piece );
                                                $accum =& $stack->getAccum();
                                        } else {
-                                               $accum .= str_repeat( $piece->open, $piece->count );
+                                               $s = substr( $piece->open, 0, -1 );
+                                               $s .= str_repeat(
+                                                       substr( $piece->open, -1 ),
+                                                       $piece->count - strlen( $s )
+                                               );
+                                               $accum .= $s;
                                        }
                                }
                                $flags = $stack->getFlags();
@@ -924,7 +952,11 @@ class PPDStackElement {
                        if ( $openingCount === false ) {
                                $openingCount = $this->count;
                        }
-                       $s = str_repeat( $this->open, $openingCount );
+                       $s = substr( $this->open, 0, -1 );
+                       $s .= str_repeat(
+                               substr( $this->open, -1 ),
+                               $openingCount - strlen( $s )
+                       );
                        $first = true;
                        foreach ( $this->parts as $part ) {
                                if ( $first ) {
index b2e9531..597d1f2 100644 (file)
@@ -155,8 +155,7 @@ class Preprocessor_Hash extends Preprocessor {
 
                $searchBase = "[{<\n";
                if ( !$wgDisableLangConversion ) {
-                       // FIXME: disabled due to T153761
-                       // $searchBase .= '-';
+                       $searchBase .= '-';
                }
 
                // For fast reverse searches
@@ -208,6 +207,13 @@ class Preprocessor_Hash extends Preprocessor {
                                $search = $searchBase;
                                if ( $stack->top === false ) {
                                        $currentClosing = '';
+                               } elseif (
+                                       $stack->top->close === '}-' &&
+                                       $stack->top->count > 2
+                               ) {
+                                       # adjust closing for -{{{...{{
+                                       $currentClosing = '}';
+                                       $search .= $currentClosing;
                                } else {
                                        $currentClosing = $stack->top->close;
                                        $search .= $currentClosing;
@@ -264,11 +270,15 @@ class Preprocessor_Hash extends Preprocessor {
                                        } elseif ( isset( $this->rules[$curChar] ) ) {
                                                $found = 'open';
                                                $rule = $this->rules[$curChar];
-                                       } elseif ( $curChar == '-' ) {
-                                               $found = 'dash';
                                        } else {
-                                               # Some versions of PHP have a strcspn which stops on null characters
-                                               # Ignore and continue
+                                               # Some versions of PHP have a strcspn which stops on
+                                               # null characters; ignore these and continue.
+                                               # We also may get '-' and '}' characters here which
+                                               # don't match -{ or $currentClosing.  Add these to
+                                               # output and continue.
+                                               if ( $curChar == '-' || $curChar == '}' ) {
+                                                       self::addLiteral( $accum, $curChar );
+                                               }
                                                ++$i;
                                                continue;
                                        }
@@ -558,7 +568,10 @@ class Preprocessor_Hash extends Preprocessor {
                        } elseif ( $found == 'open' ) {
                                # count opening brace characters
                                $curLen = strlen( $curChar );
-                               $count = ( $curLen > 1 ) ? 1 : strspn( $text, $curChar, $i );
+                               $count = ( $curLen > 1 ) ?
+                                       # allow the final character to repeat
+                                       strspn( $text, $curChar[$curLen-1], $i+1 ) + 1 :
+                                       strspn( $text, $curChar, $i );
 
                                # we need to add to stack only if opening brace count is enough for one of the rules
                                if ( $count >= $rule['min'] ) {
@@ -577,17 +590,25 @@ class Preprocessor_Hash extends Preprocessor {
                                        # Add literal brace(s)
                                        self::addLiteral( $accum, str_repeat( $curChar, $count ) );
                                }
-                               $i += $curLen * $count;
+                               $i += $count;
                        } elseif ( $found == 'close' ) {
                                $piece = $stack->top;
                                # lets check if there are enough characters for closing brace
                                $maxCount = $piece->count;
+                               if ( $piece->close === '}-' && $curChar === '}' ) {
+                                       $maxCount--; # don't try to match closing '-' as a '}'
+                               }
                                $curLen = strlen( $curChar );
-                               $count = ( $curLen > 1 ) ? 1 : strspn( $text, $curChar, $i, $maxCount );
+                               $count = ( $curLen > 1 ) ? $curLen :
+                                       strspn( $text, $curChar, $i, $maxCount );
 
                                # check for maximum matching characters (if there are 5 closing
                                # characters, we will probably need only 3 - depending on the rules)
                                $rule = $this->rules[$piece->open];
+                               if ( $piece->close === '}-' && $piece->count > 2 ) {
+                                       # tweak for -{..{{ }}..}-
+                                       $rule = $this->rules['{'];
+                               }
                                if ( $count > $rule['max'] ) {
                                        # The specified maximum exists in the callback array, unless the caller
                                        # has made an error
@@ -605,15 +626,17 @@ class Preprocessor_Hash extends Preprocessor {
                                if ( $matchingCount <= 0 ) {
                                        # No matching element found in callback array
                                        # Output a literal closing brace and continue
-                                       self::addLiteral( $accum, str_repeat( $curChar, $count ) );
-                                       $i += $curLen * $count;
+                                       $endText = substr( $text, $i, $count );
+                                       self::addLiteral( $accum, $endText );
+                                       $i += $count;
                                        continue;
                                }
                                $name = $rule['names'][$matchingCount];
                                if ( $name === null ) {
                                        // No element, just literal text
+                                       $endText = substr( $text, $i, $matchingCount );
                                        $element = $piece->breakSyntax( $matchingCount );
-                                       self::addLiteral( $element, str_repeat( $rule['end'], $matchingCount ) );
+                                       self::addLiteral( $element, $endText );
                                } else {
                                        # Create XML element
                                        $parts = $piece->parts;
@@ -648,7 +671,7 @@ class Preprocessor_Hash extends Preprocessor {
                                }
 
                                # Advance input pointer
-                               $i += $curLen * $matchingCount;
+                               $i += $matchingCount;
 
                                # Unwind the stack
                                $stack->pop();
@@ -664,7 +687,12 @@ class Preprocessor_Hash extends Preprocessor {
                                                $stack->push( $piece );
                                                $accum =& $stack->getAccum();
                                        } else {
-                                               self::addLiteral( $accum, str_repeat( $piece->open, $piece->count ) );
+                                               $s = substr( $piece->open, 0, -1 );
+                                               $s .= str_repeat(
+                                                       substr( $piece->open, -1 ),
+                                                       $piece->count - strlen( $s )
+                                               );
+                                               self::addLiteral( $accum, $s );
                                        }
                                }
 
@@ -762,7 +790,12 @@ class PPDStackElement_Hash extends PPDStackElement {
                        if ( $openingCount === false ) {
                                $openingCount = $this->count;
                        }
-                       $accum = [ str_repeat( $this->open, $openingCount ) ];
+                       $s = substr( $this->open, 0, -1 );
+                       $s .= str_repeat(
+                               substr( $this->open, -1 ),
+                               $openingCount - strlen( $s )
+                       );
+                       $accum = [ $s ];
                        $lastIndex = 0;
                        $first = true;
                        foreach ( $this->parts as $part ) {
index d14be3f..39a8a3d 100644 (file)
@@ -308,8 +308,15 @@ class ExtensionProcessor implements Processor {
        protected function extractNamespaces( array $info ) {
                if ( isset( $info['namespaces'] ) ) {
                        foreach ( $info['namespaces'] as $ns ) {
-                               $id = $ns['id'];
-                               $this->defines[$ns['constant']] = $id;
+                               if ( defined( $ns['constant'] ) ) {
+                                       // If the namespace constant is already defined, use it.
+                                       // This allows namespace IDs to be overwritten locally.
+                                       $id = constant( $ns['constant'] );
+                               } else {
+                                       $id = $ns['id'];
+                                       $this->defines[ $ns['constant'] ] = $id;
+                               }
+
                                if ( !( isset( $ns['conditional'] ) && $ns['conditional'] ) ) {
                                        // If it is not conditional, register it
                                        $this->attributes['ExtensionNamespaces'][$id] = $ns['name'];
index 0423f71..0c5a67e 100644 (file)
@@ -137,7 +137,7 @@ class ExtensionRegistry {
                        $cache = new EmptyBagOStuff();
                }
                // See if this queue is in APC
-               $key = wfMemcKey(
+               $key = $cache->makeKey(
                        'registration',
                        md5( json_encode( $this->queued + $versions ) )
                );
index 3cd7821..0d12840 100644 (file)
@@ -541,6 +541,10 @@ class ResourceLoader implements LoggerAwareInterface {
                        if ( isset( $info['object'] ) ) {
                                // Object given in info array
                                $object = $info['object'];
+                       } elseif ( isset( $info['factory'] ) ) {
+                               $object = call_user_func( $info['factory'], $info );
+                               $object->setConfig( $this->getConfig() );
+                               $object->setLogger( $this->logger );
                        } else {
                                if ( !isset( $info['class'] ) ) {
                                        $class = 'ResourceLoaderFileModule';
index 8633715..d37b73b 100644 (file)
@@ -132,7 +132,7 @@ final class SessionBackend {
                $this->forceHTTPS = $info->forceHTTPS();
                $this->providerMetadata = $info->getProviderMetadata();
 
-               $blob = $store->get( wfMemcKey( 'MWSession', (string)$this->id ) );
+               $blob = $store->get( $store->makeKey( 'MWSession', (string)$this->id ) );
                if ( !is_array( $blob ) ||
                        !isset( $blob['metadata'] ) || !is_array( $blob['metadata'] ) ||
                        !isset( $blob['data'] ) || !is_array( $blob['data'] )
@@ -249,7 +249,7 @@ final class SessionBackend {
                        $this->autosave();
 
                        // Delete the data for the old session ID now
-                       $this->store->delete( wfMemcKey( 'MWSession', $oldId ) );
+                       $this->store->delete( $this->store->makeKey( 'MWSession', $oldId ) );
                }
        }
 
@@ -317,7 +317,7 @@ final class SessionBackend {
 
                        // Delete the session data, so the local cache-only write in
                        // self::save() doesn't get things out of sync with the backend.
-                       $this->store->delete( wfMemcKey( 'MWSession', (string)$this->id ) );
+                       $this->store->delete( $this->store->makeKey( 'MWSession', (string)$this->id ) );
 
                        $this->autosave();
                }
@@ -729,7 +729,7 @@ final class SessionBackend {
                $flags = $this->persist ? 0 : CachedBagOStuff::WRITE_CACHE_ONLY;
                $flags |= CachedBagOStuff::WRITE_SYNC; // write to all datacenters
                $this->store->set(
-                       wfMemcKey( 'MWSession', (string)$this->id ),
+                       $this->store->makeKey( 'MWSession', (string)$this->id ),
                        [
                                'data' => $this->data,
                                'metadata' => $metadata,
index 7cc8509..40a568f 100644 (file)
@@ -214,7 +214,7 @@ final class SessionManager implements SessionManagerInterface {
                }
 
                // Test if the session is in storage, and if so try to load it.
-               $key = wfMemcKey( 'MWSession', $id );
+               $key = $this->store->makeKey( 'MWSession', $id );
                if ( is_array( $this->store->get( $key ) ) ) {
                        $create = false; // If loading fails, don't bother creating because it probably will fail too.
                        if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
@@ -255,7 +255,7 @@ final class SessionManager implements SessionManagerInterface {
                                throw new \InvalidArgumentException( 'Invalid session ID' );
                        }
 
-                       $key = wfMemcKey( 'MWSession', $id );
+                       $key = $this->store->makeKey( 'MWSession', $id );
                        if ( is_array( $this->store->get( $key ) ) ) {
                                throw new \InvalidArgumentException( 'Session ID already exists' );
                        }
@@ -545,7 +545,7 @@ final class SessionManager implements SessionManagerInterface {
         * @return bool Whether the session info matches the stored data (if any)
         */
        private function loadSessionInfoFromStore( SessionInfo &$info, WebRequest $request ) {
-               $key = wfMemcKey( 'MWSession', $info->getId() );
+               $key = $this->store->makeKey( 'MWSession', $info->getId() );
                $blob = $this->store->get( $key );
 
                // If we got data from the store and the SessionInfo says to force use,
@@ -934,7 +934,7 @@ final class SessionManager implements SessionManagerInterface {
        public function generateSessionId() {
                do {
                        $id = \Wikimedia\base_convert( \MWCryptRand::generateHex( 40 ), 16, 32, 32 );
-                       $key = wfMemcKey( 'MWSession', $id );
+                       $key = $this->store->makeKey( 'MWSession', $id );
                } while ( isset( $this->allSessionIds[$id] ) || is_array( $this->store->get( $key ) ) );
                return $id;
        }
index 7f00767..ccb202e 100644 (file)
@@ -158,8 +158,17 @@ abstract class Skin extends ContextSource {
                global $wgUseAjax, $wgEnableAPI, $wgEnableWriteAPI;
 
                $out = $this->getOutput();
+               $config = $this->getConfig();
                $user = $out->getUser();
                $modules = [
+                       // modules not specific to any specific skin or page
+                       'core' => [
+                               // Enforce various default modules for all pages and all skins
+                               // Keep this list as small as possible
+                               'site',
+                               'mediawiki.page.startup',
+                               'mediawiki.user',
+                       ],
                        // modules that enhance the page content in some way
                        'content' => [
                                'mediawiki.page.ready',
@@ -172,6 +181,11 @@ abstract class Skin extends ContextSource {
                        'user' => [],
                ];
 
+               // Support for high-density display images if enabled
+               if ( $config->get( 'ResponsiveImages' ) ) {
+                       $modules['core'][] = 'mediawiki.hidpi';
+               }
+
                // Preload jquery.tablesorter for mediawiki.page.ready
                if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
                        $modules['content'][] = 'jquery.tablesorter';
@@ -182,6 +196,10 @@ abstract class Skin extends ContextSource {
                        $modules['content'][] = 'jquery.makeCollapsible';
                }
 
+               if ( $out->isTOCEnabled() ) {
+                       $modules['content'][] = 'mediawiki.toc';
+               }
+
                // Add various resources if required
                if ( $wgUseAjax && $wgEnableAPI ) {
                        if ( $wgEnableWriteAPI && $user->isLoggedIn()
@@ -1489,7 +1507,7 @@ abstract class Skin extends ContextSource {
                }
 
                // Use the extra hash appender to let eg SSL variants separately cache.
-               $key = wfMemcKey( $name . $wgRenderHashAppend );
+               $key = $parserMemc->makeKey( $name . $wgRenderHashAppend );
                $cachedNotice = $parserMemc->get( $key );
                if ( is_array( $cachedNotice ) ) {
                        if ( md5( $notice ) == $cachedNotice['hash'] ) {
index 7d8a493..a2b5be4 100644 (file)
@@ -776,6 +776,12 @@ class MovePageForm extends UnlistedSpecialPage {
                # Deal with watches (we don't watch subpages)
                WatchAction::doWatchOrUnwatch( $this->watch, $ot, $user );
                WatchAction::doWatchOrUnwatch( $this->watch, $nt, $user );
+
+               /**
+                * T163966
+                * Increment user_editcount during page moves
+                */
+               $user->incEditCount();
        }
 
        function showLogFragment( $title ) {
index 12dae8b..583d4f9 100644 (file)
@@ -34,6 +34,7 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $this->outputHeader();
 
                $out = $this->getOutput();
+               $out->addModules( 'mediawiki.special.newFiles' );
                $this->addHelpLink( 'Help:New images' );
 
                $opts = new FormOptions();
@@ -44,6 +45,8 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $opts->add( 'hidepatrolled', false );
                $opts->add( 'limit', 50 );
                $opts->add( 'offset', '' );
+               $opts->add( 'start', '' );
+               $opts->add( 'end', '' );
 
                $opts->fetchValuesFromRequest( $this->getRequest() );
 
@@ -51,6 +54,19 @@ class SpecialNewFiles extends IncludableSpecialPage {
                        $opts->setValue( is_numeric( $par ) ? 'limit' : 'like', $par );
                }
 
+               // If start date comes after end date chronologically, swap them.
+               // They are swapped in the interface by JS.
+               $start = $opts->getValue( 'start' );
+               $end = $opts->getValue( 'end' );
+               if ( $start !== '' && $end !== '' && $start > $end ) {
+                       $temp = $end;
+                       $end = $start;
+                       $start = $temp;
+
+                       $opts->setValue( 'start', $start, true );
+                       $opts->setValue( 'end', $end, true );
+               }
+
                $opts->validateIntBounds( 'limit', 0, 500 );
 
                $this->opts = $opts;
@@ -105,6 +121,18 @@ class SpecialNewFiles extends IncludableSpecialPage {
                                'default' => $this->opts->getValue( 'offset' ),
                                'name' => 'offset',
                        ],
+
+                       'start' => [
+                               'type' => 'date',
+                               'label-message' => 'date-range-from',
+                               'name' => 'start',
+                       ],
+
+                       'end' => [
+                               'type' => 'date',
+                               'label-message' => 'date-range-to',
+                               'name' => 'end',
+                       ],
                ];
 
                if ( $this->getConfig()->get( 'MiserMode' ) ) {
index 2a5016f..e89dbc9 100644 (file)
@@ -405,7 +405,8 @@ class SpecialSearch extends SpecialPage {
                                $this,
                                $sidebarResultWidget,
                                $linkRenderer,
-                               MediaWikiServices::getInstance()->getInterwikiLookup()
+                               MediaWikiServices::getInstance()->getInterwikiLookup(),
+                               $search->getFeatureData( 'show-multimedia-search-results' )
                        );
                } else {
                        $sidebarResultWidget = new SimpleSearchResultWidget( $this, $linkRenderer );
index e2d9d42..cce0323 100644 (file)
@@ -24,7 +24,7 @@
  */
 use MediaWiki\MediaWikiServices;
 
-class NewFilesPager extends ReverseChronologicalPager {
+class NewFilesPager extends RangeChronologicalPager {
 
        /**
         * @var ImageGalleryBase
@@ -41,11 +41,20 @@ class NewFilesPager extends ReverseChronologicalPager {
         * @param FormOptions $opts
         */
        function __construct( IContextSource $context, FormOptions $opts ) {
-               $this->opts = $opts;
+               parent::__construct( $context );
 
+               $this->opts = $opts;
                $this->setLimit( $opts->getValue( 'limit' ) );
 
-               parent::__construct( $context );
+               $startTimestamp = '';
+               $endTimestamp = '';
+               if ( $opts->getValue( 'start' ) ) {
+                       $startTimestamp = $opts->getValue( 'start' ) . ' 00:00:00';
+               }
+               if ( $opts->getValue( 'end' ) ) {
+                       $endTimestamp = $opts->getValue( 'end' ) . ' 23:59:59';
+               }
+               $this->getDateRangeCond( $startTimestamp, $endTimestamp );
        }
 
        function getQueryInfo() {
index 5dd4be1..3317a1b 100644 (file)
@@ -4170,6 +4170,10 @@ class User implements IDBAccessObject {
                        $this->setToken(); // init token
                }
 
+               if ( !is_string( $this->mName ) ) {
+                       throw new RuntimeException( "User name field is not set." );
+               }
+
                $this->mTouched = $this->newTouchedTimestamp();
 
                $noPass = PasswordFactory::newInvalidPassword()->toString();
index 3cdda02..6d942de 100644 (file)
@@ -28,18 +28,22 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
        protected $iwLookup;
        /** @var $output */
        protected $output;
+       /** @var bool $showMultimedia */
+       protected $showMultimedia;
 
        public function __construct(
                SpecialSearch $specialSearch,
                SearchResultWidget $resultWidget,
                LinkRenderer $linkRenderer,
-               InterwikiLookup $iwLookup
+               InterwikiLookup $iwLookup,
+               $showMultimedia = false
        ) {
                $this->specialSearch = $specialSearch;
                $this->resultWidget = $resultWidget;
                $this->linkRenderer = $linkRenderer;
                $this->iwLookup = $iwLookup;
                $this->output = $specialSearch->getOutput();
+               $this->showMultimedia = $showMultimedia;
        }
        /**
         * @param string $term User provided search term
@@ -54,7 +58,9 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
 
                $this->loadCustomCaptions();
 
-               $this->output->addModules( 'mediawiki.special.search.commonsInterwikiWidget' );
+               if ( $this->showMultimedia ) {
+                       $this->output->addModules( 'mediawiki.special.search.commonsInterwikiWidget' );
+               }
                $this->output->addModuleStyles( 'mediawiki.special.search.interwikiwidget.styles' );
 
                $iwResults = [];
index 55813ae..03ebe21 100644 (file)
@@ -4186,6 +4186,7 @@ public static $zh2Hant = [
 '十出生' => '十出生',
 '十出祁山' => '十出祁山',
 '十出头' => '十出頭',
+'十出頭' => '十出頭',
 '十周后' => '十周後',
 '十天后' => '十天後',
 '十扎' => '十紮',
@@ -5847,7 +5848,10 @@ public static $zh2Hant = [
 '方便面' => '方便麵',
 '方向' => '方向',
 '方法里' => '方法裡',
+'于山东' => '於山東',
+'于山西' => '於山西',
 '于海上' => '於海上',
+'于海拔' => '於海拔',
 '于海边' => '於海邊',
 '于震中' => '於震中',
 '于震前' => '於震前',
@@ -6663,7 +6667,8 @@ public static $zh2Hant = [
 '症结' => '癥結',
 '癸丑' => '癸丑',
 '发干' => '發乾',
-'发呆' => '發獃',
+'发状态' => '發狀態',
+'发状况' => '發狀況',
 '发签' => '發籤',
 '发松' => '發鬆',
 '发面' => '發麵',
@@ -6959,7 +6964,7 @@ public static $zh2Hant = [
 '个中翘楚' => '箇中翹楚',
 '个中道理' => '箇中道理',
 '个中高手' => '箇中高手',
-'个旧' => '箇舊',
+'个旧市' => '箇舊市',
 '算历' => '算曆',
 '算历史' => '算歷史',
 '算准' => '算準',
@@ -8329,6 +8334,7 @@ public static $zh2Hant = [
 '铜钟' => '銅鐘',
 '铯钟' => '銫鐘',
 '铝制' => '鋁製',
+'锌制' => '鋅製',
 '钢之炼金术师' => '鋼之鍊金術師',
 '钢梁' => '鋼樑',
 '钢制' => '鋼製',
@@ -8439,6 +8445,7 @@ public static $zh2Hant = [
 '钟点' => '鐘點',
 '钟鼎' => '鐘鼎',
 '钟鼓' => '鐘鼓',
+'铁制' => '鐵製',
 '铁锈' => '鐵鏽',
 '铁钟' => '鐵鐘',
 '铸钟' => '鑄鐘',
@@ -8500,6 +8507,7 @@ public static $zh2Hant = [
 '辟谣' => '闢謠',
 '辟辟' => '闢辟',
 '辟邪以律' => '闢邪以律',
+'防制法' => '防制法',
 '防水表' => '防水錶',
 '防御' => '防禦',
 '防范' => '防範',
@@ -8569,6 +8577,7 @@ public static $zh2Hant = [
 '雪里' => '雪裡',
 '雪里红' => '雪裡紅',
 '雪里蕻' => '雪裡蕻',
+'云南个旧' => '雲南箇舊',
 '云吞' => '雲吞',
 '云吞面' => '雲吞麵',
 '云笈七签' => '雲笈七籤',
index 99b135d..38a665d 100644 (file)
        "showhideselectedversions": "Wys/versteek gekose weergawes",
        "editundo": "maak ongedaan",
        "diff-empty": "(Geen verskil)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur dieselfde gebruiker nie gewys nie)",
-       "diff-multi-manyusers": "({{PLURAL:$1|Een tussenin wysiging|$1 tussenin wysigings}} deur meer as $2 {{PLURAL:$2|gebruiker|gebruikers}} nie gewys nie)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Een wysiging tussenin|$1 wysigings tussenin}} deur dieselfde gebruiker nie gewys nie)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Een wysiging tussenin|$1 wysigings tussenin}} deur meer as $2 {{PLURAL:$2|gebruiker|gebruikers}} nie gewys nie)",
        "difference-missing-revision": "{{PLURAL:$2|'n Weergawe|$2 weergawes}} van die verskil ($1) {{PLURAL:$2|is|is}} nie gevind nie.\n\nDit word meestal veroorsaak deur die volg van 'n verouderde verwysing na 'n bladsy wat verwyder is.\nDetails kan in die [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} skraplogboek] gevind word.",
        "searchresults": "Soekresultate",
        "searchresults-title": "Soekresultate vir \"$1\"",
index 5ba574f..a46f454 100644 (file)
        "recentchanges-submit": "أظهر",
        "rcfilters-activefilters": "المرشحات النشطة",
        "rcfilters-quickfilters": "وصلات سريعة",
+       "rcfilters-quickfilters-placeholder": "احفظ إعدادات أداتك المفضلة لتستخدمها لاحقا مرة أخرى.",
        "rcfilters-savedqueries-defaultlabel": "مرشحات محفوظة",
        "rcfilters-savedqueries-rename": "أعد التسمية",
        "rcfilters-savedqueries-setdefault": "حفظ كقيمة افتراضية",
        "mw-widgets-titleinput-description-redirect": "تحويل إلى $1",
        "mw-widgets-categoryselector-add-category-placeholder": "أضف تصنيفا...",
        "mw-widgets-usersmultiselect-placeholder": "أضف المزيد...",
+       "date-range-from": "من تاريخ:",
+       "date-range-to": "حتى تاريخ:",
        "sessionmanager-tie": "لا يمكن جمع أنواع استيثاق متعددة: $1.",
        "sessionprovider-generic": "جلسات $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "جلسات قائمة على ملفات تعريف الارتباط (كوكيز)",
index 9e3825a..cdc89b5 100644 (file)
        "historyaction-submit": "Wapata",
        "dellogpage": " Nesitc ka wepinikatek kanaweritcikan",
        "rollbacklink": "e maninakatek",
-       "rollbacklinkcount": " nesitc wepina$1 {{PLURAL:$1|kweskisinikan|kweskisinihikana}}",
+       "rollbacklinkcount": " nesitc wepina $1 {{PLURAL:$1|kweskisinikan|kweskisinihikana}}",
        "protectlogpage": "Nanakatisiwina wapatcikan",
        "restriction-edit": "Meckotcita",
        "undeleteviewlink": "tapwatcike",
index 104a9bc..649d68c 100644 (file)
        "rcfilters-savedqueries-remove": "Выдаліць",
        "rcfilters-savedqueries-new-name-label": "Назва",
        "rcfilters-savedqueries-apply-label": "Стварыць хуткую спасылку",
+       "rcfilters-savedqueries-cancel-label": "Адмяніць",
+       "rcfilters-savedqueries-add-new-title": "Захаваць фільтры як хуткую спасылку",
        "rcfilters-restore-default-filters": "Аднавіць фільтры па змоўчаньні",
        "rcfilters-clear-all-filters": "Ачысьціць усе фільтры",
        "rcfilters-search-placeholder": "Фільтар апошніх зьменаў (праглядзець або пачніце друкаваць)",
        "rcfilters-filter-watchlist-watched-description": "Зьмены старонак у вашым сьпісе назіраньня.",
        "rcfilters-filter-watchlist-watchednew-label": "Новыя зьмены ў сьпісе назіраньня",
        "rcfilters-filter-watchlist-watchednew-description": "Зьмены старонак у вашым сьпісе назіраньня, якія вы не наведвалі з моманту гэтых зьменаў.",
+       "rcfilters-filter-watchlist-notwatched-label": "Ня ў сьпісе назіраньня",
+       "rcfilters-filter-watchlist-notwatched-description": "Усё, за выключэньнем зьменаў старонак з вашага сьпісу назіраньня.",
        "rcfilters-filtergroup-changetype": "Тып зьмены",
        "rcfilters-filter-pageedits-label": "Рэдагаваньні старонкі",
        "rcfilters-filter-pageedits-description": "Рэдагаваньні вікізьместу, абмеркаваньняў, апісаньняў катэгорыяў…",
        "rcfilters-hideminor-conflicts-typeofchange": "Некаторыя тыпы зьменаў ня могуць быць вызначаныя як «дробныя», таму гэты фільтар канфліктуе з наступнымі фільтрамі «Тыпаў зьменаў»: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Гэты фільтар тыпаў зьменаў канфліктуе зь фільтрам «Дробныя праўкі». Некаторыя тыпы зьменаў ня могуць быць вызначаныя як «дробныя».",
        "rcfilters-filtergroup-lastRevision": "Цяперашняя вэрсія",
+       "rcfilters-filter-lastrevision-label": "Апошняя вэрсія",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "rclistfromreset": "Скінуць выбар даты",
        "rclistfrom": "Паказаць зьмены з $2 $3",
index 4a73014..6eb3d4f 100644 (file)
        "redirectpagesub": "Пренасочваща страница",
        "redirectto": "Пренасочване към:",
        "lastmodifiedat": "Последна редакция на страницата: в $2, на $1.",
-       "viewcount": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ðµ Ð±Ð¸Ð»Ð° Ð¿Ñ\80еглеждана {{PLURAL:$1|един Ð¿Ñ\8aÑ\82|$1 Ð¿Ñ\8aÑ\82и}}.",
+       "viewcount": "Страницата е преглеждана {{PLURAL:$1|един път|$1 пъти}}.",
        "protectedpage": "Защитена страница",
        "jumpto": "Направо към:",
        "jumptonavigation": "навигация",
        "anonpreviewwarning": "Внимание: Не сте влезли в системата. Ако съхраните редакцията си, тя ще бъде записана в историята на страницата с вашият IP-адрес.",
        "missingsummary": "'''Напомняне:''' Не е въведено кратко описание на промените. При повторно натискане на бутона „Съхраняване“, редакцията ще бъде съхранена без резюме.",
        "missingcommenttext": "По-долу въведете вашето съобщение.",
-       "missingcommentheader": "<strong>Напомняне:</strong> Не е въведено заглавие на коментара.\nПри повторно натискане на \"$1\", редакцията ще бъде записана без такова.",
+       "missingcommentheader": "<strong>Напомняне:</strong> Не е въведено заглавие на коментара.\nПри повторно натискане на „$1“, редакцията ще бъде записана без такова.",
        "summary-preview": "Предварителен преглед на резюмето:",
        "subject-preview": "Предварителен преглед на заглавието:",
        "previewerrortext": "Възникна грешка при опита за преглед на промените.",
        "previewconflict": "Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.",
        "session_fail_preview": "За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия.\n\nМоже би сте излезли от системата. <strong>Моля, уверете се, че сте влезли в профила си и опитайте отново.</strong>\nАко все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново, също така проверете дали браузърът ви позволява бисквитки от този сайт.",
        "session_fail_preview_html": "За съжаление редакцията ви не беше записана поради загуба на данните за текущата сесия.\n\n<em>Тъй като {{SITENAME}} приема обикновен HTML, предварителният преглед е скрит като предпазна мярка срещу атаки чрез JavaScript.</em>\n\n<strong>Ако това е обикновен опит за редактиране, моля опитайте отново.</strong>\nАко все още не сработва, пробвайте да [[Special:UserLogout|излезете]] и влезете отново, и се уверете, че браузъра ви приема бисквитки от този сайт.",
-       "token_suffix_mismatch": "'''Редакцията ви беше отхвърлена, защото браузърът ви е развалил пунктуационните знаци в редакционната отметка. Евентуалното съхранение би унищожило съдържанието на страницата. Понякога това се случва при използването на грешно работещи анонимни междинни сървъри.'''",
+       "token_suffix_mismatch": "<strong>Редакцията ви беше отхвърлена, защото браузърът ви е развалил пунктуационните знаци в редакционната отметка.</strong>\nРедакцията беше отхвърлена с цел предотвратяване унищожаването на текста на страницата. \nПонякога това се случва при използването на грешно работещи анонимни междинни сървъри.",
        "edit_form_incomplete": "<strong>Някои части от формуляра за редактиране не достигнаха до сървъра; проверете дали редакциите ви са непокътнати и опитайте отново.</strong>",
        "editing": "Редактиране на „$1“",
        "creating": "Създаване на $1",
        "yourtext": "Вашият текст",
        "storedversion": "Съхранена версия",
        "nonunicodebrowser": "'''ВНИМАНИЕ: Браузърът ви не поддържа Уникод. За да можете спокойно да редактирате страници, всички знаци, невключени в ASCII-таблицата, ще бъдат заменени с шестнадесетични кодове.'''",
-       "editingold": "'''ВНИМАНИЕ: Редактирате остаряла версия на страницата.\nАко я съхраните, всякакви промени, направени след тази версия, ще бъдат изгубени.'''",
+       "editingold": "<strong>Внимание: Редактирате остаряла версия на страницата.</strong>\nАко я съхраните, всякакви промени, направени след тази версия, ще бъдат изгубени.",
        "yourdiff": "Разлики",
        "copyrightwarning": "Обърнете внимание, че всички приноси към {{SITENAME}} се публикуват при условията на $2 (за подробности вижте $1).\nАко не сте съгласни вашата писмена работа да бъде променяна и разпространявана без ограничения, не я публикувайте.<br />\n\nСъщо потвърждавате, че '''вие''' сте написали материала или сте използвали '''свободни ресурси''' — <em>обществено достояние</em> или друг свободен източник.\nАко сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.\n\n<div style=\"font-variant:small-caps\">'''Не публикувайте произведения с авторски права без разрешение!'''</div>",
        "copyrightwarning2": "Обърнете внимание, че всички приноси към {{SITENAME}} могат да бъдат редактирани, променяни или премахвани от останалите сътрудници.\nАко не сте съгласни вашата писмена работа да бъде променяна без ограничения, не я публикувайте.<br />\nСъщо потвърждавате, че '''вие''' сте написали материала или сте използвали '''свободни ресурси''' — <em>обществено достояние</em> или друг свободен източник (за подробности вижте $1).\nАко сте ползвали чужди материали, за които имате разрешение, непременно посочете източника.\n\n<div style=\"font-variant:small-caps\">'''Не публикувайте произведения с авторски права без разрешение!'''</div>",
-       "longpageerror": "'''ГРЕШКА: Изпратеният текст е с големина {{PLURAL:$1|един килобайт|$1 килобайта}}, което надвишава позволения максимум от {{PLURAL:$2|един килобайт|$2 килобайта}}.'''\nПоради тази причина той не може да бъде съхранен.",
+       "longpageerror": "<strong>Грешка: Изпратеният текст е с големина {{PLURAL:$1|един килобайт|$1 килобайта}}, което надвишава позволения максимум от {{PLURAL:$2|един килобайт|$2 килобайта}}.</strong>\nПоради тази причина той не може да бъде съхранен.",
        "readonlywarning": "<strong>ВНИМАНИЕ: Базата данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.</strong>\n\nАко желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.\n\nСистемният администратор, който е затворил базата данни, е посочил следната причина: $1",
        "protectedpagewarning": "'''Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.'''\nЗа справка по-долу е показан последният запис от дневниците.",
        "semiprotectedpagewarning": "'''Забележка:''' Тази страница е защитена и само регистрирани потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
        "cascadeprotectedwarning": "<strong>Внимание:</strong> Страницата е защитена, като само потребители със [[Special:ListGroupRights|нужните права]] могат да я редактират, тъй като е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
-       "titleprotectedwarning": "'''Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.'''\nЗа справка по-долу е показан последният запис от дневниците.",
+       "titleprotectedwarning": "<strong>Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.</strong>\nЗа справка по-долу е показан последният запис от дневниците.",
        "templatesused": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} на страницата:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в предварителния преглед:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в този раздел:",
        "log-fulllog": "Преглеждане на пълния дневник",
        "edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.",
        "edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
-       "edit-conflict": "РазлиÑ\87на Ñ\80едакÑ\86иÑ\8f",
+       "edit-conflict": "Ð\9aонÑ\84ликÑ\82 Ð¿Ñ\80и Ñ\80едакÑ\82иÑ\80анеÑ\82о.",
        "edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.",
        "postedit-confirmation-created": "Страницата е създадена.",
        "postedit-confirmation-restored": "Страницата е възстановена.",
        "content-failed-to-parse": "Неуспех при анализиране на съдържанието от тип $2 за модела $1: $3",
        "invalid-content-data": "Невалидни данни за съдържание",
        "content-not-allowed-here": "\nНа страницата [[$2]] не е позволено използването на $1",
-       "editwarning-warning": "Ако излезете от тази страница, може да загубите всички несъхранени промени, които сте направили. \nАко сте влезли в системата, можете да изключите това предупреждение чрез менюто \"Редактиране\" в личните ви настройки.",
+       "editwarning-warning": "Ако излезете от тази страница, може да загубите всички несъхранени промени, които сте направили.\nАко сте влезли в системата, можете да изключите това предупреждение чрез менюто „{{int:prefs-editing}}“ в личните ви настройки.",
        "editpage-invalidcontentmodel-title": "Форматът на съдържанието не се поддържа",
        "editpage-notsupportedcontentformat-title": "Форматът на съдържанието не се поддържа",
        "content-model-wikitext": "уикитекст",
        "content-model-css": "CSS",
        "content-json-empty-object": "Празен обект",
        "content-json-empty-array": "Празен масив",
-       "duplicate-args-category": "СÑ\82Ñ\80аниÑ\86и, ÐºÐ¾Ð¸Ñ\82о Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ð¿Ð¾Ð²Ñ\82аÑ\80Ñ\8fÑ\89и Ñ\81е Ð°Ñ\80гÑ\83менÑ\82и Ð² Ð¿Ð¾викванията на шаблона",
-       "duplicate-args-category-desc": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ñ\88аблонни Ð¿Ð¾Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ\8f, ÐºÐ¾Ð¸Ñ\82о Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ð¿Ð¾Ð²Ñ\82аÑ\80Ñ\8fÑ\89и Ñ\81е Ð°Ñ\80гÑ\83менÑ\82и, ÐºÐ°Ñ\82о Ð½Ð°Ð¿Ñ\80имеÑ\80 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> or <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
-       "expensive-parserfunction-warning": "Внимание: Тази страница прекалено много пъти използва ресурсоемки парсерни функции.\n\nВ момента има {{PLURAL:$1|$1 обръщение|$1 обръщения}} към такива функции, а трябва да {{PLURAL:$1|е|са}} по-малко от $2.",
-       "expensive-parserfunction-category": "СÑ\82Ñ\80аниÑ\86и, ÐºÐ¾Ð¸Ñ\82о Ð¿Ñ\80екалено Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ñ\8aÑ\82и Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81оемки Ð¿Ð°Ñ\80Ñ\81еÑ\80ни функции",
-       "post-expand-template-inclusion-warning": "Внимание: Размерът за включване на този шаблон е твърде голям.\nНякои шаблони няма да бъдат включени.",
-       "post-expand-template-inclusion-category": "Страници, съдържащи шаблони с превишени размери на включеното съдържание",
-       "post-expand-template-argument-warning": "Внимание: Тази страница съдържа поне един аргумент на шаблон, който има твърде голям размер при разгръщане. Тези аргументи бяха пропуснати.",
+       "duplicate-args-category": "СÑ\82Ñ\80аниÑ\86и, ÐºÐ¾Ð¸Ñ\82о Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ð¿Ð¾Ð²Ñ\82аÑ\80Ñ\8fÑ\89и Ñ\81е Ð°Ñ\80гÑ\83менÑ\82и Ð² Ð¸Ð·викванията на шаблона",
+       "duplicate-args-category-desc": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ñ\88аблонни Ð¸Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ\8f, ÐºÐ¾Ð¸Ñ\82о Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ð¿Ð¾Ð²Ñ\82аÑ\80Ñ\8fÑ\89и Ñ\81е Ð°Ñ\80гÑ\83менÑ\82и, ÐºÐ°Ñ\82о Ð½Ð°Ð¿Ñ\80имеÑ\80 <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> Ð¸Ð»Ð¸ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>Внимание:</strong> Тази страница прави твърде много ресурсоемки извиквания на анализиращи функции.\n\nВ момента има {{PLURAL:$1|$1 обръщение|$1 обръщения}} към такива функции, а трябва да {{PLURAL:$1|е|са}} по-малко от $2.",
+       "expensive-parserfunction-category": "СÑ\82Ñ\80аниÑ\86и, ÐºÐ¾Ð¸Ñ\82о Ð¿Ñ\80екалено Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ñ\8aÑ\82и Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ\82 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81оемки Ð°Ð½Ð°Ð»Ð¸Ð·Ð¸Ñ\80аÑ\89и функции",
+       "post-expand-template-inclusion-warning": "<strong>Внимание:</strong> Размерът за включване на този шаблон е твърде голям.\nНякои шаблони няма да бъдат включени.",
+       "post-expand-template-inclusion-category": "Страници с превишен допустим размер на включените шаблони",
+       "post-expand-template-argument-warning": "<strong>Внимание:</strong> Тази страница съдържа поне един аргумент на шаблон, който има твърде голям размер при разгръщане.\nТези аргументи бяха пропуснати.",
        "post-expand-template-argument-category": "Страници, съдържащи шаблони с пропуснати аргументи",
        "parser-template-loop-warning": "Открито зацикляне на шаблон: [[$1]]",
        "template-loop-category": "Страници със зацикляне в шаблона",
-       "template-loop-category-desc": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ð·Ð°Ñ\86иклÑ\8fне Ð² Ñ\88аблона, Ñ\82.е. Ñ\88аблон, ÐºÐ¾Ð¹Ñ\82о Ñ\80екÑ\83Ñ\80Ñ\81ивно Ñ\81е Ñ\81амоповиква.",
+       "template-loop-category-desc": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ð·Ð°Ñ\86иклÑ\8fне Ð² Ñ\88аблона, Ñ\82.е. Ñ\88аблон, ÐºÐ¾Ð¹Ñ\82о Ñ\80екÑ\83Ñ\80Ñ\81ивно Ñ\81е Ñ\81амоизвиква.",
        "parser-template-recursion-depth-warning": "Надвишен лимит на дълбочината при шаблонна рекурсия ($1)",
        "language-converter-depth-warning": "Надвишени са възможностите за автоматичен превод ($1)",
        "node-count-exceeded-category": "Страници, където е превишен възел-граф",
        "expansion-depth-exceeded-warning": "Страницата е превишила разрешената дълбочина на разгръщане",
        "parser-unstrip-loop-warning": "Открито е ''unstrip'' зацикляне",
        "parser-unstrip-recursion-limit": "''Unstrip'' лимита на рекурсия превишава ($1)",
-       "undo-success": "Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.",
+       "undo-success": "Редакцията може да бъде върната.\nПрегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.",
        "undo-failure": "Редакцията не може да бъде върната поради конфликтни междинни редакции.",
        "undo-norev": "Редакцията не може да бъде върната, тъй като не съществува или е била изтрита.",
        "undo-nochange": "Тази редакция изглежда вече е отменена.",
        "undo-summary": "Премахната редакция $1 на [[Special:Contributions/$2|$2]] ([[User talk:$2|беседа]])",
        "undo-summary-username-hidden": "Отмяна на редакция $1 от скрит потребител",
-       "cantcreateaccount-text": "[[User:$3|Потребител:$3]] е блокирал(а) създаването на сметки от този IP-адрес ('''$1''').\n\nПричината, изложена от $3, е ''$2''",
+       "cantcreateaccount-text": "[[User:$3|Потребител:$3]] е блокирал(а) създаването на сметки от този IP-адрес (<strong>$1</strong>).\n\nПричината, изложена от $3, е <em>$2</em>",
        "viewpagelogs": "Преглед на извършените административни действия по страницата",
        "nohistory": "Няма редакционна история за тази страница.",
        "currentrev": "Текуща версия",
        "history-feed-title": "Редакционна история",
        "history-feed-description": "Редакционна история на страницата в {{SITENAME}}",
        "history-feed-item-nocomment": "$1 в $2",
-       "history-feed-empty": "Исканата страница не съществува — може да е била изтрита или преименувана. Опитайте да [[Special:Search|потърсите]] нови страници, които биха могли да са ви полезни.",
+       "history-feed-empty": "Исканата страница не съществува.\nМоже да е била изтрита или преименувана.\nОпитайте да [[Special:Search|потърсите]] нови страници, които биха могли да са ви полезни.",
        "history-edit-tags": "Редактиране етикетите на избраните редакции",
        "rev-deleted-comment": "(резюмето е премахнато)",
        "rev-deleted-user": "(името на автора е изтрито)",
        "right-override-export-depth": "Изнасяне на страници, включително свързаните с тях в дълбочина до пето ниво",
        "right-sendemail": "Изпращане на е-писма до другите потребители",
        "grant-group-email": "Изпращане на е-писмо",
+       "grant-group-administration": "Извършване на административни действия",
        "grant-blockusers": "Блокиране и отблокиране на потребители",
        "grant-createaccount": "Създаване на сметки",
        "grant-createeditmovepage": "Създаване, редактиране и преместване на страници",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вижте също [[Special:NewPages|списъка с нови страници]])",
        "recentchanges-submit": "Покажи",
+       "rcfilters-activefilters": "Активни филтри",
        "rcfilters-savedqueries-defaultlabel": "Съхранени филтри",
        "rcfilters-savedqueries-rename": "Преименуване",
        "rcfilters-savedqueries-setdefault": "Съхраняване по подразбиране",
-       "rcfilters-savedqueries-unsetdefault": "Ð\9eÑ\82мÑ\8fна Ð½Ð° Ñ\81Ñ\8aÑ\85Ñ\80анÑ\8fванеÑ\82о по подразбиране",
+       "rcfilters-savedqueries-unsetdefault": "Ð\9fÑ\80емаÑ\85ване по подразбиране",
        "rcfilters-savedqueries-remove": "Премахване",
        "rcfilters-savedqueries-new-name-label": "Име",
+       "rcfilters-savedqueries-apply-label": "Създаване на бърза връзка",
        "rcfilters-savedqueries-cancel-label": "Отказ",
-       "rcfilters-restore-default-filters": "Възстановяване на филтри по подразбиране",
+       "rcfilters-savedqueries-add-new-title": "Съхраняване на филтрите като бърза връзка",
+       "rcfilters-restore-default-filters": "Възстановяване на филтрите по подразбиране",
        "rcfilters-clear-all-filters": "Изчистване на всички филтри",
+       "rcfilters-search-placeholder": "Филтриране на последните промени (изберете или започнете да въвеждате)",
+       "rcfilters-invalid-filter": "Невалиден филтър",
+       "rcfilters-empty-filter": "Няма активни филтри. Показани са всички редакции.",
        "rcfilters-filterlist-title": "Филтри",
        "rcfilters-filterlist-whatsthis": "Какво е това?",
+       "rcfilters-filterlist-feedbacklink": "Оставете коментар за новите (бета) филтри",
+       "rcfilters-highlightbutton-title": "Отбелязване на резултатите",
        "rcfilters-highlightmenu-title": "Изберете цвят",
+       "rcfilters-highlightmenu-help": "Изберете цвят за отбелязване на свойството",
        "rcfilters-filterlist-noresults": "Не са намерени филтри",
        "rcfilters-filtergroup-registration": "Регистрация на потребители",
        "rcfilters-filter-registered-label": "Регистрация",
+       "rcfilters-filter-registered-description": "Влезли в системата редактори.",
        "rcfilters-filter-unregistered-label": "Нерегистрирани",
+       "rcfilters-filter-unregistered-description": "Редактори, които не са влезли в системата.",
+       "rcfilters-filtergroup-authorship": "Авторство на редакциите",
        "rcfilters-filter-editsbyself-label": "Ваши редакции",
        "rcfilters-filter-editsbyself-description": "Ваши редакции.",
        "rcfilters-filter-editsbyother-label": "Чужди редакции",
+       "rcfilters-filter-editsbyother-description": "Всички редакции с изключение на вашите собствени.",
+       "rcfilters-filtergroup-userExpLevel": "Ниво на опита (само за регистрирани потребители)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новодошли",
+       "rcfilters-filter-user-experience-level-newcomer-description": "По-малко от 10 редакции и 5 дни активност.",
+       "rcfilters-filter-user-experience-level-learner-label": "Учещи се",
+       "rcfilters-filter-user-experience-level-learner-description": "Повече опит от „Новодошли“, но по-малко от „Опитни потребители“.",
        "rcfilters-filter-user-experience-level-experienced-label": "Опитни потребители",
+       "rcfilters-filter-user-experience-level-experienced-description": "Повече от 30 дни активност и 500 редакции.",
        "rcfilters-filtergroup-automated": "Автоматизирани приноси",
        "rcfilters-filter-bots-label": "Бот",
        "rcfilters-filter-bots-description": "Редакции, направени с помощта на автоматизирани инструменти.",
        "rcfilters-filter-unpatrolled-description": "Редакции, неотбелязани като патрулирани.",
        "rcfilters-filtergroup-significance": "Значимост",
        "rcfilters-filter-minor-label": "Малки промени",
+       "rcfilters-filter-minor-description": "Редакции, които не са отбелязани като малки промени.",
        "rcfilters-filter-major-label": "Обикновени редакции",
+       "rcfilters-filter-major-description": "Редакции, които не са отбелязани като малки промени.",
+       "rcfilters-filtergroup-watchlist": "Страници от списъка за наблюдение",
+       "rcfilters-filter-watchlist-watched-label": "В списъка за наблюдение",
+       "rcfilters-filter-watchlist-watched-description": "Промени в страници от списъка за наблюдение.",
+       "rcfilters-filter-watchlist-watchednew-label": "Нови промени в списъка за наблюдение",
+       "rcfilters-filter-watchlist-watchednew-description": "Промени в страниците от списъка за наблюдение, които не сте посетили от извършването им.",
+       "rcfilters-filter-watchlist-notwatched-label": "Извън списъка за наблюдение",
+       "rcfilters-filter-watchlist-notwatched-description": "Всички, освен промените в страници от списъка за наблюдение.",
        "rcfilters-filtergroup-changetype": "Вид на промяната",
        "rcfilters-filter-pageedits-label": "Редакции на страници",
+       "rcfilters-filter-pageedits-description": "Редакции на съдържанието, беседи, описания на категории...",
        "rcfilters-filter-newpages-label": "Създавания на страници",
+       "rcfilters-filter-newpages-description": "Редакции, чрез които се създават нови страници.",
        "rcfilters-filter-categorization-label": "Промяна на категории",
+       "rcfilters-filter-categorization-description": "Записи от добавяне или премахване на страници от категории.",
+       "rcfilters-filter-logactions-label": "Записани в дневника действия",
+       "rcfilters-filter-logactions-description": "Административни действия, създавания на сметки, изтривания на страници, качвания...",
+       "rcfilters-filtergroup-lastRevision": "Текуща версия",
+       "rcfilters-filter-lastrevision-label": "Текуща версия",
+       "rcfilters-filter-lastrevision-description": "Последната промяна на страница.",
+       "rcfilters-filter-previousrevision-label": "По-ранни версии",
+       "rcfilters-filter-previousrevision-description": "Всички редакции, които не са последните на страница.",
        "rcnotefrom": "{{PLURAL:$5|Дадена е промяната|Дадени са промените}} от <strong>$3, $4</strong> (до <strong>$1</strong> показани).",
        "rclistfrom": "Показване на промени, като се започва от $3 $2",
        "rcshowhideminor": "$1 на малки промени",
        "blocklog-showsuppresslog": "Потребителят е бил блокиран и прикриван в миналото.\nЗа справка по-долу е дадено извлечение от дневника на прикриванията:",
        "blocklogentry": "блокира [[$1]] със срок на изтичане $2 $3",
        "reblock-logentry": "промени параметрите на блокирането на [[$1]] със срок на изтичане $2 $3",
-       "blocklogtext": "Тази страница съдържа дневник на блокиранията и отблокиранията.\nАвтоматично блокираните IP-адреси не са показани.\nВижте [[Special:BlockList|списъка на блокираните IP-адреси]] за текущото състояние на блокиранията.",
+       "blocklogtext": "Тази страница съдържа дневник на блокиранията и отблокиранията, извършени от потребителя.\nАвтоматично блокираните IP-адреси не са показани.\nВижте [[Special:BlockList|списъка на блокираните потребители]] за активните към момента блокирания.",
        "unblocklogentry": "отблокира $1",
        "block-log-flags-anononly": "само анонимни потребители",
        "block-log-flags-nocreate": "създаването на сметки е изключено",
        "movepage-moved-noredirect": "Създаването на пренасочване беше спряно.",
        "articleexists": "Вече съществува страница с това име или името, което сте избрали, е невалидно. Изберете друго име.",
        "cantmove-titleprotected": "Страницата не може да бъде преместена под новото заглавие, тъй като то е защитено от създаване",
-       "movetalk": "Ð\9fÑ\80емеÑ\81Ñ\82ване Ð¸ Ð½Ð° Ð´Ð¸Ñ\81кÑ\83Ñ\81ионнаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80иложимо.",
+       "movetalk": "Ð\9fÑ\80емеÑ\81Ñ\82ване Ð¸ Ð½Ð° Ð±ÐµÑ\81едаÑ\82а, Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80иложимо",
        "move-subpages": "Преместване на всички подстраници (до $1)",
        "move-talk-subpages": "Преместване на всички подстраници на беседата (до $1)",
        "movepage-page-exists": "Страницата $1 вече съществува и няма да бъде автоматично презаписана.",
        "authmanager-realname-help": "Истинско име на потребителя",
        "authmanager-provider-temporarypassword": "Временна парола",
        "authprovider-resetpass-skip-label": "Пропусни",
+       "authform-notoken": "Липсва маркер",
        "specialpage-securitylevel-not-allowed-title": "Не е позволено",
        "cannotauth-not-allowed-title": "Достъпът е отказан",
        "cannotauth-not-allowed": "Не ви е позволено да използвате тази страница",
index ebeb2e8..d94a7da 100644 (file)
        "right-undelete": "हटावल पन्ना वापस ले आईं",
        "right-protect": "सुरक्षा स्तर बदलीं आ कास्केड-सुरक्षित पन्ना के सम्पादन करीं",
        "right-unwatchedpages": "ध्यानसूची में जवन पन्ना नइखे ओकर सूची देखीं",
+       "grant-blockusers": "प्रयोगकर्ता लोग पर रोक लगाईं आ रोक हटाईं",
+       "grant-createaccount": "खाता बनाईं",
+       "grant-createeditmovepage": "पन्ना बनाईं, संपादित करीं आ स्थानांतरण करीं",
+       "grant-editmyoptions": "आपन पसंदीदा सेटिंग संपादित करीं",
+       "grant-editmywatchlist": "आपन धियानसूची संपादित करीं",
+       "grant-editpage": "पहिले से मौजूद पन्ना संपादित करीं",
+       "grant-editprotected": "सुरक्षित पन्ना संपादित करीं",
+       "grant-highvolume": "भारी-मात्रा में संपादन",
+       "grant-oversight": "प्रयोगकर्ता छिपाईं आ रिवीजन दबा देईं",
+       "grant-patrol": "पन्ना पर बदलाव सभ के गश्त करीं",
+       "grant-privateinfo": "निजी जानकारी तक पहुँचीं",
+       "grant-protect": "पन्ना सुरक्षित आ बिनासुरक्षित करीं",
+       "grant-rollback": "पन्ना पर बदलाव सभ के रोलबैक करीं",
        "newuserlogpage": "खाता बनवले के लॉग",
        "newuserlogpagetext": "ई खाता निर्माण के लॉग बा",
        "rightslog": "सदस्य अधिकार लॉग",
index 90bb801..d56a376 100644 (file)
        "permalink": "Trajni link",
        "print": "Štampaj",
        "view": "Pogled",
-       "view-foreign": "Vidi na $1",
+       "view-foreign": "Vidi na {{GRAMMAR:dativ|$1}}",
        "edit": "Uredi",
        "edit-local": "Uredi lokalni opis",
        "create": "Napravi",
        "rcfilters-savedqueries-new-name-label": "Naziv",
        "rcfilters-savedqueries-apply-label": "Napravi brzi link",
        "rcfilters-savedqueries-cancel-label": "Otkaži",
+       "rcfilters-savedqueries-add-new-title": "Sačuvaj filtere kao brzi link",
        "rcfilters-restore-default-filters": "Vrati predodređene filtere",
        "rcfilters-clear-all-filters": "Ukloni sve filtere",
        "rcfilters-search-placeholder": "Filtriraj nedavne izmjene (prelistajte mogućnosti ili počnite kucati)",
        "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|stranicu, koja ima|stranice, koje imaju}} uključenu prenosivu zaštitu.\nPromjene stepena zaštite ove stranice neće utjecati na prenosnu zaštitu.",
        "protect-default": "Dopušteno svim korisnicima",
        "protect-fallback": "Dozvolite samo korisnicima sa \"$1\" ovlastima/privilegijama",
-       "protect-level-autoconfirmed": "dopušteno samo automatski potvrđenim korisnicima",
-       "protect-level-sysop": "dopušteno samo administratorima",
+       "protect-level-autoconfirmed": "Dopušteno samo automatski potvrđenim korisnicima",
+       "protect-level-sysop": "Dopušteno samo administratorima",
        "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "prenosna zaštita",
        "protect-expiring": "ističe $1 (UTC)",
        "minimum-size": "Najmanja veličina",
        "maximum-size": "Najveća veličina:",
        "pagesize": "(bajta)",
-       "restriction-edit": "uređivanje",
-       "restriction-move": "premještanje",
+       "restriction-edit": "Uređivanje",
+       "restriction-move": "Premještanje",
        "restriction-create": "pravljenje",
        "restriction-upload": "Postavljanje",
        "restriction-level-sysop": "potpuno zaštićeno",
        "rawhtml-notallowed": "&lt;html&gt; oznake ne mogu se koristiti van normalnih stranica.",
        "gotointerwiki": "Napuštate {{GRAMMAR:akuzativ|{{SITENAME}}}}",
        "gotointerwiki-invalid": "Navedeni naslov nije ispravan.",
-       "gotointerwiki-external": "Napuštate {{GRAMMAR:akuzativ|{{SITENAME}}}} da biste posjetili zasebni veb-sajt [[$2]].\n\n[$1 Kliknite ovdje da biste otišli na $1].",
+       "gotointerwiki-external": "Napuštate {{GRAMMAR:akuzativ|{{SITENAME}}}} da biste posjetili zasebni veb-sajt [[$2]].\n\n<strong>[$1 Idi na $1]</strong>",
        "undelete-cantedit": "Ne možete vratiti ovu stranicu jer Vam nije dozvoljeno da je uređujete."
 }
index b252b71..e7a9121 100644 (file)
        "pageid": "Stránka s ID $1",
        "rawhtml-notallowed": "Značky &lt;html&gt; nelze používat mimo běžné stránky.",
        "gotointerwiki": "Opustit {{GENDER:4sg|{{SITENAME}}}}",
-       "gotointerwiki-invalid": "Zadaný název byl neplatný.",
-       "gotointerwiki-external": "Chystáte se opustit {{GRAMMAR:4sg|{{SITENAME}}}} a navštívit [[$2]], což je jiná webová stránka.\n\n[$1 Kliknutím zde budete pokračovat na $1].",
+       "gotointerwiki-invalid": "Zadaný název je neplatný.",
+       "gotointerwiki-external": "Chystáte se opustit {{GRAMMAR:4sg|{{SITENAME}}}} a navštívit [[$2]], což je jiná webová stránka.\n\n'''[$1 Pokračovat na $1].'''",
        "undelete-cantedit": "Tuto stránku nemůžete obnovit, protože ji nejste oprávněni editovat.",
        "undelete-cantcreate": "Tuto stránku nemůžete obnovit, protože stránka s tímto názvem neexistuje a vy ji nejste oprávněni vytvořit."
 }
index 75db8c8..9c725c1 100644 (file)
@@ -60,7 +60,8 @@
                        "Nemo bis",
                        "Anders Feder",
                        "Jhertel",
-                       "IBDJ"
+                       "IBDJ",
+                       "SimmeD"
                ]
        },
        "tog-underline": "Understreg henvisninger:",
index f846874..6806e36 100644 (file)
        "pageid": "Seitenkennung $1",
        "rawhtml-notallowed": "&lt;html&gt;-Tags können nicht außerhalb von normalen Seiten verwendet werden.",
        "gotointerwiki": "{{SITENAME}} verlassen",
-       "gotointerwiki-invalid": "Der angegebene Titel war ungültig.",
-       "gotointerwiki-external": "Du bist dabei, {{SITENAME}} zu verlassen, um [[$2]] zu besuchen, was eine externe Website ist.\n\n[$1 Hier klicken, um auf $1 fortzufahren].",
+       "gotointerwiki-invalid": "Der angegebene Titel ist ungültig.",
+       "gotointerwiki-external": "Du bist dabei, {{SITENAME}} zu verlassen, um [[$2]] zu besuchen, was eine externe Website ist.\n\n'''[$1 Auf $1 fortfahren]'''",
        "undelete-cantedit": "Du kannst diese Seite nicht wiederherstellen, da du nicht berechtigt bist, diese Seite zu bearbeiten.",
        "undelete-cantcreate": "Du kannst diese Seite nicht wiederherstellen, da es keine vorhandene Seite mit diesem Namen gibt und du nicht berechtigt bist, diese Seite zu erstellen."
 }
index 55f89ce..9994f62 100644 (file)
@@ -98,7 +98,7 @@
        "fri": "Yen",
        "sat": "Şem",
        "january": "Çele",
-       "february": "Sıbat",
+       "february": "Gucige",
        "march": "Adar",
        "april": "Nisane",
        "may_long": "Gulan",
index fcdbfdc..cc60432 100644 (file)
        "pageid": "page ID $1",
        "rawhtml-notallowed": "&lt;html&gt; tags cannot be used outside of normal pages.",
        "gotointerwiki": "Leaving {{SITENAME}}",
-       "gotointerwiki-invalid": "The specified title was invalid.",
-       "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]] which is a separate website.\n\n[$1 Click here to continue on to $1].",
+       "gotointerwiki-invalid": "The specified title is invalid.",
+       "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]], which is a separate website.\n\n'''[$1 Continue to $1]'''",
        "undelete-cantedit": "You cannot undelete this page as you are not allowed to edit this page.",
        "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page."
 }
index 947cc8d..598d953 100644 (file)
        "logentry-block-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueó}} a {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
-       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueó a}} {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importó}} $3 subiendo un archivo",
        "logentry-import-upload-details": "$1 {{GENDER:$2|importó}} $3 subiendo un archivo ($4 {{PLURAL:$4|revisión|revisiones}})",
index 67c9af4..dc08992 100644 (file)
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Näytä",
        "rcfilters-activefilters": "Aktiiviset suodattimet",
+       "rcfilters-quickfilters": "Pikalinkit",
+       "rcfilters-savedqueries-defaultlabel": "Tallennetut suodattimet",
+       "rcfilters-savedqueries-rename": "Nimeä uudelleen",
+       "rcfilters-savedqueries-setdefault": "Aseta oletukseksi",
+       "rcfilters-savedqueries-remove": "Poista",
+       "rcfilters-savedqueries-new-name-label": "Nimi",
+       "rcfilters-savedqueries-apply-label": "Luo pikalinkki",
+       "rcfilters-savedqueries-cancel-label": "Peru",
+       "rcfilters-savedqueries-add-new-title": "Tallenna suodattimet pikalinkkinä",
        "rcfilters-restore-default-filters": "Palauta oletussuodattimet",
        "rcfilters-clear-all-filters": "Tyhjennä kaikki suodattimet",
        "rcfilters-search-placeholder": "Suodata tuoreita muutoksia (selaa tai ala kirjoittaa)",
        "mw-widgets-titleinput-description-redirect": "ohjaus kohteeseen $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Lisää luokka...",
        "mw-widgets-usersmultiselect-placeholder": "Lisää enemmän...",
+       "date-range-from": "Lähtien:",
+       "date-range-to": "Päättyen:",
        "sessionmanager-tie": "!!FYZZ!!Cannot combine multiple request authentication types: $1.",
        "sessionprovider-generic": "$1 istuntoa",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "istuntoja, joissa on evästeet käytössä",
index b8a79d7..f06dc25 100644 (file)
        "confirmemail_subject": "Confirmation d’adresse de courriel pour {{SITENAME}}",
        "confirmemail_body": "Quelqu’un, probablement vous, à partir de l’adresse IP $1,\na créé un compte « $2 » avec cette adresse de courriel sur le site {{SITENAME}}.\n\nPour confirmer que ce compte vous appartient vraiment et afin\nd’activer les fonctions de messagerie sur {{SITENAME}},\nveuillez suivre ce lien dans votre navigateur :\n\n$3\n\nSi vous n’avez *pas* créé ce compte, suivez le lien ci-dessous \npour annuler la confirmation de votre adresse courriel :\n\n$5\n\nCe code de confirmation expirera le $4.",
        "confirmemail_body_changed": "Quelqu’un, probablement vous, à partir de l’adresse IP $1,\na modifié l’adresse de courriel associée au compte « $2 » de {{SITENAME}}\nen cette adresse.\n\nPour confirmer que ce compte vous appartient vraiment et afin\nde réactiver les fonctions de messagerie sur {{SITENAME}},\nveuillez suivre ce lien dans votre navigateur :\n\n$3\n\nSi ce compte ne vous appartient *pas*, n’ouvrez pas ce lien ;\nvous pouvez suivre l’autre lien ci-dessous pour annuler la\nconfirmation de votre adresse courriel :\n\n$5\n\nCe code de confirmation expirera le $4.",
-       "confirmemail_body_set": "Quelqu’un, probablement vous, depuis l’adresse IP $1, a modifié l’adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.\n\nPour confirmer que ce compte vous appartient et réactiver les fonctions de courriel sur {{SITENAME}}, ouvrez ce lien dans votre navigateur Web :\n\n$3\n\nCe code de confirmation expirera le $4.\n\nSi le compte ne vous appartient *pas*, suivez plutôt ce lien pour annuler la confirmation de l’adresse de courriel :\n\n$5",
+       "confirmemail_body_set": "Quelqu’un, probablement vous, depuis l’adresse IP $1, a modifié l’adresse de courriel du compte « $2 » en celle-ci sur {{SITENAME}}.\n\nPour confirmer que ce compte vous appartient et réactiver les fonctions de courriel sur {{SITENAME}}, ouvrez ce lien dans votre navigateur Web :\n\n$3\n\nSi le compte ne vous appartient *pas*, suivez plutôt ce lien pour annuler la confirmation de l’adresse de courriel :\n\n$5\n\nCe code de confirmation expirera le $4.",
        "confirmemail_invalidated": "Confirmation de l’adresse courriel annulée",
        "invalidateemail": "Annuler la confirmation de l'adresse de courriel",
        "notificationemail_subject_changed": "L’adresse courriel enregistrée sur {{SITENAME}} a été changée",
        "unlinkaccounts": "Dissocier les comptes",
        "unlinkaccounts-success": "Le compte a été dissocié.",
        "authenticationdatachange-ignored": "Les modifications de données d’authentification n’ont pas été gérées. Peut-être aucun fournisseur n’a-t-il été configuré ?",
-       "userjsispublic": "Veuillez noter: les sous-pages JavaScript ne doivent pas contenir de données confidentielles parce qu'elles sont visibles des autres utilisateurs.",
+       "userjsispublic": "Veuillez noter : les sous-pages JavaScript ne doivent pas contenir de données confidentielles parce qu’elles sont visibles des autres utilisateurs.",
        "usercssispublic": "Veuillez noter: les sous-pages CSS ne doivent pas contenir de données confidentielles parce qu'elles sont visibles des autres utilisateurs.",
        "restrictionsfield-badip": "Adresse IP ou plage non valide : $1",
        "restrictionsfield-label": "Plages IP autorisées :",
        "rawhtml-notallowed": "Les balises &lt;html&gt; ne peuvent pas être utilisées en dehors des pages normales.",
        "gotointerwiki": "Quitter {{SITENAME}}",
        "gotointerwiki-invalid": "Le titre spécifié n’est pas valide.",
-       "gotointerwiki-external": "Vous allez quitter {{SITENAME}} pour visiter [[$2]], qui est un site web distinct.\n\n[$1 Cliquer ici pour continuer vers $1].",
+       "gotointerwiki-external": "Vous allez quitter {{SITENAME}} pour visiter [[$2]], qui est un site web distinct.\n\n'''[$1 Continuer vers $1]'''",
        "undelete-cantedit": "Vous ne pouvez pas annuler la suppression de cette page car vous n’êtes pas autorisé à la modifier.",
        "undelete-cantcreate": "Vous ne pouvez pas annuler la suppression de cette page car il n’existe pas de page avec ce nom, et vous n’êtes pas autorisé à la créer."
 }
index fac32b9..bf23318 100644 (file)
@@ -29,6 +29,7 @@
        "tog-watchdefault": "Salew feranert sidjen an datein leewen uun't uug behual",
        "tog-watchmoves": "Salew fersköwen sidjen an datein leewen uun't uug behual",
        "tog-watchdeletion": "Salew stregen sidjen an datein leewen uun't uug behual",
+       "tog-watchuploads": "Salew huuchschüürd datein leewen uun't uug behual",
        "tog-watchrollback": "Sidjen, diar ik turagsaat haa, uun't uug behual",
        "tog-minordefault": "Aanj feranrangen üs \"letjen\" kääntiakne",
        "tog-previewontop": "\"Iarst ans luke\" boowen faan't wönang tu bewerkin",
        "tagline": "Faan {{SITENAME}}",
        "help": "Halep",
        "search": "Schük",
+       "search-ignored-headings": " #<!-- Detdiar rä ei feranre --> <pre>\n# Auerskraften, diar bi't schüken ei beaachtet wurd.\n# Jodiar feranrangen wurd seekert, wan det sidj mä det auerskraft indeksiaret wurden as.\n# Dü könst det sidjenindeksiarang föörtji, wan dü en nul-edit maagest.\n# Syntax:\n#   * Ales, wat bääft en dobelkrüs („#“) stäänt, as en komentaar.\n#   * Arke rä, wat ei leesag as, as di akeroot tiitel, diar ei beaachtet woort.\nFutnuuten\nFerwisangen\nLuke uk diar\n #</pre> <!-- Detdiar rä ei feranre -->",
        "searchbutton": "Schük",
        "go": "Widjer",
        "searcharticle": "Sidj",
        "history": "Werjuunen",
        "history_short": "Ferluup",
+       "history_small": "Ferluup",
        "updatedmarker": "feranert sant man leetst beschük",
        "printableversion": "Ütjdrük maage",
        "permalink": "Permanent link",
        "talk": "Diskuschuun",
        "views": "Uunsichten",
        "toolbox": "Werktjüügen",
+       "tool-link-userrights": "{{GENDER:$1|Brükersköölen}} feranre",
+       "tool-link-userrights-readonly": "{{GENDER:$1|Brükersköölen}} beluke",
+       "tool-link-emailuser": "E-mail tu {{GENDER:$1|didiar brüker|detdiar brükerin}} schüür",
        "userpage": "Brükersidj uunwise",
        "projectpage": "Projektsidj wise",
        "imagepage": "Dateisidj uunwise",
        "virus-scanfailed": "scan ging skiaf (code $1)",
        "virus-unknownscanner": "Ünbekäänd wiirenscanner:",
        "logouttext": "'''Dü beest nü ufmeldet.'''\n\nEnkelt sidjen wise ferlicht noch uun, dat dü uunmeldet beest, so loong dü dan browser-cache ei leesag maaget heest.",
+       "cannotlogoutnow-title": "Ufmeldang hää ei loket",
+       "cannotlogoutnow-text": "Ufmeldin as ei mögelk, wan dü $1 brükst.",
        "welcomeuser": "Welkimen, $1!",
        "welcomecreation-msg": "Din brükerkonto as iinracht wurden.\nFerjid det ei, an aachte üüb din [[Special:Preferences|{{SITENAME}} iinstelangen]].",
        "yourname": "Brükernööm:",
        "createacct-yourpasswordagain-ph": "Du det paaswurd noch ans iin",
        "userlogin-remembermypassword": "Uunmeldet bliiw",
        "userlogin-signwithsecure": "Seeker ferbinjang brük",
+       "cannotlogin-title": "Uunmeldin as ei mögelk",
+       "cannotlogin-text": "Uunmeldin as ei mögelk.",
+       "cannotloginnow-title": "Uunmeldang hää ei loket",
+       "cannotloginnow-text": "Uunmeldin as ei mögelk, wan dü $1 brükst.",
+       "cannotcreateaccount-title": "Brükerkontos kön ei iinracht wurd",
+       "cannotcreateaccount-text": "Üüb detheer wiki kön nian brükerkontos iinracht wurd.",
        "yourdomainname": "Din domain:",
        "password-change-forbidden": "Üüb detheer wiki könst dü nian paaswurden feranre.",
        "externaldberror": "Deer läit en fäägel bai jü äkstärn autentifisiiring for, unti dü möist din äkstärn brükerkonto äi aktualisiire.",
        "login": "Uunmelde",
+       "login-security": "Preewe din identiteet",
        "nav-login-createaccount": "Melde di uun of skriiw di iin",
        "logout": "Ufmelde",
        "userlogout": "Ufmelde",
        "userlogin-resetpassword-link": "Paaswurd ferjiden?",
        "userlogin-helplink2": "Halep bi't uunmeldin",
        "userlogin-loggedin": "Du beest al üs {{GENDER:$1|$1}} uunmeldet.\nBrük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.",
+       "userlogin-reauth": "Dü skel di nei uunmelde, am tu preewein, dat dü {{GENDER:$1|$1}} beest.",
        "userlogin-createanother": "En ööder brükerkonto iinracht",
        "createacct-emailrequired": "E-mail adres",
        "createacct-emailoptional": "E-mail adres (optional)",
        "createacct-email-ph": "Du din e-mail adres iin",
        "createacct-another-email-ph": "E-Mail-adres uundu",
        "createaccountmail": "E-mail tu detdiar adres ferschüür mä en tidjwiis tufelag paaswurd",
+       "createaccountmail-help": "Koon brükt wurd, am för hoker ööders en brükerkonto iinturachten, san det paaswurd tu käänen.",
        "createacct-realname": "Rocht nööm (optional)",
        "createacct-reason": "Grünj",
        "createacct-reason-ph": "Huaram dü en ööder brükerkonto iinrachtst",
+       "createacct-reason-help": "Bööd uun't neiuunmeldangs-logbuk.",
        "createacct-submit": "Din brükerkonto iinracht",
        "createacct-another-submit": "Brükerkonto iinracht",
+       "createacct-continue-submit": "Brükerkontoiinrachtang widjer feer",
+       "createacct-another-continue-submit": "Brükerkontoiinrachtang widjer feer",
        "createacct-benefit-heading": "{{SITENAME}} woort faan lidj üs di maaget.",
        "createacct-benefit-body1": "{{PLURAL:$1|feranrang|feranrangen}}",
        "createacct-benefit-body2": "{{PLURAL:$1|sidj|sidjen}}",
        "nocookiesnew": "Det brükerkonto as iinracht wurden, oober dü beest ei uunmeldet.\n{{SITENAME}} brükt cookies för detdiar aktjuun.\nWees so gud an aktiwiare jo uun dan browser, an do melde di mä dan nei brükernööm an det nei paaswurd uun.",
        "nocookieslogin": "{{SITENAME}} brükt cookies för't uunmeldin faan brükern.\nDü heest cookies deaktiwiaret.\nWees so gud an aktiwiare jo uun dan browser, an do ferschük det noch ans.",
        "nocookiesfornew": "Det brükerkonto as ei iinracht wurden, auer wi ei witj, huar a dooten faan kem.\nÜüb dan kompjuuter skel cookies aktiwiaret wees. Do rep detheer sidj noch ans nei ap.",
+       "createacct-loginerror": "Det brükerkonto as iinracht wurden, oober dü küdst noch ei uunmeldet wurd. Wees so gud an  [[Special:UserLogin|melde di nü uun]].",
        "noname": "Dü skel en rochten brükernööm uundu.",
        "loginsuccesstitle": "Uunmeldet",
        "loginsuccess": "'''Dü beest nü üs „$1“ bi {{SITENAME}} uunmeldet.'''",
        "createacct-another-realname-tip": "Stäänt tu wool. Wan dü dan rochten nööm uundääst, koon hi mä din feranrangen ferbünjen wurd.",
        "pt-login": "Uunmelde",
        "pt-login-button": "Uunmelde",
+       "pt-login-continue-button": "Widjer uunmelde",
        "pt-createaccount": "Brükerkonto iinracht",
        "pt-userlogout": "Ufmelde",
        "php-mail-error-unknown": "Ünbekäänd feeler mä det funktjuun mail() faan PHP.",
        "changepassword-throttled": "Dü heest tufölsis fersoocht, di uuntumeldin.\nWees so gud an teew $1, iar dü det noch ans ferschükst.",
        "botpasswords": "Bot-paaswurden",
        "botpasswords-summary": "Mä <em>bot-paaswurden</em> koon üüb en brükerkonto auer't API tugreben wurd. A brükerrochten bi uunmeldang mä en bot-paaswurd san kört.\n\nWan dü ei witjst, huaram dü det du wel, skulst dü det uk ei du. Näämen fraaget di, en paaswurd iinturachten, an det do widjertudun.",
+       "botpasswords-disabled": "Bot-paaswurden san deaktiwiaret wurden.",
        "botpasswords-no-central-id": "Am bot-paaswurden tu brüken, skel dü bi en sentralisiaret brükerkonto uunmeldet wees.",
        "botpasswords-existing": "Bot-paaswurden",
        "botpasswords-createnew": "En nei bot-paaswurd maage",
        "botpasswords-updated-body": "Det bot-paaswurd för di bot \"$1\" faan di brüker \"$2\" as aktualisiaret wurden.",
        "botpasswords-deleted-title": "Bot-paaswurd as stregen wurden.",
        "botpasswords-deleted-body": "Det bot-paaswurd för di bot \"$1\" faan di brüker \"$2\" as stregen wurden.",
+       "botpasswords-newpassword": "Det nei paaswurd tu uunmeldin mä <strong>$1</strong> as <strong>$2</strong>. <em>Mark di det gud.</em><br>För ääler bots, huar di uunmeldenööm an di leeder brükernööm josalwen san, könst dü uk <strong>$3</strong> üs brükernööm an <strong>$4</strong> üs paaswurd brük.",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider as ei diar.",
+       "botpasswords-restriction-failed": "Mä detdiar bot-paaswurd könst dü di ei uunmelde.",
+       "botpasswords-invalid-name": "Didiar brükernööm hää nään bot-paaswurd-dialer („$1“).",
+       "botpasswords-not-exist": "Di brüker „$1“ hää nian bot-paaswurd mä di nööm „$2“.",
        "resetpass_forbidden": "Det paaswurd koon ei feranert wurd.",
+       "resetpass_forbidden-reason": "A paaswurden koon ei feranert wurd: $1",
        "resetpass-no-info": "Dü skel di uunmelde, am üüb det sidj tutugripen.",
        "resetpass-submit-loggedin": "Paaswurd feranre",
        "resetpass-submit-cancel": "Ufbreeg",
        "passwordreset-emailtext-user": "Di brüker $1 üüb {{SITENAME}} hää am brükerinformatsjuunen för {{SITENAME}} uunfraaget ($4). {{PLURAL:$3|Detdiar brükerkonto as|Jodiar brükerkontos san}} mä detdiar E-Mail-Adres ferbünjen:\n\n$2\n\n{{PLURAL:$3|Detheer tidjwiis paaswurd lääpt|Joheer tidjwiis paaswurden luup}} efter {{PLURAL:$5|ään dai|$5 daar}} uf. Dü skulst di uunmelde an en nei paaswurd iinracht. Wan hoker ööders detheer uunfraag steld hää of dü din ual paaswurd käänst, säärst dü niks widjer onernem. Melde di ianfach mä din ual paaswurd uun.",
        "passwordreset-emailelement": "Brükernööm: \n$1\n\nTidjwiis paaswurd: \n$2",
        "passwordreset-emailsentemail": "Diar as en E-Mail tu di onerwais, wan dü en adres uunden heest.",
+       "passwordreset-emailsentusername": "Wan diar en E-Mail-adres mä didiar brükernööm ferbünjen as, woort en E-Mail mä en nei paaswurd ferschüürd.",
+       "passwordreset-nocaller": "Diar skal en reper uunden wurd.",
+       "passwordreset-nosuchcaller": "Son reper jaft at ei: $1",
+       "passwordreset-ignored": "Det turagsaaten faan't paaswurd küd ei ferwerket wurd. Ferlicht as diar nään provider iinracht wurden?",
+       "passwordreset-invalidemail": "Detdiar E-Mail-adres docht niks",
        "changeemail": "Feranre of strik det E-Mail-adres",
        "changeemail-header": "Fal det formulaar ütj, wan dü din E-Mail-adres feranre wel. Wan dü nian adres uundu wel, läät det fial man leesag.",
        "changeemail-no-info": "Dü möist önjmälded weese am ju sid diräkt tu tu gripen.",
        "scarytranscludetoolong": "[URL as tu lung]",
        "deletedwhileediting": "'''Paase üüb:''' Det sidj as stregen wurden, üs dü diar jüst bi werket heest!\nUun't [{{fullurl:{{#special:Log}}|type=delete&page={{FULLPAGENAMEE}}}} Strik-logbuk] fanjst dü di grünj för't striken. Wan dü det sidj seekerst, woort det nei uunlaanj.",
        "confirmrecreate": "{{Gender:$1|Di brüker|Det brüker}} [[User:$1|$1]] ([[User talk:$1|Diskuschuun]]) hää det sidj stregen, üs dü diar jüst bi werket heest. Di grünj wiar:\n:<em>$2</em>\nFerseekre, dat dü det sidj würelk nei maage wel.",
-       "confirmrecreate-noreason": "Di brüker [[User:$1|$1 ]] ([[User talk:$1|Diskuschuun]]) hää det sidj stregen, huar dü jüst bi werket heest. Ferseekre, dat dü det sidj würelk nei maage wel.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Di brüker|Det brüker}} [[User:$1|$1 ]] ([[User talk:$1|Diskuschuun]]) hää det sidj stregen, huar dü jüst bi werket heest. Ferseekre, dat dü det sidj würelk nei maage wel.",
        "recreate": "Nei maage",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Det sidj ütj a cache strik?",
        "version-libraries-license": "Lisens",
        "version-libraries-description": "Beskriiwang",
        "version-libraries-authors": "Skriiwern",
-       "redirect": "Widjerfeerang faan en brüker, en sidj, en sidjenwerjuun of en datei.",
-       "redirect-summary": "Detdiar spezial-sidj feert widjer üüb en brükersidj, sidj, sidjenwerjuun of datei.\nAn det woort so brükt:  [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/file/Example.jpg]].",
+       "redirect": "Widjerfeerang faan en datei, en brüker, en sidj, en sidjenwerjuun of en logbukiindrach.",
+       "redirect-summary": "Detdiar spezial-sidj feert widjer üüb en brükersidj, en sidj, en sidjenwerjuun, en datei of en logbukiindrach.\nAn det woort so brükt:  [[{{#Special:Redirect}}/user/101]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/file/Example.jpg]] of [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Widjer",
        "redirect-lookup": "Schük:",
        "redirect-value": "Käänang of dateinööm:",
        "tags-actions-header": "Aktjuunen",
        "tags-active-yes": "Ja",
        "tags-active-no": "Naan",
-       "tags-source-extension": "Faan en ütjwidjang fäästlaanj",
+       "tags-source-extension": "Faan't software fäästlaanj",
        "tags-source-manual": "Manuel faan brükern of bots iinracht",
        "tags-source-none": "Woort ei muar brükt",
        "tags-edit": "bewerke",
        "tags-edit-title": "Markiarangen bewerke",
        "tags-edit-manage-link": "Markiarangen ferwalte",
        "tags-edit-existing-tags": "Markiarangen:",
-       "tags-edit-existing-tags-none": "\"Nianen\"",
+       "tags-edit-existing-tags-none": "<em>Nianen</em>",
        "tags-edit-new-tags": "Nei markiarangen:",
        "tags-edit-add": "Jodiar markiarangen diartusaat:",
        "tags-edit-remove": "Jodiar markiarangen wechnem:",
        "htmlform-user-not-exists": "<strong>$1</strong> jaft at ei.",
        "htmlform-user-not-valid": "<strong>$1</strong> as nään tuläät brükernööm",
        "logentry-delete-delete": "$1 {{Gender:$2}} hää det sidj $3 stregen",
-       "logentry-delete-restore": "$1 {{GENDER:$2}} hää det sidj $3 weder iinsteld",
+       "logentry-delete-restore": "$1 {{GENDER:$2}} hää det sidj $3 weder iinsteld ($4)",
        "logentry-delete-event": "$1 {{GENDER:$2}} hää det uunsicht feranert faan {{PLURAL:$5|en logbuk iindrach|$5 logbuk iindracher}} üüb $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2}} hää det uunsicht feranert faan {{PLURAL:$5|ian werjuun|$5 werjuunen}} faan det sidj $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2}} hää det uunsicht feranert faan logbuk iindracher üüb $3",
        "logentry-newusers-create2": "Brükerkonto $3 as faan $1 {{GENDER:$2|iinracht}} wurden",
        "logentry-newusers-byemail": "Brükerkonto $3 as faan $1 {{GENDER:$2|iinracht}} wurden, an det paaswurd as per e-mail tuschüürd wurden.",
        "logentry-newusers-autocreate": "Brükerkonto $1 as automaatisk {{GENDER:$2|iinracht}} wurden",
-       "logentry-rights-rights": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 faan $4 tu $5 feranert.",
+       "logentry-rights-rights": "$1 {{GENDER:$2|hää}} det brükerskööl för {{GENDER:$6|$3}} faan $4 tu $5 feranert.",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|hää}} det brükerskööl för $3 feranert.",
        "logentry-rights-autopromote": "$1 as automaatisk faan $4 tu $5 {{GENDER:$2|tuwiset}} wurden.",
        "logentry-upload-upload": "$1 {{GENDER:$2|hää}} $3 huuchschüürd",
        "api-error-emptypage": "Dü mutst nian leesag sidjen nei iinstel.",
        "api-error-publishfailed": "Intern feeler: Di server küd det tidjwiis datei ei widjer schüür.",
        "api-error-stashfailed": "Intern feeler: Di server küd nian tidjwiis datei seekre.",
-       "api-error-unknown-warning": "Ünbekäänd wäärnang: $1",
+       "api-error-unknown-warning": "Ünbekäänd wäärnang: \"$1\".",
        "api-error-unknownerror": "Ünbekäänd feeler: „$1“",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunden}}",
        "duration-minutes": "$1 {{PLURAL:$1|minüüt|minüüten}}",
        "expand_templates_generate_xml": "XML-parser-buum uunwise",
        "expand_templates_generate_rawhtml": "Rä HTML uunwise",
        "expand_templates_preview": "Föörskau",
-       "expand_templates_preview_fail_html": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an session-dooten wech san, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an ferschük det noch ans.</strong>\nWan det do uk noch ei gongt, [[Special:UserLogout|melde di uf]] an weder uun.",
+       "expand_templates_preview_fail_html": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an session-dooten wech san, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an ferschük det noch ans.</strong>\nWan det do uk noch ei gongt, [[Special:UserLogout|melde di uf]] an weder uun. An stel seeker, dat dan browser cookies tuläät.",
        "expand_templates_preview_fail_html_anon": "<em>Auer {{SITENAME}} rä HTML aktiwiaret hää an dü ein uunmeldet beest, as det föörskau ütj seekerhaids-grünjer ferbürgen wurden.</em>\n\n<strong>Wees so gud an [[Special:UserLogin|melde di uun]], an ferschük det noch ans.</strong>",
-       "pagelanguage": "Ütjwool faan sidjenspriaken",
+       "pagelanguage": "Sidjenspriak feranre",
        "pagelang-name": "Sidj",
        "pagelang-language": "Spriak",
        "pagelang-use-default": "Standard spriak brük",
        "action-pagelang": "det sidjenspriak tu feranrin",
        "log-name-pagelang": "Logbuk för spriak-feranrangen",
        "log-description-pagelang": "Det as en logbuk för sidjenspriak-feranrangen",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det sidjenspriak för $3 faan $4 tu $5 feranert.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|hää}} det spriak för $3 faan $4 tu $5 feranert.",
        "default-skin-not-found": "Uuha! Uun <code dir=\"ltr\">$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDin instalatjuun hää wel jodiar {{PLURAL:$4|skak|skaker}}. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am {{PLURAL:$4|di skak|a skaker}} tu aktiwiarin an standards iinturachten.\n\n$2\n\n; Wan dü MediaWiki jüst instaliaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest.\n\n; Wan dü jüst MediaWiki aktualisiaret heest:\n: MediaWiki 1.24 an neier werjuunen aktiwiare instaliaret skaker ei muar faan salew (luke uk iin uun det [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery brüker-hoonbuk]). Dü könst {{PLURAL:$5|detdiar rä|jodiar räen}} uun det datei <code>LocalSettings.php</code> iinsaat, am {{PLURAL:$5|di|aal a}} instaliaret {{PLURAL:$5|skak|skaker}} tu aktiwiarin:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Wan dü jüst <code>LocalSettings.php</code> feranert heest:\n: Heest dü a skaker uk aaltumaal rocht skrewen?",
        "default-skin-not-found-no-skins": "Uuha! Uun <code>$wgDefaultSkin</code> as fäästlaanj, dat <code>$1</code> dan standard-skak as. Man hi as ei diar!\n\nDü heest goor nian skak instaliaret.\n\n; Wan dü MediaWiki jüst instaliaret of aktualisiaret heest:\n: Dü heest was faan Git of direkt faan a kwelcode instaliaret. Do as det nian woner. MediaWiki 1.24 an neier werjuunen haa nian skak uun't hood-fertiaknis. Dü könst skaker ütj det [https://www.mediawiki.org/wiki/Category:All_skins MediaWiki.org-Skakfertiaknis] instaliare. Diarför skel dü:\n:* Di [https://www.mediawiki.org/wiki/Download/de Tarball-Installer] deelloose, hi komt mä ünlik skaker an ütjwidjangen. Dü könst det  <code>skins/</code>-fertiaknis kopiare an iinsaat.\n:* Enkelt skak-tarballs faan [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] deelloose.\n:* Ian faan a <code>mediawiki/skins/*</code>-fertiaknissen auer Git iin uun det <code dir=\"ltr\">skins/</code>-fertiaknis faan din MediaWiki-Instalatjuun auerskriiw.\n: Det skul din Git-fertiaknis ei uunstaken maage, wan dü en MediaWiki-ütjwerker beest. Luke uk uun't [https://www.mediawiki.org/wiki/Manual:Skin_configuration/de brüker-hoonbuk], am skaker tu aktiwiarin an standards iinturachten.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiwiaret)",
index 5c19a9f..7c09f8d 100644 (file)
@@ -17,7 +17,8 @@
                        "Xð",
                        "Robin van der Vliet",
                        "PiefPafPier",
-                       "Catrope"
+                       "Catrope",
+                       "Sjoerddebruin"
                ]
        },
        "tog-underline": "Keppelings ûnderstreekje:",
        "eauthentsent": "Foar befêstiging is jo in netpostberjocht tastjoerd op it adres dat jo ynsteld hawwe. Der wurdt gjin oare netpost stjoerd, oant jo it adres befêstigje sa't it yn it netpostberjocht stiet.",
        "throttled-mailpassword": "Yn {{PLURAL:$1|de lêste oere|de lêste $1 oeren}} is der al in wachtwurdwink ferstjoerd.\nOm misbrûk tefoaren te kommen wurdt der mar ien wachtwurdwink yn 'e {{PLURAL:$1|oere|$1 oeren}} ferstjoerd.",
        "mailerror": "Flater by it ferstjoeren fan e-mail: $1",
-       "acct_creation_throttle_hit": "Jo hawwe al {{PLURAL:$1|1 meidochnamme|$1 meidochnammen}} oanmakke. Jo kinne net mear oanmeitsje.",
+       "acct_creation_throttle_hit": "Besikers fan dizze wiky mei itselde IP-adres as jo hawwe de ôfrûne $2 al {{PLURAL:$1|1 meidochnamme|$1 meidochnammen}} oanmakke, wat it maksimaal tasteane oantal is foar dizze perioade.\nDêrom kinne jo fan jo IP-adres ôf op dit stuit gjin nije meidochnammen oanmeitsje.",
        "emailauthenticated": "Jo netpostadres waard befêstige op $2 om $3.",
        "emailnotauthenticated": "Jo netpostadres is <strong>noch net befêstige</strong>. Jo kinne oare brûkers gjin post stjoere, en foar de neikommende opsjes wurdt jo gjin post stjoerd.",
        "noemailprefs": "Jou in e-mailadres op om dizze funksjes te brûken.",
        "emailconfirmlink": "Befêstigje jo netpostadres.",
        "invalidemailaddress": "It e-mailadres is net akseptearre om't it in ûnjildige opmaak hat.\nJou beleaven in jildich e-mailadres op of lit it fjild leech.",
-       "accountcreated": "Brûker oanmakke",
-       "accountcreatedtext": "De brûkersaccount foar [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|oerlis]]) is oanmakke.",
+       "accountcreated": "Meidogger oanmakke",
+       "accountcreatedtext": "It meidoggersakkount [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|oerlis]]) is oanmakke.",
        "createaccount-title": "Brûkers registrearje foar {{SITENAME}}",
        "createaccount-text": "Immen hat in brûker op {{SITENAME}} ($4) oanmakke mei de namme \"$2\" en jo e-mailadres. It wachtwurd foar \"$2\" is \"$3\". Meld jo oan en feroarje jo wachtwurd.\n\nNegearje it berjocht as dizze brûker sûnder jo meiwitten oanmakke is.",
        "login-throttled": "Jo hawwe koartlyn te faak besocht oan te melden mei in ûnkrekt wachtwurd.\nJo moatte efkes wachtsje foar't jo it op'e nij besykje kinne.",
        "loginreqlink": "Oanmelde",
        "loginreqpagetext": "Jo moatte jo $1 om oare siden besjen te kinnen.",
        "accmailtitle": "Wachtwurd ferstjoerd.",
-       "accmailtext": "It wachtwurd foar \"$1\" is ferstjoerd nei $2.",
+       "accmailtext": "Samar in wachtwurd foar [[User talk:$1|$1]] is ferstjoerd nei $2. It kin wizige wurde op 'e side \n<em>[[Special:ChangePassword|Wachtwurd feroarje]]</em> nei oanmelden.",
        "newarticle": "(Nij)",
        "newarticletext": "Jo hawwe in keppeling folge nei in side dêr't noch gjin tekst op stiet.\nOm sels tekst te meistjsen kinne jo dy gewoan yntype in dit bewurkingsfjild\n([$1 Mear ynformaasje oer bewurkjen].)\nOars kinne jo tebek mei de tebek-knop fan jo blêder.",
        "anontalkpagetext": "----''Dit is de oerlisside fan in ûnbekende meidogger; in meidogger dy't him/har net oanmeld hat. Om't der gjin namme bekend is, wurdt it ynternet-adres brûkt om oan te jaan wa. Mar faak is it sa dat sa'n adres net altyd troch deselde persoan brûkt wurdt. As jo it idee hawwe dat jo as ûnbekende meidogger opmerkings foar in oar krije, dan kinne jo jo [[Special:CreateAccount|registrearje]], of jo [[Special:UserLogin|oanmelde]]. Fan in oanmelde meidogger is it ynternet-adres net sichtber, en as oanmelde meidogger krije jo allinnich opmerkings dy't foar josels bedoeld binne.''",
        "action-edit": "dizze side te bewurkjen",
        "action-createpage": "siden oan te meitsjen",
        "action-createtalk": "oerlissiden oan te meitsjen",
-       "action-createaccount": "dizze brûker oan te meitsjen",
+       "action-createaccount": "dizze meidogger oan te meitsjen",
        "action-minoredit": "dizze bewurking as lyts te markearjen",
        "action-move": "dizze side in oare namme te jaan",
        "action-move-subpages": "dizze side en de derby hearrende subsiden in oare namme te jaan",
-       "action-move-rootuserpages": "brûkerssiden fan it heechste nivo in oare namme te jaan",
+       "action-move-rootuserpages": "meidoggersiden fan it heechste nivo in oare namme te jaan",
        "action-move-categorypages": "categorysiden ferpleatse",
        "action-movefile": "dizze triem in oare namme te jaan",
        "action-upload": "dizze triem te opladen",
        "action-undelete": "dizze side wer te plak sette",
        "action-suppressrevision": "dizze ferburgen ferzje besjen en wer te plak sette",
        "action-suppressionlog": "dit beskerme logboek besjen",
-       "action-block": "dizze brûker in bewurkingsblokkade oplizze",
+       "action-block": "dizze meidogger in bewurkingsblokkade oplizze",
        "action-protect": "it befeiligingsnivo fan dizze side oanpasse",
        "action-import": "dizze side fan in oare wiki ymportearje",
        "action-importupload": "dizze side ymportearje fan in triem-oplading",
        "action-autopatrol": "eigen bewurkings as kontrolearre markearje litte",
        "action-unwatchedpages": "de list mei siden dy't net op in folchlist steane besjen",
        "action-mergehistory": "de skiednis fan dizze side gearfoegje",
-       "action-userrights": "alle brûkersrjochten bewurkje",
-       "action-userrights-interwiki": "brûkersrjochten fan brûkers fan oare wiki's bewurkje",
+       "action-userrights": "alle meidoggerrjochten bewurkje",
+       "action-userrights-interwiki": "meidoggerrjochten fan meidoggers fan oare wiki's bewurkje",
        "action-siteadmin": "de database ôfslute of iepenstelle",
        "action-sendemail": "e-mail stjoere:",
        "action-editmywatchlist": "jo folchlist bewurkje",
        "allpagesfrom": "Begjin list by",
        "allpagesto": "Siden besjen oant:",
        "allarticles": "Alle siden",
-       "allinnamespace": "Alle siden, yn de ($1-nammeromte)",
+       "allinnamespace": "Alle siden (yn de $1-nammeromte)",
        "allpagessubmit": "Los!",
        "allpagesprefix": "Siden sjen litte dy't begjinne mei:",
        "allpagesbadtitle": "De opjûne sidenamme is ûnjildich of hat in yntertaal- of ynterwikifoarheaksel.\nMûglik befettet de namme karakters dy't net brûkt wurde meie yn sidenammen.",
        "nowatchlist": "Jo hawwe gjin siden op jo folchlist.",
        "watchnologin": "Net oanmeld yn",
        "addwatch": "Oan folchlist tafoegje",
-       "addedwatchtext": "De side \"'''[[:$1]]'''\" is tafoege oan jo [[Special:Watchlist|folchlist]]. Bewurkings fan dizze side en oerlisside wurde yn de takomst op jo folchlist oanjûn. Hja wurde foar jo ek '''fet''' printe op [[Special:RecentChanges|Koartlyn feroare]].\n\nAt jo letter in side net mear folgje wolle, dan brûke jo op dy side de keppeling \"Ferjit dizze side.\" Jo [[Special:Watchlist|folchlist]] hat ek in keppeling \"Jo folchlist bewurkje,\" foar at jo mear as ien side \"ferjitte\" wolle.",
+       "addedwatchtext": "\"[[:$1]]\" en de bybehearrende oerlisside binne tafoege oan jo [[Special:Watchlist|folchlist]].",
        "removedwatchtext": "De side \"[[:$1]]\" stiet net mear op jo folchlist.",
        "watch": "Folgje",
        "watchthispage": "Folgje dizze side",
        "watching": "Dwaande mei op'e folchlist te setten ...",
        "unwatching": "Dwaande mei fan'e folchlist ôf te heljen ...",
        "enotif_impersonal_salutation": "meidogger fan {{SITENAME}}",
-       "enotif_body": "Bêste $WATCHINGUSERNAME,\n\nDe {{SITENAME}}side '$PAGETITLE' is op $PAGEEDITDATE $CHANGEDORCREATED troch meidogger $PAGEEDITOR;\nsjoch $PAGETITLE_URL foar de aktuele ferzje.\n\n$NEWPAGE\n\nGearfetting: $PAGESUMMARY $PAGEMINOREDIT\n\nFoar oerlis mei meidogger $PAGEEDITOR:\n- netpost: $PAGEEDITOR_EMAIL\n- wiki: $PAGEEDITOR_WIKI\n\nFierdere meldings wurde jo net tastjoerd, oant jo de side lêzen hawwe. Op jo folchlist kinne jo op 'e nij meldings foar al jo folge siden freegje.\n\n                 Jo freonlike {{SITENAME}}-meldingssysteem.\n\n--\nGean nei {{canonicalurl:{{#special:EditWatchlist}}}}\nom jo folchlistynstellings te feroarjen.\n\nReaksjes en fierdere help:\n$HELPPAGE",
+       "enotif_body": "Bêste $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nGearfetting: $PAGESUMMARY $PAGEMINOREDIT\n\nFoar oerlis mei meidogger:\nnetpost: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nFierdere meldings wurde jo net tastjoerd, oant jo de side lêzen hawwe. Op jo folchlist kinne jo op 'e nij meldings foar al jo folge siden freegje.\n\nJo freonlike {{SITENAME}}-meldingssysteem.\n\n--\nGean nei {{canonicalurl:{{#special:Preferences}}}}\nom jo netpostynstellings te feroarjen.\n\nGean nei {{canonicalurl:{{#special:EditWatchlist}}}}\nom jo folchlistynstellings te feroarjen.\n\nOm de side fan jo folchlist te ferwiderjen, gean nei\n$UNWATCHURL\n\nReaksjes en fierdere help:\n$HELPPAGE",
        "created": "oanmakke",
        "changed": "feroare",
        "deletepage": "Wisk side",
index 2b6cb06..2f45098 100644 (file)
        "pageid": "identificador de páxina $1",
        "rawhtml-notallowed": "As marcas &lt;html&gt; non poden usarse fóra das páxinas normais.",
        "gotointerwiki": "Deixando {{SITENAME}}",
-       "gotointerwiki-invalid": "O título especificado non era válido.",
-       "gotointerwiki-external": "Vai sair de {{SITENAME}} para visitar [[$2]], que é un sitio web externo.\n\n[$1 Prema aquí para continuar a $1]",
+       "gotointerwiki-invalid": "O título especificado non é válido.",
+       "gotointerwiki-external": "Vai sair de {{SITENAME}} para visitar [[$2]], que é un sitio web externo.\n\n'''[$1 Continuar en $1]'''",
        "undelete-cantedit": "Non pode anular o borrado desta páxina porque non ten permisos para editar esta páxina.",
        "undelete-cantcreate": "Non pode anular o borrado desta páxina xa que non hai ningunha páxina con ese nome e non ten permisos para creala."
 }
index 143151a..995e539 100644 (file)
        "htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
        "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|מחק|מחקה}} את ההפניה $3 באמצעות דריסה",
-       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3 (עם $4)",
+       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3 ($4)",
        "logentry-delete-restore-nocount": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3",
-       "restore-count-revisions": "עם {{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
-       "restore-count-files": "עם {{PLURAL:$1|קובץ אחד|$1 קבצים}}",
+       "restore-count-revisions": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
+       "restore-count-files": "{{PLURAL:$1|קובץ אחד|$1 קבצים}}",
        "logentry-delete-event": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} בדף $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3",
        "rawhtml-notallowed": "לא ניתן להשתמש בתגיות &lt;html&gt; מחוץ לדפים רגילים.",
        "gotointerwiki": "עזיבת {{SITENAME}}",
        "gotointerwiki-invalid": "הכותרת שצוינה אינה תקינה.",
-       "gotointerwiki-external": "{{GENDER:|אתה עומד|את עומדת|אתם עומדים}} לעזוב את {{SITENAME}} כדי לבקר באתר הנפרד \"[[$2]]\".\n\n[$1 {{GENDER:|לחץ|לחצי|לחצו}} כאן כדי להמשיך לכתובת $1].",
+       "gotointerwiki-external": "{{GENDER:|אתה עומד|את עומדת|אתם עומדים}} לעזוב את {{SITENAME}} כדי לבקר באתר הנפרד \"[[$2]]\".\n\n'''[$1 להמשך לכתובת $1]'''",
        "undelete-cantedit": "אין באפשרותך לשחזר דף זה, כי אין באפשרותך לערוך אותו.",
        "undelete-cantcreate": "אין באפשרותך לשחזר דף זה, כי אין דף קיים בשם זה ואין באפשרותך ליצור אותו."
 }
index 00476e4..fad3bcb 100644 (file)
@@ -46,7 +46,8 @@
                        "Máté",
                        "Wolf Rex",
                        "BanKris",
-                       "Notramo"
+                       "Notramo",
+                       "Urbalazs"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "navigation-heading": "Navigációs menü",
        "errorpagetitle": "Hiba",
        "returnto": "Vissza a(z) $1 laphoz.",
-       "tagline": "A {{SITENAME}} wikiből",
+       "tagline": "Innen: {{SITENAME}}",
        "help": "Segítség",
        "search": "Keresés",
        "search-ignored-headings": " #<!-- ezen a soron ne változtass --> <pre>\n# Az itt megadott szakaszokat figyelmen kívül hagyja a kereső.\n# Ha megváltoztatod ezt a listát, csak a változtatás után indexelt lapokra lesz hatása.\n# Ha újra akarsz indexelni egy adott oldalt, egy üres szerkesztéssel (megnyit-elment) megteheted.\n# Szintaxis:\n#   * A # jeltől a sor végéig tartó rész megjegyzés, a szoftver figyelmen kívül hagyja\n#   * Minden nem üres sor egy olyan szakasz címe, amit nem akarjuk, hogy indexeljen a kereső. (Csak a pontos egyezés számít, kisbetű/nagybetűt is beleértve.)\nForrások\nJegyzetek\nHivatkozások\nKülső hivatkozások\nLásd még\n #</pre> <!-- ezen a soron ne változtass -->",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lásd még: [[Special:NewPages|új lapok listája]])",
        "recentchanges-submit": "Megjelenítés",
        "rcfilters-activefilters": "Aktív szűrők",
+       "rcfilters-quickfilters": "Gyors hivatkozások",
+       "rcfilters-quickfilters-placeholder": "Kedvenc eszközbeállítások mentése későbbi újrafelhasználásra.",
+       "rcfilters-savedqueries-defaultlabel": "Mentett szűrők",
+       "rcfilters-savedqueries-rename": "Átnevezés",
+       "rcfilters-savedqueries-setdefault": "Beállítás alapértelmezettként",
+       "rcfilters-savedqueries-remove": "Eltávolítás",
+       "rcfilters-savedqueries-new-name-label": "Név",
+       "rcfilters-savedqueries-apply-label": "Gyors hivatkozás létrehozása",
+       "rcfilters-savedqueries-cancel-label": "Mégse",
+       "rcfilters-savedqueries-add-new-title": "Szűrők mentése gyors hivatkozásként",
        "rcfilters-restore-default-filters": "Alapértelmezett szűrők visszaállítása",
        "rcfilters-clear-all-filters": "Összes szűrő kikapcsolása",
        "rcfilters-search-placeholder": "Friss változtatások szűrése (böngészd vagy kezdj el gépelni)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Újoncok",
        "rcfilters-filter-user-experience-level-newcomer-description": "Kevesebb mint 10 szerkesztés és 4 nap aktivitás.",
        "rcfilters-filter-user-experience-level-learner-label": "Tanulók",
-       "rcfilters-filter-user-experience-level-learner-description": "Több aktív nap és szerkesztés, mint az „újoncok”, de kevesebb, mint a „tapasztalt szerkesztők”.",
+       "rcfilters-filter-user-experience-level-learner-description": "Több tapasztalat egy „újoncnál”, de kevesebb egy „tapasztalt szerkesztőnél”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Tapasztalt szerkesztők",
        "rcfilters-filter-user-experience-level-experienced-description": "Több mint 30 nap aktivitás és 500 szerkesztés.",
        "rcfilters-filtergroup-automated": "Automatikus szerkesztések",
        "rcfilters-filter-minor-description": "Szerző által aprónak jelölt szerkesztések",
        "rcfilters-filter-major-label": "Nem apró szerkesztések",
        "rcfilters-filter-major-description": "Nem aprónak jelölt szerkesztések.",
+       "rcfilters-filter-watchlist-watched-label": "Figyelőlistán",
        "rcfilters-filtergroup-changetype": "Változtatás típusa",
        "rcfilters-filter-pageedits-label": "Lapszerkesztések",
        "rcfilters-filter-pageedits-description": "A wiki tartalom szerkesztése, beszélgetés, kategória leírások...",
        "tooltip-pt-watchlist": "Az általad figyelemmel kísért oldalak utolsó változtatásai",
        "tooltip-pt-mycontris": "A közreműködéseid listája",
        "tooltip-pt-anoncontribs": "Erről az IP-címről végrehajtott szerkesztések listája",
-       "tooltip-pt-login": "Bejelentkezni javasolt, de nem kötelező.",
+       "tooltip-pt-login": "Bejelentkezni javasolt, de nem kötelező",
        "tooltip-pt-login-private": "Be kell jelentkezned a wiki használatához",
        "tooltip-pt-logout": "Kijelentkezés",
        "tooltip-pt-createaccount": "Arra bíztatunk, hogy hozz létre egy fiókot, és jelentkezz be, azonban ez nem kötelező",
        "tooltip-ca-move": "A lap áthelyezése",
        "tooltip-ca-watch": "A lap hozzáadása a figyelőlistádhoz",
        "tooltip-ca-unwatch": "A lap eltávolítása a figyelőlistádról",
-       "tooltip-search": "Keresés a wikin",
+       "tooltip-search": "Keresés ezen: {{SITENAME}}",
        "tooltip-search-go": "Ugrás a megadott lapra, ha létezik",
        "tooltip-search-fulltext": "Oldalak keresése a megadott szöveg alapján",
-       "tooltip-p-logo": "Kezdőlap",
+       "tooltip-p-logo": "Kezdőlap megtekintése",
        "tooltip-n-mainpage": "A kezdőlap felkeresése",
        "tooltip-n-mainpage-description": "A kezdőlap megtekintése",
-       "tooltip-n-portal": "A közösségről, miben segíthetsz, mit hol találsz meg",
+       "tooltip-n-portal": "A projektről, miben segíthetsz, mit hol találsz meg",
        "tooltip-n-currentevents": "Háttérinformáció az aktuális eseményekről",
        "tooltip-n-recentchanges": "A wikiben történt legutóbbi változtatások listája",
        "tooltip-n-randompage": "Egy véletlenszerűen kiválasztott lap betöltése",
        "tooltip-t-contributions": "A {{GENDER:$1|felhasználó}} közreműködéseinek listája",
        "tooltip-t-emailuser": "Írj e-mailt ennek a {{GENDER:$1|felhasználónak}}",
        "tooltip-t-info": "További információk erről a lapról",
-       "tooltip-t-upload": "Képek vagy egyéb fájlok feltöltése",
+       "tooltip-t-upload": "Fájlok feltöltése",
        "tooltip-t-specialpages": "Az összes speciális lap listája",
        "tooltip-t-print": "A lap nyomtatható változata",
        "tooltip-t-permalink": "Állandó hivatkozás a lap ezen változatához",
        "feedback-thanks": "Köszönjük. A visszajelzésed elküldve a „[$2 $1]” laphoz.",
        "feedback-thanks-title": "Köszönjük!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Keresés a wikin",
+       "searchsuggest-search": "Keresés ezen: {{SITENAME}}",
        "searchsuggest-containing": "tartalmazza…",
        "api-error-badtoken": "Belső hiba: hibás token.",
        "api-error-emptypage": "Új, üres lap létrehozása nem engedélyezett.",
        "mw-widgets-titleinput-description-redirect": "átirányítás ide: $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Kategória hozzáadása…",
        "mw-widgets-usersmultiselect-placeholder": "Továbbiak hozzáadása…",
+       "date-range-from": "Dátumtól:",
+       "date-range-to": "Dátumig:",
        "sessionmanager-tie": "Nem kombinálható többféle hitelesítési típus: $1.",
        "sessionprovider-generic": "$1-munkamenetek",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sütialapú munkamenetek",
index 0490961..c3643c1 100644 (file)
        "editingsection": "Modification de $1 (section)",
        "editingcomment": "Modification de $1 (nove section)",
        "editconflict": "Conflicto de modification: $1",
-       "explainconflict": "Alicuno ha modificate iste pagina post que tu\nha comenciate a modificar lo.\nLe area de texto superior contine le texto del pagina como illo existe actualmente.\nTu modificationes se monstra in le area de texto inferior.\nTu debera incorporar tu modificationes in le texto existente.\n'''Solmente''' le texto del area superior essera publicate quando tu clicca super \"$1\".",
+       "explainconflict": "Alicuno ha modificate iste pagina post que tu\nha comenciate a modificar lo.\nLe area de texto superior contine le texto del pagina como illo existe actualmente.\nTu modificationes se monstra in le area de texto inferior.\nTu debera incorporar tu modificationes in le texto existente.\n<strong>Solmente</strong> le texto del area superior essera publicate quando tu clicca super \"$1\".",
        "yourtext": "Tu texto",
        "storedversion": "Version immagazinate",
        "nonunicodebrowser": "'''Attention: Tu utilisa un navigator non compatibile con le characteres Unicode.'''\nUn systema de modification alternative ha essite activate, que te permitte modificar articulos con securitate: le characteres non ASCII apparera in le quadro de modification como codices hexadecimal.",
index efb791a..3b85292 100644 (file)
        "redirectedfrom": "(Endurbeint frá $1)",
        "redirectpagesub": "Tilvísunarsíða",
        "redirectto": "Endurbeint á:",
-       "lastmodifiedat": "Þessari síðu var síðast breytt $1 klukkan $2.",
+       "lastmodifiedat": "Þessari síðu var síðast breytt $1, klukkan $2.",
        "viewcount": "Þessi síða hefur verið skoðuð $1 {{PLURAL:$1|sinni|sinnum}}.",
        "protectedpage": "Vernduð síða",
        "jumpto": "Stökkva á:",
index e6349ac..7bce10c 100644 (file)
                        "Margherita.mignanelli",
                        "Redredsonia",
                        "Luigi.delia",
-                       "Samuele2002"
+                       "Samuele2002",
+                       "Kaspo"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "recentchanges-submit": "Mostra",
        "rcfilters-activefilters": "Filtri attivi",
        "rcfilters-quickfilters": "Collegamenti rapidi",
+       "rcfilters-quickfilters-placeholder": "Salva le tue impostazioni preferite per riutilizzarle dopo.",
        "rcfilters-savedqueries-defaultlabel": "Filtri salvati",
        "rcfilters-savedqueries-rename": "Rinomina",
        "rcfilters-savedqueries-setdefault": "Imposta come predefinito",
        "rcfilters-highlightmenu-help": "Seleziona un colore per evidenziare questa proprietà",
        "rcfilters-filterlist-noresults": "Nessun filtro trovato",
        "rcfilters-noresults-conflict": "Nessun risultato trovato, perché i criteri di ricerca sono in conflitto",
+       "rcfilters-state-message-subset": "Questo filtro non ha effetto perché i suoi risultati sono inclusi in quelli {{PLURAL:$2|del seguente filtro, più ampio|dei seguenti filtri, più ampi}} (prova ad evidenziarli per distinguerli): $1",
+       "rcfilters-state-message-fullcoverage": "La selezione di tutti i filtri in un gruppo è come non selezionarne alcuno, in questo modo questo filtro non ha effetto. Il gruppo include: $1",
        "rcfilters-filtergroup-registration": "Registrazione utente",
        "rcfilters-filter-registered-label": "Registrato",
        "rcfilters-filter-unregistered-label": "Non registrato",
        "rcfilters-filter-editsbyself-description": "I tuoi contributi.",
        "rcfilters-filter-editsbyother-label": "Modifiche di altri",
        "rcfilters-filter-editsbyother-description": "Tutte le modifiche eccetto le tue.",
+       "rcfilters-filtergroup-userExpLevel": "Livello d'esperienza (solo per utenti registrati)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nuovi utenti",
        "rcfilters-filter-user-experience-level-newcomer-description": "Meno di 10 modifiche e 4 giorni di attività.",
        "rcfilters-filter-user-experience-level-experienced-label": "Utenti con esperienza",
        "rcfilters-filter-bots-description": "Modifiche effettuate da strumenti automatici.",
        "rcfilters-filter-humans-label": "Umani (non bot)",
        "rcfilters-filter-humans-description": "Modifiche effettuate da contributori umani.",
+       "rcfilters-filtergroup-reviewstatus": "Stato revisione",
        "rcfilters-filter-patrolled-label": "Verificate",
        "rcfilters-filter-patrolled-description": "Modifiche contrassegnate come verificate.",
        "rcfilters-filter-unpatrolled-label": "Non verificate",
        "rcfilters-filter-minor-label": "Modifiche minori",
        "rcfilters-filter-minor-description": "Modifiche che sono state indicate come minori.",
        "rcfilters-filter-major-label": "Modifiche non minori",
+       "rcfilters-filter-watchlist-watched-label": "Negli osservati speciali",
        "rcfilters-filtergroup-changetype": "Tipo di modifica",
        "rcfilters-filter-pageedits-label": "Modifiche alle pagine",
        "rcfilters-filter-newpages-label": "Creazioni pagine",
        "rcfilters-filtergroup-lastRevision": "Ultima versione",
        "rcfilters-filter-lastrevision-label": "Ultima versione",
        "rcfilters-filter-lastrevision-description": "Le ultime modifiche ad una pagina.",
+       "rcfilters-filter-previousrevision-label": "Versioni precedenti",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfrom": "Mostra le modifiche apportate a partire da $3 $2",
        "rcshowhideminor": "$1 le modifiche minori",
        "mw-widgets-titleinput-description-new-page": "questa pagina non esiste ancora",
        "mw-widgets-titleinput-description-redirect": "reindirizzamento a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Aggiungi una categoria...",
+       "mw-widgets-usersmultiselect-placeholder": "Aggiungi altri...",
        "date-range-from": "Dalla data:",
        "date-range-to": "Alla data:",
        "sessionmanager-tie": "Non è possibile combinare più tipi di richieste di autenticazione: $1.",
        "rawhtml-notallowed": "I tag &lt;html&gt; non possono essere utilizzati al di fuori delle normali pagine.",
        "gotointerwiki": "Stai per lasciare {{SITENAME}}",
        "gotointerwiki-invalid": "Il titolo specificato non è valido.",
-       "gotointerwiki-external": "Stai per lasciare {{SITENAME}} per visitare [[$2]] che è un diverso sito web.\n\n[$1 Clicca qui per continuare su $1].",
+       "gotointerwiki-external": "Stai per lasciare {{SITENAME}} per visitare [[$2]], che è un sito web diverso.\n\n'''[$1 Continua su $1]'''",
        "undelete-cantedit": "Non puoi ripristinare questa pagina poiché non hai sufficienti permessi per modificarla.",
        "undelete-cantcreate": "Non puoi ripristinare questa pagina poiché la pagina con questo nome non è ancora inesistente e non hai sufficienti permessi per crearla."
 }
index a751412..f9d606e 100644 (file)
        "booksources-search": "検索",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
+       "magiclink-tracking-isbn": "ISBNリンクを使用しているページ",
        "specialloguserlabel": "実行者:",
        "speciallogtitlelabel": "対象 (ページ名または利用者の場合、{{ns:user}}:利用者名):",
        "log": "記録",
        "logentry-delete-delete": "$1 がページ「$3」を{{GENDER:$2|削除しました}}",
        "logentry-delete-delete_redir": "$1 がリダイレクト「$3」を上書きにより{{GENDER:$2|削除しました}}",
        "logentry-delete-restore": "$1 がページ「$3 ($4)」を{{GENDER:$2|復元しました}}",
+       "logentry-delete-restore-nocount": "$1 がページ「$3」を{{GENDER:$2|復元しました}}",
+       "restore-count-revisions": "$1{{PLURAL:$1|版}}",
+       "restore-count-files": "{{PLURAL:$1|$1ファイル}}",
        "logentry-delete-event": "$1 が $3 の{{PLURAL:$5|記録項目|記録項目$5件}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4",
        "logentry-delete-revision": "$1 がページ「$3」の{{PLURAL:$5|版|$5件の版}}の閲覧レベルを{{GENDER:$2|変更しました}}: $4",
        "logentry-delete-event-legacy": "$1 が $3 の記録項目の閲覧レベルを{{GENDER:$2|変更しました}}",
        "pagelang-reason": "理由",
        "pagelang-submit": "変更",
        "pagelang-nonexistent-page": "ページ $1 は存在しません。",
+       "pagelang-unchanged-language": "ページ「$1」の言語は既に$2に設定されています。",
        "right-pagelang": "ページの言語を変更",
        "action-pagelang": "ページの言語の変更",
        "log-name-pagelang": "言語変更の記録",
        "usercssispublic": "注意: CSS のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
        "restrictionsfield-badip": "無効な IP アドレス、またはその範囲: $1",
        "restrictionsfield-label": "許可する IP の範囲:",
-       "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>"
+       "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>",
+       "revid": "版 $1",
+       "undelete-cantcreate": "同名のページが存在せず、また作成する許可があなたに無いため、このページを復元できません。"
 }
index 4d2d7ec..0ebcc3f 100644 (file)
@@ -44,7 +44,7 @@
        "tog-enotifminoredits": "Uga kirimi aku layangtronik yèn ana besutan cilik ing kaca lan barkas",
        "tog-enotifrevealaddr": "Singkab alamat layangtronikku ing layang pawarta",
        "tog-shownumberswatching": "Tuduhaké cacah wong sing ngawasi",
-       "tog-oldsig": "Tandha tangan panjenengan sing ana:",
+       "tog-oldsig": "Tapak asmané panjenengan sing ana:",
        "tog-fancysig": "Anggep tandha tangan minangka tulisan wiki (tanpa pranala otomatis)",
        "tog-uselivepreview": "Nganggo pratuduh langsung",
        "tog-forceeditsummary": "Kandhani aku manawa kothak ringkesané besutan isih kosong",
@@ -70,7 +70,7 @@
        "editfont-monospace": "Fon monospasi",
        "editfont-sansserif": "Fon tansèrif",
        "editfont-serif": "Fon sèrif",
-       "sunday": "Minggu",
+       "sunday": "Ngahad",
        "monday": "Senèn",
        "tuesday": "Selasa",
        "wednesday": "Rebo",
        "december-date": "$1 Dhésèmber",
        "period-am": "Isuk-Awan",
        "period-pm": "Soré-Wengi",
-       "pagecategories": "{{PLURAL:$1|Kategori|Kategori}}",
+       "pagecategories": "{{PLURAL:$1|Kategori}}",
        "category_header": "Kaca sajeroning kategori \"$1\"",
        "subcategories": "Anak kategori",
        "category-media-header": "Médhia sajeroning kategori \"$1\"",
        "faq": "Pitakon Kerep",
        "faqpage": "Project:Pitakon Kerep",
        "actions": "Lelabuhan",
-       "namespaces": "Jagat aran",
+       "namespaces": "Mandala aran",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "errorpagetitle": "Cacad",
        "viewhelppage": "Deleng kaca pitulung",
        "categorypage": "Deleng kaca kategori",
        "viewtalkpage": "Deleng parembugan",
-       "otherlanguages": "Ing basa liya",
+       "otherlanguages": "Ing basa liya",
        "redirectedfrom": "(Dilih saka $1)",
        "redirectpagesub": "Alih kaca",
        "redirectto": "Ngalih menyang:",
-       "lastmodifiedat": "Kaca iki dibesut pungkasan nalika $1, tabuh $2.",
+       "lastmodifiedat": "Kaca iki dibesut pungkasan nalika $1, pukul $2.",
        "viewcount": "Kaca iki wis diaksès ping {{PLURAL:$1|siji|$1}}.",
        "protectedpage": "Kaca kareksa",
        "jumpto": "Jujug:",
        "aboutpage": "Project:Ngenani",
        "copyright": "Kabèh isi kasedyakaké miturut $1.",
        "copyrightpage": "{{ns:project}}:Hak cipta",
-       "currentevents": "Kadadian saiki",
-       "currentevents-url": "Project:Kadadian saiki",
+       "currentevents": "Kadadéan saiki",
+       "currentevents-url": "Project:Kadadéan saiki",
        "disclaimers": "Sélakan",
        "disclaimerpage": "Project:Sélakan umum",
        "edithelp": "Pitulung besut",
        "portal": "Gapura paguyuban",
        "portal-url": "Project:Garupa paguyuban",
        "privacy": "Paugeran privasi",
-       "privacypage": "Project:Niti priangga",
+       "privacypage": "Project:Paugeran privasi",
        "badaccess": "Aksès ora olèh",
        "badaccess-group0": "Panjenengan ora pareng nglakokaké tindhakan sing panjenengan gayuh.",
        "badaccess-groups": "Pratingkah panjenengan diwatesi tumrap panganggo ing {{PLURAL:$2|klompoké|klompoké}}: $1.",
        "feed-invalid": "Tipe permintaan asupan ora bener.",
        "feed-unavailable": "Umpan sindikasi (''syndication feeds'') ora kasedyakaké",
        "site-rss-feed": "$1 ''RSS Feed''",
-       "site-atom-feed": "Umpan atom $1",
+       "site-atom-feed": "Lebon atom $1",
        "page-rss-feed": "\"$1\" ''RSS Feed''",
        "page-atom-feed": "\"$1\" ''Atom Feed''",
        "red-link-title": "$1 (kaca durung ana)",
        "perfcachedts": "Data ing ngisor iki kasimpen ing telih, lan pungkasan dianyari $1. Paling akèh ana {{PLURAL:$4|sakasil|$4 kasil}} sumadhiya ing telih iku.",
        "querypage-no-updates": "Update saka kaca iki lagi dipatèni. Data sing ana ing kéné saiki ora bisa bakal dibalèni unggah manèh.",
        "viewsource": "Deleng sumber",
-       "viewsource-title": "Delok sumberé $1",
+       "viewsource-title": "Deleng sumberé $1",
        "actionthrottled": "Tindakan diwatesi",
        "actionthrottledtext": "Minangka upaya lumawan tumindak salah-guna, panjenengan diwatesi nalika ngayahi iki ping bola-bali tur rikat, lan panjenengan wis munjuli watesané.\nMangga jajalen manèh mengko.",
        "protectedpagetext": "Kaca iki wis digembok supaya ora bisa disunting lan diapa-apakaké.",
        "externaldberror": "Ana kasalahan otèntikasi basis dhata èksternal utawa panjenengan ora pareng nglakoni pemutakhiran marang akun èksternal panjenengan.",
        "login": "Mlebu",
        "login-security": "Vèrifikasi idhèntitas panjenengan",
-       "nav-login-createaccount": "Log mlebu / nggawé rékening (akun)",
+       "nav-login-createaccount": "Mlebu log / gawé akun",
        "logout": "Metu",
        "userlogout": "Metu",
        "notloggedin": "Durung kalebu",
        "loginerror": "Cacad nalika mlebu",
        "createacct-error": "Cacad nalika nggawé akun",
        "createaccounterror": "Ora bisa gawé akun: $1",
-       "nocookiesnew": "Rékening utawa akun panganggo panjenengan wis digawé, nanging panjenengan durung mlebu log. {{SITENAME}} nggunakaké ''cookies'' kanggo  log panganggo. ''Cookies'' ing panjlajah wèb panjengengan dipatèni. Mangga diaktifaké lan mlebu log manèh mawa jeneng panganggo lan tembung sandhi panjenengan.",
+       "nocookiesnew": "Akun panganggoné wis digawé, nanging panjenengan durung mlebu log.\n{{SITENAME}} nganggo kuki kanggo nglebokaké panganggo ing log.\nÉwadéné, kukiné panjenengan dipatèni.\nMangga urubaké iku, banjur mlebua log kanthi nganggo jeneng panganggo lan tembung wadiné panjenengan sing anyar.",
        "nocookieslogin": "{{SITENAME}} nggunakaké ''cookies'' kanggo log panganggoné. ''Cookies'' ing panjlajah wèb panjenengan dipatèni. Mangga ngaktifaké manèh lan coba manèh.",
        "nocookiesfornew": "Akun panganggoné wurung digawé amarga awak dhéwé ora bisa mesthèkaké sumberé.\nPesthèkaké panjenengan wis ngurubaké kuki, banjur ambalana ngamot kaca iki lan njajalana manèh.",
        "createacct-loginerror": "Akuné wis kasil digawe nanging panjenengan ora bisa otomatis mlebu. Mangga [[Special:UserLogin|mlebua kanthi manual]].",
-       "noname": "Asma panganggo sing panjenengan pilih ora sah.",
+       "noname": "Panjenengan durung awèh jeneng panganggo sing trep.",
        "loginsuccesstitle": "Kasil mlebu",
        "loginsuccess": "<strong>Panjenengan saiki wis mlebu log ing {{SITENAME}} minangka \"$1\".</strong>",
        "nosuchuser": "Ora ana panganggo kanthi jeneng \"$1\".\nJeneng panganggo iku sènsitif tumrap gedhé-ciliké huruf.\nJajan priksanen éjaané panjenengan, utawa [[Special:CreateAccount|gawénen akun anyar]].",
        "nosuchusershort": "Ora ana panganggo mawa asma \"$1\". Coba dipriksa manèh pasang aksarané (éjaané).",
-       "nouserspecified": "Panjenengan kudu milih asma panganggo.",
+       "nouserspecified": "Panjenengan kudu milih jeneng panganggo.",
        "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
        "wrongpassword": "Tembung sandhi sing dipilih salah. Mangga coba manèh.",
        "wrongpasswordempty": "Panjenengan ora milih tembung sandhi. Mangga dicoba manèh.",
        "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.",
        "passwordtoolong": "Tembung wadi ora kena munjuli {{PLURAL:$1|1 pralambang|$1 pralambang}}.",
        "passwordtoopopular": "Tembung wadi sing wis kaprah ora kena dianggo. Mangga pilih tembung wadi liya sing mbédani.",
-       "password-name-match": "Tembung sandi panjenengan kudu béda karo jeneng panganggo panjenengan.",
+       "password-name-match": "Tembung wadiné panjenengan kudu béda saka jeneng panganggoné panjenengan.",
        "password-login-forbidden": "Panganggoning jeneng panganggo lan tembung wadi iki dilarang.",
        "mailmypassword": "Balèni gawé tembung wadi",
        "passwordremindertitle": "Pèngetan tembung sandhi saka {{SITENAME}}",
        "emaildisabled": "Situs iki ora bisa ngirim layang èlèktronik.",
        "accountcreated": "Akun wis kagawé",
        "accountcreatedtext": "Akun panganggo [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|rembug]]) wis digawé.",
-       "createaccount-title": "Gawé rékening kanggo {{SITENAME}}",
-       "createaccount-text": "Ana wong sing nggawé sawijining akun utawa rékening kanggo alamat e-mail panjenengan ing {{SITENAME}} ($4) mawa jeneng \"$2\" lan tembung sandi \"$3\". Panjenengan disaranaké kanggo mlebu log lan ngganti tembung sandi panjenengan saiki.\n\nPanjenengan bisa nglirwakaké pesen iki yèn akun utawa rékening iki digawé déné sawijining kaluputan.",
+       "createaccount-title": "Gawé akun kanggo {{SITENAME}}",
+       "createaccount-text": "Ana sing nggawé akun nganggo alamat layang-èlé panjenengan ing {{SITENAME}} ($4) kanthi aran \"$2\", mawa tembung wadi \"$3\".\nPanjenengan kudu mlebu log lan ngowahi tembung wadiné panjenengan saiki.\n\nPanjenengan kena nglirwakaké layang iki, manawa akun iki digawé awit kaluputan.",
        "login-throttled": "Panjenengan wis kakèhan njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
        "login-abort-generic": "Panjenengan ora bisa mlebu log - Kawurungan",
        "login-migrated-generic": "Akuné panjenengan wis dimigrasi, lan jeneng panganggoné wis ora ana manèh ing wiki iki.",
        "resetpass_forbidden": "Tembung wadi ora bisa diganti",
        "resetpass-no-info": "Panjenengan kudu mlebu log kanggo ngaksès kaca iki sacara langsung.",
        "resetpass-submit-loggedin": "Ganti tembung wadi",
-       "resetpass-submit-cancel": "Batal",
+       "resetpass-submit-cancel": "Wurung",
        "resetpass-wrong-oldpass": "Tembung wadi saiki utawa sauntara ora trep.\nPanjengen bokmanawa wis ngganti tembung wadiné panjenengan utawa nyuwun tembung wadi sauntara sing anyar.",
        "resetpass-temp-password": "Tembung wadi sauntara:",
        "resetpass-abort-generic": "Ngowah tembung sandhi diwurungaké déning èkstènsi.",
        "image_tip": "Barkas sisipan",
        "media_sample": "Conto.ogg",
        "media_tip": "Pranala barkas",
-       "sig_tip": "Tandha tangan sampéyan mawa tandha wayah",
+       "sig_tip": "Tapak asmané panjenengan mawa tandha wektu",
        "hr_tip": "Garis horisontal",
        "summary": "Ringkesan:",
        "subject": "Jejer:",
        "noarticletext": "Kala saiki kaca iki durung ana tulisané.\nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] sajeroning kaca liya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki]</span>.",
        "noarticletext-nopermission": "Saiki ora ana tèks ing kaca iki. \nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki judhul kaca iki]] nèng kaca liya, \nutawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log sing kaitan]</span>, nanging Sampéyan ora nduwèni idin nggawé kaca iki.",
        "missing-revision": "Benahan #$1 saka kaca ajeneng \"{{FULLPAGENAME}}\" ora ana.\n\nIki biasané kasebabaké pranala riwayat sing kedaluwarsa saka kaca kuwi wis dibusak.\nRinciané bisa ditemokaké nèng [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambusakan].",
-       "userpage-userdoesnotexist": "Akun utawa rékening panganggo \"<nowiki>$1</nowiki>\" ora kadaftar.",
+       "userpage-userdoesnotexist": "Akun panganggo \"$1\" ora kadhaftar.\nMangga pesthèkaké dhisik yèn panjenengan péngin nggawé/mbesut kaca iki.",
        "userpage-userdoesnotexist-view": "Panganggo \"$1\" ora kadhaptar.",
        "blocked-notice-logextract": "Panganggo iki saiki lagi diblokir.\nLog pamblokiran pungkasan dituduhaké ing ngisor iki minangka bahan rujukan:",
        "clearyourcache": "'''Cathetan:''' Sawisé nyimpen préférènsi, panjenengan prelu ngresiki <em>cache</em> panjlajah wèb panjenengan kanggo mirsani pangowahan. '''Mozilla / Firefox / Safari:''' pencèt ''Ctrl-Shift-R'' (''Cmd-Shift-R'' pada Apple Mac); '''IE:''' tekan ''Ctrl-F5''; '''Konqueror:''': pencèt ''F5''; '''Opera''' resikana <em>cache</em> miturut menu ''Tools→Preferences''.",
        "undo-failure": "Suntingan iki ora bisa dibatalakén amerga ana konflik panyuntingan antara.",
        "undo-norev": "Besutan iki ora bisa diwurungaké amarga wis ora ana utawa wis dibusak.",
        "undo-summary": "Mbalèkaké owahan $1 déning [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]])",
-       "undo-summary-username-hidden": "Batalna revisi $1 saking panganggo kang didhelikake",
+       "undo-summary-username-hidden": "Balèkaké owahan $1 déning panganggo sing didhelikaké",
        "cantcreateaccount-text": "Saka alamat IP iki ('''$1''') ora diparengaké nggawé akun utawa rékening. Sing mblokir utawa ora marengaké iku [[User:$3|$3]].\n\nAlesané miturut $3 yaiku ''$2''",
        "cantcreateaccount-range-text": "Nggawe akun saking alamat IP \"$1\", sing termasuk IP sampeyan (<strong>$4</strong>), sampun diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"",
        "viewpagelogs": "Deleng cathetaning kaca iki",
        "mergehistory-same-destination": "Jeneng kaca sumber lan tujuan ora kena padha",
        "mergehistory-reason": "Alesan:",
        "mergelog": "Gabung log",
-       "revertmerge": "Batalna panggabungan",
+       "revertmerge": "Wurung gabung",
        "mergelogpagetext": "Ing ngisor iki kapacak daftar panggabungan sajarah kaca ing kaca liyané.",
        "history-title": "Sujarah owahaning \"$1\"",
        "difference-title": "Prabéda antara owahan \"$1\"",
        "searchprofile-articles-tooltip": "Golèkan ing $1",
        "searchprofile-images-tooltip": "Golèk barkas",
        "searchprofile-everything-tooltip": "Golèk kabèh isi (kalebu kaca guneman)",
-       "searchprofile-advanced-tooltip": "Golèk ing jagat aran tinamtu",
+       "searchprofile-advanced-tooltip": "Golèk ing mandala aran tinamtu",
        "search-result-size": "$1 ({{PLURAL:$2|1 tembung|$2 tembung}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
        "search-redirect": "(alihan saka $1)",
        "search-section": "(pérangan $1)",
        "search-category": "(kategori $1)",
        "search-file-match": "(cocog karo isi barkas)",
-       "search-suggest": "Apa karepé sampéyan: $1",
+       "search-suggest": "Apa sing panjenengan karepaké iki: $1",
        "search-rewritten": "Tuduhaké kasilé $1, nanging golèkaké $2.",
        "search-interwiki-caption": "Kasil saka proyèk-proyèk sababon",
        "search-interwiki-default": "Wohing panggolèk $1:",
        "datedefault": "Ora ana pilihan",
        "prefs-labs": "Piranti lab",
        "prefs-user-pages": "Kacaning sing nganggo",
-       "prefs-personal": "Panjèrènging sing nganggo",
+       "prefs-personal": "Profil panganggo",
        "prefs-rc": "Owah-owahan pungkasan",
        "prefs-watchlist": "Pawawangan",
        "prefs-editwatchlist": "Besut pawawangan",
        "prefs-watchlist-edits-max": "Gunggung maksimum: 1000",
        "prefs-watchlist-token": "Tokening pawawangan:",
        "prefs-misc": "Liya-liya",
-       "prefs-resetpass": "Ganti tembung sandi",
+       "prefs-resetpass": "Ganti tembung wadi",
        "prefs-changeemail": "Owah utawa busak alamat layangtronik",
        "prefs-setemail": "Setèl alamat layang èlèktronik",
        "prefs-email": "Opsi layang-e",
        "prefs-reset-intro": "Panjenengan bisa migunakaké kaca iki kanggo mbalèkaké préferensi panjenengan marang setèlan baku situs.\nPembalikan ora bisa dibatalaké.",
        "prefs-emailconfirm-label": "Konfirmasi layang-e:",
        "youremail": "Layang élèktronik (E-mail):",
-       "username": "{{GENDER:$1|Asma panganggo}}:",
-       "prefs-memberingroups": "{{GENDER:$2|Anggota}} {{PLURAL:$1|klompok|klompok-klompok}}:",
+       "username": "{{GENDER:$1|Jeneng panganggo}}:",
+       "prefs-memberingroups": "{{GENDER:$2|Anggota}}né {{PLURAL:$1|golongan}}:",
        "group-membership-link-with-expiry": "$1 (tekan $2)",
        "prefs-registration": "Wektu régistrasi:",
-       "yourrealname": "Asma sajatiné :",
+       "yourrealname": "Jeneng asli:",
        "yourlanguage": "Basa sing dianggo:",
        "yourvariant": "Werna basa isi:",
        "prefs-help-variant": "Varian utawa ortograpi sing Sampéyan pilih kanggo nampilaké kaca kontèn saka wiki iki.",
        "prefs-help-signature": "Tanggapan ing kaca parembugan kudu ditandhatangani mawa \"<nowiki>~~~~</nowiki>\", sing bakal salin dadi tandha tangan lan cap wektumu.",
        "badsig": "Tapak astanipun klèntu; cèk rambu HTML.",
        "badsiglength": "Tapak asta panjenengan kedawan.\nAja luwih saka {{PLURAL:$1|karakter|karakter}}.",
-       "yourgender": "Kepiyé sampéyan medhar priangganing panjenengan?",
-       "gender-unknown": "Nalika nyebut sampéyan, piranti alus iku bakal nganggo tembung sing nétral jèndher sabisané",
-       "gender-male": "Dhèwèké mbesut kaca wiki",
-       "gender-female": "Dhèwèké mbesut kaca wiki",
-       "prefs-help-gender": "Opsional: Dipigunakaké kanggo panyebutan jinis kelamin sing bener déning piranti alus.\nInformasi iki bakal kabuka kanggo publik.",
+       "yourgender": "Kepiyé panjenengan nggambaraké salirané panjenengan?",
+       "gender-unknown": "Nalika nyebut panjenengan, piranti alusé bakal nganggo tembung sing nétral jèndher sabisané",
+       "gender-male": "Lanang",
+       "gender-female": "Wadon",
+       "prefs-help-gender": "Setèlané pilalan iki sipaté manasuka.\nPiranti alusé nganggo ajiné kanggo ngarani lan nyebut panjenengan nyang liyan sarana tembung jèndher sing patut sacara paramasastra.\nKaterangan iki bakal kanton marang umum.",
        "email": "Layangtronik",
        "prefs-help-realname": "Jeneng asli ora kudu diisi.\nYèn diisi, jeneng asliné panjenengan bakal kanggo atribusi awit karyané panjenengan.",
        "prefs-help-email": "Alamat layang èlèktronik sipaté mung pilihan, nanging dibutuhaké kanggo nyetèl ulang tembung sandhi yèn Sampéyan lali.",
        "userrights-conflict": "Konflik pangowahan hak-hak panganggo! Tulung ditinjau maneh lan konfirmasi Pangowahan sampeyan.",
        "group": "Golongan:",
        "group-user": "Para panganggo",
-       "group-autoconfirmed": "Panganggo sing otomatis didhedhes (dikonfirmasi)",
+       "group-autoconfirmed": "Panganggo sing otomatis kakonfirmasi",
        "group-bot": "Bot",
        "group-sysop": "Pangurus",
        "group-bureaucrat": "Birokrat",
        "group-bureaucrat-member": "{{GENDER:$1|birokrat}}",
        "group-suppress-member": "{{GENDER:$1|pangawasan}}",
        "grouppage-user": "{{ns:project}}:Para panganggo",
-       "grouppage-autoconfirmed": "{{ns:project}}:Panganggo sing otomatis didhedhes (dikonfirmasi)",
+       "grouppage-autoconfirmed": "{{ns:project}}:Panganggo sing otomatis kakonfirmasi",
        "grouppage-bot": "{{ns:project}}:Bot",
        "grouppage-sysop": "{{ns:project}}:Pangurus",
        "grouppage-bureaucrat": "{{ns:project}}:Birokrat",
        "right-edit": "Besut kaca",
        "right-createpage": "Gawé kaca (sing dudu kaca parembugan)",
        "right-createtalk": "Gawé kaca parembugan",
-       "right-createaccount": "Nggawé rékening (akun) panganggo anyar",
+       "right-createaccount": "Gawé akun panganggo anyar",
        "right-autocreateaccount": "Otomatis mlebu log nganggo akun panganggo njaba",
        "right-minoredit": "Tandhani yèn besutan cilik",
        "right-move": "Ngalih kaca",
        "right-delete": "Busak kaca-kaca",
        "right-bigdelete": "Busak kaca-kaca mawa sajarah panyuntingan sing gedhé",
        "right-deletelogentry": "Busak lan wurung busak èntri log tartamtu",
-       "right-deleterevision": "Busak lan batal busak révisi tartamtu kaca-kaca",
+       "right-deleterevision": "Busak lan wurung busak owahan tinamtuné kaca",
        "right-deletedhistory": "Ndeleng sajarah èntri-èntri kabusak, tanpa bisa ndeleng apa sing dibusak",
        "right-deletedtext": "Delok tèks kabusak lan panggantèn antara rèpisi kabusak",
        "right-browsearchive": "Golèk kaca-kaca sing wis dibusak",
        "action-import": "impor kaca iki saka wiki liya",
        "action-importupload": "impor kaca iki saka pamunggahan berkas",
        "action-patrol": "nandhani besutan wong liya yèn wis kapriksa",
-       "action-autopatrol": "nandhani besutan panjenengan dhéwé yèn wis kapriksa",
+       "action-autopatrol": "nandhani besutané panjenengan dhéwé yèn wis kapriksa",
        "action-unwatchedpages": "deleng pratélan kaca sing ingawasan",
        "action-mergehistory": "nggabungaké sajarah kaca iki",
        "action-userrights": "ngowahi kabèh hak panganggo",
        "recentchanges-label-minor": "Iki besutan cilik",
        "recentchanges-label-bot": "Besutan iki diayahi bot",
        "recentchanges-label-unpatrolled": "Besutan iki durung kapatroli",
-       "recentchanges-label-plusminus": "Ukuran owahing kaca ing bèt",
+       "recentchanges-label-plusminus": "Ukuran owahé kaca mawa ékan bèt",
        "recentchanges-legend-heading": "<strong>Legendha:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga deleng [[Special:NewPages|pratélaning kaca-kaca anyar]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga delengen [[Special:NewPages|pratélané kaca-kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Tuduhaké",
-       "rcfilters-activefilters": "Saringan murub",
+       "rcfilters-activefilters": "Saringan sing murub",
        "rcfilters-quickfilters": "Pranala rikat",
        "rcfilters-quickfilters-placeholder": "Simpen setèlan piranti kasenengané panjenengan supaya bisa dianggo manèh mengko",
        "rcfilters-savedqueries-defaultlabel": "Saringan sumimpen",
        "rcshowhidecategorization": "$1 kategorisasi kaca",
        "rcshowhidecategorization-show": "Tuduhaké",
        "rcshowhidecategorization-hide": "Dhelikaké",
-       "rclinks": "Tuduhaké $1 owahan kawit $2 dina kapungkur.",
+       "rclinks": "Tuduhaké $1 owahan pungkasan kawit $2 dina kapungkur.",
        "diff": "béd",
        "hist": "saj",
        "hide": "Dhelikaké",
        "protectedpagesempty": "Saat ini tidak ada halaman yang sedang dilindungi.",
        "protectedpages-page": "Kaca",
        "protectedpages-expiry": "Kadaluwarsa",
+       "protectedpages-performer": "Ngreksa panganggo",
+       "protectedpages-params": "Paramèter rereksan",
        "protectedpages-reason": "Alesan",
+       "protectedpages-submit": "Tuduhaké kaca",
+       "protectedpages-unknown-timestamp": "Ora dingertèni",
+       "protectedpages-unknown-performer": "Panganggo ora dingertèni",
        "protectedtitles": "Sesirah direksa",
        "protectedtitlesempty": "Ora ana sesirah sing saiki kareksa mawa paramèter iki.",
+       "protectedtitles-submit": "Tuduhaké sesirah",
        "listusers": "Daftar panganggo",
        "listusers-editsonly": "Tampilaké mung panganggo sing nduwèni kontribusi",
        "listusers-creationsort": "Urut miturut tanggal digawé",
        "usereditcount": "$1 {{PLURAL:$1|besutan|besutan}}",
        "usercreated": "{{GENDER:$3|Digawé}} $1 wanci $2",
        "newpages": "Kaca anyar",
-       "newpages-username": "Asma panganggo:",
+       "newpages-submit": "Tuduhaké",
+       "newpages-username": "Jeneng panganggo:",
        "ancientpages": "Kaca paling lawas",
        "move": "Pindhahen",
        "movethispage": "Lih kaca iki",
        "pager-older-n": "{{PLURAL:$1|1 luwih lawas|$1 luwih lawas}}",
        "suppress": "Dhelikaké",
        "querypage-disabled": "Kaca kusus iki dipatèni kanggo alesan kinerja.",
+       "apihelp": "Pitulung API",
+       "apihelp-no-such-module": "Modhul \"$1\" ora katemu.",
        "apisandbox": "Kothak wedhi API",
+       "apisandbox-jsonly": "JavaScript dibutuhaké saperlu nganggo bak wedhi API.",
        "apisandbox-api-disabled": "API dipatèni nèng situs iki.",
        "apisandbox-intro": "Anggo kaca iki kanggo njajal-njajal '''API layanan wèb MediaWiki'''.\nRujuk [https://www.mediawiki.org/wiki/API:Main_page the dhokumèntasi API] kanggo panganggoan API luwih rinci. Conto: [https://www.mediawiki.org/wiki/API#A_simple_example ngéntukaké kontèn Kaca Utama]. Pilih laku kanggo ndelok conto luwih akèh.",
+       "apisandbox-fullscreen": "Jembaraké panèl",
+       "apisandbox-fullscreen-tooltip": "Jembaraké panèl bak wedhi kanggo ngisi jendhéla pangluru.",
+       "apisandbox-unfullscreen": "Tuduhaké kaca",
+       "apisandbox-unfullscreen-tooltip": "Ciyutaké panèl bak wedhi supaya pranala navigasi MediaWiki dadi ana.",
        "apisandbox-submit": "Gawé panjalukan",
        "apisandbox-reset": "Resiki",
+       "apisandbox-retry": "Jajal manèh",
+       "apisandbox-loading": "Ngamot katerangan kanggo modhul API \"$1\"...",
+       "apisandbox-load-error": "Ana masalah nalika ngamot katerangan modhul API \"$1\": $2",
+       "apisandbox-no-parameters": "Modhul API iki ora ana paramèteré.",
+       "apisandbox-helpurls": "Pranala pitulung",
        "apisandbox-examples": "Conto",
        "apisandbox-dynamic-parameters": "Paramèter tambahan",
        "apisandbox-dynamic-parameters-add-label": "Tambah paramèter:",
        "apisandbox-results-error": "Ana masalah nalika ngamot wangsulan kanggo panyuwuné API: $1.",
        "apisandbox-request-selectformat-label": "Tuduhaké dhata suwunan minangka:",
        "apisandbox-request-url-label": "URL dikarepaké:",
-       "apisandbox-request-time": "Suwéné panjalukan: $1",
+       "apisandbox-request-json-label": "Nyuwun JSON:",
+       "apisandbox-request-time": "Suwéné panyuwunan: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Dandanana tokené lan balènana numpuk",
+       "apisandbox-results-fixtoken-fail": "Wurung njupuk token \"$1\".",
+       "apisandbox-alert-page": "Babagan ing kaca iki ora trep.",
+       "apisandbox-alert-field": "Ajiné babagan iki ora trep.",
+       "apisandbox-continue": "Banjuraké",
+       "apisandbox-continue-clear": "Resiki",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} bakal [https://www.mediawiki.org/wiki/API:Query#Continuing_queries mbanjuraké] panyuwunané sing pungkasan; {{int:apisandbox-continue-clear}} bakal ngresiki paramèter sing gegayutan karo tumindak panglanjutané.",
+       "apisandbox-param-limit": "Isènana <kbd>max</kbd> saperlu nganggo watesan maksimum.",
+       "apisandbox-multivalue-all-namespaces": "$1 (Kabèh mandala aran)",
+       "apisandbox-multivalue-all-values": "$1 (Kabèh aji)",
        "booksources": "Sumber buku",
        "booksources-search-legend": "Golèk sumber buku",
        "booksources-search": "Golèk",
        "booksources-text": "Ing ngisor iki kapacak daftar pranala menyang situs liyané sing ngadol buku anyar lan bekas, lan mbok-menawa uga ndarbèni informasi sabanjuré ngenani buku-buku sing lagi panjenengan golèki:",
        "booksources-invalid-isbn": "ISBN sing diwènèhaké katonané ora valid; priksa kasalahan penyalinan saka sumber asli.",
+       "magiclink-tracking-rfc": "Kaca sing nganggo pranala ajaib RFC",
+       "magiclink-tracking-rfc-desc": "Kaca iki nganggo pranala ajaib RFC. Delengen [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] ngenani carané boyongan.",
+       "magiclink-tracking-pmid": "Kaca nganggo pranala ajaib PMID",
        "specialloguserlabel": "Panampil:",
        "speciallogtitlelabel": "Patujon (judhul utawa panganggo) :",
        "log": "Log",
+       "logeventslist-submit": "Tuduhaké",
        "all-logs-page": "Kabèh log publik",
        "alllogstext": "Gabungan tampilam kabèh log sing ana ing {{SITENAME}}.\nPanjenengan bisa mbatesi tampilan kanthi milih jinis log, jeneng panganggo (sènsitif aksara gedhé/cilik), utawa kaca sing magepokan (uga sènsitif aksara gedhé/cilik).",
        "logempty": "Ora ditemokaké èntri log sing pas.",
        "log-title-wildcard": "Golèk sesirah sing diwiwiti tulisan iki",
        "showhideselectedlogentries": "Tuduhalé/dhelikaké èntri log kapilih",
+       "log-edit-tags": "Besut tag saka isian log sing dipilih",
+       "checkbox-select": "Pilih: $1",
        "checkbox-all": "Kabèh",
        "checkbox-none": "Ora ana",
        "checkbox-invert": "Balèkaké",
        "allpages-hide-redirects": "Dhelikaké alihan",
        "cachedspecial-viewing-cached-ttl": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi lawasé wis $1.",
        "cachedspecial-viewing-cached-ts": "Sampéyan lagi ndelok vèrsi cadhangan saka kaca iki, sing bisa dadi ora padha karo kasunyatan.",
-       "cachedspecial-refresh-now": "Delok sing paling anyar.",
+       "cachedspecial-refresh-now": "Deleng sing paling anyar.",
        "categories": "Kategori",
        "categories-submit": "Tuduhaké",
        "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].",
        "activeusers-count": "$1 {{PLURAL:$1|suntingan|suntingan}} ing {{PLURAL:$3|dina|$3 dina}} pungkasan",
        "activeusers-from": "Tampilna panganggo wiwit saka:",
        "activeusers-groups": "Tuduhaké panganggo sing mlebu golongan:",
+       "activeusers-excludegroups": "Aja lebokaké panganggo sing kalebu golongan:",
        "activeusers-noresult": "Panganggo ora ana.",
        "activeusers-submit": "Tuduhaké panganggo aktif",
        "listgrouprights": "Hak-hak grup panganggo",
        "listgrouprights-rights": "Hak-hak",
        "listgrouprights-helppage": "Help:Hak-hak grup",
        "listgrouprights-members": "(daftar anggota)",
-       "listgrouprights-addgroup": "Bisa nambahaké {{PLURAL:$2|klompok|klompok}}: $1",
-       "listgrouprights-removegroup": "Bisa mbusak {{PLURAL:$2|klompok|klompok}}: $1",
+       "listgrouprights-addgroup": "Tambah {{PLURAL:$2|golongan}}: $1",
+       "listgrouprights-removegroup": "Busak {{PLURAL:$2|golongan}}: $1",
        "listgrouprights-addgroup-all": "Bisa nambahaké kabèh klompok",
        "listgrouprights-removegroup-all": "Bisa mbusak kabèh klompok",
        "listgrouprights-addgroup-self": "Nambahaké {{PLURAL:$2|klompok|klompok}} menyang akuné dhéwé: $1",
        "listgrouprights-removegroup-self": "Mbusak {{PLURAL:$2|klompok|klompok}} saka akuné dhéwé: $1",
        "listgrouprights-addgroup-self-all": "Nambahaké kabèh grup menyang akuné dhéwé",
        "listgrouprights-removegroup-self-all": "Mbusak kabèh klompok saka akuné dhéwé",
+       "listgrouprights-namespaceprotection-header": "Watesan mandala aran",
+       "listgrouprights-namespaceprotection-namespace": "Mandala aran",
+       "listgrouprights-namespaceprotection-restrictedto": "Hak sing ngidinaké panganggo mbesut",
+       "listgrants": "Idin",
+       "listgrants-grant": "Idin",
+       "listgrants-rights": "Hak",
+       "trackingcategories": "Kategori panglacak",
+       "trackingcategories-msg": "Kategori panglacak",
+       "trackingcategories-name": "Jeneng layang",
        "mailnologin": "Ora ana alamat layang e-mail",
        "mailnologintext": "Panjenengan kudu [[Special:UserLogin|mlebu log]] lan duwé alamat layang-èl sing trep ing [[Special:Preferences|pilalané]] panjenengan kanggo nglayangi panganggo liyané.",
        "emailuser": "Kirim e-mail panganggo iki",
        "watch": "Awasi",
        "watchthispage": "Periksa kaca iki",
        "unwatch": "Ora usah ngawasaké manèh",
-       "unwatchthispage": "Batalna olèhé ngawasi kaca iki",
+       "unwatchthispage": "Mandheg ngawasi",
        "notanarticle": "Dudu kaca artikel",
        "notvisiblerev": "Révisi wis dibusak",
        "watchlist-details": "Ngawasaké {{PLURAL:$1|$1 kaca|$1 kaca}}, ora kalebu kaca-kaca dhiskusi.",
        "unprotectedarticle": "nyingkiraké panjagan saka \"[[$1]]\"",
        "movedarticleprotection": "ngalih setèlan rereksan saka \"[[$2]]\" nyang \"[[$1]]\"",
        "protect-title": "Ngowahi tingkatan pangreksan kanggo \"$1\"",
-       "protect-title-notallowed": "Delok undhaké panjagan saka \"$1\"",
+       "protect-title-notallowed": "Deleng tataran rereksan saka \"$1\"",
        "prot_1movedto2": "$1 dialihaké menyang $2",
        "protect-badnamespace-title": "Bilik jeneng sing ora bisa dijagani",
        "protect-badnamespace-text": "Kaca nèng bilik jeneng iki ora bisa dijagani.",
        "undelete-error-long": "Ana kaluputan nalika mbatalaké pambusakan berkas:\n\n$1",
        "undelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi berkas \"<nowiki>$1</nowiki>\" sing wis kabusak ing $2 jam $3?",
        "undelete-show-file-submit": "Ya",
-       "namespace": "Jagat aran:",
+       "namespace": "Mandala aran:",
        "invert": "Balèkaké pilihan",
        "tooltip-invert": "Centhang kothak iki kanggo ndhelikaké owahan saka kaca-kaca nèng njero bilik jeneng kapilih (lan bilik jeneng kakait yèn dicenthang)",
-       "namespace_association": "Jagat aran magepokan",
+       "namespace_association": "Mandala aran magepokan",
        "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih",
        "blanknamespace": "(Pokok)",
        "contributions": "Sumbangan {{GENDER:$1|panganggo}}",
        "ipbreason": "Alesan:",
        "ipbreason-dropdown": "*Alesan umum mblokir\n** Mènèhi informasi palsu\n** Mbusak isi kaca\n** Spam pranala menyang situs njaba\n** Nglebokaké tulisan ngawur ing kaca\n** Tumindak nglècèhaké\n** Ngujar-ujari sawenèh akun\n** Jeneng panganggo ora patut",
        "ipb-hardblock": "Alangi panganggo sing wis mlebu log nyunting saka alamat IP iki",
-       "ipbcreateaccount": "Penggak nggawé akun utawa rékening",
+       "ipbcreateaccount": "Penggak panggawéné akun",
        "ipbemailban": "Penggak panganggo ngirim layang e-mail",
        "ipbenableautoblock": "Blokir alamat IP pungkasan sing dienggo déning pengguna iki sacara otomatis, lan kabèh alamat sabanjuré sing dicoba arep dienggo nyunting.",
        "ipbsubmit": "Kirimna",
        "reblock-logentry": "ngowah setèlan blokir tumrap [[$1]] kanthi wektu kadaluwarsa $2 $3",
        "blocklogtext": "Ing ngisor iki kapacak log pamblokiran lan panjabelan blokir panganggo.\nAlamat IP sing diblokir sacara otomatis ora ana ing daftar iki.\nMangga mirsani [[Special:BlockList|daftar panganggo sing diblokir]] kanggo daftar blokir pungkasan.",
        "unblocklogentry": "njabel blokir \"$1\"",
-       "block-log-flags-anononly": "namung panganggo anonim waé",
-       "block-log-flags-nocreate": "opsi nggawé akun utawa rékening dipatèni",
+       "block-log-flags-anononly": "namung panganggo anonim",
+       "block-log-flags-nocreate": "panggawéné akun dipatèni",
        "block-log-flags-noautoblock": "blokir otomatis dipatèni",
        "block-log-flags-noemail": "e-mail diblokir",
        "block-log-flags-nousertalk": "ora kena mbesut kaca guneman dhéwé",
        "export-download": "Simpen minangka berkas",
        "export-templates": "Kalebu cithakan-cithakan",
        "export-pagelinks": "Lebokaké kaca sing kagayut nyang jeroning:",
+       "export-manual": "Tambah kaca kanthi manual:",
        "allmessages": "Kabèh laporan sistém",
-       "allmessagesname": "Asma (jeneng)",
+       "allmessagesname": "Jeneng",
        "allmessagesdefault": "Tèks baku",
        "allmessagescurrent": "Tèks saiki",
        "allmessagestext": "Iki pratélan layang sistem sing ana ing mandala aran MediaWiki.\nMangga manjing [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Panglokalan MediaWiki] lan [https://translatewiki.net translatewiki.net] manawa panjenengan arep nyumbang ing panglokalan MediaWiki sing asli.",
        "allmessages-prefix": "Saring nganggo ater-ater:",
        "allmessages-language": "Basa:",
        "allmessages-filter-submit": "Tumuju menyang",
+       "allmessages-filter-translate": "Pertal",
        "thumbnail-more": "Gedhèkaké",
        "filemissing": "Barkas ilang",
        "thumbnail_error": "Kaluputan nalika nggawé gambar cilik (''thumbnail''): $1",
        "thumbnail-temp-create": "Ora bisa nggawé berkas gambar mini sawetara",
        "thumbnail-dest-create": "Ora bisa nyimpen bambar mini nèng papan patujon",
        "thumbnail_invalid_params": "Paramèter gambar cilik (''thumbnail'') ora absah",
+       "thumbnail_toobigimagearea": "Barkas kanthi alang-ujur luwih gedhé saka $1",
        "thumbnail_dest_directory": "Ora bisa nggawé dirèktori tujuan",
        "thumbnail_image-type": "Tipe gambar ora didhukung",
        "thumbnail_gd-library": "Konfigurasi pustaka GD ora pepak: fungsi $1 ilang",
        "import": "Impor kaca",
        "importinterwiki": "Impor saka wiki liya",
        "import-interwiki-text": "Pilih sawijining wiki lan irah-irahan kaca sing arep diimpor.\nTanggal révisi lan jeneng panyunting bakal dilestarèkaké.\nKabèh aktivitas impor transwiki bakal dilog ing [[Special:Log/import|log impor]].",
+       "import-interwiki-sourcewiki": "Wiki sumber:",
+       "import-interwiki-sourcepage": "Kaca sumber:",
        "import-interwiki-history": "Tuladen kabèh vèrsi lawas saka kaca iki",
        "import-interwiki-templates": "Katutna kabèh cithakan",
        "import-interwiki-submit": "Impor",
+       "import-mapping-default": "Impor nyang pernah gawan",
+       "import-mapping-namespace": "Impor nyang mandala aran:",
+       "import-mapping-subpage": "Impor minangka anak kaca iki:",
        "import-upload-filename": "Jeneng barkas:",
        "import-comment": "Komentar:",
        "importtext": "Mangga èkspor berkas saka wiki sumber nganggo [[Special:Export|prangkat èkspor]].\nSimpen nèng komputer Sampéyan lan unggaha nèng kéné.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|révisi|révisi}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|révisi}} saka $2",
        "javascripttest": "Panjajalan JavaScript",
+       "javascripttest-pagetext-unknownaction": "Tumindak ora dingertèni: $1",
        "javascripttest-qunit-intro": "Delok [dhokumèntasi panjajalan $1] nèng mediawiki.org.",
        "tooltip-pt-userpage": "Kaca {{GENDER:|panganggoning sampéyan}}",
        "tooltip-pt-anonuserpage": "Kaca panganggo IP panjenengan",
        "tooltip-pt-preferences": "Pilih-pilihaning {{GENDER:|sampéyan}}",
        "tooltip-pt-watchlist": "Pratélaning kaca sing sampéyan awasi owah-owahané",
        "tooltip-pt-mycontris": "Pratélaning sumbanganing {{GENDER:|sampéyan}}",
-       "tooltip-pt-login": "Sampéyan prayogané mlebu masiya ora kudu",
+       "tooltip-pt-anoncontribs": "Pratélan besutané alamat IP iki",
+       "tooltip-pt-login": "Panjenengan prayogané mlebu log, sanadyan ora kudu",
+       "tooltip-pt-login-private": "Panjenengan kudu mlebu log supaya bisa nganggo wiki iki",
        "tooltip-pt-logout": "Metu",
-       "tooltip-pt-createaccount": "Sampéyan prayogané gawé akun lan mlebu masiya ora kudu",
-       "tooltip-ca-talk": "Pirembug ngenani kaca isi",
+       "tooltip-pt-createaccount": "Panjenengan prayogané nggawé akun lan mlebu log, sanadyan ora kudu",
+       "tooltip-ca-talk": "Rembugan ngenani kaca isi",
        "tooltip-ca-edit": "Besut kaca iki",
        "tooltip-ca-addsection": "Miwiti pérangan anyar",
        "tooltip-ca-viewsource": "Kaca iki direksa. \nSampéyan bisa ndeleng sumberé",
-       "tooltip-ca-history": "Owahaning kaca iki sadurungé",
+       "tooltip-ca-history": "Owahan sadurungé saka kaca iki",
        "tooltip-ca-protect": "Reksa kaca iki",
        "tooltip-ca-unprotect": "Ganti panjagan kaca iki",
        "tooltip-ca-delete": "Busak kaca iki",
        "tooltip-p-logo": "Menyang tepas",
        "tooltip-n-mainpage": "Menyang tepas",
        "tooltip-n-mainpage-description": "Menyang tepas",
-       "tooltip-n-portal": "Bab proyèk, apa sing bisa sampéyan garap, ana ing endi saprelu golèk apa-apa",
-       "tooltip-n-currentevents": "Temokaké katerangan latar wuri saka kadadéan saiki",
+       "tooltip-n-portal": "Ngenani proyèk, apa sing bisa panjenengan garap, lang ing endi saprelu golèk apa-apa",
+       "tooltip-n-currentevents": "Golèk katerangan latar wuri saka kadadéan saiki",
        "tooltip-n-recentchanges": "Pratélaning owah-owahan pungkasan sajeroning wiki.",
-       "tooltip-n-randompage": "Mot waton kaca",
+       "tooltip-n-randompage": "Mot sembarang kaca",
        "tooltip-n-help": "Papan kanggo golèk weruh",
-       "tooltip-t-whatlinkshere": "Pratélaning kabèh kaca wiki sing nggayut mréné",
+       "tooltip-t-whatlinkshere": "Pratélané kabèh kaca wiki sing nggayut mréné",
        "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki",
        "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki",
        "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki",
        "tooltip-t-contributions": "Pratélaning sumbangan {{GENDER:$1|panganggo iki}}",
-       "tooltip-t-emailuser": "Kirimna e-mail menyang panganggo iki",
+       "tooltip-t-emailuser": "Kirimi layang-èl nyang {{GENDER:$1|panganggo iki}}",
+       "tooltip-t-info": "Katerangan liyané ngenani kaca iki",
        "tooltip-t-upload": "Unggah barkas",
        "tooltip-t-specialpages": "Pratélaning kabèh kaca mirunggan",
        "tooltip-t-print": "Vèrsi cithak kaca iki",
        "tooltip-ca-nstab-category": "Deleng kaca kategori",
        "tooltip-minoredit": "Tandhani iki yèn besutan cilik",
        "tooltip-save": "Simpen owah-owahaning sampéyan",
+       "tooltip-publish": "Babar owahané panjenengan",
        "tooltip-preview": "Pratuduhing owah-owahaning sampéyan. Anggoa cara iki sadurungé nyimpen.",
        "tooltip-diff": "Tuduhaké owah-owahan endi sing sampéyan gawé tumrap tulisan iki",
        "tooltip-compareselectedversions": "Delengen prabédan antara rong vèrsi kaca iki sing dipilih.",
        "anonymous": "{{PLURAL:$1|Panganggo|panganggo}} anon ing {{SITENAME}}.",
        "siteuser": "Panganggo {{SITENAME}} $1",
        "anonuser": "Panganggo anonim {{SITENAME}} $1",
-       "lastmodifiedatby": "Kaca iki pungkasan diowahi  $2, $1 déning $3.",
+       "lastmodifiedatby": "Kaca iki pungkasan diowahi pukul $2, $1 déning $3.",
        "othercontribs": "Adhedhasar karyané $1.",
        "others": "liya-liyané",
-       "siteusers": "{{PLURAL:$2|Panganggo|Panganggo-panganggo}} {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|Panganggo}}|Panganggo}} {{SITENAME}} $1",
        "anonusers": "{{PLURAL:$2|Panganggo|Panganggo}} anonim {{SITENAME}} $1",
        "creditspage": "Informasi para panulis kaca",
        "nocredits": "Ora ana informasi ngenani para panulis ing kaca iki.",
        "pageinfo-length": "Panjang halaman (dalam bita)",
        "pageinfo-article-id": "ID kaca",
        "pageinfo-language": "Basaning isining kaca",
+       "pageinfo-language-change": "owah",
        "pageinfo-content-model": "Model isi kaca",
+       "pageinfo-content-model-change": "owah",
        "pageinfo-robot-policy": "Diindeks karo robot",
        "pageinfo-robot-index": "Entuk",
        "pageinfo-robot-noindex": "Ora entuk",
        "pageinfo-watchers": "Cacahé pangawas kaca",
+       "pageinfo-visiting-watchers": "Cacahé pandeleng kaca sing nekani besutan anyar",
        "pageinfo-few-watchers": "Kurang seka $1 {{PLURAL:$1|wong tilik|wong tilik}}",
        "pageinfo-redirects-name": "Jumlah pangalihan menyang kaca iki",
        "pageinfo-subpages-name": "Subhalaman halaman ini",
        "markedaspatrollederror": "Ora bisa awèh tandha wis dipatroli",
        "markedaspatrollederrortext": "Panjenengan kudu nentokaké sawijining révisi kanggo ditandhani minangka sing dipatroli.",
        "markedaspatrollederror-noautopatrol": "Panjenengan ora pareng nandhani suntingan panjenengan dhéwé minangka dipatroli.",
-       "markedaspatrollednotify": "Perubahan $1 telah dipatroli.",
+       "markedaspatrollednotify": "Owahan $1 wis dipatroli.",
        "markedaspatrollederrornotify": "Penanda patroli gagal dibuat.",
        "patrol-log-page": "Log patroli",
        "patrol-log-header": "Iki log revisi sing wis dipatroli.",
        "exif-primarychromaticities": "Kromatisitas werna primer",
        "exif-ycbcrcoefficients": "Koèfisièn matriks transformasi papan werna",
        "exif-referenceblackwhite": "Wiji réferènsi pasangan ireng putih",
-       "exif-datetime": "Tanggal lan tabuh owahing barkas",
+       "exif-datetime": "Tanggal lan tabuh owahé barkas",
        "exif-imagedescription": "Sesirah gambar",
        "exif-make": "Produsèn kamera",
        "exif-model": "Modhèl kaméra",
        "exif-attributionurl": "Nalika nganggo manèh karya iki, mangga ubungaké nèng",
        "exif-preferredattributionname": "Nalika nganggo manèh karya iki, mangga awèhi krèdit",
        "exif-pngfilecomment": "Tanggepan berkas PNG",
-       "exif-disclaimer": "Pamaidonan",
+       "exif-disclaimer": "Sélakan",
        "exif-contentwarning": "Pèngetan kontèn",
        "exif-giffilecomment": "Tanggepan berkas GIF",
        "exif-intellectualgenre": "Jinis barang",
        "confirmemail_body": "Sawijining wong, mbokmenawa panjenengan dhéwé, saka alamat IP $1, wis ndaftaraké akun \"$2\" mawa alamat e-mail iki ing {{SITENAME}}. Bukaka pranala iki ing panjlajah wèb panjenengan.\n\n$3\n\nYèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo mbatalaké konfirmasi alamat e-mail:\n\n$5\n\nKonfirmasi iki bakal kadaluwarsa ing $4.",
        "confirmemail_body_changed": "Sawijining wong, mbokmenawa panjenengan dhéwé, saka alamat IP $1, wis ndaftaraké akun \"$2\" mawa alamat e-mail iki ing {{SITENAME}}. Bukaka pranala iki ing panjlajah wèb panjenengan.\n\n$3\n\nYèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo mbatalaké konfirmasi alamat e-mail:\n\n$5\n\nKonfirmasi iki bakal kadaluwarsa ing $4.",
        "confirmemail_body_set": "Sawijining wong, mbokmenawa panjenengan dhéwé, saka alamat IP $1, wis ndaftaraké akun \"$2\" mawa alamat e-mail iki ing {{SITENAME}}. Bukaka pranala iki ing panjlajah wèb panjenengan.\n\n$3\n\nYèn panjenengan *ora tau* ndaftar akun iki, tutna pranala ing ngisor iki kanggo mbatalaké konfirmasi alamat e-mail:\n\n$5\n\nKonfirmasi iki bakal kadaluwarsa ing $4.",
-       "confirmemail_invalidated": "Pandhedhesan (konfirmasi) alamat e-mail batal",
-       "invalidateemail": "Batalna pandhedhesan (konfirmasi) e-mail",
+       "confirmemail_invalidated": "Konfirmasi alamat layang-èl wurung",
+       "invalidateemail": "Wurung konfirmasi layang-èl",
        "scarytranscludedisabled": "[Transklusi cithakan interwiki dipatèni]",
        "scarytranscludefailed": "[Olèhé njupuk cithakan $1 gagal]",
        "scarytranscludefailed-httpstatus": "[Pengambilan templat $1 gagal: HTTP $2]",
        "htmlform-int-toohigh": "Aji sing panjenengan lebokaké kegedhèn ngluwihi aji maksimum $1",
        "htmlform-required": "Nilé iki dibutuhaké",
        "htmlform-submit": "Kirim",
-       "htmlform-reset": "Batalna pangowahan",
+       "htmlform-reset": "Balèkaké owahan",
        "htmlform-selectorother-other": "Liya",
        "htmlform-no": "Ora",
        "htmlform-yes": "Iya",
        "feedback-bugcheck": "Apik! Pesthèké kuwi dudu sawijining [$1 bug sing dingertèni].",
        "feedback-bugnew": "Aku wis mriksa. Kandakaké bug anyar",
        "feedback-bugornote": "Yèn Sampéyan siap njelasaké masalah tèhnis kanthi rinci mangga [$1 laporaké bug].\nUtawa, Sampéyan bisa nganggo pormulir gampang ngisor. Tanggepan Sampéyan bakal ditambahaké nèng kaca \"[$3 $2]\", bebarengan karo jeneng panganggo Sampéyan lan pramban sing Sampéyan anggo.",
-       "feedback-cancel": "Batal",
+       "feedback-cancel": "Wurung",
        "feedback-close": "Rampung",
        "feedback-error1": "Kasalahan: Asil ora dikenal saka API",
        "feedback-error2": "Cacad: Gagal mbesut",
index 0337747..435bae0 100644 (file)
        "title-invalid-talk-namespace": "ಮನವಿ ಮಾಡಲಾದ ಪುಟದ ಶೀರ್ಷಿಕೆಯು ಒಂದು ಅಸ್ತಿತ್ವದಲ್ಲಿರದೆ ಇರುವ ಮಾತಿನ ಪುಟವನ್ನು ಸೂಚಿಸುತ್ತದೆ.",
        "title-invalid-characters": "ಮನವಿ ಮಾಡಲಾದ ಪುಟದ ಶೀರ್ಷಿಕೆಯು ಅಮಾನ್ಯವಾದ ಅಕ್ಷರಗಳನ್ನು ಹೊಂದಿದೆ: \"$1\".",
        "title-invalid-relative": "ಶೀರ್ಷಿಕೆಯು ಒಂದು ಸಾಂದರ್ಭಿಕ ಮಾರ್ಗವಾಗಿರುತ್ತದೆ. ಸಾಂಧರ್ಭಿಕ ಪುಟದ ಶೀರ್ಷಿಕೆಗಳು (./, ../) ಅಮಾನ್ಯವಾಗಿರುತ್ತದೆ, ಏಕೆಂದರೆ ಬಳಕೆದಾರರ ಜಾಲವೀಕ್ಷಕದಿಂದ ಅವುಗಳನ್ನು ತಲುಪುವುದು ಸಾಮಾನ್ಯವಾಗಿ ಅಸಾಧ್ಯವಾಗಿರುತ್ತದೆ.",
+       "title-invalid-magic-tilde": "ವಿನಂತಿಸಿದ ಪುಟ ಶೀರ್ಷಿಕೆಯು ಅಮಾನ್ಯವಾದ ಮ್ಯಾಜಿಕ್ ಟಿಲ್ಡ್ ಅನುಕ್ರಮವನ್ನು ಹೊಂದಿದೆ (<nowiki> ~~~~ </nowiki>).",
        "title-invalid-leading-colon": "ವಿನಂತಿಸಿದ ಪುಟ ಶೀರ್ಷಿಕೆಯು ಆರಂಭದಲ್ಲಿ ಅಮಾನ್ಯವಾದ ಕೊಲೊನ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ.",
        "perfcached": "ಈ ಕೆಳಗಿನ ಮಾಹಿತಿಯು cache ಇಂದ ಬಂದಿರುವುದು ಮತ್ತು ಪ್ರಸಕ್ತ ಸ್ಥಿತಿಯನ್ನು ಬಿಂಬಿಸದಿರಬಹುದು. ಹೆಚ್ಚಂದರೆ  {{PLURAL:$1|one result is|$1 results are}} cacheನಲ್ಲಿ ಲಭ್ಯವಿರುವುದು",
        "perfcachedts": "ಈ ಕೆಳಗಿನ ಮಾಹಿತಿ cache ಆಗಿರುವುದು, ಮತ್ತು ಇದರ ಕೊನೆಯ ಬದಲಾವಣೆ ಆಗಿರುವುದು $1. ಹೆಚ್ಚಂದರೆ  {{PLURAL:$4|one result is|$4 results are}} cacheನಲ್ಲಿ ಲಭ್ಯವಿರುವುದು",
        "changepassword-success": "ನಿಮ್ಮ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ!",
        "changepassword-throttled": "ನೀವು ಬಹಳ ಸಾರಿ ಲಾಗ್ ಇನ್ ಆಗಲು ಪ್ರಯತ್ನಿಸಿರುವಿರಿ. \nಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು $1 ಕಾಯಬೇಕು.",
        "botpasswords": "ಬಾಟ್ ಪ್ರವೇಶ ಪದಗಳು",
+       "botpasswords-disabled": "ಬಾಟ್ ಪ್ರವೇಶಪದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
+       "botpasswords-no-central-id": "ಬಾಟ್ ಪ್ರವೇಶಪದ ಬಳಸಲು, ನೀವು ಕೇಂದ್ರೀಕೃತ ಖಾತೆಗೆ ಲಾಗ್ ಇನ್ ಆಗಿರಬೇಕು.",
+       "botpasswords-existing": "ಆಸ್ಥಿತ್ವದಲ್ಲಿರುವ ಬಾಟ್ ಪ್ರವೇಶಪದ",
+       "botpasswords-createnew": "ಹೊಸ ಬಾಟ್ ಪ್ರವೇಶಪದ ರಚಿಸಿ",
+       "botpasswords-editexisting": "ಆಸ್ಥಿತ್ವದಲ್ಲಿರುವ ಬಾಟ್ ಪ್ರವೇಶಪದ ಸ೦ಪಾದಿಸಿ",
        "resetpass_forbidden": "ಪ್ರವೇಶಪದಗಳನ್ನು ಬದಲಾಯಿಸುವಂತಿಲ್ಲ.",
        "resetpass-no-info": "ನೀವು ಈ ಪುಟವನ್ನು ನೇರತಲುಪಲು ಲಾಗಿನ್ ಆಗಿರುವುದು ಆವಶ್ಯಕ.",
        "resetpass-submit-loggedin": "ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸು",
index 1241e44..77f20dd 100644 (file)
        "editingsection": "$1 편집하기 (부분)",
        "editingcomment": "$1 편집하기 (덧붙이기)",
        "editconflict": "편집 충돌: $1",
-       "explainconflict": "문서를 편집하는 도중에 누군가 이 문서를 고쳤습니다.\n위쪽의 문서가 지금 바뀐 문서이고, 아래쪽의 문서가 당신이 편집한 문서입니다.\n아래쪽의 내용을 위쪽에 적절히 합쳐 주시기 바랍니다.\n\"$1\"을 누르면 '''위쪽의 편집 내역만''' 저장됩니다.",
+       "explainconflict": "문서를 편집하는 도중에 누군가 이 문서를 고쳤습니다.\n위쪽의 문서가 지금 바뀐 문서이고, 아래쪽의 문서가 당신이 편집한 문서입니다.\n아래쪽의 내용을 위쪽에 적절히 합쳐 주시기 바랍니다.\n\"$1\"을 누르면 위쪽의 <strong>편집 내역만</strong> 저장됩니다.",
        "yourtext": "당신의 편집",
        "storedversion": "현재 문서",
        "nonunicodebrowser": "<strong>경고: 브라우저가 유니코드를 지원하지 않습니다.</strong>\n문서를 안전하게 편집할 수 있도록 다음의 우회 방안이 제공됩니다: 편집 상자에서 아스키가 아닌 문자가 16진수 코드로 나타납니다.",
        "rcfilters-highlightmenu-help": "이 속성을 강조할 색을 선택하십시오",
        "rcfilters-filterlist-noresults": "필터를 찾을 수 없습니다",
        "rcfilters-noresults-conflict": "검색 조건이 충돌하기 때문에 결과를 찾을 수 없습니다",
+       "rcfilters-state-message-subset": "필터의 결과가 다음의 범위가 더 넓은 {{PLURAL:$2|필터}}의 결과에 포함되기 때문에 이 필터는 효력이 없습니다 (구별을 위해 강조해 보십시오): $1",
        "rcfilters-state-message-fullcoverage": "한 그룹의 모든 필터를 선택하는 것은 아무 것도 선택하지 않는 것과 동일하므로 이 필터는 효력이 없습니다. 그룹은 다음을 포함합니다: $1",
        "rcfilters-filtergroup-registration": "사용자 등록",
        "rcfilters-filter-registered-label": "등록됨",
        "rcfilters-hideminor-conflicts-typeofchange": "특정한 종류의 변경사항은 \"사소한 편집\"으로 지정할 수 없으므로 이 필터는 다음 유형의 변경사항 필터와 충돌합니다: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "이 유형의 변경사항 필터는 \"사소한 편집\" 필터와 충돌합니다. 특정한 종류의 변경사항은 \"사소한 편집\"으로 지정할 수 없습니다.",
        "rcfilters-filtergroup-lastRevision": "마지막 판",
+       "rcfilters-filter-lastrevision-label": "마지막 판",
        "rcfilters-filter-lastrevision-description": "문서의 최근 변경사항입니다.",
+       "rcfilters-filter-previousrevision-label": "이전 판",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
        "rclistfromreset": "날짜 선택 초기화",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "rawhtml-notallowed": "&lt;html&gt; 태그는 일반 페이지 밖에서는 사용할 수 없습니다.",
        "gotointerwiki": "{{SITENAME}}을(를) 떠납니다",
        "gotointerwiki-invalid": "지정된 제목이 올바르지 않습니다.",
-       "gotointerwiki-external": "다른 웹사이트 [[$2]]을(를) 방문하기 위해 {{SITENAME}}을(를) 떠나려고 합니다.\n\n[$1 $1(으)로 계속 진행하려면 여기를 눌러주세요].",
+       "gotointerwiki-external": "다른 웹사이트 [[$2]]을(를) 방문하기 위해, {{SITENAME}}을(를) 떠나려고 합니다.\n\n'''[$1 $1(으)로 계속 진행]'''",
        "undelete-cantedit": "이 문서를 편집할 권한이 없으므로 이 문서를 복구할 수 없습니다.",
        "undelete-cantcreate": "이 이름으로 된 문서가 없고 이 문서를 만들 권한이 없으므로 이 문서를 복구할 수 없습니다."
 }
index cb76164..63b2c75 100644 (file)
        "bydate": "li gor dîrokê",
        "sp-newimages-showfrom": "Daneyên nû ji dema $1, saet $2 ve bibîne",
        "seconds-abbrev": "$1 s",
+       "minutes-abbrev": "$1 d",
        "hours-abbrev": "$1 st",
        "days-abbrev": "$1 r",
        "seconds": "{{PLURAL:$1|$1 saniye}}",
index 1399493..630fd31 100644 (file)
        "rcfilters-savedqueries-defaultlabel": "Gespäichert Filteren",
        "rcfilters-savedqueries-rename": "Ëmbenennen",
        "rcfilters-savedqueries-setdefault": "Als Standard festleeën",
+       "rcfilters-savedqueries-unsetdefault": "Als Standard ewechhuelen",
        "rcfilters-savedqueries-remove": "Ewechhuelen",
        "rcfilters-savedqueries-new-name-label": "Numm",
+       "rcfilters-savedqueries-apply-label": "Séiere Link uleeën",
        "rcfilters-savedqueries-cancel-label": "Ofbriechen",
+       "rcfilters-savedqueries-add-new-title": "Filteren als séiere Link späicheren",
        "rcfilters-restore-default-filters": "Standardfiltere restauréieren",
        "rcfilters-clear-all-filters": "All Filteren eidelmaachen",
        "rcfilters-search-placeholder": "Rezent Ännerunge filteren (duerchsichen oder ufänke mat tippen)",
        "rcfilters-invalid-filter": "Net valabele Filter",
+       "rcfilters-empty-filter": "Keen aktive Filter. All Kontributioune gi gewisen.",
        "rcfilters-filterlist-title": "Filteren",
        "rcfilters-filterlist-whatsthis": "Wat ass dat?",
        "rcfilters-highlightbutton-title": "Resultater ervirhiewen",
        "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
        "rcfilters-filterlist-noresults": "Keng Filtere fonnt",
        "rcfilters-noresults-conflict": "Näischt fonnt well d'Sichcritère sech widderspriechen",
+       "rcfilters-filter-registered-label": "Ugemellt",
+       "rcfilters-filter-unregistered-label": "Net-ugemellt",
        "rcfilters-filter-unregistered-description": "Auteuren déi net ageloggt sinn.",
        "rcfilters-filter-editsbyself-label": "Ännerunge vun Iech",
        "rcfilters-filter-editsbyself-description": "Är eegen Ännerungen.",
        "rcfilters-filter-user-experience-level-learner-description": "Méi Erfarung wéi ''Nei Benotzer'' awer manner wéi ''Erfuere Benotzer''.",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfuere Benotzer.",
        "rcfilters-filter-user-experience-level-experienced-description": "Méi wéi 30 Deeg Aktivitéit a méi wéi 500 Ännerungen.",
+       "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-humans-label": "Mënsch (kee Bot)",
        "rcfilters-filtergroup-reviewstatus": "Status nokucken",
        "rcfilters-filter-patrolled-label": "Nogekuckt",
        "rcfilters-filter-watchlist-notwatched-description": "Alles ausser Ännerungen op de Säite vun Ärer Iwwerwaachungslëscht.",
        "rcfilters-filter-pageedits-label": "Säitenännerungen",
        "rcfilters-filter-newpages-label": "Ugeluechte Säiten",
+       "rcfilters-filter-categorization-label": "Ännerunge vun de Kategorien:",
        "rcfilters-filter-logactions-label": "Protokolléiert Aktiounen",
        "rcfilters-filtergroup-lastRevision": "Lescht Versioun",
        "rcfilters-filter-lastrevision-label": "Lescht Versioun",
        "pageswithprop": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-legend": "Säite mat enger Säiteneegeschaft",
        "pageswithprop-text": "Op dëser Säit sti Säiten déi eng speziell Säiteneegeschaft benotzen.",
-       "pageswithprop-prop": "Numm vun der Eegeschaft:",
+       "pageswithprop-prop": "Numm vun der Eegenschaft:",
        "pageswithprop-submit": "Lass",
        "pageswithprop-prophidden-long": "Wäert vun der laanger Texteegeschaft verstoppt ($1)",
        "doubleredirects": "Duebel Viruleedungen",
        "restrictionsfield-label": "Zougeloossen IP-Beräicher:",
        "revid": "Versioun $1",
        "gotointerwiki": "{{SITENAME}} verloossen",
-       "gotointerwiki-invalid": "De spezifizéierten Titel war net valabel.",
-       "gotointerwiki-external": "Dir sidd am Gaang {{SITENAME}} ze verloossen fir [[$2]] zu besichen, deen een externen Internetsite ass.\n\n[$1 Hei klicke fir op $1 virunzefueren].",
+       "gotointerwiki-invalid": "De spezifizéierten Titel ass net valabel.",
+       "gotointerwiki-external": "Dir sidd am Gaang {{SITENAME}} ze verloosse fir [[$2]] ze besichen, deen een externen Internetsite ass.\n\n'''[$1 Hei klicke fir op $1 virunzefueren]'''",
        "undelete-cantedit": "Dir kënnt dës Säit net restauréiere well Dir dës Säit net änneren däerft.",
        "undelete-cantcreate": "Dir kënnt dës Säit net restauréieren well et elo keng Säit mat deem Numm gëtt a well Dir dës Säit net uleeën däerft."
 }
index b13b550..2798367 100644 (file)
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veddi e [[Special:NewPages|neuve paggine]])",
        "recentchanges-submit": "Fanni vedde",
+       "rcfilters-filterlist-title": "Filtri",
+       "rcfilters-filterlist-whatsthis": "Cos'o l'è sto chì?",
+       "rcfilters-filterlist-feedbacklink": "Lascia un commento in sciâ noeuva fonçionalitæ sperimentale",
+       "rcfilters-highlightbutton-title": "Evidençia risultæ",
+       "rcfilters-highlightmenu-title": "Seleçion-a un cô",
+       "rcfilters-highlightmenu-help": "Seleçion-a un cô pe evidençiâ sta propietæ",
+       "rcfilters-filterlist-noresults": "Nisciun filtro atrovou",
+       "rcfilters-noresults-conflict": "Nisciun risultou trovou percose i critei de çerchia son in conflito",
+       "rcfilters-state-message-subset": "Sto filtro chì o no g'ha effetto percose i so risultæ son incluxi con quelli  {{PLURAL:$2|do seguente filtro ciu ampio|di  seguenti filtri ciu ampi}} (proeuva a evidençiâli pe distinguili): $1",
        "rcnotefrom": "Chì sotta gh'è {{PLURAL:$5|o cangiamento|i cangiamenti}} a partî da <strong>$3, $4</strong> (scin a '''$1''').",
        "rclistfrom": "Fanni vedde e modiffiche apportæ partindo da $3 $2",
        "rcshowhideminor": "$1 cangiaménti minoî",
index a7d9b1a..e398d09 100644 (file)
        "category_header": "「$1」中之頁",
        "subcategories": "次類",
        "category-media-header": "「$1」中之媒",
-       "category-empty": "''無頁或媒也。''",
+       "category-empty": "<em>斯類無屬也。</em>",
        "hidden-categories": "$1隱類",
        "hidden-category-category": "隱類",
        "category-subcat-count": "{{PLURAL:$2|類有子類如下。|類有$1子類,轄下子類數$2也。}}",
        "poolcounter-usage-error": "用誤:$1",
        "aboutsite": "述{{SITENAME}}",
        "aboutpage": "Project:述",
-       "copyright": "文奉$1行。",
+       "copyright": "若無他述,諸文皆奉$1以行。",
        "copyrightpage": "{{ns:project}}:版權",
        "currentevents": "世事",
        "currentevents-url": "Wikipedia:世事",
        "previousrevision": "←舊",
        "nextrevision": "新→",
        "currentrevisionlink": "今審",
-       "cur": "今",
+       "cur": "今",
        "next": "後",
        "last": "前",
        "page_first": "首",
        "categories": "類",
        "categoriespagetext": "大典{{PLURAL:$1|類中}}有頁或媒。\n[[Special:UnusedCategories|未類]]無示之。\n閱[[Special:WantedCategories|需類]]也。",
        "categoriesfrom": "示此項起之類:",
-       "deletedcontributions": "å·²å\88ªä¹\8bç©\8d",
+       "deletedcontributions": "å·²å\8e»ä¹\8bæ\96\87",
        "deletedcontributions-title": "所棄之事",
        "sp-deletedcontributions-contribs": "積",
        "linksearch": "尋網連",
        "undeleteviewlink": "察",
        "undeleteinvert": "反相",
        "undeletecomment": "因:",
-       "cannotundelete": "無以還檔;或復矣。",
+       "cannotundelete": "有頁未能復還,或皆不可還:\n$1",
        "undeletedpage": "'''$1還矣'''\n近刪新還,見[[Special:Log/delete|刪還誌]]。",
        "undelete-header": "欲覽近刪,見[[Special:Log/delete|誌刪]]。",
        "undelete-search-title": "尋刪頁",
        "pageinfo-robot-index": "可",
        "pageinfo-robot-noindex": "不可",
        "pageinfo-toolboxlink": "文訊",
-       "markaspatrolleddiff": "派哨",
-       "markaspatrolledtext": "å\93¨æ­¤å ±",
-       "markedaspatrolled": "派哨",
-       "markedaspatrolledtext": "[[:$1]]之審哨矣。",
+       "markaspatrolleddiff": "審此本",
+       "markaspatrolledtext": "審此æ\96\87",
+       "markedaspatrolled": "審此文",
+       "markedaspatrolledtext": "[[:$1]]之本審矣。",
        "rcpatroldisabled": "不哨近易",
        "rcpatroldisabledtext": "近易之哨,未准行也。",
-       "markedaspatrollederror": "哨有誤",
-       "markedaspatrollederrortext": "揀一以哨。",
-       "markedaspatrollederror-noautopatrol": "己易不可。",
+       "markedaspatrollederror": "無以定審",
+       "markedaspatrollederrortext": "爾當於誌中,擇一以為審。",
+       "markedaspatrollederror-noautopatrol": "己易不可自審。",
        "patrol-log-page": "誌哨",
        "patrol-log-header": "此乃誌哨也。",
        "log-show-hide-patrol": "$1誌巡",
index f72e404..6104b95 100644 (file)
@@ -18,6 +18,7 @@
        "tog-hideminor": "Пытартыш тӧрлатымаш-влак радам гыч изи тӧрлатымаш-влакым кораҥдаш",
        "tog-hidepatrolled": "Тергыме тӧрлатымаш-влакым пытартыш тӧрлатымаш лӱмерыште шылташ",
        "tog-newpageshidepatrolled": "Тергыме лаштык-влакым у лаштык лӱмерыште шылташ",
+       "tog-hidecategorization": "Лаштык категоризацийым шылташ",
        "tog-extendwatchlist": "Чыла вашталтышым, а пытартыш гына огылым ончыкташлан эскерыме лӱмерым кугемдаш",
        "tog-usenewrc": "У тӧрлатымаш саемдыме лӱмерым кучылташ (JavaScript кӱлеш)",
        "tog-numberheadings": "Вуймутым автоматик йӧн дене радамлаш",
@@ -35,6 +36,7 @@
        "tog-watchlisthideown": "Эскерыме лӱмер гыч мыйын тӧрлатымашым кораҥдаш",
        "tog-watchlisthidebots": "Эскерыме лӱмер гыч бот-влакын тӧрлатымашыштым кораҥдаш",
        "tog-watchlisthideminor": "Эскерыме лӱмер гыч изи тӧрлатымаш-влакым кораҥдаш",
+       "tog-watchlisthidecategorization": "Лаштык категоризацийым шылташ",
        "tog-ccmeonemails": "Моло ушнышо-влаклан колтымо серышын копийжым мыламат колташ",
        "tog-diffonly": "Кок версийым таҥастарыме годым лаштыкыште возымым ончыкташ огыл",
        "tog-showhiddencats": "Шылтыме категорийым ончыкташ",
        "qbfind": "Муаш",
        "qbedit": "Тӧрлаташ",
        "qbpageoptions": "Тиде лаштык",
-       "qbmyoptions": "Ð\9cÑ\8bйÑ\8bн Ð»Ð°Ñ\88Ñ\82Ñ\8bк-влак",
+       "qbmyoptions": "Ð\9cÑ\8bйÑ\8bн ÐºÐµÐ»Ñ\8bÑ\88Ñ\82аÑ\80Ñ\8bмаÑ\88ем",
        "faq": "ЧӱВаЙо (Чӱчкыдын вашлиялтше йодыш-влак)",
        "actions": "Сомылка-влак",
        "namespaces": "Лӱм-влак ора",
        "newpage": "У лаштык",
        "talkpage": "Тиде лаштыкым каҥашаш",
        "talkpagelinktext": "Каҥашымаш",
-       "specialpage": "Ð\9bӱмÑ\8bн Ñ\8bÑ\88Ñ\82Ñ\8bме лаштык",
+       "specialpage": "СпеÑ\86лаштык",
        "personaltools": "Паша ӱзгар",
        "articlepage": "Лаштыкыште возымым ончыкташ",
        "talk": "Каҥашымаш",
        "nstab-main": "Лаштык",
        "nstab-user": "Пайдаланышын лаштыкше",
        "nstab-media": "Мультимедиа",
-       "nstab-special": "Ð\9bӱмÑ\8bн Ñ\8bÑ\88Ñ\82Ñ\8bме лаштык",
+       "nstab-special": "СпеÑ\86лаштык",
        "nstab-project": "Проект нерген",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Увертыш",
        "searchprofile-articles-tooltip": "Кычалмаш $1ште",
        "searchprofile-images-tooltip": "Файл-влакым кычалмаш",
        "searchprofile-everything-tooltip": "Чыла лаштык-влакыште кычалаш (каҥашымаш лаштык-влакыштат)",
-       "searchprofile-advanced-tooltip": "Ð\98Ñ\81каÑ\82Ñ\8c Ð² Ð·Ð°Ð´Ð°Ð½Ð½Ñ\8bÑ\85 Ð¿Ñ\80оÑ\81Ñ\82Ñ\80анÑ\81Ñ\82ваÑ\85 Ð¸Ð¼Ñ\91н",
+       "searchprofile-advanced-tooltip": "Ð\9eйÑ\8bÑ\80Ñ\8bмо Ñ\82Ó±Ñ\88калаÑ\88Ñ\82е ÐºÑ\8bÑ\87алаÑ\88",
        "search-result-size": "$1 ({{PLURAL:$2|1 мут|$2 мут}})",
        "search-result-category-size": "$1 {{PLURAL:$1|вхождение|вхождения|вхождений}} ($2 {{PLURAL:$2|подкатегория|подкатегории|подкатегорий}}, $3 {{PLURAL:$3|файл|файла|файлов}}).",
        "search-redirect": "($1 гыч колтымо)",
        "recentchanges-label-minor": "Тиде изи тӧрлатымаш",
        "recentchanges-label-bot": "Тиде тӧрлатымашым бот ыштен",
        "recentchanges-label-unpatrolled": "Тиде тӧрлатымашым нигӧ терген огыл",
+       "recentchanges-label-plusminus": "Мыняр байтлан лаштык вашталтын",
        "recentchanges-legend-heading": "<strong>Легенде:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (тыгак [[Special:NewPages|у лаштык-влак лӱмерым]] ончо)",
        "rcnotefrom": "Ниже перечислены изменения с '''$2''' (не более '''$1''').",
        "rcshowhidepatr": "$1 тергыме тӧрлатымаш",
        "rcshowhidemine": "Мыйын тӧрлымым $1",
        "rcshowhidemine-hide": "шылташ",
+       "rcshowhidecategorization": "Лаштык категоризацийым $1",
        "rclinks": "Пытартыш $2 кечылан $1 вашталтымашым ончыкташ",
        "diff": "ойырт.",
        "hist": "эрт.",
        "filedelete-submit": "Шӧраш",
        "filedelete-otherreason": "Вес/ешартыш амал:",
        "filedelete-reason-otherlist": "Вес амал",
+       "unwatchedpages": "Эскерыдыме лаштык-влак",
        "listredirects": "Вес вере колтымаш-влак",
+       "unusedtemplates": "Кучылтдымо кышкар-влак",
        "randompage": "Чокым лаштык",
        "statistics": "Иктешлымаш",
        "statistics-header-pages": "Лаштык коклам иктешлымаш",
        "statistics-header-users": "Пайдаланыше коклам иктешлымаш",
        "statistics-header-hooks": "Тӱрлӧ коклам иктешлымаш",
        "statistics-articles": "Возымо лаштык-влак",
-       "statistics-pages": "Лаштык-влак",
+       "statistics-pages": "Лаштык",
        "statistics-pages-desc": "Чыла лаштык-влак (каҥашымаш-влак, вес вере колтымаш-влак да тулеч моло)",
        "statistics-files": "Пуртымо файл-влак",
        "statistics-edits": "{{SITENAME}} лаштыкым чылажге мыняр гана тӧрлатыме",
        "brokenredirects": "Пудыртымо вес вере колтымаш-влак",
        "brokenredirects-edit": "тӧрлаташ",
        "brokenredirects-delete": "шӧраш",
+       "withoutinterwiki": "Интервики деч посна лаштык-влак",
        "withoutinterwiki-submit": "ончыкташ",
+       "fewestrevisions": "Эн шагал версиян лаштык-влак",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "nmembers": "$1 {{PLURAL:$1|1=лаштык}}",
        "lonelypages": "Тулык лаштык-влак",
+       "uncategorizedpages": "Категоризироватлыдыме лаштык-влак",
+       "uncategorizedcategories": "Категоризироватлыдыме категорий-влак",
+       "uncategorizedimages": "Категоризироватлыдыме файл-влак",
+       "uncategorizedtemplates": "Категоризироватлыдыме кышкар-влак",
+       "unusedcategories": "Кучылтдымо категорий-влак",
+       "unusedimages": "Кучылтдымо файл-влак",
        "wantedcategories": "Ыштыман категорий-влак",
-       "wantedpages": "Ыштышаш лаштык-влак",
+       "wantedpages": "Ышташлан лаштык-влак",
        "wantedfiles": "Ыштыман файл-влак",
        "wantedtemplates": "Ыштыман ямдылык-влак",
        "prefixindex": "Чыла лаштык-влак префикс дене",
        "shortpages": "Кӱчык лаштык-влак",
        "longpages": "Кужу лаштык-влак",
+       "deadendpages": "Ончыко наҥгайдыме лаштык-влак",
        "protectedpages": "Тӧрлатымаш деч аралыме лаштык-влак",
        "usercreated": "$1, $2 шагатлан {{GENDER:$3|регистрацийым эртен|регистрацийым эртен}}",
        "newpages": "У лаштык-влак",
        "newpages-username": "Пайдаланышын лӱмжӧ:",
+       "ancientpages": "Пытартыш тӧрталтымаш-влак почеш ойырымо статья-влак",
        "move": "Лӱмым вашталташ",
        "movethispage": "Тиде лаштыкын лӱмжым вашталташ",
        "pager-newer-n": "{{PLURAL:$1|1=вес|вес}}",
        "unwatchthispage": "Эскерымым чарнаш",
        "watchlist-details": "Эскерымаш лӱмерыштет $1 {{PLURAL:$1|лаштык}}, каҥашымаш лаштык-влакым шотлыде",
        "wlshowlast": "Пытартыш $1 шагат $2 кечылан  ончыкташ",
+       "wlshowhidecategorization": "лаштык категоризацийым",
        "watchlist-options": "Эскерыме лӱмерын келыштарымаш",
        "watching": "Эскерымаш лӱмерыш ешарымаш...",
        "unwatching": "Эскерымаш лӱмер гыч шӧрымаш...",
        "whatlinkshere-page": "Лаштык:",
        "linkshere": "'''[[:$1]]''' лаштык дене кылдалтше лаштык-влак:",
        "nolinkshere": "'''[[:$1]]''' лаштык дене тетла нимогай лаштык кылдалтын огыл",
-       "nolinkshere-ns": "ТÑ\8bгай Ð»Ó±Ð¼-влакÑ\8bн ÐºÑ\83мдÑ\8bкÑ\8bÑ\88Ñ\82о '''[[:$1]]''' Ð»Ð°Ñ\88Ñ\82Ñ\8bк Ð´ÐµÐ½Ðµ Ð½Ð¸Ð¼Ð¾Ð³Ð°Ð¹ Ð²ÐµÑ\81 Ð»Ð°Ñ\88Ñ\82Ñ\8bк-влак ÐºÑ\8bлÑ\8bм Ð¾Ð³Ñ\8bÑ\82 ÐºÑ\83Ñ\87о.",
+       "nolinkshere-ns": "ТÑ\8bгай Ð»Ó±Ð¼-влакÑ\8bн ÐºÑ\83мдÑ\8bкÑ\8bÑ\88Ñ\82о '''[[:$1]]''' Ð»Ð°Ñ\88Ñ\82Ñ\8bк Ð´ÐµÐ½Ðµ Ð½Ð¸Ð¼Ð¾Ð³Ð°Ð¹ Ð»Ð°Ñ\88Ñ\82Ñ\8bк-влак Ð¾Ð³Ñ\8bÑ\82 ÐºÑ\8bлдалÑ\82.",
        "isredirect": "вес вере колтышо лаштык",
        "istemplate": "пуртымаш",
        "isimage": "файлыш кылвер",
        "tooltip-t-contributions": "{{GENDER:$1|Пайдаланышын ыштыме пашажым}} ончалаш",
        "tooltip-t-emailuser": "Тиде пайдаланышылан электрон серышым возаш",
        "tooltip-t-upload": "Файл-влакым пурташ",
-       "tooltip-t-specialpages": "Ð\9bӱмÑ\8bн Ñ\8bÑ\88Ñ\82Ñ\8bме лаштык-влак",
+       "tooltip-t-specialpages": "СпеÑ\86лаштык-влак",
        "tooltip-t-print": "Савыкташлан келыштараш",
        "tooltip-t-permalink": "Тиде лашткыш кондышо кылвер (ссылка)",
        "tooltip-ca-nstab-main": "Лаштыкыште возымым ончыкташ",
        "watchlisttools-edit": "Эскерыме лӱмерым ончалаш да тӧрлаташ",
        "watchlisttools-raw": "Эскерыме лӱмерым текст семын тӧрлаш",
        "duplicate-defaultsort": "Внимание. Ключ сортировки по умолчанию «$2» переопределяет прежний ключ сортировки по умолчанию «$1».",
-       "version-specialpages": "Ð\9bӱмÑ\8bн Ñ\8bÑ\88Ñ\82Ñ\8bме лаштык-влак",
+       "version-specialpages": "СпеÑ\86лаштык-влак",
        "fileduplicatesearch-submit": "Кычалаш",
-       "specialpages": "Ð\9bӱмÑ\8bн Ñ\8bÑ\88Ñ\82Ñ\8bме лаштык-влак",
-       "specialpages-group-other": "Моло лӱмын ыштыме лаштык-влак",
+       "specialpages": "СпеÑ\86лаштык-влак",
+       "specialpages-group-other": "Моло спецлаштык-влак",
        "specialpages-group-login": "Пурымаш / регистрацийым эрташ",
        "specialpages-group-users": "Пайдаланыше-влак да нунын йӧн-влак",
        "specialpages-group-highuse": "Чӱчкыдын кучылтмо лаштык-влак",
index 291b46d..9def60f 100644 (file)
        "search-file-match": "(matcher filinnhold)",
        "search-suggest": "Mente du: $1",
        "search-rewritten": "Viser resultatet for $1. Søk i stedet for $2.",
-       "search-interwiki-caption": "Søsterprosjekter",
+       "search-interwiki-caption": "Resultater fra søsterprosjekter",
        "search-interwiki-default": "Resultater fra $1:",
        "search-interwiki-more": "(mer)",
        "search-interwiki-more-results": "flere resultater",
        "recentchanges-legend-plusminus": "«(±123)»",
        "recentchanges-submit": "Vis",
        "rcfilters-activefilters": "Aktive filtre",
+       "rcfilters-quickfilters": "Raske lenker",
+       "rcfilters-quickfilters-placeholder": "Lagre favorittinnstillingene dine i verktøyet for senere bruk.",
+       "rcfilters-savedqueries-defaultlabel": "Lagrede filtre",
+       "rcfilters-savedqueries-rename": "Gi nytt navn",
+       "rcfilters-savedqueries-setdefault": "Sett som standard",
+       "rcfilters-savedqueries-unsetdefault": "Fjern som standard",
+       "rcfilters-savedqueries-remove": "Fjern",
+       "rcfilters-savedqueries-new-name-label": "Navn",
+       "rcfilters-savedqueries-apply-label": "Opprett rask lenke",
+       "rcfilters-savedqueries-cancel-label": "Avbryt",
+       "rcfilters-savedqueries-add-new-title": "Lagre filtre som en rask lenke",
        "rcfilters-restore-default-filters": "Gjenopprett standardfiltre",
        "rcfilters-clear-all-filters": "Nullstill alle filtre",
        "rcfilters-search-placeholder": "Filtrer siste endringer (søk eller begyn å skrive)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nykommere",
        "rcfilters-filter-user-experience-level-newcomer-description": "Færre enn 10 redigeringer og 4 dagers aktivitet.",
        "rcfilters-filter-user-experience-level-learner-label": "Nybegynnere",
-       "rcfilters-filter-user-experience-level-learner-description": "Flere dagers aktivitet enn «Nykommere», men mindre enn «Erfarne brukere».",
+       "rcfilters-filter-user-experience-level-learner-description": "Mer erfaring enn «Nykommere», men mindre enn «Erfarne brukere».",
        "rcfilters-filter-user-experience-level-experienced-label": "Erfarne brukere",
        "rcfilters-filter-user-experience-level-experienced-description": "Mer enn 30 dagers aktivitet og 500 redigeringer.",
        "rcfilters-filtergroup-automated": "Automatiske bidrag",
        "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Legg til en kategori …",
        "mw-widgets-usersmultiselect-placeholder": "Legg til flere ...",
+       "date-range-from": "Fra dato:",
+       "date-range-to": "Til dato:",
        "sessionmanager-tie": "Kan ikke kombinere flere forespørselsautentiseringstyper: $1",
        "sessionprovider-generic": "$1 sesjoner",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "informasjons&shy;kapsel-baserte sesjoner",
index 2e3f845..7268687 100644 (file)
        "rawhtml-notallowed": "&lt;html&gt; tags kunnen alleen op normale pagina's geplaatst worden.",
        "gotointerwiki": "{{SITENAME}} verlaten",
        "gotointerwiki-invalid": "De opgegeven titel is ongeldig.",
-       "gotointerwiki-external": "U staat op het punt om {{SITENAME}} te verlaten en [[$2]] te bezoeken. [[$2]] is een aparte website.\n\n[$1 Klik hier om door te gaan naar $1].",
+       "gotointerwiki-external": "U staat op het punt om {{SITENAME}} te verlaten en [[$2]] te bezoeken. [[$2]] is een aparte website.\n\n'''[$1 Doorgaan naar $1]'''",
        "undelete-cantedit": "U kunt deze pagina niet terug plaatsen omdat u niet het recht hebt om deze pagina te bewerken.",
        "undelete-cantcreate": "U kunt deze pagina niet terugplaatsen omdat er geen bestaande pagina met deze naam is en u geen toestemming hebt om deze pagina aan te maken."
 }
index 2b5e4d8..78185ea 100644 (file)
        "permalink": "Suglung a permanenti",
        "print": "I-print",
        "view": "Lawen",
+       "view-foreign": "Lawen king $1",
        "edit": "Alilan",
        "create": "Maglalang",
        "editthispage": "I-edit ya ing bulung a ini",
        "nstab-template": "Ulma (template)",
        "nstab-help": "Saup bulung",
        "nstab-category": "Kategoriya",
+       "mainpage-nstab": "Pun Bulung",
        "nosuchaction": "Alang makanyan a gawa",
        "nosuchactiontext": "E ne kikilalanan ning wiki ing dapat/utus a babanggitan ning URL",
        "nosuchspecialpage": "Alang bulung a makabukud/espesial a anti kanian",
        "logouttext": "'''Maka logout na ka.'''\n\nMalyari mung isundu ing pamangamit mu king {{SITENAME}} a e ka papakilala, o malyari kang mag login pasibayu anting pareu o aliwang talagamit.\nApansingan mung mapalyaring makalto la pa murin deng aliwang bulung a bala mu maka login ka pa murin, anggang e me lilinisan (clear) ing kekang browser cache.",
        "yourname": "Lagyung talagamit (Username):",
        "yourpassword": "Kekang password:",
+       "userlogin-yourpassword": "Udyat (Password)",
        "yourpasswordagain": "Pakisulat meng pasibayu ing password:",
        "yourdomainname": "Ing kekang karinan (domain):",
        "externaldberror": "Mapalyaring mika pamagkamali king external authentication (pamagpatutung panlual) ning database, o ala kang paintulut a i-update ya ing kekang account a panlual (external account).",
        "createaccount-title": "Pamaglalang account para king {{SITENAME}}",
        "createaccount-text": "Ating miglalang account para king kekang e-mail address king {{SITENAME}} ($4) a maki lagyung \"$2\", ampong password a \"$3\".\nKailangan mung mag-login ngeni ba meng ayalilan ing kekang password.\n\nMalyari meng e pansinan ining mensahi, nung pamagkamali ing pamaglalang na niting account.",
        "loginlanguagelabel": "Amanu: $1",
+       "pt-login-button": "Maglagda (log in)",
        "changepassword": "Alilan ya ing password",
        "resetpass_announce": "Gagamit kang pansamantalang code a me e-mail keka aniang mig-login ka.\nBang mayari ing kekang pamag-login, kailangan mung mangibiling bayung password keni:",
        "resetpass_header": "Alilan ya ing password",
        "resetpass_submit": "Mangibili kang password at maglogin ka",
        "changepassword-success": "Melaus ing pamanalili mung password! Ngeni mila-login naka...",
        "resetpass_forbidden": "E la malyaring alilan deng password keng wiking ini",
+       "passwordreset": "Alilan udyat (reset password)",
        "bold_sample": "Makapasalang kulitan",
        "bold_tip": "Makapal pangasulat",
        "italic_sample": "Makakiling pangasulat",
        "action-edit": "i-edit/alilan ya ing bulung a ini",
        "action-managechangetags": "maglalang at magbura tags ibat database",
        "nchanges": "$1 {{PLURAL:$1|miyalilan|miyalilan}}",
+       "enhancedrc-history": "amlat/kasaleselan",
        "recentchanges": "Bayung mengayalili",
        "recentchanges-legend": "Pipamilinan kareng bayung mengayalili",
        "recentchanges-summary": "Talukyan mo reng tawling diling mengayalilan king bulung a ini.",
        "recentchanges-feed-description": "Talukian mo reng bayung diling mengayalili king wiki king feed a ini.",
+       "rcfilters-savedqueries-new-name-label": "Lagyu",
+       "rcfilters-savedqueries-cancel-label": "E taglus",
+       "rcfilters-filtergroup-watchlist": "Deng bulung a yati lu king babanten",
+       "rcfilters-filter-watchlist-watched-label": "Deng atiu babanten",
+       "rcfilters-filter-watchlist-notwatched-label": "Ala lu king babanten",
+       "rcfilters-filtergroup-lastRevision": "Kasalungsungan a pangayalili",
+       "rcfilters-filter-lastrevision-label": "Kasalungsungan a pangayalili",
        "rcnotefrom": "Atilu king lalam deng miyalilan manibat anyang <b>$2</b> (angga king <b>$1</b> makalto).",
        "rclistfrom": "Pakit la reng bayung miyalilan manibat anyang $3 $2",
        "rcshowhideminor": "$1 malating edit",
+       "rcshowhideminor-show": "Pakit",
+       "rcshowhideminor-hide": "Isalikut",
        "rcshowhidebots": "$1 la reng bot",
+       "rcshowhidebots-show": "Pakit",
+       "rcshowhidebots-hide": "Isalikut",
        "rcshowhideliu": "$1 talagamit a maka-log in",
+       "rcshowhideliu-hide": "Isalikut",
        "rcshowhideanons": "$1 talagamit a e migpakilala",
+       "rcshowhideanons-show": "Pakit",
+       "rcshowhideanons-hide": "Isalikut",
        "rcshowhidepatr": "$1 edit a babanten (patrolled edits)",
        "rcshowhidemine": "$1 deng elilan ku",
+       "rcshowhidemine-show": "Pakit",
+       "rcshowhidemine-hide": "Isalikut",
        "rcshowhidecategorization-show": "Pakit",
        "rclinks": "Pakit la reng tauling $1 miyalilan anyang tauling $2 aldo",
        "diff": "aliwa",
        "suppress": "Alakton (oversight)",
        "booksources": "Aklat a pikuanan",
        "booksources-search-legend": "Panintunan la reng aklat penibatan",
+       "booksources-search": "Manintun/Manuliksa",
        "booksources-text": "Makabili la king lalam deng suglung kareng aliwang karinan o site a mamisaling librung bayu at megamit na, at mapalyaring atin la muring aliwang informaciun kareng librung paintunan mu.",
        "specialloguserlabel": "Talagamit:",
        "speciallogtitlelabel": "Bansag:",
        "namespace": "Pirinan lagyu (Namespace):",
        "invert": "Ibaligtad la pamitukituki",
        "blanknamespace": "(Pun)",
-       "contributions": "Ambag da reng gagamit",
+       "contributions": "{{GENDER:$1|User}} deng ambag",
        "contributions-title": "Deng ambag da reng talagamit para king $1",
        "mycontris": "Deng kakung ambag",
        "anoncontribs": "Deng ambag",
        "whatlinkshere-prev": "{{PLURAL:$1|minunang|minunang $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|next|tutuking $1}}",
        "whatlinkshere-links": "← suglung",
-       "whatlinkshere-hideredirs": "$1 pamanalis direksiun (redirects)",
+       "whatlinkshere-hideredirs": "$1 pamanalis direksyun (redirects)",
        "whatlinkshere-hidetrans": "$1 langkap (transclusions)",
        "whatlinkshere-hidelinks": "$1 suglung",
        "whatlinkshere-filters": "Panialak (filters)",
        "file-info-size": "$1 × $2 pixel, sukad ning simpan: $3, MIME type: $4",
        "file-nohires": "Ala nang mas malino pa.",
        "svg-long-desc": "SVG file, masasabing $1 × $2 pixels, dagul ning simpan: $3",
-       "show-big-image": "Pekamalino",
+       "show-big-image": "Ing minunang simpan (file)",
        "newimages": "Pirinan kareng bayung simpan (new files)",
        "imagelisttext": "Ing makatuki tala yang '''$1''' {{PLURAL:$1|simpan|simpan}} a misamasan $2.",
        "newimages-summary": "Ining bulung a makabukud papakit no reng simpan (file) a tauling milulan.",
        "watchlisttools-view": "Lon la reng miyalilan a makaugne kaniti",
        "watchlisttools-edit": "Lon ya ampong i-edit ing tala ding babanten (watchlist)",
        "watchlisttools-raw": "I-edit ya ing e pa metagin a tala ding babanten (raw watchlist)",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pamisabi-sabi]])",
        "version": "Bersion",
        "version-specialpages": "Bulung a makabukud",
        "version-other": "Aliwa",
index 6a47ce2..f9e7689 100644 (file)
@@ -80,7 +80,7 @@
        "february": "فبروري",
        "march": "مارچ",
        "april": "اپرېل",
-       "may_long": "Ù\85Û\8c",
+       "may_long": "Ù\85Û\90",
        "june": "جون",
        "july": "جولای",
        "august": "اگسټ",
index 1a64b8b..ff220a0 100644 (file)
        "recentchanges-submit": "Mostrar",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-quickfilters": "Links rápidos",
-       "rcfilters-quickfilters-placeholder": "Grave suas configurações de ferramentas favoritas para reutilizá-las mais tarde.",
+       "rcfilters-quickfilters-placeholder": "Grave as suas configurações preferidas das ferramentas para reutilizá-las mais tarde.",
        "rcfilters-savedqueries-defaultlabel": "Filtros gravados",
        "rcfilters-savedqueries-rename": "Alterar o nome",
        "rcfilters-savedqueries-setdefault": "Ativar por padrão",
-       "rcfilters-savedqueries-unsetdefault": "Desativar por padrão",
+       "rcfilters-savedqueries-unsetdefault": "Remover por padrão",
        "rcfilters-savedqueries-remove": "Remover",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-apply-label": "Criar link rápido",
        "rawhtml-notallowed": "As etiquetas &lt;html&gt; não podem ser utilizadas fora de páginas normais.",
        "gotointerwiki": "A sair de {{SITENAME}}",
        "gotointerwiki-invalid": "O título especificado é inválido.",
-       "gotointerwiki-external": "Está prestes a sair de {{SITENAME}} para visitar [[$2]], que é um sítio web externo.\n\n[$1 Clique aqui para continuar para $1]",
+       "gotointerwiki-external": "Está prestes a sair da wiki {{SITENAME}} para visitar [[$2]], que é um site externo.\n\n'''[$1 Continuar para $1]'''",
        "undelete-cantedit": "Não pode restaurar esta página, porque não tem privilégios para editar esta página.",
        "undelete-cantcreate": "Não pode restaurar esta página, porque não existe nenhuma página com este nome e não tem privilégios para criar esta página."
 }
index fbd943d..694ef74 100644 (file)
        "action-pagelang": "{{Doc-action|pagelang}}",
        "log-name-pagelang": "Display entry for log name for changes in page language in Special:Log.",
        "log-description-pagelang": "Display description for log name for changes in page language in Special:Log.",
-       "logentry-pagelang-pagelang": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
+       "logentry-pagelang-pagelang": "[[mw:Page language]] explains what this feature is about.\n----\n{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
        "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins\n* $4: Number of items in list $2\n* $5: Number of lines in $3, one per skin",
        "default-skin-not-found-no-skins": "Message shown when the default skin for this MediaWiki installation can not be found and the installation has no skins at all.\n\nParameters:\n* $1: name of the default skin",
        "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
index 160cf25..d6f2b73 100644 (file)
        "redirectedfrom": "(Riderette da $1)",
        "redirectpagesub": "Pàgene de redirezione",
        "redirectto": "Redirezione sus a:",
-       "lastmodifiedat": "Sta pàgene a state cangete l'urtema vote da $1, alle $2.",
+       "lastmodifiedat": "Sta pàgene ha state cangiate l'urtema vote 'u $1, a le $2.",
        "viewcount": "Sta pàggene ha state viste {{PLURAL:$1|'na vote|$1 vote}}.",
        "protectedpage": "Pàgene prutette",
        "jumpto": "Zumbe a:",
        "readonlywarning": "<strong>FA ATTENZIO': 'U database ha state bloccate pe manutenzione, e allore tu non ge puè reggistrà le cangiaminde ca ste face mò.</strong>\nTu puè fa 'na bella cose, tagghie e 'nzicche le cangiaminde jndr'à 'nu file de teste sus a 'u combiuter tune e pò cchiù tarde le reggistre sus 'a Uicchi.\n\nL'amministratore ca ha bloccate 'u database ha date stu mutive: $1",
        "protectedpagewarning": "'''ATTENZIO': Sta pàgene ha state bloccate e allore sulamende le utinde cu le privilegge de ''sysop'' ponne cangiarle.'''\nL'urteme archivie de le trasute ha state previste aqquà sotte pe referimende:",
        "semiprotectedpagewarning": "'''Fà attenzione:''' Sta pàgene ha state bloccate accussì sulamende l'utinde reggistrete ponne fà cangiaminde.\nL'urteme archivije de le trasute ha state previste aqquà sotte pe referimende:",
-       "cascadeprotectedwarning": "<strong>FA ATTENZIO':</strong> Sta pàgene ha state blocchete accussì sulamende l'utinde ca tènene le deritte de amministratore a ponne cangià, purcè inglude {{PLURAL:$1|pàgene|pàggene}} prutette a cascate:",
+       "cascadeprotectedwarning": "<strong>Fa attenziò:</strong> Sta pàgene ha state protette accussì sulamende l'utinde ca tènene le [[Special:ListGroupRights|deritte de amministratore]] a ponne cangià, purcè inglude {{PLURAL:$1|pàgene|pàggene}} prutette a cascate:",
        "titleprotectedwarning": "'''ATTENZIONE: Sta pàgene ha state bloccate accussì sulamende [[Special:ListGroupRights|specifice diritte]] a ponne ccrejà.'''\nL'urteme archivije de le trasute jè provviste sotte pe referimende:",
        "templatesused": "{{PLURAL:$1|Template|Template}} ausate sus 'a sta pàgene:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Template}} ausate jndr'à sta andeprime:",
        "search-file-match": "(combronde 'u condenute d'u file)",
        "search-suggest": "Ce signifeche: $1",
        "search-rewritten": "Stoche a fazze 'ndrucà le resultate pe $1. Cirche invece pe $2.",
-       "search-interwiki-caption": "Pruggette sorelle",
+       "search-interwiki-caption": "Resultate da le pruggette sorelle",
        "search-interwiki-default": "Resultate da $1:",
        "search-interwiki-more": "(de cchiù)",
+       "search-interwiki-more-results": "cchiù resultate",
        "search-relatedarticle": "Colleghete",
        "searchrelated": "colleghete",
        "searchall": "tutte",
        "showingresultsinrange": "Stoche a fazze vedè da sotte 'nzigne a {{PLURAL:$1|<strong>1</strong> resultate|<strong>$1</strong> resultate}} jndr'à l'indervalle #<strong>$2</strong> a #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Resultate <strong>$1</strong> de <strong>$3</strong>|Resultate <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "Non ge stonne resultete ca soddisfecene l'inderrogazione.",
+       "search-nonefound-thiswiki": "Non ge stonne resultate ca soddisfane 'a 'nderrogazione jndr'à stu site.",
        "powersearch-legend": "Ricerche avanzete",
        "powersearch-ns": "Cirche jndr'à le namespace:",
        "powersearch-togglelabel": "Verifiche:",
        "search-external": "Ricerche esterne",
        "searchdisabled": "'A ricerche sus a {{SITENAME}} ha state disabbilitete.\nTu puè cercà ausanne Google.\nPerò fa attenzione purcè l'indice lore sus a {{SITENAME}} ponne condenè pàggene ca non ge sonde aggiornate.",
        "search-error": "S'ha verificate 'n'errore mendre ste cercave: $1",
+       "search-warning": "'N'avvertimende ave assute mendre ca ste cercave: $1",
        "preferences": "Me piece accussì",
        "mypreferences": "Me piace accussì",
        "prefs-edits": "Numere de cangiaminde:",
        "prefs-help-recentchangescount": "Quiste 'nglude le urteme cangiaminde, le storie de le pàggene e le archivije.",
        "prefs-help-watchlist-token2": "Queste jè 'a chiave segrete a le feed d'u web de l'elenghe de le pàggene condrollate tune.\nCengate vò ccu canosce ce pò leggere l'elenghe de le pàggene condrollate tune, accussì non g'ù pò condividere.\n[[Special:ResetTokens|Cazze aqquà ce tìne abbesogne de azzerarle]].",
        "savedprefs": "Le preferenze tue onne state aggiornete.",
+       "savedrights": "Le gruppe utinde de {{GENDER:$1$1}} onne state reggistrate.",
        "timezonelegend": "Orarie d'a zone:",
        "localtime": "Orarie lochele:",
        "timezoneuseserverdefault": "Ause 'u valore de default de uicchi ($1)",
        "username": "{{GENDER:$1|Nome de l'utende}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|d'u gruppe|de le gruppe}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 ('nzigne a $2)",
        "prefs-registration": "Orarie de reggistrazzione:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "Nome vere:",
        "userrights-changeable-col": "Gruppe ca tu puè cangià",
        "userrights-unchangeable-col": "Gruppe ca tu non ge puè cangià",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "Scade 'u $1",
+       "userrights-expiry-none": "Non ge scade",
+       "userrights-expiry": "Scadenze:",
+       "userrights-expiry-existing": "'U tiembe de scadenze esistende: $3, $2",
+       "userrights-expiry-othertime": "Otre tiembe:",
+       "userrights-expiry-options": "1 sciurne:1 day,1 sumàne:1 week,1 mese:1 month,3 mise:3 mise,6 mesi:6 months,1 anne:1 year",
        "userrights-conflict": "Conflitte sus a le cangiaminde de le deritte utende! Pe piacere revide e conferme le cangiaminde tune.",
        "group": "Gruppe:",
        "group-user": "Utinde",
index 5e05ea0..abf61a5 100644 (file)
                        "Choomaq",
                        "Facenapalm",
                        "Esukhovnina",
-                       "Av6"
+                       "Av6",
+                       "Санюн Вадик"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "rawhtml-notallowed": "&lt;html&gt; теги могут быть использованы только в пределах обычных страниц.",
        "gotointerwiki": "Покидаем {{grammar:accusative|{{SITENAME}}}}...",
        "gotointerwiki-invalid": "Указан некорректный заголовок.",
-       "gotointerwiki-external": "Вы покидаете {{grammar:accusative|{{SITENAME}}}} для посещения сайта [[$2]].\n\n[$1 Нажмите здесь, чтобы перейти на $1].",
+       "gotointerwiki-external": "Вы покидаете {{grammar:accusative|{{SITENAME}}}} для посещения стороннего сайта [[$2]].\n\n'''[$1 Перейти на $1]'''",
        "undelete-cantedit": "Вы не можете восстановить эту страницу, поскольку у вас недостаточно прав для ее редактирования.",
        "undelete-cantcreate": "Вы не можете восстановить эту страницу, поскольку она не существует, а у вас недостаточно прав для ее создания."
 }
index 5548621..74834bc 100644 (file)
        "disclaimers": "Вылучіня одповідности",
        "disclaimerpage": "Project:Відмова від відповідальності",
        "edithelp": "Поміч едітованя",
-       "mainpage": "Гловна сторінка",
+       "mainpage": "Ð\93оловна Ñ\81Ñ\82оÑ\80Ñ\96нка",
        "mainpage-description": "Головна сторінка",
        "policy-url": "Project:Правила",
        "portal": "Портал комуніты",
        "nstab-template": "Шаблона",
        "nstab-help": "Сторінка помочі",
        "nstab-category": "Катеґорія",
-       "mainpage-nstab": "Гловна сторінка",
+       "mainpage-nstab": "Ð\93оловна Ñ\81Ñ\82оÑ\80Ñ\96нка",
        "nosuchaction": "Такой дїї не має",
        "nosuchactiontext": "Дїя, уведжена в URL, неправилна.\nМогли сьте неправилно написати URL або перейти через некоректный одказ .\nМоже тыж значіти ґанч в проґрамовім забеспечіню {{GRAMMAR:genitive|{{SITENAME}}}}.",
        "nosuchspecialpage": "Такой шпеціалной сторінкы нїт",
index 20f2c62..71fb4dd 100644 (file)
        "readonlywarning": "<strong>Сэрэтии: Сиэрбэргэ техническай үлэ бара турар, онон киллэрбит уларытыыларыҥ тута бигэргэнэр кыахтара суох.</strong>\nОнон уларытыыгын тиэкистээх билэҕэ уган хаалларан баран, манна кэлин угуоххун сөп.\n\nХааччаҕы туруорбут дьаһабыл маннык быһаарыыны хаалларбыт: $1",
        "protectedpagewarning": "'''Сэрэтии:  Бу сирэй хатанан турар, администратор бырааптаах эрэ кыттааччылар уларытар кыахтаахтар.'''\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
        "semiprotectedpagewarning": "'''Биллэрии:''' Бу сирэй хатанан турар; ааттарын билиһиннэрбит эрэ кыттааччылар уларытар кыахтаахтар.\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
-       "cascadeprotectedwarning": "<strong>Сэрэтии:</strong> Бу сирэйи дьаһабыллар эрэ уларытар кыахтаахтар, тоҕо диэтэххэ сирэй каскаднай көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:",
+       "cascadeprotectedwarning": "<strong>Сэрэтии:</strong> Бу сирэйи [[Special:ListGroupRights|анал бырааптаах дьон]] эрэ уларытар кыахтаахтар, тоҕо диэтэххэ сирэй каскаднай көмүскэллээх {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:",
        "titleprotectedwarning": "'''Сэрэтии:  Маннык ааттаах сирэйи уларытар бобуллубут, [[Special:ListGroupRights|анал бырааптаах эрэ дьон]] уларытыахтарын сөп .'''\nАллара сурунаал бүтэһик суруга көрдөрүлүннэ:",
        "templatesused": "Манна туттуллубут {{PLURAL:$1|халыып|халыыптар}} :",
        "templatesusedpreview": "Манна туттуллубут {{PLURAL:$1|халыып|халыыптар}} бигэргэтиэх иннинэ көстүүлэрэ:",
        "saveusergroups": "{{GENDER:$1|Кыттааччы}} бөлөхтөрүн бигэргэт",
        "userrights-groupsmember": "Бу бөлөхтөргө киирэр:",
        "userrights-groupsmember-auto": "Көстүбэт чилиэн:",
-       "userrights-groups-help": "Ð\91Ñ\83 ÐºÐ¸Ò»Ð¸ ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80 Ð±Ó©Ð»Ó©Ñ\85Ñ\82Ó©Ñ\80үн Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bаÑ\85Ñ\85Ñ\8bн Ñ\81өп:\n* Ð\91өлөÑ\85 Ð°Ð°Ñ\82Ñ\8bн Ñ\82аһÑ\8bгаÑ\80 Ð±Ñ\8dлиÑ\8d Ñ\82Ñ\83Ñ\80аÑ\80 Ð±Ñ\83оллаÒ\95Ñ\8bна Ð±Ñ\83 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ñ\83 Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80.\n* Ð\91Ñ\8dлиÑ\8d Ñ\81Ñ\83оÑ\85 Ð±Ñ\83оллаÒ\95Ñ\8bна - ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80бÑ\8dÑ\82\n* Ð\9cаннÑ\8bк Ð±Ñ\8dлиÑ\8d * ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80ин/кииÑ\80бÑ\8dÑ\82ин Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 ÐºÑ\8bаÒ\95Ñ\8bÒ¥ Ñ\81Ñ\83оÒ\95Ñ\83н ÐºÓ©Ñ\80дөÑ\80Ó©Ñ\80.",
+       "userrights-groups-help": "Ð\91Ñ\83 ÐºÐ¸Ò»Ð¸ ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80 Ð±Ó©Ð»Ó©Ñ\85Ñ\82Ó©Ñ\80үн Ñ\83лаÑ\80Ñ\8bÑ\82Ñ\8bаÑ\85Ñ\85Ñ\8bн Ñ\81өп:\n* Ð\91өлөÑ\85 Ð°Ð°Ñ\82Ñ\8bн Ñ\82аһÑ\8bгаÑ\80 Ð±Ñ\8dлиÑ\8d Ñ\82Ñ\83Ñ\80аÑ\80 Ð±Ñ\83оллаÒ\95Ñ\8bна Ð±Ñ\83 ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð¾Ð» Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80.\n* Ð\91Ñ\8dлиÑ\8d Ñ\81Ñ\83оÑ\85 Ð±Ñ\83оллаÒ\95Ñ\8bна - ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð¾Ð» Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80бÑ\8dÑ\82\n* Ð\9cаннÑ\8bк Ð±Ñ\8dлиÑ\8d * ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80ин/кииÑ\80бÑ\8dÑ\82ин Ñ\83лаÑ\80Ñ\8bÑ\82аÑ\80 ÐºÑ\8bаÒ\95Ñ\8bÒ¥ Ñ\81Ñ\83оÒ\95Ñ\83н ÐºÓ©Ñ\80дөÑ\80Ó©Ñ\80.\n* Ð\9cаннÑ\8bк Ð±Ñ\8dлиÑ\8d # ÐºÑ\8bÑ\82Ñ\82ааÑ\87Ñ\87Ñ\8b Ð±Ó©Ð»Ó©Ñ\85Ñ\85Ó© ÐºÐ¸Ð¸Ñ\80Ñ\8dÑ\80 Ð±Ð¾Ð»Ð´Ñ\8cоÒ\95Ñ\83н Ñ\85ойÑ\83Ñ\82аÑ\82аÑ\80 Ð±Ñ\8bÑ\80аапÑ\82ааÑ\85Ñ\85Ñ\8bн ÐºÓ©Ñ\80дөÑ\80Ó©Ñ\80, Ð¾Ð» Ñ\8dÑ\80Ñ\8dÑ\8dÑ\80и Ñ\8dÑ\80дÑ\8dлÑ\8dÑ\82Ñ\8dÑ\80 ÐºÑ\8bаÒ\95Ñ\8bÒ¥ Ñ\81Ñ\83оÑ\85.",
        "userrights-reason": "Төрүөтэ:",
        "userrights-no-interwiki": "Атын биикилэргэ кыттааччылар бырааптарын уларытар быраабыҥ суох.",
        "userrights-nodatabase": "$1 билэ тиһигэ (олоҕо, база данных) суох эбэтэр локальнай буолбатах.",
        "userrights-changeable-col": "Эн уларытар кыахтаах бөлөхтөрүҥ",
        "userrights-unchangeable-col": "Бу бөлөхтөрү уларытар кыаҕыҥ суох",
+       "userrights-expiry-current": "Болдьоҕо баччаҕа бүтэр: $1",
+       "userrights-expiry-none": "Хаһан да",
+       "userrights-expiry": "Болдьоҕо баччаҕа бүтэр:",
+       "userrights-expiry-existing": "Билиҥҥи болдьоҕо: $3, $2",
+       "userrights-expiry-othertime": "Атын болдьох:",
+       "userrights-expiry-options": "1 күн:1 күн,1 нэдиэлэ:1 нэдиэлэ,1 ый:1 ый,3 ый:3 ый,6 ый:6 ый,1 сыл:1 сыл",
+       "userrights-invalid-expiry": "«$1» бөлөх болдьоҕо алҕастаах ыйыллыбыт.",
+       "userrights-expiry-in-past": "«$1» бөлөх болдьоҕо ааспыт кэмҥэ ыйыллыбыт.",
+       "userrights-cannot-shorten-expiry": "«$1» бөлөххө чилиэнниир болдьоҕу эрдэтээҥҥигэ көһөрөр кыаҕыҥ суох эбит. Бу бөлөххө дьону эбэр кыахтаах дьон эрэ ону оҥоруохтарын сөп.",
        "userrights-conflict": "Кыттааччы быраабын быһаарарга алҕас таҕыста! Хатылаан көр.",
        "group": "Бөлөх:",
        "group-user": "Кыттааччылар",
        "recentchanges-submit": "Көрдөр",
        "rcfilters-activefilters": "Холбоммут сиидэлэр",
        "rcfilters-quickfilters": "Түргэн сигэлэр",
+       "rcfilters-quickfilters-placeholder": "Сөбүлүүр нарылааһыҥҥын бигэргэтэн, кэлин туһанаргын оҥоһун.",
        "rcfilters-savedqueries-defaultlabel": "Бигэргэммит сиидэлэр",
        "rcfilters-savedqueries-rename": "Аатын уларыт",
        "rcfilters-savedqueries-setdefault": "Уларыппаккаҕын хааллар",
+       "rcfilters-savedqueries-unsetdefault": "Эбии этиллибэтэҕинэ талыллары суох гын",
        "rcfilters-savedqueries-remove": "Сот",
        "rcfilters-savedqueries-new-name-label": "Аата",
        "rcfilters-savedqueries-apply-label": "Түргэн сигэни оҥоруу",
        "rcfilters-empty-filter": "Холбоммут сиидэ суох. Улартыы барыта көстөр.",
        "rcfilters-filterlist-title": "Сиидэ",
        "rcfilters-filterlist-whatsthis": "Бу тугуй?",
+       "rcfilters-filterlist-feedbacklink": "Саҥа (бета) сиидэлэр тустарынан суруй",
+       "rcfilters-highlightbutton-title": "Түмүгүн бэлиэтээ",
+       "rcfilters-highlightmenu-title": "Өҥүн тал",
+       "rcfilters-highlightmenu-help": "Өҥүн талан, көстөр гын",
        "rcfilters-filterlist-noresults": "Сиидэ көстүбэтэ",
+       "rcfilters-noresults-conflict": "Көрдөөһүн мэктиэлэрин мөккүөрэ тахсан, туох да көстүбэтэ",
+       "rcfilters-state-message-subset": "Сиидэ туһата суох, тоҕо диэтэххэ кини түмүгэ атын {{PLURAL:$2|сиидэ түмүгэр|сиидэлэр түмүктэригэр}} киирэр эбит (өҥүн уларытыыны туһанан сиһилии көрүөххүн сөп): $1",
+       "rcfilters-state-message-fullcoverage": "Сиидэни барытын талыы тугу да талбатаҕыҥ тэҥэ, онон сиидэ туһата суох. Холбоммут бөлөхтөр: $1",
        "rcfilters-filtergroup-authorship": "Ааптарын уларытыы",
        "rcfilters-filter-editsbyself-label": "Эн тус бэйэҥ уларытыыларыҥ",
        "rcfilters-filter-editsbyself-description": "Бэйэҥ уларытыыларыҥ.",
index 256c510..010223b 100644 (file)
        "searcharticle": "وڃو",
        "history": "صفحي جي سوانح",
        "history_short": "سوانح",
+       "history_small": "سوانح",
        "printableversion": "ڇپائتو پرت",
        "permalink": "مسقتل ڳنڍڻو",
        "print": "ڇاپيو",
index 675f2a8..9ec22f2 100644 (file)
        "nextn-title": "သိုပ်ႇၵႂႃႇၸူး $1 {{PLURAL:$1|result|ၽွၼ်းလႆႈ}}",
        "shown-title": "ၼႄ $1 {{PLURAL:$1|result|results}} ၼိူဝ်​ၼႃႈ​လိၵ်ႈ​ၼိူင်ႈၼႃႈ",
        "viewprevnext": "တူၺ်း ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "<strong>á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80¢á\81¼á\80ºá\80\95á\81¼á\80ºá\81¸á\80­á\80¯á\80\9dá\80ºá\82\89ဝႆႉဝႃႈ  \"[[:$1]]\" တီႈၼႂ်း ဝီႇၶီႇဢၼ်ၼႆႉ။</strong> {{PLURAL:$2|0=|တူၺ်းပႃး ၽွၼ်းလႆႈသွၵ်ႈႁႃ တၢင်ႇၸိူဝ်း ၸိူဝ်းႁၼ်ဝႆႉၼၼ်ႉ။}}",
+       "searchmenu-exists": "<strong>á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80¢á\81¼á\80ºá\80\95á\81¼á\80ºá\81¸á\80­á\80¯á\80\9dá\80ºá\82\88ဝႆႉဝႃႈ  \"[[:$1]]\" တီႈၼႂ်း ဝီႇၶီႇဢၼ်ၼႆႉ။</strong> {{PLURAL:$2|0=|တူၺ်းပႃး ၽွၼ်းလႆႈသွၵ်ႈႁႃ တၢင်ႇၸိူဝ်း ၸိူဝ်းႁၼ်ဝႆႉၼၼ်ႉ။}}",
        "searchmenu-new": "<strong> ၶူင်သၢင်ႈၼႃႈလိၵ်ႈ \"[[:$1]]\" တီႈဝီႇၶီႇၼႆႉ </strong> {{PLURAL:$2|0=|ၼႃႈလိၵ်ႈၼႆႉ ၼႄဝႆႉ ဢၼ်ၸဝ်ႈၵဝ်ႇသွၵ်ႈႁႃ| တူၺ်းၼႃႈလိၵ်ႈဢၼ် ၼႄပၼ် ၸိူဝ်း ဢၼ်ၸဝ်ႈၵဝ်ႇသွၵ်ႈႁႃဝႆ့}}",
        "searchprofile-articles": "ၼႃႈလိၵ်ႈ ၼမ်းၼႂ်း",
        "searchprofile-images": "သႅၼ်သိုဝ်ႇၶၢဝ်ႇ",
index 74f07df..3e03d8b 100644 (file)
        "rawhtml-notallowed": "Oznak &lt;html&gt; ni možno uporabljati izven normalnih strani.",
        "gotointerwiki": "Zapuščate {{GRAMMAR:tožilnik|{{SITENAME}}}}",
        "gotointerwiki-invalid": "Naveden naslov je neveljaven.",
-       "gotointerwiki-external": "Zapuščate {{GRAMMAR:tožilnik|{{SITENAME}}}}, da obiščete [[$2]], ki je ločena spletna stran.\n\n[$1 Kliknite tukaj, da nadaljujete na $1].",
+       "gotointerwiki-external": "Zapuščate {{GRAMMAR:tožilnik|{{SITENAME}}}}, da obiščete [[$2]], ki je ločena spletna stran.\n\n'''[$1 Nadaljujte na $1]'''",
        "undelete-cantedit": "Strani ne morete obnoviti, saj vam ni dovoljeno, da jo urejate.",
        "undelete-cantcreate": "Strani ne morete obnoviti, saj stran s tem imenom ne obstaja in je nimate dovoljenja ustvariti."
 }
index 69ef7f6..64e4742 100644 (file)
@@ -32,7 +32,8 @@
                        "Ammartivari",
                        "Kosovastar",
                        "Matma Rex",
-                       "Arianit"
+                       "Arianit",
+                       "Denisa"
                ]
        },
        "tog-underline": "Nënvizimi i lidhjes:",
        "virus-scanfailed": "skanimi dështoi (code $1)",
        "virus-unknownscanner": "antivirus i pa njohur:",
        "logouttext": "'''Ju keni dalë jashtë.''' \n \n Kini parasysh që disa faqe mund të shfaqen sikur të ishit i identifikuar derisa të fshini ''cache''-in e shfletuesit tuaj.",
+       "cannotlogoutnow-title": "Nuk mund të çkyçeni tani",
        "welcomeuser": "Mirë se vini, $1!",
        "welcomecreation-msg": "Llogaria e jote u krijua. \nMos harro të ndryshosh [[Special:Preferences|{{SITENAME}} parapëlqimet]] e tua.",
        "yourname": "Fusni nofkën tuaj",
        "createacct-yourpasswordagain-ph": "Shtypni fjalëkalimin përsëri",
        "userlogin-remembermypassword": "Më mbaj të kyçur",
        "userlogin-signwithsecure": "Përdor lidhje të sigurtë",
+       "cannotlogin-title": "Nuk mund të kyçeni",
+       "cannotlogin-text": "Identifikimi nuk është i mundur",
+       "cannotloginnow-title": "Nuk mund të identifikoheni tani",
+       "cannotloginnow-text": "Identifikimi nuk është i mundur kur përdorni $1.",
+       "cannotcreateaccount-title": "Nuk mund të krijoni llogari",
+       "cannotcreateaccount-text": "Krijimi direkt i llogarisë nuk është i mundur në këtë wiki.",
        "yourdomainname": "Faqja juaj",
        "password-change-forbidden": "Ju nuk mund të ndryshoni fjalëkalimet në këtë wiki.",
        "externaldberror": "Ose kishte një gabim tek regjistri i identifikimit të jashtëm, ose nuk ju lejohet të përtërini llogarinë tuaje të jashtme.",
        "userlogin-resetpassword-link": "Keni harruar fjalëkalimin?",
        "userlogin-helplink2": "Ndihmë rreth identifikimit",
        "userlogin-loggedin": "Ju tashmë jeni i regjistruar si {{GENDER:$1|$1}}.\nPërdore formularin më poshtë për të hyrë si një përdorues tjetër.",
+       "userlogin-reauth": "Duhet të identifikoheni përsëri për të verifikuar që jeni {{GENDER:$1|$1}}",
        "userlogin-createanother": "Krijo një llogari tjeter",
        "createacct-emailrequired": "Posta elektronike",
        "createacct-emailoptional": "Adresa Elektronike (me dëshirë)",
        "createacct-email-ph": "Fusni adresën tuaj elektronike",
        "createacct-another-email-ph": "Vendos adresën e postës elektronike",
        "createaccountmail": "Përdorni një fjalëkalim të përkohshëm të rastit dhe  dërgojeni atë në adresën e specifikuar te email",
+       "createaccountmail-help": "Mund të përdoret për të krijuar llogari për një person tjetër pa njohur fjalëkalimin.",
        "createacct-realname": "Emri i vërtetë (me dëshirë)",
        "createacct-reason": "Arsyeja",
        "createacct-reason-ph": "Pse ju jeni duke krijuar një llogari tjetër",
+       "createacct-reason-help": "Mesazhi tregohet në identifikimin e krijimit të llogarisë.",
        "createacct-submit": "Krijoni llogarinë tuaj",
        "createacct-another-submit": "Krijo një llogari",
        "createacct-continue-submit": "Vazhdo krijimin e llogarisë",
        "nocookiesnew": "Llogaria e përdoruesit u krijua por ti nuk je identifikuar akoma.\n{{SITENAME}} shfrytëzon \"cookies\" për të identifikuar përdoruesit.\nTi ke çaktivizuar e \"cookies\".\nTë lutem, avktizo ato, pastaj identifikohu emrin e ri të përdoruesit dhe fjalëkalimin.",
        "nocookieslogin": "{{SITENAME}} shfrytëzon \"cookies\" për identifikimin e përdoruesve.\nYou nuk lejoni shfrytëzimin e \"cookies\".\nJu lutemi, lejoni shfrytëzimin e \"cookies\" dhe provojeni përsëri.",
        "nocookiesfornew": "Llogaria e përdoruesit nuk u krijua, pasi ne nuk mund të konfirmojmë burimin e tij.\nSigurohuni që ju lejoni shfrytëzimin e \"cookies\", rifreskoni këtë faqe dhe provojen përsëri.",
+       "createacct-loginerror": "Llogaria u krijua me sukses, por ju nuk mund të identifikoheni automatikisht. Ju lutem vazhdoni tek [[Special:UserLogin|manual login]].",
        "noname": "Nuk keni dhënë një emër përdoruesi të pranueshëm.",
        "loginsuccesstitle": "I/e identifikuar",
        "loginsuccess": "'''Ju tani jeni identifikuar tek {{SITENAME}} si \"$1\".'''",
-       "nosuchuser": "Nuk ka ndonjë përdorues me emrin \"$1\".\nKontrolloni shkrimin ose [[Special:CreateAccount|hapni një llogari të re]].",
+       "nosuchuser": "Nuk ka ndonjë përdorues me emrin \"$1\".\nEmri përdoruesit është i ndjeshëm ndaj madhësisë së gërmave.\nKontrolloni shkrimin ose [[Special:CreateAccount|hapni një llogari të re]].",
        "nosuchusershort": "Nuk ka asnjë përdorues me emrin \"$1\".",
        "nouserspecified": "Ju duhet të jepni një nofkë",
        "login-userblocked": "Ky përdorues është bllokuar. Identifikimi nuk lejohet.",
        "changepassword-success": "Fjalëkalimi yt është ndryshuar.",
        "changepassword-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para se te tentoni përsëri.",
        "botpasswords": "Bot fjalëkalimet",
+       "botpasswords-summary": "<em>Fjalëkalimi Botit</em> mundëson hyrjen në një llogari përdoruesi nëpërmjet API pa përdorur kredencialet kryesore të identifikimit. Të drejtat e përdoruesit janë të kufizuara kur identifikoheni me një fjalëkalim boti.\n\nNëse nuk e dini përse doni ta bëni këtë, më mirë mos e bëni. Asnjë nuk duhet t'iu kërkoj të gjeneroni një nga këto dhe tua dërgoni atyre.",
+       "botpasswords-disabled": "Fjalëkalimet e botit janë të padisponueshme.",
+       "botpasswords-no-central-id": "Për të përdorur fjalëkalimet e botit, duhet të identifikoheni në një llogari të centralizuar.",
+       "botpasswords-existing": "Fjalëkalimet ekzistuese të boteve.",
+       "botpasswords-createnew": "Krijo një fjalëkalim të ri boti",
+       "botpasswords-editexisting": "Redakto një fjalëkalim ekzistues boti",
+       "botpasswords-label-appid": "Emri botit:",
        "botpasswords-label-create": "Krijo",
        "botpasswords-label-update": "Përditëso",
        "botpasswords-label-cancel": "Anulo",
        "botpasswords-label-delete": "Fshi",
        "botpasswords-label-resetpassword": "Rivendos fjalëkalimin",
+       "botpasswords-label-grants": "Bursa të aplikueshme:",
+       "botpasswords-help-grants": "Bursat lejojnë hyrje në të drejtat e zotëruara nga llogaria juaj e përdoruesit.Mundësimi i një burse këtu nuk mundëson hyrje në asnjë të drejtë që llogaria juaj e përdoruesit nuk mund t'i ketë. Shikoni  [[Special:ListGrants|tabela e bursave]] për më tepër informacion.",
        "botpasswords-label-grants-column": "Lejuar",
+       "botpasswords-bad-appid": "Emri i botit \"$1\" nuk është i vlefshëm.",
+       "botpasswords-insert-failed": "Dështoi për të shtuar emrin e botit \"$1\". është shtuar tashmë?",
        "botpasswords-update-failed": "Dështoi për të përditësuar emrin e bot \"$1\". Ishte fshirë?",
+       "botpasswords-created-title": "Fjalëkalimi botit u krijua",
        "resetpass_forbidden": "Fjalëkalimet nuk mund të ndryshohen",
        "resetpass_forbidden-reason": "Nuk mund të ndërrohet fjalëkalimi: $1",
        "resetpass-no-info": "Duhet të jeni i kyçur që të keni qasje direkte në këtë faqe.",
index 6aa8e6b..aed37e7 100644 (file)
        "createacct-reason-ph": "Зашто правите још један налог?",
        "createacct-submit": "Отвори налог",
        "createacct-another-submit": "Отвори налог",
-       "createacct-benefit-heading": "{{SITENAME}} Ñ\98е Ð½Ð°Ð¿Ñ\80авÑ\99ен Ð¾Ð´ Ñ\81Ñ\82Ñ\80ане Ñ\99Ñ\83ди ÐºÐ°Ð¾ Ñ\88Ñ\82о Ñ\81Ñ\82е Ð²Ð¸.",
+       "createacct-benefit-heading": "{{SITENAME}} Ñ\98е Ð¿Ñ\80оÑ\98екаÑ\82 ÐºÐ¾Ñ\98и Ñ\81Ñ\82ваÑ\80аÑ\98Ñ\83 Ñ\99Ñ\83ди Ð¿Ð¾Ð¿Ñ\83Ñ\82 Ð\92аÑ\81.",
        "createacct-benefit-body1": "{{PLURAL:$1|измена}}",
        "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}",
        "createacct-benefit-body3": "{{PLURAL:$1|активни корисник|активних корисника}}",
        "userrights-changeable-col": "Групе које можете да промените",
        "userrights-unchangeable-col": "Групе које не можете да промените",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "Истиче $1",
+       "userrights-expiry-none": "Не истиче",
+       "userrights-expiry": "Истиче:",
        "userrights-cannot-shorten-expiry": "Не можете убрзати истек чланства у групи „$1”. Само корисници са дозволом да додају или уклоне ову групу могу да убрзају рок истека.",
        "userrights-conflict": "Сукоб промена корисничких права! Молимо проверите ваше измене.",
        "group": "Група:",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
        "recentchanges-submit": "Прикажи",
+       "rcfilters-quickfilters": "Брзе везе",
+       "rcfilters-quickfilters-placeholder": "Спреми своја омиљена подешавања за алатке за каснију употребу.",
+       "rcfilters-savedqueries-defaultlabel": "Сачувани филтери",
+       "rcfilters-savedqueries-rename": "Преименуј",
+       "rcfilters-savedqueries-setdefault": "Постави као подразумевано",
+       "rcfilters-savedqueries-unsetdefault": "Уклони као подразумевано",
+       "rcfilters-savedqueries-remove": "Уклони",
+       "rcfilters-savedqueries-new-name-label": "Име",
+       "rcfilters-savedqueries-apply-label": "Направи брзу везу",
+       "rcfilters-savedqueries-cancel-label": "Откажи",
+       "rcfilters-savedqueries-add-new-title": "Сачувај филтере као брзу везу",
        "rcfilters-restore-default-filters": "Враћање подразумеваних филтера",
        "rcfilters-clear-all-filters": "Уклони све филтере",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-filter-user-experience-level-learner-description": "Више искуства од „новајлија”, али мање од „искусних корисника”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Искусни корисници",
        "rcfilters-filter-user-experience-level-experienced-description": "Преко 30 дана активности и 500 измјена.",
+       "rcfilters-filter-bots-label": "Бот",
        "rcfilters-filter-minor-label": "Мање измјене",
+       "rcfilters-filtergroup-watchlist": "Странице на списку надгледања",
+       "rcfilters-filter-watchlist-watched-label": "На списку надгледања",
+       "rcfilters-filter-watchlist-watched-description": "Измене страница на Вашем списку надгледања",
+       "rcfilters-filter-watchlist-watchednew-label": "Нове измене у списку надгледања",
+       "rcfilters-filter-watchlist-watchednew-description": "Измене страница на списку надгледања које нисте посетили од када су направљене измене.",
+       "rcfilters-filter-watchlist-notwatched-label": "Није на списку надгледања",
+       "rcfilters-filter-watchlist-notwatched-description": "Све осим измена страница на Вашем списку надгледања.",
        "rcfilters-filter-pageedits-label": "Измјене страница",
        "rcfilters-filter-pageedits-description": "Измјене вики садржаја, расправа, описа категорија...",
        "rcfilters-filter-newpages-label": "Стварање страница",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
        "rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Овај филтер типа измене је у сукобу са филтером за „мање” измене. Одређени типови измена не могу да се означе као „мање”.",
+       "rcfilters-filtergroup-lastRevision": "Последња измена",
+       "rcfilters-filter-lastrevision-label": "Последња измена",
+       "rcfilters-filter-lastrevision-description": "Најскорашњија измена странице.",
+       "rcfilters-filter-previousrevision-label": "Раније измене",
+       "rcfilters-filter-previousrevision-description": "Све измене које нису најскорашњије измене странице.",
        "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
        "rclistfromreset": "Ресетуј одабир датума",
        "rclistfrom": "Прикажи нове измене почев од $2 $3",
        "apihelp-no-such-module": "Модул „$1“ није пронађен.",
        "apisandbox": "API песак",
        "apisandbox-api-disabled": "АПИ је онемогућен на овом сајту.",
+       "apisandbox-unfullscreen": "Прикажи страницу",
        "apisandbox-submit": "Постави захтев",
        "apisandbox-reset": "Очисти",
+       "apisandbox-retry": "Покушај поново",
        "apisandbox-results": "Резултати",
        "apisandbox-request-url-label": "Адреса захтева:",
        "apisandbox-continue": "Настави",
        "tooltip-undo": "Поништава ову измену и отвара образац за уређивање.",
        "tooltip-preferences-save": "Сачувај поставке",
        "tooltip-summary": "Унесите кратак опис",
+       "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 — $2",
        "common.css": "/* CSS постављен овде ће се одразити на све теме */",
        "print.css": "/* CSS постављен овде ће утицати на издање за штампу */",
        "noscript.css": "/* CSS постављен овде ће утицати на све кориснике којима је онемогућен јаваскрипт */",
        "mw-widgets-mediasearch-noresults": "Нема резултата.",
        "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
        "mw-widgets-titleinput-description-redirect": "преусмерава на $1",
+       "date-range-from": "Од датума:",
+       "date-range-to": "До датума:",
        "randomrootpage": "Случајна коренска страница",
        "log-action-filter-block": "Тип блокирања:",
        "log-action-filter-contentmodel": "Тип промене модела садржаја:",
        "rawhtml-notallowed": "&lt;html&gt; тагови не могу да се користе ван нормалних страница.",
        "gotointerwiki": "Напуштам пројекат {{SITENAME}}",
        "gotointerwiki-invalid": "Одабрани наслов је невалидан.",
-       "gotointerwiki-external": "УпÑ\80аво Ñ\9bеÑ\82е Ð´Ð° Ð½Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð¿Ñ\80оÑ\98екаÑ\82 {{SITENAME}} Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\81еÑ\82или Ð¿Ñ\80оÑ\98екаÑ\82 [[$2]] ÐºÐ¾Ñ\98и Ñ\98е Ð·Ð°Ñ\81ебан Ð²ÐµÐ±-Ñ\81аÑ\98Ñ\82.\n\n[$1 Ð\9aликниÑ\82е Ð¾Ð²Ð´Ðµ Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¾Ñ\82иÑ\88ли Ð½Ð° $1].",
+       "gotointerwiki-external": "УпÑ\80аво Ñ\9bеÑ\82е Ð´Ð° Ð½Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð¿Ñ\80оÑ\98екаÑ\82 {{SITENAME}} Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð½Ð° Ð·Ð°Ñ\81ебном Ð²ÐµÐ±-Ñ\81аÑ\98Ñ\82Ñ\83 Ð¿Ð¾Ñ\81еÑ\82или [[$2]].\n\n'''[$1 Ð\9fÑ\80одÑ\83жи Ð½Ð° $1]'''",
        "undelete-cantedit": "Не можете повратити ову страницу јер немате дозволу да је уређујете.",
        "undelete-cantcreate": "Не можете повратити ову страницу јер нема постојеће странице са овим именом и немате дозволу да направите ову страницу."
 }
index c90e4df..6e0f085 100644 (file)
        "toolbox": "Alatke",
        "tool-link-userrights": "Promeni {{GENDER:$1|korisnik}} grupe",
        "tool-link-userrights-readonly": "Prikaži {{GENDER:$1|korisnik}} grupe",
-       "tool-link-emailuser": "Pošalji e-poruku {{GENDER:$1|korisnik}}",
+       "tool-link-emailuser": "Pošalji imejl",
        "userpage": "Pogledaj korisničku stranicu",
        "projectpage": "Pogledaj stranicu projekta",
        "imagepage": "Pogledaj stranicu datoteke",
        "createacct-reason-ph": "Zašto pravite još jedan nalog?",
        "createacct-submit": "Otvori nalog",
        "createacct-another-submit": "Otvori nalog",
-       "createacct-benefit-heading": "{{SITENAME}} je napravljen od strane ljudi kao što ste vi.",
+       "createacct-benefit-heading": "{{SITENAME}} je projekat koji stvaraju ljudi poput Vas.",
        "createacct-benefit-body1": "{{PLURAL:$1|izmena|izmene}}",
        "createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice}}",
        "createacct-benefit-body3": "{{PLURAL:$1|aktivni korisnik|aktivnih korisnika}}",
        "tooltip-undo": "Poništava ovu izmenu i otvara obrazac za uređivanje.",
        "tooltip-preferences-save": "Sačuvaj postavke",
        "tooltip-summary": "Unesite kratak opis",
+       "interlanguage-link-title": "$1 — $2",
+       "interlanguage-link-title-nonlang": "$1 — $2",
        "common.css": "/* CSS postavljen ovde će se odraziti na sve teme */",
        "print.css": "/* CSS postavljen ovde će uticati na izdanje za štampu */",
        "noscript.css": "/* CSS postavljen ovde će uticati na sve korisnike kojima je onemogućen javaskript */",
        "authmanager-email-label": "Imejl",
        "authmanager-email-help": "Imejl adresa",
        "changecredentials": "Promjena akreditiva",
-       "removecredentials": "Uklanjanje akreditiva"
+       "removecredentials": "Uklanjanje akreditiva",
+       "gotointerwiki-external": "Upravo ćete da napustite projekat {{SITENAME}} da biste na zasebnom veb-sajtu posetili [[$2]].\n\n'''[$1 Produži na $1]'''"
 }
index c2cb7d6..38f6988 100644 (file)
        "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-caption": "Resultat från systerprojekt",
        "search-interwiki-default": "Resultat från $1:",
        "search-interwiki-more": "(mer)",
        "search-interwiki-more-results": "fler resultat",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Visa",
        "rcfilters-activefilters": "Aktiva filter",
+       "rcfilters-quickfilters": "Snabblänkar",
+       "rcfilters-quickfilters-placeholder": "Spara inställningarna för dina favoritverktyg för att återanvända dem senare.",
+       "rcfilters-savedqueries-defaultlabel": "Sparade filter",
+       "rcfilters-savedqueries-rename": "Döp om",
+       "rcfilters-savedqueries-setdefault": "Ange som standard",
+       "rcfilters-savedqueries-unsetdefault": "Ta bort som standard",
+       "rcfilters-savedqueries-remove": "Ta bort",
+       "rcfilters-savedqueries-new-name-label": "Namn",
+       "rcfilters-savedqueries-apply-label": "Skapa snabblänk",
+       "rcfilters-savedqueries-cancel-label": "Avbryt",
+       "rcfilters-savedqueries-add-new-title": "Spara filter som en snabblänk",
        "rcfilters-restore-default-filters": "Återställ standardfilter",
        "rcfilters-clear-all-filters": "Rensa alla filter",
        "rcfilters-search-placeholder": "Filtrera senaste ändringar (bläddra eller börja skriva)",
        "ipb_hide_invalid": "Kan inte undanhålla detta konto; det har fler än {{PLURAL:$1|en redigering|$1 redigeringar}}.",
        "ipb_already_blocked": "\"$1\" är redan blockerad",
        "ipb-needreblock": "$1 är redan blockerad. Vill du ändra inställningarna?",
-       "ipb-otherblocks-header": "Andra {{PLURAL:$1|blockering|blockeringar}}",
+       "ipb-otherblocks-header": "{{PLURAL:$1|Annan blockering|Andra blockeringar}}",
        "unblock-hideuser": "Du kan inte ta bort blockeringen här användaren, eftersom dens användarnamn har dolts.",
        "ipb_cant_unblock": "Fel: Hittade inte blockering $1. Det är möjligt att den redan har upphävts.",
        "ipb_blocked_as_range": "Fel: IP-adressen $1 är inte direkt blockerad, och kan därför inte avblockeras. Adressen är blockerad som en del av IP-intervallet $2, som kan avblockeras.",
        "mw-widgets-categoryselector-add-category-placeholder": "Lägg till en kategori...",
        "mw-widgets-usersmultiselect-placeholder": "Lägg till fler...",
        "date-range-from": "From. den",
+       "date-range-to": "Till datum:",
        "sessionmanager-tie": "Kan inte kombinera flera begäransautentiseringstyper: $1.",
        "sessionprovider-generic": "$1-sessioner",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "cookiebaserade sessioner",
        "pageid": "sid-ID $1",
        "rawhtml-notallowed": "&lt;html&gt;-taggar kan inte användas utanför normala sidor.",
        "gotointerwiki": "Lämnar {{SITENAME}}",
-       "gotointerwiki-invalid": "Den angivna titeln var ogiltig.",
-       "gotointerwiki-external": "Du håller på att lämna {{SITENAME}} för att besöka [[$2]] som är en separat webbplats.\n\n[$1 Klicka här för att fortsätta till $1].",
+       "gotointerwiki-invalid": "Den angivna titeln är ogiltig.",
+       "gotointerwiki-external": "Du håller på att lämna {{SITENAME}} för att besöka [[$2]] som är en separat webbplats.\n\n'''[$1 Fortsätt till $1]'''",
        "undelete-cantedit": "Du kan inte återställa denna sida eftersom du är inte tillåten att redigera denna sida.",
        "undelete-cantcreate": "Du kan inte återställa denna sida eftersom det inte finns någon befintlig sida med detta namn och du tillåts inte att skapa denna sida."
 }
index 0bdae17..6aa52c2 100644 (file)
        "policy-url": "Project:นโยบาย",
        "portal": "ศูนย์รวมชุมชน",
        "portal-url": "Project:ศูนย์รวมชุมชน",
-       "privacy": "à¸\99à¹\82ยà¸\9aายสิà¸\97à¸\98ิสà¹\88วà¸\99à¸\9aุà¸\84à¸\84ล",
-       "privacypage": "Project:à¸\99à¹\82ยà¸\9aายสิà¸\97à¸\98ิสà¹\88วà¸\99à¸\9aุà¸\84à¸\84ล",
+       "privacy": "à¸\99à¹\82ยà¸\9aายà¸\84วามà¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99à¸\95ัว",
+       "privacypage": "Project:à¸\99à¹\82ยà¸\9aายà¸\84วามà¹\80à¸\9bà¹\87à¸\99สà¹\88วà¸\99à¸\95ัว",
        "badaccess": "มีข้อผิดพลาดในการใช้สิทธิ",
        "badaccess-group0": "คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ขอ",
        "badaccess-groups": "ปฏิบัติการที่คุณขอนี้สงวนไว้เฉพาะผู้ใช้ใน{{PLURAL:$2|กลุ่ม|กลุ่มเหล่านี้}}: $1",
        "viewsourcetext": "คุณสามารถดูและคัดลอกโค้ดของหน้านี้",
        "viewyourtext": "คุณสามารถดูและคัดลอกต้นฉบับ<strong>การแก้ไขของคุณ</strong>มาหน้านี้ได้",
        "protectedinterface": "หน้านี้เป็นข้อความส่วนต่อประสานสำหรับซอฟต์แวร์บนวิกินี้ และถูกล็อกเพื่อป้องกันการกระทำผิด\nในการเพิ่มหรือเปลี่ยนแปลงการแปลสำหรับทุกวิกิ โปรดใช้ [https://translatewiki.net/ translatewiki.net] โครงการแปลมีเดียวิกิเป็นภาษาถิ่น",
-       "editinginterface": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\88ัà¸\94หาข้อความอินเตอร์เฟซให้ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะมีผลต่อสภาพปรากฏของส่วนต่อประสานผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้",
+       "editinginterface": "<strong>à¸\84ำà¹\80à¸\95ือà¸\99:</strong> à¸\84ุà¸\93à¸\81ำลัà¸\87à¹\81à¸\81à¹\89à¹\84à¸\82หà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\88ัà¸\94à¹\80à¸\95รียมข้อความอินเตอร์เฟซให้ซอฟต์แวร์\nการเปลี่ยนแปลงหน้านี้จะมีผลต่อสภาพปรากฏของส่วนต่อประสานผู้ใช้แก่ผู้ใช้อื่นบนวิกินี้",
        "translateinterface": "ในการเพิ่มหรือเปลี่ยนแปลงคำแปลสำหรับทุกวิกิ โปรดใช้ [https://translatewiki.net/ translatewiki.net] โครงการแปลเป็นภาษาถิ่นของมีเดียวิกิ",
        "cascadeprotected": "หน้านี้ถูกป้องกันมิให้แก้ไข เพราะถูกรวมอยู่ใน{{PLURAL:$1|page, which is|หน้าต่อไปนี้}} ซึ่งถูกล็อกโดยเปิดตัวเลือก \"ต่อเรียง\":\n$2",
        "namespaceprotected": "คุณไม่มีสิทธิแก้ไขหน้าในเนมสเปซ <strong>$1</strong>",
        "datedefault": "ไม่ตั้งค่า",
        "prefs-labs": "คุณสมบัติทดลอง",
        "prefs-user-pages": "หน้าผู้ใช้",
-       "prefs-personal": "à¹\82à¸\9eรà¹\84à¸\9fลà¹\8cผู้ใช้",
+       "prefs-personal": "à¸\82à¹\89อมูลผู้ใช้",
        "prefs-rc": "ปรับปรุงล่าสุด",
        "prefs-watchlist": "รายการเฝ้าดู",
        "prefs-editwatchlist": "แก้ไขรายการเฝ้าดู",
        "categories-submit": "แสดง",
        "categoriespagetext": "{{PLURAL:$1|หมวดหมู่นี้|หมวดหมู่ต่อไปนี้}}มีหน้าหรือสื่อต่าง ๆ\n[[Special:UnusedCategories|หมวดหมู่ที่ไม่ได้ใช้]]จะไม่แสดงในที่นี้\nดูเพิ่มที่ [[Special:WantedCategories|หมวดหมู่ที่ต้องการ]]",
        "categoriesfrom": "แสดงหมวดหมู่เริ่มจาก:",
-       "deletedcontributions": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ที่ถูกลบ",
-       "deletedcontributions-title": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¹\80à¸\82ียà¸\99à¸\82อà¸\87à¸\9cูà¹\89à¹\83à¸\8aà¹\89ที่ถูกลบ",
+       "deletedcontributions": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\80à¸\82ียà¸\99ที่ถูกลบ",
+       "deletedcontributions-title": "à¹\80รืà¹\88อà¸\87à¸\97ีà¹\88à¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\80à¸\82ียà¸\99ที่ถูกลบ",
        "sp-deletedcontributions-contribs": "เรื่องที่เขียน",
        "linksearch": "ค้นหาลิงก์ภายนอก",
        "linksearch-pat": "รูปแบบการค้นหา:",
index 61b1939..2ea966a 100644 (file)
@@ -19,7 +19,8 @@
                        "Matma Rex",
                        "Stranger195",
                        "Emem.calist",
-                       "Asmen"
+                       "Asmen",
+                       "MJPCubelo"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng link:",
@@ -37,6 +38,7 @@
        "tog-watchdefault": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binago ko",
        "tog-watchmoves": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang inilipat ko",
        "tog-watchdeletion": "Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binura ko",
+       "tog-watchuploads": "Magdagdag ng mga bagong file sa aking mga sinusubaybayang listahan.",
        "tog-watchrollback": "Magdagdag ng mga pahina kung saan ako nag-rollback sa aking bantayan",
        "tog-minordefault": "Markahan ang lahat ng pagbabago bilang maliit nang nakatakda",
        "tog-previewontop": "Ipakita ang paunang tingin bago ang kahon ng pagbabago",
@@ -63,7 +65,7 @@
        "tog-showhiddencats": "Ipakita ang mga nakatagong kategorya",
        "tog-norollbackdiff": "Alisin ang mga pagkakaiba pagkatapos isagawa ang pagpapagulong na pabalik sa dati",
        "tog-useeditwarning": "Magbabala sa akin kapag umalis ako sa isang pahina ng pampatnugot na hindi pa nasasagip ang mga pagbabago",
-       "tog-prefershttps": "Laging gamitin ang isang matibay na koneksiyon kapag naka-login",
+       "tog-prefershttps": "Laging gamitin ang isang walang panganib na koneksiyon kapag naka-login",
        "underline-always": "Palagi",
        "underline-never": "Hindi magpakailanman",
        "underline-default": "Tinakda ng pambasa-basa o balat",
        "newwindow": "(magbubukas sa bagong window)",
        "cancel": "Kanselahin",
        "moredotdotdot": "Damihan pa...",
-       "morenotlisted": "Hindi kumpleto ang talang ito.",
+       "morenotlisted": "Maaring hindi kumpleto ang talang ito.",
        "mypage": "Pahina ko",
        "mytalk": "Usapan",
        "anontalk": "Usapan",
        "recentchanges-label-plusminus": "Nagbago ang laki ng pahina sa ganitong bilang ng mga byte",
        "recentchanges-legend-heading": "<strong>Gabay:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tingnan din [[Special:NewPages|ang talaan ng mga bagong pahina]])",
+       "rcfilters-quickfilters": "Mga mabilisang kawing",
+       "rcfilters-savedqueries-rename": "Pangalanang muli",
+       "rcfilters-savedqueries-remove": "Alisin",
+       "rcfilters-savedqueries-new-name-label": "Pangalan",
+       "rcfilters-savedqueries-cancel-label": "Balewalain",
        "rcfilters-restore-default-filters": "Ibalik ang mga napagkaukulang 'filters'",
        "rcfilters-clear-all-filters": "Burahin lahat ng mga 'filters'",
        "rcfilters-empty-filter": "Walang aktibong panangga. Lahat ay ipinamalas.",
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
-       "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina"
+       "date-range-from": "Mula sa petsang:",
+       "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina",
+       "gotointerwiki-invalid": "Di-wasto ang tinukoy na pamagat."
 }
index e32af0f..5506c73 100644 (file)
        "right-delete": "битләрне бетерү",
        "right-browsearchive": "Бетерелгән битләрне эзләү",
        "right-undelete": "Битләрне торгызу",
+       "right-suppressionlog": "Шәхси журналларны карау",
        "right-editinterface": "Кулланучы интерфейсын үзгәртү",
        "grant-group-email": "Хатлар җибәрү",
        "grant-uploadfile": "Яңа файллар йөкләү",
        "recentchanges-legend-heading": "<strong>Аңлатма:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шулай ук [[Special:NewPages|яңа битләр исемлеген]] карагыз)",
        "recentchanges-submit": "Күрсәт",
+       "rcfilters-clear-all-filters": "Барлык филтерләрне чистарту",
        "rcfilters-filter-registered-label": "Теркәлгән",
        "rcfilters-filter-registered-description": "Теркәлгән мөхәррирләр.",
        "rcfilters-filter-user-experience-level-experienced-label": "Тәҗрибәле кулланучылар",
+       "rcfilters-filter-humans-label": "Кеше (бот түгел)",
        "rcfilters-filter-minor-description": "«Кече үзгәртү» дип тамгаланган үзгәртүләр",
+       "rcfilters-filter-pageedits-label": "Бит үзгәртүләре",
+       "rcfilters-filter-newpages-label": "Бит төзүләре",
        "rcfilters-filter-logactions-label": "Беркетмәләнә торган гамәлләр",
        "rcfilters-filter-logactions-description": "Административ гамәлләр, хисап язмасын төзүләр, битне бетерүләр, файл йөкләүләр...",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәртүләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
index 9b9a469..fd51e98 100644 (file)
        "prefs-signature": "Хол үжүү",
        "prefs-diffs": "Ылгалдар",
        "editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
-       "editinguser": "Changing user rights of user '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
        "userrights-editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
        "saveusergroups": "{{GENDER:$1|Ажыглакчының|Ажыглакчының}} бөлгүмнерин шыгжаар",
        "userrights-reason": "Чылдагаан:",
index 33020c4..7694902 100644 (file)
        "currentrevisionlink": "Алиез версия",
        "cur": "али",
        "last": "азьв.",
-       "history-fieldset-title": "Ð\98Ñ\81Ñ\82оÑ\80иез Ð²Ð¾Ñ\88Ñ\82Ó¥Ñ\81Ñ\8cкон Ð¿Ð¾Ð½Ð½Ð°",
-       "history-show-deleted": "Ӵотаны ӵушылэмъёссэ гинэ",
+       "history-fieldset-title": "ТÑ\83паÑ\82онÑ\8aÑ\91Ñ\81Ñ\82Ñ\8b Ñ\83Ñ\82Ñ\87анÑ\8b",
+       "history-show-deleted": "Ӵушылэм тупатонъёссэ гинэ",
        "rev-delundel": "возьматыны/ватыны",
        "rev-showdeleted": "возьматоно",
        "revdelete-show-file-submit": "Бен",
        "prefs-editing": "Тупатон",
        "yourlanguage": "Интерфейслэн кылыз:",
        "prefs-preview": "Бамез эскерон",
-       "userrights": "Ð\9fÑ\8bÑ\80иÑ\81Ñ\8cкиÑ\81Ñ\8cлÑ\8dн Ð¿Ñ\80авооÑ\81Ñ\8bныз",
+       "userrights": "Ð\92икиавÑ\82оÑ\80лÑ\8dн Ð¿Ñ\80авооÑ\81ыз",
        "editusergroup": "Викиавторлэсь группаоссэ возьматыны",
        "group-autoconfirmed": "Авто-юнматэм викиавторъёс",
        "group-bot": "Ботъёс",
index 0010504..8acea02 100644 (file)
@@ -68,7 +68,8 @@
                        "Visem",
                        "MMH",
                        "Олександр",
-                       "Similartothissimilartothat"
+                       "Similartothissimilartothat",
+                       "Bunyk"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
        "pageid": "ID сторінки $1",
        "rawhtml-notallowed": "Теги &lt;html&gt; не можна використовувати за межами звичайних сторінок.",
        "gotointerwiki": "Ви покидаєте сайт {{SITENAME}}",
-       "gotointerwiki-invalid": "Ð\92казана Ð½Ð°Ð·Ð²Ð° Ð±Ñ\83ла Ð½ÐµÐ¿Ñ\80ипÑ\83Ñ\81Ñ\82имоÑ\8e.",
+       "gotointerwiki-invalid": "Ð\92казана Ð½Ð°Ð·Ð²Ð° Ð½ÐµÐ¿Ñ\80ипÑ\83Ñ\81Ñ\82има.",
        "gotointerwiki-external": "Ви збираєтесь покинути сайт {{SITENAME}}, щоб відвідати проект [[$2]], який є окремим веб-сайтом.\n\n[$1 Клацніть тут, щоб продовжити, перейшовши до $1].",
        "undelete-cantedit": "Ви не можете відновити цю сторінку, оскільки Ви не маєте прав на редагування цієї сторінки.",
        "undelete-cantcreate": "Ви не можете відновити цю сторінку, оскільки сторінка з такою назвою не існує, і Ви не маєте прав на створення цієї сторінки."
index 1f78ad2..825aec9 100644 (file)
        },
        "tog-underline": "链接下划线:",
        "tog-hideminor": "在最近更改中隐藏小编辑",
-       "tog-hidepatrolled": "在最近更改中隐藏已巡查的编辑",
+       "tog-hidepatrolled": "在最近更改中隐藏已检查过的编辑",
        "tog-newpageshidepatrolled": "在新页面列表中隐藏已巡查页面",
        "tog-hidecategorization": "隐藏页面的分类",
        "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅是最近的更改",
        "gender-unknown": "当提及您时,软件将尽可能使用性别中性的词法",
        "gender-male": "他",
        "gender-female": "她",
-       "prefs-help-gender": "该设置为可选项。软件根据该值在称呼您及对他人提及您时使用适当的语法性别。该信息会被公开。",
+       "prefs-help-gender": "该设置为可选项。系统会使用您选择的方式来称呼您,对他人提及您时也会使用适当语法称呼。该信息会公开。",
        "email": "电子邮件",
        "prefs-help-realname": "真实姓名是选填项目。如果提供,它可能用于署名您的贡献。",
        "prefs-help-email": "电子邮件地址是选填项,但是当您忘记您的密码要重置密码时,需要该信息。",
        "upload-description": "文件说明",
        "upload-options": "上传选项",
        "watchthisupload": "监视这个文件",
-       "filewasdeleted": "之前已经有一个同名文件被上传后又被删除了。在上传此文件之前您需要检查$1。",
+       "filewasdeleted": "之前已经上传过一个同名文件,后来又删除了。在上传此文件之前您应该检查$1。",
        "filename-thumb-name": "这看起来像是缩略图标题。请不要将缩略图上传回同一wiki。否则,请修改文件名使其更有意义,并且没有缩略图前缀。",
        "filename-bad-prefix": "您上传的文件名称是以<strong>“$1”</strong>作为开头,通常这种没有含意的文件名称是由数码相机中自动编排。请在您的文件中重新选择一个更加有意义的文件名称。",
        "filename-prefix-blacklist": " #<!-- 请将本行保留为原样 --> <pre>\n# 语法如下:\n#  * 任何以“#”开头到结尾的行为注释\n#  * 任何非空行是根据相机自动分配特定文件名的前缀\nCIMG # 卡西欧\nDSC_ # 尼康\nDSCF # 富士\nDSCN # 尼康\nDUW # 部分手机\nIMG # 一般\nJD # 业纳\nMGP # 宾得\nPICT # 其他\n #</pre> <!-- 请将本行保留为原样 -->",
        "ancientpages": "最老页面",
        "move": "移动",
        "movethispage": "移动本页",
-       "unusedimagestext": "存在以下没有插入任何页面的文件。请注意,其他网站可能会使用直接URL链接某个文件,因此它即使被实际使用也可能在这里列出。",
+       "unusedimagestext": "下面为未被任何页面使用的文件。请注意,其他网站可能会通过URL直接链接某个文件,因此列表中的文件有可能仍在使用。",
        "unusedcategoriestext": "以下分类页面实际存在,即使没有其它页面或分类利用它们。",
        "notargettitle": "无目标",
        "notargettext": "您还没有指定一个目标页面或用户以进行此项操作。",
        "undeletepage": "查看和还原被删除的页面",
        "undeletepagetitle": "<strong>以下包含[[:$1|$1]]的已删除之版本</strong>。",
        "viewdeletedpage": "查看被删页面",
-       "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
+       "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已删除,但内容仍然在存档中,而且可以恢复。存档可能会定时清理。",
        "undelete-fieldset-title": "还原版本",
        "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击<strong><em>{{int:undeletebtn}}</em></strong>。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击<strong><em>{{int:undeletebtn}}</em></strong>。",
        "undeleterevisions": "$1个{{PLURAL:$1|修订版本}}已删除",
        "rawhtml-notallowed": "&lt;html&gt;标签不能在一般页面以外使用。",
        "gotointerwiki": "离开{{SITENAME}}",
        "gotointerwiki-invalid": "指定的标题无效。",
-       "gotointerwiki-external": "您将要离开{{SITENAME}}来访问[[$2]],这是一个独立网站。\n\n[$1 点此继续访问$1]。",
+       "gotointerwiki-external": "您将要离开{{SITENAME}}来访问[[$2]],这是一个独立网站。\n\n'''[$1 继续访问$1]'''",
        "undelete-cantedit": "您不能还原该页面,因为您未被允许编辑该页面。",
        "undelete-cantcreate": "您不能还原该页面,因为没有使用该页面名称的现有页面,并且您未被允许编辑该页面。"
 }
index 11d674d..6cd6d63 100644 (file)
        "ancientpages": "最舊頁面",
        "move": "移動",
        "movethispage": "移動此頁面",
-       "unusedimagestext": "下列為未被任何頁面使用的檔案。\n請注意,其它網站可能直接透過 URL 連結至檔案,所以這裡列出的檔案仍有可能被使用。",
+       "unusedimagestext": "下列為未被任何頁面使用的檔案。\n請注意,其它網站可能直接透過 URL 連結至檔案,所以這裡列出的檔案有可能仍在使用。",
        "unusedcategoriestext": "下列分類沒有被其它頁面或者分類所使用。",
        "notargettitle": "無目標",
        "notargettext": "您尚未指定目標頁面或使用者以進行此項操作。",
index b3866c1..d396703 100644 (file)
@@ -309,7 +309,9 @@ class ImportImages extends Maintenance {
                                        if ( $handler ) {
                                                $metadata = MediaWiki\quietCall( 'unserialize', $props['metadata'] );
 
-                                               $publishOptions['headers'] = $handler->getContentHeaders( $metadata );
+                                               $publishOptions['headers'] = $handler->getContentHeaders(
+                                                       $metadata, $props['width'], $props['height']
+                                               );
                                        } else {
                                                $publishOptions['headers'] = [];
                                        }
index f106db1..1d53615 100644 (file)
 杜琪峰      杜琪峯
 單向 單向
 轉向 轉向 #分詞用
+十出頭      十出頭
index 4effa8e..9b2e081 100644 (file)
 精制服
 經有云
 編制法
+防制法
 能干休
 能干戈
 能干擾
 于海
 於海邊
 於海上
+於海拔
+於山東
+於山西
 于凌辰
 于魁智
 于鬯
 蒸製
 烹製
 醃製
+鐵製
+鋼製
+銅製
+鋅製
 和製漢
 和製英語
 壓製機
 短發生
 頭發現
 蛋白發
+發狀態
+發狀況
 古人有云
 昔人有云
 云敞
 金聖歎
 天台 #分詞用
 性別扭曲
+箇舊市
+雲南箇舊
index b9b418c..e252256 100644 (file)
@@ -48,11 +48,14 @@ class RefreshFileHeaders extends Maintenance {
 
                $count = 0;
                $dbr = $this->getDB( DB_REPLICA );
+
                do {
                        $conds = [ "img_name > {$dbr->addQuotes( $start )}" ];
+
                        if ( strlen( $end ) ) {
                                $conds[] = "img_name <= {$dbr->addQuotes( $end )}";
                        }
+
                        $res = $dbr->select( 'image', '*', $conds,
                                __METHOD__, [ 'LIMIT' => $this->mBatchSize, 'ORDER BY' => 'img_name ASC' ] );
 
@@ -62,34 +65,48 @@ class RefreshFileHeaders extends Maintenance {
                                $res->rewind();
                        }
 
+                       $backendOperations = [];
+
                        foreach ( $res as $row ) {
                                $file = $repo->newFileFromRow( $row );
                                $headers = $file->getContentHeaders();
+
                                if ( count( $headers ) ) {
-                                       $this->updateFileHeaders( $file, $headers );
+                                       $backendOperations[] = [
+                                               'op' => 'describe', 'src' => $file->getPath(), 'headers' => $headers
+                                       ];
                                }
+
                                // Do all of the older file versions...
                                foreach ( $file->getHistory() as $oldFile ) {
                                        $headers = $oldFile->getContentHeaders();
                                        if ( count( $headers ) ) {
-                                               $this->updateFileHeaders( $oldFile, $headers );
+                                               $backendOperations[] = [
+                                                       'op' => 'describe', 'src' => $oldFile->getPath(), 'headers' => $headers
+                                               ];
                                        }
                                }
+
                                if ( $this->hasOption( 'verbose' ) ) {
-                                       $this->output( "Updated headers for file '{$row->img_name}'.\n" );
+                                       $this->output( "Queued headers update for file '{$row->img_name}'.\n" );
                                }
-                               ++$count;
+
                                $start = $row->img_name; // advance
                        }
+
+                       $backendOperationsCount = count( $backendOperations );
+                       $count += $backendOperationsCount;
+
+                       $this->output( "Updating headers for {$backendOperationsCount} file(s).\n" );
+                       $this->updateFileHeaders( $repo, $backendOperations );
                } while ( $res->numRows() === $this->mBatchSize );
 
                $this->output( "Done. Updated headers for $count file(s).\n" );
        }
 
-       protected function updateFileHeaders( File $file, array $headers ) {
-               $status = $file->getRepo()->getBackend()->describe( [
-                       'src' => $file->getPath(), 'headers' => $headers
-               ] );
+       protected function updateFileHeaders( $repo, $backendOperations ) {
+               $status = $repo->getBackend()->doQuickOperations( $backendOperations );
+
                if ( !$status->isGood() ) {
                        $this->error( "Encountered error: " . print_r( $status, true ) );
                }
index 4c9934d..4237639 100644 (file)
@@ -1150,7 +1150,6 @@ return [
                ],
                'scripts' => 'resources/src/mediawiki/mediawiki.notification.js',
                'dependencies' => [
-                       'mediawiki.page.startup',
                        'mediawiki.util',
                ],
                'targets' => [ 'desktop', 'mobile' ],
@@ -1477,7 +1476,6 @@ return [
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
                'dependencies' => [
                        'mediawiki.util',
-                       'mediawiki.page.startup',
                        'user.options',
                ],
        ],
@@ -1666,13 +1664,11 @@ return [
        ],
        'mediawiki.page.startup' => [
                'scripts' => 'resources/src/mediawiki/page/startup.js',
-               'dependencies' => 'mediawiki.util',
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.page.patrol.ajax' => [
                'scripts' => 'resources/src/mediawiki/page/patrol.ajax.js',
                'dependencies' => [
-                       'mediawiki.page.startup',
                        'mediawiki.api',
                        'mediawiki.util',
                        'mediawiki.Title',
@@ -1689,7 +1685,6 @@ return [
        'mediawiki.page.watch.ajax' => [
                'scripts' => 'resources/src/mediawiki/page/watch.js',
                'dependencies' => [
-                       'mediawiki.page.startup',
                        'mediawiki.api.watch',
                        'mediawiki.notify',
                        'mediawiki.util',
@@ -1986,6 +1981,12 @@ return [
        'mediawiki.special.movePage.styles' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.movePage.css',
        ],
+       'mediawiki.special.newFiles' => [
+               'scripts' => 'resources/src/mediawiki.special/mediawiki.special.newFiles.js',
+               'dependencies' => [
+                       'mediawiki.widgets.datetime',
+               ],
+       ],
        'mediawiki.special.pageLanguage' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.pageLanguage.js',
                'dependencies' => [
index 7296811..9d3df8c 100644 (file)
                if ( $defaultToggle === undefined ) {
                        $defaultToggle = null;
                }
-               if ( $defaultToggle !== null && !$defaultToggle.jquery ) {
-                       // is optional (may be undefined), but if defined it must be an instance of jQuery.
-                       // If it's not, abort right away.
-                       // After this $defaultToggle is either null or a valid jQuery instance.
-                       return;
-               }
 
                // Trigger a custom event to allow callers to hook to the collapsing/expanding,
                // allowing the module to be testable, and making it possible to
                if ( e ) {
                        if (
                                e.type === 'click' &&
-                               options.linksPassthru &&
-                               e.target.nodeName.toLowerCase() === 'a' &&
-                               $( e.target ).attr( 'href' ) &&
-                               $( e.target ).attr( 'href' ) !== '#'
+                               e.target.nodeName.toLowerCase() === 'a'
                        ) {
-                               // Don't fire if a link with href !== '#' was clicked, if requested  (for premade togglers by default)
+                               // Don't fire if a link was clicked (for premade togglers)
                                return;
                        } else if ( e.type === 'keypress' && e.which !== 13 && e.which !== 32 ) {
                                // Only handle keypresses on the "Enter" or "Space" keys
                                .toggleClass( 'mw-collapsible-toggle-expanded', wasCollapsed );
                }
 
-               // Toggle the text ("Show"/"Hide"), if requested (for default togglers by default)
+               // Toggle the text ("Show"/"Hide") within elements tagged with mw-collapsible-text
                if ( options.toggleText ) {
                        collapseText = options.toggleText.collapseText;
                        expandText = options.toggleText.expandText;
 
-                       $textContainer = $toggle.find( '> a' );
-                       if ( !$textContainer.length ) {
-                               $textContainer = $toggle;
+                       $textContainer = $collapsible.find( '.mw-collapsible-text' );
+                       if ( $textContainer.length ) {
+                               $textContainer.text( wasCollapsed ? collapseText : expandText );
                        }
-                       $textContainer.text( wasCollapsed ? collapseText : expandText );
                }
 
                // And finally toggle the element state itself
 
                this.each( function () {
                        var $collapsible, collapseText, expandText, $caption, $toggle, actionHandler, buildDefaultToggleLink,
-                               premadeToggleHandler, $toggleLink, $firstItem, collapsibleId, $customTogglers, firstval;
+                               $toggleLink, $firstItem, collapsibleId, $customTogglers, firstval;
 
                        // Ensure class "mw-collapsible" is present in case .makeCollapsible()
                        // is called on element(s) that don't have it yet.
                                opts = $.extend( defaultOpts, options, opts );
                                togglingHandler( $( this ), $collapsible, e, opts );
                        };
+
                        // Default toggle link. Only build it when needed to avoid jQuery memory leaks (event data).
                        buildDefaultToggleLink = function () {
-                               return $( '<a>' )
-                                       .attr( {
-                                               role: 'button',
-                                               tabindex: 0
-                                       } )
+                               return $( '<span class="mw-collapsible-text"></span>' )
                                        .text( collapseText )
-                                       .wrap( '<span class="mw-collapsible-toggle"></span>' )
-                                               .parent()
-                                               .prepend( '<span class="mw-collapsible-bracket">[</span>' )
-                                               .append( '<span class="mw-collapsible-bracket">]</span>' )
+                                       .wrap( '<span class="mw-collapsible-toggle"></span>' ).parent()
+                                               .attr( {
+                                                       role: 'button',
+                                                       tabindex: 0
+                                               } )
+                                               .prepend( '<span>[</span>' )
+                                               .append( '<span>]</span>' )
                                                .on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler );
                        };
 
-                       // Default handler for clicking on premade toggles
-                       premadeToggleHandler = function ( e, opts ) {
-                               var defaultOpts = { toggleClasses: true, linksPassthru: true };
-                               opts = $.extend( defaultOpts, options, opts );
-                               togglingHandler( $( this ), $collapsible, e, opts );
-                       };
-
                        // Check if this element has a custom position for the toggle link
                        // (ie. outside the container or deeper inside the tree)
                        if ( options.$customTogglers ) {
                                                if ( !$toggle.length ) {
                                                        $toggleLink = buildDefaultToggleLink().appendTo( $caption );
                                                } else {
-                                                       actionHandler = premadeToggleHandler;
                                                        $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler )
                                                                .prop( 'tabIndex', 0 );
                                                }
                                                if ( !$toggle.length ) {
                                                        $toggleLink = buildDefaultToggleLink().prependTo( $firstItem.eq( -1 ) );
                                                } else {
-                                                       actionHandler = premadeToggleHandler;
                                                        $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler )
                                                                .prop( 'tabIndex', 0 );
                                                }
                                                $toggleLink = buildDefaultToggleLink();
                                                $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent().prependTo( $collapsible );
                                        } else {
-                                               actionHandler = premadeToggleHandler;
                                                $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler )
                                                        .prop( 'tabIndex', 0 );
                                        }
                                        if ( !$toggle.length ) {
                                                $toggleLink = buildDefaultToggleLink().prependTo( $collapsible );
                                        } else {
-                                               actionHandler = premadeToggleHandler;
                                                $toggleLink = $toggle.on( 'click.mw-collapsible keypress.mw-collapsible', actionHandler )
                                                        .prop( 'tabIndex', 0 );
                                        }
index 143e46c..53c1fbb 100644 (file)
                                preview: true,
                                sectionpreview: section !== '',
                                disableeditsection: true,
+                               useskin: mw.config.get( 'skin' ),
                                uselang: mw.config.get( 'wgUserLanguage' )
                        } );
                        if ( section === 'new' ) {
index f53850a..da8bdcd 100644 (file)
                                        }
                                } )
                                        .then( null, function ( code, data, result, jqXHR ) {
+                                               var deferred = $.Deferred();
+
                                                if ( code !== 'http' ) {
                                                        // Not really an error, work around mw.Api thinking it is.
-                                                       return $.Deferred()
-                                                               .resolve( result, jqXHR )
-                                                               .promise();
+                                                       deferred.resolve( result, jqXHR );
+                                               } else {
+                                                       // Just forward it.
+                                                       deferred.reject.apply( deferred, arguments );
                                                }
-                                               return this;
+                                               return deferred.promise();
                                        } )
-                                       .fail( function ( code, data ) {
-                                               var details = 'HTTP error: ' + data.exception;
-                                               $result.empty()
-                                                       .append(
-                                                               new OO.ui.LabelWidget( {
-                                                                       label: mw.message( 'apisandbox-results-error', details ).text(),
-                                                                       classes: [ 'error' ]
-                                                               } ).$element
-                                                       );
-                                       } )
-                                       .done( function ( data, jqXHR ) {
+                                       .then( function ( data, jqXHR ) {
                                                var m, loadTime, button, clear,
                                                        ct = jqXHR.getResponseHeader( 'Content-Type' );
 
                                                                .on( 'click', button.setDisabled, [ true ], button )
                                                                .$element.appendTo( $result );
                                                }
+                                       }, function ( code, data ) {
+                                               var details = 'HTTP error: ' + data.exception;
+                                               $result.empty()
+                                                       .append(
+                                                               new OO.ui.LabelWidget( {
+                                                                       label: mw.message( 'apisandbox-results-error', details ).text(),
+                                                                       classes: [ 'error' ]
+                                                               } ).$element
+                                                       );
                                        } );
                        } );
                },
diff --git a/resources/src/mediawiki.special/mediawiki.special.newFiles.js b/resources/src/mediawiki.special/mediawiki.special.newFiles.js
new file mode 100644 (file)
index 0000000..5e86eaa
--- /dev/null
@@ -0,0 +1,21 @@
+/*!
+ * JavaScript for Special:NewFiles
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var start = mw.widgets.datetime.DateTimeInputWidget.static.infuse( 'mw-input-start' ),
+                       end = mw.widgets.datetime.DateTimeInputWidget.static.infuse( 'mw-input-end' ),
+                       temp;
+
+               // If the start date comes after the end date, swap the two values.
+               // This swap is already done internally when the form is submitted with a start date that
+               // comes after the end date, but this swap makes the change visible in the HTMLForm.
+               if ( start.getValue() !== '' &&
+                       end.getValue() !== '' &&
+                       start.getValue() > end.getValue() ) {
+                       temp = start.getValue();
+                       start.setValue( end.getValue() );
+                       end.setValue( temp );
+               }
+       } );
+}( mediaWiki, jQuery ) );
index b7bbc66..4844e21 100644 (file)
@@ -8,42 +8,6 @@
         */
        var util = {
 
-               /**
-                * Initialisation
-                * (don't call before document ready)
-                */
-               init: function () {
-                       util.$content = ( function () {
-                               var i, l, $node, selectors;
-
-                               selectors = [
-                                       // The preferred standard is class "mw-body".
-                                       // You may also use class "mw-body mw-body-primary" if you use
-                                       // mw-body in multiple locations. Or class "mw-body-primary" if
-                                       // you use mw-body deeper in the DOM.
-                                       '.mw-body-primary',
-                                       '.mw-body',
-
-                                       // If the skin has no such class, fall back to the parser output
-                                       '#mw-content-text',
-
-                                       // Should never happen... well, it could if someone is not finished writing a
-                                       // skin and has not yet inserted bodytext yet.
-                                       'body'
-                               ];
-
-                               for ( i = 0, l = selectors.length; i < l; i++ ) {
-                                       $node = $( selectors[ i ] );
-                                       if ( $node.length ) {
-                                               return $node.first();
-                                       }
-                               }
-
-                               // Preserve existing customized value in case it was preset
-                               return util.$content;
-                       }() );
-               },
-
                /* Main body */
 
                /**
                /**
                 * The content wrapper of the skin (e.g. `.mw-body`).
                 *
-                * Populated on document ready by #init. To use this property,
+                * Populated on document ready. To use this property,
                 * wait for `$.ready` and be sure to have a module dependency on
-                * `mediawiki.util` and `mediawiki.page.startup` which will ensure
-                * your document ready handler fires after #init.
+                * `mediawiki.util` which will ensure
+                * your document ready handler fires after initialization.
                 *
                 * Because of the lazy-initialised nature of this property,
                 * you're discouraged from using it.
                return true;
        }, 'Use mw.notify instead.' );
 
+       /**
+        * Initialisation of mw.util.$content
+        */
+       function init() {
+               util.$content = ( function () {
+                       var i, l, $node, selectors;
+
+                       selectors = [
+                               // The preferred standard is class "mw-body".
+                               // You may also use class "mw-body mw-body-primary" if you use
+                               // mw-body in multiple locations. Or class "mw-body-primary" if
+                               // you use mw-body deeper in the DOM.
+                               '.mw-body-primary',
+                               '.mw-body',
+
+                               // If the skin has no such class, fall back to the parser output
+                               '#mw-content-text'
+                       ];
+
+                       for ( i = 0, l = selectors.length; i < l; i++ ) {
+                               $node = $( selectors[ i ] );
+                               if ( $node.length ) {
+                                       return $node.first();
+                               }
+                       }
+
+                       // Should never happen... well, it could if someone is not finished writing a
+                       // skin and has not yet inserted bodytext yet.
+                       return $( 'body' );
+               }() );
+       }
+
+       /**
+        * Former public initialisation. Now a no-op function.
+        *
+        * @method util_init
+        * @deprecated since 1.30
+        */
+       mw.log.deprecate( util, 'init', $.noop, 'Remove the call of mw.util.init().', 'mw.util.init' );
+
+       $( init );
+
        mw.util = util;
        module.exports = util;
 
index d5a667e..1f6c8a6 100644 (file)
                         */
                        mw.hook( 'wikipage.categories' ).fire( $nodes );
                }
+
+               $( '#t-print a' ).click( function ( e ) {
+                       window.print();
+                       e.preventDefault();
+               } );
        } );
 
 }( mediaWiki, jQuery ) );
index 076357a..49cfd8a 100644 (file)
@@ -1,10 +1,7 @@
 ( function ( mw, $ ) {
 
-       mw.page = {};
-
        $( function () {
                var $diff;
-               mw.util.init();
 
                /**
                 * Fired when wiki content is being added to the DOM
index 7d35cb7..6322ccd 100644 (file)
@@ -5,8 +5,9 @@
  * @class mw.page.watch.ajax
  */
 ( function ( mw, $ ) {
-       // The name of the page to watch or unwatch
-       var title = mw.config.get( 'wgRelevantPageName' );
+       var watch,
+               // The name of the page to watch or unwatch
+               title = mw.config.get( 'wgRelevantPageName' );
 
        /**
         * Update the link text, link href attribute and (if applicable)
        }
 
        // Expose public methods
-       mw.page.watch = {
+       watch = {
                updateWatchLink: updateWatchLink
        };
+       module.exports = watch;
+
+       // Deprecated since 1.30
+       mw.log.deprecate( mw, 'page',
+               { watch: watch },
+               'Use require( \'mediawiki.page.watch.ajax\' ) instead.',
+               'mw.page'
+       );
 
        $( function () {
                var $links = $( '.mw-watchlink a, a.mw-watchlink' );
index 2a4c43f..3de3ba7 100644 (file)
@@ -64,7 +64,6 @@ $wgAutoloadClasses += [
 
        # tests/phpunit/includes
        'RevisionStorageTest' => "$testDir/phpunit/includes/RevisionStorageTest.php",
-       'TestingAccessWrapper' => "$testDir/phpunit/includes/TestingAccessWrapper.php",
        'TestLogger' => "$testDir/phpunit/includes/TestLogger.php",
 
        # tests/phpunit/includes/api
@@ -171,4 +170,4 @@ $wgAutoloadClasses += [
        'ParserTestFileSuite' => "$testDir/phpunit/suites/ParserTestFileSuite.php",
        'ParserTestTopLevelSuite' => "$testDir/phpunit/suites/ParserTestTopLevelSuite.php",
 ];
-// @codingStandardsIgnoreEnd
\ No newline at end of file
+// @codingStandardsIgnoreEnd
index 368dc0d..69fee30 100644 (file)
@@ -2311,7 +2311,7 @@ Entities inside <pre>
 <pre>Foo &#8594;bar</pre>
 
 !! html/parsoid
-<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:pre","function":"#tag"},"params":{"1":{"wt":"Foo &lt;nowiki>&amp;rarr;bar&lt;/nowiki>"}},"i":0}}]}'>Foo <span typeof="mw:Entity">→</span>bar</pre>
+<pre about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:pre","function":"tag"},"params":{"1":{"wt":"Foo &lt;nowiki>&amp;rarr;bar&lt;/nowiki>"}},"i":0}}]}'>Foo <span typeof="mw:Entity">→</span>bar</pre>
 !! end
 
 ## Don't expect this to rt, Parsoid drops the unmatched closing pre tags that
@@ -5331,6 +5331,21 @@ parsoid=wt2html
 <p>{{echo|[[Foo}}</p>
 !! end
 
+!! test
+Wikilinks with embedded newlines are not broken
+!! wikitext
+{{echo|[[ Foo
+B
+C]]}}
+!! html/php
+<p>[[ Foo
+B
+C]]
+</p>
+!! html/parsoid
+<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[ Foo\nB\nC]]"}},"i":0}}]}'>[[ Foo B C]]</p>
+!! end
+
 !! test
 Broken templates
 !! options
@@ -11218,7 +11233,7 @@ Don't abort table cell attribute parsing if wikilink is found in template arg
 |}
 !! html/parsoid
 <table>
-<tbody><tr><td> Test <ref about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:ref","function":"#tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</ref></td></tr>
+<tbody><tr><td> Test <ref about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"#tag:ref","function":"tag"},"params":{"1":{"wt":"One two \"[[three]]\" four"}},"i":0}}]}'>One two "<a rel="mw:WikiLink" href="./Three" title="Three">three</a>" four</ref></td></tr>
 </tbody></table>
 !! end
 
@@ -11840,6 +11855,326 @@ parsoid
 
 !!end
 
+###
+### Preprocessor precedence tests
+### See: https://www.mediawiki.org/wiki/Preprocessor_ABNF
+###
+##{{[[-{{{{{{[[Foo|bar}}]]}-}}}}}]]
+!! test
+Preprocessor precedence 1: link is rightmost opening
+!! wikitext
+{{[[Foo|bar}}]]
+
+But close-brace is not a valid character in a link title:
+{{[[Foo}}|bar]]
+
+However, we can still tell this was handled as a link in the preprocessor:
+{{echo|[[Foo}}|bar]]|bat}}
+!! html
+<p>{{<a href="/wiki/Foo" title="Foo">bar}}</a>
+</p><p>But close-brace is not a valid character in a link title:
+{{[[Foo}}|bar]]
+</p><p>However, we can still tell this was handled as a link in the preprocessor:
+[[Foo}}|bar]]
+</p>
+!! end
+
+!! test
+Preprocessor precedence 2: template is rightmost opening
+!! options
+language=zh
+!! wikitext
+-{{echo|foo}-}}-
+!! html
+<p>-foo}--
+</p>
+!! end
+
+!! test
+Preprocessor precedence 3: language converter is rightmost opening
+!! options
+language=zh
+!! wikitext
+{{echo|hi}}
+
+{{-{R|echo|hi}}}-
+
+[[-{R|raw]]}-
+!! html
+<p>hi
+</p><p>{{echo|hi}}
+</p><p>[[raw]]
+</p>
+!! end
+
+!! test
+Preprocessor precedence 4: left-most angle bracket
+!! options
+language=zh
+!! wikitext
+<!--{raw}-->
+!! html
+!! end
+
+!! article
+Template:Precedence5
+!! text
+{{{{{1}}}}}
+!! endarticle
+
+!! test
+Preprocessor precedence 5: tplarg takes precedence over template
+!! wikitext
+{{Precedence5|Bullet}}
+!! html
+<ul><li> Bar</li></ul>
+
+!! end
+
+!! test
+Preprocessor precedence 6: broken link is rightmost opening
+!! wikitext
+{{echo|[[Foo}}
+
+{{echo|[[Foo|bar|bat=baz}}
+!! html
+<p>{{echo|[[Foo}}
+</p><p>{{echo|[[Foo|bar|bat=baz}}
+</p>
+!! end
+
+# This next test exposes a difference between PHP and Parsoid:
+# Given [[Foo|{{echo|Bar]]x}}y]]z:
+# 1) Both PHP and Parsoid ignore the `]]` inside the `echo` in the
+# "preprocessor" stage.  The `{{echo` extends until the `x}}`, and the
+# outer `[[Foo` extends until the `y]]`
+# 2a) But then the PHP preprocessor emits `[[Foo|Bar]]xy]]z` as an
+# intermediate result (after template expansion), and link processing
+# happens on this intermediate result, which moves the wikilink
+# boundary leftward to `[[Foo|Bar]]`
+# 2b) Parsoid works in a single step, so it's going to keep the
+# wikilink as extending to the `y]]`
+# 3a) Then PHP does linktrail processing which slurps up the trailing
+# `xy` inside the link.
+# 3b) Parsoid will do linktrail processing to slurp up the trailing
+# `z` inside the link.
+# This is "correct" behavior.  Parsoid's basic worldview is that the
+# `]]` inside the template shouldn't be allowed to leak out to affect
+# the surrounding wikilink.  PHP may match Parsoid (in the future)
+# if you use {{#balance}} (T114445).
+
+!! test
+Preprocessor precedence 7: broken template is rightmost opening
+!! wikitext
+[[Foo|{{echo|Bar]]
+
+[[Foo|{{echo|Bar]]-x}}-y]]-z
+
+Careful: linktrails can move the end of the wikilink:
+[[Foo|{{echo|y']]a}}l]]l
+!! html
+<p><a href="/wiki/Foo" title="Foo">{{echo|Bar</a>
+</p><p><a href="/wiki/Foo" title="Foo">Bar</a>-x-y]]-z
+</p><p>Careful: linktrails can move the end of the wikilink:
+<a href="/wiki/Foo" title="Foo">y'al</a>]]l
+</p>
+!! end
+
+!! test
+Preprocessor precedence 8: broken language converter is rightmost opening
+!! options
+language=zh
+!! wikitext
+[[Foo-{R|raw]]
+!! html
+<p>[[Foo-{R|raw]]
+</p>
+!! end
+
+!! article
+Template:Preprocessor_precedence_9
+!! text
+;4: {{{{1}}}}
+;5: {{{{{2}}}}}
+;6: {{{{{{3}}}}}}
+;7: {{{{{{{4}}}}}}}
+!! endarticle
+
+!! test
+Preprocessor precedence 9: groups of braces
+!! wikitext
+{{Preprocessor precedence 9|Four|Bullet|1|2}}
+!! html
+<dl><dt>4</dt>
+<dd> {Four}</dd>
+<dt>5</dt>
+<dd> </dd></dl>
+<ul><li> Bar</li></ul>
+<dl><dt>6</dt>
+<dd> Four</dd>
+<dt>7</dt>
+<dd> {Bullet}</dd></dl>
+
+!! end
+
+!! article
+Template:Preprocessor_precedence_10
+!! text
+;1: -{R|raw}-
+;2: -{{Bullet}}-
+;3: -{{{1}}}-
+;4: -{{{{2}}}}-
+;5: -{{{{{3}}}}}-
+;6: -{{{{{{4}}}}}}-
+;7: -{{{{{{{5}}}}}}}-
+!! endarticle
+
+!! test
+Preprocessor precedence 10: groups of braces with leading dash
+!! options
+language=zh
+!! wikitext
+{{Preprocessor precedence 10|Three|raw2|Bullet|1|2}}
+!! html
+<dl><dt>1</dt>
+<dd> raw</dd>
+<dt>2</dt>
+<dd> -</dd></dl>
+<ul><li> Bar-</li></ul>
+<dl><dt>3</dt>
+<dd> -Three-</dd>
+<dt>4</dt>
+<dd> raw2</dd>
+<dt>5</dt>
+<dd> -</dd></dl>
+<ul><li> Bar-</li></ul>
+<dl><dt>6</dt>
+<dd> -Three-</dd>
+<dt>7</dt>
+<dd> raw2</dd></dl>
+
+!! end
+
+!! test
+Preprocessor precedence 11: found during visual diff testing
+!! wikitext
+{{#tag:span|-{{#tag:span|-{{echo|x}}}}}}
+
+{{echo|-{{echo|-{{echo|x}}}}}}
+
+{{echo|-{{echo|x}}}}
+!! html
+<p><span>-<span>-x</span></span>
+</p><p>--x
+</p><p>-x
+</p>
+!! end
+
+!! test
+Preprocessor precedence 12: broken language converter closed by brace.
+!! wikitext
+This form breaks the template, which is unfortunate:
+* {{echo|foo-{bar}bat}}
+
+But if the broken language converter markup is inside an extension
+tag, nothing bad happens:
+* <nowiki>foo-{bar}bat</nowiki>
+* {{echo|<nowiki>foo-{bar}bat</nowiki>}}
+* <pre>foo-{bar}bat</pre>
+* {{echo|<pre>foo-{bar}bat</pre>}}
+
+<tag>foo-{bar}bat</tag>
+{{echo|<tag>foo-{bar}bat</tag>}}
+
+!! html+tidy
+<p>This form breaks the template, which is unfortunate:</p>
+<ul>
+<li>{{echo|foo-{bar}bat}}</li>
+</ul>
+<p>But if the broken language converter markup is inside an extension tag, nothing bad happens:</p>
+<ul>
+<li>foo-{bar}bat</li>
+<li>foo-{bar}bat</li>
+<li>
+<pre>
+foo-{bar}bat
+</pre></li>
+<li>
+<pre>
+foo-{bar}bat
+</pre></li>
+</ul>
+<pre>
+'foo-{bar}bat'
+array (
+)
+</pre>
+<pre>
+'foo-{bar}bat'
+array (
+)
+</pre>
+!! end
+
+!! test
+Preprocessor precedence, 13: broken language converter in external link
+!! wikitext
+* [http://example.com/-{foo Example in URL]
+* [http://example.com Example in -{link} description]
+* {{echo|[http://example.com/-{foo Breaks template, however]}}
+!! html+tidy
+<ul>
+<li><a rel="nofollow" class="external text" href="http://example.com/-{foo">Example in URL</a></li>
+<li><a rel="nofollow" class="external text" href="http://example.com">Example in -{link} description</a></li>
+<li>{{echo|<a rel="nofollow" class="external text" href="http://example.com/-{foo">Breaks template, however</a>}}</li>
+</ul>
+!! end
+
+!! test
+Preprocessor precedence, 14: broken language converter in comment
+!! wikitext
+* <!--{{foo}}--> ...should be ok
+* <!---{{foo}}--> ...extra dashes
+* {{echo|foo<!-- -{bar} -->bat}} ...should be ok
+!! html+tidy
+<ul>
+<li>...should be ok</li>
+<li>...extra dashes</li>
+<li>foobat ...should be ok</li>
+</ul>
+!! end
+
+!! test
+Preprocessor precedence, 15: broken brace markup in headings
+!! wikitext
+__NOTOC__ __NOEDITSECTION__
+===1 foo[bar 1===
+1
+===2 foo[[bar 2===
+2
+===3 foo{bar 3===
+3
+===4 foo{{bar 4===
+4
+===5 foo{{{bar 5===
+5
+===6 foo-{bar 6===
+6
+!! html+tidy
+<h3><span class="mw-headline" id="1_foo.5Bbar_1">1 foo[bar 1</span></h3>
+<p>1</p>
+<h3><span class="mw-headline" id="2_foo.5B.5Bbar_2">2 foo[[bar 2</span></h3>
+<p>2</p>
+<h3><span class="mw-headline" id="3_foo.7Bbar_3">3 foo{bar 3</span></h3>
+<p>3</p>
+<h3><span class="mw-headline" id="4_foo.7B.7Bbar_4">4 foo{{bar 4</span></h3>
+<p>4</p>
+<h3><span class="mw-headline" id="5_foo.7B.7B.7Bbar_5">5 foo{{{bar 5</span></h3>
+<p>5</p>
+<h3><span class="mw-headline" id="6_foo-.7Bbar_6">6 foo-{bar 6</span></h3>
+<p>6</p>
+!! end
+
 ###
 ### Token Stream Patcher tests
 ###
@@ -19209,9 +19544,8 @@ Special:Search page linking.
 | is not a magic word here but | is still a magic word here
 </p>
 !! html/parsoid
-<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}'>|</span> is still a magic word here
-| is not a magic word here but <span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","href":"./Template:!"},"params":{},"i":0}}]}'>|</span> is still a magic word here</p>
-
+<p><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is a magic word there and <span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here
+| is not a magic word here but <span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"!","function":"!"},"params":{},"i":0}}]}'>|</span> is still a magic word here</p>
 !! end
 
 !! test
@@ -20946,6 +21280,28 @@ Raw: -{R|zh:China;zh-tw:Taiwan}-
 </p>
 !! end
 
+!! test
+Nested markup inside raw output of variant escape tags (R flag)
+!! options
+language=zh variant=zh-tw
+!! wikitext
+Nested raw: -{R|nested -{zh:China;zh-tw:Taiwan}- nested}-
+!! html
+<p>Nested raw: nested Taiwan nested
+</p>
+!! end
+
+!! test
+Templates inside raw output of variant escape tags (R flag)
+!! options
+language=zh variant=zh-tw
+!! wikitext
+Nested raw: -{R|nested {{echo|hi}} templates}-
+!! html
+<p>Nested raw: nested hi templates
+</p>
+!! end
+
 !! test
 Strings evaluating false shouldn't be ignored by Language converter (T51072)
 !! options
@@ -21113,12 +21469,10 @@ language=sr variant=sr-ec
 </p>
 !! end
 
-# FIXME: This test is currently broken in the PHP parser T153761
 !! test
 T146304: Don't break template parsing if language converter markup is in the parameter.
 !! options
 language=sr variant=sr-ec
-disabled
 !! wikitext
 {{echo|-{R|foo}-}}
 !! html/php
@@ -25462,7 +25816,7 @@ Properly encapsulate empty-content transclusions in fosterable positions
 }}
 </table>
 !! html/parsoid
-<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"#if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}'>
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>\n",{"template":{"target":{"wt":"#if:","function":"if"},"params":{"1":{"wt":"\n&lt;td>foo&lt;/td>\n"}},"i":0}},"\n&lt;/table>"]}' data-parsoid='{"stx":"html","pi":[[{"k":"1"}]]}'>
 
 </table>
 !! end
index 1114f2a..df3d568 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-use Closure;
 use MediaWiki\Logger\LegacySpi;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\Logger\MonologSpi;
@@ -738,7 +737,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                        $GLOBALS[$globalKey] instanceof FauxRequest
                                ) {
                                        $this->mwGlobals[$globalKey] = clone $GLOBALS[$globalKey];
-                               } elseif ( $GLOBALS[$globalKey] instanceof Closure ) {
+                               } elseif ( $this->containsClosure( $GLOBALS[$globalKey] ) ) {
                                        // Serializing Closure only gives a warning on HHVM while
                                        // it throws an Exception on Zend.
                                        // Workaround for https://github.com/facebook/hhvm/issues/6206
@@ -754,6 +753,28 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       /**
+        * @param mixed $var
+        * @param int $maxDepth
+        *
+        * @return bool
+        */
+       private function containsClosure( $var, $maxDepth = 15 ) {
+               if ( $var instanceof Closure ) {
+                       return true;
+               }
+               if ( !is_array( $var ) || $maxDepth === 0 ) {
+                       return false;
+               }
+
+               foreach ( $var as $value ) {
+                       if ( $this->containsClosure( $value, $maxDepth - 1 ) ) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        /**
         * Merges the given values into a MW global array variable.
         * Useful for setting some entries in a configuration array, instead of
diff --git a/tests/phpunit/includes/AutopromoteTest.php b/tests/phpunit/includes/AutopromoteTest.php
new file mode 100644 (file)
index 0000000..785aa4e
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+class AutopromoteTest extends MediaWikiTestCase {
+       /**
+        * T157718: Verify Autopromote does not perform edit count lookup if requirement is 0 or invalid
+        *
+        * @see Autopromote::getAutopromoteGroups()
+        * @dataProvider provideEditCountsAndRequirements
+        * @param int $editCount edit count of user to be checked by Autopromote
+        * @param int $requirement edit count required to autopromote user
+        */
+       public function testEditCountLookupIsSkippedIfRequirementIsZero( $editCount, $requirement ) {
+               $this->setMwGlobals( [
+                       'wgAutopromote' => [
+                               'autoconfirmed' => [ APCOND_EDITCOUNT, $requirement ]
+                       ]
+               ] );
+
+               /** @var PHPUnit_Framework_MockObject_MockObject|User $userMock */
+               $userMock = $this->getMock( 'User', [ 'getEditCount' ] );
+               if ( $requirement > 0 ) {
+                       $userMock->expects( $this->once() )
+                               ->method( 'getEditCount' )
+                               ->willReturn( $editCount );
+               } else {
+                       $userMock->expects( $this->never() )
+                               ->method( 'getEditCount' );
+               }
+
+               $result = Autopromote::getAutopromoteGroups( $userMock );
+               if ( $editCount >= $requirement ) {
+                       $this->assertContains(
+                               'autoconfirmed',
+                               $result,
+                               'User must be promoted if they meet edit count requirement'
+                       );
+               } else {
+                       $this->assertNotContains(
+                               'autoconfirmed',
+                               $result,
+                               'User must not be promoted if they fail edit count requirement'
+                       );
+               }
+       }
+
+       public static function provideEditCountsAndRequirements() {
+               return [
+                       'user with sufficient editcount' => [ 100, 10 ],
+                       'user with insufficient editcount' => [ 4, 10 ],
+                       'edit count requirement set to 0' => [ 1, 0 ],
+               ];
+       }
+}
index 97df585..cedb623 100644 (file)
@@ -344,6 +344,86 @@ class OutputPageTest extends MediaWikiTestCase {
                $this->assertEquals( $expectedHtml, $actualHtml );
        }
 
+       public static function provideBuildExemptModules() {
+               return [
+                       'empty' => [
+                               'exemptStyleModules' => [],
+                               '<meta name="ResourceLoaderDynamicStyles" content=""/>',
+                       ],
+                       'empty sets' => [
+                               'exemptStyleModules' => [ 'site' => [], 'noscript' => [], 'private' => [], 'user' => [] ],
+                               '<meta name="ResourceLoaderDynamicStyles" content=""/>',
+                       ],
+                       // @codingStandardsIgnoreStart Generic.Files.LineLength
+                       'default logged-out' => [
+                               'exemptStyleModules' => [ 'site' => [ 'site.styles' ] ],
+                               '<meta name="ResourceLoaderDynamicStyles" content=""/>' . "\n" .
+                               '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=fallback"/>',
+                       ],
+                       'default logged-in' => [
+                               'exemptStyleModules' => [ 'site' => [ 'site.styles' ], 'user' => [ 'user.styles' ] ],
+                               '<meta name="ResourceLoaderDynamicStyles" content=""/>' . "\n" .
+                               '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=fallback"/>' . "\n" .
+                               '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=en&amp;modules=user.styles&amp;only=styles&amp;skin=fallback&amp;version=1e9z0ox"/>',
+                       ],
+                       'custom modules' => [
+                               'exemptStyleModules' => [
+                                       'site' => [ 'site.styles', 'example.site.a', 'example.site.b' ],
+                                       'user' => [ 'user.styles', 'example.user' ],
+                               ],
+                               '<meta name="ResourceLoaderDynamicStyles" content=""/>' . "\n" .
+                               '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=en&amp;modules=example.site.a%2Cb%7Csite.styles&amp;only=styles&amp;skin=fallback"/>' . "\n" .
+                               '<link rel="stylesheet" href="/w/load.php?debug=false&amp;lang=en&amp;modules=example.user%7Cuser.styles&amp;only=styles&amp;skin=fallback&amp;version=17f1vjw"/>',
+                       ],
+                       // @codingStandardsIgnoreEnd Generic.Files.LineLength
+               ];
+       }
+
+       /**
+        * @dataProvider provideBuildExemptModules
+        * @covers OutputPage::buildExemptModules
+        */
+       public function testBuildExemptModules( array $exemptStyleModules, $expect ) {
+               $this->setMwGlobals( [
+                       'wgResourceLoaderDebug' => false,
+                       'wgLoadScript' => '/w/load.php',
+                       // Stub wgCacheEpoch as it influences getVersionHash used for the
+                       // urls in the expected HTML
+                       'wgCacheEpoch' => '20140101000000',
+               ] );
+
+               // Set up stubs
+               $ctx = new RequestContext();
+               $ctx->setSkin( SkinFactory::getDefaultInstance()->makeSkin( 'fallback' ) );
+               $ctx->setLanguage( 'en' );
+               $outputPage = $this->getMockBuilder( 'OutputPage' )
+                       ->setConstructorArgs( [ $ctx ] )
+                       ->setMethods( [ 'isUserCssPreview', 'buildCssLinksArray' ] )
+                       ->getMock();
+               $outputPage->expects( $this->any() )
+                       ->method( 'isUserCssPreview' )
+                       ->willReturn( false );
+               $outputPage->expects( $this->any() )
+                       ->method( 'buildCssLinksArray' )
+                       ->willReturn( [] );
+               $rl = $outputPage->getResourceLoader();
+               $rl->setMessageBlobStore( new NullMessageBlobStore() );
+
+               // Register custom modules
+               $rl->register( [
+                       'example.site.a' => new ResourceLoaderTestModule( [ 'group' => 'site' ] ),
+                       'example.site.b' => new ResourceLoaderTestModule( [ 'group' => 'site' ] ),
+                       'example.user' => new ResourceLoaderTestModule( [ 'group' => 'user' ] ),
+               ] );
+
+               $outputPage = TestingAccessWrapper::newFromObject( $outputPage );
+               $outputPage->rlExemptStyleModules = $exemptStyleModules;
+               $this->assertEquals(
+                       $expect,
+                       strval( $outputPage->buildExemptModules() )
+               );
+       }
+
        /**
         * @dataProvider provideVaryHeaders
         * @covers OutputPage::addVaryHeader
index 152602a..ab23136 100644 (file)
@@ -8,6 +8,9 @@ require __DIR__ . "/../../../maintenance/runJobs.php";
 class TemplateCategoriesTest extends MediaWikiLangTestCase {
 
        /**
+        * Broken per T165099.
+        *
+        * @group Broken
         * @covers Title::getParentCategories
         */
        public function testTemplateCategories() {
diff --git a/tests/phpunit/includes/TestingAccessWrapper.php b/tests/phpunit/includes/TestingAccessWrapper.php
deleted file mode 100644 (file)
index 76a4266..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/**
- * Circumvent access restrictions on object internals
- *
- * Kept around for backwards compatibility.
- *
- * @deprecated Use \Wikimedia\TestingAccessWrapper (proveded by the
- *   wikimedia/testing-access-wrapper Composer library)
- */
-class TestingAccessWrapper extends \Wikimedia\TestingAccessWrapper {
-}
index 7c36f7d..614a1c9 100644 (file)
@@ -75,53 +75,6 @@ class MWExceptionTest extends MediaWikiTestCase {
                $this->assertTrue( $e->isLoggable() );
        }
 
-       /**
-        * @dataProvider provideRunHooks
-        * @covers MWException::runHooks
-        */
-       public function testRunHooks( $wgExceptionHooks, $name, $args, $expectedReturn ) {
-               $this->setMwGlobals( [
-                       'wgExceptionHooks' => $wgExceptionHooks,
-               ] );
-               $e = new MWException();
-               $this->assertEquals( $expectedReturn, $e->runHooks( $name, $args ) );
-       }
-
-       public static function provideRunHooks() {
-               return [
-                       [ null, null, null, null ],
-                       [ [], 'name', [], null ],
-                       [ [ 'name' => false ], 'name', [], null ],
-                       [
-                               [ 'mockHook' => [ 'MWExceptionTest::mockHook' ] ],
-                               'mockHook', [], 'YAY.[]'
-                       ],
-                       [
-                               [ 'mockHook' => [ 'MWExceptionTest::mockHook' ] ],
-                               'mockHook', [ 'a' ], 'YAY.{"1":"a"}'
-                       ],
-                       [
-                               [ 'mockHook' => [ 'MWExceptionTest::mockHook' ] ],
-                               'mockHook', [ null ], null
-                       ],
-               ];
-       }
-
-       /**
-        * Used in conjunction with provideRunHooks and testRunHooks as a mock callback for a hook
-        */
-       public static function mockHook() {
-               $args = func_get_args();
-               if ( !$args[0] instanceof MWException ) {
-                       return '$caller not instance of MWException';
-               }
-               unset( $args[0] );
-               if ( array_key_exists( 1, $args ) && $args[1] === null ) {
-                       return null;
-               }
-               return 'YAY.' . json_encode( $args );
-       }
-
        /**
         * @dataProvider provideIsCommandLine
         * @covers MWException::isCommandLine
index c4b52f0..333fd88 100644 (file)
@@ -107,16 +107,10 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'user' => 0,
                                        'user_text' => 'User',
                                        'namespace' => NS_USER,
-                                       'title' => 'UTSysop',
-                                       'params' => [
-                                               '4::userid' => 1,
-                                       ],
+                                       'title' => 'UTSysop'
                                ],
                                [
-                                       'text' => 'User account UTSysop was created by User',
-                                       'api' => [
-                                               'userid' => 1,
-                                       ],
+                                       'text' => 'User account UTSysop was created by User'
                                ],
                        ],
                ];
@@ -126,6 +120,10 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
         * @dataProvider provideCreate2LogDatabaseRows
         */
        public function testCreate2LogDatabaseRows( $row, $extra ) {
+               // Make UTSysop user and use its user_id (sequence does not reset to 1 for postgres)
+               $user = static::getTestSysop()->getUser();
+               $row['params']['4::userid'] = $user->getId();
+               $extra['api']['userid'] = $user->getId();
                $this->doTestLogFormatter( $row, $extra );
        }
 
@@ -145,16 +143,10 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
                                        'user' => 0,
                                        'user_text' => 'Sysop',
                                        'namespace' => NS_USER,
-                                       'title' => 'UTSysop',
-                                       'params' => [
-                                               '4::userid' => 1,
-                                       ],
+                                       'title' => 'UTSysop'
                                ],
                                [
-                                       'text' => 'User account UTSysop was created by Sysop and password was sent by email',
-                                       'api' => [
-                                               'userid' => 1,
-                                       ],
+                                       'text' => 'User account UTSysop was created by Sysop and password was sent by email'
                                ],
                        ],
                ];
@@ -164,6 +156,10 @@ class NewUsersLogFormatterTest extends LogFormatterTestCase {
         * @dataProvider provideByemailLogDatabaseRows
         */
        public function testByemailLogDatabaseRows( $row, $extra ) {
+               // Make UTSysop user and use its user_id (sequence does not reset to 1 for postgres)
+               $user = static::getTestSysop()->getUser();
+               $row['params']['4::userid'] = $user->getId();
+               $extra['api']['userid'] = $user->getId();
                $this->doTestLogFormatter( $row, $extra );
        }
 
index f826235..a70c005 100644 (file)
@@ -142,8 +142,6 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
                                'SerialNumber' => '123456789',
                                '_MW_PNG_VERSION' => 1,
                        ],
-                       'width' => 50,
-                       'height' => 50,
                ];
                $this->assertEquals( $expected, $result );
        }
index 28fe604..876e461 100644 (file)
@@ -29,8 +29,6 @@ class ExifTest extends MediaWikiTestCase {
                        'GPSAltitude' => -3.141592653,
                        'GPSDOP' => '5/1',
                        'GPSVersionID' => '2.2.0.0',
-                       'Height' => 10,
-                       'Width' => 40,
                ];
                $this->assertEquals( $expected, $data, '', 0.0000000001 );
        }
@@ -43,8 +41,6 @@ class ExifTest extends MediaWikiTestCase {
 
                $expected = [
                        'UserComment' => 'test⁔comment',
-                       'Height' => 10,
-                       'Width' => 40,
                ];
                $this->assertEquals( $expected, $data );
        }
index d3174fe..1044e52 100644 (file)
@@ -83,8 +83,6 @@ EOF;
                                        'frameCount' => 1,
                                        'looped' => false,
                                        'xmp' => '',
-                                       'width' => 45,
-                                       'height' => 30,
                                ]
                        ],
                        [
@@ -95,8 +93,6 @@ EOF;
                                        'frameCount' => 4,
                                        'looped' => true,
                                        'xmp' => '',
-                                       'width' => 45,
-                                       'height' => 30,
                                ]
                        ],
 
@@ -108,8 +104,6 @@ EOF;
                                        'frameCount' => 4,
                                        'looped' => true,
                                        'comment' => [ 'GIƒ·test·file' ],
-                                       'width' => 45,
-                                       'height' => 30,
                                ]
                        ],
                ];
index 00edfd0..aaa3ac4 100644 (file)
@@ -79,7 +79,7 @@ class GIFHandlerTest extends MediaWikiMediaTestCase {
                        [ 'Something invalid!', GIFHandler::METADATA_BAD ],
                        // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
                        [
-                               'a:6:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}s:5:"width";i:45;s:6:"height";i:30;}',
+                               'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}',
                                GIFHandler::METADATA_GOOD
                        ],
                        // @codingStandardsIgnoreEnd
@@ -103,11 +103,11 @@ class GIFHandlerTest extends MediaWikiMediaTestCase {
                        // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
                        [
                                'nonanimated.gif',
-                               'a:6:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}s:5:"width";i:45;s:6:"height";i:30;}'
+                               'a:4:{s:10:"frameCount";i:1;s:6:"looped";b:0;s:8:"duration";d:0.1000000000000000055511151231257827021181583404541015625;s:8:"metadata";a:2:{s:14:"GIFFileComment";a:1:{i:0;s:35:"GIF test file ⁕ Created with GIMP";}s:15:"_MW_GIF_VERSION";i:1;}}'
                        ],
                        [
                                'animated-xmp.gif',
-                               'a:6:{s:10:"frameCount";i:4;s:6:"looped";b:1;s:8:"duration";d:2.399999999999999911182158029987476766109466552734375;s:8:"metadata";a:5:{s:6:"Artist";s:7:"Bawolff";s:16:"ImageDescription";a:2:{s:9:"x-default";s:18:"A file to test GIF";s:5:"_type";s:4:"lang";}s:15:"SublocationDest";s:13:"The interwebs";s:14:"GIFFileComment";a:1:{i:0;s:16:"GIƒ·test·file";}s:15:"_MW_GIF_VERSION";i:1;}s:5:"width";i:45;s:6:"height";i:30;}'
+                               'a:4:{s:10:"frameCount";i:4;s:6:"looped";b:1;s:8:"duration";d:2.399999999999999911182158029987476766109466552734375;s:8:"metadata";a:5:{s:6:"Artist";s:7:"Bawolff";s:16:"ImageDescription";a:2:{s:9:"x-default";s:18:"A file to test GIF";s:5:"_type";s:4:"lang";}s:15:"SublocationDest";s:13:"The interwebs";s:14:"GIFFileComment";a:1:{i:0;s:16:"GIƒ·test·file";}s:15:"_MW_GIF_VERSION";i:1;}}'
                        ],
                        // @codingStandardsIgnoreEnd
                ];
index 35d6072..abe0280 100644 (file)
@@ -25,7 +25,7 @@ class JpegTest extends MediaWikiMediaTestCase {
                $file = $this->dataFile( 'test.jpg', 'image/jpeg' );
                $res = $this->handler->getMetadata( $file, $this->filePath . 'test.jpg' );
                // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
-               $expected = 'a:9:{s:16:"ImageDescription";s:9:"Test file";s:11:"XResolution";s:4:"72/1";s:11:"YResolution";s:4:"72/1";s:14:"ResolutionUnit";i:2;s:16:"YCbCrPositioning";i:1;s:15:"JPEGFileComment";a:1:{i:0;s:17:"Created with GIMP";}s:22:"MEDIAWIKI_EXIF_VERSION";i:2;s:5:"Width";i:20;s:6:"Height";i:20;}';
+               $expected = 'a:7:{s:16:"ImageDescription";s:9:"Test file";s:11:"XResolution";s:4:"72/1";s:11:"YResolution";s:4:"72/1";s:14:"ResolutionUnit";i:2;s:16:"YCbCrPositioning";i:1;s:15:"JPEGFileComment";a:1:{i:0;s:17:"Created with GIMP";}s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
                // @codingStandardsIgnoreEnd
 
                // Unserialize in case serialization format ever changes.
@@ -39,8 +39,6 @@ class JpegTest extends MediaWikiMediaTestCase {
                $file = $this->dataFile( 'test.jpg', 'image/jpeg' );
                $res = $this->handler->getCommonMetaArray( $file );
                $expected = [
-                       'Height' => 20,
-                       'Width' => 20,
                        'ImageDescription' => 'Test file',
                        'XResolution' => '72/1',
                        'YResolution' => '72/1',
index 0541b47..32d54df 100644 (file)
@@ -80,7 +80,7 @@ class PNGHandlerTest extends MediaWikiMediaTestCase {
                        [ 'Something invalid!', PNGHandler::METADATA_BAD ],
                        // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
                        [
-                               'a:8:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:5:"width";i:50;s:6:"height";i:50;s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}',
+                               'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}',
                                PNGHandler::METADATA_GOOD
                        ],
                        // @codingStandardsIgnoreEnd
@@ -105,11 +105,11 @@ class PNGHandlerTest extends MediaWikiMediaTestCase {
                        // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
                        [
                                'rgb-na-png.png',
-                               'a:8:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:5:"width";i:50;s:6:"height";i:50;s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}'
+                               'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:8;s:9:"colorType";s:10:"truecolour";s:8:"metadata";a:1:{s:15:"_MW_PNG_VERSION";i:1;}}'
                        ],
                        [
                                'xmp.png',
-                               'a:8:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:1;s:9:"colorType";s:14:"index-coloured";s:5:"width";i:50;s:6:"height";i:50;s:8:"metadata";a:2:{s:12:"SerialNumber";s:9:"123456789";s:15:"_MW_PNG_VERSION";i:1;}}'
+                               'a:6:{s:10:"frameCount";i:0;s:9:"loopCount";i:1;s:8:"duration";d:0;s:8:"bitDepth";i:1;s:9:"colorType";s:14:"index-coloured";s:8:"metadata";a:2:{s:12:"SerialNumber";s:9:"123456789";s:15:"_MW_PNG_VERSION";i:1;}}'
                        ],
                        // @codingStandardsIgnoreEnd
                ];
index 32af131..d114820 100644 (file)
@@ -35,7 +35,7 @@ class TiffTest extends MediaWikiTestCase {
                $res = $this->handler->getMetadata( null, $this->filePath . 'test.tiff' );
 
                // @codingStandardsIgnoreStart Ignore Generic.Files.LineLength.TooLong
-               $expected = 'a:18:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;s:5:"Width";i:20;s:6:"Height";i:20;}';
+               $expected = 'a:16:{s:10:"ImageWidth";i:20;s:11:"ImageLength";i:20;s:13:"BitsPerSample";a:3:{i:0;i:8;i:1;i:8;i:2;i:8;}s:11:"Compression";i:5;s:25:"PhotometricInterpretation";i:2;s:16:"ImageDescription";s:17:"Created with GIMP";s:12:"StripOffsets";i:8;s:11:"Orientation";i:1;s:15:"SamplesPerPixel";i:3;s:12:"RowsPerStrip";i:64;s:15:"StripByteCounts";i:238;s:11:"XResolution";s:19:"1207959552/16777216";s:11:"YResolution";s:19:"1207959552/16777216";s:19:"PlanarConfiguration";i:1;s:14:"ResolutionUnit";i:2;s:22:"MEDIAWIKI_EXIF_VERSION";i:2;}';
                // @codingStandardsIgnoreEnd
 
                // Re-unserialize in case there are subtle differences between how versions
index 081ca90..b75335d 100644 (file)
@@ -70,13 +70,13 @@ class XCFHandlerTest extends MediaWikiMediaTestCase {
        public static function provideGetMetadata() {
                return [
                        [ '80x60-2layers.xcf',
-                               'a:3:{s:9:"colorType";s:16:"truecolour-alpha";s:5:"width";i:80;s:6:"height";i:60;}'
+                               'a:1:{s:9:"colorType";s:16:"truecolour-alpha";}'
                        ],
                        [ '80x60-RGB.xcf',
-                               'a:3:{s:9:"colorType";s:16:"truecolour-alpha";s:5:"width";i:80;s:6:"height";i:60;}'
+                               'a:1:{s:9:"colorType";s:16:"truecolour-alpha";}'
                        ],
                        [ '80x60-Greyscale.xcf',
-                               'a:3:{s:9:"colorType";s:15:"greyscale-alpha";s:5:"width";i:80;s:6:"height";i:60;}'
+                               'a:1:{s:9:"colorType";s:15:"greyscale-alpha";}'
                        ],
                ];
        }
index 3374f4a..4721ce6 100644 (file)
@@ -15,7 +15,10 @@ class RangeChronologicalPagerTest extends MediaWikiLangTestCase {
         */
        public function testGetDateCond( $inputYear, $inputMonth, $inputDay, $expected ) {
                $pager = $this->getMockForAbstractClass( 'RangeChronologicalPager' );
-               $this->assertEquals( $expected, $pager->getDateCond( $inputYear, $inputMonth, $inputDay ) );
+               $this->assertEquals(
+                       $expected,
+                       wfTimestamp( TS_MW, $pager->getDateCond( $inputYear, $inputMonth, $inputDay ) )
+               );
        }
 
        /**
index ebe0bde..7b56def 100644 (file)
@@ -40,6 +40,58 @@ class ExtensionProcessorTest extends MediaWikiTestCase {
                $this->assertArrayNotHasKey( 'AutoloadClasses', $attributes );
        }
 
+       /**
+        * @covers ExtensionProcessor::extractInfo
+        */
+       public function testExtractInfo_namespaces() {
+               // Test that namespace IDs can be overwritten
+               if ( !defined( 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X' ) ) {
+                       define( 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X', 123456 );
+               }
+
+               $processor = new ExtensionProcessor();
+               $processor->extractInfo( $this->dir, self::$default + [
+                       'namespaces' => [
+                               [
+                                       'id' => 332200,
+                                       'constant' => 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_A',
+                                       'name' => 'Test_A',
+                                       'content' => 'TestModel'
+                               ],
+                               [ // Test_X will use ID 123456 not 334400
+                                       'id' => 334400,
+                                       'constant' => 'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X',
+                                       'name' => 'Test_X',
+                                       'content' => 'TestModel'
+                               ],
+                       ]
+               ], 1 );
+
+               $extracted = $processor->getExtractedInfo();
+
+               $this->assertArrayHasKey(
+                       'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_A',
+                       $extracted['defines']
+               );
+               $this->assertArrayNotHasKey(
+                       'MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_X',
+                       $extracted['defines']
+               );
+
+               $this->assertSame(
+                       $extracted['defines']['MW_EXTENSION_PROCESSOR_TEST_EXTRACT_INFO_A'],
+                       332200
+               );
+
+               $this->assertArrayHasKey( 'ExtensionNamespaces', $extracted['attributes'] );
+               $this->assertArrayHasKey( 123456, $extracted['attributes']['ExtensionNamespaces'] );
+               $this->assertArrayHasKey( 332200, $extracted['attributes']['ExtensionNamespaces'] );
+               $this->assertArrayNotHasKey( 334400, $extracted['attributes']['ExtensionNamespaces'] );
+
+               $this->assertSame( 'Test_X', $extracted['attributes']['ExtensionNamespaces'][123456] );
+               $this->assertSame( 'Test_A', $extracted['attributes']['ExtensionNamespaces'][332200] );
+       }
+
        public static function provideRegisterHooks() {
                $merge = [ ExtensionRegistry::MERGE_STRATEGY => 'array_merge_recursive' ];
                // Format:
index af3212a..0833047 100644 (file)
@@ -143,6 +143,23 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
                );
        }
 
+       /**
+        * @covers ResourceLoader::getModule
+        */
+       public function testGetModuleFactory() {
+               $factory = function( array $info ) {
+                       $this->assertArrayHasKey( 'kitten', $info );
+                       return new ResourceLoaderTestModule( $info );
+               };
+
+               $rl = new EmptyResourceLoader();
+               $rl->register( 'test', [ 'factory' => $factory, 'kitten' => 'little ball of fur' ] );
+               $this->assertInstanceOf(
+                       ResourceLoaderTestModule::class,
+                       $rl->getModule( 'test' )
+               );
+       }
+
        /**
         * @covers ResourceLoader::getModule
         */
index 63ed93e..fbbcee5 100644 (file)
@@ -28,6 +28,11 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
                $this->insertPage( 'Example Foo' );
                $this->insertPage( 'Example Foo/Bar' );
                $this->insertPage( 'Example/Baz' );
+               $this->insertPage( 'Sample' );
+               $this->insertPage( 'Sample Ban' );
+               $this->insertPage( 'Sample Eat' );
+               $this->insertPage( 'Sample Who' );
+               $this->insertPage( 'Sample Zoo' );
                $this->insertPage( 'Redirect test', '#REDIRECT [[Redirect Test]]' );
                $this->insertPage( 'Redirect Test' );
                $this->insertPage( 'Redirect Test Worse Result' );
@@ -96,15 +101,15 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
                        ] ],
                        [ [
                                'Main namespace with title prefix',
-                               'query' => 'Ex',
+                               'query' => 'Sa',
                                'results' => [
-                                       'Example',
-                                       'Example/Baz',
-                                       'Example Bar',
+                                       'Sample',
+                                       'Sample Ban',
+                                       'Sample Eat',
                                ],
                                // Third result when testing offset
                                'offsetresult' => [
-                                       'Example Foo',
+                                       'Sample Who',
                                ],
                        ] ],
                        [ [
@@ -183,6 +188,7 @@ class SearchEnginePrefixTest extends MediaWikiLangTestCase {
                $results = array_map( function( Title $t ) {
                        return $t->getPrefixedText();
                }, $results );
+
                $this->assertEquals(
                        $case['results'],
                        $results,
index 0d345db..e0d1c30 100644 (file)
@@ -330,7 +330,9 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend->unpersist();
                $this->assertFalse( $backend->isPersistent() );
                $this->assertFalse( $this->store->getSession( self::SESSIONID ) );
-               $this->assertNotFalse( $wrap->store->get( wfMemcKey( 'MWSession', self::SESSIONID ) ) );
+               $this->assertNotFalse(
+                       $wrap->store->get( $wrap->store->makeKey( 'MWSession', self::SESSIONID ) )
+               );
        }
 
        public function testRememberUser() {
index 759eca6..fd02a2e 100644 (file)
@@ -61,7 +61,7 @@ class TestBagOStuff extends \CachedBagOStuff {
                        $expiry = \RequestContext::getMain()->getConfig()->get( 'ObjectCacheSessionExpiry' );
                }
 
-               $this->set( wfMemcKey( 'MWSession', $id ), $blob, $expiry );
+               $this->set( $this->makeKey( 'MWSession', $id ), $blob, $expiry );
        }
 
        /**
@@ -69,7 +69,7 @@ class TestBagOStuff extends \CachedBagOStuff {
         * @return mixed
         */
        public function getSession( $id ) {
-               return $this->get( wfMemcKey( 'MWSession', $id ) );
+               return $this->get( $this->makeKey( 'MWSession', $id ) );
        }
 
        /**
@@ -77,14 +77,14 @@ class TestBagOStuff extends \CachedBagOStuff {
         * @return mixed
         */
        public function getSessionFromBackend( $id ) {
-               return $this->backend->get( wfMemcKey( 'MWSession', $id ) );
+               return $this->backend->get( $this->makeKey( 'MWSession', $id ) );
        }
 
        /**
         * @param string $id Session ID
         */
        public function deleteSession( $id ) {
-               $this->delete( wfMemcKey( 'MWSession', $id ) );
+               $this->delete( $this->makeKey( 'MWSession', $id ) );
        }
 
 }
index a297f29..f95e387 100644 (file)
@@ -50,8 +50,7 @@ class UserGroupMembershipTest extends MediaWikiTestCase {
         * @covers UserGroupMembership::delete
         */
        public function testAddAndRemoveGroups() {
-               $user = new User;
-               $user->addToDatabase();
+               $user = $this->getMutableTestUser()->getUser();
 
                // basic tests
                $ugm = new UserGroupMembership( $user->getId(), 'unittesters' );
index a596851..b58d71c 100644 (file)
@@ -25,9 +25,7 @@ class UserTest extends MediaWikiTestCase {
 
                $this->setUpPermissionGlobals();
 
-               $this->user = new User;
-               $this->user->addToDatabase();
-               $this->user->addGroup( 'unittesters' );
+               $this->user = $this->getTestUser( [ 'unittesters' ] )->getUser();
        }
 
        private function setUpPermissionGlobals() {
@@ -100,10 +98,7 @@ class UserTest extends MediaWikiTestCase {
         * @covers User::getRights
         */
        public function testUserGetRightsHooks() {
-               $user = new User;
-               $user->addToDatabase();
-               $user->addGroup( 'unittesters' );
-               $user->addGroup( 'testwriters' );
+               $user = $this->getTestUser( [ 'unittesters', 'testwriters' ] )->getUser();
                $userWrapper = TestingAccessWrapper::newFromObject( $user );
 
                $rights = $user->getRights();
index 4e77d72..44a2305 100644 (file)
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
        } );
 
-       QUnit.test( 'clicks on links inside toggler pass through (options.linksPassthru)', function ( assert ) {
+       QUnit.test( 'clicks on links inside toggler pass through', function ( assert ) {
                var $collapsible = prepareCollapsible(
                                '<div class="mw-collapsible">' +
                                        '<div class="mw-collapsible-toggle">' +
-                                               'Toggle <a href="#top">toggle</a> toggle <b>toggle</b>' +
+                                               'Toggle <a href="#">toggle</a> toggle <b>toggle</b>' +
                                        '</div>' +
                                        '<div class="mw-collapsible-content">' + loremIpsum + '</div>' +
                                '</div>',
                                        loremIpsum +
                                '</div>'
                        ),
-                       $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
+                       $toggleText = $collapsible.find( '.mw-collapsible-text' );
 
-               assert.equal( $toggleLink.text(), 'Collapse me!', 'data-collapsetext is respected' );
+               assert.equal( $toggleText.text(), 'Collapse me!', 'data-collapsetext is respected' );
 
                $collapsible.on( 'afterCollapse.mw-collapsible', function () {
-                       assert.equal( $toggleLink.text(), 'Expand me!', 'data-expandtext is respected' );
+                       assert.equal( $toggleText.text(), 'Expand me!', 'data-expandtext is respected' );
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
                                '<div class="mw-collapsible">' + loremIpsum + '</div>',
                                { collapseText: 'Collapse me!', expandText: 'Expand me!' }
                        ),
-                       $toggleLink = $collapsible.find( '.mw-collapsible-toggle a' );
+                       $toggleText = $collapsible.find( '.mw-collapsible-text' );
 
-               assert.equal( $toggleLink.text(), 'Collapse me!', 'options.collapseText is respected' );
+               assert.equal( $toggleText.text(), 'Collapse me!', 'options.collapseText is respected' );
 
                $collapsible.on( 'afterCollapse.mw-collapsible', function () {
-                       assert.equal( $toggleLink.text(), 'Expand me!', 'options.expandText is respected' );
+                       assert.equal( $toggleText.text(), 'Expand me!', 'options.expandText is respected' );
+               } );
+
+               $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
+       } );
+
+       QUnit.test( 'predefined toggle button and text (.mw-collapsible-toggle/.mw-collapsible-text)', function ( assert ) {
+               var $collapsible = prepareCollapsible(
+                               '<div class="mw-collapsible">' +
+                                       '<div class="mw-collapsible-toggle">' +
+                                               '<span>[</span><span class="mw-collapsible-text">Toggle</span><span>]</span>' +
+                                       '</div>' +
+                                       '<div class="mw-collapsible-content">' + loremIpsum + '</div>' +
+                               '</div>',
+                               { collapseText: 'Hide', expandText: 'Show' }
+                       ),
+                       $toggleText = $collapsible.find( '.mw-collapsible-text' );
+
+               assert.equal( $toggleText.text(), 'Toggle', 'predefined text remains' );
+
+               $collapsible.on( 'afterCollapse.mw-collapsible', function () {
+                       assert.equal( $toggleText.text(), 'Show', 'predefined text is toggled' );
+
+                       $collapsible.on( 'afterExpand.mw-collapsible', function () {
+                               assert.equal( $toggleText.text(), 'Hide', 'predefined text is toggled back' );
+                       } );
+
+                       $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );
                } );
 
                $collapsible.find( '.mw-collapsible-toggle' ).trigger( 'click' );