Merge "Avoid SearchEnginePrefixTest postgres failures"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 23 May 2017 16:06:03 +0000 (16:06 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 23 May 2017 16:06:03 +0000 (16:06 +0000)
132 files changed:
.mailmap
CREDITS
RELEASE-NOTES-1.30
docs/extension.schema.v2.json
includes/Autopromote.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Sanitizer.php
includes/TemplateParser.php
includes/WatchedItemStore.php
includes/api/ApiHelp.php
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/zh-hans.json
includes/changes/EnhancedChangesList.php
includes/collation/CollationFa.php
includes/config/EtcdConfig.php
includes/exception/MWException.php
includes/exception/MWExceptionRenderer.php
includes/htmlform/fields/HTMLUsersMultiselectField.php
includes/http/Http.php
includes/installer/MysqlInstaller.php
includes/installer/i18n/ar.json
includes/installer/i18n/hu.json
includes/jobqueue/jobs/ThumbnailRenderJob.php
includes/libs/MultiHttpClient.php
includes/libs/mime/MimeAnalyzer.php
includes/libs/rdbms/database/Database.php
includes/parser/BlockLevelPass.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoader.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialSearch.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/NewFilesPager.php
includes/user/User.php
includes/widget/search/InterwikiSearchResultSetWidget.php
languages/data/ZhConversion.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.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/ne.json
languages/i18n/nl.json
languages/i18n/ps.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.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/su.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tt-cyrl.json
languages/i18n/tyv.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesCa.php
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/refreshLinks.php
resources/Resources.php
resources/src/jquery/jquery.makeCollapsible.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.newFiles.js [new file with mode: 0644]
resources/src/mediawiki.widgets/MediaSearch/mw.widgets.MediaSearchWidget.js
resources/src/mediawiki/mediawiki.util.js
resources/src/mediawiki/page/ready.js
resources/src/mediawiki/page/startup.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/PrefixSearchTest.php
tests/phpunit/includes/TemplateCategoriesTest.php
tests/phpunit/includes/TestingAccessWrapper.php [deleted file]
tests/phpunit/includes/exception/MWExceptionTest.php
tests/phpunit/includes/libs/mime/MimeAnalyzerTest.php
tests/phpunit/includes/logging/NewUsersLogFormatterTest.php
tests/phpunit/includes/pager/RangeChronologicalPagerTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.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 b24a08d..97356fd 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,13 +38,15 @@ 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 ====
 * …
 
 === Bug fixes in 1.30 ===
-* …
+* (T151633) Ordered list items use now Devanagari digits in Nepalese
+  (thanks to Sfic)
 
 === Action API changes in 1.30 ===
 * (T37247) action=parse output will be wrapped in a div with
@@ -71,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. ObjectCache::makeKey() and
+  ObjectCache::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 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..9c70639 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();
 }
 
@@ -2960,6 +2960,8 @@ function wfGetPrecompiledData( $name ) {
 }
 
 /**
+ * @deprecated since 1.30 Call makeKey on a ObjectCache instance
+ *
  * Make a cache key for the local wiki.
  *
  * @param string $args,...
@@ -2992,6 +2994,8 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
 }
 
 /**
+ * @deprecated since 1.30 Call makeGlobalKey on a ObjectCache instance
+ *
  * Make a cache key with database-agnostic prefix.
  *
  * Doesn't have a wiki-specific namespace. Uses a generic 'global' prefix
@@ -3079,9 +3083,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 +3098,7 @@ function wfGetLB( $wiki = false ) {
  * @return \Wikimedia\Rdbms\LBFactory
  */
 function wfGetLBFactory() {
-       return \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+       return MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
 }
 
 /**
index e71cf18..c2ab19a 100644 (file)
@@ -3017,7 +3017,7 @@ class OutputPage extends ContextSource {
                        && $this->userCanPreview();
        }
 
-       private function isUserCssPreview() {
+       protected function isUserCssPreview() {
                return $this->getConfig()->get( 'AllowUserCss' )
                        && $this->getTitle()
                        && $this->getTitle()->isCssSubpage()
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 924c347..2759ff9 100644 (file)
@@ -102,20 +102,22 @@ class TemplateParser {
                        $key = $cache->makeKey( 'template', $templateName, $fastHash );
                        $code = $this->forceRecompile ? null : $cache->get( $key );
 
-                       if ( !$code ) {
-                               $code = $this->compileForEval( $fileContents, $filename );
-
-                               // Prefix the cached code with a keyed hash (64 hex chars) as an integrity check
-                               $cache->set( $key, hash_hmac( 'sha256', $code, $secretKey ) . $code );
-                       } else {
+                       if ( $code ) {
                                // Verify the integrity of the cached PHP code
                                $keyedHash = substr( $code, 0, 64 );
                                $code = substr( $code, 64 );
                                if ( $keyedHash !== hash_hmac( 'sha256', $code, $secretKey ) ) {
-                                       // Generate a notice if integrity check fails
-                                       trigger_error( "Template failed integrity check: {$filename}" );
+                                       // If the integrity check fails, don't use the cached code
+                                       // We'll update the invalid cache below
+                                       $code = null;
                                }
                        }
+                       if ( !$code ) {
+                               $code = $this->compileForEval( $fileContents, $filename );
+
+                               // Prefix the cached code with a keyed hash (64 hex chars) as an integrity check
+                               $cache->set( $key, hash_hmac( 'sha256', $code, $secretKey ) . $code );
+                       }
                // If there is no secret key available, don't use cache
                } else {
                        $code = $this->compileForEval( $fileContents, $filename );
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 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 5f52a1e..db31552 100644 (file)
        "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..1721293 100644 (file)
        "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..36a557a 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+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 65a1df6..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 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 b8a2ac8..b34a33f 100644 (file)
@@ -32,6 +32,11 @@ class EnhancedChangesList extends ChangesList {
         */
        protected $rc_cache;
 
+       /**
+        * @var TemplateParser
+        */
+       protected $templateParser;
+
        /**
         * @param IContextSource|Skin $obj
         * @param array $filterGroups Array of ChangesListFilterGroup objects (currently optional)
@@ -58,6 +63,7 @@ class EnhancedChangesList extends ChangesList {
                        $this->message,
                        $this->linkRenderer
                );
+               $this->templateParser = new TemplateParser();
        }
 
        /**
@@ -340,8 +346,7 @@ class EnhancedChangesList extends ChangesList {
 
                $this->rcCacheIndex++;
 
-               $templateParser = new TemplateParser();
-               return $templateParser->processTemplate(
+               return $this->templateParser->processTemplate(
                        'EnhancedChangesListGroup',
                        $templateParams
                );
@@ -712,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 9cce087..f8506d7 100644 (file)
 /**
  * Temporary workaround for incorrect collation of Persian language ('fa') in ICU 52 (bug T139110).
  *
- * All of the following will be considered separate letters for category headings in Persian:
+ * Replace with other letters that appear in an okish spot in the alphabet
+ *
  *  - Characters 'و' 'ا' (often appear at the beginning of words)
  *  - Characters 'ٲ' 'ٳ' (may appear at the beginning of words in loanwords)
- *  - Characters 'ء' 'ئ' (don't appear at the beginning of words, but it's easier to implement)
  *
  * @since 1.29
  */
 class CollationFa extends IcuCollation {
-       private $tertiaryCollator;
+
+       // Really hacky - replace with stuff from other blocks.
+       private $override = [
+               "\xd8\xa7" => "\u{0621}",
+               "\xd9\x88" => "\u{0649}",
+               "\xd9\xb2" => "\xF3\xB3\x80\x81",
+               "\xd9\xb3" => "\xF3\xB3\x80\x82",
+       ];
 
        public function __construct() {
                parent::__construct( 'fa' );
-               $this->tertiaryCollator = Collator::create( 'fa' );
        }
 
-       public function getPrimarySortKey( $string ) {
-               $primary = parent::getPrimarySortKey( $string );
-               // We have to use a tertiary sortkey for everything with the primary sortkey of 2627.
-               // Otherwise, the "Remove duplicate prefixes" logic in IcuCollation would remove them.
-               // This matches sortkeys for the following characters: ء ئ ا و ٲ ٳ
-               if ( substr( $primary, 0, 2 ) === "\x26\x27" ) {
-                       wfDebug( "Using tertiary sortkey for '$string'\n" );
-                       return $this->tertiaryCollator->getSortKey( $string );
+       public function getSortKey( $string ) {
+               $modified = strtr( $string, $this->override );
+               return parent::getSortKey( $modified );
+       }
+
+       public function getFirstLetter( $string ) {
+               if ( isset( $this->override[substr( $string, 0, 2 )] ) ) {
+                       return substr( $string, 0, 2 );
                }
-               return $primary;
+               return parent::getFirstLetter( $string );
        }
 }
index 880cf9f..ae3df49 100644 (file)
@@ -95,12 +95,14 @@ class EtcdConfig implements Config, LoggerAwareInterface {
                $this->logger = new Psr\Log\NullLogger();
                $this->http = new MultiHttpClient( [
                        'connTimeout' => $this->timeout,
-                       'reqTimeout' => $this->timeout
+                       'reqTimeout' => $this->timeout,
+                       'logger' => $this->logger
                ] );
        }
 
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
+               $this->http->setLogger( $logger );
        }
 
        public function has( $name ) {
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 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 889cb60..4f21ce2 100644 (file)
@@ -59,7 +59,8 @@ class Http {
         * @return string|bool (bool)false on failure or a string on success
         */
        public static function request( $method, $url, $options = [], $caller = __METHOD__ ) {
-               wfDebug( "HTTP: $method: $url\n" );
+               $logger = LoggerFactory::getInstance( 'http' );
+               $logger->debug( "$method: $url" );
 
                $options['method'] = strtoupper( $method );
 
@@ -77,7 +78,6 @@ class Http {
                        return $req->getContent();
                } else {
                        $errors = $status->getErrorsByType( 'error' );
-                       $logger = LoggerFactory::getInstance( 'http' );
                        $logger->warning( Status::wrap( $status )->getWikiText( false, false, 'en' ),
                                [ 'error' => $errors, 'caller' => $caller, 'content' => $req->getContent() ] );
                        return false;
@@ -164,4 +164,20 @@ class Http {
 
                return "";
        }
+
+       /**
+        * Get a configured MultiHttpClient
+        * @param array $options
+        */
+       public static function createMultiClient( $options = [] ) {
+               global $wgHTTPConnectTimeout, $wgHTTPTimeout, $wgHTTPProxy;
+
+               return new MultiHttpClient( $options + [
+                       'connTimeout' => $wgHTTPConnectTimeout,
+                       'reqTimeout' => $wgHTTPTimeout,
+                       'userAgent' => self::userAgent(),
+                       'proxy' => $wgHTTPProxy,
+                       'logger' => LoggerFactory::getInstance( 'http' )
+               ] );
+       }
 }
index 09051f4..4f0b66c 100644 (file)
@@ -179,8 +179,8 @@ class MysqlInstaller extends DatabaseInstaller {
 
                # Determine existing default character set
                if ( $conn->tableExists( "revision", __METHOD__ ) ) {
-                       $revision = $conn->buildLike( $this->getVar( 'wgDBprefix' ) . 'revision' );
-                       $res = $conn->query( "SHOW TABLE STATUS $revision", __METHOD__ );
+                       $revision = $this->escapeLikeInternal( $this->getVar( 'wgDBprefix' ) . 'revision', '\\' );
+                       $res = $conn->query( "SHOW TABLE STATUS LIKE '$revision'", __METHOD__ );
                        $row = $conn->fetchObject( $res );
                        if ( !$row ) {
                                $this->parent->showMessage( 'config-show-table-status' );
@@ -221,6 +221,16 @@ class MysqlInstaller extends DatabaseInstaller {
                $wgDBpassword = $this->getVar( '_InstallPassword' );
        }
 
+       /**
+        * @param string $s
+        * @return string
+        */
+       protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
+               return str_replace( [ $escapeChar, '%', '_' ],
+                       [ "{$escapeChar}{$escapeChar}", "{$escapeChar}%", "{$escapeChar}_" ],
+                       $s );
+       }
+
        /**
         * Get a list of storage engines that are available and supported
         *
index 2058f6a..8ba3cef 100644 (file)
@@ -52,6 +52,7 @@
        "config-restart": "نعم، إعادة التشغيل",
        "config-welcome": "=== التحقق من البيئة ===\nسوف يتم الآن التحقق من أن البيئة مناسبة لتنصيب ميديا ويكي.\nتذكر تضمين هذه المعلومات اذا اردت طلب المساعدة عن كيفية إكمال التنصيب.",
        "config-copyright": "=== حقوق النسخ والشروط ===\n\n$1\n\nهذا البرنامج هو برنامج حر؛ يمكنك إعادة توزيعه و/أو تعديله تحت شروط رخصة جنو العامة على أن هذا البرنامج قد نُشر من قِبل مؤسسة البرمجيات الحرة؛ إما النسخة 2 من الرخصة، أو أي نسخة أخرى بعدها (من إختيارك)\n\nتم توزيع هذا البرنامج على أمل ان يكون مفيدًا ولكن <strong> دون أية ضمانات</strong>؛ دون حتى أية ضمانات مفهومة ضمنيًا أو رواجات أو أية أسباب محددة.\nأنظر رخصة جنو العامة لمزيد من المعلومات.\n\nمن المفترض أنك إستملت <doclink href=Copying> نسخة عن رخصة جنو العامة </doclink> مع هذا البرنامج؛ اذا لم تقعل إكتب رسالة إلى مؤسسة البرمجيات الحرة المحدودة، شارع 51 فرانكلين الطابق الخامس، بوسطن  MA 02110-1301 الولايات المتخدة أو [http://www.gnu.org/copyleft/gpl.html read it online].",
+       "config-sidebar": "* [https://www.mediawiki.org موقع ميدياويكي]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents دليل المستخدم]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents دليل الإداري]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ الأسئلة المتكررة]\n----\n* <doclink href=Readme>إقراءني</doclink>\n* <doclink href=ReleaseNotes>ملاحظات الإصدار</doclink>\n* <doclink href=Copying>النسخ</doclink>\n* <doclink href=UpgradeDoc>الترقية</doclink>",
        "config-env-good": "جرى التحقق من البيئة. يمكنك تنصيب ميدياويكي.",
        "config-env-bad": "جرى التحقق من البيئة. لا يمكنك تنصيب ميدياويكي.",
        "config-env-php": "بي إتش بي $1 مثبت.",
        "config-install-subscribe-fail": "غير قادر على الاشتراك في ميدياويكي-إعلان: $1",
        "config-install-subscribe-notpossible": "لم يتم تثبيت cURL و <code>allow_url_fopen</code> غير متوفر.",
        "config-install-mainpage": "إنشاء صفحة رئيسية بالمحتوى الافتراضي",
+       "config-install-mainpage-exists": "الصفحة الرئيسية موجودة بالفعل، تم تجاهل هذا الأمر",
        "config-install-extension-tables": "إنشاء جداول للامتدادات المفعلة",
        "config-install-mainpage-failed": "لم يتمكن من إدراج الصفحة الرئيسية: $1",
+       "config-install-done": "<strong>مبروك!</strong>\nلقد قمت بتثبيت ميدياوكي.\n\nقام المثبت بتوليد ملف <code>LocalSettings.php</code>.\nيحتوي هذا الملف على كل تضبيطاتك.\n\nسيتطلب تشغيل الويكي منك تنزيل هذا الملف ووضعه في مجلد التثبيت الخاص بالويكي (نفس المجلد المحتوي على <code>index.php</code>). سيبدأ التنزيل تلقائيا.\n\nلو لم يُعرض عليك التنزيل أو قمت أنت بالغائه، يمكنك تنزيله بالضغط على الوصلة أدناه:\n\n$3\n\n<strong>تنبيه:</strong> لو لم تقم بهذا الآن، لن يكن ملف الضبط متاحا لك لاحقا إذا غادرت التثبيت بدون تنزيله.\n\nعندما تنتهي من وضع الملف بمكانه، يمكنك <strong>[$2 دخول الويكي]</strong>.",
+       "config-install-done-path": "<strong>مبروك!</strong>\nلقد قمت بتثبيت ميدياوكي.\n\nقام المثبت بتوليد ملف <code>LocalSettings.php</code>.\nيحتوي هذا الملف على كل تضبيطاتك.\n\nسيتطلب تشغيل الويكي منك تنزيل هذا الملف ووضعه في <code>$4</code> (نفس المجلد المحتوي على index.php). سيبدأ التنزيل تلقائيا.\n\nلو لم يُعرض عليك التنزيل أو قمت أنت بالغائه، يمكنك تنزيله بالضغط على الوصلة أدناه:\n\n$3\n\n<strong>تنبيه:</strong> لو لم تقم بهذا الآن، لن يكن ملف الضبط متاحا لك لاحقا إذا غادرت التثبيت بدون تنزيله.\n\nعندما تنتهي من وضع الملف بمكانه، يمكنك <code>[$2 دخول الويكي]</strong>.",
        "config-download-localsettings": "تنزيل <code>LocalSettings.php</code>",
        "config-help": "مساعدة",
        "config-help-tooltip": "اضغط للتوسيع",
        "config-nofile": "لا يمكن العثور على الملف \"$1\". هل حُذف؟",
+       "config-extension-link": "هل كنت تعلم أن الويكي الخاصة بك تدعم [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions الامتدادات]؟\n\nيمكنك تصفح [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category الامتدادات حسب التصنيف] أو [https://www.mediawiki.org/wiki/Extension_Matrix مصفوفة الامتدادت] لترى القائمة الكاملة للامتدادات.",
        "mainpagetext": "<strong>تم تثبيت ميدياويكي بنجاح.</strong>",
        "mainpagedocfooter": "استشر [https://meta.wikimedia.org/wiki/Help:Contents دليل المستخدم] لمعلومات حول استخدام برنامج الويكي.\n\n== البداية ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings قائمة إعدادات الضبط]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ أسئلة متكررة حول ميدياويكي]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce القائمة البريدية الخاصة بإصدار ميدياويكي]"
 }
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 081e114..cf3155d 100644 (file)
@@ -77,7 +77,7 @@ class ThumbnailRenderJob extends Job {
                }
        }
 
-       protected function hitThumbUrl( $file, $transformParams, &$thumbUrl ) {
+       protected function hitThumbUrl( LocalFile $file, $transformParams, &$thumbUrl ) {
                global $wgUploadThumbnailRenderHttpCustomHost, $wgUploadThumbnailRenderHttpCustomDomain;
 
                $thumbName = $file->thumbName( $transformParams );
index f0b44a5..e9922b9 100644 (file)
  * @file
  */
 
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Psr\Log\NullLogger;
+
 /**
  * Class to handle concurrent HTTP requests
  *
@@ -42,7 +46,7 @@
  * @author Aaron Schulz
  * @since 1.23
  */
-class MultiHttpClient {
+class MultiHttpClient implements LoggerAwareInterface {
        /** @var resource */
        protected $multiHandle = null; // curl_multi handle
        /** @var string|null SSL certificates path  */
@@ -59,6 +63,8 @@ class MultiHttpClient {
        protected $proxy;
        /** @var string */
        protected $userAgent = 'wikimedia/multi-http-client v1.0';
+       /** @var LoggerInterface */
+       protected $logger;
 
        /**
         * @param array $options
@@ -78,13 +84,17 @@ class MultiHttpClient {
                        }
                }
                static $opts = [
-                       'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy', 'userAgent'
+                       'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost',
+                       'proxy', 'userAgent', 'logger'
                ];
                foreach ( $opts as $key ) {
                        if ( isset( $options[$key] ) ) {
                                $this->$key = $options[$key];
                        }
                }
+               if ( $this->logger === null ) {
+                       $this->logger = new NullLogger;
+               }
        }
 
        /**
@@ -162,6 +172,7 @@ class MultiHttpClient {
                        } elseif ( !isset( $req['url'] ) ) {
                                throw new Exception( "Request has no 'url' field set." );
                        }
+                       $this->logger->debug( "{$req['method']}: {$req['url']}" );
                        $req['query'] = isset( $req['query'] ) ? $req['query'] : [];
                        $headers = []; // normalized headers
                        if ( isset( $req['headers'] ) ) {
@@ -235,6 +246,8 @@ class MultiHttpClient {
                                        if ( function_exists( 'curl_strerror' ) ) {
                                                $req['response']['error'] .= " " . curl_strerror( $errno );
                                        }
+                                       $this->logger->warning( "Error fetching URL \"{$req['url']}\": " .
+                                               $req['response']['error'] );
                                }
                        } else {
                                $req['response']['error'] = "(curl error: no status set)";
@@ -420,6 +433,15 @@ class MultiHttpClient {
                return $this->multiHandle;
        }
 
+       /**
+        * Register a logger
+        *
+        * @param LoggerInterface
+        */
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
        function __destruct() {
                if ( $this->multiHandle ) {
                        curl_multi_close( $this->multiHandle );
index d03bc48..565c157 100644 (file)
@@ -529,7 +529,7 @@ EOT;
                        // Formats we recognize magic numbers for
                        'djvu', 'ogx', 'ogg', 'ogv', 'oga', 'spx', 'opus',
                        'mid', 'pdf', 'wmf', 'xcf', 'webm', 'mkv', 'mka',
-                       'webp',
+                       'webp', 'mp3',
 
                        // XML formats we sure hope we recognize reliably
                        'svg',
@@ -670,6 +670,10 @@ EOT;
                        // Multimedia...
                        'MThd'             => 'audio/midi',
                        'OggS'             => 'application/ogg',
+                       'ID3'              => 'audio/mpeg',
+                       "\xff\xfb"         => 'audio/mpeg', // MPEG-1 layer 3
+                       "\xff\xf3"         => 'audio/mpeg', // MPEG-2 layer 3 (lower sample rates)
+                       "\xff\xe3"         => 'audio/mpeg', // MPEG-2.5 layer 3 (very low sample rates)
 
                        // Image formats...
                        // Note that WMF may have a bare header, no magic number.
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 2023d13..599fbf6 100644 (file)
@@ -286,14 +286,14 @@ class BlockLevelPass {
                                # @todo consider using a stack for nestable elements like span, table and div
                                $openMatch = preg_match(
                                        '/(?:<table|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|'
-                                               . '<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS',
+                                               . '<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)\\b/iS',
                                        $t
                                );
                                $closeMatch = preg_match(
                                        '/(?:<\\/table|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'
                                                . '<td|<th|<\\/?blockquote|<\\/?div|<hr|<\\/pre|<\\/p|<\\/mw:|'
                                                . Parser::MARKER_PREFIX
-                                               . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS',
+                                               . '-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)\\b/iS',
                                        $t
                                );
 
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 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 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 7d303de..ea93f1f 100644 (file)
@@ -45,6 +45,11 @@ class ContribsPager extends ReverseChronologicalPager {
         */
        protected $mParentLens;
 
+       /**
+        * @var TemplateParser
+        */
+       protected $templateParser;
+
        function __construct( IContextSource $context, array $options ) {
                parent::__construct( $context );
 
@@ -80,6 +85,7 @@ class ContribsPager extends ReverseChronologicalPager {
                // queries should use a regular replica DB since the lookup pattern is not all by user.
                $this->mDbSecondary = wfGetDB( DB_REPLICA ); // any random replica DB
                $this->mDb = wfGetDB( DB_REPLICA, 'contributions' );
+               $this->templateParser = new TemplateParser();
        }
 
        function getDefaultQuery() {
@@ -516,8 +522,7 @@ class ContribsPager extends ReverseChronologicalPager {
                                        $this->msg( 'rev-deleted-user-contribs' )->escaped();
                        }
 
-                       $templateParser = new TemplateParser();
-                       $ret = $templateParser->processTemplate(
+                       $ret = $this->templateParser->processTemplate(
                                'SpecialContributionsLine',
                                $templateParams
                        );
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 c9e0a26..a46f454 100644 (file)
        "recentchanges-submit": "أظهر",
        "rcfilters-activefilters": "المرشحات النشطة",
        "rcfilters-quickfilters": "وصلات سريعة",
+       "rcfilters-quickfilters-placeholder": "احفظ إعدادات أداتك المفضلة لتستخدمها لاحقا مرة أخرى.",
        "rcfilters-savedqueries-defaultlabel": "مرشحات محفوظة",
        "rcfilters-savedqueries-rename": "أعد التسمية",
        "rcfilters-savedqueries-setdefault": "حفظ كقيمة افتراضية",
        "rcfilters-filter-user-experience-level-newcomer-label": "القادمون الجدد",
        "rcfilters-filter-user-experience-level-newcomer-description": "أقل من 10 تعديلات و4 أيام من النشاط.",
        "rcfilters-filter-user-experience-level-learner-label": "المتعلمون",
-       "rcfilters-filter-user-experience-level-learner-description": "اÙ\84Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84خبرة Ø£Ù\83ثر Ù\85Ù\86 \"اÙ\84Ù\82ادÙ\85Ù\8aÙ\86 Ø§Ù\84جدد\" Ù\88Ù\84Ù\83Ù\86 Ø£Ù\82Ù\84 Ù\85Ù\86 \"اÙ\84Ù\85ستخدÙ\85Ù\8aÙ\86 Ø°Ù\88Ù\8a Ø§Ù\84خبرة\".",
+       "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": "المساهمات الأوتوماتيكية",
        "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 681dae8..3c60ae8 100644 (file)
        "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-search-placeholder": "Фільтар апошніх зьменаў (праглядзець або пачніце друкаваць)",
        "rcfilters-filter-watchlist-watched-description": "Зьмены старонак у вашым сьпісе назіраньня.",
        "rcfilters-filter-watchlist-watchednew-label": "Новыя зьмены ў сьпісе назіраньня",
        "rcfilters-filter-watchlist-watchednew-description": "Зьмены старонак у вашым сьпісе назіраньня, якія вы не наведвалі з моманту гэтых зьменаў.",
+       "rcfilters-filter-watchlist-notwatched-label": "Ня ў сьпісе назіраньня",
        "rcfilters-filtergroup-changetype": "Тып зьмены",
        "rcfilters-filter-pageedits-label": "Рэдагаваньні старонкі",
        "rcfilters-filter-pageedits-description": "Рэдагаваньні вікізьместу, абмеркаваньняў, апісаньняў катэгорыяў…",
index 4a73014..411d5c9 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-cancel-label": "Отказ",
        "rcfilters-restore-default-filters": "Възстановяване на филтри по подразбиране",
        "rcfilters-clear-all-filters": "Изчистване на всички филтри",
+       "rcfilters-search-placeholder": "Филтриране на последните промени (изберете или започнете да въвеждате)",
+       "rcfilters-empty-filter": "Няма активни филтри. Показани са всички редакции.",
        "rcfilters-filterlist-title": "Филтри",
        "rcfilters-filterlist-whatsthis": "Какво е това?",
+       "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-filter-editsbyself-label": "Ваши редакции",
        "rcfilters-filter-editsbyself-description": "Ваши редакции.",
        "rcfilters-filter-editsbyother-label": "Чужди редакции",
+       "rcfilters-filter-editsbyother-description": "Всички редакции с изключение на вашите собствени.",
        "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-filtergroup-changetype": "Вид на промяната",
        "rcfilters-filter-pageedits-label": "Редакции на страници",
+       "rcfilters-filter-pageedits-description": "Редакции на съдържанието, дискусии, описания на категории...",
        "rcfilters-filter-newpages-label": "Създавания на страници",
+       "rcfilters-filter-newpages-description": "Редакции, чрез които се създават нови страници.",
        "rcfilters-filter-categorization-label": "Промяна на категории",
+       "rcfilters-filter-logactions-description": "Административни действия, създавания на сметки, изтривания на страници, качвания...",
+       "rcfilters-filtergroup-lastRevision": "Текуща версия",
+       "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 на малки промени",
index 0a67e37..9e37a64 100644 (file)
        "nocreate-loggedin": "আপনার নতুন পাতা তৈরি করার অনুমোদন নেই।",
        "sectioneditnotsupported-title": "অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
        "sectioneditnotsupported-text": "এই সম্পাদনা পাতায় অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
-       "permissionserrors": "অনুমতি ত্রুটিসমূহ",
+       "permissionserrors": "অনুমতি ত্রুটি",
        "permissionserrorstext": "নিন্মলিখিত {{PLURAL:$1|কারণটির|কারণগুলির}} জন্য আপনার এটা করার অনুমতি নেই:",
        "permissionserrorstext-withaction": "আপনার $2 অনুমতি নেই, যার {{PLURAL:$1|কারণটি|কারণগুলি}} হল:",
        "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
index 90bb801..cb2f23d 100644 (file)
        "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",
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 f7ff0b7..eabd0d6 100644 (file)
                        "Matma Rex",
                        "Ανώνυμος Βικιπαιδιστής",
                        "GR",
-                       "Thodoris"
+                       "Thodoris",
+                       "Ftsalamp"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
-       "tog-hideminor": "Απόκρυψη μικροεπεξεργασιών στις πρόσφατες αλλαγές",
+       "tog-hideminor": "Απόκρυψη μικροεπεξεργασιών από τις πρόσφατες αλλαγές",
        "tog-hidepatrolled": "Απόκρυψη ελεγμένων επεξεργασιών στις πρόσφατες αλλαγές",
        "tog-newpageshidepatrolled": "Απόκρυψη ελεγμένων σελίδων από τον κατάλογο νέων σελίδων",
        "tog-hidecategorization": "Απόκρυψη κατηγοριοποίησης σελίδων",
        "preview": "Προεπισκόπηση",
        "showpreview": "Εμφάνιση προεπισκόπησης",
        "showdiff": "Εμφάνιση αλλαγών",
-       "blankarticle": "<strong>Προειδοποίηση:</strong> Η σελίδα που πάτε να δημιουργήσετε είναι κενή.\nΕάν ξανακάνετε κλικ στο κουμπί «$1» η σελίδα θα δημιουργηθεί χωρίς περιεχόμενο.",
+       "blankarticle": "<strong>Προειδοποίηση:</strong> Η σελίδα που προσπαθείτε να δημιουργήσετε είναι κενή.\nΕάν ξανακάνετε κλικ στο κουμπί «$1» η σελίδα θα δημιουργηθεί χωρίς περιεχόμενο.",
        "anoneditwarning": "<strong>Προειδοποίηση:</strong> Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα είναι ορατή δημόσια αν κάνετε κάποια επεξεργασία. Αν <strong>[$1 συνδεθείτε]</strong> ή <strong>[$2 δημιουργήσετε λογαριασμό]</strong>, οι επεξεργασίες σας θα αποδοθούν στο όνομά χρήστη σας, μαζί με άλλα οφέλη.",
        "anonpreviewwarning": "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''",
        "missingsummary": "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.",
        "readonlywarning": "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''\nΜπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.\n\nΟ διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
        "protectedpagewarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή μπορούν να την επεξεργαστούν.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "semiprotectedpagewarning": "'''Σημείωση:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο εγγεγραμμένοι χρήστες μπορούν να την επεξεργαστούν.\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
-       "cascadeprotectedwarning": "'''Προσοχή:''' Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με δικαιώματα διαχειριστή συστήματος να μπορούν να την επεξεργαστούν, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη|στις ακόλουθες}} διαδοχικά (cascaded) {{PLURAL:$1|προστατευμένη σελίδα|προστατευμένες σελίδες}}:",
+       "cascadeprotectedwarning": "<strong>Προσοχή:</strong> Αυτή η σελίδα έχει κλειδωθεί ώστε μόνο χρήστες με [[Special:ListGroupRights|συγκεκριμένα δικαιώματα]] να μπορούν να την επεξεργαστούν, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη|στις ακόλουθες}} διαδοχικά (cascaded) {{PLURAL:$1|προστατευμένη σελίδα|προστατευμένες σελίδες}}:",
        "titleprotectedwarning": "'''Προειδοποίηση: Αυτή η σελίδα έχει κλειδωθεί ώστε χρειάζονται [[Special:ListGroupRights|ειδικά δικαιώματα]] για να δημιουργηθεί.'''\nΗ πιο πρόσφατη καταχώρηση στο αρχείο καταγραφής παρέχεται παρακάτω για αναφορά:",
        "templatesused": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} στη σελίδα αυτή:",
        "templatesusedpreview": "{{PLURAL:$1|Πρότυπο που χρησιμοποιείται|Πρότυπα που χρησιμοποιούνται}} σε αυτήν την προεπισκόπηση:",
        "page_first": "πρώτη",
        "page_last": "τελευταία",
        "histlegend": "Επιλογή διαφορών: Μαρκάρετε τα κουτάκια επιλογής των εκδόσεων που θέλετε να συγκρίνετε και πατήστε το enter ή το κουμπί στο κάτω μέρος.<br />\nΥπόμνημα: '''({{int:cur}})''' = διαφορά από την τελευταία έκδοση, '''({{int:last}})''' = διαφορά από την προηγούμενη έκδοση, '''{{int:minoreditletter}}''' = μικροαλλαγή.",
-       "history-fieldset-title": "Περιήγηση στο ιστορικό",
+       "history-fieldset-title": "Περιήγηση στο ιστορικό αλλαγών",
        "history-show-deleted": "Διαγεγραμμένες μόνο",
        "histfirst": "η πιο παλιά",
        "histlast": "η πιο πρόσφατη",
        "prefs-help-prefershttps": "Αυτή η προτίμηση θα τεθεί σε ισχύ στην επόμενή σας σύνδεση.",
        "prefswarning-warning": "Έχετε κάνει αλλαγές στις προτιμήσεις σας που δεν έχουν αποθηκευτεί ακόμα.\nΕάν αφήσετε αυτή τη σελίδα χωρίς να κάνετε κλικ στο \"$1\" οι προτιμήσεις σας δεν θα ενημερωθούν.",
        "prefs-tabs-navigation-hint": "Συμβουλή: Μπορείτε να χρησιμοποιήσετε τα πλήκτρα διευθύνσεων αριστερά και δεξιά για να πλοηγηθείτε μεταξύ των καρτελών στη λίστα καρτελών.",
-       "userrights": "Î\94ιαÏ\87είÏ\81ιÏ\83η Î´Î¹ÎºÎ±Î¹Ï\89μάÏ\84Ï\89ν χρηστών",
+       "userrights": "Î\94ικαιÏ\8eμαÏ\84α χρηστών",
        "userrights-lookup-user": "Επιλέξτε χρήστη",
        "userrights-user-editname": "Δηλώστε όνομα χρήστη:",
        "editusergroup": "Φόρτωση ομάδων χρηστών",
        "saveusergroups": "Αποθήκευση {{GENDER:$1|ομάδων}}  χρηστών",
        "userrights-groupsmember": "Μέλος της ομάδας:",
        "userrights-groupsmember-auto": "Αυτονόητο μέλος του:",
-       "userrights-groups-help": "Î\9cÏ\80οÏ\81είÏ\84ε Î½Î± Î¼ÎµÏ\84αβάλεÏ\84ε Ï\84ιÏ\82 Î¿Î¼Î¬Î´ÎµÏ\82 Ï\83Ï\84ιÏ\82 Î¿Ï\80οίεÏ\82 Î±Î½Î®ÎºÎµÎ¹ {{GENDER:$1|αÏ\85Ï\84Ï\8cÏ\82 Î¿ Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|αÏ\85Ï\84ή Î· Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}}:\n* Î¤Ï\83εκαÏ\81ιÏ\83μένο ÎºÎ¿Ï\85Ï\84άκι Ï\83ημαίνει Ï\8cÏ\84ι {{GENDER:$1|ο Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|η Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} Î±Î½Î®ÎºÎµÎ¹ Ï\83ε Î±Ï\85Ï\84ήν Ï\84ην Î¿Î¼Î¬Î´Î±.\n* Î\9cη Ï\84Ï\83εκαÏ\81ιÏ\83μένο ÎºÎ¿Ï\85Ï\84άκι Ï\83ημαίνει Ï\8cÏ\84ι {{GENDER:$1|ο Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|η Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} Î´ÎµÎ½ Î±Î½Î®ÎºÎµÎ¹ Ï\83ε Î±Ï\85Ï\84ήν Ï\84ην Î¿Î¼Î¬Î´Î±.\n* Î\91Ï\83Ï\84εÏ\81ίÏ\83κοÏ\82 (*) Ï\83ημαίνει Ï\8cÏ\84ι Î´ÎµÎ½ Î¼Ï\80οÏ\81είÏ\84ε Î½Î± Î±Ï\86αιÏ\81έÏ\83εÏ\84ε Ï\84ην Î¿Î¼Î¬Î´Î± Î¬Ï\80αξ ÎºÎ±Î¹ Ï\84ην Ï\80Ï\81οÏ\83θέÏ\83εÏ\84ε, Î® Ï\84ο Î±Î½Î¬Ï\80οδο.",
+       "userrights-groups-help": "Î\9cÏ\80οÏ\81είÏ\84ε Î½Î± Î¼ÎµÏ\84αβάλεÏ\84ε Ï\84ιÏ\82 Î¿Î¼Î¬Î´ÎµÏ\82 Ï\83Ï\84ιÏ\82 Î¿Ï\80οίεÏ\82 Î±Î½Î®ÎºÎµÎ¹ {{GENDER:$1|αÏ\85Ï\84Ï\8cÏ\82 Î¿ Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|αÏ\85Ï\84ή Î· Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}}:\n* Î¤Ï\83εκαÏ\81ιÏ\83μένο ÎºÎ¿Ï\85Ï\84άκι Ï\83ημαίνει Ï\8cÏ\84ι {{GENDER:$1|ο Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|η Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} Î±Î½Î®ÎºÎµÎ¹ Ï\83ε Î±Ï\85Ï\84ήν Ï\84ην Î¿Î¼Î¬Î´Î±.\n* Î\9cη Ï\84Ï\83εκαÏ\81ιÏ\83μένο ÎºÎ¿Ï\85Ï\84άκι Ï\83ημαίνει Ï\8cÏ\84ι {{GENDER:$1|ο Ï\87Ï\81ήÏ\83Ï\84ηÏ\82|η Ï\87Ï\81ήÏ\83Ï\84Ï\81ια}} Î´ÎµÎ½ Î±Î½Î®ÎºÎµÎ¹ Ï\83ε Î±Ï\85Ï\84ήν Ï\84ην Î¿Î¼Î¬Î´Î±.\n* Î\9f Î±Ï\83Ï\84εÏ\81ίÏ\83κοÏ\82 (*) Î´Î·Î»Ï\8eνει Ï\8cÏ\84ι Î´ÎµÎ½ Î¼Ï\80οÏ\81είÏ\84ε Î½Î± Î±Ï\86αιÏ\81έÏ\83εÏ\84ε Ï\84ην Î¿Î¼Î¬Î´Î± Î¬Ï\80αξ ÎºÎ±Î¹ Ï\84ην Ï\80Ï\81οÏ\83θέÏ\83εÏ\84ε, Î® Ï\84ο Î±Î½Î¬Ï\80οδο.\n* Î\97 Î´Î¯ÎµÏ\83η (#) Î´Î·Î»Ï\8eνει Ï\8cÏ\84ι Ï\84η Î»Î®Î¾Î· Î¹Ï\83Ï\87Ï\8dοÏ\82 Ï\84ηÏ\82 Î­Î½Ï\84αξηÏ\82 Ï\83ε Î±Ï\85Ï\84ήν Ï\84ην Î¿Î¼Î¬Î´Î± Î¼Ï\80οÏ\81είÏ\84ε Î½Î± Ï\84η Î¼ÎµÏ\84αθέÏ\83εÏ\84ε Î¼Ï\8cνο Ï\83ε Î¼ÎµÏ\84αγενέÏ\83Ï\84εÏ\81η Ï\87Ï\81ονική Ï\83Ï\84ιγμή ÎºÎ±Î¹ Ï\8cÏ\87ι Ï\83ε Ï\80Ï\81ογενέÏ\83Ï\84εÏ\81η.",
        "userrights-reason": "Αιτία:",
        "userrights-no-interwiki": "Δεν έχετε άδεια να επεξεργαστείτε τα δικαιώματα χρηστών σε άλλα wiki.",
        "userrights-nodatabase": "Η βάση δεδομένων $1 δεν υπάρχει ή δεν είναι τοπική.",
        "backend-fail-read": "Αδύνατη η ανάγνωση αρχείου $1.",
        "backend-fail-create": "Αδύνατη η δημιουργία αρχείου $1.",
        "backend-fail-maxsize": "Δεν ήταν δυνατή η εγγραφή του αρχείου «$1» γιατί είναι μεγαλύτερο από {{PLURAL:$2|ένα byte|$2 bytes}}.",
-       "backend-fail-readonly": "Το αντικείμενο αποθήκευσης \"$1\" αυτή τη στιγμή είναι μόνο για ανάγνωση. Η αιτία που δόθηκε ήταν: \"$2\"",
+       "backend-fail-readonly": "Το σύστημα αποθήκευσης «$1» αυτή τη στιγμή είναι διαθέσιμο μόνο για ανάγνωση. Η αιτιολόγηση που δόθηκε ήταν: «$2»",
        "backend-fail-synced": "Το αρχείο \"$1\" είναι σε κατάσταση ασυνέπειας εντός του εσωτερικού χώρου αποθήκευσης",
        "backend-fail-connect": "Δεν ήταν δυνατή η σύνδεση στο αντικείμενο αποθήκευσης \"$1\".",
        "backend-fail-internal": "Παρουσιάστηκε ένα άγνωστο σφάλμα στην αποθήκευση παρασκηνίου \"$1\".",
        "apihelp-no-such-module": "Το Module \"$1\" δεν βρέθηκε.",
        "apisandbox": "Αμμοδοχείο API",
        "apisandbox-api-disabled": "Η Διεπαφή Προγραμματισμού Εφαρμογών (API) είναι απενεργοποιημένη σε αυτήν την τοποθεσία.",
-       "apisandbox-intro": "Χρησιμοποιήστε αυτήν τη σελίδα για να πειραματιστείτε με το '''API της υπηρεσίας ιστού του MediaWiki'''.\nΑνατρέξτε στην [https://www.mediawiki.org/wiki/API:Main_page τεκμηρίωση του API] για περισσότερες πληροφορίες πάνω στη χρήση του API. Παράδειγμα: [https://www.mediawiki.org/wiki/API#A_simple_example λήψη του περιεχομένου της Αρχικής Σελίδας]. Επιλέξτε μια ενέργεια για να δείτε περισσότερα παραδείγματα.\n\nΝα σημειωθεί ότι, παρόλο που αυτό εδώ είναι αμμοδοχείο, οι ενέργειες που εκτελείτε σε αυτήν τη σελίδα μπορούν να τροποποιήσουν το wiki.",
+       "apisandbox-intro": "Χρησιμοποιήστε αυτήν τη σελίδα για να πειραματιστείτε με το <strong>API της υπηρεσίας ιστού του MediaWiki</strong>.\nΑνατρέξτε στην [[mw:API:Main page|τεκμηρίωση του API]] για περισσότερες πληροφορίες πάνω στη χρήση του API. \nΠαράδειγμα: [https://www.mediawiki.org/wiki/API#A_simple_example λήψη του περιεχομένου της Αρχικής Σελίδας]. Επιλέξτε κάποια ενέργεια για να δείτε περισσότερα παραδείγματα.\n\nΝα σημειωθεί ότι, παρόλο που αυτό εδώ είναι αμμοδοχείο, οι ενέργειες που εκτελείτε σε αυτήν τη σελίδα μπορούν να τροποποιήσουν το wiki.",
        "apisandbox-unfullscreen": "Εμφάνιση της σελίδας",
        "apisandbox-submit": "Υποβολή του αιτήματος",
        "apisandbox-reset": "Εκκαθάριση",
        "changecontentmodel-cannot-convert": "Το περιεχόμενο του [[:$1]] δεν μπορεί να μετατραπεί σε τύπο $2.",
        "changecontentmodel-nodirectediting": "Το μοντέλο περιεχομένου $1 δεν υποστηρίζει την άμεση επεξεργασία",
        "log-name-contentmodel": "Αρχείο καταγραφής αλλαγών μοντέλου περιεχομένου",
-       "log-description-contentmodel": "ΣÏ\85μβάνÏ\84α Ï\80οÏ\85 Ï\83Ï\87εÏ\84ίζονÏ\84αι Î¼Îµ Ï\84α Î¼Î¿Î½Ï\84έλα Ï\80εÏ\81ιεÏ\87ομένοÏ\85 Î¼Î¹Î±Ï\82 Ï\83ελίδαÏ\82",
+       "log-description-contentmodel": "Î\91Ï\85Ï\84ή Î· Ï\83ελίδα Ï\80εÏ\81ιέÏ\87ει Î±Î»Î»Î±Î³Î­Ï\82 Ï\83Ï\84ο Î¼Î¿Î½Ï\84έλο Ï\80εÏ\81ιεÏ\87ομένοÏ\85 Ï\84Ï\89ν Ï\83ελίδÏ\89ν, ÎºÎ±Î¹ Ï\84ιÏ\82 Ï\83ελίδεÏ\82 Ï\80οÏ\85 Î´Î·Î¼Î¹Î¿Ï\85Ï\81γήθηκαν Î¼Îµ Î¼Î¿Î½Ï\84έλο Ï\80εÏ\81ιεÏ\87ομένοÏ\85 Î´Î¹Î±Ï\86οÏ\81εÏ\84ικÏ\8c Î±Ï\80Ï\8c Ï\84ο Ï\80Ï\81οεÏ\80ιλεγμένο.",
        "logentry-contentmodel-change": "{{GENDER:$2|Ο|Η}} $1 άλλαξε το πρότυπο περιεχομένου της σελίδας $3 από «$4» σε «$5»",
        "logentry-contentmodel-change-revertlink": "αναστροφή",
        "logentry-contentmodel-change-revert": "αναστροφή",
        "anonymous": "{{PLURAL:$1|Ανώνυμος χρήστης|Ανώνυμοι χρήστες}} του {{SITENAME}}",
        "siteuser": "{{SITENAME}} χρήστης $1",
        "anonuser": "ανώνυμος χρήστης $1 του {{SITENAME}}",
-       "lastmodifiedatby": "Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις  $2, $1 από το χρήστη $3.",
+       "lastmodifiedatby": "Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις $2, στις $1 από το χρήστη $3.",
        "othercontribs": "Βασισμένο στη δουλειά του/των $1",
        "others": "άλλοι",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|χρηστής|χρήστες}} του ιστοχώρου $1",
        "htmlform-user-not-valid": "Το <strong>$1</strong> δεν είναι έγκυρο όνομα χρήστη.",
        "logentry-delete-delete": "{{GENDER:$2|Ο|Η}} $1 διέγραψε τη σελίδα $3",
        "logentry-delete-delete_redir": "{{GENDER:$2|Ο|Η}} $1 διέγραψε την ανακατεύθυνση $3 με αντικατάσταση",
-       "logentry-delete-restore": "Ο/Η $1 αποκατέστησε τη σελίδα $3",
+       "logentry-delete-restore": "{{GENDER:$1|Ο|Η}} $1 αποκατέστησε τη σελίδα $3 ($4)",
        "logentry-delete-event": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στο $3: $4",
        "logentry-delete-revision": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
        "logentry-delete-event-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα των καταγραφόμενων συμβάντων στη σελίδα $3",
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 e03a6c2..598d953 100644 (file)
        "rcfilters-quickfilters": "Enlaces rápidos",
        "rcfilters-quickfilters-placeholder": "Guarda las configuraciones favoritas de la herramienta para volver a usarlas luego.",
        "rcfilters-savedqueries-defaultlabel": "Filtros guardados",
-       "rcfilters-savedqueries-rename": "Renombrar",
+       "rcfilters-savedqueries-rename": "Cambiar nombre",
        "rcfilters-savedqueries-setdefault": "Activar por defecto",
        "rcfilters-savedqueries-unsetdefault": "Desactivar por defecto",
        "rcfilters-savedqueries-remove": "Eliminar",
        "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..56ca690 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",
        "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 dd8b2c9..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.",
        "userpage-userdoesnotexist": "Det brükerkonto ''$1'' as ei diar.\nWel dü detdiar sidj würelk maage/bewerke?",
        "userpage-userdoesnotexist-view": "Son brükerkonto \"$1\" jaft at ei.",
        "blocked-notice-logextract": "Didiar brüker as speret. Det stäänt uun't sper-logbuk:",
-       "clearyourcache": "'''Beaachte:''' Maage di cache faan dan browser leesag, wan dü a feranrangen sä wel.\n* '''Firefox / Safari:''' Hual ''Shift'' bi't aktualisiarin, of trak ''Strg an F5'' of ''Strg an R'' (''⌘an R'' üüb en Mac)\n* '''Google Chrome:''' Trak ''Strg an Shift an R'' (''⌘an Shift an R'' üüb en Mac)\n* '''Internet Explorer:''' Hual ''Strg'' bi't aktualisiarin, of trak ''Strg an F5''\n* '''Opera:''' ''Extras - Internetspuren löschen - Individuelle Auswahl - Den kompletten Cache löschen''",
+       "clearyourcache": "<strong>Beaachte:</strong> Maage di cache faan dan browser leesag, wan dü a feranrangen sä wel.\n* <strong>Firefox / Safari:</strong> Hual <em>Shift</em> bi't aktualisiarin, of trak <em>Strg an F5</em> of <em>Strg an R</em> (''⌘an R'' üüb en Mac)\n* <strong>Google Chrome:</strong> Trak <em>Strg an Shift an R</em> (<em>⌘an Shift an R</em> üüb en Mac)\n* <strong>Internet Explorer:</strong> Hual <em>Strg</em> bi't aktualisiarin, of trak <em>Strg an F5</em>\n* <strong>Opera:</strong> <em>Extras - Internetspuren löschen - Individuelle Auswahl - Den kompletten Cache löschen</em>",
        "usercssyoucanpreview": "'''Tip:''' Brük di „{{int:showpreview}}“-knoop, am din nei CSS föör det seekrin tu testin.",
        "userjsyoucanpreview": "'''Tip:''' Brük di „{{int:showpreview}}“-knoop, am din nei JavaScript föör det seekrin tu testin.",
        "usercsspreview": "'''Seenk diaram, dat det bluas en föörskau faan din CSS as.'''\n'''Det as noch ei seekert wurden!'''",
        "continue-editing": "Gung tu't fial för't bewerkin",
        "previewconflict": "Detdiar föörskau wiset di boowenst dial faan dan tekst. So schocht hi ütj, wan dü ham nü seekerst.",
        "session_fail_preview": "Entskilage! Din werk küd ei ufseekert wurd. Diar as wat skiaf gingen.\n\nFerlicht beest dü ufmeldet wurden. <strong>Stel seeker, dat dü noch uunmeldet beest an ferschük det man noch ans</strong>.\nWan det ei wal, do mutst dü di man [[Special:UserLogout|ufmelde]] an do weder nei uunmelde. Dan browser skal cookies uunnem kön.",
-       "session_fail_preview_html": "'''Din werk küd ei seekert wurd. Diar as wat skiaf gingen.'''\n\n''Uun {{SITENAME}} as HTML aktiwiaret, an diaram as JavaScript deaktiwiaret wurden.''\n\nFerschük det man noch ans an trak do üüb ''Sidj seekre''.\nWan't do imer noch ei loket, [[Special:UserLogout|melde di uf]] an weder uun.",
+       "session_fail_preview_html": "Din werk küd ei seekert wurd. Diar as wat skiaf gingen.\n\n<em>Uun {{SITENAME}} as HTML aktiwiaret, an diaram as JavaScript deaktiwiaret wurden.</em>\n\nFerschük det man noch ans an trak do üüb <em>Sidj seekre</em>.\nWan't do imer noch ei loket, [[Special:UserLogout|melde di uf]] an weder uun, an luke efter, of dan browser cookies tuläät.",
        "token_suffix_mismatch": "'''Din werk küd ei ufseekert wurd, auer diar frääm tiaken uun san.'''\n\nDet komt flooksis föör, wan Dan anonym Proxy-siinst ei rocht werket.",
        "edit_form_incomplete": "'''Enkelt dialen faan det formulaar san ei rocht uunkimen.'''\nWees so gud an kontroliare ales noch ans.",
        "editing": "Bewerkin faan $1",
        "readonlywarning": "<strong>Paase üüb: Dü könst uun uugenblak ei üüb det dootenbeenk tugrip. Din dooten kön ei seekert wurd.</strong> Wees so gud an seekre dan tekst iarst ans üüb dan reegner, an ferschük leederhen, ham tu auerdreegen.\n\nGrünj för det sper: $1",
        "protectedpagewarning": "'''Paase üüb: Detdiar sidj as speret wurden. Bluas administratooren kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
        "semiprotectedpagewarning": "'''Paase üüb: Detdiar sidj as dialwiis tu't bewerkin speret wurden. Bluas gudkäänd brükern kön det bewerke.'''\nUun't logbuk stäänt muar diartu:",
-       "cascadeprotectedwarning": "<strong>Paase üüb:</strong> Detdiar sidj koon bluas faan administratooren bewerket wurd. Hat as uun {{PLURAL:$1|detdiar ööder sidj|jodiar ööder sidjen}} iinbünjen, diar troch en kaskaadensper seekert {{PLURAL:$1|as|san}}:",
+       "cascadeprotectedwarning": "<strong>Paase üüb:</strong> Detdiar sidj koon bluas faan brükern mä [[Special:ListGroupRights|aparte rochten]] bewerket wurd. Hat as uun {{PLURAL:$1|detdiar ööder sidj|jodiar ööder sidjen}} iinbünjen, diar troch en kaskaadensper seekert {{PLURAL:$1|as|san}}:",
        "titleprotectedwarning": "'''Paase üüb: \"Detdiar sidj mä didiar nööm koon ei faan arken bewerket wurd. Bluas enkelt brükern mä [[Special:ListGroupRights|was brükerrochten]] kön detdiar sidj nei maage of bewerke.'''\nUun't logbuk stäänt muar diartu:",
        "templatesused": "{{PLURAL:$1|Detdiar föörlaag woort|Jodiar föörlaagen wurd}} üüb detdiar sidj brükt:",
        "templatesusedpreview": "{{PLURAL:$1|Detdiar föörlaag woort|Jodiar föörlaagen wurd}} uun detdiar sidjenföörskau brükt:",
        "search-file-match": "(fünjen tekst)",
        "search-suggest": "Mendst dü „$1“?",
        "search-rewritten": "Diar wurd resultaaten för $1 uunwiset. Schük uunsteed för $2.",
-       "search-interwiki-caption": "Saster-projekten",
+       "search-interwiki-caption": "Resultaaten faan saster-projekten",
        "search-interwiki-default": "Resultaaten faan $1:",
        "search-interwiki-more": "(muar)",
        "search-relatedarticle": "Ferbünjen",
        "sp-contributions-uploads": "Huuchschüürd bilen",
        "sp-contributions-logs": "Logbuken",
        "sp-contributions-talk": "Diskuschuun",
-       "sp-contributions-userrights": "Brükerrochten",
+       "sp-contributions-userrights": "{{GENDER:$1|Brüker}}rochten",
        "sp-contributions-blocked-notice": "Didiar brüker as speret. Det stäänt uun't sperlogbuk:",
        "sp-contributions-blocked-notice-anon": "Detdiar IP-adres as speret. Det stäänt uun't sperlogbuk:",
        "sp-contributions-search": "Schük efter brükerbidracher",
        "unblock": "Brüker ei muar spere",
        "blockip": "IP-adres/{{GENDER:$1|brüker}} spere",
        "blockip-legend": "IP-adres/brüker spere",
-       "blockiptext": "Mä detdiar formulaar sperest dü en IP-adres of en brükernööm, so dat faan diar nian feranrangen muar maaget wurd kön. \nDet skul bluas föörnimen wurd, am jin wandaalen föörtugungen an uun auerianstemang mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]].\nSkriiw en guden grünj för det sper ap.",
+       "blockiptext": "Mä detdiar formulaar sperest dü en IP-adres of en brükernööm, so dat faan diar nian feranrangen muar maaget wurd kön. \nDet skul bluas föörnimen wurd, am jin wandaalen föörtugungen an uun auerianstemang mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]].\nSkriiw en guden grünj för det sper ap.\nDü könst IP-adres-beriker mä det [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]-syntax spere; di gratst mögelk berik as /$1 för IPv4 and /$2 för IPv6.",
        "ipaddressorusername": "IP-adres of brükernööm:",
        "ipbexpiry": "Sperdüür:",
        "ipbreason": "Grünj:",
        "lockedbyandtime": "(faan $1 di $2 am a klook $3)",
        "move-page": "Fersküüw $1",
        "move-page-legend": "Sidj fersküüw",
-       "movepagetext": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjerfeer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
-       "movepagetext-noredirectfixer": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjer feer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort '''ei''' fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n'''Paase üüb!'''\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
-       "movepagetalktext": "Uk det diskuschuunsidj woort fersköwen, wan det diar as, <strong>oober ei, wan:</strong>\n*Diar al en diskuschuunsidj mä didiar nööm as, of\n*Dü detdiar mögelkhaid ütjslotst.\n\nUun didiar faal skel dü a diskuschuunsidjen faan hun tuupfeer.",
+       "movepagetext": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjerfeer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort <strong>ei</strong> fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n<strong>Paase üüb!</strong>\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
+       "movepagetext-noredirectfixer": "Mä detdiar formulaar könst dü en sidj mä aal sin werjuunen amnääm.\nDi ual tiitel woort üüb di nei widjerfeerd.\nDü könst widjerfeerangen, diar üüb di ual tiitel wise, automaatisk üüb di nei tiitel widjer feer läät.\nWan dü det oober ei dääst, paase üüb, dat dü aal a [[Special:DoubleRedirects|dobelt]] of [[Special:BrokenRedirects|breegen]] widjerfeerangen noch ans efterlukest.\nBluas dü könst diarför surge, dat ferwisangen widjerhen rocht werke.\n\nDet sidj woort <strong>ei</strong> fersköwen, wan't al en sidj mä di nei nööm jaft. Det loket bluas do, wan di nei nööm salew en widjerfeerang as. Det ment, dat dü det amnäämen turagsaat könst, wan dü niks ferkiard maaget heest. Dü könst oober nian sidj, diar't al jaft, auerskriiw.\n\n<strong>Paase üüb!</strong>\nDet fersküüwen hää widjloftag fulgen för ööder sidjen. Dü skulst begreben haa, wat dü diar maage wel.",
+       "movepagetalktext": "Wan dü detdiar kasche aktiwiarest, woort det diskuschuunsidj woort fersköwen, oober ei, wan diar al en diskuschuunsidj mä didiar nööm as.\n\nUun didiar faal skel dü a diskuschuunsidjen faan hun tuupfeer.",
        "moveuserpage-warning": "'''Paase üüb:''' Dü wel en brükersidj fersküüw. Seenk diaram, dat bluas det brükersidj amnäämd woort, oober '''ei''' di brüker. Hi behäält san ual nööm.",
        "movecategorypage-warning": "<strong>Paase üüb:</strong> Dü wel jüst en kategoriisidj fersküüw. Seenk diaram, dat bluas det sidj fersköwen woort. A sidjen uun det kategorii wurd <em>ei</em> nei kategorisiaret.",
        "movenologintext": "Dü skel registriaret an [[Special:UserLogin|uunmeldet]] wees, am en sidj tu fersküüwen.",
        "import-nonewrevisions": "Diar wurd nian werjuunen importiaret, auer jo eder al diar wiar of auersprüngen wurden san.",
        "xml-error-string": "$1 uun rä $2, türn $3 (byte $4): $5",
        "import-upload": "XML-datein importiare",
-       "import-token-mismatch": "Session dooten san wech. Ferschük det noch ans weder.",
+       "import-token-mismatch": "Session dooten san wech.\n\nDü beest wel ufmeldet wurden. <strong>Stel seeker, dat dü noch uunmeldet beest, an ferschük det man noch ans</strong>.\nWan det ei loket, [[Special:UserLogout|melde di uf]] an do weder uun. Stel seeker, dat dan browser cookies tuläät.",
        "import-invalid-interwiki": "Faan detdiar Wiki koon ik ei importiare.",
        "import-error-edit": "Det sidj „$1“ as ei importiaret wurden, auer dü det ei bewerke mutst.",
        "import-error-create": "Det sidj „$1“ as ei importiaret wurden, auer dü det ei maage mutst.",
        "scarytranscludefailed-httpstatus": "[Ufrepen faan föörlaagen för $1 as skiaf gingen: HTTP  $2]",
        "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": "Di 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:''$2''\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": "{{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": "{{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 4338374..1f6a162 100644 (file)
        "watchlisttools-view": "הצגת השינויים הרלוונטיים",
        "watchlisttools-edit": "הצגה ועריכה של רשימת המעקב",
        "watchlisttools-raw": "עריכת רשימת המעקב הגולמית",
-       "iranian-calendar-m1": "פר×\91רדין",
-       "iranian-calendar-m2": "×\90×\95ר×\93×\99×\91×\94ש×\98",
-       "iranian-calendar-m3": "×\97×\95רדאד",
+       "iranian-calendar-m1": "פר×\95רדין",
+       "iranian-calendar-m2": "×\90ר×\93×\99×\91×\94שת",
+       "iranian-calendar-m3": "×\97׳רדאד",
        "iranian-calendar-m4": "תיר",
-       "iranian-calendar-m5": "×\9e×\95ר×\93×\90×\93",
-       "iranian-calendar-m6": "ש×\94ר×\99×\91ר",
+       "iranian-calendar-m5": "מרדאד",
+       "iranian-calendar-m6": "ש×\94ר×\99×\95ר",
        "iranian-calendar-m7": "מהר",
-       "iranian-calendar-m8": "אבן",
-       "iranian-calendar-m9": "×\90×\96ר",
+       "iranian-calendar-m8": "×\90×\91×\90×\9f",
+       "iranian-calendar-m9": "×\90×\93׳ר",
        "iranian-calendar-m10": "די",
        "iranian-calendar-m11": "בהמן",
        "iranian-calendar-m12": "אספנד",
        "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 קבצים}}",
        "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 8cf00c3..c261b10 100644 (file)
                        "Jayprakash12345",
                        "Dr. Shikha Jaggi",
                        "Shyamal",
-                       "SatyamMishra"
+                       "SatyamMishra",
+                       "चक्रपाणी"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "tog-hideminor": "हाल में हुए परिवर्तन में छोटे बदलाव छिपाएँ",
        "tog-hidepatrolled": "हाल में हुए परिवर्तन में परीक्षित बदलाव छिपाएँ",
        "tog-newpageshidepatrolled": "नये पृष्ठों की सूची में परीक्षित पृष्ठ छिपाएँ",
-       "tog-hidecategorization": "पà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95ा à¤¶à¥\8dरà¥\87णà¥\80à¤\95रण à¤¹à¤\9fाà¤\8fà¤\81",
+       "tog-hidecategorization": "पà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95ा à¤¶à¥\8dरà¥\87णà¥\80à¤\95रण à¤\9bिपाà¤\8fà¤\82",
        "tog-extendwatchlist": "केवल हालिया ही नहीं, बल्कि सभी परिवर्तनों को दिखाने के लिए ध्यानसूची को विस्तारित करें",
        "tog-usenewrc": "हाल में हुए परिवर्तनों और ध्यानसूची में परिवर्तनों को पृष्ठ अनुसार समूहों में बाँटें",
        "tog-numberheadings": "शीर्षक स्व-क्रमांकित करें",
        "tog-showtoolbar": "सम्पादन उपकरण पट्टी दिखाएँ",
-       "tog-editondblclick": "दà¥\8bà¤\97à¥\81ना क्लिक पर पृष्ठ संपादित करें",
+       "tog-editondblclick": "डबल क्लिक पर पृष्ठ संपादित करें",
        "tog-editsectiononrightclick": "अनुभाग शीर्षक पर दायाँ क्लिक करने पर अनुभाग सम्पादित करें",
        "tog-watchcreations": "मेरे द्वारा निर्मित पृष्ठों और मेरी अपलोड की फ़ाइलों को मेरी ध्यानसूची में जोड़ें",
        "tog-watchdefault": "मेरे द्वारा सम्पादित पृष्ठों और फ़ाइलों को मेरी ध्यानसूची में जोड़ें",
        "underline-always": "सदैव",
        "underline-never": "कभी नहीं",
        "underline-default": "प्राथमिक त्वचा या ब्राउज़र",
-       "editfont-style": "समà¥\8dपादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\80 à¤®à¥\81दà¥\8dरलिपि शैली:",
+       "editfont-style": "समà¥\8dपादन à¤\95à¥\8dषà¥\87तà¥\8dर à¤\95à¥\80 à¤«à¥\89नà¥\8dà¤\9f शैली:",
        "editfont-default": "प्राथमिक ब्राउज़र",
        "editfont-monospace": "एकल स्थल मुद्रलिपि",
        "editfont-sansserif": "बिना नोकों वाली मुद्रलिपि",
        "title-invalid-magic-tilde": "निवेदित पृष्ठ का शीर्षक अवैध जादूई टिल्ड सिलसिला रखता है।",
        "title-invalid-too-long": "माँग किए गए पृष्ठ का शीर्षक बहुत लम्बा है। इसे यू०टी०एफ़० कोडिंग मे $1 {{PLURAL:$1|बाइट|बाइट्स}} से बढ़कर नहीं होना चाहिए और इसे यू०टी०एफ़०-८ एनकोडिंग में होना चाहिए।",
        "title-invalid-leading-colon": "निवेदित पृष्ठ का शीर्षक प्रारंभ में अवैध कोलन रखता है।",
-       "perfcached": "नीचे दिया हुआ डेटा कैशे मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजे}} उपलब्ध हैं।",
-       "perfcachedts": "नीचे दिया हुआ डेटा कैशे मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैशे मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजे}} उपलब्ध हैं।",
+       "perfcached": "नीचे दिया हुआ डेटा कैश मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैश मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजे}} उपलब्ध हैं।",
+       "perfcachedts": "नीचे दिया हुआ डेटा कैश मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैश मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजे}} उपलब्ध हैं।",
        "querypage-no-updates": "इस पृष्ठ का नवीनीकरण करना मना है। अभी यहाँ के डाटा को ताज़ा नहीं कर सकते।",
        "viewsource": "स्रोत देखें",
        "viewsource-title": "$1 का स्रोत देखें",
        "createacct-yourpasswordagain-ph": "कूटशब्द पुनः लिखें",
        "userlogin-remembermypassword": "मुझे लॉग्ड इन रखें",
        "userlogin-signwithsecure": "सुरक्षित कनेक्शन का प्रयोग करें",
-       "cannotlogin-title": "à¤\85भà¥\80 à¤ªà¥\8dरवà¥\87श à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤°à¤¹ा",
-       "cannotlogin-text": "पà¥\8dरवà¥\87श संभव नहीं है",
-       "cannotloginnow-title": "à¤\85भà¥\80 à¤ªà¥\8dरवà¥\87श à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤°à¤¹à¤¾ à¤¹à¥\88",
-       "cannotloginnow-text": "$1 à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रतà¥\87 à¤¸à¤®à¤¯ à¤ªà¥\8dरवà¥\87श नहीं हो सकता है।",
+       "cannotlogin-title": "लà¥\89à¤\97 à¤\87न à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\9cा à¤¸à¤\95ता",
+       "cannotlogin-text": "लà¥\89à¤\97 à¤\87न संभव नहीं है",
+       "cannotloginnow-title": "à¤\85भà¥\80 à¤²à¥\89à¤\97 à¤\87न à¤¨à¤¹à¥\80à¤\82 à¤\95िया à¤\9cा à¤¸à¤\95ता",
+       "cannotloginnow-text": "$1 à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रतà¥\87 à¤¸à¤®à¤¯ à¤²à¥\89à¤\97 à¤\87न नहीं हो सकता है।",
        "cannotcreateaccount-title": "खाता नहीं खोल सकते",
        "cannotcreateaccount-text": "सीधे खाता बनाना इस विकि में सक्रिय नहीं है।",
        "yourdomainname": "आपका डोमेन:",
        "password-change-forbidden": "आप इस विकि पर कूटशब्द नहीं बदल सकते हैं।",
        "externaldberror": "या तो प्रमाणिकरण डाटाबेस में त्रुटि हुई है या फिर आपको अपना बाह्य खाता अपडेट करने की अनुमति नहीं है।",
-       "login": "पà¥\8dरवà¥\87श",
+       "login": "लà¥\89à¤\97 à¤\87न",
        "login-security": "अपनी पहचान सत्यापित करें",
        "nav-login-createaccount": "सत्रारंभ / खाता खोलें",
        "logout": "प्रस्थान करें",
        "userlogin-resetpassword-link": "अपना पासवर्ड भूल गए?",
        "userlogin-helplink2": "लॉग इन करने में सहायता",
        "userlogin-loggedin": "आप {{GENDER:$1|$1}} के रूप में पहले से लॉग्ड इन हैं।\nकिसी अन्य सदस्य के रूप में लॉग इन करने के लिए निम्नलिखित फ़ॉर्म का प्रयोग करें।",
-       "userlogin-reauth": "à¤\86प {{GENDER:$1|$1}} à¤¹à¥\8b, à¤\87सà¤\95à¥\87 à¤²à¤¿à¤\8f à¤\86पà¤\95à¥\8b à¤\8fà¤\95 à¤\94र à¤¬à¤¾à¤° à¤\96ातà¥\87 à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श करना होगा।",
+       "userlogin-reauth": "à¤\86प {{GENDER:$1|$1}} à¤¹à¥\8b, à¤\87सà¤\95à¥\87 à¤²à¤¿à¤\8f à¤\86पà¤\95à¥\8b à¤\8fà¤\95 à¤\94र à¤¬à¤¾à¤° à¤\96ातà¥\87 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97 à¤\87न करना होगा।",
        "userlogin-createanother": "एक अन्य खाता खोलें",
        "createacct-emailrequired": "ई-मेल पता",
        "createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
        "createacct-email-ph": "अपना ई-मेल पता लिखें",
        "createacct-another-email-ph": "ईमेल पता प्रदान करें",
-       "createaccountmail": "à¤\8fà¤\95 à¤\85सà¥\8dथायà¥\80 à¤¯à¤¾à¤¦à¥\83à¤\9aà¥\8dà¤\9bिà¤\95 (रà¥\88à¤\82डम) à¤\95à¥\82à¤\9fशबà¥\8dद चुनें और उसे निर्दिष्ट ई-मेल पते पर भेजें",
+       "createaccountmail": "à¤\8fà¤\95 à¤\85सà¥\8dथायà¥\80 à¤°à¥\88à¤\82डम à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड चुनें और उसे निर्दिष्ट ई-मेल पते पर भेजें",
        "createaccountmail-help": "इसका उपयोग बिना पासवर्ड जाने किसी और के लिए खाता खोलने के लिए उपयोग किया जाता है।",
        "createacct-realname": "असली नाम (वैकल्पिक)",
        "createacct-reason": "कारण",
        "nocookiesfornew": "स्रोत की पुष्टि ना हो पाने के कारण यह खाता निर्मित नहीं किया गया। \nसुनिश्चित करें कि आपने कुकीज़ सक्षम की हैं, पृष्ठ को पुनः लोड करें और पुनः प्रयास करें।",
        "createacct-loginerror": "खाता सफलतापूर्वक निर्मित किया गया लेकिन आप स्वतः लॉग-इन नहीं कर सके। कृपया [[Special:UserLogin|हाथ से]] लॉग-इन करें।",
        "noname": "आपने वैध सदस्यनाम नहीं दिया है।",
-       "loginsuccesstitle": "पà¥\8dरवà¥\87श à¤¹à¥\81à¤\86",
+       "loginsuccesstitle": "लà¥\89à¤\97à¥\8dड-à¤\87न",
        "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन हो {{GENDER:$1|चुके|चुकी|चुके}} हैं।'''",
        "nosuchuser": "यहाँ \"$1\" नाम का कोई सदस्य नहीं है।\nसदस्यनाम में लघु और दीर्घ अक्षरों से फ़र्क पड़ता है।\nअपनी वर्तनी जाँचें, या [[Special:CreateAccount|नया खाता खोलें]]।",
        "nosuchusershort": "\"$1\" नाम का कोई सदस्य नहीं है।\nकृपया अपनी दी हुई वर्तनी जाँचें।",
        "createaccount-title": "{{SITENAME}} के लिये खाता बनाएँ",
        "createaccount-text": "आपके ई-मेल पते के लिये किसी ने {{SITENAME}} ($4) पर \"$2\" सदस्य नाम से \"$3\" कूटशब्द (पासवर्ड) सहित खाता खोला है।\nआपको लॉग इन कर के अपना कूटशब्द (पासवर्ड) तुरंत बदल लेना चाहिये।\n\nयदि यह खाता गलती से खोला गया है, तो आप इस मेसेज को नज़रंदाज़ कर सकते हैं।",
        "login-throttled": "आपने हाल ही में कई बार लॉग इन करने के प्रयास किये हैं।\nपुनः प्रयास करने से पहले कृपया $1 प्रतीक्षा करें।",
-       "login-abort-generic": "à¤\86पà¤\95ा à¤ªà¥\8dरवà¥\87श असफल हुआ - रोका गया",
+       "login-abort-generic": "à¤\86पà¤\95ा à¤²à¥\89à¤\97 à¤\87न असफल हुआ - रोका गया",
        "login-migrated-generic": "आपका खाता माइग्रेट हो गया है और आपका सदस्यनाम इस विकी पर अब मौजूद नहीं है।",
        "loginlanguagelabel": "भाषा: $1",
-       "suspicious-userlogout": "à¤\85पका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।",
+       "suspicious-userlogout": "à¤\86पका लॉग आउट करने का अनुरोध अस्वीकृत कर दिया गया है क्योंकि ऐसा प्रतीत होता है कि यह किसी खराब ब्राउज़र या कैश करने वाली प्रॉक्सी द्वारा भेजा गया था।",
        "createacct-another-realname-tip": "असली नाम देना आवश्यक नहीं है।\nयदि आप प्रदान करते हैं तो इसका प्रयोग सदस्य के योगदानों के लिये उनको श्रेय (attribution) देने के लिये किया जायेगा।",
        "pt-login": "लॉग इन",
        "pt-login-button": "लॉग इन",
-       "pt-login-continue-button": "पà¥\8dरवà¥\87श जारी रखें",
+       "pt-login-continue-button": "लà¥\89à¤\97 à¤\87न जारी रखें",
        "pt-createaccount": "खाता बनाएँ",
        "pt-userlogout": "लॉगआउट",
        "php-mail-error-unknown": "PHP के mail() फ़ंक्शन में अज्ञात त्रुटि हुई।",
        "unusedtemplates": "अप्रयुक्त साँचे",
        "unusedtemplatestext": "इस पृष्ठ पर {{ns:template}} नामस्थान वाले वे सभी पृष्ठ इंगित है जो किसी अन्य पृष्ठ में शामिल नहीं हैं।\nइन्हें हटाने के पहले इन साँचों की और कड़ियाँ जाँच लें।",
        "unusedtemplateswlh": "अन्य कड़ियाँ",
-       "randompage": "यादà¥\83à¤\9aà¥\8dà¤\9bिà¤\95 पृष्ठ",
+       "randompage": "à¤\95à¥\8bà¤\88 à¤­à¥\80 पृष्ठ",
        "randompage-nopages": "कोई भी पृष्ठ {{PLURAL:$2|इस नामस्थान|इन नामस्थानों}} में नहीं हैं: $1।",
-       "randomincategory": "शà¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¯à¤¾à¤¦à¥\83à¤\9aà¥\8dà¤\9bिà¤\95 (रà¥\88à¤\82डम) पृष्ठ",
+       "randomincategory": "शà¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤°à¥\88à¤\82डम पृष्ठ",
        "randomincategory-invalidcategory": "\"$1\" एक मान्य श्रेणी नाम नहीं है।",
        "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कोई पृष्ठ नहीं हैं।",
        "randomincategory-category": "श्रेणी:",
-       "randomincategory-legend": "शà¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤¯à¤¾à¤¦à¥\83à¤\9aà¥\8dà¤\9bिà¤\95 पृष्ठ",
+       "randomincategory-legend": "शà¥\8dरà¥\87णà¥\80 à¤®à¥\87à¤\82 à¤°à¥\88à¤\82डम पृष्ठ",
        "randomincategory-submit": "जायें",
        "randomredirect": "किसी एक पुनर्निर्देशन पर जाएँ",
        "randomredirect-nopages": "नामस्थान \"$1\" में कोई पुनर्निर्देशन नहीं हैं।",
        "proxyblockreason": "आपका IP पता बाधित किया जा चुका है क्योंकि यह एक मुक्त प्रतिनिधि है।\nकृपया आप अपने इंटरनेट सेवा प्रदान करने वाले से या तकनीकी सहायक से सम्पर्क करें अथवा उन्हें इस भयावह सुरक्षा समस्या के बारे में सूचित करें।",
        "sorbsreason": "{{SITENAME}} द्वारा इस्तेमालमें लाये जाने वाले DNSBL में आपके आईपी एड्रेसको ओपन प्रॉक्सीमें दर्शाया गया हैं।",
        "sorbs_create_account_reason": "{{SITENAME}} के DNSBL ने आपका आईपी एड्रेस ओपन प्रोक्सी करके सूचित किया हैं। आप खाता खोल नहीं सकतें।",
-       "softblockrangesreason": "à¤\86पà¤\95à¥\87 à¤\86à¤\88पà¥\80 ($1) à¤\95à¥\87 à¤¦à¥\8dवारा à¤¬à¤¿à¤¨à¤¾ à¤\96ाता à¤\95à¥\87 à¤¸à¤®à¥\8dपादन à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88। à¤\95à¥\83पया à¤\96ातà¥\87 à¤®à¥\87à¤\82 à¤ªà¥\8dरवà¥\87श (लà¥\89à¤\97िन) करें।",
+       "softblockrangesreason": "à¤\86पà¤\95à¥\87 à¤\86à¤\88पà¥\80 ($1) à¤\95à¥\87 à¤¦à¥\8dवारा à¤¬à¤¿à¤¨à¤¾ à¤\96ाता à¤\95à¥\87 à¤¸à¤®à¥\8dपादन à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88। à¤\95à¥\83पया à¤\96ातà¥\87 à¤®à¥\87à¤\82 à¤²à¥\89à¤\97 à¤\87न करें।",
        "xffblockreason": "एक आई०पी० पता जो X-Forwarded-For हेडर में मौजूद है, या तो आपका है या उस प्रौक्सी सरवर का है जिसका आप प्रयोग कर रहे हैं और उस पर प्रतिबंध लगा दिया गया है। वास्तविक कारण था: $1",
        "cant-see-hidden-user": "जिस सदस्य को आप अवरोधित करने की कोशिश कर रहे हैं उसे पहले ही अवरोधित कर के छुपाया जा चुका है।\nचूँकि आपके पास hideuser अधिकार नहीं है, आप इस सदस्य का अवरोधन ना देख सकते हैं और ना ही सम्पादित कर सकते हैं।",
        "ipbblocked": "आप अन्य प्रयोक्ताओं को अवरोधित या अनवरोधित नहीं कर सकते, क्योंकि आप स्वयं अवरोधित हैं",
        "unit-pixel": "px",
        "confirm-purge-title": "पृष्ठ ताजा करें",
        "confirm_purge_button": "ओके",
-       "confirm-purge-top": "à¤\95à¥\8dया à¤\86प à¤¯à¤¹ à¤ªà¥\83षà¥\8dठ à¤\95ा à¤\95à¥\88श à¤\96़ालà¥\80 à¤\95रनà¥\87 à¤\9aाहिà¤\8f?",
+       "confirm-purge-top": "à¤\87स à¤ªà¥\87à¤\9c à¤\95ा à¤\95à¥\88श à¤\96ालà¥\80 à¤\95रà¥\87à¤\82?",
        "confirm-purge-bottom": "किसी पृष्ठ को मिटाने से संचिका साफ़ हो जाती है और इस वजह से ताज़ातरीन संस्करण प्रकट हो जाता है।",
        "confirm-watch-button": "ठीक है",
        "confirm-watch-top": "इस पृष्ठ को अपने ध्यानसूची में जोड़ें?",
        "authform-wrongtoken": "गलत टोकन",
        "specialpage-securitylevel-not-allowed-title": "अनुमति नहीं है",
        "specialpage-securitylevel-not-allowed": "क्षमा करें, आप इस पृष्ठ का उपयोग नहीं कर सकते हैं, क्योंकि आपकी जानकारी सत्यापित नहीं है।",
-       "authpage-cannot-login": "पà¥\8dरवà¥\87श करने में अक्षम।",
-       "authpage-cannot-login-continue": "पà¥\8dरवà¥\87श à¤\95रनà¥\87 à¤®à¥\87à¤\82 à¤\85à¤\95à¥\8dषम। हो सकता है कि आपका सत्र समय समाप्त हो गया।",
+       "authpage-cannot-login": "लà¥\89à¤\97 à¤\87न करने में अक्षम।",
+       "authpage-cannot-login-continue": "लà¥\89à¤\97 à¤\87न à¤\95रनà¥\87 à¤®à¥\87à¤\82 à¤\85à¤\95à¥\8dषम, हो सकता है कि आपका सत्र समय समाप्त हो गया।",
        "authpage-cannot-create": "खाता निर्माण में अक्षम है।",
        "authpage-cannot-create-continue": "खाता निर्माण में अक्षम है। हो सकता है कि आपका सत्र समाप्त हो गया हो।",
        "authpage-cannot-link": "खाता जोड़ना शुरू नहीं कर सकते।",
index 00476e4..06cfce3 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 -->",
        "nchanges": "$1 változtatás",
        "enhancedrc-since-last-visit": "$1 az utolsó látogatás óta",
        "enhancedrc-history": "történet",
-       "recentchanges": "Friss változtatások",
+       "recentchanges": "Legutóbbi változtatások",
        "recentchanges-legend": "A friss változtatások beállításai",
        "recentchanges-summary": "Ezen a lapon a wikiben történt legutóbbi fejleményeket lehet nyomon követni.",
        "recentchanges-noresult": "A megadott időszakban nincs a feltételeknek megfelelő szerkesztés.",
        "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 1009800..c3643c1 100644 (file)
        "blankarticle": "<strong>Advertimento:</strong> Le pagina que tu vole crear es vacue.\nSi tu clicca de novo sur \"$1\", le pagina essera create sin contento.",
        "anoneditwarning": "<strong>Attention:</strong> Tu non ha aperite un session. Le adresse IP tue essera publicamente visibile si tu face modificationes. Si tu <strong>[$1 aperi un session]</strong> o <strong>[$2 crea un conto]</strong>, le modificationes essera attribuite al nomine de usator tue, inter altere avantages.",
        "anonpreviewwarning": "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''",
-       "missingsummary": "'''Rememoration:''' Tu non ha specificate un summario del modification.\nSi tu clicca super \"$1\" de novo, le modification essera publicate sin summario.",
+       "missingsummary": "<strong>Rememoration:</strong> Tu non ha scribite un summario de modification.\nSi tu clicca sur \"$1\" de novo, le modification essera publicate sin summario.",
        "selfredirect": "<strong>Attention:</strong> Tu redirige iste pagina verso se mesme.\nTu pote haber specificate le mal destination pro le redirection, o tu modifica forsan le mal pagina.\nSi tu clicca sur \"$1\" de novo, le redirection essera create in despecto de isto.",
        "missingcommenttext": "Per favor entra un commento infra.",
        "missingcommentheader": "<strong>Rememoration:</strong> Tu non ha fornite un subjecto pro iste commento.\nSi tu clicca super \"$1\" de novo, le modification essera publicate sin subjecto.",
        "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.",
        "readonlywarning": "<strong>Attention: Le base de datos ha essite blocate pro mantenentia. Tu non pote salveguardar tu modificationes in iste momento.</strong>\nNos recommenda copiar e collar le texto in un file e salveguardar lo pro plus tarde.\n\nLe administrator de systema qui ha blocate le base de datos ha fornite iste explication: $1",
        "protectedpagewarning": "'''Attention:  Iste pagina ha essite protegite de sorta que solmente usatores con privilegios de administrator pote modificar lo.''' Le ultime entrata del registro es fornite hic infra pro referentia:",
        "semiprotectedpagewarning": "'''Nota:''' Iste pagina ha essite protegite de maniera que solmente usatores registrate pote modificar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
-       "cascadeprotectedwarning": "<strong>Attention:</strong> Iste pagina ha essite protegite de maniera que solmente usatores con privilegios de administrator pote modificar lo, perque illo es transcludite in le sequente {{PLURAL:$1|pagina|paginas}} protegite in cascada:",
+       "cascadeprotectedwarning": "<strong>Attention:</strong> Iste pagina ha essite protegite de maniera que solmente usatores con [[Special:ListGroupRights|certe privilegios]] pote modificar lo, perque illo es transcludite in le sequente {{PLURAL:$1|pagina|paginas}} protegite in cascada:",
        "titleprotectedwarning": "'''Attention:  Iste pagina ha essite protegite de maniera que [[Special:ListGroupRights|permissiones specific]] es requirite pro crear lo.''' Le ultime entrata del registro es fornite hic infra pro referentia:",
        "templatesused": "{{PLURAL:$1|Patrono|Patronos}} usate in iste pagina:",
        "templatesusedpreview": "{{PLURAL:$1|Patrono|Patronos}} usate in iste previsualisation:",
        "search-file-match": "(corresponde al contento del file)",
        "search-suggest": "Esque tu vole dicer: $1",
        "search-rewritten": "Es monstrate le resultatos pro $1. Cerca $2 in su loco.",
-       "search-interwiki-caption": "Projectos fratres",
+       "search-interwiki-caption": "Resultatos de projectos affin",
        "search-interwiki-default": "Resultatos de $1:",
        "search-interwiki-more": "(plus)",
        "search-interwiki-more-results": "plus resultatos",
        "userrights-expiry-options": "1 die:1 day,1 septimana:1 week,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anno:1 year",
        "userrights-invalid-expiry": "Le hora de expiration pro le gruppo \"$1\" es invalide.",
        "userrights-expiry-in-past": "Le hora de expiration pro le gruppo \"$1\" es in le passato.",
-       "userrights-cannot-shorten-expiry": "Tu non pote accurtar le tempore de expiration del gruppo \"$1\". Solmente usatores con le permission de adder e remover iste gruppo pote accurtar tempores de expiration.",
+       "userrights-cannot-shorten-expiry": "Tu non pote accurtar le tempore de expiration del appertinentia al gruppo \"$1\". Solmente usatores con le permission de adder e remover iste gruppo pote accurtar tempores de expiration.",
        "userrights-conflict": "Conflicto inter cambiamentos de derectos de usator! Per favor revide e confirma tu cambiamentos.",
        "group": "Gruppo:",
        "group-user": "Usatores",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Monstrar",
        "rcfilters-activefilters": "Filtros active",
+       "rcfilters-quickfilters": "Ligamines rapide",
        "rcfilters-restore-default-filters": "Restaurar filtros predefinite",
        "rcfilters-clear-all-filters": "Rader tote le filtros",
        "rcfilters-search-placeholder": "Filtrar le modificationes recente (naviga o comencia a scriber)",
index 0b16105..3d89afe 100644 (file)
        "post-expand-template-argument-warning": "Peringatan: Halaman ini mengandung setidaknya satu argumen templat dengan ukuran ekspansi yang terlalu besar. Argumen-argumen tersebut telah diabaikan.",
        "post-expand-template-argument-category": "Halaman dengan argumen templat yang diabaikan",
        "parser-template-loop-warning": "Hubungan berulang templat terdeteksi: [[$1]]",
+       "template-loop-category": "Halaman dengan templat berulang",
        "parser-template-recursion-depth-warning": "Limit kedalaman hubungan berulang templat terlampaui ($1)",
        "language-converter-depth-warning": "Batas kedalaman pengonversi bahasa terlampaui ($1)",
        "node-count-exceeded-category": "Halaman dimana hitungan-node terlampaui",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (lihat pula [[Special:NewPages|daftar halaman baru]])",
        "recentchanges-submit": "Tampilkan",
        "rcfilters-activefilters": "Filter aktif",
+       "rcfilters-savedqueries-rename": "Ubah nama",
+       "rcfilters-savedqueries-setdefault": "Tetapkan sebagai baku",
+       "rcfilters-savedqueries-remove": "Hapus",
+       "rcfilters-savedqueries-cancel-label": "Batalkan",
        "rcfilters-restore-default-filters": "Kembalikan filter bawaan",
        "rcfilters-clear-all-filters": "Hapus semua penyaringan",
        "rcfilters-search-placeholder": "Filter perubahan terbaru (jelajahi atau masukan input)",
        "rcfilters-invalid-filter": "Penyqringan tidak sah",
        "rcfilters-empty-filter": "Tidak ada filter aktif. Semua kontribusi ditampilkan.",
        "rcfilters-filterlist-title": "Penyaringan",
+       "rcfilters-filterlist-whatsthis": "Apa ini?",
        "rcfilters-filterlist-feedbacklink": "Berikan umpan balik untuk filter uji coba baru",
        "rcfilters-highlightmenu-title": "Pilih warna",
        "rcfilters-filterlist-noresults": "Tidak ada penyaring ditemukan",
        "rcfilters-filter-bots-description": "Suntingan yang dibuat dengan perkakas terotomatisasi.",
        "rcfilters-filter-humans-label": "Manusia (bukan bot)",
        "rcfilters-filter-humans-description": "Suntingan yang dibuat oleh penyunting manusia.",
+       "rcfilters-filter-patrolled-label": "Telah dipatroli",
+       "rcfilters-filter-patrolled-description": "Suntingan ditandai sebagai terpatroli",
+       "rcfilters-filter-unpatrolled-label": "Belum terpatroli",
        "rcfilters-filtergroup-significance": "Kepentingan",
        "rcfilters-filter-minor-label": "Suntingan kecil",
        "rcfilters-filter-minor-description": "Suntingan yang ditandai penyunting sebagai suntingan kecil",
        "rcfilters-filter-categorization-description": "Rekam jejak halaman yang telah ditambahkan atau dihapus dari kategori.",
        "rcfilters-filter-logactions-label": "Tindakan tercatat",
        "rcfilters-filter-logactions-description": "Tindakan administratif, pembuatan akun, penghapusan halaman, pengunggahan....",
+       "rcfilters-filtergroup-lastRevision": "Revisi terkini",
+       "rcfilters-filter-lastrevision-label": "Revisi terkini",
+       "rcfilters-filter-lastrevision-description": "Perubahan terkini halaman ini",
+       "rcfilters-filter-previousrevision-label": "Revisi lebih awal",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
+       "rclistfromreset": "Atur ulang pilihan tanggal",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "rcshowhideminor": "$1 suntingan kecil",
        "rcshowhideminor-show": "Tampilkan",
        "unblocked-id": "Blokir $1 telah dicabut.",
        "unblocked-ip": "Pemblokiran [[Special:Contributions/$1|$1]] telah dicabut.",
        "blocklist": "Daftar pengguna yang diblokir",
+       "autoblocklist": "Pemblokiran otomatis",
+       "autoblocklist-submit": "Pencarian",
+       "autoblocklist-legend": "Daftar pemblokiran otomatis",
        "ipblocklist": "Daftar pemblokiran pengguna",
        "ipblocklist-legend": "Cari pengguna yang diblokir",
        "blocklist-userblocks": "Sembunyikan pemblokiran akun",
        "mw-widgets-titleinput-description-redirect": "mengalihkan ke $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Tambah sebuah kategori...",
        "mw-widgets-usersmultiselect-placeholder": "Tambahkan lebih banyak...",
+       "date-range-from": "Dari tanggal",
+       "date-range-to": "Sampai tanggal",
        "sessionmanager-tie": "Tidak dapat menggabungkan banyak jenis otentikasi permintaan: $1.",
        "sessionprovider-generic": "sesi $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sesi berdasarkan kuki",
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 810bff2..f9d606e 100644 (file)
        "booksources-search": "検索",
        "booksources-text": "お探しの書籍の新品/中古品を販売している外部サイトへのリンクを以下に列挙します。この書籍についてさらに詳しい情報があるかもしれません:",
        "booksources-invalid-isbn": "指定した ISBN は有効ではないようです。情報源から写し間違えていないか確認してください。",
+       "magiclink-tracking-isbn": "ISBNリンクを使用しているページ",
        "specialloguserlabel": "実行者:",
        "speciallogtitlelabel": "対象 (ページ名または利用者の場合、{{ns:user}}:利用者名):",
        "log": "記録",
        "tags-display-header": "変更一覧に表示されるもの",
        "tags-description-header": "詳細な意味の説明",
        "tags-source-header": "由来",
-       "tags-active-header": "アクティブ?",
+       "tags-active-header": "使用中?",
        "tags-hitcount-header": "タグが付与された変更",
        "tags-actions-header": "対処操作",
        "tags-active-yes": "はい",
        "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 a81e93d..70186e3 100644 (file)
        "faq": "Pitakon Kerep",
        "faqpage": "Project:Pitakon Kerep",
        "actions": "Lelabuhan",
-       "namespaces": "Jagat aran",
+       "namespaces": "Mandala aran",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "errorpagetitle": "Cacad",
        "viewsource": "Deleng sumber",
        "viewsource-title": "Delok sumberé $1",
        "actionthrottled": "Tindakan diwatesi",
-       "actionthrottledtext": "Minangka sawijining pepesthèn anti-spam, panjenengan diwatesi nglakoni tindhakan iki sing cacahé kakèhan ing wektu cendhak.\nMangga dicoba manèh ing sawetara menit.",
+       "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é.",
        "viewsourcetext": "Panjenengan bisa ndeleng lan nurun sumberé kaca iki.",
        "viewyourtext": "Panjenengan bisa ndeleng lan nurun sumberé <strong>besutané panjenengan</strong> nyang kaca iki.",
        "mypreferencesprotected": "Sampèyan ora duwé idin kanggo ngowah preferensi sampèyan.",
        "ns-specialprotected": "Kaca ing bilik nama astaméwa utawa kusus, ora bisa disunting.",
        "titleprotected": "Irah-irahan iki direksa ora olèh digawé déning [[User:$1|$1]].\nAlesané yaiku <em>$2</em>.",
-       "filereadonlyerror": "Ora bisa ngowah berkas \"$1\" amarga panyimpenan berkas \"$2\" ana ing mode mung-bisa-diwaca.\n\nPangurus sing ngopèni kuwi ngawedharaké: \"$3\".",
+       "filereadonlyerror": "Ora bisa ndandani barkas \"$1\" amarga panyimpenan barkas \"$2\" mung bisa diwaca.\n\nPangurus sistem sing ngunci iku njlèntrèhaké: \"$3\".",
        "invalidtitle-knownnamespace": "Irah-irahan ora sah mawa bilik jeneng \"$2\" lan tèks \"$3\"",
        "invalidtitle-unknownnamespace": "Judhul ora sah mawa angka $1 lan tèks \"$2\" bilik jeneng sing ora dingertèni",
        "exception-nologin": "Durung mlebu log",
-       "exception-nologin-text": "Tulung [[Special:Userlogin|mlebu log]] dhisik kanggo ngakses kaca utawa kelakon iki.",
+       "exception-nologin-text": "Mangga mlebua log supaya bisa ngaksès kaca utawa tumindak iki.",
        "exception-nologin-text-manual": "Tulung $1 kanggo ngakses kaca utawa kelakon iki.",
        "virus-badscanner": "Kasalahan konfigurasi: pamindai virus ora dikenal: ''$1''",
        "virus-scanfailed": "''Pemindaian'' utawa ''scan'' gagal (kode $1)",
        "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.",
        "loginsuccesstitle": "Kasil mlebu",
        "loginsuccess": "<strong>Panjenengan saiki wis mlebu log ing {{SITENAME}} minangka \"$1\".</strong>",
-       "nosuchuser": "Ora ana panganggo mawa asma \"$1\".\nJeneng panganggo iku mbédakaké kapitalisasi.\nCoba dipriksa manèh pasang aksarané, utawa [[Special:CreateAccount|gawé akun anyar]].",
+       "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.",
        "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
        "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-no-info": "Panjenengan kudu mlebu log kanggo ngaksès kaca iki sacara langsung.",
        "resetpass-submit-loggedin": "Ganti tembung wadi",
        "resetpass-submit-cancel": "Batal",
-       "resetpass-wrong-oldpass": "Tembung sandi ora sah.\nPanjengen manawa wis kasil ganti tembung sandi utawa nyuwun tembung sandi sauntara sing anyar.",
+       "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.",
        "passwordreset": "Balèni setèl tembung sandhi",
        "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''.",
        "mergehistory-empty": "Ora ana revisi sing bisa digabung.",
        "mergehistory-done": "$3 {{PLURAL:$1|révisi|révisi}} saka $1 bisa suksès digabung menyang [[:$2]].",
        "mergehistory-fail": "Ora bisa nggabung sajarah, coba dipriksa manèh kacané lan paramèter wektuné.",
+       "mergehistory-fail-invalid-source": "Kaca sumber ora trep.",
+       "mergehistory-fail-invalid-dest": "Kaca paran ora trep.",
+       "mergehistory-fail-no-change": "Panggabung sujarah ora nggabungaké rèvisi. Mangga priksanen kaca lan paramèter wektuné.",
        "mergehistory-fail-self-merge": "Kaca asal lan kaca paran padha.",
        "mergehistory-fail-timestamps-overlap": "Rèvisi asal tumpuk-undhung utawa njedhul sawisé révisi paran.",
        "mergehistory-fail-toobig": "Ora bisa nggabungaké sujarah amarga {{PLURAL:$1|révisi}} sing arep dilih munjuli $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:",
        "prefs-diffs": "Prabédan",
        "prefs-help-prefershttps": "Pamiji iki bakal lumaku mentas sampeyan mbalèni mlebu.",
        "prefs-tabs-navigation-hint": "Saran: Sampeyan bisa nganggo tombol jemparing kiwa lan tengen saperlu navigasi tab-tab ing pratélan tab.",
-       "userrights": "Manajemen hak panganggo",
-       "userrights-lookup-user": "Ngatur kelompok panganggo",
+       "userrights": "Hak panganggo",
+       "userrights-lookup-user": "Pilih panganggo",
        "userrights-user-editname": "Isi jeneng panganggo:",
-       "editusergroup": "Besut golongan {{GENDER:$1|panganggo}}",
-       "editinguser": "Ngganti hak panganggo '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Besut golongan panganggo",
-       "saveusergroups": "Simpen kelompok panganggo",
+       "editusergroup": "Mot golongan panganggo",
+       "editinguser": "Ngowahi hak {{GENDER:$1|panganggo}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Ndeleng hak {{GENDER:$1|panganggo}} <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Besut golongan {{GENDER:$1|panganggo}}",
+       "userrights-viewusergroup": "Deleng golongan {{GENDER:$1|panganggo}}",
+       "saveusergroups": "Simpen golongan {{GENDER:$1|panganggo}}",
        "userrights-groupsmember": "Anggota saka:",
        "userrights-groupsmember-auto": "Anggota implisit saka:",
        "userrights-groups-help": "Panjenengan bisa ngowahi grup-grup sing ana panganggoné iki.\n* Kothak sing dicenthang tegesé panganggo iki ana sajroné grup iku.\n* Kothak sing ora dicenthang tegesé panganggo iku ora ana ing grup iku.\n* Tandha bintang * tegesé panjenengan ora bisa ngilangi grup iku yèn wis tau nambah, utawa sawalikané.",
        "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-move-subpages": "Pindhahaké kaca lan kabèh anak-kacané",
        "right-move-rootuserpages": "Ngalih kaca panganggo oyod",
+       "right-move-categorypages": "Lih kaca kategori",
        "right-movefile": "Mindhah berkas",
        "right-suppressredirect": "Aja nggawé pangalihan saka kaca sing lawas yèn mindhah sawijining kaca",
        "right-upload": "Unggah barkas",
        "right-deletedtext": "Delok tèks kabusak lan panggantèn antara rèpisi kabusak",
        "right-browsearchive": "Golèk kaca-kaca sing wis dibusak",
        "right-undelete": "Wurung busak kaca",
-       "right-suppressrevision": "Ndeleng lan mbalèkaké révisi-révisi sing didelikaké saka para opsis",
+       "right-suppressrevision": "Deleng, dhelikaké, lan wurung dhelikaké owahan tinamtu kaca-kacané panganggo sembarang",
+       "right-viewsuppressed": "Deleng owahan sing didhelikaké saka panganggo sembarang",
        "right-suppressionlog": "Ndeleng log-log pribadi",
        "right-block": "Blokir panganggo-panganggo liya saka panyuntingan",
        "right-blockemail": "Blokir sawijining panganggo saka ngirim e-mail",
        "right-protect": "Ganti undhaking pangreksan lan owah kaca-kaca sing direksa",
        "right-editprotected": "Owah kaca-kaca sing direksa (tanpa pangreksan runtun)",
        "right-editsemiprotected": "Owah kaca-kaca sing direksa dadi \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Besut modhèl kontèn kaca",
        "right-editinterface": "Besut antarmuka panganggo",
        "right-editusercss": "Besut barkas-barkas CSS panganggo liya",
        "right-edituserjs": "Besut barkas-barkas JavaScript panganggo liya",
        "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",
        "rcfilters-filterlist-feedbacklink": "Wènèhi saran ngenani saringan (béta) sing anyar",
        "rcfilters-highlightbutton-title": "Sentrongi kasil",
        "rcfilters-filterlist-noresults": "Saringan ora katemu",
+       "rcfilters-filtergroup-registration": "Pandhaftaran panganggo",
        "rcfilters-filter-registered-label": "Kadhaftar",
        "rcfilters-filter-registered-description": "Pambesut njeron log.",
        "rcfilters-filter-unregistered-label": "Ora kadhaftar",
-       "rcfilters-filter-unregistered-description": "Juru besut sing ora mlebu log",
+       "rcfilters-filter-unregistered-description": "Juru besut sing ora mlebu log.",
        "rcfilters-filtergroup-authorship": "Pangripta besutan",
        "rcfilters-filter-editsbyself-label": "Owah-owahané panjenengan",
-       "rcfilters-filter-editsbyself-description": "Sumbangané panjenengan dhéwé",
+       "rcfilters-filter-editsbyself-description": "Sumbangané panjenengan dhéwé.",
        "rcfilters-filter-editsbyother-label": "Owah-owahané liyan",
        "rcfilters-filter-editsbyother-description": "Kabèh owahan kajaba duwèké panjenengan.",
        "rcfilters-filtergroup-userExpLevel": "Tataran pangalaman (mung kanggo panganggo kadhaftar)",
        "rcfilters-filter-logactions-label": "Tumindak njeron log",
        "rcfilters-filter-logactions-description": "Tumindak administratif, gawéan akun, busakan kaca, unggahan....",
        "rcfilters-filtergroup-lastRevision": "Owahan pungkasan",
+       "rcfilters-filter-lastrevision-label": "Owahan pungkasan",
        "rcfilters-filter-lastrevision-description": "Owahan paling anyar tumrap kaca.",
        "rcfilters-filter-previousrevision-label": "Owahan-owahan dhisik",
        "rcfilters-filter-previousrevision-description": "Kabèh owahan sing dudu sing anyar dhéwé tumrap kaca.",
        "recentchangeslinked-summary": "Iki pratélan owah-owahan anyar kaca-kaca sing nggayut kaca tinamtu (utawa péranganing kategori tinamtu).\nKaca-kaca sing ana ing [[Special:Watchlist|pawawanganing sampéyan]] ya iku sing <strong>kandhel</strong>.",
        "recentchangeslinked-page": "Jeneng kaca:",
        "recentchangeslinked-to": "Nuduhaké owah-owahan menyang kaca sing disambung menyang kaca-kaca iki",
+       "recentchanges-page-added-to-category": "[[:$1]] ditambahaké nyang kategori",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] ditambahaké nyang kategori, [[Special:WhatLinksHere/$1|kaca iki kalebu ing njeroné kaca liyané]]",
+       "recentchanges-page-removed-from-category": "[[:$1]] dibusak saka kategori",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] dibusak saka kategori, [[Special:WhatLinksHere/$1|kaca iki kalebu ing njeroné kaca liyané]]",
+       "autochange-username": "Salin otomatis MediaWiki",
        "upload": "Unggah barkas",
        "uploadbtn": "Unggahna berkas",
        "reuploaddesc": "Bali ing formulir pamotan",
        "uploaderror": "Kaluputan pangunggahan berkas",
        "upload-recreate-warning": "'''Pèngetan: Berkas mawa jeneng kuwi wis dibusak utawa disingkiraké.'''\n\nLog pambusakan lan panyingkiran saka kaca iki sumadhiya nèng kéné:",
        "uploadtext": "Anggé formulir ing ngandhap punika kanggé nginggahaké gambar.\nKanggé mirsani utawi madosi gambar ingkang sampun dipununggah sakdèrèngipun pigunakaken [[Special:FileList|dhaftar berkas sing wis diunggah]], gambar ingkang dipununggah ulang ugi kadhaftar ing [[Special:Log/upload|log pangunggahan]], pambusakan ing [[Special:Log/delete|Log pambusakan]].\n\nKanggé nyertakaken gambar ing satunggiling kaca, pigunakaken pranala salah setunggal saking format ing ngandhap punika:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.jpg]]</nowiki></code>''' kanggé migunakaken versi pepak gambar\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.png|200px|thumb|left|tèks alt]]</nowiki></code>''' kanggé migunakaken gambar wiyaripun 200 piksel ing kothak ing sisih kiwa kanthi 'tèks alt' minangka panjelasan\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki></code>''' kanggé nggandhèng langsung dhumateng gambar tanpi nampilaké gambar",
-       "upload-permitted": "Jenis berkas sing diidinaké: $1.",
-       "upload-preferred": "Jenis berkas sing disaranaké: $1.",
-       "upload-prohibited": "Jenis berkas sing dilarang: $1.",
+       "upload-permitted": "{{PLURAL:$2|Jinis}} barkas sing diidinaké: $1.",
+       "upload-preferred": "{{PLURAL:$2|Jinis}} barkas sing diprayogakaké: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Jinis}} barkas sing dilarang: $1.",
        "uploadlogpage": "Log unggah",
        "uploadlogpagetext": "Ing ngisor iki kapacak log pangunggahan berkas sing anyar dhéwé.\nMangga mirsani [[Special:NewFiles|galeri berkas-berkas anyar]] kanggo pratélan visual.",
        "filename": "Jeneng barkas",
        "upload-copy-upload-invalid-domain": "Unggahan salinan ora sumadhiya nèng domain iki.",
        "upload-dialog-title": "Unggah barkas",
        "upload-dialog-button-cancel": "Wurung",
+       "upload-dialog-button-back": "Balik",
        "upload-dialog-button-done": "Rampung",
        "upload-dialog-button-save": "Simpen",
        "upload-dialog-button-upload": "Unggah",
        "upload-form-label-infoform-title": "Rerincèn",
        "upload-form-label-infoform-name": "Jeneng",
+       "upload-form-label-infoform-description": "Wedharan",
+       "upload-form-label-usage-title": "Pangguna",
        "upload-form-label-usage-filename": "Jeneng barkas",
        "upload-form-label-own-work": "Iki karyaku dhéwé",
        "upload-form-label-infoform-categories": "Kategori",
        "license": "Jenis lisènsi:",
        "license-header": "Pamalilah",
        "nolicense": "Durung ana sing dipilih",
+       "licenses-edit": "Besut pilihan lisènsi",
        "license-nopreview": "(Pratuduh ora sumadhiya)",
-       "upload_source_url": " (sawijining URL absah sing bisa diaksès publik)",
-       "upload_source_file": " (sawijining berkas ing komputeré panjenengan)",
+       "upload_source_url": "(barkas sing panjenengan pilih saka URL sing trep tur bisa diaksès umum)",
+       "upload_source_file": "(barkas sing panjenengan pilih saka komputeré panjenengan)",
+       "listfiles-delete": "busak",
        "listfiles-summary": "Kaca mirunggan iki nuduhaké kabèh barkas sing kaunggah.",
        "listfiles_search_for": "Golèk jeneng gambar:",
+       "listfiles-userdoesnotexist": "Akun panganggo \"$1\" ora kadhaftar.",
        "imgfile": "barkas",
        "listfiles": "Daftar gambar",
        "listfiles_thumb": "Gambar mini",
        "filerevert-submit": "Balèkna",
        "filerevert-success": "'''[[Media:$1|$1]]''' wis dibalèkaké menyang [vèrsi $4 ing $3, $2].",
        "filerevert-badversion": "Ora ana vèrsi lokal sadurungé saka berkas iki mawa stèmpel wektu sing dikarepaké.",
+       "filerevert-identical": "Vèrsi barkasé sing saiki padha plek karo sing dipilih.",
        "filedelete": "Mbusak $1",
        "filedelete-legend": "Mbusak berkas",
        "filedelete-intro": "Panjenengan bakal mbusak berkas '''[[Media:$1|$1]]''' sekaliyan kabèh riwayaté.",
        "randomincategory": "Sembarang kaca ing kategori",
        "randomincategory-invalidcategory": "\"$1\" dudu jeneng kategori sing apik.",
        "randomincategory-nopages": "Ora ana kaca ing kategori [[:Category:$1|$1]].",
+       "randomincategory-category": "Kategori:",
+       "randomincategory-legend": "Sembarang kaca ing kategori",
        "randomincategory-submit": "Tumuju",
        "randomredirect": "Pangalihan sembarang",
        "randomredirect-nopages": "Ora ana pangalihan ing bilik jeneng \"$1\".",
        "apisandbox-submit": "Gawé panjalukan",
        "apisandbox-reset": "Resiki",
        "apisandbox-examples": "Conto",
-       "apisandbox-results": "Asil",
+       "apisandbox-dynamic-parameters": "Paramèter tambahan",
+       "apisandbox-dynamic-parameters-add-label": "Tambah paramèter:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Jeneng paramèter",
+       "apisandbox-dynamic-error-exists": "Paramèter aran \"$1\" wis ana.",
+       "apisandbox-deprecated-parameters": "Paramèter lawas",
+       "apisandbox-fetch-token": "Isi otomatis tokené",
+       "apisandbox-submit-invalid-fields-title": "Sawenèh babagan ora trep",
+       "apisandbox-submit-invalid-fields-message": "Jajal dandanana babagan sing ditandhani lan jajalen manèh.",
+       "apisandbox-results": "Kasil",
+       "apisandbox-sending-request": "Ngirim panyuwuné API...",
+       "apisandbox-loading-results": "Nampa kasilé API...",
+       "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",
        "booksources": "Sumber buku",
        "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é",
        "import-error-create": "Kaca \"$1\" ora diimpor amarga Sampéyan ora dililakaké nggawé kuwi.",
        "import-error-interwiki": "Kaca \"$1\" ora diimpor amarga jenengé dicadhangaké kango pranala njaba (interwiki).",
        "import-error-special": "Kaca \"$1\" ora diimpor amarga kuwi kalebu nèng bilik jeneng kusus sing ora nglilakaké anané kaca.",
-       "import-error-invalid": "Kaca \"$1\" ora diimpor amarga jenengé ora sah.",
+       "import-error-invalid": "Kaca \"$1\" ora diimpor amarga jenengé ora trep kanggo wiki iki.",
        "import-error-unserialize": "Revisi $2 saka kaca \"$1\" ora bisa diurutaké. Revisi iku dilapuraké murih nganggo gagrag isi $3 sing diurutaké minangka $4.",
        "import-options-wrong": "{{PLURAL:$2|Opsi|Opsi}} salah: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Kaca wod iki sesirahé ora sah.",
        "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",
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 15166f2..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진수 코드로 나타납니다.",
        "recentchanges-submit": "보기",
        "rcfilters-activefilters": "사용 중인 필터",
        "rcfilters-quickfilters": "빠른 링크",
+       "rcfilters-quickfilters-placeholder": "나중에 다시 사용할 수 있도록 즐겨찾는 도구 설정을 저장합니다.",
        "rcfilters-savedqueries-defaultlabel": "저장된 필터",
        "rcfilters-savedqueries-rename": "이름 바꾸기",
        "rcfilters-savedqueries-setdefault": "기본값으로 설정",
-       "rcfilters-savedqueries-unsetdefault": "기본ê°\92ì\9c¼ë¡\9c ì\84¤ì \95 í\95´ì \9c",
+       "rcfilters-savedqueries-unsetdefault": "기본ê°\92ì\9c¼ë¡\9c ì \9cê±°",
        "rcfilters-savedqueries-remove": "제거",
        "rcfilters-savedqueries-new-name-label": "이름",
        "rcfilters-savedqueries-apply-label": "빠른 링크 만들기",
        "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 c28d728..d81b569 100644 (file)
        "watchthis": "यो पृष्ठ अवलोकन गर्नुहोस्",
        "savearticle": "सङ्ग्रह गर्ने",
        "savechanges": "परिवर्तन सङ्ग्रह गर्नुहोस्",
+       "publishpage": "पृष्ठ प्रकाशित गर्ने",
        "publishchanges": "परिवर्तनहरू प्रकाशित गर्ने",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वालोकन देखाउनुहोस्",
index 809fd4f..7268687 100644 (file)
        "rcfilters-activefilters": "Actieve filters",
        "rcfilters-quickfilters": "Snelle links",
        "rcfilters-savedqueries-defaultlabel": "Opgeslagen filters",
-       "rcfilters-savedqueries-rename": "`Hernoemen",
+       "rcfilters-savedqueries-rename": "Hernoemen",
        "rcfilters-savedqueries-setdefault": "Als standaard instellen",
        "rcfilters-savedqueries-unsetdefault": "Als standaard verwijderen",
        "rcfilters-savedqueries-remove": "Verwijderen",
        "rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergeven.",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filterlist-whatsthis": "Wat is dit?",
-       "rcfilters-filterlist-feedbacklink": "Geef feedback op de nieuwe (beta) filters",
+       "rcfilters-filterlist-feedbacklink": "Geef terugkoppeling op de nieuwe (beta)filters",
        "rcfilters-highlightbutton-title": "Resultaten markeren",
        "rcfilters-highlightmenu-title": "Kies een kleur",
        "rcfilters-highlightmenu-help": "Selecteer een kleur om deze eigenschap uit te lichten",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nieuwkomers",
        "rcfilters-filter-user-experience-level-newcomer-description": "Minder dan 10 bewerkingen en 4 dagen van activiteit.",
        "rcfilters-filter-user-experience-level-learner-label": "Leerlingen",
-       "rcfilters-filter-user-experience-level-learner-description": "Meer ervaring dan \"Nieuwkomers\", maar minder dan \"Ervaren gebruikers\".",
+       "rcfilters-filter-user-experience-level-learner-description": "Meer ervaring dan \"nieuwkomers\", maar minder dan \"ervaren gebruikers\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Ervaren gebruikers",
        "rcfilters-filter-user-experience-level-experienced-description": "Meer dan 30 dagen van activiteit en 500 bewerkingen.",
        "rcfilters-filtergroup-automated": "Automatische bijdragen",
        "rcfilters-filter-bots-description": "De wijzigingen van geautomatiseerde hulpmiddelen.",
        "rcfilters-filter-humans-label": "Menselijk (geen bot)",
        "rcfilters-filter-humans-description": "Bewerkingen door menselijke bewerkers.",
-       "rcfilters-filtergroup-reviewstatus": "Controle status",
+       "rcfilters-filtergroup-reviewstatus": "Beoordelingsstatus",
        "rcfilters-filter-patrolled-label": "Gecontroleerd",
        "rcfilters-filter-patrolled-description": "Bewerkingen gemarkeerd als gecontroleerd.",
        "rcfilters-filter-unpatrolled-label": "Niet gecontroleerd",
        "rcfilters-filter-major-label": "Geen kleine bewerking",
        "rcfilters-filter-major-description": "Bewerkingen niet gelabeld als klein.",
        "rcfilters-filtergroup-watchlist": "Gevolgde pagina's",
-       "rcfilters-filter-watchlist-watched-label": "Op de Volglijst",
-       "rcfilters-filter-watchlist-watched-description": "Wijzigingen aan pagina's op uw Volglijst.",
-       "rcfilters-filter-watchlist-watchednew-label": "Nieuwe Volglijst wijzigingen",
-       "rcfilters-filter-watchlist-watchednew-description": "Wijzigingen aan pagina's die op uw Volglijst staan, die nog niet hebt bezocht sinds de wijziging.",
-       "rcfilters-filter-watchlist-notwatched-label": "Niet op de Volglijst",
+       "rcfilters-filter-watchlist-watched-label": "Op de volglijst",
+       "rcfilters-filter-watchlist-watched-description": "Wijzigingen aan pagina's op uw volglijst.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nieuwe volglijstwijzigingen",
+       "rcfilters-filter-watchlist-watchednew-description": "Wijzigingen aan pagina's die op uw volglijst staan, die u nog niet hebt bezocht sinds de wijziging.",
+       "rcfilters-filter-watchlist-notwatched-label": "Niet op de volglijst",
        "rcfilters-filter-watchlist-notwatched-description": "Alles behalve wijzigingen op pagina's die op uw Volglijst staan.",
        "rcfilters-filtergroup-changetype": "Soort wijziging",
        "rcfilters-filter-pageedits-label": "Paginabewerkingen",
        "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 6a47ce2..f9e7689 100644 (file)
@@ -80,7 +80,7 @@
        "february": "فبروري",
        "march": "مارچ",
        "april": "اپرېل",
-       "may_long": "Ù\85Û\8c",
+       "may_long": "Ù\85Û\90",
        "june": "جون",
        "july": "جولای",
        "august": "اگسټ",
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 cc98a74..98a1316 100644 (file)
        "rcfilters-savedqueries-defaultlabel": "Filtre salvate",
        "rcfilters-savedqueries-rename": "Redenumește",
        "rcfilters-savedqueries-setdefault": "Setează ca predefinit",
-       "rcfilters-savedqueries-unsetdefault": "Deselectează ca predefinit",
+       "rcfilters-savedqueries-unsetdefault": "Eliminați ca implicit",
        "rcfilters-savedqueries-remove": "Elimină",
        "rcfilters-savedqueries-new-name-label": "Nume",
        "rcfilters-savedqueries-apply-label": "Crează un link rapid",
        "rcfilters-filter-bots-description": "Modificări făcute cu unelte automate.",
        "rcfilters-filter-humans-label": "Om (nu robot)",
        "rcfilters-filter-humans-description": "Modificări făcute de oameni.",
-       "rcfilters-filtergroup-reviewstatus": "Statutul reviziei",
+       "rcfilters-filtergroup-reviewstatus": "Revizuiți starea",
        "rcfilters-filter-patrolled-label": "Patrulate",
        "rcfilters-filter-patrolled-description": "Editări marcate ca patrulate.",
        "rcfilters-filter-unpatrolled-label": "Nepatrulate",
        "file-thumbnail-no": "Numele fișierului începe cu <strong>$1</strong>.\nSe pare că este o imagine cu dimensiune redusă''(thumbnail)''.\nDacă ai această imagine la rezoluție mare încarc-o pe aceasta, altfel schimbă numele fișierului.",
        "fileexists-forbidden": "Un fișier cu acest nume există deja și nu poate fi rescris.\nMergeți înapoi și încărcați acest fișier sub un nume nou. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Un fișier cu acest nume există deja în magazia de imagini comune; mergeți înapoi și încărcați fișierul sub un nou nume. [[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "Încărcarea este un duplicat exact al versiunii curente <strong>[[:$1]]</strong>.",
+       "fileexists-duplicate-version": "Încărcarea este un duplicat exact al {{PLURAL:$2|versiunii vechi|versiunilor vechi}} a <strong>[[:$1]]</strong>.",
        "file-exists-duplicate": "Acest fișier este dublura {{PLURAL:$1|fișierului|fișierelor}}:",
        "file-deleted-duplicate": "Un fișier identic cu acesta ([[:$1]]) a fost șters anterior. Verificați istoricul ștergerilor fișierului înainte de a-l reîncărca.",
        "file-deleted-duplicate-notitle": "Un fișier identic cu acesta a fost șters anterior, iar titlul a fost suprimat.\nAr trebui să contactați pe cineva care poate vizualiza datele suprimate ale fișierului pentru a evalua situația înainte de a începe să-l reîncărcați.",
        "php-uploaddisabledtext": "Încărcarea de fișiere este dezactivată în PHP.\nVă rugăm să verificați setările din file_uploads.",
        "uploadscripted": "Fișierul conține HTML sau cod script care poate fi interpretat în mod eronat de un browser.",
        "upload-scripted-pi-callback": "Nu se poate încărca un fișier care conține instrucțiuni de procesare a foii de stil XML.",
+       "upload-scripted-dtd": "Nu se pot încărca fișiere SVG care conțin o declarație DTD neconformă cu standardul.",
        "uploaded-script-svg": "S-a găsit elementul „$1” scriptabil în fișierul SVG încărcat.",
        "uploaded-hostile-svg": "S-a descoperit CSS vulnerabil în elementul de stil al fișierului SVG încărcat.",
        "uploaded-event-handler-on-svg": "Setarea atributelor <code>$1=„$2”</code> de gestionare a evenimentului nu este permisă pentru fișierele SVG.",
-       "uploaded-href-unsafe-target-svg": "S-a găsit href către o destinație nesigură <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
+       "uploaded-href-attribute-svg": "Atributele href din fișierele SVG au permisiunea de a se conecta numai la adrese destinație http:// sau https://, dar a fost găsit <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "S-a găsit href către informații nesigure: destinație URI <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
        "uploaded-animate-svg": "S-a găsit în fișierul SVG încărcat eticheta „animate” care ar putea modifica valoarea href folosind atributul „from” <code>&lt;$1 $2=„$3”&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Setarea atributelor de gestionare a evenimentului nu este permisă; s-a găsit <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
        "uploaded-setting-href-svg": "Este blocată utilizarea etichetei „set” pentru a adăuga atributul „href” în elementul-părinte.",
        "upload-too-many-redirects": "URL-ul conținea prea multe redirecționări",
        "upload-http-error": "A avut loc o eroare HTTP: $1",
        "upload-copy-upload-invalid-domain": "Încărcarea copiilor nu este disponibilă pentru acest domeniu.",
+       "upload-foreign-cant-upload": "Acest wiki nu este configurat pentru a încărca fișiere în depozitul  de fișiere străin solicitat.",
        "upload-dialog-title": "Încărcare fișier",
        "upload-dialog-button-cancel": "Revocare",
        "upload-dialog-button-back": "Înapoi",
index 160cf25..48090d2 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:",
        "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 035fe3d..abf61a5 100644 (file)
                        "Ivan-r",
                        "Choomaq",
                        "Facenapalm",
-                       "Esukhovnina"
+                       "Esukhovnina",
+                       "Av6",
+                       "Санюн Вадик"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "createacct-yourpassword-ph": "Введите пароль",
        "yourpasswordagain": "Повторный набор пароля:",
        "createacct-yourpasswordagain": "Подтвердите пароль",
-       "createacct-yourpasswordagain-ph": "Введите пароль еще раз",
+       "createacct-yourpasswordagain-ph": "Введите пароль ещё раз",
        "userlogin-remembermypassword": "Оставаться в системе",
        "userlogin-signwithsecure": "Защищённое соединение",
        "cannotlogin-title": "Невозможно войти",
        "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 2ede56b..20f2c62 100644 (file)
        "rcfilters-filter-user-experience-level-newcomer-label": "Саҥа киирбиттэр",
        "rcfilters-filter-user-experience-level-newcomer-description": "Отой саҥалар: 10 көннөрүүттэн аҕыйаҕы оҥорбуттар уонна бэлиэтэмиттэрэ 4 хоно иликтэр.",
        "rcfilters-filter-user-experience-level-learner-label": "Үөрэнээччилэр",
+       "rcfilters-filter-bots-label": "Оруобат",
+       "rcfilters-filter-bots-description": "Аптамаатынан оҥоһуллубут көннөрүүлэр.",
+       "rcfilters-filter-humans-label": "Киһи (оруобат буолбатах)",
+       "rcfilters-filter-humans-description": "Кыттааччылар оҥорбут уларытыылара.",
+       "rcfilters-filtergroup-reviewstatus": "Тургутуу туруга",
+       "rcfilters-filter-patrolled-label": "Ботуруулламмыт",
+       "rcfilters-filter-patrolled-description": "Ботуруулламмыт курдук бэлиэтэммит уларытыылар.",
+       "rcfilters-filter-unpatrolled-label": "Ботуруулламматах",
+       "rcfilters-filter-unpatrolled-description": "Ботуруулламмыт курдук бэлиэтэммэтэх уларытыылар.",
+       "rcfilters-filtergroup-significance": "Суолтата",
+       "rcfilters-filter-minor-label": "Кыра уларытыы",
+       "rcfilters-filter-minor-description": "Ааптар суолтата суох курдук бэлиэтээбит уларытыылара.",
+       "rcfilters-filter-major-label": "Көннөрү уларытыылар",
+       "rcfilters-filter-major-description": "Кыра уларытыы курдук бэлиэтэммэтэхтэр.",
        "rcnotefrom": "Манна {{PLURAL:$5|уларытыы көрдөрүлүннэ|уларытыылар көһүннүлэр}} баччаттан <strong>$3, $4</strong> (баччаттан элбэх көстүбэт <strong>$1</strong>).",
        "rclistfrom": "Бу кэм $3 $2 кэнниттэн оҥоһуллубуттары көрдөр",
        "rcshowhideminor": "$1 кыра уларыйыылары",
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..776f634 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-summary": "Пратите скорашње измене на овој страници.",
        "recentchanges-noresult": "Нема промена у задатом времену за задате критеријуме.",
        "recentchanges-feed-description": "Пратите скорашње измене уз помоћ овог довода.",
-       "recentchanges-label-newpage": "Ð\9eвом Ð¸Ð·Ð¼ÐµÐ½Ð¾Ð¼ Ð½Ð°Ð¿Ñ\80авÑ\99ена Ñ\98е Ð½ова страница",
+       "recentchanges-label-newpage": "Ð\9dова страница",
        "recentchanges-label-minor": "Ово је мања измена",
        "recentchanges-label-bot": "Ову измену је направио бот",
        "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
        "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": "Управо ћете да напустите пројекат {{SITENAME}} да бисте посетили пројекат [[$2]] који је засебан веб-сајт.\n\n[$1 Кликните овде да бисте отишли на $1].",
+       "gotointerwiki-external": "Управо ћете да напустите сајт {{SITENAME}} да бисте посетили пројекат [[$2]], који је засебан веб-сајт.\n\n'''[$1 Продужи на $1]'''",
        "undelete-cantedit": "Не можете повратити ову страницу јер немате дозволу да је уређујете.",
        "undelete-cantcreate": "Не можете повратити ову страницу јер нема постојеће странице са овим именом и немате дозволу да направите ову страницу."
 }
index c90e4df..260130c 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}}",
        "recentchanges-summary": "Pratite skorašnje izmene na ovoj stranici.",
        "recentchanges-noresult": "Nema promena u zadatom vremenu za zadate kriterijume.",
        "recentchanges-feed-description": "Pratite skorašnje izmene uz pomoć ovog dovoda.",
-       "recentchanges-label-newpage": "Ovom izmenom napravljena je nova izmena",
+       "recentchanges-label-newpage": "Nova stranica",
        "recentchanges-label-minor": "Ovo je manja izmena",
        "recentchanges-label-bot": "Ovu izmenu je napravio bot",
        "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
        "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 */",
index 4e99575..4163e03 100644 (file)
@@ -13,7 +13,8 @@
                        "아라",
                        "Macofe",
                        "Uchup19",
-                       "WikiKaruhun"
+                       "WikiKaruhun",
+                       "Dipusparaga"
                ]
        },
        "tog-underline": "Gurat-handapan tutumbu",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tempo ogé [[Special:NewPages|béréndélan kaca anyar]])",
        "recentchanges-submit": "Témbongkeun",
        "rcfilters-activefilters": "Panyaringan aktif",
+       "rcfilters-savedqueries-rename": "Robah ngaran",
+       "rcfilters-savedqueries-remove": "Hapus",
+       "rcfilters-savedqueries-new-name-label": "Ngaran",
+       "rcfilters-savedqueries-cancel-label": "Bolay",
        "rcfilters-restore-default-filters": "Balikeun panyaringan bawaan",
        "rcfilters-clear-all-filters": "Pupus sakumna panyaringan",
        "rcfilters-search-placeholder": "Sarinh parobahan panganyarna (langlang atawa mimitian ngetik)",
        "rcfilters-filter-newpages-description": "Éditan nu nyieun kaca anyar.",
        "rcfilters-filter-categorization-label": "Parobahan kategori",
        "rcfilters-filter-logactions-label": "Tarékah kacatet",
+       "rcfilters-filtergroup-lastRevision": "Révisi kiwari",
+       "rcfilters-filter-lastrevision-label": "Révisi kiwari",
        "rcnotefrom": "Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).",
        "rclistfromreset": "Rését pilihan kaping",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
index c2cb7d6..f9de11a 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)",
        "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 Klicka här för att $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..3bbf76d 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",
        "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..c026bda 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",
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 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 b38287e..3ccd3c4 100644 (file)
@@ -129,20 +129,79 @@ $specialPageAliases = [
 
 $magicWords = [
        'redirect'                  => [ '0', '#REDIRECCIÓ', '#REDIRECCIO', '#REDIRECT' ],
-       'numberofarticles'          => [ '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ],
-       'numberoffiles'             => [ '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ],
-       'numberofusers'             => [ '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ],
-       'numberofedits'             => [ '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ],
-       'pagename'                  => [ '1', 'NOMDELAPLANA', 'PAGENAME' ],
+       'notoc'                     => [ '0', '__CAPTAULA__', '__NOTAULA__', '__NOTOC__' ],
+       'nogallery'                 => [ '0', '__CAPGALERIA__', '__NOGALERIA__', '__NOGALLERY__' ],
+       'forcetoc'                  => [ '0', '__FORÇATAULA__', '__FORCETOC__' ],
+       'toc'                       => [ '0', '__TAULA__', '__RESUM__', '__TDM__', '__TOC__' ],
+       'noeditsection'             => [ '0', '__SECCIÓNOEDITABLE__', '__SECCIONOEDITABLE__', '__NOEDITSECTION__' ],
+       'currentmonth'              => [ '1', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ],
+       'currentmonthname'          => [ '1', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ],
+       'currentmonthnamegen'       => [ '1', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ],
+       'currentmonthabbrev'        => [ '1', 'ABREVMESACTUAL', 'CURRENTMONTHABBREV' ],
+       'currentday'                => [ '1', 'DIAACTUAL', 'CURRENTDAY' ],
+       'currentday2'               => [ '1', 'DIAACTUAL2', 'CURRENTDAY2' ],
+       'currentdayname'            => [ '1', 'NOMDIAACTUAL', 'CURRENTDAYNAME' ],
+       'currentyear'               => [ '1', 'ANYACTUAL', 'CURRENTYEAR' ],
+       'currenttime'               => [ '1', 'HORARICTUAL', 'CURRENTTIME' ],
+       'currenthour'               => [ '1', 'HORAACTUAL', 'CURRENTHOUR' ],
+       'localmonth'                => [ '1', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ],
+       'localmonthname'            => [ '1', 'NOMMESLOCAL', 'LOCALMONTHNAME' ],
+       'localmonthnamegen'         => [ '1', 'NOMGENMESLOCAL', 'LOCALMONTHNAMEGEN' ],
+       'localmonthabbrev'          => [ '1', 'ABREVMESLOCAL', 'LOCALMONTHABBREV' ],
+       'localday'                  => [ '1', 'DIALOCAL', 'LOCALDAY' ],
+       'localday2'                 => [ '1', 'DIALOCAL2', 'LOCALDAY2' ],
+       'localdayname'              => [ '1', 'NOMDIALOCAL', 'LOCALDAYNAME' ],
+       'localyear'                 => [ '1', 'ANYLOCAL', 'LOCALYEAR' ],
+       'localtime'                 => [ '1', 'HORARILOCAL', 'LOCALTIME' ],
+       'localhour'                 => [ '1', 'HORALOCAL', 'LOCALHOUR' ],
+       'numberofarticles'          => [ '1', 'NOMBREARTICLES', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ],
+       'numberoffiles'             => [ '1', 'NOMBREFITXERS', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ],
+       'numberofusers'             => [ '1', 'NOMBREUSUARIS', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ],
+       'numberofedits'             => [ '1', 'NOMBREEDICIONS', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ],
+       'pagename'                  => [ '1', 'NOMPÀGINA', 'NOMPAGINA', 'NOMDELAPLANA', 'PAGENAME' ],
+       'img_thumbnail'             => [ '1', 'miniatura', 'thumb', 'thumbnail' ],
+       'img_manualthumb'           => [ '1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ],
        'img_right'                 => [ '1', 'dreta', 'right' ],
        'img_left'                  => [ '1', 'esquerra', 'left' ],
+       'img_none'                  => [ '1', 'cap', 'none' ],
+       'img_width'                 => [ '1', '$1px' ],
+       'img_center'                => [ '1', 'center', 'centre' ],
+       'img_framed'                => [ '1', 'marc', 'frame', 'framed', 'enframed' ],
+       'img_frameless'             => [ '1', 'sense marc', 'frameless' ],
+       'img_lang'                  => [ '1', 'lang=$1', 'llengua=$1', 'idioma=$1' ],
+       'img_page'                  => [ '1', 'pàgina=$1', 'pàgina $1', 'page=$1', 'page $1' ],
+       'img_upright'               => [ '1', 'redreçat', 'upright', 'redreçat=$1', 'upright=$1', 'redreçat $1', 'upright $1' ],
        'img_border'                => [ '1', 'vora', 'border' ],
+       'img_baseline'              => [ '1', 'línia de base', 'baseline' ],
+       'img_sub'                   => [ '1', 'sub' ],
+       'img_super'                 => [ '1', 'super', 'sup' ],
+       'img_top'                   => [ '1', 'dalt', 'top' ],
+       'img_text_top'              => [ '1', 'dalt-text', 'text-top' ],
+       'img_middle'                => [ '1', 'mitjà', 'middle' ],
+       'img_bottom'                => [ '1', 'baix', 'bottom' ],
+       'img_text_bottom'           => [ '1', 'baix-text', 'text-bottom' ],
        'img_link'                  => [ '1', 'enllaç=$1', 'link=$1' ],
-       'displaytitle'              => [ '1', 'TÍTOL', 'DISPLAYTITLE' ],
-       'language'                  => [ '0', '#IDIOMA:', '#LANGUAGE:' ],
+       'img_alt'                   => [ '1', 'alt=$1' ],
+       'img_class'                 => [ '1', 'class=$1' ],
+       'displaytitle'              => [ '1', 'TÍTOL', 'TITOL', 'DISPLAYTITLE' ],
+       'currentversion'            => [ '1', 'VERSIÓACTUAL', 'VERSIOACTUAL', 'CURRENTVERSION' ],
+       'language'                  => [ '0', '#IDIOMA:', '#LLENGUA:', '#LANGUAGE:' ],
+       'contentlanguage'           => [ '1', 'IDIOMACONTINGUT', 'LLENGUACONTINGUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ],
+       'pagesinnamespace'          => [ '1', 'PÀGINESENESPAINOMS:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ],
+       'numberofadmins'            => [ '1', 'NOMBREADMINS', 'NUMBEROFADMINS' ],
+       'formatnum'                 => [ '0', 'FORMATNOMBRE', 'FORMATNUM' ],
+       'padleft'                   => [ '0', 'SEPARACIÓESQUERRA', 'SEPARACIOESQUERRA', 'PADLEFT' ],
+       'padright'                  => [ '0', 'SEPARACIÓDRETA', 'SEPARACIODRETA', 'PADRIGHT' ],
        'special'                   => [ '0', 'especial', 'special' ],
        'defaultsort'               => [ '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ],
-       'pagesize'                  => [ '1', 'MIDADELAPLANA', 'PAGESIZE' ],
+       'filepath'                  => [ '0', 'CAMÍ:', 'CAMI:', 'FILEPATH:' ],
+       'tag'                       => [ '0', 'etiqueta', 'marcador', 'tag' ],
+       'hiddencat'                 => [ '1', '__CATAMAGADA__', '__HIDDENCAT__' ],
+       'pagesincategory'           => [ '1', 'PÀGINESENCATEGORIA', 'PAGINESENCATEGORIA', 'PAGINESENCAT', 'PAGESINCATEGORY', 'PAGESINCAT' ],
+       'pagesize'                  => [ '1', 'MIDAPÀGINA', 'MIDAPAGINA', 'MIDADELAPLANA', 'PAGESIZE' ],
+       'noindex'                   => [ '1', '__CAPINDEX__', '__NOINDEX__' ],
+       'staticredirect'            => [ '1', '__REDIRECCIÓESTATICA__', '__REDIRECCIOESTATICA__', '__STATICREDIRECT__' ],
+       'protectionlevel'           => [ '1', 'NIVELLPROTECCIÓ', 'NIVELLPROTECCIO', 'PROTECTIONLEVEL' ],
 ];
 
 $separatorTransformTable = [ ',' => '.', '.' => ',' ];
index f106db1..1d53615 100644 (file)
 杜琪峰      杜琪峯
 單向 單向
 轉向 轉向 #分詞用
+十出頭      十出頭
index 4effa8e..9b2e081 100644 (file)
 精制服
 經有云
 編制法
+防制法
 能干休
 能干戈
 能干擾
 于海
 於海邊
 於海上
+於海拔
+於山東
+於山西
 于凌辰
 于魁智
 于鬯
 蒸製
 烹製
 醃製
+鐵製
+鋼製
+銅製
+鋅製
 和製漢
 和製英語
 壓製機
 短發生
 頭發現
 蛋白發
+發狀態
+發狀況
 古人有云
 昔人有云
 云敞
 金聖歎
 天台 #分詞用
 性別扭曲
+箇舊市
+雲南箇舊
index a6cd548..9f3552a 100644 (file)
@@ -278,6 +278,7 @@ class RefreshLinks extends Maintenance {
                        $page->getTitle(), /* $old = */ null, /* $recursive = */ false );
                foreach ( $updates as $update ) {
                        DeferredUpdates::addUpdate( $update );
+                       DeferredUpdates::doUpdates();
                }
        }
 
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 8d7a2a9..8839a2c 100644 (file)
@@ -636,7 +636,8 @@ ol:lang( sdh ) li {
 }
 
 ol:lang( hi ) li,
-ol:lang( mr ) li {
+ol:lang( mr ) li,
+ol:lang( ne ) li {
        list-style-type: -moz-devanagari;
        list-style-type: devanagari;
 }
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 5cbd2ec..1cc168a 100644 (file)
        };
 
        /**
-        * Respond to add results event in the results widget.
+        * Respond to change results event in the results widget.
         * Override the way SelectWidget and GroupElement append the items
         * into the group so we can append them in groups of rows.
         *
                        // Go over the added items
                        row = search.getAvailableRow();
                        for ( i = 0, ilen = items.length; i < ilen; i++ ) {
+
+                               // Check item has just been added
+                               if ( items[ i ].row !== null ) {
+                                       continue;
+                               }
+
                                itemWidth = items[ i ].$element.outerWidth( true );
 
                                // Add items to row until it is full
 
                                // Append the item
                                search.rows[ row ].$element.append( items[ i ].$element );
+
                        }
 
                        // If we have less than 4 rows, call for more images
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..9655fa4 100644 (file)
@@ -4,7 +4,6 @@
 
        $( function () {
                var $diff;
-               mw.util.init();
 
                /**
                 * Fired when wiki content is being added to the DOM
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 2d107e7..54a8c61 100644 (file)
@@ -11840,6 +11840,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
 ###
@@ -17552,10 +17872,10 @@ Sanitizer: Validating that <meta> and <link> work, but only for Microdata
 <p>    <meta itemprop="hello" content="world" />
        &lt;meta http-equiv="refresh" content="5"&gt;
        <meta itemprop="hello" content="5" />
-</p>
        <link itemprop="hello" href="http&#58;//example.org" />
        &lt;link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>"&gt;
        <link itemprop="hello" href="http&#58;//example.org" />
+</p>
 </div>
 
 !! end
@@ -20946,6 +21266,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 +21455,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
index bc9f97c..df3d568 100644 (file)
@@ -737,6 +737,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                        $GLOBALS[$globalKey] instanceof FauxRequest
                                ) {
                                        $this->mwGlobals[$globalKey] = clone $GLOBALS[$globalKey];
+                               } 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
+                                       $this->mwGlobals[$globalKey] = $GLOBALS[$globalKey];
                                } else {
                                        try {
                                                $this->mwGlobals[$globalKey] = unserialize( serialize( $GLOBALS[$globalKey] ) );
@@ -748,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 31ee75b..a6cf14a 100644 (file)
@@ -210,6 +210,11 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
 
                $namespaces = isset( $case['namespaces'] ) ? $case['namespaces'] : [];
 
+               if ( wfGetDB( DB_REPLICA )->getType() === 'postgres' ) {
+                       // Postgres will sort lexicographically on utf8 code units (" " before "/")
+                       sort( $case['results'], SORT_STRING );
+               }
+
                $searcher = new StringPrefixSearch;
                $results = $searcher->search( $case['query'], 3, $namespaces );
                $this->assertEquals(
@@ -232,6 +237,11 @@ class PrefixSearchTest extends MediaWikiLangTestCase {
                $searcher = new StringPrefixSearch;
                $results = $searcher->search( $case['query'], 3, $namespaces, 1 );
 
+               if ( wfGetDB( DB_REPLICA )->getType() === 'postgres' ) {
+                       // Postgres will sort lexicographically on utf8 code units (" " before "/")
+                       sort( $case['results'], SORT_STRING );
+               }
+
                // We don't expect the first result when offsetting
                array_shift( $case['results'] );
                // And sometimes we expect a different last result
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 787d9a8..cf891e2 100644 (file)
@@ -57,7 +57,7 @@ class MimeMagicTest extends PHPUnit_Framework_TestCase {
        function testOggRecognize() {
                $oggFile = __DIR__ . '/../../../data/media/say-test.ogg';
                $actualType = $this->mimeAnalyzer->getMediaType( $oggFile, 'application/ogg' );
-               $this->assertEquals( $actualType, MEDIATYPE_AUDIO );
+               $this->assertEquals( MEDIATYPE_AUDIO, $actualType );
        }
 
        /**
@@ -67,6 +67,6 @@ class MimeMagicTest extends PHPUnit_Framework_TestCase {
        function testOpusRecognize() {
                $oggFile = __DIR__ . '/../../../data/media/say-test.opus';
                $actualType = $this->mimeAnalyzer->getMediaType( $oggFile, 'application/ogg' );
-               $this->assertEquals( $actualType, MEDIATYPE_AUDIO );
+               $this->assertEquals( MEDIATYPE_AUDIO, $actualType );
        }
 }
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 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 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' );