Merge "Fill GenderCache for used pages in action=query&prop=fileusage"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 26 Sep 2019 17:03:04 +0000 (17:03 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 26 Sep 2019 17:03:04 +0000 (17:03 +0000)
114 files changed:
RELEASE-NOTES-1.34
autoload.php
composer.json
docs/hooks.txt
includes/CommentStore.php
includes/DefaultSettings.php
includes/EditPage.php
includes/FauxRequest.php
includes/Html.php
includes/MediaWiki.php
includes/PHPVersionCheck.php
includes/ProtectionForm.php
includes/Rest/Router.php
includes/Revision/RevisionStore.php
includes/Title.php
includes/api/i18n/ru.json
includes/api/i18n/zh-hant.json
includes/exception/BadRequestError.php
includes/exception/ErrorPageError.php
includes/exception/PermissionsError.php
includes/exception/ThrottledError.php
includes/exception/UserNotLoggedIn.php
includes/filerepo/file/LocalFileLockError.php
includes/htmlform/CollapsibleFieldsetLayout.php [new file with mode: 0644]
includes/htmlform/OOUIHTMLForm.php
includes/http/HttpRequestFactory.php
includes/http/MWHttpRequest.php
includes/installer/DatabaseInstaller.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOptions.php
includes/installer/WebInstallerRestart.php
includes/installer/i18n/nb.json
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/position/MySQLMasterPos.php
includes/logging/LogPager.php
includes/page/Article.php
includes/parser/Parser.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specials/SpecialConfirmEmail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEditTags.php
includes/specials/SpecialImport.php
includes/specials/SpecialRevisionDelete.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/specials/pagers/NewFilesPager.php
languages/i18n/ban.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/ce.json
languages/i18n/diq.json
languages/i18n/exif/af.json
languages/i18n/exif/nap.json
languages/i18n/exif/nds-nl.json
languages/i18n/exif/zh-hans.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/kiu.json
languages/i18n/ko.json
languages/i18n/lad.json
languages/i18n/lv.json
languages/i18n/min.json
languages/i18n/ml.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/nl.json
languages/i18n/nqo.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sat.json
languages/i18n/sh.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sv.json
languages/i18n/te.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/cleanupTable.inc
maintenance/migrateArchiveText.php
maintenance/userDupes.inc
resources/Resources.php
resources/src/jquery/jquery.makeCollapsible.styles.less
resources/src/mediawiki.base/mediawiki.errorLogger.js
resources/src/mediawiki.htmlform.ooui.styles.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.WatchlistTopSectionWidget.less
resources/src/mediawiki.special.recentchanges.js
resources/src/mediawiki.special/contributions.less [new file with mode: 0644]
resources/src/mediawiki.special/special.less
resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
resources/src/startup/mediawiki.js
resources/src/startup/mediawiki.requestIdleCallback.js
tests/phpunit/includes/CommentStoreTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php [deleted file]
tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js

index 508ba08..8d9b06e 100644 (file)
@@ -126,6 +126,9 @@ $wgPasswordPolicy['policies']['default']['PasswordNotInLargeBlacklist'] = false;
 * (T222388) API modules can now be specified as an ObjectFactory spec,
   allowing the construction of modules that require services to be injected
   in their constructor.
+* (T117736) The function signature of SpecialContributions::getForm::filters
+  has changed. It now expects definitions of additional filter fields as array
+  rather than string.
 
 === External library changes in 1.34 ===
 
@@ -147,6 +150,7 @@ $wgPasswordPolicy['policies']['default']['PasswordNotInLargeBlacklist'] = false;
 * Updated wikimedia/timestamp from 2.2.0 to 3.0.0.
 * Updated wikimedia/xmp-reader from 0.6.2 to 0.6.3.
 * Updated mediawiki/mediawiki-phan-config from 0.6.0 to 0.6.1 (dev-only).
+* Updated wikimedia/avro from 1.8.0 to 1.9.0 (dev-only).
 * …
 
 ==== Removed external libraries ====
index 7ff29ce..55e5a7f 100644 (file)
@@ -285,6 +285,7 @@ $wgAutoloadLocalClasses = [
        'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php',
        'CodeCleanerGlobalsPass' => __DIR__ . '/maintenance/CodeCleanerGlobalsPass.inc',
        'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php',
+       'CollapsibleFieldsetLayout' => __DIR__ . '/includes/htmlform/CollapsibleFieldsetLayout.php',
        'Collation' => __DIR__ . '/includes/collation/Collation.php',
        'CollationCkb' => __DIR__ . '/includes/collation/CollationCkb.php',
        'CommandLineInc' => __DIR__ . '/maintenance/commandLine.inc',
index 1f2776c..bd34b92 100644 (file)
@@ -74,7 +74,7 @@
                "nmred/kafka-php": "0.1.5",
                "phpunit/phpunit": "4.8.36 || ^6.5",
                "psy/psysh": "0.9.9",
-               "wikimedia/avro": "1.8.0",
+               "wikimedia/avro": "1.9.0",
                "wikimedia/testing-access-wrapper": "~1.0",
                "wmde/hamcrest-html-matchers": "^0.1.0",
                "mediawiki/mediawiki-phan-config": "0.7.1",
index 55ba06e..4261b0b 100644 (file)
@@ -3177,7 +3177,7 @@ $row: Revision information from the database
 'SpecialContributions::getForm::filters': Called with a list of filters to render
 on Special:Contributions.
 $sp: SpecialContributions object, for context
-&$filters: List of filters rendered as HTML
+&$filters: List of filter object definitions (compatible with OOUI form)
 
 'SpecialListusersDefaultQuery': Called right before the end of
 UsersPager::getDefaultQuery().
index 994a064..9054e7a 100644 (file)
@@ -83,7 +83,8 @@ class CommentStore {
        protected $key = null;
 
        /**
-        * @var int One of the MIGRATION_* constants
+        * @var int One of the MIGRATION_* constants, or an appropriate combination
+        *  of SCHEMA_COMPAT_* constants.
         * @todo Deprecate and remove once extensions seem unlikely to need to use
         *  it for migration anymore.
         */
@@ -98,11 +99,19 @@ class CommentStore {
        /**
         * @param Language $lang Language to use for comment truncation. Defaults
         *  to content language.
-        * @param int $migrationStage One of the MIGRATION_* constants. Always
-        *  MIGRATION_NEW for MediaWiki core since 1.33.
+        * @param int $stage One of the MIGRATION_* constants, or an appropriate
+        *  combination of SCHEMA_COMPAT_* constants. Always MIGRATION_NEW for
+        *  MediaWiki core since 1.33.
         */
-       public function __construct( Language $lang, $migrationStage ) {
-               $this->stage = $migrationStage;
+       public function __construct( Language $lang, $stage ) {
+               if ( ( $stage & SCHEMA_COMPAT_WRITE_BOTH ) === 0 ) {
+                       throw new InvalidArgumentException( '$stage must include a write mode' );
+               }
+               if ( ( $stage & SCHEMA_COMPAT_READ_BOTH ) === 0 ) {
+                       throw new InvalidArgumentException( '$stage must include a read mode' );
+               }
+
+               $this->stage = $stage;
                $this->lang = $lang;
        }
 
@@ -166,21 +175,21 @@ class CommentStore {
        public function getFields( $key = null ) {
                $key = $this->getKey( $key );
                $fields = [];
-               if ( $this->stage === MIGRATION_OLD ) {
+               if ( ( $this->stage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD ) {
                        $fields["{$key}_text"] = $key;
                        $fields["{$key}_data"] = 'NULL';
                        $fields["{$key}_cid"] = 'NULL';
-               } else {
-                       if ( $this->stage < MIGRATION_NEW ) {
+               } else { // READ_BOTH or READ_NEW
+                       if ( $this->stage & SCHEMA_COMPAT_READ_OLD ) {
                                $fields["{$key}_old"] = $key;
                        }
 
                        $tempTableStage = isset( $this->tempTables[$key] )
                                ? $this->tempTables[$key]['stage'] : MIGRATION_NEW;
-                       if ( $tempTableStage < MIGRATION_NEW ) {
+                       if ( $tempTableStage & SCHEMA_COMPAT_READ_OLD ) {
                                $fields["{$key}_pk"] = $this->tempTables[$key]['joinPK'];
                        }
-                       if ( $tempTableStage > MIGRATION_OLD ) {
+                       if ( $tempTableStage & SCHEMA_COMPAT_READ_NEW ) {
                                $fields["{$key}_id"] = "{$key}_id";
                        }
                }
@@ -211,21 +220,21 @@ class CommentStore {
                        $fields = [];
                        $joins = [];
 
-                       if ( $this->stage === MIGRATION_OLD ) {
+                       if ( ( $this->stage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD ) {
                                $fields["{$key}_text"] = $key;
                                $fields["{$key}_data"] = 'NULL';
                                $fields["{$key}_cid"] = 'NULL';
-                       } else {
-                               $join = $this->stage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN';
+                       } else { // READ_BOTH or READ_NEW
+                               $join = ( $this->stage & SCHEMA_COMPAT_READ_OLD ) ? 'LEFT JOIN' : 'JOIN';
 
                                $tempTableStage = isset( $this->tempTables[$key] )
                                        ? $this->tempTables[$key]['stage'] : MIGRATION_NEW;
-                               if ( $tempTableStage < MIGRATION_NEW ) {
+                               if ( $tempTableStage & SCHEMA_COMPAT_READ_OLD ) {
                                        $t = $this->tempTables[$key];
                                        $alias = "temp_$key";
                                        $tables[$alias] = $t['table'];
                                        $joins[$alias] = [ $join, "{$alias}.{$t['pk']} = {$t['joinPK']}" ];
-                                       if ( $tempTableStage === MIGRATION_OLD ) {
+                                       if ( ( $tempTableStage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD ) {
                                                $joinField = "{$alias}.{$t['field']}";
                                        } else {
                                                // Nothing hits this code path for now, but will in the future when we set
@@ -245,7 +254,7 @@ class CommentStore {
                                $tables[$alias] = 'comment';
                                $joins[$alias] = [ $join, "{$alias}.comment_id = {$joinField}" ];
 
-                               if ( $this->stage === MIGRATION_NEW ) {
+                               if ( ( $this->stage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_NEW ) {
                                        $fields["{$key}_text"] = "{$alias}.comment_text";
                                } else {
                                        $fields["{$key}_text"] = "COALESCE( {$alias}.comment_text, $key )";
@@ -282,13 +291,15 @@ class CommentStore {
                        $cid = $row["{$key}_cid"] ?? null;
                        $text = $row["{$key}_text"];
                        $data = $row["{$key}_data"];
-               } elseif ( $this->stage === MIGRATION_OLD ) {
+               } elseif ( ( $this->stage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD ) {
                        $cid = null;
                        if ( $fallback && isset( $row[$key] ) ) {
                                wfLogWarning( "Using deprecated fallback handling for comment $key" );
                                $text = $row[$key];
                        } else {
-                               wfLogWarning( "Missing {$key}_text and {$key}_data fields in row with MIGRATION_OLD" );
+                               wfLogWarning(
+                                       "Missing {$key}_text and {$key}_data fields in row with MIGRATION_OLD / READ_OLD"
+                               );
                                $text = '';
                        }
                        $data = null;
@@ -296,7 +307,7 @@ class CommentStore {
                        $tempTableStage = isset( $this->tempTables[$key] )
                                ? $this->tempTables[$key]['stage'] : MIGRATION_NEW;
                        $row2 = null;
-                       if ( $tempTableStage > MIGRATION_OLD && array_key_exists( "{$key}_id", $row ) ) {
+                       if ( ( $tempTableStage & SCHEMA_COMPAT_READ_NEW ) && array_key_exists( "{$key}_id", $row ) ) {
                                if ( !$db ) {
                                        throw new InvalidArgumentException(
                                                "\$row does not contain fields needed for comment $key and getComment(), but "
@@ -311,7 +322,9 @@ class CommentStore {
                                        __METHOD__
                                );
                        }
-                       if ( !$row2 && $tempTableStage < MIGRATION_NEW && array_key_exists( "{$key}_pk", $row ) ) {
+                       if ( !$row2 && ( $tempTableStage & SCHEMA_COMPAT_READ_OLD ) &&
+                               array_key_exists( "{$key}_pk", $row )
+                       ) {
                                if ( !$db ) {
                                        throw new InvalidArgumentException(
                                                "\$row does not contain fields needed for comment $key and getComment(), but "
@@ -341,7 +354,9 @@ class CommentStore {
                                $cid = $row2->comment_id;
                                $text = $row2->comment_text;
                                $data = $row2->comment_data;
-                       } elseif ( $this->stage < MIGRATION_NEW && array_key_exists( "{$key}_old", $row ) ) {
+                       } elseif ( ( $this->stage & SCHEMA_COMPAT_READ_OLD ) &&
+                               array_key_exists( "{$key}_old", $row )
+                       ) {
                                $cid = null;
                                $text = $row["{$key}_old"];
                                $data = null;
@@ -474,7 +489,7 @@ class CommentStore {
                # Truncate comment in a Unicode-sensitive manner
                $comment->text = $this->lang->truncateForVisual( $comment->text, self::COMMENT_CHARACTER_LIMIT );
 
-               if ( $this->stage > MIGRATION_OLD && !$comment->id ) {
+               if ( ( $this->stage & SCHEMA_COMPAT_WRITE_NEW ) && !$comment->id ) {
                        $dbData = $comment->data;
                        if ( !$comment->message instanceof RawMessage ) {
                                if ( $dbData === null ) {
@@ -534,14 +549,14 @@ class CommentStore {
 
                $comment = $this->createComment( $dbw, $comment, $data );
 
-               if ( $this->stage <= MIGRATION_WRITE_BOTH ) {
+               if ( $this->stage & SCHEMA_COMPAT_WRITE_OLD ) {
                        $fields[$key] = $this->lang->truncateForDatabase( $comment->text, 255 );
                }
 
-               if ( $this->stage >= MIGRATION_WRITE_BOTH ) {
+               if ( $this->stage & SCHEMA_COMPAT_WRITE_NEW ) {
                        $tempTableStage = isset( $this->tempTables[$key] )
                                ? $this->tempTables[$key]['stage'] : MIGRATION_NEW;
-                       if ( $tempTableStage <= MIGRATION_WRITE_BOTH ) {
+                       if ( $tempTableStage & SCHEMA_COMPAT_WRITE_OLD ) {
                                $t = $this->tempTables[$key];
                                $func = __METHOD__;
                                $commentId = $comment->id;
@@ -556,7 +571,7 @@ class CommentStore {
                                        );
                                };
                        }
-                       if ( $tempTableStage >= MIGRATION_WRITE_BOTH ) {
+                       if ( $tempTableStage & SCHEMA_COMPAT_WRITE_NEW ) {
                                $fields["{$key}_id"] = $comment->id;
                        }
                }
@@ -594,7 +609,7 @@ class CommentStore {
 
                $tempTableStage = isset( $this->tempTables[$key] )
                        ? $this->tempTables[$key]['stage'] : MIGRATION_NEW;
-               if ( $tempTableStage < MIGRATION_WRITE_NEW ) {
+               if ( $tempTableStage & SCHEMA_COMPAT_WRITE_OLD ) {
                        throw new InvalidArgumentException( "Must use insertWithTempTable() for $key" );
                }
 
index fd1affc..29b628c 100644 (file)
@@ -9094,6 +9094,16 @@ $wgSpecialSearchFormOptions = [];
  */
 $wgNativeImageLazyLoading = false;
 
+/**
+ * Option to whether serve the main page as the domain root
+ *
+ * @warning EXPERIMENTAL!
+ *
+ * @since 1.34
+ * @var bool
+ */
+$wgMainPageIsDomainRoot = false;
+
 /**
  * For really cool vim folding this needs to be at the end:
  * vim: foldmarker=@{,@} foldmethod=marker
index 9182300..fe00149 100644 (file)
@@ -1683,7 +1683,9 @@ class EditPage {
                        case self::AS_CANNOT_USE_CUSTOM_MODEL:
                        case self::AS_PARSE_ERROR:
                        case self::AS_UNICODE_NOT_SUPPORTED:
-                               $out->wrapWikiTextAsInterface( 'error', $status->getWikiText() );
+                               $out->wrapWikiTextAsInterface( 'error',
+                                       $status->getWikiText( false, false, $this->context->getLanguage() )
+                               );
                                return true;
 
                        case self::AS_SUCCESS_NEW_ARTICLE:
@@ -1757,7 +1759,8 @@ class EditPage {
                                // is if an extension hook aborted from inside ArticleSave.
                                // Render the status object into $this->hookError
                                // FIXME this sucks, we should just use the Status object throughout
-                               $this->hookError = '<div class="error">' . "\n" . $status->getWikiText() .
+                               $this->hookError = '<div class="error">' . "\n" .
+                                       $status->getWikiText( false, false, $this->context->getLanguage() ) .
                                        '</div>';
                                return true;
                }
index 78f6ca9..9337270 100644 (file)
@@ -86,14 +86,6 @@ class FauxRequest extends WebRequest {
                return (string)$this->getVal( $name, $default );
        }
 
-       /**
-        * @return array
-        * @suppress PhanParamSignatureMismatch
-        */
-       public function getValues() {
-               return $this->data;
-       }
-
        /**
         * @return array
         */
index c4b57af..a8f3496 100644 (file)
@@ -704,7 +704,7 @@ class Html {
         * Return the HTML for a message box.
         * @since 1.31
         * @param string $html of contents of box
-        * @param string $className corresponding to box
+        * @param string|array $className corresponding to box
         * @param string $heading (optional)
         * @return string of HTML representing a box.
         */
@@ -718,32 +718,38 @@ class Html {
        /**
         * Return a warning box.
         * @since 1.31
+        * @since 1.34 $className optional parameter added
         * @param string $html of contents of box
+        * @param string $className (optional) corresponding to box
         * @return string of HTML representing a warning box.
         */
-       public static function warningBox( $html ) {
-               return self::messageBox( $html, 'warningbox' );
+       public static function warningBox( $html, $className = '' ) {
+               return self::messageBox( $html, [ 'warningbox', $className ] );
        }
 
        /**
         * Return an error box.
         * @since 1.31
+        * @since 1.34 $className optional parameter added
         * @param string $html of contents of error box
         * @param string $heading (optional)
+        * @param string $className (optional) corresponding to box
         * @return string of HTML representing an error box.
         */
-       public static function errorBox( $html, $heading = '' ) {
-               return self::messageBox( $html, 'errorbox', $heading );
+       public static function errorBox( $html, $heading = '', $className = '' ) {
+               return self::messageBox( $html, [ 'errorbox', $className ], $heading );
        }
 
        /**
         * Return a success box.
         * @since 1.31
+        * @since 1.34 $className optional parameter added
         * @param string $html of contents of box
+        * @param string $className (optional) corresponding to box
         * @return string of HTML representing a success box.
         */
-       public static function successBox( $html ) {
-               return self::messageBox( $html, 'successbox' );
+       public static function successBox( $html, $className = '' ) {
+               return self::messageBox( $html, [ 'successbox', $className ] );
        }
 
        /**
index f91477a..1a75714 100644 (file)
@@ -346,6 +346,10 @@ class MediaWiki {
                        return false;
                }
 
+               if ( $this->config->get( 'MainPageIsDomainRoot' ) && $request->getRequestURL() === '/' ) {
+                       return false;
+               }
+
                if ( $title->isSpecialPage() ) {
                        list( $name, $subpage ) = MediaWikiServices::getInstance()->getSpecialPageFactory()->
                                resolveAlias( $title->getDBkey() );
@@ -522,11 +526,15 @@ class MediaWiki {
                        try {
                                $this->main();
                        } catch ( ErrorPageError $e ) {
+                               $out = $this->context->getOutput();
+                               // TODO: Should ErrorPageError::report accept a OutputPage parameter?
+                               $e->report( ErrorPageError::STAGE_OUTPUT );
+
                                // T64091: while exceptions are convenient to bubble up GUI errors,
                                // they are not internal application faults. As with normal requests, this
                                // should commit, print the output, do deferred updates, jobs, and profiling.
                                $this->doPreOutputCommit();
-                               $e->report(); // display the GUI error
+                               $out->output(); // display the GUI error
                        }
                } catch ( Exception $e ) {
                        $context = $this->context;
index 55b4598..8d642e1 100644 (file)
@@ -258,7 +258,7 @@ HTML;
        <head>
                <meta charset="UTF-8" />
                <title>MediaWiki {$this->mwVersion}</title>
-               <style media='screen'>
+               <style media="screen">
                        body {
                                color: #000;
                                background-color: #fff;
@@ -266,7 +266,7 @@ HTML;
                                padding: 2em;
                                text-align: center;
                        }
-                       p, img, h1, h2, ul  {
+                       p, img, h1, h2, ul {
                                text-align: left;
                                margin: 0.5em 0 1em;
                        }
@@ -279,9 +279,9 @@ HTML;
                </style>
        </head>
        <body>
-               <img src="{$encLogo}" alt='The MediaWiki logo' />
+               <img src="{$encLogo}" alt="The MediaWiki logo" />
                <h1>MediaWiki {$this->mwVersion} internal error</h1>
-               <div class='error'>
+               <div class="error">
                <p>
                        {$shortHtml}
                </p>
index a1be271..3e639b9 100644 (file)
@@ -333,7 +333,9 @@ class ProtectionForm {
                );
 
                if ( !$status->isOK() ) {
-                       $this->show( $out->parseInlineAsInterface( $status->getWikiText() ) );
+                       $this->show( $out->parseInlineAsInterface(
+                               $status->getWikiText( false, false, $this->mContext->getLanguage() )
+                       ) );
                        return false;
                }
 
index 6821d89..6dfcf3c 100644 (file)
@@ -276,8 +276,7 @@ class Router {
                $request->setPathParams( array_map( 'rawurldecode', $match['params'] ) );
                $spec = $match['userData'];
                $objectFactorySpec = array_intersect_key( $spec,
-                       // @todo ObjectFactory supports more keys than this.
-                       [ 'factory' => true, 'class' => true, 'args' => true ] );
+                       [ 'factory' => true, 'class' => true, 'args' => true, 'services' => true ] );
                /** @var $handler Handler (annotation for PHPStorm) */
                $handler = $this->objectFactory->createObject( $objectFactorySpec );
                $handler->init( $this, $request, $spec, $this->responseFactory );
index 3ecef76..a5cf840 100644 (file)
@@ -1907,7 +1907,11 @@ class RevisionStore
         *               'content'- whether the actual content of the slots should be
         *               preloaded.
         * @param int $queryFlags
-        * @param Title|null $title
+        * @param Title|null $title The title to which all the revision rows belong, if there
+        *        is such a title and the caller has it handy, so we don't have to look it up again.
+        *        If this parameter is given and any of the rows has a rev_page_id that is different
+        *        from $title->getArticleID(), an InvalidArgumentException is thrown.
+        *
         * @return StatusValue a status with a RevisionRecord[] of successfully fetched revisions
         *                                         and an array of errors for the revisions failed to fetch.
         */
index 9843e81..6c15a06 100644 (file)
@@ -2137,7 +2137,7 @@ class Title implements LinkTarget, IDBAccessObject {
         * @return string String of the URL.
         */
        public function getLocalURL( $query = '', $query2 = false ) {
-               global $wgArticlePath, $wgScript, $wgServer, $wgRequest;
+               global $wgArticlePath, $wgScript, $wgServer, $wgRequest, $wgMainPageIsDomainRoot;
 
                $query = self::fixUrlQueryArgs( $query, $query2 );
 
@@ -2214,6 +2214,11 @@ class Title implements LinkTarget, IDBAccessObject {
                                $url = $wgServer . $url;
                        }
                }
+
+               if ( $wgMainPageIsDomainRoot && $this->isMainPage() && $query === '' ) {
+                       return '/';
+               }
+
                // Avoid PHP 7.1 warning from passing $this by reference
                $titleRef = $this;
                Hooks::run( 'GetLocalURL', [ &$titleRef, &$url, $query ] );
index 4d02204..3e5da0a 100644 (file)
@@ -38,7 +38,8 @@
                        "Vlad5250",
                        "Diralik",
                        "DmitTrix",
-                       "Марио"
+                       "Марио",
+                       "Katunchik"
                ]
        },
        "apihelp-main-extended-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> MediaWiki 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<p class=\"mw-apisandbox-link\"><strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].</p>",
        "apierror-cantoverwrite-sharedfile": "Целевой файл существует в общем репозитории и у вас нет прав перезаписать его.",
        "apierror-cantsend": "Вы не авторизованы, ваш электронный адрес не подтверждён или у вас нет прав на отправку электронной почты другим участникам, поэтому вы не можете отправить электронное письмо.",
        "apierror-cantundelete": "Невозможно восстановить: возможно, запрашиваемые версии не существуют или уже были восстановлены.",
+       "apierror-cantview-deleted-comment": "У вас нет разрешения на просмотр удаленных комментариев.",
+       "apierror-cantview-deleted-description": "У вас нет разрешения на просмотр описаний удаленных файлов.",
+       "apierror-cantview-deleted-metadata": "У вас нет разрешения на просмотр метаданных удаленных файлов.",
+       "apierror-cantview-deleted-revision-content": "У вас нет разрешения на просмотр содержимого удаленных редакций.",
        "apierror-changeauth-norequest": "Попытка создать запрос правки провалилась.",
        "apierror-chunk-too-small": "Минимальный размер кусочка — $1 {{PLURAL:$1|байт|байта|байт}}, если кусочек не является последним.",
        "apierror-cidrtoobroad": "Диапазоны $1 CIDR, шире /$2, не разрешены.",
index 7ee3751..cd5b4ce 100644 (file)
        "apierror-cantoverwrite-sharedfile": "目標檔案存在於分享儲存庫上,因此您沒有權限來覆蓋掉。",
        "apierror-cantsend": "您尚未登入,您沒有已確認的電子郵件地址,或是您未被允許發送電子郵件給其他人,因此您不能發送電子郵件。",
        "apierror-cantundelete": "無法取消刪除:請求的修訂可能不存在,或是可能已被取消刪除。",
+       "apierror-cantview-deleted-comment": "您沒有權限來檢視被刪除的註釋。",
        "apierror-cantview-deleted-description": "您沒有權限來檢視被刪除檔案的描述內容。",
        "apierror-cantview-deleted-metadata": "您沒有權限來檢視被刪除檔案的詮釋資料。",
+       "apierror-cantview-deleted-revision-content": "您沒有權限來檢視被刪除修訂的內容。",
        "apierror-changeauth-norequest": "建立更改請求失敗。",
        "apierror-chunk-too-small": "對於非最終塊,最小塊的大小為 $1 {{PLURAL:$1|位元組|位元組}}。",
        "apierror-cidrtoobroad": "不能接受超出 /$2 的 $1 CIDR 範圍。",
index 5fcf0e6..2448421 100644 (file)
@@ -26,9 +26,9 @@
  */
 class BadRequestError extends ErrorPageError {
 
-       public function report() {
+       public function report( $action = self::SEND_OUTPUT ) {
                global $wgOut;
                $wgOut->setStatusCode( 400 );
-               parent::report();
+               parent::report( $action );
        }
 }
index 4b18126..64216a4 100644 (file)
@@ -25,6 +25,8 @@
  * @ingroup Exception
  */
 class ErrorPageError extends MWException implements ILocalizedException {
+       const SEND_OUTPUT = 0;
+       const STAGE_OUTPUT = 1;
        public $title, $msg, $params;
 
        /**
@@ -60,13 +62,19 @@ class ErrorPageError extends MWException implements ILocalizedException {
                return wfMessage( $this->msg, $this->params );
        }
 
-       public function report() {
+       public function report( $action = self::SEND_OUTPUT ) {
                if ( self::isCommandLine() || defined( 'MW_API' ) ) {
                        parent::report();
                } else {
                        global $wgOut;
                        $wgOut->showErrorPage( $this->title, $this->msg, $this->params );
-                       $wgOut->output();
+                       // Allow skipping of the final output step, so that web-based page views
+                       // from MediaWiki.php, can inspect the staged OutputPage state, and perform
+                       // graceful shutdown via doPreOutputCommit first, just like for regular
+                       // output when there isn't an error page.
+                       if ( $action === self::SEND_OUTPUT ) {
+                               $wgOut->output();
+                       }
                }
        }
 }
index 87a3dc2..9fa1c7c 100644 (file)
@@ -67,10 +67,12 @@ class PermissionsError extends ErrorPageError {
                parent::__construct( 'permissionserrors', Message::newFromSpecifier( $errors[0] ) );
        }
 
-       public function report() {
+       public function report( $action = self::SEND_OUTPUT ) {
                global $wgOut;
 
                $wgOut->showPermissionsErrorPage( $this->errors, $this->permission );
-               $wgOut->output();
+               if ( $action === self::SEND_OUTPUT ) {
+                       $wgOut->output();
+               }
        }
 }
index bec0d90..cdeb402 100644 (file)
@@ -32,9 +32,9 @@ class ThrottledError extends ErrorPageError {
                );
        }
 
-       public function report() {
+       public function report( $action = ErrorPageError::SEND_OUTPUT ) {
                global $wgOut;
                $wgOut->setStatusCode( 429 );
-               parent::report();
+               parent::report( $action );
        }
 }
index 7a99765..ff992b0 100644 (file)
@@ -75,14 +75,15 @@ class UserNotLoggedIn extends ErrorPageError {
         * Redirect to Special:Userlogin if the specified message is compatible. Otherwise,
         * show an error page as usual.
         */
-       public function report() {
+       public function report( $action = self::SEND_OUTPUT ) {
                // If an unsupported message is used, don't try redirecting to Special:Userlogin,
                // since the message may not be compatible.
                if ( !in_array( $this->msg, LoginHelper::getValidErrorMessages() ) ) {
-                       parent::report();
+                       parent::report( $action );
+                       return;
                }
 
-               // Message is valid. Redirec to Special:Userlogin
+               // Message is valid. Redirect to Special:Userlogin
 
                $context = RequestContext::getMain();
 
@@ -98,6 +99,8 @@ class UserNotLoggedIn extends ErrorPageError {
                        'warning' => $this->msg,
                ] ) );
 
-               $output->output();
+               if ( $action === self::SEND_OUTPUT ) {
+                       $output->output();
+               }
        }
 }
index 7cfc8c2..b76f3da 100644 (file)
@@ -29,9 +29,9 @@ class LocalFileLockError extends ErrorPageError {
                );
        }
 
-       public function report() {
+       public function report( $action = self::SEND_OUTPUT ) {
                global $wgOut;
                $wgOut->setStatusCode( 429 );
-               parent::report();
+               parent::report( $action );
        }
 }
diff --git a/includes/htmlform/CollapsibleFieldsetLayout.php b/includes/htmlform/CollapsibleFieldsetLayout.php
new file mode 100644 (file)
index 0000000..804f1b9
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+class CollapsibleFieldsetLayout extends OOUI\FieldsetLayout {
+       public function __construct( array $config = [] ) {
+               parent::__construct( $config );
+
+               $this->addClasses( [ 'mw-collapsible' ] );
+               if ( isset( $config[ 'collapsed' ] ) && $config[ 'collapsed' ] ) {
+                       $this->addClasses( [ 'mw-collapsed' ] );
+               }
+               $this->header->addClasses( [ 'mw-collapsible-toggle' ] );
+               $this->group->addClasses( [ 'mw-collapsible-content' ] );
+
+               $this->header->appendContent(
+                       new OOUI\IconWidget( [
+                               'icon' => 'expand',
+                               'label' => wfMessage( 'collapsible-expand' )->text(),
+                       ] ),
+                       new OOUI\IconWidget( [
+                               'icon' => 'collapse',
+                               'label' => wfMessage( 'collapsible-collapse' )->text(),
+                       ] )
+               );
+
+               $this->header->setAttributes( [
+                       'role' => 'button',
+               ] );
+       }
+}
index baafa5e..94ba75e 100644 (file)
@@ -281,17 +281,10 @@ class OOUIHTMLForm extends HTMLForm {
 
        public function wrapForm( $html ) {
                if ( is_string( $this->mWrapperLegend ) ) {
-                       $classes = $this->mCollapsible ? [ 'mw-collapsible' ] : [];
-                       if ( $this->mCollapsed ) {
-                               $classes[] = 'mw-collapsed';
-                       }
-                       $content = new OOUI\FieldsetLayout( [
+                       $phpClass = $this->mCollapsible ? CollapsibleFieldsetLayout::class : OOUI\FieldsetLayout::class;
+                       $content = new $phpClass( [
                                'label' => $this->mWrapperLegend,
-                               'classes' => $classes,
-                               'group' => new OOUI\StackLayout( [
-                                       'expanded' => false,
-                                       'classes' => [ 'mw-collapsible-content' ],
-                               ] ),
+                               'collapsed' => $this->mCollapsed,
                                'items' => [
                                        new OOUI\Widget( [
                                                'content' => new OOUI\HtmlSnippet( $html )
index 510d26d..84e7b73 100644 (file)
@@ -37,8 +37,8 @@ class HttpRequestFactory {
         * Generate a new MWHttpRequest object
         * @param string $url Url to use
         * @param array $options Possible keys for the array:
-        *    - timeout             Timeout length in seconds
-        *    - connectTimeout      Timeout for connection, in seconds (curl only)
+        *    - timeout             Timeout length in seconds or 'default'
+        *    - connectTimeout      Timeout for connection, in seconds (curl only) or 'default'
         *    - postData            An array of key-value pairs or a url-encoded form data
         *    - proxy               The proxy to use.
         *                          Otherwise it will use $wgHTTPProxy (if set)
@@ -59,13 +59,12 @@ class HttpRequestFactory {
         *    - originalRequest     Information about the original request (as a WebRequest object or
         *                          an associative array with 'ip' and 'userAgent').
         * @codingStandardsIgnoreStart
-        * @phan-param array{timeout?:int,connectTimeout?:int,postData?:array,proxy?:string,noProxy?:bool,sslVerifyHost?:bool,sslVerifyCert?:bool,caInfo?:string,maxRedirects?:int,followRedirects?:bool,userAgent?:string,method?:string,logger?:\Psr\Log\LoggerInterface,username?:string,password?:string,originalRequest?:WebRequest|array{ip:string,userAgent:string}} $options
+        * @phan-param array{timeout?:int|string,connectTimeout?:int|string,postData?:array,proxy?:string,noProxy?:bool,sslVerifyHost?:bool,sslVerifyCert?:bool,caInfo?:string,maxRedirects?:int,followRedirects?:bool,userAgent?:string,method?:string,logger?:\Psr\Log\LoggerInterface,username?:string,password?:string,originalRequest?:\WebRequest|array{ip:string,userAgent:string}} $options
         * @codingStandardsIgnoreEnd
         * @param string $caller The method making this request, for profiling
         * @throws RuntimeException
         * @return MWHttpRequest
         * @see MWHttpRequest::__construct
-        * @suppress PhanUndeclaredTypeParameter
         */
        public function create( $url, array $options = [], $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
index d1c14ae..0f3096e 100644 (file)
@@ -89,7 +89,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
         * @param string $url Url to use. If protocol-relative, will be expanded to an http:// URL
         * @param array $options (optional) extra params to pass (see HttpRequestFactory::create())
         * @codingStandardsIgnoreStart
-        * @phan-param array{timeout?:int,connectTimeout?:int,postData?:array,proxy?:string,noProxy?:bool,sslVerifyHost?:bool,sslVerifyCert?:bool,caInfo?:string,maxRedirects?:int,followRedirects?:bool,userAgent?:string,logger?:LoggerInterface,username?:string,password?:string,originalRequest?:WebRequest|array{ip:string,userAgent:string},method?:string} $options
+        * @phan-param array{timeout?:int|string,connectTimeout?:int|string,postData?:array,proxy?:string,noProxy?:bool,sslVerifyHost?:bool,sslVerifyCert?:bool,caInfo?:string,maxRedirects?:int,followRedirects?:bool,userAgent?:string,logger?:LoggerInterface,username?:string,password?:string,originalRequest?:WebRequest|array{ip:string,userAgent:string},method?:string} $options
         * @codingStandardsIgnoreEnd
         * @param string $caller The method making this request, for profiling
         * @param Profiler|null $profiler An instance of the profiler for profiling, or null
index ac8c9e6..ce7e29d 100644 (file)
@@ -690,7 +690,7 @@ abstract class DatabaseInstaller {
                        $this->getPasswordBox( 'wgDBpassword', 'config-db-password' ) .
                        $this->parent->getHelpBox( 'config-db-web-help' );
                if ( $noCreateMsg ) {
-                       $s .= $this->parent->getWarningBox( wfMessage( $noCreateMsg )->plain() );
+                       $s .= Html::warningBox( wfMessage( $noCreateMsg )->plain(), 'config-warning-box' );
                } else {
                        $s .= $this->getCheckBox( '_CreateDBAccount', 'config-db-web-create' );
                }
index b6e90a9..21ad210 100644 (file)
@@ -390,7 +390,8 @@ class WebInstaller extends Installer {
                        );
                }
                $text = $msg->useDatabase( false )->plain();
-               $this->output->addHTML( $this->getErrorBox( $text ) );
+               $box = Html::errorBox( $text, '', 'config-error-box' );
+               $this->output->addHTML( $box );
        }
 
        /**
@@ -1046,9 +1047,9 @@ class WebInstaller extends Installer {
                        $text = $status->getWikiText();
 
                        if ( $status->isOK() ) {
-                               $box = $this->getWarningBox( $text );
+                               $box = Html::warningBox( $text, 'config-warning-box' );
                        } else {
-                               $box = $this->getErrorBox( $text );
+                               $box = Html::errorBox( $text, '', 'config-error-box' );
                        }
 
                        $this->output->addHTML( $box );
index 7bec49a..3521fa1 100644 (file)
@@ -137,7 +137,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        }
                } else {
                        $skinHtml .=
-                               $this->parent->getWarningBox( wfMessage( 'config-skins-missing' )->plain() ) .
+                               Html::warningBox( wfMessage( 'config-skins-missing' )->plain(), 'config-warning-box' ) .
                                Html::hidden( 'config_wgDefaultSkin', $chosenSkinName );
                }
 
index be55c32..07e2e75 100644 (file)
@@ -36,7 +36,7 @@ class WebInstallerRestart extends WebInstallerPage {
                }
 
                $this->startForm();
-               $s = $this->parent->getWarningBox( wfMessage( 'config-help-restart' )->plain() );
+               $s = Html::warningBox( wfMessage( 'config-help-restart' )->plain(), '', 'config-warning-box' );
                $this->addHTML( $s );
                $this->endForm( 'restart' );
 
index ba5af6c..6195104 100644 (file)
        "config-restart": "Ja, start på nytt",
        "config-welcome": "=== Miljøsjekker ===\nGrunnleggende sjekker utføres for å se om dette miljøet er egnet for en MediaWiki-installasjon.\nDu bør oppgi resultatene fra disse sjekkene om du trenger hjelp under installasjonen.",
        "config-welcome-section-copyright": "=== Opphavsrett og vilkår ===\n\n$1\n\nMediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.\n\nDette programmet er distribuert i håp om at det vil være nyttig, men '''uten noen garanti'''; ikke engang implisitt garanti av '''salgbarhet''' eller '''egnethet for et bestemt formål'''.\nSe GNU General Public License for flere detaljer.\n\nDu skal ha mottatt [$2 en kopi av GNU General Public License] sammen med dette programmet; hvis ikke, skriv til Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA eller [https://www.gnu.org/copyleft/gpl.html les det på nettet].",
-       "config-sidebar": "* [https://www.mediawiki.org MediaWiki hjem]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Brukerguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratorguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ OSS]\n----\n* <doclink href=Readme>Les meg</doclink>\n* <doclink href=ReleaseNotes>Utgivelsesnotater</doclink>\n* <doclink href=Copying>Kopiering</doclink>\n* <doclink href=UpgradeDoc>Oppgradering</doclink>",
+       "config-sidebar": "* [https://www.mediawiki.org MediaWiki.org]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Brukerguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Administratorguide]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ OSS]",
+       "config-sidebar-readme": "Les meg",
+       "config-sidebar-relnotes": "Utgivelsesnotater",
+       "config-sidebar-license": "Kopiering",
+       "config-sidebar-upgrade": "Oppgradering",
        "config-env-good": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
        "config-env-bad": "Miljøet har blitt sjekket.\nDu kan ikke installere MediaWiki.",
        "config-env-php": "PHP $1 er installert.",
        "config-env-hhvm": "HHVM $1 er installert.",
-       "config-unicode-using-intl": "Bruker [https://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
-       "config-unicode-pure-php-warning": "'''Advarsel''': [https://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
+       "config-unicode-using-intl": "Bruker [https://php.net/manual/en/book.intl.php PHPs intl-utvidelse] for Unicode-normalisering.",
+       "config-unicode-pure-php-warning": "<strong>Advarsel:</strong> [https://php.net/manual/en/book.intl.php PHPs intl-utvidelse] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese om [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
        "config-unicode-update-warning": "<strong>Advarsel:</strong> Den installerte versjonen av Unicode-normalisereren bruker en eldre versjon av [http://site.icu-project.org/ ICU-prosjektets] bibliotek.\nDu bør [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations oppgradere] om du er bekymret for å bruke Unicode.",
        "config-no-db": "Fant ingen passende databasedriver! Du må installere en databasedriver for PHP.\nFølgende {{PLURAL:$2|databasetype|databasetyper}} støttes: $1\n\nOm du kompilerte PHP selv, rekonfigurer den med en aktivert databaseklient, for eksempel ved å bruke <code>./configure --with-mysqli</code>.\nOm du installerte PHP fra en Debian- eller Ubuntu-pakke, må du også installere for eksempel <code>php-mysql</code>-pakken.",
-       "config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
+       "config-outdated-sqlite": "<strong>Advarsel:</strong> Du har SQLite $2, som er en eldre versjon enn minimumskravet SQLite $1. SQLite vil ikke være tilgjengelig.",
        "config-no-fts3": "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
        "config-pcre-old": "'''Alvorlig:''' PCRE $1 eller senere kreves.\nDin PHP-kode er lenket med PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Nærmere informasjon].",
        "config-pcre-no-utf8": "'''Fatal''': PHPs PCRE modul ser ut til å være kompilert uten PCRE_UTF8-støtte.\nMediaWiki krever UTF-8-støtte for å fungere riktig.",
@@ -83,7 +87,7 @@
        "config-uploads-not-safe": "'''Advarsel:''' Din standardmappe for opplastinger <code>$1</code> er sårbar for kjøring av vilkårlige skript.\nSelv om MediaWiki sjekker alle opplastede filer for sikkerhetstrusler er det sterkt anbefalt å [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security lukke denne sikkerhetssårbarheten] før du aktiverer opplastinger.",
        "config-no-cli-uploads-check": "'''Advarsel:''' Din standard-katalog for opplastinger (<code>$1</code>) er ikke kontrollert for sårbarhet overfor vilkårlig skript-kjøring under CLI-installasjonen.",
        "config-brokenlibxml": "Ditt system bruker en kombinasjon av PHP- og libxml2-versjoner som har feil og kan forårsake skjult dataødeleggelse i MediaWiki og andre web-applikasjoner.\nOppgrader til libxml2 2.7.3 eller nyere ([https://bugs.php.net/bug.php?id=45996 Feil-liste for PHP]).\nInstalleringen ble abortert.",
-       "config-suhosin-max-value-length": "Suhosin er installert og begrenser GET-parameterlengder til $1 bytes. MediaWiki sin ResourceLoader-komponent klarer å komme rundt denne begrensningen, men med redusert ytelse. Om mulig bør du sette <code>suhosin.get.max_value_length</code> til minst 1024 i <code>php.ini</code>, og sette <code>$wgResourceLoaderMaxQueryLength</code> til samme verdi i <code>LocalSettings.php</code>.",
+       "config-suhosin-max-value-length": "Suhosin er installert og begrenser GET-parameterlengder til $1 bytes.\nMediaWiki krever at <code>suoshin.get.max_value_length</code> er minst $2. Slå av denne innstillingen eller øk verdien til $3 i <code>php.ini</code>.",
        "config-using-32bit": "<strong>Adversel:</strong> Systemet ditt ser ut til å være 32-bit-basert, mens dette er [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit not advised].",
        "config-db-type": "Databasetype:",
        "config-db-host": "Databasevert:",
index 7be3b7d..464e68c 100644 (file)
@@ -850,27 +850,44 @@ abstract class DatabaseMysqlBase extends Database {
                }
 
                if ( $this->getLBInfo( 'is static' ) === true ) {
+                       $this->queryLogger->debug(
+                               "Bypassed replication wait; database has a static dataset",
+                               $this->getLogContext( [ 'method' => __METHOD__ ] )
+                       );
+
                        return 0; // this is a copy of a read-only dataset with no master DB
                } elseif ( $this->lastKnownReplicaPos && $this->lastKnownReplicaPos->hasReached( $pos ) ) {
+                       $this->queryLogger->debug(
+                               "Bypassed replication wait; replication already known to have reached $pos",
+                               $this->getLogContext( [ 'method' => __METHOD__ ] )
+                       );
+
                        return 0; // already reached this point for sure
                }
 
                // Call doQuery() directly, to avoid opening a transaction if DBO_TRX is set
                if ( $pos->getGTIDs() ) {
-                       // Ignore GTIDs from domains exclusive to the master DB (presumably inactive)
-                       $rpos = $this->getReplicaPos();
-                       $gtidsWait = $rpos ? MySQLMasterPos::getCommonDomainGTIDs( $pos, $rpos ) : [];
+                       // Get the GTIDs from this replica server too see the domains (channels)
+                       $refPos = $this->getReplicaPos();
+                       if ( !$refPos ) {
+                               $this->queryLogger->error(
+                                       "Could not get replication position",
+                                       $this->getLogContext( [ 'method' => __METHOD__ ] )
+                               );
+
+                               return -1; // this is the master itself?
+                       }
+                       // GTIDs with domains (channels) that are active and are present on the replica
+                       $gtidsWait = $pos::getRelevantActiveGTIDs( $pos, $refPos );
                        if ( !$gtidsWait ) {
                                $this->queryLogger->error(
-                                       "No GTIDs with the same domain between master ($pos) and replica ($rpos)",
-                                       $this->getLogContext( [
-                                               'method' => __METHOD__,
-                                       ] )
+                                       "No active GTIDs in $pos share a domain with those in $refPos",
+                                       $this->getLogContext( [ 'method' => __METHOD__, 'activeDomain' => $pos ] )
                                );
 
                                return -1; // $pos is from the wrong cluster?
                        }
-                       // Wait on the GTID set (MariaDB only)
+                       // Wait on the GTID set
                        $gtidArg = $this->addQuotes( implode( ',', $gtidsWait ) );
                        if ( strpos( $gtidArg, ':' ) !== false ) {
                                // MySQL GTIDs, e.g "source_id:transaction_id"
@@ -886,28 +903,28 @@ abstract class DatabaseMysqlBase extends Database {
                        $sql = "SELECT MASTER_POS_WAIT($encFile, $encPos, $timeout)";
                }
 
-               list( $res, $err ) = $this->executeQuery( $sql, __METHOD__, self::QUERY_IGNORE_DBO_TRX );
-               $row = $res ? $this->fetchRow( $res ) : false;
-               if ( !$row ) {
-                       throw new DBExpectedError( $this, "Replication wait failed: {$err}" );
-               }
+               $res = $this->query( $sql, __METHOD__, self::QUERY_IGNORE_DBO_TRX );
+               $row = $this->fetchRow( $res );
 
                // Result can be NULL (error), -1 (timeout), or 0+ per the MySQL manual
                $status = ( $row[0] !== null ) ? intval( $row[0] ) : null;
                if ( $status === null ) {
-                       if ( !$pos->getGTIDs() ) {
-                               // T126436: jobs programmed to wait on master positions might be referencing
-                               // binlogs with an old master hostname; this makes MASTER_POS_WAIT() return null.
-                               // Try to detect this case and treat the replica DB as having reached the given
-                               // position (any master switchover already requires that the new master be caught
-                               // up before the switch).
-                               $replicationPos = $this->getReplicaPos();
-                               if ( $replicationPos && !$replicationPos->channelsMatch( $pos ) ) {
-                                       $this->lastKnownReplicaPos = $replicationPos;
-                                       $status = 0;
-                               }
-                       }
+                       $this->queryLogger->error(
+                               "An error occurred while waiting for replication to reach $pos",
+                               $this->getLogContext( [ 'method' => __METHOD__, 'sql' => $sql ] )
+                       );
+               } elseif ( $status < 0 ) {
+                       $this->queryLogger->error(
+                               "Timed out waiting for replication to reach $pos",
+                               $this->getLogContext( [
+                                       'method' => __METHOD__, 'sql' => $sql, 'timeout' => $timeout
+                               ] )
+                       );
                } elseif ( $status >= 0 ) {
+                       $this->queryLogger->debug(
+                               "Replication has reached $pos",
+                               $this->getLogContext( [ 'method' => __METHOD__ ] )
+                       );
                        // Remember that this position was reached to save queries next time
                        $this->lastKnownReplicaPos = $pos;
                }
index fa2c1db..e1b8f9a 100644 (file)
@@ -190,39 +190,69 @@ class MySQLMasterPos implements DBMasterPos {
        }
 
        /**
+        * Set the GTID domain known to be used in new commits on a replication stream of interest
+        *
+        * This makes getRelevantActiveGTIDs() filter out GTIDs from other domains
+        *
+        * @see MySQLMasterPos::getRelevantActiveGTIDs()
+        * @see https://mariadb.com/kb/en/library/gtid/#gtid_domain_id
+        *
         * @param int|null $id @@gtid_domain_id of the active replication stream
+        * @return MySQLMasterPos This instance (since 1.34)
         * @since 1.31
         */
        public function setActiveDomain( $id ) {
                $this->activeDomain = (int)$id;
+
+               return $this;
        }
 
        /**
+        * Set the server ID known to be used in new commits on a replication stream of interest
+        *
+        * This makes getRelevantActiveGTIDs() filter out GTIDs from other origin servers
+        *
+        * @see MySQLMasterPos::getRelevantActiveGTIDs()
+        *
         * @param int|null $id @@server_id of the server were writes originate
+        * @return MySQLMasterPos This instance (since 1.34)
         * @since 1.31
         */
        public function setActiveOriginServerId( $id ) {
                $this->activeServerId = (int)$id;
+
+               return $this;
        }
 
        /**
+        * Set the server UUID known to be used in new commits on a replication stream of interest
+        *
+        * This makes getRelevantActiveGTIDs() filter out GTIDs from other origin servers
+        *
+        * @see MySQLMasterPos::getRelevantActiveGTIDs()
+        *
         * @param string|null $id @@server_uuid of the server were writes originate
+        * @return MySQLMasterPos This instance (since 1.34)
         * @since 1.31
         */
        public function setActiveOriginServerUUID( $id ) {
                $this->activeServerUUID = $id;
+
+               return $this;
        }
 
        /**
         * @param MySQLMasterPos $pos
         * @param MySQLMasterPos $refPos
-        * @return string[] List of GTIDs from $pos that have domains in $refPos
-        * @since 1.31
+        * @return string[] List of active GTIDs from $pos that have domains in $refPos
+        * @since 1.34
         */
-       public static function getCommonDomainGTIDs( MySQLMasterPos $pos, MySQLMasterPos $refPos ) {
-               return array_values(
-                       array_intersect_key( $pos->gtids, $refPos->getActiveGtidCoordinates() )
-               );
+       public static function getRelevantActiveGTIDs( MySQLMasterPos $pos, MySQLMasterPos $refPos ) {
+               return array_values( array_intersect_key(
+                       $pos->gtids,
+                       $pos->getActiveGtidCoordinates(),
+                       $refPos->gtids
+               ) );
        }
 
        /**
index 781df06..0b78a36 100644 (file)
@@ -361,6 +361,11 @@ class LogPager extends ReverseChronologicalPager {
                if ( !$this->mTagFilter && !array_key_exists( 'ls_field', $this->mConds ) ) {
                        $options[] = 'STRAIGHT_JOIN';
                }
+               if ( $this->performer !== '' ) {
+                       // T223151: MariaDB's optimizer, at least 10.1, likes to choose a wildly bad plan for
+                       // some reason for this code path. Tell it not to use the wrong index it wants to pick.
+                       $options['IGNORE INDEX'] = [ 'logging' => [ 'times' ] ];
+               }
 
                $info = [
                        'tables' => $tables,
index 6aeb038..4b37181 100644 (file)
@@ -808,7 +808,9 @@ class Article implements Page {
                                                        $outputPage->enableClientCache( false );
                                                        $outputPage->setRobotPolicy( 'noindex,nofollow' );
 
-                                                       $errortext = $error->getWikiText( false, 'view-pool-error' );
+                                                       $errortext = $error->getWikiText(
+                                                               false, 'view-pool-error', $this->getContext()->getLanguage()
+                                                       );
                                                        $outputPage->wrapWikiTextAsInterface( 'errorbox', $errortext );
                                                }
                                                # Connection or timeout error
@@ -2121,7 +2123,7 @@ class Article implements Page {
                        if ( $error == '' ) {
                                $outputPage->wrapWikiTextAsInterface(
                                        'error mw-error-cannotdelete',
-                                       $status->getWikiText()
+                                       $status->getWikiText( false, false, $context->getLanguage() )
                                );
                                $deleteLogPage = new LogPage( 'delete' );
                                $outputPage->addHTML( Xml::element( 'h2', null, $deleteLogPage->getName()->text() ) );
index ec1628f..9ec5834 100644 (file)
@@ -910,7 +910,7 @@ class Parser {
         */
        public function setTitle( $t ) {
                if ( !$t ) {
-                       $t = Title::newFromText( 'NO TITLE' );
+                       $t = Title::makeTitle( NS_SPECIAL, 'Badtitle/Parser' );
                }
 
                if ( $t->hasFragment() ) {
index 3e2a9a2..aa7a6d6 100644 (file)
@@ -176,13 +176,13 @@ class MediaWikiSite extends Site {
         *
         * @param string|bool $pageName Page name or false (default: false)
         *
-        * @return string|bool|null
+        * @return string|null
         */
        public function getPageUrl( $pageName = false ) {
                $url = $this->getLinkPath();
 
-               if ( $url === false ) {
-                       return false;
+               if ( $url === null ) {
+                       return null;
                }
 
                if ( $pageName !== false ) {
index 10711a6..401f6e4 100644 (file)
@@ -354,7 +354,7 @@ class Site implements Serializable {
 
        /**
         * Returns the full URL for the given page on the site.
-        * Or false if the needed information is not known.
+        * Or null if the needed information is not known.
         *
         * This generated URL is usually based upon the path returned by getLinkPath(),
         * but this is not a requirement.
@@ -365,13 +365,13 @@ class Site implements Serializable {
         *
         * @param bool|string $pageName
         *
-        * @return string|bool|null
+        * @return string|null
         */
        public function getPageUrl( $pageName = false ) {
                $url = $this->getLinkPath();
 
-               if ( $url === false ) {
-                       return false;
+               if ( $url === null ) {
+                       return null;
                }
 
                if ( $pageName !== false ) {
index 94be852..8be029a 100644 (file)
@@ -441,7 +441,9 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
                }
                if ( $extraMessages ) {
                        $extraMessages = Status::wrap( $extraMessages );
-                       $out->addWikiTextAsInterface( $extraMessages->getWikiText() );
+                       $out->addWikiTextAsInterface(
+                               $extraMessages->getWikiText( false, false, $this->getLanguage() )
+                       );
                }
 
                $out->addHTML( $injected_html );
index 2c42cd3..dc31eba 100644 (file)
@@ -141,7 +141,7 @@ class SpecialConfirmEmail extends UnlistedSpecialPage {
                        return Status::newGood( $this->msg( 'confirmemail_sent' )->text() );
                } else {
                        return Status::newFatal( new RawMessage(
-                               $status->getWikiText( 'confirmemail_sendfailed' )
+                               $status->getWikiText( 'confirmemail_sendfailed', false, $this->getLanguage() )
                        ) );
                }
        }
index e8b85fa..8f92cd5 100644 (file)
@@ -23,7 +23,6 @@
 
 use MediaWiki\Block\DatabaseBlock;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Widget\DateInputWidget;
 
 /**
  * Special:Contributions, show user contributions in a paged list
@@ -43,11 +42,16 @@ class SpecialContributions extends IncludableSpecialPage {
                $out = $this->getOutput();
                // Modules required for viewing the list of contributions (also when included on other pages)
                $out->addModuleStyles( [
+                       'jquery.makeCollapsible.styles',
                        'mediawiki.interface.helpers.styles',
                        'mediawiki.special',
                        'mediawiki.special.changeslist',
                ] );
-               $out->addModules( 'mediawiki.special.recentchanges' );
+               $out->addModules( [
+                       'mediawiki.special.recentchanges',
+                       // Certain skins e.g. Minerva might have disabled this module.
+                       'mediawiki.page.ready'
+               ] );
                $this->addHelpLink( 'Help:User contributions' );
 
                $this->opts = [];
@@ -59,7 +63,7 @@ class SpecialContributions extends IncludableSpecialPage {
 
                if ( !strlen( $target ) ) {
                        if ( !$this->including() ) {
-                               $out->addHTML( $this->getForm() );
+                               $out->addHTML( $this->getForm( $this->opts ) );
                        }
 
                        return;
@@ -77,7 +81,7 @@ class SpecialContributions extends IncludableSpecialPage {
                if ( ExternalUserNames::isExternal( $target ) ) {
                        $userObj = User::newFromName( $target, false );
                        if ( !$userObj ) {
-                               $out->addHTML( $this->getForm() );
+                               $out->addHTML( $this->getForm( $this->opts ) );
                                return;
                        }
 
@@ -89,12 +93,12 @@ class SpecialContributions extends IncludableSpecialPage {
                } else {
                        $nt = Title::makeTitleSafe( NS_USER, $target );
                        if ( !$nt ) {
-                               $out->addHTML( $this->getForm() );
+                               $out->addHTML( $this->getForm( $this->opts ) );
                                return;
                        }
                        $userObj = User::newFromName( $nt->getText(), false );
                        if ( !$userObj ) {
-                               $out->addHTML( $this->getForm() );
+                               $out->addHTML( $this->getForm( $this->opts ) );
                                return;
                        }
                        $id = $userObj->getId();
@@ -114,14 +118,23 @@ class SpecialContributions extends IncludableSpecialPage {
                }
 
                $ns = $request->getVal( 'namespace', null );
-               if ( $ns !== null && $ns !== '' ) {
+               if ( $ns !== null && $ns !== '' && $ns !== 'all' ) {
                        $this->opts['namespace'] = intval( $ns );
                } else {
                        $this->opts['namespace'] = '';
                }
 
+               // Backwards compatibility: Before using OOUI form the old HTML form had
+               // fields for nsInvert and associated. These have now been replaced with the
+               // wpFilters query string parameters. These are retained to keep old URIs working.
                $this->opts['associated'] = $request->getBool( 'associated' );
                $this->opts['nsInvert'] = (bool)$request->getVal( 'nsInvert' );
+               $nsFilters = $request->getArray( 'wpfilters', null );
+               if ( $nsFilters !== null ) {
+                       $this->opts['associated'] = in_array( 'associated', $nsFilters );
+                       $this->opts['nsInvert'] = in_array( 'nsInvert', $nsFilters );
+               }
+
                $this->opts['tagfilter'] = (string)$request->getVal( 'tagfilter' );
 
                // Allows reverts to have the bot flag in recent changes. It is just here to
@@ -149,7 +162,7 @@ class SpecialContributions extends IncludableSpecialPage {
                                "<div class=\"mw-negative-namespace-not-supported error\">\n\$1\n</div>",
                                [ 'negative-namespace-not-supported' ]
                        );
-                       $out->addHTML( $this->getForm() );
+                       $out->addHTML( $this->getForm( $this->opts ) );
                        return;
                }
 
@@ -201,9 +214,6 @@ class SpecialContributions extends IncludableSpecialPage {
                $this->addFeedLinks( $feedParams );
 
                if ( Hooks::run( 'SpecialContributionsBeforeMainOutput', [ $id, $userObj, $this ] ) ) {
-                       if ( !$this->including() ) {
-                               $out->addHTML( $this->getForm() );
-                       }
                        $pager = new ContribsPager( $this->getContext(), [
                                'target' => $target,
                                'namespace' => $this->opts['namespace'],
@@ -217,6 +227,9 @@ class SpecialContributions extends IncludableSpecialPage {
                                'nsInvert' => $this->opts['nsInvert'],
                                'associated' => $this->opts['associated'],
                        ], $this->getLinkRenderer() );
+                       if ( !$this->including() ) {
+                               $out->addHTML( $this->getForm( $this->opts ) );
+                       }
 
                        if ( IP::isValidRange( $target ) && !$pager->isQueryableRange( $target ) ) {
                                // Valid range, but outside CIDR limit.
@@ -458,52 +471,12 @@ class SpecialContributions extends IncludableSpecialPage {
 
        /**
         * Generates the namespace selector form with hidden attributes.
+        * @param array $pagerOptions with keys contribs, user, deletedOnly, limit, target, topOnly,
+        *  newOnly, hideMinor, namespace, associated, nsInvert, tagfilter, year, start, end
         * @return string HTML fragment
         */
-       protected function getForm() {
+       protected function getForm( array $pagerOptions ) {
                $this->opts['title'] = $this->getPageTitle()->getPrefixedText();
-               if ( !isset( $this->opts['target'] ) ) {
-                       $this->opts['target'] = '';
-               } else {
-                       $this->opts['target'] = str_replace( '_', ' ', $this->opts['target'] );
-               }
-
-               if ( !isset( $this->opts['namespace'] ) ) {
-                       $this->opts['namespace'] = '';
-               }
-
-               if ( !isset( $this->opts['nsInvert'] ) ) {
-                       $this->opts['nsInvert'] = '';
-               }
-
-               if ( !isset( $this->opts['associated'] ) ) {
-                       $this->opts['associated'] = false;
-               }
-
-               if ( !isset( $this->opts['start'] ) ) {
-                       $this->opts['start'] = '';
-               }
-
-               if ( !isset( $this->opts['end'] ) ) {
-                       $this->opts['end'] = '';
-               }
-
-               if ( !isset( $this->opts['tagfilter'] ) ) {
-                       $this->opts['tagfilter'] = '';
-               }
-
-               if ( !isset( $this->opts['topOnly'] ) ) {
-                       $this->opts['topOnly'] = false;
-               }
-
-               if ( !isset( $this->opts['newOnly'] ) ) {
-                       $this->opts['newOnly'] = false;
-               }
-
-               if ( !isset( $this->opts['hideMinor'] ) ) {
-                       $this->opts['hideMinor'] = false;
-               }
-
                // Modules required only for the form
                $this->getOutput()->addModules( [
                        'mediawiki.userSuggest',
@@ -511,15 +484,7 @@ class SpecialContributions extends IncludableSpecialPage {
                ] );
                $this->getOutput()->addModuleStyles( 'mediawiki.widgets.DateInputWidget.styles' );
                $this->getOutput()->enableOOUI();
-
-               $form = Html::openElement(
-                       'form',
-                       [
-                               'method' => 'get',
-                               'action' => wfScript(),
-                               'class' => 'mw-contributions-form'
-                       ]
-               );
+               $fields = [];
 
                # Add hidden params for tracking except for parameters in $skipParameters
                $skipParameters = [
@@ -527,7 +492,6 @@ class SpecialContributions extends IncludableSpecialPage {
                        'nsInvert',
                        'deletedOnly',
                        'target',
-                       'contribs',
                        'year',
                        'month',
                        'start',
@@ -543,207 +507,171 @@ class SpecialContributions extends IncludableSpecialPage {
                        if ( in_array( $name, $skipParameters ) ) {
                                continue;
                        }
-                       $form .= "\t" . Html::hidden( $name, $value ) . "\n";
-               }
-
-               $tagFilter = ChangeTags::buildTagFilterSelector(
-                       $this->opts['tagfilter'], false, $this->getContext() );
-
-               if ( $tagFilter ) {
-                       $filterSelection = Html::rawElement(
-                               'div',
-                               [],
-                               implode( "\u{00A0}", $tagFilter )
-                       );
-               } else {
-                       $filterSelection = Html::rawElement( 'div', [], '' );
-               }
-
-               $labelUsername = Xml::label(
-                       $this->msg( 'sp-contributions-username' )->text(),
-                       'mw-target-user-or-ip'
-               );
-               $input = Html::input(
-                       'target',
-                       $this->opts['target'],
-                       'text',
-                       [
-                               'id' => 'mw-target-user-or-ip',
-                               'size' => '40',
-                               'class' => [
-                                       'mw-input',
-                                       'mw-ui-input-inline',
-                                       'mw-autocomplete-user', // used by mediawiki.userSuggest
-                               ],
-                       ] + (
-                               // Only autofocus if target hasn't been specified
-                               $this->opts['target'] ? [] : [ 'autofocus' => true ]
-                       )
-               );
-
-               $targetSelection = Html::rawElement(
-                       'div',
-                       [],
-                       $labelUsername . ' ' . $input . ' '
-               );
 
-               $hidden = $this->opts['namespace'] === '' ? ' mw-input-hidden' : '';
-               $namespaceSelection = Xml::tags(
-                       'div',
-                       [],
-                       Xml::label(
-                               $this->msg( 'namespace' )->text(),
-                               'namespace'
-                       ) . "\u{00A0}" .
-                       Html::namespaceSelector(
-                               [ 'selected' => $this->opts['namespace'], 'all' => '', 'in-user-lang' => true ],
-                               [
-                                       'name' => 'namespace',
-                                       'id' => 'namespace',
-                                       'class' => 'namespaceselector',
-                               ]
-                       ) . "\u{00A0}" .
-                               Html::rawElement(
-                                       'span',
-                                       [ 'class' => 'mw-input-with-label' . $hidden ],
-                                       Xml::checkLabel(
-                                               $this->msg( 'invert' )->text(),
-                                               'nsInvert',
-                                               'nsinvert',
-                                               $this->opts['nsInvert'],
-                                               [
-                                                       'title' => $this->msg( 'tooltip-invert' )->text(),
-                                                       'class' => 'mw-input'
-                                               ]
-                                       ) . "\u{00A0}"
-                               ) .
-                               Html::rawElement( 'span', [ 'class' => 'mw-input-with-label' . $hidden ],
-                                       Xml::checkLabel(
-                                               $this->msg( 'namespace_association' )->text(),
-                                               'associated',
-                                               'nsassociated',
-                                               $this->opts['associated'],
-                                               [
-                                                       'title' => $this->msg( 'tooltip-namespace_association' )->text(),
-                                                       'class' => 'mw-input'
-                                               ]
-                                       ) . "\u{00A0}"
-                               )
-               );
+                       $fields[$name] = [
+                               'name' => $name,
+                               'type' => 'hidden',
+                               'default' => $value,
+                       ];
+               }
+
+               $target = $this->opts['target'] ?? null;
+               $fields['target'] = [
+                       'type' => 'text',
+                       'cssclass' => 'mw-autocomplete-user mw-ui-input-inline mw-input',
+                       'default' => $target ?
+                               str_replace( '_', ' ', $target ) : '' ,
+                       'label' => $this->msg( 'sp-contributions-username' )->text(),
+                       'name' => 'target',
+                       'id' => 'mw-target-user-or-ip',
+                       'size' => 40,
+                       'autofocus' => !$target,
+                       'section' => 'contribs-top',
+               ];
 
-               $filters = [];
+               $ns = $this->opts['namespace'] ?? null;
+               $fields['namespace'] = [
+                       'type' => 'namespaceselect',
+                       'label' => $this->msg( 'namespace' )->text(),
+                       'name' => 'namespace',
+                       'cssclass' => 'namespaceselector',
+                       'default' => $ns,
+                       'id' => 'namespace',
+                       'section' => 'contribs-top',
+               ];
+               $request = $this->getRequest();
+               $nsFilters = $request->getArray( 'wpfilters' );
+               $fields['nsFilters'] = [
+                       'class' => 'HTMLMultiSelectField',
+                       'label' => '',
+                       'name' => 'wpfilters',
+                       'flatlist' => true,
+                       // Only shown when namespaces are selected.
+                       'cssclass' => $ns === '' ?
+                               'contribs-ns-filters mw-input-with-label mw-input-hidden' :
+                               'contribs-ns-filters mw-input-with-label',
+                       // `contribs-ns-filters` class allows these fields to be toggled on/off by JavaScript.
+                       // See resources/src/mediawiki.special.recentchanges.js
+                       'infusable' => true,
+                       'options' => [
+                               $this->msg( 'invert' )->text() => 'nsInvert',
+                               $this->msg( 'namespace_association' )->text() => 'associated',
+                       ],
+                       'default' => $nsFilters,
+                       'section' => 'contribs-top',
+               ];
+               $fields['tagfilter'] = [
+                       'type' => 'tagfilter',
+                       'cssclass' => 'mw-tagfilter-input',
+                       'id' => 'tagfilter',
+                       'label-message' => [ 'tag-filter', 'parse' ],
+                       'name' => 'tagfilter',
+                       'size' => 20,
+                       'section' => 'contribs-top',
+               ];
 
                if ( MediaWikiServices::getInstance()
-                               ->getPermissionManager()
-                               ->userHasRight( $this->getUser(), 'deletedhistory' )
+                       ->getPermissionManager()
+                       ->userHasRight( $this->getUser(), 'deletedhistory' )
                ) {
-                       $filters[] = Html::rawElement(
-                               'span',
-                               [ 'class' => 'mw-input-with-label' ],
-                               Xml::checkLabel(
-                                       $this->msg( 'history-show-deleted' )->text(),
-                                       'deletedOnly',
-                                       'mw-show-deleted-only',
-                                       $this->opts['deletedOnly'],
-                                       [ 'class' => 'mw-input' ]
-                               )
-                       );
-               }
-
-               $filters[] = Html::rawElement(
-                       'span',
-                       [ 'class' => 'mw-input-with-label' ],
-                       Xml::checkLabel(
-                               $this->msg( 'sp-contributions-toponly' )->text(),
-                               'topOnly',
-                               'mw-show-top-only',
-                               $this->opts['topOnly'],
-                               [ 'class' => 'mw-input' ]
-                       )
-               );
-               $filters[] = Html::rawElement(
-                       'span',
-                       [ 'class' => 'mw-input-with-label' ],
-                       Xml::checkLabel(
-                               $this->msg( 'sp-contributions-newonly' )->text(),
-                               'newOnly',
-                               'mw-show-new-only',
-                               $this->opts['newOnly'],
-                               [ 'class' => 'mw-input' ]
-                       )
-               );
-               $filters[] = Html::rawElement(
-                       'span',
-                       [ 'class' => 'mw-input-with-label' ],
-                       Xml::checkLabel(
-                               $this->msg( 'sp-contributions-hideminor' )->text(),
-                               'hideMinor',
-                               'mw-hide-minor-edits',
-                               $this->opts['hideMinor'],
-                               [ 'class' => 'mw-input' ]
-                       )
-               );
+                       $fields['deletedOnly'] = [
+                               'type' => 'check',
+                               'id' => 'mw-show-deleted-only',
+                               'label' => $this->msg( 'history-show-deleted' )->text(),
+                               'name' => 'deletedOnly',
+                               'section' => 'contribs-top',
+                       ];
+               }
+
+               $fields['topOnly'] = [
+                       'type' => 'check',
+                       'id' => 'mw-show-top-only',
+                       'label' => $this->msg( 'sp-contributions-toponly' )->text(),
+                       'name' => 'topOnly',
+                       'section' => 'contribs-top',
+               ];
+               $fields['newOnly'] = [
+                       'type' => 'check',
+                       'id' => 'mw-show-new-only',
+                       'label' => $this->msg( 'sp-contributions-newonly' )->text(),
+                       'name' => 'newOnly',
+                       'section' => 'contribs-top',
+               ];
+               $fields['hideMinor'] = [
+                       'type' => 'check',
+                       'cssclass' => 'mw-hide-minor-edits',
+                       'id' => 'mw-show-new-only',
+                       'label' => $this->msg( 'sp-contributions-hideminor' )->text(),
+                       'name' => 'hideMinor',
+                       'section' => 'contribs-top',
+               ];
 
+               // Allow additions at this point to the filters.
+               $rawFilters = [];
                Hooks::run(
                        'SpecialContributions::getForm::filters',
-                       [ $this, &$filters ]
-               );
-
-               $extraOptions = Html::rawElement(
-                       'div',
-                       [],
-                       implode( '', $filters )
+                       [ $this, &$rawFilters ]
                );
+               foreach ( $rawFilters as $filter ) {
+                       // Backwards compatibility support for previous hook function signature.
+                       if ( is_string( $filter ) ) {
+                               $fields[] = [
+                                       'type' => 'info',
+                                       'default' => $filter,
+                                       'raw' => true,
+                                       'section' => 'contribs-top',
+                               ];
+                               wfDeprecated(
+                                       __METHOD__ .
+                                       ' returning string[]',
+                                       '1.33'
+                               );
+                       } else {
+                               // Preferred append method.
+                               $fields[] = $filter;
+                       }
+               }
 
-               $dateRangeSelection = Html::rawElement(
-                       'div',
-                       [],
-                       Xml::label( $this->msg( 'date-range-from' )->text(), 'mw-date-start' ) . ' ' .
-                       new DateInputWidget( [
-                               'infusable' => true,
-                               'id' => 'mw-date-start',
-                               'name' => 'start',
-                               'value' => $this->opts['start'],
-                               'longDisplayFormat' => true,
-                       ] ) . '<br>' .
-                       Xml::label( $this->msg( 'date-range-to' )->text(), 'mw-date-end' ) . ' ' .
-                       new DateInputWidget( [
-                               'infusable' => true,
-                               'id' => 'mw-date-end',
-                               'name' => 'end',
-                               'value' => $this->opts['end'],
-                               'longDisplayFormat' => true,
-                       ] )
-               );
+               $fields['start'] = [
+                       'type' => 'date',
+                       'default' => '',
+                       'id' => 'mw-date-start',
+                       'label' => $this->msg( 'date-range-from' )->text(),
+                       'name' => 'start',
+                       'section' => 'contribs-date',
+               ];
+               $fields['end'] = [
+                       'type' => 'date',
+                       'default' => '',
+                       'id' => 'mw-date-end',
+                       'label' => $this->msg( 'date-range-to' )->text(),
+                       'name' => 'end',
+                       'section' => 'contribs-date',
+               ];
 
-               $submit = Xml::tags( 'div', [],
-                       Html::submitButton(
-                               $this->msg( 'sp-contributions-submit' )->text(),
-                               [ 'class' => 'mw-submit' ], [ 'mw-ui-progressive' ]
+               $htmlForm = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
+               $htmlForm
+                       ->setMethod( 'get' )
+                       // When offset is defined, the user is paging through results
+                       // so we hide the form by default to allow users to focus on browsing
+                       // rather than defining search parameters
+                       ->setCollapsibleOptions(
+                               ( $pagerOptions['target'] ?? null ) ||
+                               ( $pagerOptions['start'] ?? null ) ||
+                               ( $pagerOptions['end'] ?? null )
                        )
-               );
-
-               $form .= Xml::fieldset(
-                       $this->msg( 'sp-contributions-search' )->text(),
-                       $targetSelection .
-                       $namespaceSelection .
-                       $filterSelection .
-                       $extraOptions .
-                       $dateRangeSelection .
-                       $submit,
-                       [ 'class' => 'mw-contributions-table' ]
-               );
+                       ->setAction( wfScript() )
+                       ->setSubmitText( $this->msg( 'sp-contributions-submit' )->text() )
+                       ->setWrapperLegend( $this->msg( 'sp-contributions-search' )->text() );
 
                $explain = $this->msg( 'sp-contributions-explain' );
                if ( !$explain->isBlank() ) {
-                       $form .= Html::rawElement(
-                               'p', [ 'id' => 'mw-sp-contributions-explain' ], $explain->parse()
-                       );
+                       $htmlForm->addFooterText( "<p id='mw-sp-contributions-explain'>{$explain->parse()}</p>" );
                }
 
-               $form .= Xml::closeElement( 'form' );
+               $htmlForm->loadData();
 
-               return $form;
+               return $htmlForm->getHTML( false );
        }
 
        /**
index 48357aa..0b4577e 100644 (file)
@@ -465,7 +465,7 @@ class SpecialEditTags extends UnlistedSpecialPage {
        protected function failure( $status ) {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
                $this->getOutput()->wrapWikiTextAsInterface(
-                       'errorbox', $status->getWikiText( 'tags-edit-failure' )
+                       'errorbox', $status->getWikiText( 'tags-edit-failure', false, $this->getLanguage() )
                );
                $this->showForm();
        }
index cfefa47..428556f 100644 (file)
@@ -187,7 +187,8 @@ class SpecialImport extends SpecialPage {
                $out = $this->getOutput();
                if ( !$source->isGood() ) {
                        $out->wrapWikiTextAsInterface( 'error',
-                               $this->msg( 'importfailed', $source->getWikiText() )->plain()
+                               $this->msg( 'importfailed', $source->getWikiText( false, false, $this->getLanguage() ) )
+                                       ->plain()
                        );
                } else {
                        $importer = new WikiImporter( $source->value, $this->getConfig() );
@@ -200,7 +201,7 @@ class SpecialImport extends SpecialPage {
                                                "<div class=\"error\">\n$1\n</div>",
                                                [
                                                        'import-options-wrong',
-                                                       $statusRootPage->getWikiText(),
+                                                       $statusRootPage->getWikiText( false, false, $this->getLanguage() ),
                                                        count( $statusRootPage->getErrorsArray() )
                                                ]
                                        );
@@ -239,7 +240,7 @@ class SpecialImport extends SpecialPage {
                                # Zero revisions
                                $out->wrapWikiMsg(
                                        "<div class=\"error\">\n$1\n</div>",
-                                       [ 'importfailed', $result->getWikiText() ]
+                                       [ 'importfailed', $result->getWikiText( false, false, $this->getLanguage() ) ]
                                );
                        } else {
                                # Success!
index 67177b7..750e2c3 100644 (file)
@@ -667,7 +667,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $this->getOutput()->setPageTitle( $this->msg( 'actionfailed' ) );
                $this->getOutput()->wrapWikiTextAsInterface(
                        'errorbox',
-                       $status->getWikiText( $this->typeLabels['failure'] )
+                       $status->getWikiText( $this->typeLabels['failure'], false, $this->getLanguage() )
                );
                $this->showForm();
        }
index d3d3bd7..c6f0721 100644 (file)
@@ -1216,7 +1216,8 @@ class SpecialUndelete extends SpecialPage {
                                '<div id="mw-error-cannotundelete">' .
                                $status->getWikiText(
                                        'cannotundelete',
-                                       'cannotundelete'
+                                       'cannotundelete',
+                                       $this->getLanguage()
                                ) . '</div>'
                        );
                }
@@ -1228,7 +1229,8 @@ class SpecialUndelete extends SpecialPage {
                                'error',
                                $status->getWikiText(
                                        'undelete-error-short',
-                                       'undelete-error-long'
+                                       'undelete-error-long',
+                                       $this->getLanguage()
                                )
                        );
                }
index e7c2e42..a2edca0 100644 (file)
@@ -488,7 +488,9 @@ class SpecialUpload extends SpecialPage {
                // Fetch the file if required
                $status = $this->mUpload->fetchFile();
                if ( !$status->isOK() ) {
-                       $this->showUploadError( $this->getOutput()->parseAsInterface( $status->getWikiText() ) );
+                       $this->showUploadError( $this->getOutput()->parseAsInterface(
+                               $status->getWikiText( false, false, $this->getLanguage() )
+                       ) );
 
                        return;
                }
@@ -559,7 +561,7 @@ class SpecialUpload extends SpecialPage {
                                $changeTags, $this->getUser() );
                        if ( !$changeTagsStatus->isOK() ) {
                                $this->showUploadError( $this->getOutput()->parseAsInterface(
-                                       $changeTagsStatus->getWikiText()
+                                       $changeTagsStatus->getWikiText( false, false, $this->getLanguage() )
                                ) );
 
                                return;
@@ -576,7 +578,9 @@ class SpecialUpload extends SpecialPage {
 
                if ( !$status->isGood() ) {
                        $this->showRecoverableUploadError(
-                               $this->getOutput()->parseAsInterface( $status->getWikiText() )
+                               $this->getOutput()->parseAsInterface(
+                                       $status->getWikiText( false, false, $this->getLanguage() )
+                               )
                        );
 
                        return;
index 585699d..28626ea 100644 (file)
@@ -177,7 +177,9 @@ class UserrightsPage extends SpecialPage {
 
                        // save settings
                        if ( !$fetchedStatus->isOK() ) {
-                               $this->getOutput()->addWikiTextAsInterface( $fetchedStatus->getWikiText() );
+                               $this->getOutput()->addWikiTextAsInterface(
+                                       $fetchedStatus->getWikiText( false, false, $this->getLanguage() )
+                               );
 
                                return;
                        }
@@ -208,7 +210,9 @@ class UserrightsPage extends SpecialPage {
                                        return;
                                } else {
                                        // Print an error message and redisplay the form
-                                       $out->wrapWikiTextAsInterface( 'error', $status->getWikiText() );
+                                       $out->wrapWikiTextAsInterface(
+                                               'error', $status->getWikiText( false, false, $this->getLanguage() )
+                                       );
                                }
                        }
                }
@@ -482,7 +486,9 @@ class UserrightsPage extends SpecialPage {
        function editUserGroupsForm( $username ) {
                $status = $this->fetchUser( $username, true );
                if ( !$status->isOK() ) {
-                       $this->getOutput()->addWikiTextAsInterface( $status->getWikiText() );
+                       $this->getOutput()->addWikiTextAsInterface(
+                               $status->getWikiText( false, false, $this->getLanguage() )
+                       );
 
                        return;
                }
index be4a1bd..9a78c5d 100644 (file)
@@ -64,11 +64,11 @@ class NewFilesPager extends RangeChronologicalPager {
        function getQueryInfo() {
                $opts = $this->opts;
                $conds = [];
-               $imgQuery = LocalFile::getQueryInfo();
-               $tables = $imgQuery['tables'];
-               $fields = [ 'img_name', 'img_timestamp' ] + $imgQuery['fields'];
+               $actorQuery = ActorMigration::newMigration()->getJoin( 'img_user' );
+               $tables = [ 'image' ] + $actorQuery['tables'];
+               $fields = [ 'img_name', 'img_timestamp' ] + $actorQuery['fields'];
                $options = [];
-               $jconds = $imgQuery['joins'];
+               $jconds = $actorQuery['joins'];
 
                $user = $opts->getValue( 'user' );
                if ( $user !== '' ) {
@@ -89,7 +89,7 @@ class NewFilesPager extends RangeChronologicalPager {
                                        'LEFT JOIN',
                                        [
                                                'ug_group' => $groupsWithBotPermission,
-                                               'ug_user = ' . $imgQuery['fields']['img_user'],
+                                               'ug_user = ' . $actorQuery['fields']['img_user'],
                                                'ug_expiry IS NULL OR ug_expiry >= ' . $dbr->addQuotes( $dbr->timestamp() )
                                        ]
                                ];
@@ -107,7 +107,7 @@ class NewFilesPager extends RangeChronologicalPager {
                                'JOIN',
                                [
                                        'rc_title = img_name',
-                                       'rc_actor = ' . $imgQuery['fields']['img_actor'],
+                                       'rc_actor = ' . $actorQuery['fields']['img_actor'],
                                        'rc_timestamp = img_timestamp'
                                ]
                        ];
index 457680d..d4ab79e 100644 (file)
        "tog-numberheadings": "isinin nomor murda anggen cara otomatis",
        "tog-editondblclick": "sunting lembar nganggen klik kaping pindo",
        "tog-editsectiononrightclick": "sayagayang panyuntingan kepahan anggen ngeklik tengen ring kepahan judul",
-       "tog-watchcreations": "imbuhin lembar sane karyanin titiang ring kepahan pangiwasan",
+       "tog-watchcreations": "Tambeh kaca sané kardi titiang miwah berkas sané unggah titiang ring pangawasan titiang",
        "tog-watchdefault": "imbuhin lembar panyuntingansane sunting titiang ring kepahan pangiwasan",
-       "tog-watchmoves": "imbuhang lembar sane kakisidang titiang ring kepahan pangiwasan",
+       "tog-watchmoves": "Tambeh kaca miwan berkas sané gingsirang titiang ring pangawasan titiang",
        "tog-watchdeletion": "imbuhin lembar sane kaapus ring kepahan pangiwasan",
-       "tog-watchuploads": "Tambehin berkas anyar sané unggah tiang ka pupulan pantaun\nTambahkan berkas baru yang saya unggah ke daftar pantauan",
+       "tog-watchuploads": "Tambeh berkas anyar sané unggah titiang ring pangawasan titiang",
        "tog-watchrollback": "Tambehin kaca sané sampun uliang tiang ka tengah pupulan pantauan tiangé",
        "tog-minordefault": "pingetin samian suntingan dados suntingan alit sane ajeg",
        "tog-previewontop": "tampilang pratayang sadurung kotak sunting lan nenten sadurungnyane",
        "yourpasswordagain": "jumunin kruna sandi",
        "createacct-yourpasswordagain": "Pastiang kruna sandi",
        "createacct-yourpasswordagain-ph": "Dagingin malih kruna sandi",
-       "userlogin-remembermypassword": "Banggayang mangda tetep ngranjing",
+       "userlogin-remembermypassword": "Banggayang mangda setata manjing log",
        "cannotlogin-title": "Nénten prasida manjing log",
        "cannotlogin-text": "Nénten prasida manjing log.",
        "cannotloginnow-title": "Mangkin nénten prasida manjing log",
        "history-feed-title": "Babad uahan",
        "history-feed-description": "Babad uahan kaca puniki ring wiki",
        "history-feed-item-nocomment": "$1 ring $2",
-       "rev-delundel": "gentos pangatonan",
+       "rev-delundel": "uah pakantenan",
        "rev-showdeleted": "sinahang",
        "revdelete-hide-comment": "Uah ringkesan",
        "revdel-restore": "gentos pangatonan",
        "filehist-revert": "wangdéang",
        "filehist-current": "mangkin",
        "filehist-datetime": "Tanggal/Galah",
-       "filehist-thumb": "Miniatur",
-       "filehist-thumbtext": "miniatur anggen versi ring $1",
+       "filehist-thumb": "Gambar alit",
+       "filehist-thumbtext": "Gambar alit indik vérsi $1",
        "filehist-nothumb": "Tusing ade miniatur",
        "filehist-user": "Sang anganggé",
        "filehist-dimensions": "Diménsi",
        "linkshere": "Kaca-kaca ring sor puniki kasambung ring <strong>$2</strong>:",
        "nolinkshere": "Nénten wénten kaca sané madué pranala ring <strong>$2</strong>.",
        "isredirect": "Kaca gingsiran",
-       "istemplate": "sareng kasurat",
+       "istemplate": "transklusi",
        "isimage": "pranala berkas",
        "whatlinkshere-prev": "{{PLURAL:$1|sadurungnyané|$1 sadurungnyané}}",
        "whatlinkshere-next": "{{PLURAL:$1|salanturnyané|$1 salanturnyané}}",
        "blocklogpage": "Log pangempet",
        "blocklogentry": "mlokir [[$1]] anggen pangwates galah $2$3",
        "reblock-logentry": "nguwah blokiran aturan antuk [[$1]] sareng galah kadaluwarsa $2 $3",
-       "block-log-flags-nocreate": "ngawe akun kaicalang",
+       "block-log-flags-nocreate": "pangardi akun kapademang",
        "proxyblocker": "Sané ngablokir proxy",
        "movelogpage": "Log gingsiran",
        "revertmove": "wangdéang",
        "tooltip-t-recentchangeslinked": "Uahan sané mangkin saking kaca-kaca sané kasambung ring kaca puniki",
        "tooltip-feed-atom": "\"atom feed\" anggen lembar puniki",
        "tooltip-t-contributions": "Bacakan pituut antuk {{GENDER:$1|sang anganggé puniki}}",
-       "tooltip-t-emailuser": "Ngirim surel majeng ring {{GENDER:$1|penganggo puniki}}",
+       "tooltip-t-emailuser": "Kirim séwala éléktronik ring {{GENDER:$1|sang anganggé puniki}}",
        "tooltip-t-upload": "Unggahang depukan",
        "tooltip-t-specialpages": "Bacakan makasami kaca kusus",
        "tooltip-t-print": "Vérsi cétak kaca puniki",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|kaca}}",
        "file-info-size": "$1x$2 piksel, agengnyané depukan: $3, soroh MIME:$4",
        "file-info-size-pages": "$1 × $2 piksel, agengnyané berkas: $3, soroh MIME: $4, $5 {{PLURAL:$5|kaca}}",
-       "file-nohires": "tan kasayagaang ukuran sane lewih ageng",
+       "file-nohires": "Nénten kasayagaang résolusi sané lewih ageng.",
        "svg-long-desc": "Berkas SVG, jimbarnyané $1 × $2 piksel, agengnyané berkas: $3",
        "show-big-image": "Depukan sujati",
        "show-big-image-preview": "Agengnyané pratuduh puniki: $1.",
        "compare-page2": "Kaca 2",
        "logentry-delete-delete": "$1 {{GENDER:$2|ngusapin}} kaca $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|ngwaliang}} kaca $3 ($4)",
-       "logentry-delete-revision": "$1 {{GENDER:$2|mauah}} kaca utama {{PLURAL:$5|$5  pamecikan}} ring kaca $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|nguahin}} pakantenan saking {{PLURAL:$5|$5  révisi}} ring kaca $3: $4",
        "revdelete-content-hid": "daging kaengkebang",
        "logentry-move-move": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ka $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ka $4 tur nenten ngawe pengalihan",
index eb98420..8da3832 100644 (file)
        "createacct-another-email-ph": "Въведете електронна поща",
        "createaccountmail": "Използване на случайна временна парола, която се изпраща на посочената електронната поща",
        "createacct-realname": "Истинско име (незадължително)",
-       "createacct-reason": "Причина",
+       "createacct-reason": "Причина (публично видима)",
        "createacct-reason-ph": "Защо създавате друга сметка",
        "createacct-reason-help": "Съобщение, показвано в дневника на създадени сметки",
        "createacct-submit": "Създаване на сметката",
        "listfiles-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "imgfile": "файл",
        "listfiles": "Списък на файловете",
+       "listfiles_subpage": "Качвания от $1",
        "listfiles_thumb": "Миникартинка",
        "listfiles_date": "Дата",
        "listfiles_name": "Име на файла",
        "blocklist-userblocks": "Скриване блокирането на потребителски сметки",
        "blocklist-tempblocks": "Скриване на временни блокирания",
        "blocklist-addressblocks": "Скриване на отделни блокирания на IP адреси",
+       "blocklist-type": "Вид:",
        "blocklist-type-opt-all": "Всички",
        "blocklist-type-opt-sitewide": "За всички уикита",
        "blocklist-type-opt-partial": "Частично",
        "version-ext-colheader-description": "Описание",
        "version-ext-colheader-credits": "Автори",
        "version-license-title": "Лиценз за $1",
+       "version-credits-title": "Списък на авторите на $1",
        "version-poweredby-credits": "Това уики работи на базата на <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, copyright © 2001-$1 $2.",
        "version-poweredby-others": "други",
        "version-poweredby-translators": "преводачи в translatewiki.net",
        "feedback-bugornote": "Ако сте готови подробно да опишете технически проблем, моля [$1 докладвайте го тук].\nВ противен случай, можете да използвате лесния формуляр по-долу. Коментарът ви ще бъде добавен към страницата „[$3 $2]“, наред с вашето потребителско име.",
        "feedback-cancel": "Отказ",
        "feedback-close": "Готово",
+       "feedback-external-bug-report-button": "Изпращане на техническа задача",
        "feedback-dialog-title": "Изпращане на обратна връзка",
        "feedback-error1": "Грешка: Неразпознат резултат от API",
        "feedback-error2": "Грешка: Неуспешна редакция",
        "duration-centuries": "$1 {{PLURAL:$1|век|века}}",
        "duration-millennia": "$1 {{PLURAL:$1|хилядолетие|хилядолетия}}",
        "rotate-comment": "Изображението е завъртяно на $1 {{PLURAL:$1|градус|градуса}} по часовниковата стрелка",
+       "limitreport-cputime": "Употреба на процесорното време",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|секунда|секунди}}",
+       "limitreport-walltime": "Употреба в режим на реално време",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунда|секунди}}",
+       "limitreport-ppvisitednodes": "Брой възли посетени от препроцесора",
        "limitreport-ppvisitednodes-value": "$1/$2",
+       "limitreport-ppgeneratednodes": "Брой възли генерирани от препроцесора",
        "limitreport-ppgeneratednodes-value": "$1/$2",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт|байта}}",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт|байта}}",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Символи",
        "special-characters-group-greek": "Гръцки",
+       "special-characters-group-greekextended": "Гръцки (разширен)",
        "special-characters-group-cyrillic": "Кирилица",
        "special-characters-group-arabic": "Арабски",
        "special-characters-group-arabicextended": "Разширен арабски",
index 52f9327..c8b6b6c 100644 (file)
        "listfiles-userdoesnotexist": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" নিবন্ধিত নয়।",
        "imgfile": "ফাইল",
        "listfiles": "ছবির তালিকা",
+       "listfiles_subpage": "$1 কর্তৃক আপলোডসমূহ",
        "listfiles_thumb": "সংক্ষেপচিত্র",
        "listfiles_date": "তারিখ",
        "listfiles_name": "নাম",
        "unprotected-js": "নিরাপত্তার কারণে জাভাস্ক্রিপ্ট অনিরাপদ পৃষ্ঠা থেকে লোড করা যাবে না। শুধুমাত্র মিডিয়াউইকি: নামস্থান বা ব্যবহারকারী উপপাতায় জাভাস্ক্রিপ্ট তৈরি করুন",
        "userlogout-continue": "আপনি কি প্রস্থান করতে চান?",
        "rest-prefix-mismatch": "অনুরোধকৃত পথ ($1) রেস্ট API মূলপথের ($2) ভিতরে ছিল না।",
-       "rest-wrong-method": "à¦\85নà§\81রà§\8bধ à¦ªà¦¦à§\8dধতি ($1) à¦¸à¦\82শà§\8dলিষà§\8dà¦\9f à¦ªà¦¥à§\87র ($2) {{PLURAL:$3|à¦\9cনà§\8dয à¦\85নà§\81মà§\8bদিত à¦ªà¦¦à§\8dধতি|à¦\9cনà§\8dয à¦\85নà§\81মà§\8bদিত à¦ªà¦¦à§\8dধতিà¦\97à§\81লির à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত}} à¦¨à¦¯à¦¼",
+       "rest-wrong-method": "à¦\85নà§\81রà§\8bধ à¦ªà¦¦à§\8dধতি ($1) à¦\8fà¦\87 à¦ªà¦¥à§\87র {{PLURAL:$3|à¦\9cনà§\8dয à¦\85নà§\81মà§\8bদিত à¦ªà¦¦à§\8dধতির|à¦\9cনà§\8dয à¦\85নà§\81মà§\8bদিত à¦ªà¦¦à§\8dধতিà¦\97à§\81লির}} à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত à¦¨à¦¯à¦¼ ($2)",
        "rest-no-match": "অনুরোধ করা আপেক্ষিক পথ ($1) কোনও পরিচিত হ্যান্ডলারের সাথে মেলে না"
 }
index 3171e5e..d2056c4 100644 (file)
        "sitejspreview": "'''ХӀара хьалх хьажар ду, хӀара JavaScript-код.'''\n'''хӀинца Ӏалашйина яц!'''",
        "updated": "(Карла йаькхина)",
        "note": "'''Билгалдаккхар:'''",
-       "previewnote": "'''Дагахь дита хьайна! ХӀара деккъа хьалххе хьажар хилар.'''\nХьан хийцамаш хӀинца а дӀабазбина бац!.",
+       "previewnote": "'''Дагахь дита! ХӀара хьалххе хьажар хилар.'''\nХьан хийцамаш хӀинца а дӀабазбина бац!.",
        "continue-editing": "Кхин дӀа тадар",
        "session_fail_preview": "Сервер лара ца йира ахьа бина хийцамаш дӀаязба. Кхиъ цкъа а гӀортахь.\nНагахь санна хӀара гӀалат юха а далахь, [[Special:UserLogout|сеанс дӀа а къоьвлин]], юха а системин чугӀо.",
        "edit_form_incomplete": "'''Цхьайолу тадаран формаш серверан тӀекхаьчча яц. Тидаме хьажа хьай нисдарш доьхна дуй, ТӀакха южу гӀорта.'''",
index 8ac0ac4..67cdbad 100644 (file)
        "upload_directory_read_only": "Direktorê dosyayê ($1)î webserver de nieşkeno binuse.",
        "uploaderror": "Ğeletê bar kerdişî",
        "upload-recreate-warning": "'''Diqet: Yew dosya pê ena name wedariya ya zi vurniya.'''\n\nLogê wedariyayiş u berdişi seba ena pele a ti ra xezir kerda:",
-       "uploadtext": "Seba '''dosya''' barkerdışi rê formê cerênê bıkarnê. Veri ra bar bıyaye dosyaya vınayış  u cıgeyrayışi rê bıewni rê [[Special:FileList|lista dosyayan]], seba (fına ) barbıyayan rê [[Special:Log/upload|roceka barkerdışi ]] u, esterıtan zi pela [[Special:Log/delete|roceka esterıtışi]] de tepışiyeno.\n\nYew pela rê Dosya cıkerdışi rê formanê cêrênan ra yewi bıkarnê;\n* Versiyonê pêroyiya Dosya karnayışi rê: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Kışta çepa yew dorek miyan de, vıniyao cı de  'metinê bıni' ya, 200 piksel ebatiya Dosya karnayışi rê : '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyay nêmusnayışi ra, Dosya rê direkt Link dayışi rê : '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
+       "uploadtext": "Seba '''dosya''' barkerdışi rê formê cerênê bıgurenê. Veri ra dosyeyê barbiyayeyan vênayış  u cıgeyrayışi rê bıewni rê [[Special:FileList|lista dosyeyan]], seba (fına) barbiyayeyan rê [[Special:Log/upload|rocekê barkerdışi]] u, esterıtan zi pela [[Special:Log/delete|rocekê esterıtışi]] de tepışiyeno.\n\nYew pele rê dosyacıkerdışi rê formanê cêrênan ra yewi bıgurenê;\n* Versiyonê gurenayışê dosyeyanê pêroyiyan rê: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Kışta çepê yew doreki miyan de, vêniyayo cı de  'metinê bıni' ra, 200 piksel ebadê dosyagurenayışi rê : '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyaya nêmusnayışi ra, dosya rê direkt gıredayışi rê : '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
        "upload-permitted": "{{PLURAL:$2|Babetê|Babetên}} dosyayanê vêrdeyan: $1.",
        "upload-preferred": "{{PLURAL:$2|Babetê|Babetên}} dosyayanê tercihbiyayeyan: $1.",
        "upload-prohibited": "{{PLURAL:$2|Babetê|Babetên}} dosyayanê tometebiyayeyan: $1.",
        "maximum-size": "Ebatê maximumî",
        "pagesize": "(bitî)",
        "restriction-edit": "Bıvurne",
-       "restriction-move": "Bıkırış",
+       "restriction-move": "Bıkırışe",
        "restriction-create": "Vıraze",
        "restriction-upload": "Bar ke",
        "restriction-level-sysop": "tam pawiyayo",
        "lockfilenotwritable": "dosyaya qefılnayişê databaseyi ser ra çiyek nênusyena.",
        "databasenotlocked": "Database a nibiya.",
        "lockedbyandtime": "({{GENDER:$1|$1}} ra $2 tepya $3 biyo)",
-       "move-page": "$1 Bıkırış",
+       "move-page": "$1 Bıkırışe",
        "move-page-legend": "Pele bere",
        "movepagetext": "Pe form ki ho bın de, tı eşkeno name yew pele bıvurni u tarixê pele hemi ya zi pyeran beri.\nMa nameyê kıhanyeri keno pele redireksiyoni ser nameyê newe.\nTı eşkeno pele redireksiyoni ki şıno nameyê originali bıvurni.\nEg tı nıwazeno, ma tı ra rica keni tı [[Special:DoubleRedirects|double]] ya zi [[Special:BrokenRedirects|broken redirects]] qontrol bıki.\nTı gani qontrol bıki eg gıreyan şıno peleyanê raşti.\n\nTeme eka ser yew name de yew nuşte esti, sistemê ma '''nıeşkeno''' nuşte tı beri. Eka ser ena name de yew pele vengi esti, sistemê ma eşkeno nuşte tı beri.\nTı nıeşkeni name yew pele reyna bıvurni.\n\n'''Teme!'''\nEna transfer ser peleyanê populari zaf muhumo;\nMa tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
        "movepagetext-noredirectfixer": " Gırwenayışê formê bınêni do namey perre newe vırazo, pêro vêrorê cı bıkırışo namey newe ser.\nMa namey kıhanêri keni perra serşıkıtışi ser nameyo newe.\nŞıma şenê perra serşıkıtışı zi berê namey raştıkên bıvırnên.\n\nEger şıma nêwazenê, ma şıma ra reca keni şıma [[Special:DoubleRedirects|açarnayışo (tadayışo) dılet]] ya zi [[Special:BrokenRedirects|açarnayışo (tadayışon) çewt]]i kontrol kerên.\nŞıma gani kontrol kerên eger linki şınê perranê raştan ser.\n\nTeme eger ser yew name de yew nuşte esto, sistemê wiki '''nêşeno''' nuştey şıma bıkırışo. Eger ser enê namey de yew perra venge esta, sistemê wiki şeno nuştey şıma bıkırışo.\nTı nıeşkeni name yew pele reyna bıvurni.\n\n'''İqaz!'''\nNo kırıştış şeno yew perra populere rê wışkên u nêpawiyay bo. Ma şıma ra reca kenime, kerdışê xo ra ver peyniyê cı bıvênên.",
index d554442..fca6f19 100644 (file)
@@ -7,7 +7,8 @@
                        "Naudefj",
                        "SPQRobin",
                        "Shirayuki",
-                       "Spacebirdy"
+                       "Spacebirdy",
+                       "Servien"
                ]
        },
        "exif-imagewidth": "Breedte",
        "exif-gpsstatus-v": "Meetinteroperabiliteit",
        "exif-gpsmeasuremode-2": "2-dimensionele meting",
        "exif-gpsmeasuremode-3": "3-dimensionele meting",
-       "exif-gpsspeed-k": "Kilometer per huur",
+       "exif-gpsspeed-k": "Kilometer per uur",
        "exif-gpsspeed-m": "Myl per huur",
        "exif-gpsspeed-n": "Knope",
        "exif-gpsdestdistance-k": "Kilometers",
index 76bd5e0..3326a75 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "C.R.",
                        "E. abu Filumena",
-                       "SabineCretella"
+                       "SabineCretella",
+                       "Sannita"
                ]
        },
        "exif-imagewidth": "Larghezza",
        "exif-imagedescription": "Titulo 'e l'immaggene",
        "exif-make": "Frabbeca ca muntaje 'a camera",
        "exif-model": "Mudello d' 'a camera",
-       "exif-software": "Software ausàto",
+       "exif-software": "Software ausato",
        "exif-artist": "Autore",
        "exif-copyright": "Titolare d' 'o Copyright",
-       "exif-exifversion": "Verzione d'Exif",
+       "exif-exifversion": "Verzione 'e ll'exif",
        "exif-flashpixversion": "Verziona Flashpix suppurtata",
        "exif-colorspace": "Spazio d' 'e culore",
        "exif-componentsconfiguration": "Significato d'ogne componente",
index 73b2b7b..57fac84 100644 (file)
@@ -29,7 +29,7 @@
        "exif-imagedescription": "Afbealdingname",
        "exif-make": "Kameramark",
        "exif-model": "Kameramodel",
-       "exif-software": "Programmatuur dee bruked wördt",
+       "exif-software": "Programmatuur dee gebruked wördt",
        "exif-artist": "Autöör",
        "exif-copyright": "Autöörsrechtenholder",
        "exif-exifversion": "Exif-versy",
@@ -93,7 +93,7 @@
        "exif-gpsaltituderef": "Höygdereferensy",
        "exif-gpsaltitude": "Höygde",
        "exif-gpstimestamp": "GPS-tyd (atoomklokke)",
-       "exif-gpssatellites": "Satelliten dee bruked binnet vöär de meating",
+       "exif-gpssatellites": "Satelliten dee gebruked binnet vöär de meating",
        "exif-gpsstatus": "Untvangerståtus",
        "exif-gpsmeasuremode": "Meatmodus",
        "exif-gpsdop": "Meatprecisy",
        "exif-gpstrack": "Beweagingsrichting",
        "exif-gpsimgdirectionref": "Referensy vöär afbealdingsrichting",
        "exif-gpsimgdirection": "Afbealdingsrichting",
-       "exif-gpsmapdatum": "Geodetiske undersööksgegeavens dee bruked binnet",
+       "exif-gpsmapdatum": "Geodetiske undersööksgegeavens dee gebruked binnet",
        "exif-gpsdestlatituderef": "Referensy vöär breyddegråd tot bestemming",
        "exif-gpsdestlatitude": "Breyddegråd bestemming",
        "exif-gpsdestlongituderef": "Referensy vöär längdegråd bestemming",
        "exif-iimversion": "IIM-versy",
        "exif-iimcategory": "Kategory",
        "exif-iimsupplementalcategory": "Anvüllende kategoryen",
-       "exif-datetimeexpires": "Neet te bruken nå",
+       "exif-datetimeexpires": "Neet te gebruken nå",
        "exif-datetimereleased": "Uutbröcht up",
        "exif-originaltransmissionref": "Oorsprungelike språklokatykode",
        "exif-identifier": "ID",
        "exif-rightscertificate": "Rechtenbeheyrcertifikaat",
        "exif-copyrighted": "Autöörsrechtenståtus",
        "exif-copyrightowner": "Autöörsrechtenholder",
-       "exif-usageterms": "Bruuksbeding",
+       "exif-usageterms": "Gebruuksbeding",
        "exif-webstatement": "Binnennetse autöörsrechtenverklåring",
        "exif-originaldocumentid": "Unik ID van et originele dokument",
        "exif-licenseurl": "Webadres vöär autöörsrechtenlicensy",
        "exif-morepermissionsurl": "Alternative licensygegeavens",
        "exif-attributionurl": "Bruuk de volgende verwysing as dit wark herbruked wördt",
        "exif-preferredattributionname": "Bruuk de volgende makersvermelding as dit wark herbruked wördt",
-       "exif-pngfilecomment": "Opmarking bie PNG-bestaand",
+       "exif-pngfilecomment": "Upmarking by PNG-bestand",
        "exif-disclaimer": "Vöärbehold",
-       "exif-contentwarning": "Waorschuwing over inhoud",
-       "exif-giffilecomment": "Opmarking bie GIF-bestaand",
-       "exif-intellectualgenre": "Soort onderwarp",
-       "exif-subjectnewscode": "Onderwarpkode",
-       "exif-scenecode": "IPTC-scènekode",
-       "exif-event": "Aofebeelden gebeurtenisse",
-       "exif-organisationinimage": "Aofebeelden organisasie",
-       "exif-personinimage": "Aofebeeld persoon",
-       "exif-originalimageheight": "Heugte van de aofbeelding veur biesniejen",
-       "exif-originalimagewidth": "Breedte van de aofbeelding veur biesniejen",
-       "exif-compression-1": "Niet ekomprimeerd",
-       "exif-compression-2": "CCITT-groep 3 1-dimensionale an-epasten \"Huffman run length\"-kodering",
-       "exif-compression-3": "CCITT-groep 3 faxcodering",
-       "exif-compression-4": "CCITT-groep 4 faxcodering",
-       "exif-copyrighted-true": "Auteursrechtelik bescharmp",
-       "exif-copyrighted-false": "Auteursrechtenstaotus niet vasteleegd",
-       "exif-unknowndate": "Onbekende daotum",
+       "exif-contentwarning": "Inholdswårsküwing",
+       "exif-giffilecomment": "Upmarking by GIF-bestand",
+       "exif-intellectualgenre": "Soort underwarp",
+       "exif-subjectnewscode": "Underwarpkode",
+       "exif-scenecode": "IPTC-scenekode",
+       "exif-event": "Afbealdede geböärtenisse",
+       "exif-organisationinimage": "Afbealdede organisaty",
+       "exif-personinimage": "Afbealded persoon",
+       "exif-originalimageheight": "Höygde van de afbealding vöär et bysnyden",
+       "exif-originalimagewidth": "Breydde van de afbealding vöär et bysnyden",
+       "exif-compression-1": "Neet komprimeerd",
+       "exif-compression-2": "CCITT-grup 3 1-dimensionale anpasde \"Huffman run length\"-kodering",
+       "exif-compression-3": "CCITT-grup 3 fakskodering",
+       "exif-compression-4": "CCITT-grup 4 fakskodering",
+       "exif-copyrighted-true": "Autöörsrechtelik beskarmd",
+       "exif-copyrighted-false": "Autöörsrechtenståtus neet upgeaven",
+       "exif-photometricinterpretation-0": "Swart-wit (wit is 0)",
+       "exif-photometricinterpretation-1": "Swart-wit (swart is 0)",
+       "exif-photometricinterpretation-3": "Palette",
+       "exif-photometricinterpretation-4": "Transparansymasker",
+       "exif-photometricinterpretation-5": "Skeiden (wårskynlik CMYK)",
+       "exif-photometricinterpretation-8": "CIE L*a*b*",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (ICC-kodering)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (ITU-kodering)",
+       "exif-unknowndate": "Unbekende dåtum",
        "exif-orientation-1": "Normaal",
-       "exif-orientation-2": "horizontaal espegeld",
-       "exif-orientation-3": "180° edreid",
-       "exif-orientation-4": "verticaal edreid",
-       "exif-orientation-5": "espegeld um as linksboven-rechtsonder",
-       "exif-orientation-6": "90° linksummedreid",
-       "exif-orientation-7": "90° linksummedreid",
-       "exif-orientation-8": "90° rechtsummedreid",
-       "exif-planarconfiguration-1": "Grof gegevensformaot",
-       "exif-planarconfiguration-2": "planar gegevensformaot",
-       "exif-colorspace-65535": "Niet-ekalibreerd",
-       "exif-componentsconfiguration-0": "besteet niet",
-       "exif-exposureprogram-0": "Niet umschreven",
-       "exif-exposureprogram-1": "Haandmaotig",
+       "exif-orientation-2": "horizontaal spegeld",
+       "exif-orientation-3": "180° draid",
+       "exif-orientation-4": "vertikaal draid",
+       "exif-orientation-5": "90° teagen de klokke in draid en vertikaal spegeld",
+       "exif-orientation-6": "90° teagen de klokke in draid",
+       "exif-orientation-7": "90° mid de klokke middraid en vertikaal spegeld",
+       "exif-orientation-8": "90° mid de klokke middraid",
+       "exif-planarconfiguration-1": "Grov formaat",
+       "exif-planarconfiguration-2": "Planäär formaat",
+       "exif-colorspace-65535": "Neet kalibreerd",
+       "exif-componentsconfiguration-0": "besteyt neet",
+       "exif-exposureprogram-0": "Unbekend",
+       "exif-exposureprogram-1": "Handmåtig",
        "exif-exposureprogram-2": "Normaal",
        "exif-exposureprogram-3": "Diafragmaprioriteit",
        "exif-exposureprogram-4": "Sluterprioriteit",
-       "exif-exposureprogram-5": "Kreatief (veurkeur veur grote scharptediepte)",
-       "exif-exposureprogram-6": "Aksie (veurkeur veur hoge slutersnelheid)",
-       "exif-exposureprogram-7": "Portret (detailopname mit onscharpe achtergrond)",
-       "exif-exposureprogram-8": "Laandschap (scharpe achtergrond)",
-       "exif-subjectdistance-value": "$1 m",
-       "exif-meteringmode-0": "Onbekend",
+       "exif-exposureprogram-5": "Kreativ programma (vöärköär vöär groute skarpdedeepde)",
+       "exif-exposureprogram-6": "Akty (vöärköär vöär houge slutersnelheid)",
+       "exif-exposureprogram-7": "Portret (detailupnåme mid unskarpe achtergrund)",
+       "exif-exposureprogram-8": "Landskap (skarpe achtergrund)",
+       "exif-subjectdistance-value": "$1 meter",
+       "exif-meteringmode-0": "Unbekend",
        "exif-meteringmode-1": "Gemiddeld",
-       "exif-meteringmode-2": "Gemiddeld, naodrok op midden",
+       "exif-meteringmode-2": "Middencentreerd",
        "exif-meteringmode-3": "Spot",
-       "exif-meteringmode-4": "MultiSpot",
+       "exif-meteringmode-4": "Multi-spot",
        "exif-meteringmode-5": "Multi-segment (patrone)",
-       "exif-meteringmode-6": "Deelmeting",
-       "exif-meteringmode-255": "Aanders",
-       "exif-lightsource-0": "Onbekend",
-       "exif-lightsource-1": "Daglocht",
-       "exif-lightsource-2": "Tl-locht",
-       "exif-lightsource-3": "Tungsten (lamplocht)",
+       "exif-meteringmode-6": "Deylmeating",
+       "exif-meteringmode-255": "Anders",
+       "exif-lightsource-0": "Unbekend",
+       "exif-lightsource-1": "Daglicht",
+       "exif-lightsource-2": "TL-licht",
+       "exif-lightsource-3": "Tungsten (lamplicht)",
        "exif-lightsource-4": "Flitser",
-       "exif-lightsource-9": "Mooi weer",
-       "exif-lightsource-10": "Bewolk",
-       "exif-lightsource-11": "Schaoduw",
-       "exif-lightsource-12": "Fluorescerend daglocht (D 5700 – 7100K)",
-       "exif-lightsource-13": "Witfluorescerend daglocht (N 4600 – 5400K)",
-       "exif-lightsource-14": "Koel witfluorescerend (W 3900 – 4500K)",
-       "exif-lightsource-15": "Witfluorescerend (WW 3200 – 3700K)",
-       "exif-lightsource-17": "Standardlocht A",
-       "exif-lightsource-18": "Standardlocht B",
-       "exif-lightsource-19": "Standardlocht C",
-       "exif-lightsource-24": "ISO-studiokunstlocht",
-       "exif-lightsource-255": "Aanders",
-       "exif-flash-fired-0": "Flits is niet aofegaon",
-       "exif-flash-fired-1": "Mit flitser",
-       "exif-flash-return-0": "flits stuurt gien gegevens",
-       "exif-flash-return-2": "gien weerkaotsing van de flits vastesteld",
-       "exif-flash-return-3": "weerkaotsing van de flits vastesteld",
-       "exif-flash-mode-1": "verplicht mit flitser",
-       "exif-flash-mode-2": "flitser verplicht onderdrokt",
-       "exif-flash-mode-3": "automatiese modus",
-       "exif-flash-function-1": "Gien flitserfunksie",
-       "exif-flash-redeye-1": "rooie ogen-filter",
+       "exif-lightsource-9": "Mooi weader",
+       "exif-lightsource-10": "Bewolked",
+       "exif-lightsource-11": "Skadüw",
+       "exif-lightsource-12": "Daglicht fluorescerend (D 5700 – 7100K)",
+       "exif-lightsource-13": "Dagwit fluorescerend (N 4600 – 5400K)",
+       "exif-lightsource-14": "Kool wit fluorescerend (W 3900 – 4500K)",
+       "exif-lightsource-15": "Wit fluorescerend (WW 3200 – 3700K)",
+       "exif-lightsource-17": "Standardlicht A",
+       "exif-lightsource-18": "Standardlicht B",
+       "exif-lightsource-19": "Standardlicht C",
+       "exif-lightsource-24": "ISO-studiokünstlicht",
+       "exif-lightsource-255": "Anders",
+       "exif-flash-fired-0": "Flits is neet afgån",
+       "exif-flash-fired-1": "Flits is afgån",
+       "exif-flash-return-0": "flits stüürt geen gegeavens",
+       "exif-flash-return-2": "geen weaderkaatsing van de flits vaststeld",
+       "exif-flash-return-3": "wederkaatsing van de flits vaststeld",
+       "exif-flash-mode-1": "verplicht mid flits",
+       "exif-flash-mode-2": "flits verplicht underdrukked",
+       "exif-flash-mode-3": "automatiske modus",
+       "exif-flash-function-1": "Geen flitsfunkty",
+       "exif-flash-redeye-1": "roude-ougenredukty",
        "exif-focalplaneresolutionunit-2": "duum",
-       "exif-sensingmethod-1": "Niet vastesteld",
-       "exif-sensingmethod-2": "Eén-chip-kleursensor",
-       "exif-sensingmethod-3": "Twee-chips-kleursensor",
-       "exif-sensingmethod-4": "Dree-chips-kleurensensor",
-       "exif-sensingmethod-5": "Kleurvolgende gebiedssensor",
-       "exif-sensingmethod-7": "Dreeliendige sensor",
-       "exif-sensingmethod-8": "Kleurvolgende gebiedssensor",
+       "exif-sensingmethod-1": "Neet vaststeld",
+       "exif-sensingmethod-2": "Eyn-chip-klöörsensor",
+       "exif-sensingmethod-3": "Twey-chip-klöörsensor",
+       "exif-sensingmethod-4": "Dree-chip-klöörensensor",
+       "exif-sensingmethod-5": "Klöörvolgende gebeedssensor",
+       "exif-sensingmethod-7": "Dreelynige sensor",
+       "exif-sensingmethod-8": "Klöörvolgende gebeedssensor",
        "exif-filesource-3": "Digitale fotokamera",
-       "exif-scenetype-1": "n Drekt efotografeerden aofbeelding",
-       "exif-customrendered-0": "Normaal",
-       "exif-customrendered-1": "An-epas",
-       "exif-exposuremode-0": "Automaties",
-       "exif-exposuremode-1": "Haandmaotig",
-       "exif-exposuremode-2": "Belochtingsrie",
-       "exif-whitebalance-0": "Automaties",
-       "exif-whitebalance-1": "Haandmaotig",
-       "exif-scenecapturetype-0": "standard",
-       "exif-scenecapturetype-1": "laandschap",
-       "exif-scenecapturetype-2": "pertret",
-       "exif-scenecapturetype-3": "Nachtscène",
-       "exif-gaincontrol-0": "Gien",
-       "exif-gaincontrol-1": "Lege pieken umhoge",
-       "exif-gaincontrol-2": "Hoge pieken umhoge",
-       "exif-gaincontrol-3": "Lege pieken ummeneer",
-       "exif-gaincontrol-4": "Hoge pieken ummeneer",
+       "exif-scenetype-1": "Een direkt fotografeerde afbealding",
+       "exif-customrendered-0": "Normale verwarking",
+       "exif-customrendered-1": "Anpasde verwarking",
+       "exif-customrendered-2": "HDR (geen origineel seakerd)",
+       "exif-customrendered-3": "HDR (origineel seakerd)",
+       "exif-customrendered-4": "Origineel (vöär HDR)",
+       "exif-customrendered-6": "Panorama",
+       "exif-customrendered-7": "Portret-HDR",
+       "exif-customrendered-8": "Portret",
+       "exif-exposuremode-0": "Automatisk",
+       "exif-exposuremode-1": "Handmåtige belichting",
+       "exif-exposuremode-2": "Belichtingsryge",
+       "exif-whitebalance-0": "Automatiske witbalans",
+       "exif-whitebalance-1": "Handmåtige witbalans",
+       "exif-scenecapturetype-0": "Standard",
+       "exif-scenecapturetype-1": "Landskap",
+       "exif-scenecapturetype-2": "Portret",
+       "exif-scenecapturetype-3": "Nachtscene",
+       "exif-gaincontrol-0": "Geen",
+       "exif-gaincontrol-1": "Laege pyken ümhouge",
+       "exif-gaincontrol-2": "Houge pyken ümhouge",
+       "exif-gaincontrol-3": "Laege pyken ümdale",
+       "exif-gaincontrol-4": "Houge pyken ümdale",
        "exif-contrast-0": "Normaal",
-       "exif-contrast-1": "Zachte",
+       "exif-contrast-1": "Sachte",
        "exif-contrast-2": "Hard",
        "exif-saturation-0": "Normaal",
-       "exif-saturation-1": "Leeg",
-       "exif-saturation-2": "Hoge",
+       "exif-saturation-1": "Laeg",
+       "exif-saturation-2": "Houge",
        "exif-sharpness-0": "Normaal",
-       "exif-sharpness-1": "Zachte",
+       "exif-sharpness-1": "Sachte",
        "exif-sharpness-2": "Hard",
-       "exif-subjectdistancerange-0": "Onbekend",
-       "exif-subjectdistancerange-1": "Macro",
-       "exif-subjectdistancerange-2": "Kortbie",
-       "exif-subjectdistancerange-3": "Veeraof",
-       "exif-gpslatitude-n": "Noorderbreedte",
-       "exif-gpslatitude-s": "Zujerbreedte",
-       "exif-gpslongitude-e": "Oosterlengte",
-       "exif-gpslongitude-w": "Westerlengte",
-       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter|meter}} boven de zeespegel",
-       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter|meter}} onder de zeespegel",
-       "exif-gpsstatus-a": "Bezig mit meten",
-       "exif-gpsstatus-v": "Meetinteroperebiliteit",
-       "exif-gpsmeasuremode-2": "2-dimensionale meting",
-       "exif-gpsmeasuremode-3": "3-dimensionale meting",
-       "exif-gpsspeed-k": "Kilometer per uur",
-       "exif-gpsspeed-m": "Miel per ure",
-       "exif-gpsspeed-n": "Kneupen",
+       "exif-subjectdistancerange-0": "Unbekend",
+       "exif-subjectdistancerange-1": "Makro",
+       "exif-subjectdistancerange-2": "Kortby",
+       "exif-subjectdistancerange-3": "Wyd weg",
+       "exif-gpslatitude-n": "Noorderbreydde",
+       "exif-gpslatitude-s": "Süderbreydde",
+       "exif-gpslongitude-e": "Ousterlängde",
+       "exif-gpslongitude-w": "Westerlängde",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|meter}} boaven de seyspegel",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|meter}} under de seyspegel",
+       "exif-gpsstatus-a": "Beasig mid meaten",
+       "exif-gpsstatus-v": "Meatinteroperabiliteit",
+       "exif-gpsmeasuremode-2": "2-dimensionale meating",
+       "exif-gpsmeasuremode-3": "3-dimensionale meating",
+       "exif-gpsspeed-k": "Kilometer per üre",
+       "exif-gpsspeed-m": "Myl per üre",
+       "exif-gpsspeed-n": "Knoupen",
        "exif-gpsdestdistance-k": "Kilometer",
-       "exif-gpsdestdistance-m": "Miel",
-       "exif-gpsdestdistance-n": "Zeemielen",
-       "exif-gpsdop-excellent": "Uutstekend ($1)",
-       "exif-gpsdop-good": "Goed ($1)",
+       "exif-gpsdestdistance-m": "Myl",
+       "exif-gpsdestdistance-n": "Seymylen",
+       "exif-gpsdop-excellent": "Uutsteakend ($1)",
+       "exif-gpsdop-good": "Good ($1)",
        "exif-gpsdop-moderate": "Gemiddeld ($1)",
-       "exif-gpsdop-fair": "Redelik ($1)",
-       "exif-gpsdop-poor": "Slicht ($1)",
-       "exif-objectcycle-a": "Allinnig smarnens",
-       "exif-objectcycle-p": "Allinnig savends",
-       "exif-objectcycle-b": "'s Mannen én 's avens",
-       "exif-gpsdirection-t": "Waore richting",
-       "exif-gpsdirection-m": "Magnetiese richting",
-       "exif-ycbcrpositioning-1": "In t midden",
-       "exif-ycbcrpositioning-2": "E-kositueerd",
-       "exif-dc-contributor": "Luui die bie-edreugen hebben",
+       "exif-gpsdop-fair": "Readelik ($1)",
+       "exif-gpsdop-poor": "Slecht ($1)",
+       "exif-objectcycle-a": "Allinnig smargens",
+       "exif-objectcycle-p": "Allinnig såvends",
+       "exif-objectcycle-b": "Smargens en såvends",
+       "exif-gpsdirection-t": "Wåre richting",
+       "exif-gpsdirection-m": "Magnetiske richting",
+       "exif-ycbcrpositioning-1": "In et midden",
+       "exif-ycbcrpositioning-2": "Kositueerd",
+       "exif-dc-contributor": "Bydragers",
        "exif-dc-coverage": "Ruumtelike of temporele reikwiedte van media",
        "exif-dc-date": "Daotum(s)",
-       "exif-dc-publisher": "Uutgever",
-       "exif-dc-relation": "Verwaante media",
+       "exif-dc-publisher": "Uutgeaver",
+       "exif-dc-relation": "Verwande media",
        "exif-dc-rights": "Rechten",
        "exif-dc-source": "Bronmedia",
        "exif-dc-type": "Soort media",
index 50d1db2..72c8fbe 100644 (file)
@@ -10,7 +10,8 @@
                        "Qiyue2001",
                        "Xiaomingyan",
                        "神樂坂秀吉",
-                       "予弦"
+                       "予弦",
+                       "Wenyuan Liu"
                ]
        },
        "exif-imagewidth": "宽度",
        "exif-scenetype-1": "直接照像图片",
        "exif-customrendered-0": "标准处理",
        "exif-customrendered-1": "自定义处理",
+       "exif-customrendered-2": "HDR(没有保留原始信息)",
+       "exif-customrendered-3": "HDR(保留原始信息)",
+       "exif-customrendered-4": "原始(用于HDR)",
+       "exif-customrendered-6": "全景",
+       "exif-customrendered-7": "竖向 HDR",
+       "exif-customrendered-8": "竖向",
        "exif-exposuremode-0": "自动曝光",
        "exif-exposuremode-1": "手动曝光",
        "exif-exposuremode-2": "自动曝光感知调节",
index 7d8e596..20d2991 100644 (file)
        "version-specialpages": "Toimintosivut",
        "version-parserhooks": "Jäsenninkytkökset",
        "version-variables": "Muuttujat",
-       "version-editors": "Muokkaajat",
+       "version-editors": "Muokkaimet",
        "version-antispam": "Roskalinkkien estäminen",
        "version-other": "Muut",
        "version-mediahandlers": "Median käsittelijät",
index b12faea..53d54a2 100644 (file)
        "thursday": "jeudi",
        "friday": "vendredi",
        "saturday": "samedi",
-       "sun": "Dim.",
-       "mon": "Lun.",
-       "tue": "Mar.",
-       "wed": "Mer.",
-       "thu": "Jeu.",
-       "fri": "Ven.",
-       "sat": "Sam.",
+       "sun": "dim.",
+       "mon": "lun.",
+       "tue": "mar.",
+       "wed": "mer.",
+       "thu": "jeu.",
+       "fri": "ven.",
+       "sat": "sam.",
        "january": "janvier",
        "february": "février",
        "march": "mars",
        "tooltip-pt-watchlist": "Une liste des pages dont vous suivez les modifications",
        "tooltip-pt-mycontris": "La liste de {{GENDER:|vos}} contributions",
        "tooltip-pt-anoncontribs": "Une liste des modifications effectuées depuis cette adresse IP",
-       "tooltip-pt-login": "Nous vous encourageons à vous connecter ; ce n’est cependant pas obligatoire",
+       "tooltip-pt-login": "Nous vous encourageons à vous connecter ; ce n’est cependant pas obligatoire.",
        "tooltip-pt-login-private": "Vous devez vous connecter pour utiliser ce wiki",
        "tooltip-pt-logout": "Se déconnecter",
-       "tooltip-pt-createaccount": "Nous vous encourageons à créer un compte utilisateur et vous connecter; ce n’est cependant pas obligatoire",
+       "tooltip-pt-createaccount": "Nous vous encourageons à créer un compte utilisateur et vous connecter ; ce n’est cependant pas obligatoire.",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "tooltip-ca-edit": "Modifier le wikicode",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Page dans laquelle|Pages dans lesquelles}} cette page est incluse ($1)",
-       "pageinfo-toolboxlink": "Information sur la page",
+       "pageinfo-toolboxlink": "Informations sur la page",
        "pageinfo-redirectsto": "Rediriger vers",
        "pageinfo-redirectsto-info": "info",
        "pageinfo-contentpage": "Comptée comme page de contenu",
index 7d18ae6..3ad54a4 100644 (file)
        "tooltip-pt-watchlist": "A lista de páxinas cuxas modificacións está a seguir",
        "tooltip-pt-mycontris": "Lista das súas contribucións",
        "tooltip-pt-anoncontribs": "Unha lista das modificacións feitas desde este enderezo IP",
-       "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio",
+       "tooltip-pt-login": "É recomendable que se rexistre, se ben non é obrigatorio",
        "tooltip-pt-login-private": "Precisa conectarse para usa esta wiki",
        "tooltip-pt-logout": "Saír ao anonimato",
-       "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
+       "tooltip-pt-createaccount": "É recomendable que cree unha conta e acceda ao sistema, se ben non é obrigatorio",
        "tooltip-ca-talk": "Conversa acerca do contido desta páxina",
        "tooltip-ca-edit": "Edite esta páxina",
        "tooltip-ca-addsection": "Comezar unha nova sección",
        "tooltip-p-logo": "Visitar a páxina principal",
        "tooltip-n-mainpage": "Visitar a páxina principal",
        "tooltip-n-mainpage-description": "Visitar a páxina principal",
-       "tooltip-n-portal": "Información acerca do proxecto, o que pode facer e os lugares onde atopar as cousas",
+       "tooltip-n-portal": "Información acerca do proxecto, do que pode facer e dos lugares onde atopar as cousas",
        "tooltip-n-currentevents": "Información acerca de acontecementos de actualidade",
        "tooltip-n-recentchanges": "A lista de modificacións recentes no wiki",
        "tooltip-n-randompage": "Cargar unha páxina ao chou",
index fb03342..714f258 100644 (file)
        "listfiles-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.",
        "imgfile": "קובץ",
        "listfiles": "רשימת קבצים",
+       "listfiles_subpage": "העלאות של $1",
        "listfiles_thumb": "תמונה ממוזערת",
        "listfiles_date": "תאריך",
        "listfiles_name": "שם",
index ddad4da..866205c 100644 (file)
        "prefs-resetpass": "promijeni zaporku",
        "prefs-changeemail": "promijeni ili ukloni adresu e-pošte",
        "prefs-setemail": "Postavite adresu e-pošte",
-       "prefs-email": "Mogućnosti e-maila",
+       "prefs-email": "Mogućnosti e-pošte",
        "prefs-rendering": "Izgled",
        "saveprefs": "Spremi",
        "restoreprefs": "Vrati sve postavke na prvobitno zadane (u svim odjeljcima)",
        "prefs-custom-js": "Prilagođen JS",
        "prefs-common-config": "Dijeljeni CSS/JSON/JavaScript za sve izglede:",
        "prefs-reset-intro": "Možete koristiti ovu stranicu za povrat Vaših postavki na prvotne postavke. Ovo se ne može poništiti.",
-       "prefs-emailconfirm-label": "Potvrda e-mail adrese:",
+       "prefs-emailconfirm-label": "Potvrda adrese e-pošte:",
        "youremail": "Vaša adresa e-pošte:",
        "username": "Ime {{GENDER:$1|suradnika|suradnice}}:",
        "prefs-memberingroups": "{{GENDER:$2|Suradnik je član|Suradnica je članica}} {{PLURAL:$1|sljedeće skupine|sljedećih skupina}}:",
        "rcfilters-filter-showlinkedfrom-label": "Prikaži promjene na povezanim stranicama",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Stranice na koje se povezuje</strong> izabrana stranica",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Stranice koje povezuju</strong> na izabranu stranicu",
+       "rcfilters-allcontents-label": "Sav sadržaj",
+       "rcfilters-alldiscussions-label": "Svi razgovori",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmjena|su izmjene}} od <strong>$3, $4</strong> (prikazano ih do <strong>$1</strong>).",
        "rclistfromreset": "Vrati na zadano izbor datuma",
        "rclistfrom": "Prikaži nove promjene počevši od $3 $2",
index 928690b..a346ed2 100644 (file)
        "rcfilters-preference-help": "Friss változtatások betöltése szűrők közti keresés és kiemelések lehetősége nélkül.",
        "rcfilters-watchlist-preference-label": "JavaScript nélküli felület használata",
        "rcfilters-watchlist-preference-help": "Figyelőlista betöltése szűrők közti keresés és kiemelések lehetősége nélkül.",
-       "rcfilters-filter-showlinkedfrom-label": "A következő lapra hivatkozó lapok változtatásainak megjelenítése",
+       "rcfilters-filter-showlinkedfrom-label": "A következő lapról hivatkozott lapok változtatásainak megjelenítése",
        "rcfilters-filter-showlinkedfrom-option-label": "A kiválasztott <strong>lapról</strong> hivatkozott lapok",
        "rcfilters-filter-showlinkedto-label": "A következő lapról hivatkozott lapok változtatásainak megjelenítése",
        "rcfilters-filter-showlinkedto-option-label": "A kiválasztott <strong>lapra</strong> hivatkozó lapok",
index 36f20bc..6bee178 100644 (file)
@@ -64,6 +64,7 @@
        "tog-useeditwarning": "Advertir me quando io quita un pagina de modification sin publicar le cambiamentos",
        "tog-prefershttps": "Sempre usar un connexion secur durante session aperte",
        "tog-showrollbackconfirmation": "Monstrar un demanda de confirmation al cliccar sur un ligamine de revocation",
+       "tog-requireemail": "Requirer e-mail pro reinitialisar contrasigno",
        "underline-always": "Sempre",
        "underline-never": "Nunquam",
        "underline-default": "Como definite per tu navigator o apparentia",
        "prefs-help-email": "Le adresse de e-mail es optional, ma es necessari pro le reinitialisation de tu contrasigno, in caso que tu lo oblida.",
        "prefs-help-email-others": "Tu pote etiam optar pro permitter que altere personas te contacta via tu pagina de usator o de discussion, sin necessitate de revelar tu identitate.",
        "prefs-help-email-required": "Un adresse de e-mail es obligatori.",
+       "prefs-help-requireemail": "Si es marcate, inviar messages pro reinitialisar contrasigno solmente si le persona reinitialisante forni non solmente le nomine de usator ma etiam le adresse de e-mail pro iste conto.",
        "prefs-info": "Informationes de base",
        "prefs-i18n": "Internationalisation",
        "prefs-signature": "Signatura",
        "listfiles-userdoesnotexist": "Le conto de usator \"$1\" non es registrate.",
        "imgfile": "file",
        "listfiles": "Lista de files",
+       "listfiles_subpage": "Files incargate per $1",
        "listfiles_thumb": "Miniatura",
        "listfiles_date": "Data",
        "listfiles_name": "Nomine",
        "ipblocklist-legend": "Cercar un usator blocate",
        "blocklist-userblocks": "Celar blocadas de conto",
        "blocklist-tempblocks": "Celar blocadas temporari",
+       "blocklist-indefblocks": "Celar blocadas infinite",
        "blocklist-addressblocks": "Celar blocadas de singule adresse IP",
        "blocklist-type": "Typo:",
        "blocklist-type-opt-all": "Totes",
        "mycustomjsredirectprotected": "Tu non ha le permission de modificar iste pagina JavaScript perque illo es un redirection e non puncta a un pagina in tu spatio de usator.",
        "easydeflate-invaliddeflate": "Le contento fornite non es correctemente comprimite",
        "unprotected-js": "Pro motivos de securitate, non es possibile cargar codice JavaScript de paginas non protegite. Crea JavaScript solmente in le spatio de nomines \"MediaWiki:\" o como un subpagina de usator.",
-       "userlogout-continue": "Vole tu clauder le session?"
+       "userlogout-continue": "Vole tu clauder le session?",
+       "rest-prefix-mismatch": "Le cammino requestate ($1) non es intra le cammino radice del REST API ($2)",
+       "rest-wrong-method": "Le methodo del requesta ($1) non es {{PLURAL:$3|le methodo|inter le methodos}} permittite pro iste cammino ($2)",
+       "rest-no-match": "Le cammino relative requestate ($1) non corresponde a un gestor cognoscite"
 }
index 5cbecc3..50ef092 100644 (file)
        "tog-useeditwarning": "Avvisa quando si esce da una pagina di modifica con modifiche non salvate",
        "tog-prefershttps": "Usa sempre una connessione sicura quando si effettua l'accesso",
        "tog-showrollbackconfirmation": "Mostra una richiesta di conferma quando si clicca su un link di rollback",
+       "tog-requireemail": "Richiedi email per cambiare la password",
        "underline-always": "Sempre",
        "underline-never": "Mai",
        "underline-default": "Impostazioni predefinite del browser o del tema",
        "undo-norev": "La modifica non può essere annullata perché non esiste o è stata cancellata.",
        "undo-nochange": "Sembra che la modifica sia già stata annullata.",
        "undo-summary": "Annullata la modifica $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]])",
+       "undo-summary-anon": "Annullata la modifica $1 di [[Special:Contributions/$2|$2]]",
        "undo-summary-username-hidden": "Annullata la modifica $1 di un utente nascosto",
        "cantcreateaccount-text": "La registrazione è stata bloccata da [[User:$3|$3]] per questo indirizzo IP ('''$1''').\n\nLa motivazione del blocco fornita da $3 è la seguente: ''$2''",
        "cantcreateaccount-range-text": "La registrazione da indirizzi IP nell'intervallo <strong>$1</strong>, che include il tuo (<strong>$4</strong>), è stata bloccata da [[User:$3|$3]].\n\nLa motivazione fornita da $3 è <em>$2</em>",
        "prefs-help-email": "L'inserimento del proprio indirizzo email è facoltativo, ma permette di ricevere la propria password qualora venisse dimenticata.",
        "prefs-help-email-others": "Puoi anche scegliere di lasciare che gli altri ti contattino via posta elettronica con un collegamento dalla tua pagina utente o di discussione.\nIl tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.",
        "prefs-help-email-required": "L'indirizzo email è obbligatorio.",
+       "prefs-help-requireemail": "Se selezionato, invieremo solo email per la reimpostazione della password se la persona che sta resettando la password ha fornito sia il nome utente che l'email per questa utenza.",
        "prefs-info": "Informazioni di base",
        "prefs-i18n": "Internazionalizzazione",
        "prefs-signature": "Firma",
        "ipblocklist-legend": "Cerca un utente bloccato",
        "blocklist-userblocks": "Nascondi i blocchi degli utenti registrati",
        "blocklist-tempblocks": "Nascondi i blocchi temporanei",
+       "blocklist-indefblocks": "Nascondi blocchi infiniti",
        "blocklist-addressblocks": "Nascondi i blocchi di un solo IP",
        "blocklist-type": "Tipo:",
        "blocklist-type-opt-all": "Tutto",
        "move-page-legend": "Spostamento di pagina",
        "movepagetext": "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. Puoi aggiornare automaticamente i redirect che puntano al titolo originale. Puoi decidere di non farlo, ma ricordati di verificare che lo spostamento non abbia creato [[Special:DoubleRedirects|doppi redirect]] o [[Special:BrokenRedirects|redirect errati]]. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.\n\nSi noti che la pagina <strong>non</strong> sarà spostata se ne esiste già una con il nuovo nome, a meno che quest'ultima non sia costituita solo da un redirect e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.\n\n<strong>Nota:</strong>\nUn cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
        "movepagetext-noredirectfixer": "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. La pagina attuale diverrà automaticamente un redirect al nuovo titolo. Controlla che lo spostamento non abbia creato [[Special:DoubleRedirects|doppi redirect]] o [[Special:BrokenRedirects|redirect errati]]. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.\n\nSi noti che la pagina <strong>non</strong> sarà spostata se ne esiste già una con il nuovo nome, a meno che non sia costituita solo da un redirect e sia priva di versioni precedenti. In caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.\n\n<strong>Nota:</strong>\nUn cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
+       "movepagetext-noredirectsupport": "Questo modulo consente di rinominare una pagina, spostando tutta la sua cronologia al nuovo nome. L'onere di garantire che i collegamenti alla pagina restino corretti spetta a chi la sposta.\n\nSi noti che la pagina <strong>non</strong> sarà spostata se ne esiste già una con il nuovo nome.\nIn caso di spostamento errato si può quindi tornare subito al vecchio titolo, e non è possibile sovrascrivere per errore una pagina già esistente.\n\n<strong>Nota:</strong>\nUn cambiamento così drastico può creare contrattempi e problemi, soprattutto per le pagine più visitate. Accertarsi di aver valutato le conseguenze dello spostamento prima di procedere.",
        "movepagetalktext": "Se selezioni questa casella, la corrispondente pagina di discussione sarà spostata automaticamente al nuovo titolo, a meno che esista già una pagina di discussione non vuota.\n\nIn questi casi, se lo ritieni opportuno, dovrai spostare o unire manualmente la pagina.",
        "moveuserpage-warning": "'''Attenzione:''' Si sta per spostare una pagina utente. Nota che verrà spostata solamente la pagina. L'utente ''non'' sarà rinominato.",
        "movecategorypage-warning": "<strong>Attenzione:</strong> si sta per spostare una categoria. Solo questa pagina verrà spostata: tutte le pagine nella vecchia categoria <em>non</em> saranno inserite nella nuova.",
        "specialpages-group-developer": "Strumenti per gli sviluppatori",
        "blankpage": "Pagina vuota",
        "intentionallyblankpage": "Questa pagina è lasciata volutamente vuota.",
+       "disabledspecialpage-disabled": "Questa pagina è stata disabilitata da un amministratore di sistema.",
        "external_image_whitelist": " #Lasciare questa riga esattamente com'è<pre>\n#Inserire i frammenti delle espressioni regolari (solo la parte che va fra //) di seguito\n#Queste verranno messe a confronto con gli indirizzi URL delle immagini esterne (hotlinked)\n#Le corrispondenze saranno mostrate come immagini, altrimenti verrà mostrato solo un collegamento\n#Le righe che iniziano con # sono considerate dei commenti\n#La differenza tra maiuscole e minuscole non è significativa\n\n#Inserire sopra questa riga tutti i frammenti di regex. Lasciare questa riga esattamente com'è</pre>",
        "tags": "Etichette di modifiche valide",
        "tag-filter": "Filtra per [[Special:Tags|etichetta]]:",
index f143c93..20e2bb7 100644 (file)
@@ -98,7 +98,8 @@
                        "Puntti ja",
                        "マツムシ",
                        "神樂坂秀吉",
-                       "Yuukin0248"
+                       "Yuukin0248",
+                       "Reiwa period"
                ]
        },
        "tog-underline": "リンクの下線:",
        "rcfilters-filter-showlinkedto-label": "指定されたページのリンク元の変更を表示",
        "rcfilters-filter-showlinkedto-option-label": "指定されたページに<strong>リンクしているページ(リンク元)</strong>",
        "rcfilters-target-page-placeholder": "ページ名(またはカテゴリ名)を入力",
+       "rcfilters-alldiscussions-label": "全ての議論",
        "rcnotefrom": "以下は<strong>$3 $4</strong>以降の{{PLURAL:$5|更新です}} (最大 <strong>$1</strong> 件)。",
        "rclistfromreset": "日時指定をリセット",
        "rclistfrom": "$3の$2以降の更新を表示する",
        "backend-fail-contenttype": "「$1」に保存するコンテンツの種類が判断できませんでした。",
        "backend-fail-batchsize": "ストレージバックエンドは $1 件のファイル{{PLURAL:$1|操作}}のバッチを与えられました; 上限は $2 件の{{PLURAL:$2|操作}}です。",
        "backend-fail-usable": "権限が不足している、またはディレクトリ/コンテナーがないため、ファイル「$1」の読み取り/書き込みができません。",
+       "backend-fail-stat": "ファイル\"$1\"の状態を読み込めませんでした。",
        "filejournal-fail-dbconnect": "ストレージバックエンド「$1」のジャーナルデータベースに接続できません。",
        "filejournal-fail-dbquery": "ストレージバックエンド「$1」のジャーナルデータベースを更新できません。",
        "lockmanager-notlocked": "「$1」をロック解除できませんでした。ロックされていません。",
        "listfiles-userdoesnotexist": "利用者アカウント「$1」は登録されていません。",
        "imgfile": "ファイル",
        "listfiles": "ファイル一覧",
+       "listfiles_subpage": "$1 によるアップロード",
        "listfiles_thumb": "サムネイル",
        "listfiles_date": "日時",
        "listfiles_name": "名前",
index 214cace..8ed1011 100644 (file)
        "group-all": "(pêro)",
        "group-user-member": "Karber",
        "group-bot-member": "Bot",
-       "group-sysop-member": "İdareker",
+       "group-sysop-member": "{{GENDER:$1|idareker}}",
        "group-bureaucrat-member": "Burokrat",
        "grouppage-user": "{{ns:project}}:Karberi",
        "grouppage-bot": "{{ns:project}}:Boti",
index 8ffab44..f293d56 100644 (file)
        "listfiles-userdoesnotexist": "계정 \"$1\"은 등록되지 않았습니다.",
        "imgfile": "파일",
        "listfiles": "파일 목록",
+       "listfiles_subpage": "$1님이 올림",
        "listfiles_thumb": "섬네일",
        "listfiles_date": "날짜",
        "listfiles_name": "이름",
        "ipblocklist-legend": "차단된 사용자 찾기",
        "blocklist-userblocks": "계정에 대한 차단 숨기기",
        "blocklist-tempblocks": "기한이 정해진 차단을 숨기기",
+       "blocklist-indefblocks": "무기한 차단 숨기기",
        "blocklist-addressblocks": "단일 IP 차단을 숨기기",
        "blocklist-type": "유형:",
        "blocklist-type-opt-all": "모두",
        "empty-username": "(사용 가능한 사용자 이름 없음)",
        "contribslink": "기여",
        "emaillink": "이메일 보내기",
-       "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\"님이 사용하였기 때문에 자동으로 차단되었습니다.\n$1님이 차단된 이유는 다음과 같습니다: \"$2\"",
+       "autoblocker": "당신의 IP 주소는 최근에 \"[[User:$1|$1]]\" 님이 사용하였기 때문에 자동으로 차단되었습니다.\n$1 님이 차단된 이유는 다음과 같습니다: \"$2\"",
        "blocklogpage": "차단 기록",
        "blocklog-showlog": "이 사용자는 과거에 차단된 기록이 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:",
        "blocklog-showsuppresslog": "이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:",
-       "blocklogentry": "님이 [[$1]]님을 $2 차단했습니다 $3",
+       "blocklogentry": "님이 [[$1]] 님을 $2 차단했습니다 $3",
        "reblock-logentry": " 님이 [[$1]] 님의 차단 기간을 $2(으)로 바꾸었습니다 $3",
        "blocklogtext": "이 목록은 사용자 차단/차단 해제 기록입니다.\n자동으로 차단된 IP 주소는 여기에 나오지 않습니다.\n[[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.",
        "unblocklogentry": "님이 $1님을 차단 해제했습니다",
        "mycustomjsredirectprotected": "넘겨주기이면서 사용자 공간 안에 참조하고 있지 않으므로 이 자바스크립트 페이지를 편집할 권한이 없습니다.",
        "easydeflate-invaliddeflate": "주어진 컨텐츠가 적절히 압축되지 않았습니다",
        "unprotected-js": "보안 상의 이유로 자바스크립트는 보호되지 않은 문서로부터 불러올 수 없습니다. 미디어위키: 이름공간이나 사용자의 하위 문서에서만 자바스크립트를 만들어 주십시오.",
-       "userlogout-continue": "로그아웃하시겠습니까?"
+       "userlogout-continue": "로그아웃하시겠습니까?",
+       "rest-no-match": "요청된 상대 경로($1)는 알려진 핸들러와 일치하지 않습니다"
 }
index bdfc178..e04bda1 100644 (file)
@@ -11,7 +11,8 @@
                        "Universal Life",
                        "לערי ריינהארט",
                        "아라",
-                       "StevenJ81"
+                       "StevenJ81",
+                       "Chabi1"
                ]
        },
        "tog-underline": "Suliñar los atamientos:",
        "mypage": "Hoja",
        "mytalk": "Diskusyón",
        "anontalk": "Diskusyón para este adresso de IP",
-       "navigation": "Navigación",
-       "and": "&#32;y",
+       "navigation": "Navigasyon",
+       "and": "&#32;i",
        "faq": "DDS",
        "actions": "Aksiones",
        "namespaces": "Espacios de nombres",
        "tagline": "De {{SITENAME}}",
        "help": "Ayudo",
        "search": "Buxcar",
-       "searchbutton": "Buxcar",
+       "searchbutton": "Bushkar",
        "go": "Ir",
        "searcharticle": "Yir",
        "history": "La istoria de la hoja",
        "tooltip-pt-logout": "Sal de tu cuento",
        "tooltip-pt-createaccount": "Te consejamos de avrir un cuento y hazer entrada allá, portanto no sos obligado",
        "tooltip-ca-talk": "Diskusyón encima del contènido desta hoja",
-       "tooltip-ca-edit": "Troca esta hoja",
+       "tooltip-ca-edit": "Troka esta oja",
        "tooltip-ca-addsection": "Ajusta un kapítolo muevo",
        "tooltip-ca-viewsource": "Esta hoja está guadrada.\nPuedes ver su manadero",
        "tooltip-ca-history": "Enderechamientos passados desta hoja",
        "feedback-cancel": "Anular",
        "feedback-message": "Messaje",
        "feedback-subject": "Sujeto",
-       "searchsuggest-search": "Buxca en {{SITENAME}}",
+       "searchsuggest-search": "Bushka en {{SITENAME}}",
        "duration-seconds": "$1{{PLURAL:$1|segundo|segundos}}",
        "duration-minutes": "$1{{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1{{PLURAL:$1|ora|oras}}",
index f355e60..8d79167 100644 (file)
        "password-login-forbidden": "Šī lietotājvārda un paroles izmantošana ir aizliegta.",
        "mailmypassword": "Atiestatīt paroli",
        "passwordremindertitle": "Jauna pagaidu parole no {{SITENAME}}s",
-       "passwordremindertext": "Kāds (iespējams, Tu pats, no IP adreses $1)\nlūdza, lai nosūtām Tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 pagaidu parole tagad ir $3.\nLudzu, nomaini paroli, kad esi veiksmīgi iekļuvis iekšš.\nTavas pagaidu paroles derīguma termiņš beigsies pēc {{PLURAL:$5|$5 dienām|$5 dienas|$5 dienām}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
+       "passwordremindertext": "Kāds (no IP adreses $1)\nlūdza, lai nosūtām tev jaunu {{SITENAME}} ($4) paroli.\nLietotajam $2 izveidota pagaidu parole $3. Ja tāds bija tavs mērķis, tagad tev jāpieslēdzas un jānomaina parole. Tavas pagaidu paroles derīguma termiņš beigsies pēc {{PLURAL:$5|$5 dienām|$5 dienas|$5 dienām}}.\n\nJa paroles pieprasījumu bija nosūtījis kāds cits, vai arī tu atcerējies savu veco paroli, šo var ignorēt. Vecā parole joprojām darbojas.",
        "noemail": "Lietotājs \"$1\" nav reģistrējis e-pasta adresi.",
        "noemailcreate": "Tev jānorāda derīgu e-pasta adresi",
        "passwordsent": "Esam nosūtījuši jaunu paroli uz e-pasta adresi, kuru ir norādījis lietotājs $1. Lūdzu, nāc iekšā ar jauno paroli, kad būsi to saņēmis.",
index 3950d1f..b78c96c 100644 (file)
@@ -18,7 +18,8 @@
                        "Zakiy",
                        "Vlad5250",
                        "S Kartika",
-                       "NoiX180"
+                       "NoiX180",
+                       "Pitnia Ayu Saputri"
                ]
        },
        "tog-underline": "Garih bawahi pautan:",
        "createaccountmail": "Mohon pakai kato sandi samantaro dan kirim ka alamaik surek elektronik nan alah disabuikkan.",
        "createaccountmail-help": "Indak dapek digunoan untuak mambuek akun urang lain tanpa tau kato sandinyo.",
        "createacct-realname": "Namo asli (opsional)",
-       "createacct-reason": "Alasan",
+       "createacct-reason": "Alasan (log publik)",
        "createacct-reason-ph": "Manga Sanak mambuek akun lain",
        "createacct-reason-help": "Pasan yang ditunjuakan dalam log pambuatan akun",
        "createacct-submit": "Buek akun Sanak",
        "right-unblockself": "Malapehan sakek surang",
        "right-protect": "Ubah tingkek palinduangan jo suntiang halaman yang dilinduangi baruntun",
        "right-editprotected": "Manyuntiang halaman yang dilinduangi sabagai \"{{int:protect-level-sysop}}\"",
+       "right-editcontentmodel": "manyuntiang model konten sabuah laman",
        "right-editinterface": "Manyuntiang antarmuko pangguno",
        "right-editusercss": "Manyuntiang berkas CSS pangguno lain",
        "right-edituserjson": "Manyuntiang berkas JSON pangguno lain",
        "right-edituserjs": "Manyuntiang berkas JS pangguno lain",
+       "right-editsitecss": "manyuntiang CSS untuak sadoalah situs",
+       "right-editsitejson": "suntiang JSON untuak sadoalah situs",
+       "right-editsitejs": "suntiang JavaScript untuak sadoalah situs",
+       "right-editmyusercss": "suntiang berkas CSS pangguno Sanak",
+       "right-editmyuserjson": "suntiang berkas JSON pangguno Sanak",
+       "right-editmyuserjs": "suntiang berkas JavaScript pangguno Sanak",
+       "right-editmyuserjsredirect": "suntiang berkas JavaScript Sanak nan marupokan aliahan",
+       "right-viewmywatchlist": "Caliak daftar pantauan Sanak",
+       "right-editmywatchlist": "Manyuntiang daftar Sanak surang. Beberapo kegiatan akan tetap akan manambahan halaman tanpa hak iko.",
+       "right-viewmyprivateinfo": "Maliek data pribadi Sanak surang (misalnyo: alamaik email, namo asli Sanak)",
+       "right-editmyprivateinfo": "Manyuntiang data pribadi Sanak surang (misalnyo: alamaik surel, namo asli)",
+       "right-editmyoptions": "manyuntiang preferensi Sanak",
+       "right-rollback": "mambaliakan sacaro capek suntiangan-suntiangan pangguno tarakhia nan manyuntiang laman tatantu",
+       "right-markbotedits": "tandoi pambaliakan revisi sabagai suntiangan bot",
        "right-noratelimit": "Indak dipangaruahi jo pambatehan jumlah suntiangan",
        "right-import": "Mangimpor laman dari wiki lain",
        "right-importupload": "Mangimpor laman dari berkas nan dimuek",
+       "right-patrol": "manandoi suntiangan pangguno lain sabagai terpatroli",
        "right-autopatrol": "Suntiangan surang sacaro otomatih ditandoi tapantau",
+       "right-patrolmarks": "caliak panandoan patroli parubahan tabaru",
+       "right-unwatchedpages": "mancaliak daftar laman nan indak tapantau",
+       "right-mergehistory": "manggabuangan revisi-revisi tadahulu dari laman ko",
+       "right-userrights": "Manyuntiang sadoalah hak pangguno",
+       "right-userrights-interwiki": "Manyuntiang hak pangguno-pangguno di wiki lain",
+       "right-siteadmin": "Mangunci jo mambukak kunci basis data",
+       "right-override-export-depth": "Ekspor laman tamasuak laman-laman takaik inggo kadalaman 5",
+       "right-sendemail": "Mangirim surel ka pangguno lain",
+       "right-managechangetags": "Buek jo matikan [[Special:Tags|tag]]",
+       "right-applychangetags": "Terapkan [[Special:Tags|tags]] basamoan jo parubahan pangguno",
+       "right-changetags": "Tambah jo apuih [[Special:Tags|tag]] arbitrari pado tiok-tiok  revisi jo entri log",
+       "right-deletechangetags": "ApuIh [[Special:Tags|tag]] dari basisdata",
+       "grant-generic": "\"$1\" bundel hak akses",
+       "grant-group-page-interaction": "Barinteraksi jo laman",
+       "grant-group-file-interaction": "Barinteraksi jo media",
+       "grant-group-watchlist-interaction": "Barinteraksi jo daftar pantauan Sanak",
        "grant-group-email": "Kirim surel",
+       "grant-group-high-volume": "Malakukan aktivitas nan amaik banyak",
+       "grant-group-customization": "Kustomisasi jo preferensi",
+       "grant-group-administration": "Malakukan tindakan administratif",
+       "grant-group-private-information": "Akses data pribadi tantang Sanak",
+       "grant-group-other": "Aktivitas lain-lain",
+       "grant-blockusers": "Sakek jo bukak panyakekan pangguno",
        "grant-createaccount": "Buek akun",
        "grant-createeditmovepage": "Buek, suntiang, dan pindahkan laman",
        "grant-delete": "Hapuih laman, revisi, dan log entri",
+       "grant-editinterface": "Suntiang ruang namo MediaWiki jo JSON pangguno untuak kasadoalahan situs",
+       "grant-editmycssjs": "Manyuntiang laman CSS/JSON/JavaScript Sanak",
+       "grant-editmyoptions": "Manyuntiang preferensi pangguno Sanak jo konfigurasi JSON",
+       "grant-editmywatchlist": "Suntiang daftar pantauan Sanak",
+       "grant-editsiteconfig": "Suntiang CSS/JS pangguno untuak kasadoalahan situs",
+       "grant-editpage": "Manyuntiang laman nan ado",
+       "grant-editprotected": "Manyuntiang laman nan dilinduangi",
+       "grant-highvolume": "Panyuntiangan jo volume tinggi",
+       "grant-oversight": "Suruakan pangguno jo revisinyo",
+       "grant-patrol": "Tandoi laman tapatroli",
+       "grant-privateinfo": "Akses informasi pribadi",
+       "grant-protect": "Malinduangi jo mambukak palinduangan laman",
+       "grant-rollback": "Mambaliakan parubahan pado laman",
+       "grant-sendemail": "Mangirim surel ka pangguno lain",
+       "grant-uploadeditmovefile": "Maunggah, mangganti, jo mamindahan berkas",
+       "grant-uploadfile": "Muek berkas baru",
        "grant-basic": "Akses dasar",
+       "grant-viewdeleted": "Mancaliak laman jo berkas nan diapuih",
+       "grant-viewmywatchlist": "Caliak daftar pantauan Sanak",
+       "grant-viewrestrictedlogs": "Caliak entri log tabateh",
        "newuserlogpage": "Log pangguno baru",
        "newuserlogpagetext": "Di bawah ko log pandaftaran pangguno baru",
        "rightslog": "Log parubahan hak akses",
        "action-createpage": "buek laman ko",
        "action-createtalk": "buek laman rundiang ko",
        "action-createaccount": "buek akun pangguno ko",
+       "action-autocreateaccount": "buek otommatis akun pangguno lua",
+       "action-history": "Caliak riwayaik suntiangan laman ko",
        "action-minoredit": "tandoi sabagai suntiangan ketek",
        "action-move": "pindahan laman ko",
        "action-move-subpages": "pindahkan laman ko, jo sublamannyo",
        "action-move-rootuserpages": "pindahan laman pangguno",
+       "action-move-categorypages": "Pindahan halaman kategori",
        "action-movefile": "pindahkan berkas ko",
        "action-upload": "muek berkas ko",
        "action-reupload": "timpo berkas lamo",
+       "action-reupload-shared": "manimpo berkas nan alah ado di tampek panyimpanan berkas basamo",
+       "action-upload_by_url": "mamuek berkas ko dari sabuah alamaik URL",
        "action-writeapi": "manggunoan panulisan API",
+       "action-delete": "Hapuih laman ko",
+       "action-deleterevision": "Apuih revisi",
+       "action-deletelogentry": "apuih entri log",
+       "action-deletedhistory": "mancaliak versi tadaulu laman nan alah diapuih",
+       "action-deletedtext": "caliak teks revisi nan diapuih",
+       "action-browsearchive": "Cari laman nan dihapuih",
+       "action-undelete": "batalkan pangapuihan laman",
+       "action-suppressrevision": "tinjau jo baliakan revisi nan disuruakan",
+       "action-suppressionlog": "mancaliak log privat ko",
+       "action-block": "Sakek pangguno lain dari panyuntiangan",
+       "action-protect": "mangganti tingkek palinduangan laman ko",
+       "action-rollback": "mambaliakan sacaro capek suntiangan-suntiangan pangguno tarakhia nan manyuntiang laman tatantu",
        "action-import": "impor laman dari wiki lain",
+       "action-importupload": "maimpor laman ko dari berkas nan dimuek",
+       "action-patrol": "manandoi suntiangan pangguno lain sabagai tapatroli",
+       "action-autopatrol": "manandoi suntiangan Sanak surang sabagai tapatroli",
+       "action-unwatchedpages": "mancaliak daftar laman nan indak tapantau",
+       "action-mergehistory": "manggabuangkan revisi-revisi tadaulu dari laman ko",
+       "action-userrights": "manyuntiang sadoalah hak pangguno",
+       "action-userrights-interwiki": "manyuntiang hak pangguno-pangguno dari wiki lain",
+       "action-siteadmin": "mangunci jo mambukak basisdata",
+       "action-sendemail": "kirim surel",
+       "action-editmyoptions": "manyuntiang preferensi Sanak",
+       "action-editmywatchlist": "suntiang daftar pantauan Sanak",
+       "action-viewmywatchlist": "caliak daftar pantauan Sanak",
+       "action-viewmyprivateinfo": "caliak informasi pribadi Sanak",
+       "action-editmyprivateinfo": "manyuntiang informasi pribadi Sanak",
+       "action-editcontentmodel": "manyuntiang model konten sabuah laman",
+       "action-managechangetags": "buek jo matikan tag",
+       "action-applychangetags": "terapkan tag basamoan jo parubahan Sanak",
+       "action-changetags": "Tambah jo apuih arbitrari pado tiok-tiok  revisi jo entri log",
+       "action-deletechangetags": "apuih tag dari basisdata",
+       "action-purge": "apuih singgahan laman ko",
+       "action-apihighlimits": "manggunoan bateh labiah tinggi dalam kueri API",
+       "action-autoconfirmed": "indak dipangaruahi bateh laju babasis IP",
+       "action-bigdelete": "Apuih halaman nan banyak versi tadahulunyo",
+       "action-blockemail": "manyakek pangiriman surel dek pangguno",
+       "action-bot": "dipalakukan sabagai proses otomatis",
+       "action-editprotected": "manyuntiang laman talinduangi sabagai \"{{int:protect-level-sysop}}\"",
+       "action-editsemiprotected": "manyuntiang laman nan talinduangi sabagai \"{{int:protect-level-sysop}}\"",
+       "action-editinterface": "manyuntiang antarmuko pangguno",
+       "action-editusercss": "manyuntiang berkas CSS pangguno lain",
+       "action-edituserjson": "manyuntiang berkas JSON pangguno lain",
+       "action-edituserjs": "manyuntiang berkas JS pangguno lain",
+       "action-editsitecss": "manyunting CSS untuak kasadoalahan situs",
+       "action-editsitejson": "suntiang JSON untuak kasadoalahan situs",
+       "action-editsitejs": "suntiang JavaScript untuak kasadoalahan situs",
+       "action-editmyusercss": "suntiang berkas CSS pangguno Sanak",
+       "action-editmyuserjson": "suntiang berkas JSON pangguno Sanak",
+       "action-editmyuserjs": "suntiang berkas JavaScript pangguno Sanak",
+       "action-editmyuserjsredirect": "suntiang berkas JavaScript Sanak nan marupokan aliahan.",
+       "action-viewsuppressed": "caliak parubahan nan tasuruak dari sadoalah pangguno",
+       "action-hideuser": "sakek namo pangguno jo suruakan dari publik",
+       "action-ipblock-exempt": "abaikan panyakekan IP, panyakekan otomatis, jo rantang panyakekan",
+       "action-unblockself": "malapehan sakek surang",
+       "action-noratelimit": "indak dipangaruahi jo pambatehan jumlah suntiangan",
+       "action-reupload-own": "manimpo berkas nan dimuek surang",
+       "action-nominornewtalk": "indak ado tando suntiangan ketek di laman rundiang mamicu pasan baru",
+       "action-markbotedits": "tandoi pambaliakan revisi sabagai suntiangan bot",
+       "action-patrolmarks": "caliak panandoan patroli parubahan tabaru",
+       "action-override-export-depth": "ekspor laman tamasuak laman-laman takaik inggo kadalaman 5",
+       "action-suppressredirect": "indak mambuek pangaliahan wakatu mamindahan laman",
        "nchanges": "$1 {{PLURAL:$1|parubahan}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|sajak kunjuangan tarakhia}}",
        "enhancedrc-history": "versi",
        "recentchanges": "Parubahan baru",
        "recentchanges-legend": "Piliahan parubahan baru",
        "recentchanges-summary": "Caliak parubahan baru di wiki pado laman ko.<br />\n;Patunjuak:(<span style=\"color:blue;\">bedo</span>) parubahan, (<span style=\"color:blue;\">sijarah</span>) riwayaik parubahan, '''B''' laman baru, '''b''' suntiangan bot, '''k''' suntiangan ketek, <span class=\"unpatrolled\">!</span> parubahan alun dipatroli,<br /><span style=\"color:green;\">'''(+ ''bita'')'''</span> isi laman batambah, <span style=\"color:red;\">(- ''bita'')</span> isi laman bakurang, (← Ikhtisar otomatih), (→ <span style=\"color:grey;\">Suntiangan bagian</span>)",
        "recentchanges-noresult": "Indak ado parubahan dalam rantang wakatu ko nan sasuai jo kriteria.",
+       "recentchanges-timeout": "wakatu mancari alah habih. Sanak mungkin ka mancubo parameter pancarian nan lain.",
+       "recentchanges-network": "Salamo tajadi kasalahan teknis, indak ado hasil nan biso dimuek. Silahkan cubo untuak manyagarkan halaman liak.",
+       "recentchanges-notargetpage": "Masuakan namo halaman nan di ateh untuak maliek parubahan nan terkait jo halaman itu.",
        "recentchanges-feed-description": "Tamuan parubahan baru dalam umpan wiki ko",
        "recentchanges-label-newpage": "Suntiangan ko mambuek laman baru",
        "recentchanges-label-minor": "Iko suntiangan ketek",
        "recentchanges-label-plusminus": "Parubahan ukuran laman dalam bita",
        "recentchanges-legend-heading": "<strong>Katarangan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (caliak pulo [[Special:NewPages|daftar laman nan baru]])",
+       "recentchanges-submit": "Tunjuakan",
+       "rcfilters-tag-remove": "Hapuih '$1'",
+       "rcfilters-legend-heading": "<strong> daftar singkekan:</strong>",
        "rcfilters-other-review-tools": "Pakakeh paninjauan lainnyo",
        "rcfilters-group-results-by-page": "Kalompokan hasil manuruik laman",
        "rcfilters-activefilters": "Panyariang aktip",
        "rcfilters-activefilters-hide": "Suruakan",
        "rcfilters-activefilters-show": "Tunjuakan",
+       "rcfilters-activefilters-hide-tooltip": "Sambunyian wilayah filter aktif",
+       "rcfilters-activefilters-show-tooltip": "Tunjukan wilayah filter aktif",
        "rcfilters-advancedfilters": "Panyariang lanjutan",
        "rcfilters-limit-title": "Hasil untuak ditampilkan",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|parubahan}}, $2",
        "rcfilters-savedqueries-unsetdefault": "Hapuih dari baku",
        "rcfilters-savedqueries-remove": "Hapuih",
        "rcfilters-savedqueries-new-name-label": "Namo",
+       "rcfilters-savedqueries-new-name-placeholder": "Jalehan tujuan panyaringan iko",
        "rcfilters-savedqueries-apply-label": "Buek panyariang",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Buek panyariang baku",
        "rcfilters-savedqueries-cancel-label": "Batalan",
        "rcfilters-savedqueries-add-new-title": "Simpan pangaturan panyariang ko",
        "rcfilters-savedqueries-already-saved": "Panyariang ko alah tasimpan. Ubah pangaturan Sanak untuak manyimpan panyariang baru.",
+       "rcfilters-restore-default-filters": "Kambalian filter awal",
+       "rcfilters-clear-all-filters": "Hapuih sado panyaringan",
        "rcfilters-show-new-changes": "Tunjuakan parubahan baru dari $1",
        "rcfilters-search-placeholder": "Panyariang parubahan (gunokan menu atau cari namo panyariang)",
        "rcfilters-search-placeholder-mobile": "Panyariang",
+       "rcfilters-invalid-filter": "Panyaringan indak sah",
+       "rcfilters-empty-filter": "Indak ado filter aktif. Sado alah kontribusi ditampilan.",
        "rcfilters-filterlist-title": "Panyariang",
+       "rcfilters-filterlist-whatsthis": "Baa caro karajonyo?",
+       "rcfilters-filterlist-feedbacklink": "Agiah tau kami apo nan Sanak pikian tantang alaik-alaik filter ko",
+       "rcfilters-highlightbutton-title": "Caliak hasilnyo",
+       "rcfilters-highlightmenu-title": "Piliah warno",
+       "rcfilters-highlightmenu-help": "Piliah warno untuak manyorot atribut iko",
        "rcfilters-filterlist-noresults": "Indak ado panyariang ditamukan",
+       "rcfilters-noresults-conflict": "Hasil indak ditamuan karano kriteria pancariannyo batantangan",
+       "rcfilters-state-message-subset": "Filter iko indak akan bapangaruh karano hasilnyo disaratoan jo {{PLURAL:$2|}} (cubo caliak untuak mambedaannyo):$1",
+       "rcfilters-state-message-fullcoverage": "Mamiliah sado panyaringan dalam kalompok iko samo jo indak mamiliah apopun, sahinggo panyaringan ko indak mambarikan hasil. Kalompok itu: $1",
+       "rcfilters-filtergroup-authorship": "Kontribusi panulih",
        "rcfilters-filter-editsbyself-label": "Suntiangan Sanak",
+       "rcfilters-filter-editsbyself-description": "Kontribusi Sanak",
        "rcfilters-filter-editsbyother-label": "Suntiangan urang lain",
+       "rcfilters-filter-editsbyother-description": "Sadoalah parubahan kacuali parubahan miliak surang.",
+       "rcfilters-filtergroup-user-experience-level": "Pandaftaran jo pangalaman pangguno",
        "rcfilters-filter-user-experience-level-registered-label": "Tadaftar",
+       "rcfilters-filter-user-experience-level-registered-description": "Panyuntiang masuak log",
        "rcfilters-filter-user-experience-level-unregistered-label": "Indak tadaftar",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Panyuntiang nan indak masuak log",
        "rcfilters-filter-user-experience-level-newcomer-label": "Pandatang baru",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Panyuntiang tadaftar nan mampunyoi suntiangan kurang dari 10 suntiangan jo aktivitas salamo 4 ari.",
+       "rcfilters-filter-user-experience-level-learner-label": "Urang baru",
+       "rcfilters-filter-user-experience-level-learner-description": "Panyuntiang tadaftar nan pangalamannyo barado antaro \"pangguno baru\" jo \"pangguno bapangalaman\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Pangguno bapangalaman",
+       "rcfilters-filter-user-experience-level-experienced-description": "Panyuntiang tadaftar jo labiah dari 500 suntiangan sarato aktivitas salamo 30 ari.",
+       "rcfilters-filtergroup-automated": "Kontribusi otomatis",
        "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Suntiangan nan dibuek jo pakakeh taotomatisasi.",
        "rcfilters-filter-humans-label": "Manusio (bukan bot)",
+       "rcfilters-filter-humans-description": "Suntiangan nan dibuek dek panyuntiang manusia.",
+       "rcfilters-filtergroup-reviewstatus": "Status paninjauan",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "Suntiangan nan indak ditandoi tapatroli, baiak sacaro manual atau otomatis.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Alun dipatroli",
+       "rcfilters-filter-reviewstatus-manual-description": "Suntiangan nan sacaro manual ditandoi tapatroli",
+       "rcfilters-filter-reviewstatus-manual-label": "Tapatroli manual",
+       "rcfilters-filter-reviewstatus-auto-description": "Suntiangan dek pangguno bapangalaman nan kontribusinyo sacaro otomatis ditandoi sabagai tapatroli",
+       "rcfilters-filter-reviewstatus-auto-label": "Otomatis tapatroli",
+       "rcfilters-filtergroup-significance": "Signifikan",
        "rcfilters-filter-minor-label": "Suntiangan ketek",
+       "rcfilters-filter-minor-description": "Suntiangan nan ditandoi panyuntiang sabagai suntiangan ketek",
        "rcfilters-filter-major-label": "Nan indak suntiangan ketek",
+       "rcfilters-filter-major-description": "Suntiangan nan ditandoi sabagai suntiangan ketek",
+       "rcfilters-filtergroup-watchlist": "Halaman nan dipantau",
+       "rcfilters-filter-watchlist-watched-label": "Daftar pantau",
+       "rcfilters-filter-watchlist-watched-description": "Parubahan pado laman dalam pantauan Sanak.",
+       "rcfilters-filter-watchlist-watchednew-label": "Parubahan Daftar Pantauan baru.",
+       "rcfilters-filter-watchlist-watchednew-description": "Parubahan laman-laman nan dipantau nan alun disinggahi dek Sanak sajak parubahan tajadi.",
+       "rcfilters-filter-watchlist-notwatched-label": "Indak dalam daftar pantauan",
+       "rcfilters-filter-watchlist-notwatched-description": "Sadonyo salain parubahan pado laman nan dipantau.",
+       "rcfilters-filtergroup-watchlistactivity": "Aktivitas daftar pantauan",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Parubahan nan alun dicaliak",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Parubahan laman-laman nan dipantau nan alun disinggahi dek Sanak sajak parubahan tajadi.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Parubahan nan alah tacaliak",
+       "rcfilters-filter-watchlistactivity-seen-description": "Parubahan laman-laman nan disinggahi Sanak sajak parubahan tajadi.",
+       "rcfilters-filtergroup-changetype": "Jinih parubahan",
        "rcfilters-filter-pageedits-label": "Suntiangan laman",
+       "rcfilters-filter-pageedits-description": "Parubahan pado konten wiki, rundiang, deskripsi kategori...",
        "rcfilters-filter-newpages-label": "Laman baru",
+       "rcfilters-filter-newpages-description": "Suntiangan nan mambuek laman baru",
        "rcfilters-filter-categorization-label": "Parubahan kategori",
+       "rcfilters-filter-categorization-description": "Rakam jajak laman nan alah ditambahkan atau diapuih dari kategori.",
        "rcfilters-filter-logactions-label": "Tindakan tacataik",
+       "rcfilters-filter-logactions-description": "Tindakan administratif, pambuatan akun, pangapusan halaman, pangunggahan...",
+       "rcfilters-hideminor-conflicts-typeofchange": "Jinih parubahan tatantu indak dapek ditandoi sabagai \"ketek\", jadi panyariang ko bakonflik jo panyariang Jinih Parubahan iko: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Jenih parubahann ko berkonflik jo \"Suntiangan ketek\". Jenih parubahan tatantu indak dapek ditandoi sabagai \"ketek\".",
+       "rcfilters-filtergroup-lastrevision": "Revisi tabaru",
+       "rcfilters-filter-lastrevision-label": "Revisi tabaru",
+       "rcfilters-filter-lastrevision-description": "Anyo parubahan tabaru pado laman ko.",
+       "rcfilters-filter-previousrevision-label": "Bukan revisi tabaru",
+       "rcfilters-filter-previousrevision-description": "Sadoalah parubahan nan bukan marupokan \"revisi tabaru\".",
+       "rcfilters-filter-excluded": "Indak tamasuak",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:bukan</strong> $1",
+       "rcfilters-exclude-button-off": "Salain nan tapiliah",
+       "rcfilters-exclude-button-on": "Salain nan tapiliah",
        "rcfilters-view-tags": "Suntiangan ditandoi",
+       "rcfilters-view-namespaces-tooltip": "Sariang hasil manuruik ruangnamo",
+       "rcfilters-view-tags-tooltip": "Pisahan hasil manggonoan panyuntingan",
+       "rcfilters-view-return-to-default-tooltip": "Kembali ka manu panyaringan utamo",
+       "rcfilters-view-tags-help-icon-tooltip": "Palajari labiah lanjuik tantangan suntiangan jo TAG",
        "rcfilters-liveupdates-button": "Parubahan langsuang",
        "rcfilters-liveupdates-button-title-on": "Matian parubahan langsuang",
+       "rcfilters-liveupdates-button-title-off": "Tampilan parubahan baru katiko parubahan tu alah tajadi",
+       "rcfilters-watchlist-markseen-button": "Tandoi sadonyo parubahan sabagai taliek",
        "rcnotefrom": "Di bawah iko adolah {{PLURAL:$5|parubahan|babagai parubahan}} sajak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> parubahan).",
        "rclistfrom": "Tunjuakan parubahan baru mulai dari tanggal $3 $2",
        "rcshowhideminor": "$1 suntiangan ketek",
index 63b7e65..55a05eb 100644 (file)
        "listfiles-userdoesnotexist": "ഉപയോക്തൃ അംഗത്വം \"$1\" എടുക്കപ്പെട്ടിട്ടില്ല.",
        "imgfile": "പ്രമാണം",
        "listfiles": "പ്രമാണങ്ങളുടെ പട്ടിക",
+       "listfiles_subpage": "$1 ചെയ്ത അപ്‌ലോഡുകൾ",
        "listfiles_thumb": "ലഘുചിത്രം",
        "listfiles_date": "തീയതി",
        "listfiles_name": "പേര്",
index e421252..14235e1 100644 (file)
        "protect": "Prutegge",
        "protect_change": "càgna",
        "unprotect": "Càgna prutezzione",
-       "newpage": "Paggena nòva",
+       "newpage": "Paggena nova",
        "talkpagelinktext": "Chiàcchiera",
        "specialpage": "Paggena speciàle",
        "personaltools": "Strumiente perzonale",
        "shown-title": "Fa verè {{PLURAL:$1|nu risultato|$1 risultate}} pe paggena",
        "viewprevnext": "Vire ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Ncopp' 'o sito esiste na paggena c' 'o nomme \"[[:$1]]\"'''\n{{PLURAL:$2|0=|Vedite pure dint'a l'ati risultate 'e cerca.}}",
-       "searchmenu-new": "<strong>'''Crèa 'a paggena \"[[:$1]]\" ncopp'a stu wiki!'''</strong> {{PLURAL:$2|0=|Vedite pure 'a paggena truvata c' 'a recerca vuosta|Vedite pure 'e risultate d\"a recerca}}",
+       "searchmenu-new": "<strong>'''Crèa 'a paggena \"[[:$1]]\" ncopp'a sta wiki!'''</strong> {{PLURAL:$2|0=|Vedite pure 'a paggena truvata c' 'a recerca vuosta|Vedite pure 'e risultate d' 'a recerca}}",
        "searchprofile-articles": "Paggene 'e contenute",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Tutto",
        "right-suppressionlog": "Vide 'e riggistre private",
        "right-block": "Nun fa fa' cagnamienti a ll'at'utente",
        "right-blockemail": "Nun fa mannà e-mail a n'utente",
-       "right-hideuser": "Blocca n'utente e fallo sparì 'a 'o pubbreco",
+       "right-hideuser": "Fremma n'utente e annascunnillo r'o pubbreco",
        "right-ipblock-exempt": "Ignora 'e blocche 'e l'IP, 'e blocche automatece e li blocche 'e range 'e l'IP",
        "right-unblockself": "Sblocca se stesso",
        "right-protect": "Cagna 'e livelle 'e prutezione 'e cagna paggene prutette ricurzivamente",
        "right-mergehistory": "Aunisce 'a cronologgia d' 'e paggene",
        "right-userrights": "Cagna 'e deritte 'e ll'utente",
        "right-userrights-interwiki": "Cagna 'e deritte 'e ll'utente int'a l'ati wiki",
-       "right-siteadmin": "Blocca e sblocca 'o database",
+       "right-siteadmin": "Chiure e arape 'o database",
        "right-override-export-depth": "Esporta 'e paggene azzeccanno 'e paggene cullegate nfin'a na profondità 'e 5",
        "right-sendemail": "Manna na mail a ll'at'utente",
        "right-managechangetags": "Crìa e appiccia/stuta 'e [[Special:Tags|tag]]",
        "uploadlogpage": "Riggistro 'e carreche",
        "uploadlogpagetext": "Ccà abbascio song'alencate l'urdeme file carrecate.\nCuntrullate 'a [[Special:NewFiles|gallaria d' 'e file nuove]] pe' ve ffà na guardata cchiù visuale 'e tutto.",
        "filename": "Nomme d' 'o file",
-       "filedesc": "Énnece",
+       "filedesc": "Riepilego",
        "fileuploadsummary": "Dettaglie:",
        "filereuploadsummary": "Cagnamiente a 'o file:",
        "filestatus": "Stato d' 'o copyright:",
index c41fa88..e2ff083 100644 (file)
        "createaccountmail": "Bruk et midlertidig, tilfeldig passord, og send det til angitt e-postadresse",
        "createaccountmail-help": "Kan brukes til å opprette en konto for en annen person uten at du får vite passordet.",
        "createacct-realname": "Virkelig navn (valgfritt)",
-       "createacct-reason": "Årsak",
+       "createacct-reason": "Årsak (logges offentlig)",
        "createacct-reason-ph": "Hvorfor lager du en annen bruker",
        "createacct-reason-help": "Beskjed vist i kontoopprettelsesloggen",
        "createacct-submit": "Opprett konto",
        "listfiles-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.",
        "imgfile": "fil",
        "listfiles": "Filliste",
+       "listfiles_subpage": "Opplastinger av $1",
        "listfiles_thumb": "Miniatyrbilde",
        "listfiles_date": "Dato",
        "listfiles_name": "Navn",
        "ipblocklist-legend": "Finn en blokkert bruker",
        "blocklist-userblocks": "Skjul kontoblokkeringer",
        "blocklist-tempblocks": "Skjul midlertidige blokkeringer",
+       "blocklist-indefblocks": "Skjul blokkeringer på ubestemt tid",
        "blocklist-addressblocks": "Skjul individuelle IP-blokkeringer",
        "blocklist-type": "Type:",
        "blocklist-type-opt-all": "Alle",
        "mycustomjsredirectprotected": "Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den er en omdirigering og ikke peker til en annen side i ditt brukernavnerom.",
        "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert",
        "unprotected-js": "Av sikkerhetsårsaker kan ikke JavaScript lastes fra ubeskyttede sider. Bare skap JavaScript i MediaWiki-navnerommet eller som en brukerunderside",
-       "userlogout-continue": "Ønsker du å logge ut?"
+       "userlogout-continue": "Ønsker du å logge ut?",
+       "rest-prefix-mismatch": "Den forespurte stien ($1) var ikke i REST-API-ets rotsti ($2)",
+       "rest-wrong-method": "Den forespurte metoden ($1) var ikke {{PLURAL:$3|den tillatte metoden|blant de tillatte metodene}} for denne stien ($2)",
+       "rest-no-match": "Den forespurte relative stien ($1) passet ikke med noen kjent behandler"
 }
index 6fcee4e..91f6f1e 100644 (file)
@@ -44,7 +44,7 @@
        "tog-enotifusertalkpages": "Stüür my een bericht as myn oaverlegsyde wysigd is.",
        "tog-enotifminoredits": "Stüür my ouk een bericht by kleine bewarkingen van syden en bestanden",
        "tog-enotifrevealaddr": "Myn e-postadres låten seen in e-postberichten",
-       "tog-shownumberswatching": "Et antal brukers bekyken dee disse syde volgt",
+       "tog-shownumberswatching": "Et antal gebrukers bekyken dee disse syde volgt",
        "tog-oldsig": "Bestånde handteykening:",
        "tog-fancysig": "Underteykening seen as wikitekst (sunder automatiske verwysing)",
        "tog-uselivepreview": "Nåkyksyde låten seen sunder eyrst te herladen",
        "tog-watchlisthideown": "Verbarg myn eigen bewarkingen",
        "tog-watchlisthidebots": "Verbarg botbrukers",
        "tog-watchlisthideminor": "Verbarg kleine wysigingen in myn volglyste",
-       "tog-watchlisthideliu": "Bewarkingen van anmeldede brukers up myn volglyste verbargen",
-       "tog-watchlisthideanons": "Bewarkingen van anonyme brukers up myn volglyste verbargen",
+       "tog-watchlisthideliu": "Bewarkingen van anmeldede gebrukers up myn volglyste verbargen",
+       "tog-watchlisthideanons": "Bewarkingen van anonyme gebrukers up myn volglyste verbargen",
        "tog-watchlisthidepatrolled": "Wysigingen dee markeerd binnet up volglyste verbargen",
-       "tog-ccmeonemails": "Stüür my kopien van berichten an andere brukers",
+       "tog-ccmeonemails": "Stüür my kopyen van berichten an andere gebrukers",
        "tog-diffonly": "Under wysigingen neet de syde-inhold låten seen.",
        "tog-showhiddencats": "Låt verbörgen kategoryen seen",
        "tog-norollbackdiff": "Wysigingen vordlåten nå et weaderümmedraien",
        "tog-useeditwarning": "Wårschüw my as ik een bewarkede syde afsluten wil dee noch neet seakerd is",
-       "tog-prefershttps": "Altyd een beveiligde verbinding bruken as jy anmelded binnet",
+       "tog-prefershttps": "Altyd een beveiligde verbinding gebruken as jy anmelded binnet",
        "underline-always": "Altyd",
        "underline-never": "Nooit",
        "underline-default": "Standard in juw formgeaving of webkyker",
        "cancel": "Afbreaken",
        "moredotdotdot": "Meyr...",
        "morenotlisted": "Disse lyste is möägelik neet kompleet.",
-       "mypage": "Brukerssyde",
-       "mytalk": "Myn oaverleg",
+       "mypage": "Gebrukerssyde",
+       "mytalk": "Oaverleg",
        "anontalk": "Oaverleg",
        "navigation": "Navigaty",
        "and": "&#32;en",
        "views": "Weadergåven",
        "toolbox": "Warktügen",
        "tool-link-userrights": "{{GENDER:$1|Brukersgruppen}} wysigen",
-       "tool-link-emailuser": "Disse {{GENDER:$1|bruker}} een bericht stüren",
+       "tool-link-emailuser": "Disse {{GENDER:$1|gebruker}} een bericht stüren",
        "imagepage": "Bestandssyde bekyken",
        "mediawikipage": "Berichtsyde bekyken",
        "templatepage": "Mal bekyken",
        "privacypage": "Project:Gegeavensbeleid",
        "badaccess": "Geen tostemming",
        "badaccess-group0": "Jy hebbet geen tostemming üm disse akty uut te voren.",
-       "badaccess-groups": "Disse akty kan allinnig uutvoord wörden döär brukers uut {{PLURAL:$2|de grup|eyn van de gruppen}}: $1.",
+       "badaccess-groups": "Disse akty kan allinnig uutvoord wörden döär gebrukers uut {{PLURAL:$2|de grup|eyn van de gruppen}}: $1.",
        "versionrequired": "Versy $1 van MediaWiki is nöydig",
-       "versionrequiredtext": "Versy $1 van MediaWiki is nöydig üm disse syde te bruken. See [[Special:Version|Versy]].",
+       "versionrequiredtext": "Versy $1 van MediaWiki is nöydig üm disse syde te gebruken. See [[Special:Version|Versy]].",
        "ok": "Okee",
        "retrievedfrom": "Van \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Jy hebbet}} $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Jy hebbet}} $1 van {{PLURAL:$3|een andere bruker|$3 brukers}} ($2).",
-       "youhavenewmessagesmanyusers": "Jy hebbet $1 van een bült brukers ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Jy hebbet}} $1 van {{PLURAL:$3|een andere gebruker|$3 gebrukers}} ($2).",
+       "youhavenewmessagesmanyusers": "Jy hebbet $1 van een bült gebrukers ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|een ny bericht|999=nye berichten}}",
        "newmessagesdifflinkplural": "läste {{PLURAL:$1|wysiging|999=wysigingen}}",
        "youhavenewmessagesmulti": "Jy hebbet nye berichten up $1",
        "sort-descending": "Afloupend sorteren",
        "sort-ascending": "Uploupend sorteren",
        "nstab-main": "Syde",
-       "nstab-user": "Brukerssyde",
+       "nstab-user": "Gebrukerssyde",
        "nstab-media": "Mediasyde",
        "nstab-special": "Speciale syde",
        "nstab-project": "Projektsyde",
        "delete-hook-aborted": "Et vordsmyten wördt in et wyre skopped döär een topassing van MediaWiki.\nDer is wyder geen informaty beskikbår.",
        "no-null-revision": "Kun geen leadige nye versy maken vöär de syde \"$1\"",
        "badtitle": "Ungeldige name",
-       "badtitletext": "De name van de upvrågde syde is neet geldig, leadig, of der stünd een verkeyrde interspråk- of interwikiverwysing in.\nMöägelik binnet der eyn of meyr teykens bruked dee neet in titels tostån binnet.",
+       "badtitletext": "De name van de upvrågde syde is neet geldig, leadig, of der stünd een verkeyrde interspråk- of interwikiverwysing in.\nMöägelik binnet der eyn of meyr teykens gebruked dee neet in titels tostån binnet.",
        "perfcached": "Disse gegeavens kummen uut et tüskengehöägen en binnet meskeen neet aktueel. Der {{PLURAL:$1|is houguut eyn resultaat|binnet houguut $1 resultaten}} beskikbår in et tüskengehöägen.",
        "perfcachedts": "Disse gegeavens kummen uut et tüskengehöägen dee vöär et lätst bywarked is up $2 üm $3. Der {{PLURAL:$4|is houguut eyn resultaat|binnet houguut $4 resultaten}} beskikbår in et tüskengehöägen.",
        "querypage-no-updates": "Disse syde wördt neet bywarked.\nGegeavens up disse syde wördet neet vervarsd.",
        "viewsource": "Brontekst bekyken",
        "viewsource-title": "Bron bekyken van $1",
        "actionthrottled": "Handeling teagenholden",
-       "actionthrottledtext": "As maotregel tegen t plaotsen van alderhaande moek, is t antal keren da'j disse haandeling in n korte tied uutvoeren kunnen beteund. Je hebben de limiet overschrejen. Probeer t over n antal minuten weer.",
-       "protectedpagetext": "Disse zied is beveiligd. Bewarken of aandere haandelingen bin niet meugelik.",
-       "viewsourcetext": "Je kunnen de brontekste van disse zied bewarken en bekieken.",
-       "viewyourtext": "Je kunnen <strong>joew bewarkingen</strong> an de brontekste van disse zied bekieken en kopiëren.",
-       "protectedinterface": "Op disse zied steet tekste die gebruukt wördt veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.\nUm vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [https://translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
-       "editinginterface": "<strong>Waorschuwing:</strong> je bewarken n zied die gebruukt wördt deur de programmatuur. \nWa'j disse zied wiezigen is van invleud op t gebrukersuterlik veur aander gebrukers van disse wiki.",
-       "translateinterface": "Um vertalingen veur alle wiki's te doon of te wiezigen ku'j gebruukmaken van [https://translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
-       "cascadeprotected": "Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de \"kaskade\"-opsie:\n$2",
-       "namespaceprotected": "Je maggen gien ziejen in de '''$1'''-naamruumte bewarken.",
-       "customcssprotected": "Je kunnen disse CSS-zied niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.",
-       "customjsprotected": "Je kunnen disse JavaScript-zied niet bewarken, umdat der persoonlike instellingen van n aandere gebruker in staon.",
-       "mycustomcssprotected": "Je hebben gien toestemming um disse CSS-zied te bewarken.",
-       "mycustomjsprotected": "Je hebben gien rechten um disse JavaScript-zied te bewarken.",
-       "myprivateinfoprotected": "Je hebben gien rechten um joew priveegegevens an te passen.",
-       "mypreferencesprotected": "Je hebben gien rechten um joew veurkeuren an te passen.",
-       "ns-specialprotected": "Spesiale ziejen kunnen niet bewarkt wörden.",
-       "titleprotected": "t Anmaken van disse zied is beveiligd deur [[User:$1|$1]].\nDe op-egeven reden is <em>$2</em>.",
-       "filereadonlyerror": "Kon t bestaand \"$1\" niet anpassen umdat de bestaandsmap \"$2\" op dit moment op allinnig-lezen steet.\n\nDe op-egeven reden is: \"$3\".",
+       "actionthrottledtext": "As måtregel teagen misbruuk, is et antal keyren dat jy disse handeling in een korte tyd uutvoren künnet betöänd. Jy hebbet de limit oaverskreaden. Probeer et oaver een antal minuten weader.",
+       "protectedpagetext": "Disse syde is beveiligd. Bewarken of andere handelingen binnet neet möägelik.",
+       "viewsourcetext": "Jy künnet de brontekst van disse syde bewarken en bekyken.",
+       "viewyourtext": "Jy künnet <strong>juw bewarkingen</strong> an de brontekst van disse syde bekyken en kopieren.",
+       "protectedinterface": "Up disse syde steyt tekst dee gebruked wördt vöär systeemteksten van disse wiki, en is beveiligd üm misbruuk te vöärkommen. Bruuk [https://translatewiki.net/ translatewiki.net], et lokaliseringsprojekt vöär MediaWiki, üm oaversetingen vöär alle wikis to te vogen of te wysigen.",
+       "editinginterface": "<strong>Wårsküwing:</strong> jy bewarket een syde dee teksten gebruukt vöär de gebrukersümgeaving van de programmatuur. \nWat jy up disse syde wysigen is van invlööd up de gebrukersümgeaving van andere gebrukers van disse wiki.",
+       "translateinterface": "Üm oaversettingen vöär alle wikis to te vogen of te wysigen, kün jy [https://translatewiki.net/ translatewiki.net] gebruken, et lokaliseringsprojekt vöär MediaWiki.",
+       "cascadeprotected": "Disse syde is beveiligd ümdat et vöärkümt in de volgende {{PLURAL:$1|syde|syden}}, dee beveiligd {{PLURAL:$1|is|binnet}} mid de \"kaskade\"-opty:\n$2",
+       "namespaceprotected": "Jy möäget geen syden in de <strong>$1</strong>-naamruumde bewarken.",
+       "customcssprotected": "Jy möäget disse CSS-syde neet bewarken, ümdat der persoonlike instellingen van een andere gebruker in stån.",
+       "customjsprotected": "Jy möäget disse JavaScript-syde neet bewarken, ümdat der persoonlike instellingen van een andere gebruker in stån.",
+       "mycustomcssprotected": "Jy hebbet geen rechten üm disse CSS-syde te bewarken.",
+       "mycustomjsprotected": "Jy hebbet geen rechten üm disse JavaScript-syde te bewarken.",
+       "myprivateinfoprotected": "Jy hebbet geen rechten üm juw priveegegeavens te bewarken.",
+       "mypreferencesprotected": "Jy hebbet geen rechten üm juw instellingen an te passen.",
+       "ns-specialprotected": "Speciale syden künnet neet bewarked wörden.",
+       "titleprotected": "Et anmaken van disse syde is beveiligd döär [[User:$1|$1]].\nDe upgeaven readen is <em>$2</em>.",
+       "filereadonlyerror": "Kun et bestand \"$1\" neet anpassen ümdat de bestandsmap \"$2\" up dit moment up allinnig-leasen steyt.\n\nDe upgeaven readen is: \"$3\".",
        "invalidtitle-knownnamespace": "Ongeldige titel mit naamruumte \"$2\" en tekste \"$3\"",
        "invalidtitle-unknownnamespace": "Ongeldige titel mit onbekend naamruumtenummer $1 en tekste \"$2\"",
-       "exception-nologin": "Neet an-emelded",
+       "exception-nologin": "Neet anmelded",
        "exception-nologin-text": "Um disse zied te bekieken of disse haandeling uut te kunnen voeren mu'j [[Special:Userlogin|an-emeld]] ween bie disse wiki.",
        "virus-badscanner": "Slichte konfigurasie: onbekend antivirusprogramma: ''$1''",
        "virus-scanfailed": "inlezen is mislokt (kode $1)",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "'''Je bin noen aofemeld.'''\n\nt Kan ween dat der wat ziejen bin die weeregeven wörden as of je an-emeld bin totda'j t tussengeheugen van joew webkieker leegmaken.",
        "welcomeuser": "Welkom, $1!",
-       "welcomecreation-msg": "Joew gebruker is an-emaakt.\nVergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] an te passen.",
+       "welcomecreation-msg": "Juw gebrukerskonto is anmaked.\nVergeat neet juw [[Special:Preferences|vöärköären vöär {{SITENAME}}]] in te stellen.",
        "yourname": "Gebrukersname",
        "userlogin-yourname": "Gebrukersname",
-       "userlogin-yourname-ph": "Geef joew gebrukersnaam op",
-       "createacct-another-username-ph": "Vul de gebrukersnaam in",
+       "userlogin-yourname-ph": "Geav juw gebrukersname up",
+       "createacct-another-username-ph": "Geav de gebrukersname up",
        "yourpassword": "Wachtwoord",
        "userlogin-yourpassword": "Wachtwoord",
-       "userlogin-yourpassword-ph": "Geef joew wachtwoord op",
-       "createacct-yourpassword-ph": "Geef n wachtwoord op",
-       "yourpasswordagain": "Opniej invoeren",
-       "createacct-yourpasswordagain": "Wachtwoord bevestigen",
-       "createacct-yourpasswordagain-ph": "Geef t wachtwoord opniej op",
+       "userlogin-yourpassword-ph": "Geav juw wachtwoord up",
+       "createacct-yourpassword-ph": "Geav een wachtwoord up",
+       "yourpasswordagain": "Wachtwoord upny invoren",
+       "createacct-yourpasswordagain": "Bevästig wachtwoord",
+       "createacct-yourpasswordagain-ph": "Geav et wachtwoord upny up",
        "userlogin-remembermypassword": "Vanselv anmelden",
-       "userlogin-signwithsecure": "Beveiligde verbiending gebruken",
-       "yourdomainname": "Joew domein",
+       "userlogin-signwithsecure": "Beveiligde verbinding gebruken",
+       "yourdomainname": "Juw domein",
        "password-change-forbidden": "Je kunnen joew wachtwoord niet wiezigen op disse wiki.",
        "externaldberror": "Der gung iets fout bie de externe authentisering, of je maggen je gebrukersprofiel niet bewarken.",
        "login": "Anmelden",
        "logout": "Afmelden",
        "userlogout": "Aofmelden",
        "notloggedin": "Neet an-emelded",
-       "userlogin-noaccount": "Heb jy noch geen brukersname?",
+       "userlogin-noaccount": "Heb jy noch geen gebrukersname?",
        "userlogin-joinproject": "Wörd lid van {{SITENAME}}",
        "createaccount": "Inskryven",
-       "userlogin-resetpassword-link": "Juuw wachtwoord vergeaten?",
+       "userlogin-resetpassword-link": "Wachtwoord vergeaten?",
        "userlogin-helplink2": "Hülpe by et anmelden",
        "userlogin-loggedin": "Je binnen al an-emeld as {{GENDER:$1|$1}}.\nGebruuk et formulyr hyrunder üm an te melden as een andere gebruker.",
        "userlogin-createanother": "Een andere gebrukerskonto anmaken",
        "createacct-emailrequired": "Netpostadres",
        "createacct-emailoptional": "Netpostadres (niet verplicht)",
-       "createacct-email-ph": "Geef joew netpostadres op",
+       "createacct-email-ph": "Geav juw netpostadresse up",
        "createacct-another-email-ph": "Vul joew netpostadres in",
        "createaccountmail": "Gebruuk n tiejelik wachtwoord dat joe netzelde is en stuur t naor t op-egeven netpostadres",
        "createacct-realname": "Echte naam (niet verplicht)",
        "createacct-reason-ph": "Waorumme je n aandere gebrukerskonto anmaken",
        "createacct-submit": "Gebrukerskonto anmaken",
        "createacct-another-submit": "Gebrukerskonto anmaken",
-       "createacct-benefit-heading": "{{SITENAME}} wörden emaakt deur meensen zo as jie.",
-       "createacct-benefit-body1": "bewarking{{PLURAL:$1||en}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|zied|ziejen}}",
-       "createacct-benefit-body3": "aktieve {{PLURAL:$1|biedrager|biedragers}}",
+       "createacct-benefit-heading": "{{SITENAME}} is maked döär mensken so as ju.",
+       "createacct-benefit-body1": "{{PLURAL:$1|bewarking|bewarkingen}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|syde|syden}}",
+       "createacct-benefit-body3": "aktive {{PLURAL:$1|bydrager|bydragers}}",
        "badretype": "De wachtwoorden die'j in-etikt hebben bin niet liek alleens.",
        "userexists": "Disse gebrukersnaam is al gebruuk.\nKies n aandere naam.",
        "loginerror": "Anmeldingsfout",
        "php-mail-error-unknown": "Der was n onbekende fout mit de mail()-funksie van PHP",
        "user-mail-no-addy": "Eprobeerd n berichjen te versturen zonder n netpostadres",
        "user-mail-no-body": "Der is eprobeerd n netbreef zonder tekste of mit n biester korte tekste te versturen.",
-       "changepassword": "Wachtwoord wiezigen",
+       "changepassword": "Wachtwoord wysigen",
        "resetpass_announce": "Um t anmelden te voltooien, mu'j n niej wachtwoord invoeren.",
        "resetpass_text": "<!-- Tekste hier invoegen -->",
        "resetpass_header": "Wachtwoord wiezigen",
        "resetpass-wrong-oldpass": "t Veurlopige wachtwoord of t wachtwoord da'j noen hebben is ongeldig.\nMisschien he'j t wachtwoord al ewiezigd of n niej veurlopig wachtwoord an-evreugen.",
        "resetpass-temp-password": "Veurlopig wachtwoord:",
        "resetpass-abort-generic": "De wachtwoordwieziging is aofebreuken deur n uutbreiding.",
-       "passwordreset": "Wachtwoord opniej instellen",
+       "passwordreset": "Wachtwoord upny instellen",
        "passwordreset-text-one": "Vul dit formulier in um joew wachtwoord opniej in te stellen.",
        "passwordreset-text-many": "{{PLURAL:$1|Vul een van de gegevensvelden in um per netpost n tiejelik wachtwoord te ontvangen.}}",
        "passwordreset-disabled": "Je kunnen op disse wiki joew wachtwoord niet opniej instellen.",
        "summary": "Samenvatting:",
        "subject": "Onderwarp:",
        "minoredit": "kleine wysiging",
-       "watchthis": "volg disse syde",
+       "watchthis": "Volg disse syde",
        "savearticle": "Syde uutgeaven",
        "savechanges": "Wysigingen uutgeaven",
        "publishpage": "Zied uutbrengen",
        "showpreview": "Bewarking nåkyken",
        "showdiff": "Verskil bekyken",
        "blankarticle": "<strong>Waorschuwing:</strong> de zied die'j anmaken willen is leeg.\nA'j noen weer op \"$1\" klikken, dan wördt de zied an-emaakt zonder enige inhoud.",
-       "anoneditwarning": "<strong>Waorschuwing:</strong> je bin niet an-emeld.\nJoew IP-adres zal op-esleugen wörden a'j wiezigingen op disse zied anbrengen. A'j je eigen <strong>[$1 anmelden]</strong> of <strong>[$2 inschrieven]</strong> dan koemen joew bewarkingen onder joew gebrukersnaam te staon, samen mit aandere veurdelen.",
+       "anoneditwarning": "<strong>Wårsküwing:</strong> jy binnet neet anmelded. Juw IP-adresse sal vöär ydereyne sichtbår weasen as jy wysigingen up disse syde anbrenget. As jy juw eigen <strong>[$1 anmeldet]</strong> of <strong>[$2 inskryvet]</strong> dan kommen juw bewarkingen under juw gebrukersname te stån, samen mid andere vöärdeylen.",
        "anonpreviewwarning": "''Je bin niet an-emeld.''\n''Deur de bewarking op te slaon wörden joew IP-adres op-esleugen in de ziedgeschiedenisse.''",
        "missingsummary": "'''Herinnering:''' je hebben gien samenvatting op-egeven veur de bewarking. A'j noen weer op ''Opslaon'' klikken wörden de bewarking zonder samenvatting op-esleugen.",
        "missingcommenttext": "Skryv een upmarking.",
        "summary-preview": "Samenvatting nåkyken:",
        "subject-preview": "Underwarp nåkyken:",
        "blockedtitle": "Gebruker is eblokkeerd",
-       "blockedtext": "<strong>Juw brukersname of IP-adres is blokkeerd.</strong>\n\nJy binnet blokkeerd döär $1.\nDe upgeaven readen is <em>$2</em>.\n\n* Blokkeerd vanaf: $8\n* Blokkeerd tot: $6\n* Bedoold üm te blokkeren: $7\n\nJy künnet kontakt upneamen mid $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheyrder]] üm de blokkering te bepråten.\nJy künnet de funkty \"{{int:emailuser}}\" neet bruken, behalven as jy een geldig e-postadres in juw [[Special:Preferences|instellingen]] upgeaven hebbet en et gebruuk van disse funkty neet blokkeerd is.\nEt IP-adres wat jy nu bruket is $3, en et blokkeringsnummer is #$5.\nVermeld de gegeavens dee hyrboaven stån as jy argens up disse blokkering reageren.",
+       "blockedtext": "<strong>Juw gebrukersname of IP-adres is blokkeerd.</strong>\n\nJy binnet blokkeerd döär $1.\nDe upgeaven readen is <em>$2</em>.\n\n* Blokkeerd vanaf: $8\n* Blokkeerd tot: $6\n* Bedoold üm te blokkeren: $7\n\nJy künnet kontakt upneamen mid $1 of een andere [[{{MediaWiki:Grouppage-sysop}}|beheyrder]] üm de blokkering te bepråten.\nJy künnet de funkty \"{{int:emailuser}}\" neet gebruken, behalven as jy een geldig e-postadres in juw [[Special:Preferences|instellingen]] upgeaven hebbet en et gebruuk van disse funkty neet blokkeerd is.\nEt IP-adres wat jy nu gebruket is $3, en et blokkeringsnummer is #$5.\nVermeld de gegeavens dee hyrboaven stån as jy argens up disse blokkering reageren.",
        "autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wördt deur n aandere gebruker, die eblokkeerd wördt deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wördt: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
        "blockednoreason": "gien reden op-egeven",
        "whitelistedittext": "Um ziejen te kunnen wiezigen, mu'j $1 ween",
        "accmailtitle": "Wachtwoord is verstuurd.",
        "accmailtext": "Der is n willekeurig wachtwoord veur [[User talk:$1|$1]] verstuurd naor $2. t Kan ewiezigd wörden op de zied ''[[Special:ChangePassword|wachtwoord wiezigen]]'' naoda'j an-emeld bin.",
        "newarticle": "(Niej)",
-       "newarticletext": "Disse zied besteet nog niet.\nIn t veld hieronder ku'j wat schrieven um disse zied an te maken (meer informasie vie'j op de [$1 hulpzied]).\nA'j hier per ongelok terechtekeumen bin gebruuk dan de knoppe '''veurige''' um weerumme te gaon.",
-       "anontalkpagetext": "----\n<em>Disse oaverlegsyde höyrt by een anonyme bruker dee noch geen brukersname hevt, of et neet bruukt.</em>\nDårümme bruken wy et IP-adresse ter identifikaty. Een IP-adresse kan döär meyrere lüde bruked wörden. As jy een anonyme bruker binnet, en et gevööl hebbet dat jy berichten kryget dee neet vöär ju bedoold binnet [[Special:CreateAccount|skryv ju eigen dan in]] of [[Special:UserLogin|meld ju eigen an]] üm verwarring mid andere anonyme brukers in de tokumst te vöärkommen.''",
+       "newarticletext": "Disse syde besteyt noch neet.\nIn et veld hyrunder kün jy wat skryven üm disse syde an te maken (meyr informaty vind jy up de [$1 hülpsyde]).\nAs jy hyr per ungelük terechtekommen binnet bruuk dan de knoppe '''vöärige''' üm terügge te gån.",
+       "anontalkpagetext": "----\n<em>Disse oaverlegsyde höyrt by een anonyme gebruker dee noch geen gebrukersname hevt, of et neet bruukt.</em>\nDårümme gebruken wy et IP-adresse ter identifikaty. Een IP-adresse kan döär meyrere lüde gebruked wörden. As jy een anonyme gebruker binnet, en et gevööl hebbet dat jy berichten kryget dee neet vöär ju bedoold binnet [[Special:CreateAccount|skryv ju eigen dan in]] of [[Special:UserLogin|meld ju eigen an]] üm verwarring mid andere anonyme gebrukers in de tokumst te vöärkommen.''",
        "noarticletext": "Der steyt nun geen tekst up disse syde.\nJy künnet [[Special:Search/{{PAGENAME}}|de titel upsöken]] in andere syden,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söken in de logboken],\nof [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse syde anmaken]</span>.",
-       "noarticletext-nopermission": "Op disse zied steet gien tekste.\nJe kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere ziejen of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>, mer je hebben gien rechten um disse zied an te maken.",
+       "noarticletext-nopermission": "Up disse syde steyt geen tekst.\nJy künnet [[Special:Search/{{PAGENAME}}|söken nå disse term]] in andere syden of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboken döärsöken]</span>, mär jy hebbet geen rechten üm disse syde an te maken.",
        "missing-revision": "De versie #$1 van de zied \"{{FULLPAGENAME}} besteet niet.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
        "userpage-userdoesnotexist": "Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker \"<nowiki>$1</nowiki>\"). Kiek effen nao o'j disse zied wel anmaken/bewarken willen.",
        "userpage-userdoesnotexist-view": "Gebruker \"$1\" steet hier niet in-eschreven",
        "userinvalidconfigtitle": "'''Waorschuwing:''' der is gien uutvoering mit de naam \"$1\". Vergeet niet dat joew eigen .css- en .js-ziejen beginnen mit n kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaotse van \"{{ns:user}}:Naam/'''V'''ector.css\".",
        "updated": "(Bewark)",
        "note": "'''Opmarking:'''",
-       "previewnote": "'''Waort je: dit is n naokiekzied.'''\nJoew tekste is niet op-esleugen!",
-       "continue-editing": "Gao naor t bewarkingsvienster",
+       "previewnote": "<strong>Denk derüm dat dit allinnig een nåkyksyde is.</strong>\nJuw wysigingen binnet noch neet seakerd!",
+       "continue-editing": "Gå nå et bewarkingsveld",
        "previewconflict": "Disse versie löt zien hoe de tekste in t bovenste veld deruut kömp te zien a'j de tekste opslaon.",
        "session_fail_preview": "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''\nProbeer t laoter weer.\nAs t probleem dan nog steeds veurkömp, probeer dan [[Special:UserLogout|opniej an te melden]].",
        "session_fail_preview_html": "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''\n\n''Umdat in {{SITENAME}} roewe HTML in-eschakeld is, is de weergave dervan verbörgen um te veurkoemen dat t JavaScript an-evöllen wörden.''\n\n'''As dit n legitieme wieziging is, probeer t dan opniej.'''\nAs t dan nog problemen gif, probeer dan um [[Special:UserLogout|opniej an te melden]].",
        "edit_form_incomplete": "'''Partie delen van t bewarkingsformulier hebben de server niet bereikt. Kiek eers nao of de bewarkingen kloppen en probeer t opniej.'''",
        "editing": "Bewarken: $1",
        "creating": "Anmaken: $1",
-       "editingsection": "Bewarken: $1 (deelzied)",
+       "editingsection": "Bewarken: $1 (deylsyde)",
        "editingcomment": "Bewarken: $1 (niej onderwarp)",
        "editconflict": "Tegelieke bewörken: $1",
        "explainconflict": "'''NB:''' n aander hef disse zied ewiezigd naoda'j an disse bewarking begunnen bin.\nt Bovenste bewarkingsveld löt de zied zien zo as t noen is.\nDaoronder (bie \"Wiezigingen\") staon de verschillen tussen joew versie en de op-esleugen zied.\nHelemaole onderan (bie \"Joew tekste\") steet nog n bewarkingsveld mit joew versie.\nJe zullen je eigen wiezigingen in de nieje tekste in mutten passen.\n'''Allinnig''' de tekste in t bovenste veld wörden beweerd a'j noen kiezen veur \"$1\".",
        "semiprotectedpagewarning": "'''Let op:''' disse zied is beveiligd en ku'j allinnig bewarken a'j n eregistreerden gebruker bin.\nDe leste logboekregel steet hieronder:",
        "cascadeprotectedwarning": "'''Waorschuwing:''' disse zied is beveiligd, zodat allinnig beheerders disse zied bewarken kunnen, dit wörden edaon umdat disse zied veurkömp in de volgende {{PLURAL:$1|kaskade-beveiligden zied|kaskade-beveiligden ziejen}}:",
        "titleprotectedwarning": "'''Waorschuwing: disse zied is beveiligd. Je hebben [[Special:ListGroupRights|bepaolde rechten]] neudig um t an te kunnen maken.'''\nDe leste logboekregel steet hieronder:",
-       "templatesused": "{{PLURAL:$1|Mal|Mallen}} die op disse zied gebruukt wörden:",
+       "templatesused": "{{PLURAL:$1|Mal|Mallen}} dee up disse syde gebruked wörden:",
        "templatesusedpreview": "{{PLURAL:$1|Mal|Mallen}} die in disse bewarking gebruukt wörden:",
        "templatesusedsection": "{{PLURAL:$1|Mal|Mallen}} die in dit subkopjen gebruukt wörden:",
        "template-protected": "(beveiligd)",
        "template-semiprotected": "(halv-beveiligd)",
-       "hiddencategories": "Disse zied völt in de volgende verbörgen {{PLURAL:$1|kategorie|kategorieën}}:",
+       "hiddencategories": "Disse syde valt in de volgende verbörgen {{PLURAL:$1|kategory|kategoryen}}:",
        "edittools": "<!-- Disse tekste steet onder de bewarkings- en bestaandinlaodformulieren. -->",
        "nocreatetext": "Disse webstee hef de meugelikheid um nieje ziejen an te maken beteund. Je kunnen ziejen die al bestaon wiezigen of je kunnen je [[Special:UserLogin|anmelden of n gebrukerszied anmaken]].",
        "nocreate-loggedin": "Je hebben gien toestemming um nieje ziejen an te maken.",
        "sectioneditnotsupported-text": "Je kunnen op disse zied gien seksies bewarken.",
        "permissionserrors": "Gien toestemming",
        "permissionserrorstext": "Je maggen of kunnen dit niet doon. De {{PLURAL:$1|reden|redens}} daorveur {{PLURAL:$1|is|bin}}:",
-       "permissionserrorstext-withaction": "Je hebben gien recht um $2, mit de volgende {{PLURAL:$1|reden|redens}}:",
+       "permissionserrorstext-withaction": "Jy hebbet geen rechten üm $2, mid de volgende {{PLURAL:$1|readen|readenen}}:",
        "recreate-moveddeleted-warn": "'''Waorschuwing: je maken n zied an die eerder al vortedaon is.'''\n\nBedenk eerst of t neudig is um disse zied veerder te bewarken.\nVeur de dudelikheid steet hieronder  t vortdologboek en t herneumlogboek veur disse zied:",
-       "moveddeleted-notice": "Disse zied is vortedaon.\nHieronder steet de informasie uut t vortdologboek, t beveiligingslogboek, en t herneumlogboek.",
+       "moveddeleted-notice": "Disse syde is vorddån.\nHyrunder steyt de informaty uut et vortsmytlogbook, et beveiligingslogbook, en et hernöömlogbook.",
        "log-fulllog": "t Hele logboek bekieken",
        "edit-hook-aborted": "De bewarking is aofebreuken deur n hook.\nDer is gien reden op-egeven.",
        "edit-gone-missing": "De zied kon niet bie-ewörken wörden.\nt Lik derop as of t vortedaon is.",
        "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) weerummedreid",
        "undo-summary-username-hidden": "Versie $1 deur n verbörgen gebruker weerummedreid",
        "cantcreateaccount-text": "t Anmaken van gebrukers van dit IP-adres (<b>$1</b>) is eblokkeerd deur [[User:$3|$3]].\n\nDe deur $3 op-egeven reden is ''$2''",
-       "viewpagelogs": "Bekiek logboeken veur disse zied",
+       "viewpagelogs": "Bekyk logboken vöär disse syde",
        "nohistory": "Der bin gien eerdere versies van disse zied.",
        "currentrev": "Leste versie",
-       "currentrev-asof": "Leste versie van $1",
+       "currentrev-asof": "Lätste versy van $1",
        "revisionasof": "Versy up $1",
-       "revision-info": "Versie op $1 van {{GENDER:$6|$2}}$7",
+       "revision-info": "Versy up $1 van {{GENDER:$6|$2}}$7",
        "previousrevision": "&larr; eyrere versy",
-       "nextrevision": "niejere versie &rarr;",
-       "currentrevisionlink": "versie zo as t noen is",
+       "nextrevision": "nyere versy &rarr;",
+       "currentrevisionlink": "Aktuele versy",
        "cur": "aktueel",
        "next": "Volgende",
        "last": "lätste",
        "rev-suppressed-unhide-diff": "Eén van de bewarkingen in disse vergeliekingen is '''vortedaon'''.\nAs der meer informasie is, ku'j t vienen in t [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} logboek mit onderdrokten informasie].\nJe kunnen [$1 de verschillen bekieken] a'j willen.",
        "rev-deleted-diff-view": "Eén van de bewarkingen veur de verschillen die'j op-evreugen hebben, is '''vortedaon'''.\nJe kunnen disse verschillen bekieken. Misschien steet der meer over in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
        "rev-suppressed-diff-view": "Eén van de bewarkingen veur de verschillen die'j op-evreugen hebben, is '''onderdrokt'''.\nJe kunnen disse verschillen bekieken. Misschien steet der over in t [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} logboek mit onderdrokten versies].",
-       "rev-delundel": "bekiek/verbarg",
+       "rev-delundel": "bekyken/verbargen",
        "rev-showdeleted": "bekiek",
        "revisiondelete": "Wiezigingen vortdoon/herstellen",
        "revdelete-nooldid-title": "Gien doelversie",
        "mergelog": "Samenvoegingslogboek",
        "revertmerge": "Samenvoeging weerummedreien",
        "mergelogpagetext": "Hieronder zie'j n lieste van de leste samenvoegingen van n ziedgeschiedenisse naor n aandere.",
-       "history-title": "Versiegeschiedenisse van \"$1\"",
-       "difference-title": "Verschil tussen versies van \"$1\"",
+       "history-title": "Versygeskydenisse van \"$1\"",
+       "difference-title": "Verskil tüsken versys van \"$1\"",
        "difference-title-multipage": "Verschil tussen ziejen \"$1\" en \"$2\"",
        "difference-multipage": "(Verschil tussen ziejen)",
        "lineno": "Regel $1:",
        "showhideselectedversions": "Ekeuzen versies bekieken/verbargen",
        "editundo": "weaderümmedraien",
        "diff-empty": "(Gien verschil)",
-       "diff-multi-sameuser": "({{PLURAL:$1|n Tussenliggende versie|$1 tussenliggende versies}} deur de zelfde gebruker is verbörgen)",
-       "diff-multi-otherusers": "({{PLURAL:$1|Eyn tüskenliggende versy|$1 tüskenliggende versys}} döär {{PLURAL:$2|eyn andere bruker|$2 brukers}} neet weadergeaven)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Eyn tüskenliggende versy|$1 tüskenliggende versys}} döär deselvde gebruker is verbörgen)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Eyn tüskenliggende versy|$1 tüskenliggende versys}} döär {{PLURAL:$2|eyn andere gebruker|$2 gebrukers}} neet weadergeaven)",
        "diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} deur meer as $2 {{PLURAL:$2|gebruker|gebrukers}} niet weeregeven)",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.\n\nDit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.\nWaorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
        "searchresults": "Söökresultaten",
        "prevn": "vöärige {{PLURAL:$1|$1}}",
        "nextn": "volgende {{PLURAL:$1|$1}}",
        "prevn-title": "{{PLURAL:$1|Veurig resultaot|Veurige $1 resultaoten}}",
-       "nextn-title": "{{PLURAL:$1|Volgend resultaot|Volgende $1 resultaoten}}",
+       "nextn-title": "{{PLURAL:$1|Volgend resultaat|Volgende $1 resultaten}}",
        "shown-title": "Låt $1 {{PLURAL:$1|resultaat|resultaten}} per syde seen",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) bekyken.",
        "searchmenu-exists": "'''Der is n zied mit de naam \"[[:$1]]\" op disse wiki.'''",
-       "searchmenu-new": "<strong>De zied \"[[:$1]]\" op disse wiki anmaken!</strong> \n{{PLURAL:$2|0=|Zie oek de zied mit joew zeukresultaoten.|Zie oek de lieste mit evunnen zeukresultaoten.}}",
+       "searchmenu-new": "<strong>De syde \"[[:$1]]\" up disse wiki anmaken!</strong> \n{{PLURAL:$2|0=|See ouk de syde mid juw söökresultaten.|See ouk de lyste mid vünden söökresultaten.}}",
        "searchprofile-articles": "Artikels",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Alles",
        "search-result-size": "$1 ({{PLURAL:$2|1 woord|$2 woorden}})",
        "search-result-category-size": "{{PLURAL:$1|1 kategorielid|$1 kategorielejen}} ({{PLURAL:$2|1 onderkategorie|$2 onderkategorieën}}, {{PLURAL:$3|1 bestaand|$3 bestaanden}})",
        "search-redirect": "(döärverwysing vanaf $1)",
-       "search-section": "(onderwarp $1)",
+       "search-section": "(underwarp $1)",
        "search-file-match": "(kümt oavereyne mid de inhold van et bestand)",
-       "search-suggest": "Bedoelden je: $1",
+       "search-suggest": "Bedoolde jy: $1",
        "search-interwiki-caption": "Resultaten van süsterprojekten",
        "search-interwiki-default": "Resultaoten van $1:",
        "search-interwiki-more": "(meer)",
        "searchrelated": "verwaant",
        "searchall": "alles",
        "showingresults": "Hieronder {{PLURAL:$1|steet '''1''' resultaot|staon '''$1''' resultaoten}}  <b>$1</b> vanaof nummer <b>$2</b>.",
-       "search-showingresults": "{{PLURAL:$4|Resultaot <strong>$1</strong> van <strong>$2</strong>|Resultaoten <strong>$1 - $2</strong> van <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$3</strong>|Resultaten <strong>$1 – $2</strong> van <strong>$3</strong>}}",
        "search-nonefound": "Der binnet geen resultaten vöär de söökupdrachte.",
        "powersearch-legend": "Uutgebreid zeuken",
        "powersearch-ns": "Zeuken in naamruumten:",
        "search-external": "Extern zeuken",
        "searchdisabled": "Zeuken in {{SITENAME}} is niet meugelik. Je kunnen gebruukmaken van Google. De gegevens over {{SITENAME}} bin misschien niet bie-ewörken.",
        "search-error": "Der is wat mis-egaon bie t zeuken: $1",
-       "preferences": "Veurkeuren",
-       "mypreferences": "Myn vöärköären",
+       "preferences": "Instellingen",
+       "mypreferences": "Instellingen",
        "prefs-edits": "Antal bewarkingen:",
        "prefs-skin": "{{SITENAME}}-uterlik",
        "skin-preview": "bekieken",
        "datedefault": "Gien veurkeur",
        "prefs-labs": "Alphafunksies",
        "prefs-user-pages": "Gebrukersziejen",
-       "prefs-personal": "Gebrukersgegevens",
-       "prefs-rc": "Leste wiezigingen",
-       "prefs-watchlist": "Volglieste",
+       "prefs-personal": "Brukersgegeavens",
+       "prefs-rc": "Lätste wysigingen",
+       "prefs-watchlist": "Volglyste",
        "prefs-editwatchlist-label": "Onderwarpen op joew volglieste bewarken:",
        "prefs-editwatchlist-edit": "Onderwarpen op mien volgliesten bekieken en vortdoon",
        "prefs-watchlist-days": "Antal dagen in de volglieste bekieken:",
        "prefs-changeemail": "Netpostadres wiezigen of vorthaolen",
        "prefs-setemail": "Stel n netpostadres in",
        "prefs-email": "Instellingen veur netpost",
-       "prefs-rendering": "Ziedweergave",
-       "saveprefs": "Veurkeuren opslaon",
+       "prefs-rendering": "Uterlik",
+       "saveprefs": "Instellingen seakeren",
        "restoreprefs": "Alle standardinstellingen weerummezetten (veur alle seksies)",
        "prefs-editing": "Bewarkingsveld",
        "searchresultshead": "Zeukresultaoten",
        "recentchangescount": "Standard antal bewarkingen um te laoten zien:",
        "prefs-help-recentchangescount": "Dit geldt veur leste wiezigingen, ziedgeschiedenisse en logboekziejen",
        "prefs-help-watchlist-token2": "Dit is de geheime sleutel veur de webvoer van joew volglieste.\nIederene die t token kent, kan joew volglieste bekieken, dus deel dit token niet.\nJe kunnen de [[Special:ResetTokens|tokens opniej instellen]] a'j dat willen.",
-       "savedprefs": "Veurkeuren bin op-esleugen.",
+       "savedprefs": "Instellingen binnet seakerd.",
        "timezonelegend": "Tiedzone:",
        "localtime": "Plaotselike tied:",
        "timezoneuseserverdefault": "Wikistandard gebruken ($1)",
        "timezoneregion-indian": "Indiese Oseaan",
        "timezoneregion-pacific": "Stille Oseaan",
        "allowemail": "Berichten van aandere gebrukers toestaon",
-       "prefs-searchoptions": "Zeukinstellingen",
+       "prefs-searchoptions": "Söken",
        "prefs-namespaces": "Naamruumtes",
        "default": "standard",
        "prefs-files": "Bestaanden",
        "prefs-emailconfirm-label": "Netpostbevestiging:",
        "youremail": "Netpostadres (niet verplicht) *",
        "username": "{{GENDER:$1|Gebrukersnaam}}:",
-       "prefs-memberingroups": "{{GENDER:$2|Lid}} van {{PLURAL:$1|groep|groepen}}:",
-       "prefs-registration": "Registrasiedaotum:",
+       "prefs-memberingroups": "{{GENDER:$2|Lid}} van {{PLURAL:$1|grup|gruppen}}:",
+       "prefs-registration": "Registratydåtum:",
        "yourrealname": "Echte naam (niet verplicht)",
-       "yourlanguage": "Taal veur systeemteksten",
+       "yourlanguage": "Taal / språke:",
        "yourvariant": "Taalvariaant veur inhoud:",
        "prefs-help-variant": "Joew veurkeursvariaant of -spelling um de inhoudsziejen van disse wiki in weer te geven.",
        "yournick": "Alias veur ondertekeningen",
        "prefs-help-signature": "Reaksies op de overlegziejen mutten ondertekend wörden mit \"<nowiki>~~~~</nowiki>\", dit wörden dan ummezet in joew ondertekening mit daorbie de daotum en tied van de bewarking.",
        "badsig": "Ongeldige haandtekening; HTML naokieken.",
        "badsiglength": "Joew haandtekening is te lang.\nt Mut minder as {{PLURAL:$1|letter|letters}} hebben.",
-       "yourgender": "Geslacht:",
-       "gender-unknown": "De programmatuur gebruukt zoveul meugelik geslachtsneutrale woorden as t over joe geet.",
-       "gender-male": "Keerl",
-       "gender-female": "Deerne",
-       "prefs-help-gender": "Disse instelling is opsioneel.\n\nDe programmatuur gebruukt disse weerde um joe op de juuste maniere an te spreken en veur aandere gebrukers um joew geslacht an te geven.\nDisse informasie is zichtbaor veur aandere gebrukers.",
+       "yourgender": "Ho wil jy beskreaven wörden?",
+       "gender-unknown": "Geslachtsneutrale anspreaksform",
+       "gender-male": "Hee bewarkt syden",
+       "gender-female": "See bewarkt syden",
+       "prefs-help-gender": "Disse instelling is optioneel.\nDe programmatuur gebruukt disse waerde um ju up de jüüste manere an te spreaken en vöär andere gebrukers üm juw geslacht an te geaven.\nDisse informaty is sichtbår vöär andere gebrukers.",
        "email": "Privéberichten",
        "prefs-help-realname": "Echte naam is keuzevrie.\nA'j disse opsie invullen zu'w joew echte naam gebruken um erkenning te geven veur joew wark.",
        "prefs-help-email": "n Netpostadres is niet verplicht, mer zo ku'w wel joew wachtwoord toesturen veur a'j t vergeten bin.",
        "prefs-help-email-others": "Je kunnen oek aandere meensen de meugelikheid geven um kontakt mit joe op te nemen mit n verwiezing op joew gebrukers- en overlegzied zonder da'j de identiteit pries hoeven te geven.",
        "prefs-help-email-required": "Hier he'w n netpostadres veur neudig.",
-       "prefs-info": "Baosisinformasie",
-       "prefs-i18n": "Taalinstellingen",
+       "prefs-info": "Basisinformaty",
+       "prefs-i18n": "Språkinstellingen",
        "prefs-signature": "Ondertekening",
        "prefs-dateformat": "Daotumopmaak:",
        "prefs-timeoffset": "Tiedsverschil",
        "right-siteadmin": "De databanke blokkeren en weer vriegeven",
        "right-override-export-depth": "Ziejen exporteren, oek de ziejen waor naor verwezen wördt, tot n diepte van 5",
        "right-sendemail": "Bericht versturen naor aandere gebrukers",
-       "newuserlogpage": "Logbook van nye brukers",
+       "newuserlogpage": "Logbook van nye gebrukers",
        "newuserlogpagetext": "Hieronder staon de niej in-eschreven gebrukers",
        "rightslog": "Gebrukersrechtenlogboek",
        "rightslogtext": "Dit is n logboek mit veraanderingen van gebrukersrechten",
        "rcfilters-filter-user-experience-level-newcomer-label": "Anwas",
        "rcfilters-filter-user-experience-level-newcomer-description": "An-emelden bewarkers dee minder as 10 bewarkingen edån hebben of 4 dagen aktiv ewesd hebben.",
        "rcfilters-filter-user-experience-level-learner-label": "Leyrlingen",
-       "rcfilters-filter-user-experience-level-learner-description": "Anmeldede bewarkers mid meyr ervaring as \"anwas\", mär minder as \"ervaren brukers\".",
+       "rcfilters-filter-user-experience-level-learner-description": "Anmeldede bewarkers mid meyr ervaring as \"anwas\", mär minder as \"ervaren gebrukers\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Ervåren gebrukers",
        "rcfilters-filter-user-experience-level-experienced-description": "An-emelde bewarkers mid meyr as 500 bewarkingen en 30 dagen van aktiviteit.",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-previousrevision-description": "Alle wysigingen dee neet de \"lätste versy\" binnen.",
        "rcfilters-view-tags": "Emarkeerde wysigingen",
        "rcfilters-view-namespaces-tooltip": "Filter resultaten up naamruumde",
-       "rcfilters-view-tags-tooltip": "Filter resultaten döär bewarkingsetiketten te bruken",
+       "rcfilters-view-tags-tooltip": "Filter resultaten döär bewarkingsetiketten te gebruken",
        "rcfilters-liveupdates-button": "Rechtstreakse aktualisering",
        "rcfilters-liveupdates-button-title-off": "Nye wysigingen voorddalik låten seen",
        "rcnotefrom": "Wysigingen sinds <strong>$3, $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wysiging|wysigingen}}).",
        "rclistfrom": "Bekyk wysigingen vanaf $3 $2",
        "rcshowhideminor": "$1 kleine wysigingen",
-       "rcshowhideminor-show": "Bekiek",
+       "rcshowhideminor-show": "bekyken",
        "rcshowhideminor-hide": "verbargen",
        "rcshowhidebots": "$1 botbrukers",
        "rcshowhidebots-show": "bekyken",
-       "rcshowhidebots-hide": "Verbarg",
-       "rcshowhideliu": "$1 registreerde brukers",
+       "rcshowhidebots-hide": "verbargen",
+       "rcshowhideliu": "$1 registreerde gebrukers",
        "rcshowhideliu-show": "Bekiek",
        "rcshowhideliu-hide": "verbargen",
-       "rcshowhideanons": "$1 anonyme brukers",
-       "rcshowhideanons-show": "Bekiek",
+       "rcshowhideanons": "$1 anonyme gebrukers",
+       "rcshowhideanons-show": "bekyken",
        "rcshowhideanons-hide": "verbargen",
        "rcshowhidepatr": "$1 nao-ekeken bewarkingen",
        "rcshowhidepatr-show": "Bekiek",
        "rcshowhidepatr-hide": "Verbarg",
        "rcshowhidemine": "$1 myn bewarkingen",
-       "rcshowhidemine-show": "Bekiek",
+       "rcshowhidemine-show": "bekyken",
        "rcshowhidemine-hide": "verbargen",
        "rcshowhidecategorization": "$1 kategorisering van ziejen",
        "rcshowhidecategorization-show": "Bekiek",
        "rclinks": "Bekyk de lätste $1 wysigingen van de vöärbye $2 dagen",
        "diff": "verskil",
        "hist": "geskydenisse",
-       "hide": "verbarg",
-       "show": "bekiek",
+       "hide": "verbargen",
+       "show": "bekyken",
        "minoreditletter": "K",
        "newpageletter": "N",
        "boteditletter": "B",
        "recentchangeslinked": "Soortgelyke wysigingen",
        "recentchangeslinked-feed": "Volg verwysingen",
        "recentchangeslinked-toolbox": "Volg verwysingen",
-       "recentchangeslinked-title": "Wiezigingen verwaant an $1",
+       "recentchangeslinked-title": "Wysigingen verwand an $1",
        "recentchangeslinked-summary": "Voor een sydname in üm bewarkingen te seen up syden wårnå verweasen wördt of dårnå verwysen. (Voor {{ns:category}}:kategoryname in üm leaden van een kategory te seen). Bewarkingen van syden up [[Special:Watchlist|juw volglyste]] binnet <strong>vetdrükked</strong>.",
-       "recentchangeslinked-page": "Ziednaam:",
-       "recentchangeslinked-to": "Bekiek wiezigingen op ziejen mit verwiezingen naor disse zied",
+       "recentchangeslinked-page": "Sydname:",
+       "recentchangeslinked-to": "Bekyk wysigingen up syden dee hyrhinne verwysen",
        "recentchanges-page-added-to-category": "[[:$1]] bie kategorie ezet",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] bie kategorie ezet, [[Special:WhatLinksHere/$1|disse zied zit in aandere ziejen in-esleuten]]",
        "recentchanges-page-removed-from-category": "[[:$1]] is vortedaon uut kategorie",
        "uploadlogpage": "Logboek mit nieje bestaanden",
        "uploadlogpagetext": "Hieronder steet n lieste mit bestaanden die net niej bin.\nZie de [[Special:NewFiles|uutstalling mit media]] veur n overzicht.",
        "filename": "Bestaandsnaam",
-       "filedesc": "Beschrieving",
+       "filedesc": "Beskryving",
        "fileuploadsummary": "Beschrieving:",
        "filereuploadsummary": "Bestaandswiezigingen:",
        "filestatus": "Auteursrechtstaotus",
        "upload-curl-error6-text": "t Webadres kon niet bereikt wörden. Kiek effen nao o'j t goeie adres in-evoerd hebben en of de webstee bereikbaor is.",
        "upload-curl-error28": "Tiedsoverschriejing veur t versturen van t bestaand",
        "upload-curl-error28-text": "t Duren te lange veurdat de webstee reageren. Kiek effen nao of de webstee bereikbaor is, wacht effen en probeer t daornao weer. Probeer t aanders as t wat rustiger is.",
-       "license": "Lisensie",
-       "license-header": "Lisensie",
-       "nolicense": "Gien lisensie ekeuzen",
+       "license": "Licensy",
+       "license-header": "Licensy",
+       "nolicense": "Geen licensy köäsen",
        "license-nopreview": "(Naokieken is niet meugelik)",
        "upload_source_url": " (een geldig, publiek toegankelik webadres)",
        "upload_source_file": " (n bestaand op de hardeschieve)",
        "listfiles-summary": "Op disse spesiale zied ku'j alle bestaanden bekieken die lestens op-estuurd bin.",
        "listfiles_search_for": "Zeuk naor bestaand:",
-       "imgfile": "bestaand",
+       "imgfile": "bestand",
        "listfiles": "Bestaandslieste",
        "listfiles_thumb": "Miniatuuraofbeelding",
        "listfiles_date": "Daotum",
        "filehist-thumb": "Miniatuurafbealding",
        "filehist-thumbtext": "Miniatuurafbealding vöär versy van $1",
        "filehist-nothumb": "Gien miniatuuraofbeelding",
-       "filehist-user": "Bruker",
+       "filehist-user": "Gebruker",
        "filehist-dimensions": "Groutde",
        "filehist-filesize": "Bestaandsgrootte",
        "filehist-comment": "Kommentaar",
        "imagelinks": "Bestandsbruuk",
-       "linkstoimage": "Dit bestand wördt up de volgende {{PLURAL:$1|syde|$1 syden}} bruked:",
-       "linkstoimage-more": "Meyr as $1 {{PLURAL:$1|syde bruukt|syden bruken}} dit bestand.\nDe volgende lyste givt allinnig de {{PLURAL:$1|eyrste syde|eyrste $1 syden}} weader dee dit bestand bruukt.\nDe [[Special:WhatLinksHere/$2|heyle lyste]] is ouk beskikbår.",
-       "nolinkstoimage": "Geen enkelde syde gebrüükt disse holder.",
+       "linkstoimage": "Dit bestand wördt up de volgende {{PLURAL:$1|syde|$1 syden}} gebruked:",
+       "linkstoimage-more": "Meyr as $1 {{PLURAL:$1|syde gebruukt|syden gebruken}} dit bestand.\nDe volgende lyste givt allinnig de {{PLURAL:$1|eyrste syde|eyrste $1 syden}} weader dee dit bestand gebruukt.\nDe [[Special:WhatLinksHere/$2|heyle lyste]] is ouk beskikbår.",
+       "nolinkstoimage": "Geen enkele syde gebruukt dit bestand.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Meer verwiezingen]] naor dit bestaand bekieken.",
        "linkstoimage-redirect": "$1 (bestaandsdeurverwiezing) $2",
        "duplicatesoffile": "{{PLURAL:$1|t Volgende bestaand is|De volgende $1 bestaanden bin}} gelieke an dit bestaand ([[Special:FileDuplicateSearch/$2|meer informasie]]):",
        "sharedupload": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten.",
        "sharedupload-desc-there": "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
-       "sharedupload-desc-here": "Dit bestand kümt van $1 en kan ouk in andere projekten bruked weasen. De [$2 syde mid de beskryving van et bestand] steyt hyrunder.",
+       "sharedupload-desc-here": "Dit bestand kümt van $1 en kan ouk in andere projekten gebruked weasen. De [$2 syde mid de beskryving van et bestand] steyt hyrunder.",
        "sharedupload-desc-edit": "Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.\nJe kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.",
        "sharedupload-desc-create": "Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.\nJe kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.",
        "filepage-nofile": "Der besteet gien bestaand mit disse naam.",
        "uploadnewversion-linktext": "n Niejere versie van dit bestaand opsturen.",
        "shared-repo-from": "uut $1",
        "shared-repo": "n edeelden mediadatabanke",
-       "upload-disallowed-here": "Je kunnen dit bestaand niet overschrieven.",
+       "upload-disallowed-here": "Jy künnet dit bestand neet oaverskryven.",
        "filerevert": "$1 weerummedreien",
        "filerevert-legend": "Bestaand weerummezetten",
        "filerevert-intro": "Je bin '''[[Media:$1|$1]]''' an t weerummedreien tot de [$4 versie van $2, $3]",
        "ncategories": "$1 {{PLURAL:$1|kategorie|kategorieën}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwikiverwiezing|interwikiverwiezingen}}",
        "nlinks": "$1 {{PLURAL:$1|verwiezing|verwiezingen}}",
-       "nmembers": "$1 {{PLURAL:$1|onderwarp|onderwarpen}}",
+       "nmembers": "$1 {{PLURAL:$1|lid|leaden}}",
        "nrevisions": "$1 {{PLURAL:$1|versie|versies}}",
        "nimagelinks": "Wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
        "ntransclusions": "wörden op {{PLURAL:$1|één zied|$1 ziejen}} gebruukt",
        "nopagetitle": "Doelzied besteet niet",
        "nopagetext": "De zied die'j herneumen willen besteet niet.",
        "pager-newer-n": "{{PLURAL:$1|1 niejere|$1 niejere}}",
-       "pager-older-n": "{{PLURAL:$1|1 ouwere|$1 ouwere}}",
+       "pager-older-n": "{{PLURAL:$1|1 oldere|$1 oldere}}",
        "suppress": "Toezicht",
        "querypage-disabled": "Disse spesiale zied is uutezet um prestasieredens.",
        "apisandbox": "API-zaandkule",
-       "booksources": "Boekinformasie",
-       "booksources-search-legend": "Zeuk informasie over n boek",
-       "booksources-search": "Zeuken",
+       "booksources": "Bookinformaty",
+       "booksources-search-legend": "Söök bronnen van een book",
+       "booksources-search": "ken",
        "booksources-text": "Hieronder steet n lieste mit verwiezingen naor aandere websteeën die nieje of wat ouwere boeken verkopen, en daor hebben ze warschienlik meer informasie over t boek da'j zeuken:",
        "booksources-invalid-isbn": "De op-egeven ISBN klop niet; kiek effen nao o'j gien fout emaakt hebben bie de invoer.",
        "magiclink-tracking-isbn": "Ziejen die magiese ISBN-verwiezingen gebruken",
        "cachedspecial-viewing-cached-ttl": "Je bekieken noen n versie uut t tussengeheugen van disse zied, die hooguut $1 oud is.",
        "cachedspecial-viewing-cached-ts": "Je bekieken noen n versie uut t tussengeheugen van disse zied, t kan ween dat t niet helemaole bie de tied is.",
        "cachedspecial-refresh-now": "Leste bekieken.",
-       "categories": "Kategorieën",
+       "categories": "Kategoryen",
        "categoriespagetext": "De de volgende {{PLURAL:$1|kategorie steet|kategorieën staon}} ziejen of mediabestaanden.\n[[Special:UnusedCategories|ongebruukten kategorieën]] zie'j hier niet.\nZie oek [[Special:WantedCategories|gewunste kategorieën]].",
        "categoriesfrom": "Laot kategorieën zien vanaof:",
        "deletedcontributions": "Vortedaone gebrukersbiedragen",
        "usermessage-summary": "Systeemteksten achter-eleuten",
        "usermessage-editor": "Systeemtekste",
        "watchlist": "Volglieste",
-       "mywatchlist": "Myn volglyste",
+       "mywatchlist": "Volglyste",
        "watchlistfor2": "Veur $1 ($2)",
        "nowatchlist": "Gien artikels in volglieste.",
        "watchlistanontext": "$1 is verplicht um joew volglieste te bekieken of te wiezigen.",
        "actioncomplete": "Uutevoerd",
        "actionfailed": "De haandeling is mislokt.",
        "deletedtext": "t Artikel \"$1\" is vortedaon. Zie de \"$2\" veur n lieste van ziejen die as lest vortedaon bin.",
-       "dellogpage": "Vortdologboek",
+       "dellogpage": "Vordsmytlogbook",
        "dellogpagetext": "Hieronder steet n lieste van ziejen en bestaanden die as lest vortedaon bin.",
        "deletionlog": "Vortdologboek",
        "reverted": "Eerdere versie hersteld",
        "deleting-backlinks-warning": "<strong>Waorschuwing:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|aandere ziejen]] gebruken of verwiezen naor de zied die'j vortdoon willen.",
        "rollback": "Wiezigingen herstellen",
        "rollbacklink": "weaderümmedraien",
-       "rollbacklinkcount": "{{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
+       "rollbacklinkcount": "{{PLURAL:$1|eyn bewarking|$1 bewarkingen}} weaderümmedraien",
        "rollbacklinkcount-morethan": "Meer as {{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien",
        "rollbackfailed": "Wieziging herstellen is mislokt",
        "cantrollback": "De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.",
        "rollback-success": "Wiezigingen van $1; weerummedreid naor de leste versie van $2.",
        "sessionfailure-title": "Sessiefout",
        "sessionfailure": "Der is n probleem mit joew anmeldsessie. De aksie is stop-ezet uut veurzörg tegen n beveiligingsrisico (dat besteet uut t meugelike \"kraken\" van disse sessie). Gao weerumme naor de veurige zied, laoj disse zied opniej en probeer t nog es.",
-       "protectlogpage": "Beveiligingslogboek",
+       "protectlogpage": "Beveiligingslogbook",
        "protectlogtext": "Hieronder staon de leste wiezigingen veur t blokkeren en vriegeven van artikels en ziejen.\nZie de [[Special:ProtectedPages|lieste mit ziejen die beveiligd bin]] veur t hele overzicht.",
        "protectedarticle": "[[$1]] is beveiligd",
        "modifiedarticleprotection": "beveiligingsnivo van \"[[$1]]\"  ewiezigd",
        "blanknamespace": "(Höyvdnaamruumde)",
        "contributions": "{{GENDER:$1|Brukersbydragen}}",
        "contributions-title": "Biedragen van $1",
-       "mycontris": "Myn bydragen",
+       "mycontris": "Bydragen",
        "anoncontribs": "Bydragen",
        "contribsub2": "Veur {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Gien wiezigingen evunnen die an de estelde criteria voldoon.",
        "uctop": "leste wieziging",
-       "month": "Maond:",
-       "year": "Jaor:",
+       "month": "Månd:",
+       "year": "Vanaf jår (en eyrer):",
        "sp-contributions-blocklog": "blokkeerlogboek",
        "sp-contributions-deleted": "vortedaone gebrukersbiedragen",
        "sp-contributions-uploads": "nieje bestaanden",
        "sp-contributions-newonly": "Allinnig nieje ziejen laoten zien",
        "sp-contributions-submit": "Zeuk",
        "whatlinkshere": "Verwysingen hyrhinne",
-       "whatlinkshere-title": "Ziejen die verwiezen naor \"$1\"",
-       "whatlinkshere-page": "Zied:",
-       "linkshere": "Disse ziejen verwiezen naor '''$2''':",
+       "whatlinkshere-title": "Syden dee nå \"$1\" verwyset",
+       "whatlinkshere-page": "Syde:",
+       "linkshere": "De volgende syden verwysen nå <strong>$2</strong>:",
        "nolinkshere": "Gien enkele zied verwis naor '''$2'''.",
        "nolinkshere-ns": "Gien enkele zied verwis naor '''$2''' in de ekeuzen naamruumte.",
-       "isredirect": "deurverwiezing",
-       "istemplate": "in-evoegd as mal",
-       "isimage": "bestaandsverwiezing",
-       "whatlinkshere-prev": "{{PLURAL:$1|veurige|veurige $1}}",
+       "isredirect": "döärverwysing",
+       "istemplate": "invoogd as mal",
+       "isimage": "bestandsverwysing",
+       "whatlinkshere-prev": "{{PLURAL:$1|vöärige|vöärige $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|volgende|volgende $1}}",
-       "whatlinkshere-links": "← verwiezingen",
-       "whatlinkshere-hideredirs": "$1 deurverwiezingen",
-       "whatlinkshere-hidetrans": "Vörlageninbinnungen $1",
-       "whatlinkshere-hidelinks": "Lenken $1",
+       "whatlinkshere-links": "← verwysingen",
+       "whatlinkshere-hideredirs": "$1 döärverwysingen",
+       "whatlinkshere-hidetrans": "$1 invoogde mallen",
+       "whatlinkshere-hidelinks": "$1 verwysingen",
        "whatlinkshere-hideimages": "$1 holderverwysingen",
        "whatlinkshere-filters": "Filters",
        "autoblockid": "Automatiese blokkering #$1",
        "semiprotectedpagemovewarning": "'''Waorschuwing:''' disse zied kan allinnig deur eregistreerden gebrukers herneumd wörden.\nDe leste logboekregel steet hieronder:",
        "move-over-sharedrepo": "== t Bestaand besteet al ==\n[[:$1]] besteet al in de edeelden mediadatabanke. A'j n bestaand naor disse titel herneumen, dan ku'j  t edeelden bestaand niet gebruken.",
        "file-exists-sharedrepo": "Disse bestaandsnaam besteet al in de edeelden mediadatabanke.\nKies n aandere bestaandsnaam.",
-       "export": "Ziejen exporteren",
+       "export": "Syden eksporteren",
        "exporttext": "De tekste en geschiedenisse van n zied of n koppel ziejen kunnen in XML-formaot uutevoerd wörden. Dit bestaand ku'j daornao exporteren naor n aandere MediaWiki deur de [[Special:Import|invoerzied]] te gebruken.\n\nZet in t onderstaonde veld de namen van de ziejen die'j exporteren willen, één zied per regel, en geef an o'j alle versies mit de bewarkingssamenvatting exporteren willen of allinnig de leste versies mit de bewarkingssamenvatting.\n\nA'j dat leste doon willen dan ku'j oek n verwiezing gebruken, bieveurbeeld [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] veur de zied \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Alle ziejen exporteren",
        "exportcuronly": "Allinnig de actuele versie, niet de veurgeschiedenisse",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versie|versies}} van $2",
        "javascripttest": "JavaScript testen",
        "javascripttest-qunit-intro": "Zie de [$1 testdokumentasie] op mediawiki.org.",
-       "tooltip-pt-userpage": "{{GENDER:|Oew}} gebroekersziede",
+       "tooltip-pt-userpage": "{{GENDER:|Juw}} gebrukerssyde",
        "tooltip-pt-anonuserpage": "Gebroekersbladziede vuur t IP-adres da'j broekt",
-       "tooltip-pt-mytalk": "{{GENDER:|Oew}} oaverlegziede",
+       "tooltip-pt-mytalk": "{{GENDER:|Juw}} oaverlegsyde",
        "tooltip-pt-anontalk": "Oaverlegbladziede van n naamlozen gebroeker van dit IP-adres",
-       "tooltip-pt-preferences": "{{GENDER:|Miene}} vuurkeuren",
-       "tooltip-pt-watchlist": "Lieste van zieden die op miene volglieste stoan",
-       "tooltip-pt-mycontris": "Oaverzicht van {{GENDER:|oew}} biejdreagen",
-       "tooltip-pt-login": "Jy wördet van harte uutnöygd üm ju an te melden as bruker, mär et is neet verplicht",
-       "tooltip-pt-logout": "Ofmaelden",
+       "tooltip-pt-preferences": "{{GENDER:|Juw}} instellingen",
+       "tooltip-pt-watchlist": "Lyste van syden dee up myn volglyste stån",
+       "tooltip-pt-mycontris": "Oaversicht van {{GENDER:|juw}} bydragen",
+       "tooltip-pt-login": "Jy wördet van harte nöygd üm ju an te melden as gebruker, mär et is neet verplichted",
+       "tooltip-pt-logout": "Afmelden",
        "tooltip-pt-createaccount": "Skryv juw eigen vöäral in en meld juw eigen an. Dit is lykewels neet verplicht.",
        "tooltip-ca-talk": "Låt een oaverlegtekst oaver disse syde seen",
        "tooltip-ca-edit": "Bewark disse syde",
        "tooltip-ca-addsection": "Ny underwarp tovogen",
-       "tooltip-ca-viewsource": "Disse ziede is beveiligd taegen veraanderen. Iej könt wal kieken noar de ziede",
+       "tooltip-ca-viewsource": "Disse syde is beveiligd. \nJy künnet wel de bronkode wel bekyken.",
        "tooltip-ca-history": "Oldere versys van disse syde",
        "tooltip-ca-protect": "Beveilig disse ziede taegen veraanderen",
        "tooltip-ca-unprotect": "De beveiliging vuur disse ziede wiezigen",
        "tooltip-ca-delete": "Smiet disse ziede vort",
        "tooltip-ca-undelete": "Haal n inhoald van disse ziede oet n emmer",
-       "tooltip-ca-move": "Gef disse ziede nen aanderen titel",
+       "tooltip-ca-move": "Disse syde hernömen",
        "tooltip-ca-watch": "Voog disse syde to an juw volglyste",
        "tooltip-ca-unwatch": "Smiet disse ziede van oewe voalglieste",
        "tooltip-search": "{{SITENAME}} döärsöken",
        "tooltip-t-recentchangeslinked": "Pas verrichte veranderingen dee nå disse syde verwyset",
        "tooltip-feed-rss": "RSS-voer vuur disse ziede",
        "tooltip-feed-atom": "Atom-voer vuur disse ziede",
-       "tooltip-t-contributions": "Lieste met biejdreagen van {{GENDER:$1|disse gebroeker}}",
+       "tooltip-t-contributions": "Een lyste mid bydragen van {{GENDER:$1|disse gebruker}}",
        "tooltip-t-emailuser": "Stüür disse {{GENDER:$1|gebruker}} een netpostbericht",
        "tooltip-t-info": "Meer informasie over disse zied",
        "tooltip-t-upload": "Laad afbealdingen en/of gelüüdsmateriaal",
        "tooltip-t-print": "De afdrükbåre versy van disse syde",
        "tooltip-t-permalink": "Permanente verwysing nå disse versy van de syde",
        "tooltip-ca-nstab-main": "Låt een tekst van et artikel seen",
-       "tooltip-ca-nstab-user": "Loat de gebroekersbladziede zeen",
+       "tooltip-ca-nstab-user": "Gebrukerssyde bekyken",
        "tooltip-ca-nstab-media": "Loat n mediatekst zeen",
        "tooltip-ca-nstab-special": "Dit is een bysündere syde dee jy neet veranderen künt",
-       "tooltip-ca-nstab-project": "Loat de projektbladziede zeen",
+       "tooltip-ca-nstab-project": "Projektsyde bekyken",
        "tooltip-ca-nstab-image": "Låt de bestandssyde seen",
        "tooltip-ca-nstab-mediawiki": "Loat de systeemtekstbladziede zeen",
-       "tooltip-ca-nstab-template": "Loat de malbladziede zeen",
+       "tooltip-ca-nstab-template": "Mal bekyken",
        "tooltip-ca-nstab-help": "Loat de hölpbladziede zeen",
        "tooltip-ca-nstab-category": "Låt de kategorysyde seen",
        "tooltip-minoredit": "Markeer as n klaene wieziging",
-       "tooltip-save": "Wiezigingen opsloan",
-       "tooltip-preview": "Bekiek oew versie vuurda'j t opsloan (anbeveulen)!",
-       "tooltip-diff": "Bekiek oew aegen wiezigingen",
+       "tooltip-save": "Wysigingen seakeren",
+       "tooltip-preview": "Bekyk juw wysigingen. Bruuk dit vöärdat jy seakeret.",
+       "tooltip-diff": "Låt seen welke wysigingen jy in de tekst maked hebbet.",
        "tooltip-compareselectedversions": "Bekiek de verschillen tussen de ekeuzen versies.",
        "tooltip-watch": "Voog disse ziede to an oew volglieste",
        "tooltip-watchlistedit-normal-submit": "Ziejen vortdoon",
        "tooltip-watchlistedit-raw-submit": "Volglieste biewarken",
        "tooltip-recreate": "Disse ziede opniej anmaken, ondanks t feit dat t vortdoan is.",
        "tooltip-upload": "Bestaanden opsturen",
-       "tooltip-rollback": "\"Weaderümmedraien\" drait mid eyn klik de bewarking(en) van de lätste bruker up disse syde terügge.",
-       "tooltip-undo": "A'j op \"weerummedreien\" klikken geet t bewaerkingsvaenster lös en kö'j ne vurige versie terugzetten.\nIej könt in de bewaerkingssamenvatting n reden opgeven.",
+       "tooltip-rollback": "\"Weaderümmedraien\" drait mid eyn klik de bewarking(en) van de lätste gebruker up disse syde terügge.",
+       "tooltip-undo": "As jy up \"weaderümmedraien\" klikket geyt et bewarkingsveld lös en kün jy een vöärige versy weaderümmesetten. Jy künnet in de bewarkingssamenvatting een readen upgeaven.",
        "tooltip-preferences-save": "Vuurkeuren opsloan",
-       "tooltip-summary": "Voer ne korte samenvatting in",
+       "tooltip-summary": "Voor een korte samenvatting in",
        "interlanguage-link-title": "$1 – $2",
        "anonymous": "Anonieme {{PLURAL:$1|gebruker|gebrukers}} van {{SITENAME}}",
        "siteuser": "{{SITENAME}}-gebruker $1",
        "spam_reverting": "Bezig mit t weerummezetten naor de leste versie die gien verwiezing hef naor $1",
        "spam_blanking": "Alle wiezigingen mit n verwiezing naor $1 wörden vortehaold",
        "spam_deleting": "In alle versies staon verwiezingen naor $1. Zied vortedaon",
-       "simpleantispam-label": "Antispamkontraole.\nHier <strong>niks</strong> invullen!",
+       "simpleantispam-label": "Antispamkontrole.\nHyr <strong>niks</strong> invüllen!",
        "pageinfo-title": "Informasie over \"$1\"",
        "pageinfo-not-current": "Disse gegevens bin allinnig beschikbaor veur disse versie.",
-       "pageinfo-header-basic": "Baosisinformasie",
+       "pageinfo-header-basic": "Basisinformaty",
        "pageinfo-header-edits": "Bewarkingsgeschiedenisse",
        "pageinfo-header-restrictions": "Ziedbeveiliging",
        "pageinfo-header-properties": "Ziedeigenschappen",
        "filedelete-old-unregistered": "De an-egeven bestaandsversie \"$1\" steet niet in de databanke.",
        "filedelete-current-unregistered": "t An-egeven bestaand \"$1\" steet niet in de databanke.",
        "filedelete-archive-read-only": "De webserver kan niet in de archiefmap \"$1\" schrieven.",
-       "previousdiff": "← veurige wieziging",
-       "nextdiff": "volgende wieziging →",
+       "previousdiff": "← vöärige wysiging",
+       "nextdiff": "volgende wysiging →",
        "mediawarning": "'''Waorschuwing:''' in dit bestaand zit misschien kodering die slicht is veur t systeem.",
        "imagemaxsize": "Maximale aofmetingen van aofbeeldingen:<br />\n''(veur op de beschrievingszied)''",
        "thumbsize": "Grootte van de miniatuuraofbeelding:",
        "file-info": "Bestaandsgrootte: $1, MIME-type: $2",
        "file-info-size": "$1 × $2 bealdpunten, bestandsgroutde: $3, MIME-type: $4",
        "file-info-size-pages": "$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|zied|ziejen}}",
-       "file-nohires": "Gien hogere resolusie beschikbaor.",
-       "svg-long-desc": "SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3",
+       "file-nohires": "Geen hougere resoluty beskikbår.",
+       "svg-long-desc": "SVG-bestand, uutgangsgroutde $1 × $2 bealdpunten, bestandsgroutde: $3",
        "svg-long-desc-animated": "Bewegend SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3",
        "svg-long-error": "Ongeldig SVG-bestaand: $1",
        "show-big-image": "Oorsprungelik bestand",
        "version-hook-name": "Hooknaam",
        "version-hook-subscribedby": "In-eschreven deur",
        "version-version": "($1)",
-       "version-license": "MediaWiki-lisensie",
+       "version-license": "MediaWiki-licensy",
        "version-ext-colheader-version": "Versie",
        "version-ext-colheader-license": "Lisensie",
        "version-ext-colheader-description": "Beschrieving",
        "version-entrypoints-header-entrypoint": "Ingang",
        "version-entrypoints-header-url": "Webadres",
        "redirect": "Deurverwiezen op bestaandsnaam, gebrukers-, zied-, versie- of logboekregelnummer",
-       "redirect-summary": "Disse speciale syde verwist döär nå een bestand (as de bestandsname upgeaven wördt), een syde (as een syd- of versynummer upgeaven wördt), een brukerssyde (as et brukersnummer upgeaven wördt) of een logbookinskryving (as een logbooknummer upgeaven wördt). Gebruuk: [[{{#Special:Redirect}}/file/Vöärbeald.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] of [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-summary": "Disse speciale syde verwist döär nå een bestand (as de bestandsname upgeaven wördt), een syde (as een syd- of versynummer upgeaven wördt), een gebrukerssyde (as et gebrukersnummer upgeaven wördt) of een logbookinskryving (as een logbooknummer upgeaven wördt). Gebruuk: [[{{#Special:Redirect}}/file/Vöärbeald.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] of [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Zeuk",
        "redirect-lookup": "Opzeuken:",
        "redirect-value": "Weerde:",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
        "htmlform-chosen-placeholder": "Kies n opsie",
-       "logentry-delete-delete": "$1 hevt de syde $3 {{GENDER:$2|vordedån}}",
+       "logentry-delete-delete": "$1 hevt de syde $3 {{GENDER:$2|vorddån}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|hevt}} de syde $3 ($4) weaderümmesetted",
        "logentry-delete-event": "$1 hef de zichtbaorheid van {{PLURAL:$5|n logboekregel|$5 logboekregels}} van $3 {{GENDER:$2|ewiezigd}}: $4",
        "logentry-delete-revision": "$1 hef de zichtbaorheid van {{PLURAL:$5|een versie|$5 versies}} van de zied $3 {{GENDER:$2|ewiezigd}}: $4",
        "revdelete-unrestricted": "hef beparkingen veur beheerders deraof ehaold",
        "logentry-block-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|hef}} {{GENDER:$4|$3}} eblokkeerd veur de duur van $5 $6",
-       "logentry-move-move": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} når $4",
-       "logentry-move-move-noredirect": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} når $4 sunder een döärverwysing achter te låten",
-       "logentry-move-move_redir": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} når $4 oaver een döärverwysing hear",
-       "logentry-move-move_redir-noredirect": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} når $4 oaver een döärverwysing hear sunder een döärverwysing achter te låten",
+       "logentry-move-move": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4",
+       "logentry-move-move-noredirect": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4 sunder een döärverwysing achter te låten",
+       "logentry-move-move_redir": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4 oaver een döärverwysing hinne",
+       "logentry-move-move_redir-noredirect": "$1 hevt de syde $3 {{GENDER:$2|hernöömd}} nå $4 oaver een döärverwysing hinne sunder een döärverwysing achter te låten",
        "logentry-patrol-patrol": "$1 hef versie $4 van de zied $3 op {{GENDER:$2|nao-ekeken}} ezet",
        "logentry-patrol-patrol-auto": "$1 hef versie $4 van de zied $3 automaties op {{GENDER:$2|nao-ekeken}} ezet",
        "logentry-newusers-newusers": "Gebruker $1 is {{GENDER:$2|an-emaakt}}",
        "logentry-rights-rights": "$1 {{GENDER:$2|hef}} groepslidmaotschap veur $3 ewiezigd van $4 naor $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|hef}} t groepslidmaotschap ewiezigd veur $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automaties bevorderd van $4 tot $5",
-       "logentry-upload-upload": "$1 hef $3 {{GENDER:$2|op-estuurd}}",
+       "logentry-upload-upload": "$1 hevt $3 {{GENDER:$2|upladen}}",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|hef}} n nieje versie van $3 op-elaojen",
        "rightsnone": "(gien)",
        "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
index 992e7e1..997db7b 100644 (file)
        "whatlinkshere-next": "{{PLURAL:$1|nächste|nächste $1}}",
        "whatlinkshere-links": "← Lenken",
        "whatlinkshere-hideredirs": "$1 Redirects",
-       "whatlinkshere-hidetrans": "$1 in-evoegden mallen",
-       "whatlinkshere-hidelinks": "$1 verwiezingen",
+       "whatlinkshere-hidetrans": "Vörlageninbinnungen $1",
+       "whatlinkshere-hidelinks": "Lenken $1",
        "whatlinkshere-hideimages": "$1 bestaandsverwiezingen",
        "whatlinkshere-filters": "Filters",
        "autoblockid": "Autoblock #$1",
index 5fb8323..c67bab3 100644 (file)
        "mycustomjsredirectprotected": "U hebt geen rechten om deze JavaScriptpagina te bewerken omdat het een doorverwijzing is en deze niet verwijst naar een pagina in uw gebruikersruimte.",
        "easydeflate-invaliddeflate": "De opgegeven inhoud is onjuist gecomprimeerd",
        "unprotected-js": "Vanwege veiligheidsredenen kan er geen JavaScript geladen worden vanaf onbeveiligde pagina's. Gelieve alleen JavaScript pagina's aan te maken in de MediaWiki: naamruimte of als een subpagina van een gebruikerspagina.",
-       "userlogout-continue": "Wilt u zich afmelden?"
+       "userlogout-continue": "Wilt u zich afmelden?",
+       "rest-wrong-method": "De requestmethode ($1) is {{PLURAL:$3|niet de toegestane methode voor dit pad|een van de toegestane methoden voor dit pad}} ($2)"
 }
index 3d8548a..eb628a8 100644 (file)
        "illegalfilename": "ߞߟߏ ߘߏ߫ ߦߋ߫ ߞߐߕߐ߮ ߕߐ߮  \"$1\" ߘߐ߫ ߡߍ߲ ߠߊߘߤߊ߬ߣߍ߲߬ ߕߍ߫ ߞߐߜߍ ߞߎ߲߬ߕߐ߰ ߞߏ ߘߐ߫. \nߕߐ߯ ߜߘߍ߫ ߟߊ߫ ߞߐߕߐ߮ ߟߊ߫ ߖߊ߰ߣߌ߲߬ ߞߣߊ߬ ߕߴߊ߬ ߟߊߦߟߍ߬ߟߌ ߡߊߝߍߣߍ߲߫ ߠߊ߫ ߕߎ߲߯.",
        "filename-toolong": "ߞߐߕߐ߮ ߕߐ߮ ߡߊ߲ߞߊ߲߫ ߞߊ߬ ߕߊ߬ߡߌ߲߬ ߝߙߐ߬ߢߐ ߂߀߀ ߞߊ߲߬.",
        "badfilename": "ߞߐߕߐ߮ ߕߐ߮ ߓߘߊ߫ ߦߟߍ߬ߡߊ߲߫ ߞߵߊ߬ ߞߍ߫ \"$1\" ߘߌ߫",
+       "filetype-missing": "ߘߐ߬ߝߎ߬ߟߋ߲߬ߠߌ߲߬ߢ ߛߌ߫ߢ ߕߍ߫ ߞߐߜߍ ߣߌ߲߬ ߠߊ߫ (ߦߏ߫ \".jpg\")",
        "empty-file": "ߌ ߣߊ߬ ߞߐߕߐ߮ ߡߍ߲ ߞߙߊߓߊ߫ ߟߊ߫߸ ߊ߬ ߘߐߞߏߟߏ߲ ߠߋ߬ ߕߘߍ߬.",
        "file-too-large": "ߌ ߟߊ߫ ߞߐߕߐ߮ ߞߙߊߓߊߣߍ߲ ߓߏ߲߬ߓߊ߫ ߕߘߍ߬ ߞߏߖߎ߰߹",
        "filename-tooshort": "ߞߐߕߐ߮ ߕߐ߮ ߛߘߎ߬ߡߊ߲߬ ߞߏߖߎ߰.",
        "verification-error": "ߞߐߕߐ߮ ߣߌ߲߬ ߡߊ߫ ߕߊ߬ߡߌ߲߬ ߞߐߕߐ߮ ߝߛߍ߬ߝߛߍ߬ ߦߌߟߊ.",
        "hookaborted": "ߌ ߕߘߍ߬ ߦߋ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߞߍ߫ ߞߏ ߘߐ߫߸ ߊ߬ ߘߐߛߊ߬ߣߍ߲߬ ߦߋ߫ ߘߐ߬ߥߙߊ߬ߟߌ ߟߋ߬ ߓߟߏ߫.",
        "illegal-filename": "ߞߐߕߐ߮ ߕߐ߮ ߟߊߘߌ߬ߢߍ߬ߣߍ߲߬ ߕߍ߫.",
+       "overwrite": "ߕߋ߲߭ߕߋ߲߭ ߞߐߕߐ߮ ߖߏ߬ߛߌ߬ߟߌ ߟߊߘߌ߬ߢߍ߬ߣߍ߲߬ ߕߍ߫.",
        "unknown-error": "ߝߎ߬ߕߎ߲߬ߕߌ߬ ߡߊߟߐ߲ߓߊߟߌ ߘߏ߫ ߓߘߊ߫ ߓߌ߬ߟߵߊ߬ ߘߐ߫.",
        "tmp-create-error": "ߊ߬ ߕߍ߫ ߣߊ߬ ߥߊ߯ߕߌ߫ ߟߊߕߊߡߌ߲߫ ߞߐߕߐ߮ ߛߌ߲ߘߌ߫ ߟߊ߫.",
+       "tmp-write-error": "ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߞߐߕߐ߮ ߛߓߍߟߌ ߝߎ߬ߕߎ߲߬ߕߌ.",
+       "large-file": "ߊ߬ ߞߊ߬ߣߌ߲߬ߣߍ߲߬ ߦߋ߫ ߟߋ߬ ߞߏ߫ ߞߐߕߐ߮ ߞߊߣߊ߬ ߥߙߊ߬ $1 ߘߌ: ߞߐߕߐ߮ ߣߌ߲߬ ߘߏ߲߬ ߦߋ߫ $2.",
+       "largefileserver": "ߞߐߕߐ߮ ߓߏ߲߬ߓߊ߫ ߞߊ߬ ߕߊ߬ߡߌ߲߬ ߡߊ߬ߛߐ߬ߟߊ ߘߊߘߐߓߍ߲߬ߣߍ߲߫ ߡߍ߲ ߠߊߘߌ߬ߢߍ߬ ߞߊ߲ߡߊ߬.",
+       "windows-nonascii-filename": "ߥߞߌ ߣߌ߲߬ ߡߊ߫ ߛߕߍߘߋ߲߫ ߞߙߍߞߙߍߣߍ߲ ߞߐߡߊߓߌ߲ߓߌ߲߫ ߞߐߕߐ߮ ߕߐ߮ ߞߏ ߘߐ߫.",
+       "fileexists": "ߞߐߕߐ߮ ߡߍ߲ ߟߕߐ߬ ߦߋ߫ ߕߐ߮ ߣߌ߲߬ ߡߊ߬߸ ߏ߬ ߦߋ߫ ߦߋ߲߬ ߞߘߐ߬ߡߊ߲߫߸ ߖߊ߰ߣߌ߲߬ ߌ ߦߋ߫ <strong>[[:$1]]</strong> ߝߛߍ߬ߝߛߍ߬ ߣߌ߫ {{GENDER:|ߌ}} ߘߏ߲߬ ߟߊߣߍ߲߫ ߡߊ߫ ߞߴߊ߬ ߟߊ߫߸ ߣߴߌ ߦߴߊ߬ ߡߊߝߊ߬ߟߋ߲߬ߞߏ ߘߐ߫ [[$1|ߞߝߊ߬ߟߋ߲ߛߋ߲]]",
        "uploadwarning": "ߟߊ߬ߦߟߍ߬ߟߌ ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ",
        "uploadwarning-text": "ߞߐߕߐ߮ ߘߎ߰ߟߊ߬ߘߐ߫ ߞߊ߲ߛߓߍߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߫ ߖߊ߰ߣߌ߲߬߸ ߞߵߊ߬ ߡߊߝߍߣߍ߲߫ ߕߎ߲߯.",
        "savefile": "ߞߐߕߐ߮ ߟߊߞߎ߲߬ߘߎ߬",
        "lockmanager-notlocked": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ \"$1\" ߟߊߞߊ߬ ߟߊ߫߸ ߊ߬ ߛߐ߰ߣߍ߲߬ ߕߍ߫.",
        "lockmanager-fail-closelock": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ \"$1\" ߞߐߕߐ߮ ߛߐ߰ߣߍ߲ ߘߊߕߎ߲߯ ߠߊ߫.",
        "lockmanager-fail-deletelock": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ \"$1\" ߞߐߕߐ߯ ߛߐ߰ߣߍ߲ ߖߏ߰ߛߌ߬ ߟߊ߫.",
+       "lockmanager-fail-acquirelock": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߛߐ߰ߟߌ ߛߐ߬ߘߐ߲߬ ߠߊ߫  \"$1\" ߞߊ߲߬.",
        "lockmanager-fail-releaselock": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߛߐ߰ߟߌ ߓߐ߫ ߟߊ߫  \"$1\" ߞߊ߲߬.",
        "lockmanager-fail-db-release": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߛߐ߰ߟߌ ߓߐ߫ ߟߊ߫ ߓߟߏߡߟߊߝߊ߲ $1 ߞߊ߲߬.",
        "lockmanager-fail-svr-release": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߛߐ߰ߟߌ ߓߐ߫ ߟߊ߫ ߡߊ߬ߛߐ߬ߟߊ $1 ߞߊ߲߬.",
        "license-header": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߴߌ ߘߐ߫",
        "nolicense": "ߊ߬ ߡߊ߫ ߓߊߕߐ߬ߡߐ߲߬",
        "licenses-edit": "ߕߌ߰ߦߊ ߢߣߊߕߊߟߌ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "license-nopreview": "(ߟߊ߬ߕߎ߲߰ߠߊ߫ ߕߴߦߋ߲߬)",
        "upload_source_file": "(ߌ ߟߊ߫ ߞߐߕߐ߯ ߛߎߥߊ߲ߘߌߣߍ߲ ߠߎ߬ ߞߊ߬ ߝߘߊ߫ ߌ ߟߊ߫ ߕߟߋ߬ߓߊ߮ ߟߊ߫)",
        "listfiles-delete": "ߊ߬ ߖߏ߬ߛߌ߬",
        "listfiles-summary": "ߞߐߜߍ߫ ߓߟߏߡߊߞߊ߬ߣߍ߲ ߣߌ߲߬ ߦߴߌ ߟߊ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߓߍ߯ ߟߋ߬ ߦߌ߬ߘߊ߬ ߟߊ߫",
        "listfiles-userdoesnotexist": "ߟߊ߬ߓߊ߰ߙߊ߬ ߖߊߕߋߘߊ \"$1\" ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲߫ ߕߍ߫.",
        "imgfile": "ߞߐߕߐ߮",
        "listfiles": "ߞߐߕߐ߮ ߛߙߍߘߍ",
+       "listfiles_subpage": "ߊ߬ ߟߊߦߟߍ߬ߣߍ߲߬ ߦߋ߫ $1 ߟߋ߬ ߓߟߏ߫",
        "listfiles_thumb": "ߞߝߊ߬ߟߋ߲ߛߋ߲",
        "listfiles_date": "ߕߎ߬ߡߊ߬ߘߊ",
        "listfiles_name": "ߕߐ߮",
        "sharedupload": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߊ߬ ߣߴߊ߬ ߘߌ߫ ߛߋ߫ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫.",
        "sharedupload-desc-there": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߟߋ߬ ߟߊ߫߸ ߊ߬ ߣߴߊ߬ ߟߊߓߊ߯ߙߊߣߍ߲߫ ߘߌ߫ ߞߍ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫. ߖߊ߰ߣߌ߲߬ ߌ ߦߋ߫ [$2 ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍߟߌ ߞߐߜߍ ߘߐߜߍ߫|ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ߬ ߡߞߊ߬ߝߏ߬ߟߌ߬ ߞߏ ߘߐ߫]",
        "sharedupload-desc-here": "ߘߐ߬ߛߙߋ ߣߌ߲߬ ߦߋ߫ ߦߊ߲߬ ߠߋ߫ $1 ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߮ ߕߐ߭ ߟߎ߬ ߞߏ߬ߣߌ߲ ߘߌ߫ ߛߴߊ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫. ߊ߬ ߕߐ߯ ߛߓߍߟߌ ߦߙߐ [$2 ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍߟߌ ߞߐߜߍ] ߟߋ߬ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫ ߣߌ߲߬.",
+       "sharedupload-desc-edit": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߟߋ߬ ߟߊ߫߸ ߊ߬ ߘߏ߲߬ ߠߊߓߊ߯ߙߊߣߍ߲߫ ߘߌ߫ ߞߍ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫.\nߕߎ߬ߡߊ߬ߘߐ߫ ߌ ߘߌ߫ ߞߴߊ߬ ߝߍ߬ ߞߴߊ߬ ߞߊ߲߬ߛߓߍߟߌ ߡߊߦߟߍ߬ߡߊ߲߫ ߊ߬ [$2 ߞߐߜߍ ߞߊ߲߬ߛߓߍ߬ߟߌ߬ ߞߐߜߍ] ߘߐ߫.",
+       "sharedupload-desc-create": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߟߋ߬ ߟߊ߫߸ ߊ߬ ߘߏ߲߬ ߠߊߓߊ߯ߙߊߣߍ߲߫ ߘߌ߫ ߞߍ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫.\nߕߎ߬ߡߊ߬ߘߐ߫ ߌ ߘߌ߫ ߞߴߊ߬ ߝߍ߫ ߞߴߊ߬ ߞߊ߲߬ߛߓߍߟߌ ߡߊߦߟߍ߬ߡߊ߲߫ ߊ߬ [$2 ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍ߬ߟߌ߬ ߞߐߜߍ] ߘߐ߫",
        "filepage-nofile": "ߕߐ߮ ߣߌ߲߬ ߞߐߕߐ߯ ߛߎ߯ ߕߍ߫ ߦߋ߲߬",
+       "filepage-nofile-link": "ߞߐߕߐ߯ ߛߌ߫ ߕߍ߫ ߕߐ߮ ߣߌ߲߬ ߠߊ߫߸ ߞߏ߬ߣߌ߲߬ ߌ ߘߌ߫ ߛߋ߫ [ߊ߬ $1 ߟߊߦߟߍ߬ ߟߊ߫]",
        "uploadnewversion-linktext": "ߞߐߕߐ߮ ߣߌ߲߬ ߛߎ߯ߦߊ߫ ߞߎߘߊ߫ ߟߊߦߟߍ߬",
        "shared-repo-from": "ߞߊ߬ ߝߘߊ߫: $1",
+       "shared-repo": "ߟߊ߬ߖߍ߲߬ߛߍ߲߬ߣߍ߲ ߠߎ߬ ߝߊ߲",
        "upload-disallowed-here": "ߌ ߕߍߣߊ߬ ߞߐߜߍ ߣߌ߲߬ ߞߊ߲߬ߛߓߍ߫ ߟߊ߫.",
        "filerevert": "ߌ ߞߐߛߊ߬ߦߌ߬ $1",
        "filerevert-legend": "ߞߐߕߐ߯ ߟߊߛߊ߬ߦߌ߲߬ߣߍ߲",
index dc8c3a7..afbfd94 100644 (file)
        "listfiles-userdoesnotexist": "This message is displayed on [[Special:ListFiles]] when a invalid username is entered.",
        "imgfile": "{{Identical|File}}",
        "listfiles": "Page title and grouping label for the form displayed on [[Special:ListFiles]].\n{{Identical|List}}",
-       "listfiles_subpage": "Page title and grouping label for the form displayed on [[Special:ListFiles]].\n{{Identical|List}} when a username is selected. Parameters:\n * $1 - username",
+       "listfiles_subpage": "Page title and grouping label for the form displayed on [[Special:ListFiles]].\n\nParameters:\n* $1 - username\n\n{{Identical|List}} when a username is selected.",
        "listfiles_thumb": "{{Identical|Thumbnail}}",
        "listfiles_date": "Column header for the result table displayed on [[Special:ListFiles]].\n{{Identical|Date}}",
        "listfiles_name": "Column header for the result table displayed on [[Special:ListFiles]].\n{{Identical|Name}}",
index 819ee94..6cc866d 100644 (file)
        "userinvalidconfigtitle": "<strong>Avertizare:</strong> Nu există skinul „$1”.\nPaginile .css, .json și .js specifice utilizatorilor au titluri care încep cu literă mică; de exemplu {{ns:user}}:Foo/vector.css în loc de {{ns:user}}:Foo/Vector.css.",
        "updated": "(Actualizat)",
        "note": "'''Notă:'''",
-       "previewnote": "'''Țineți cont că aceasta este doar o previzualizare.'''\nModificările dumneavoastră nu au fost încă salvate!",
+       "previewnote": "<strong>Țineți cont că aceasta este doar o previzualizare.</strong>\nModificările dumneavoastră nu au fost încă salvate!",
        "continue-editing": "Mergi la zona de editare",
        "previewconflict": "Această pre-vizualizare reflectă textul din caseta de sus, respectiv felul în care va arăta articolul dacă alegeți să-l salvați acum.",
        "session_fail_preview": "Ne pare rău! Nu am putut procesa modificarea dumneavoastră din cauza pierderii datelor sesiunii.\n\nEste posibil să vă fi deconectat. <strong>Vă rugăm să verificați dacă sunteți încă conectat și să încercați din nou</strong>.\nDacă tot nu funcționează, încercați să [[Special:UserLogout|închideți sesiunea]] și să vă autentificați din nou. Verificați și dacă navigatorul dumneavoastră permite module cookie de la acest site.",
index 00e8f05..59c63b7 100644 (file)
@@ -34,7 +34,7 @@
        "tog-watchrollback": "Aggiunge le pàggene addò agghie fatte 'n'annullamende jndr'à l'elenghe de le pàggene condrollate",
        "tog-minordefault": "Pe convenzione signe tutte le cangiaminde cumme stuédeche",
        "tog-previewontop": "Fa vedè l'andeprime apprime d'a caselle de le cangiaminde",
-       "tog-previewonfirst": "Fà vedè l'andeprime sus a 'u prime cangiamende",
+       "tog-previewonfirst": "Fà 'ndrucà l'andeprime sus a 'u prime cangiamende",
        "tog-enotifwatchlistpages": "Manneme 'na mail quanne 'a pàgene ca stoche a condrolle ha cangiate",
        "tog-enotifusertalkpages": "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangiate",
        "tog-enotifminoredits": "Manneme 'na mail quanne onne state fatte cangiaminde stuèdeche sus a le pàggene",
@@ -54,7 +54,7 @@
        "tog-watchlisthidepatrolled": "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
        "tog-watchlisthidecategorization": "Scunne 'a categorizzazzione d'a vôsce",
        "tog-ccmeonemails": "Manneme 'na copie de le mail ca je manne a l'ôtre utinde",
-       "tog-diffonly": "No fà vedè le pàggene cu le condenute sotte a le differenze",
+       "tog-diffonly": "No fà 'ndrucà le pàggene cu le condenute sotte a le differenze",
        "tog-showhiddencats": "Fa vedè le categorije scunnute",
        "tog-norollbackdiff": "Non sce penzanne a le differenze apprisse l'esecuzione de 'nu rollback",
        "tog-useeditwarning": "Avvisave quanne jie lasse 'na pàgene cangiate senze ca agghie sarvate le cangiaminde",
        "viewsourcelink": "vide 'u sorgende",
        "editsectionhint": "Cange 'a sezione: $1",
        "toc": "Condenute",
-       "showtoc": "fà vedè",
+       "showtoc": "fà 'ndrucà",
        "hidetoc": "scunne",
        "collapsible-collapse": "Scunne",
        "collapsible-expand": "Spanne",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oggette vacande",
        "content-json-empty-array": "Matrice vacande",
+       "unsupported-content-model": "<strong>Attenziò:</strong> 'u modelle de condenute $1 non g'è supportate jndr'à sta uicchi.",
        "unsupported-content-diff": "Le differenze non ge sò supportate pu modelle de condenute $1.",
+       "unsupported-content-diff2": "Le differenze 'mbrà le modelle de condenute $1 e $2 non ge sò supportate sus a sta uicchi.",
        "deprecated-self-close-category": "Lè pàggene ca ausane le tag HTML auto-achiuse invalide",
        "duplicate-args-warning": "<strong>Attenziò:</strong> [[:$1]] ste chiame [[:$2]] cu cchiù de 'nu valore pu parametre \"$3\". Sulamende l'urteme valore date avène ausate.",
        "duplicate-args-category": "Pàggene ca ausane le argumende a doppie jndr'à le chiamate d'u template",
        "rev-deleted-diff-view": "Une de le revisiune de sta differenze ha state '''scangellate'''.\nTu puè vedè ste differenze; pò essere ca stonne cchiù 'mbormaziune jndr'à l'[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} archivie de le scangellaminde].",
        "rev-suppressed-diff-view": "Une de le revisiune de sta differenze ha state '''soppresse'''.\nTu puè vedè ste differenze; pò essere ca stonne cchiù 'mbormaziune jndr'à l'[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} archivie de le soppressiune].",
        "rev-delundel": "fa vedè/scunne",
-       "rev-showdeleted": "fà vedè",
+       "rev-showdeleted": "fà 'ndrucà",
        "revisiondelete": "Scangille/Repristine revisiune",
        "revdelete-nooldid-title": "Revisione de destinazione invalida",
        "revdelete-nooldid-text": "Tu non g'è specificate 'na revisione de arrive pe abbilità sta funzione, o a specifica revisione non g'esiste oppure tu stè pruève a scunnè 'a revisiona corrende.",
        "mergehistory-into": "Pàgene de destinazione:",
        "mergehistory-list": "cangiamende d'a storie scuagghiabbele",
        "mergehistory-merge": "Le seguende revisiune de [[:$1]] ponne essere scuagghiate jndr'à [[:$2]].\nAuse 'a coulonne cu le radio buttone pe scacchià de scuagghià le revisiune ccrejate apprime de n'nu certe mumende.\nVide Bbuene ca ausanne le collegaminde de navigazzione sta culonne avène azzerate.",
-       "mergehistory-go": "Fà vedè le cangiaminde ca se ponne squagghià 'nzieme",
+       "mergehistory-go": "Fà 'ndrucà le cangiaminde ca se ponne squagghià 'nzieme",
        "mergehistory-submit": "Scuagghije 'nzieme le revisiune",
        "mergehistory-empty": "Nisciuna revisione pò essere scuagghiate.",
        "mergehistory-done": "$3 {{PLURAL:$3|revisione|revisiune}} de $1 {{PLURAL:$3|ha|onne}} state scuagghiate jndr'à [[:$2]].",
        "difference-multipage": "(Differenze 'mbrà le pàggene)",
        "lineno": "Linea $1:",
        "compareselectedversions": "Combronde le versiune selezionete",
-       "showhideselectedversions": "Fà vedè/scunne le revisiune selezionate",
+       "showhideselectedversions": "Fà 'ndrucà/scunne le revisiune scacchiate",
        "editundo": "annulle",
        "diff-empty": "(Nisciuna differenze)",
        "diff-multi-sameuser": "({{PLURAL:$1|'Na revisione de mmienze|$1 revisiune de mmienze}} da 'u stesse utende non g'avènene fatte vedè)",
        "next-page": "pàgena successive",
        "prevn-title": "Precedende $1 {{PLURAL:$1|resultete|resultete}}",
        "nextn-title": "Successive $1 {{PLURAL:$1|resultete|resultete}}",
-       "shown-title": "Fà vedè le $1 {{PLURAL:$1|resultete|resultete}} pe pàgene",
+       "shown-title": "Fà 'ndrucà le $1 {{PLURAL:$1|resultate}} pe pàgene",
        "viewprevnext": "Vide ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Stè 'na pàgene nnumenete \"[[$1]]\" sus 'a sta Uicchipèdie'''",
        "searchmenu-new": "<strong>[[:$1|Ccreje]] 'a pàgene \"[[:$1|$1]]\" sus 'a sta Uicchipèdie!</strong> 'Ndruche pure {{PLURAL:$2|0=|'a pàgene acchiate cu 'a ricerca toje.|le resultate acchiate da 'a ricerche.}}",
        "prefs-editwatchlist-edit": "'Ndruche e live le titole da l'elenghe de le pàggene condrollate",
        "prefs-editwatchlist-raw": "Cange 'a liste de le pàggene condrollate grezze",
        "prefs-editwatchlist-clear": "Sdevache l'elenghe de le pàggene condrollate tune",
-       "prefs-watchlist-days": "Giurne da fà vedè jndr'à liste de le pàggene condrollete:",
+       "prefs-watchlist-days": "Sciurne da fà 'ndrucà jndr'à l'elenghe de le pàggene condrollate:",
        "prefs-watchlist-days-max": "Massime $1 {{PLURAL:$1|sciurne|sciurne}}",
        "prefs-watchlist-edits": "Numere massime de cangiaminde ca se ponne fa 'ndrucà jndr'à l'lenghe de le pàggene condrollate:",
        "prefs-watchlist-edits-max": "Numere massime: 1000",
        "stub-threshold": "Soglie pe collegamende stub de formattazione ($1):",
        "stub-threshold-sample-link": "esembie",
        "stub-threshold-disabled": "Disabbilitate",
-       "recentchangesdays": "Sciurne da fà vedè jndr'à le cangiaminde recende:",
+       "recentchangesdays": "Sciurne da fà 'ndrucà jndr'à le cangiaminde recende:",
        "recentchangesdays-max": "(massime $1 {{PLURAL:$1|sciurne|sciurne}})",
-       "recentchangescount": "Numere de cangiaminde da fà vedè pe default:",
+       "recentchangescount": "Numere de cangiaminde da fà 'ndrucà pe default:",
        "prefs-help-recentchangescount": "Numere massime: 1000",
        "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.\nCe è abbesogne, [[Special:ResetTokens|'u puè azzerà]].",
        "savedprefs": "Le preferenze tue onne state aggiornete.",
        "yourrealname": "Nome vere:",
        "yourlanguage": "Lènga:",
        "yourvariant": "Variande d'u condenute d'a lènghe:",
-       "prefs-help-variant": "Tu preferisce variande o ortografije da fà vedè le vôsce de sta uicchi.",
+       "prefs-help-variant": "Tu preferisce variande o ortografije da fà 'ndrucà le vôsce de sta uicchi.",
        "yournick": "Firma toje:",
        "prefs-help-signature": "Le commende sus a le pàggene de le 'ngazzaminde avessere a essere sgnate cu \"<nowiki>~~~~</nowiki>\" ca pò avène convertite cu 'a firma toje e l'orarie.",
        "badsig": "'A firme grezze jè sbagliete.\nCondrolle le tag HTML.",
        "prefs-advancedrendering": "Opzione avanzate",
        "prefs-advancedsearchoptions": "Opzione avanzate",
        "prefs-advancedwatchlist": "Opzione avanzate",
-       "prefs-displayrc": "Fà vedè l'opzione",
-       "prefs-displaywatchlist": "Fà vedè l'opzione",
+       "prefs-displayrc": "Fà 'ndrucà l'opzione",
+       "prefs-displaywatchlist": "Fà 'ndrucà l'opzione",
        "prefs-changesrc": "Cangiaminde fatte 'ndrucà",
        "prefs-changeswatchlist": "Cangiaminde fatte 'ndrucà",
        "prefs-pageswatchlist": "Pàggene ca ste condrolle",
        "rcfilters-allcontents-label": "Tutte le condenute",
        "rcfilters-alldiscussions-label": "Tutte le 'ngazzaminde",
        "rcnotefrom": "Sotte {{PLURAL:$5|ste 'u cangiamende|stonne le cangiaminde}} da <strong>$3, $4</strong> ('nzigne a <strong>$1</strong> fatte vedè).",
-       "rclistfrom": "Fà vedè le urteme cangiaminde partenne da $3 $2",
+       "rclistfrom": "Fà 'ndrucà le urteme cangiaminde partenne da $2, $3",
        "rcshowhideminor": "$1 cangiaminde stuèdeche",
-       "rcshowhideminor-show": "Fà vedè",
+       "rcshowhideminor-show": "Fà 'ndrucà",
        "rcshowhideminor-hide": "Scunne",
        "rcshowhidebots": "$1 bot",
-       "rcshowhidebots-show": "Fà vedè",
+       "rcshowhidebots-show": "Fà 'ndrucà",
        "rcshowhidebots-hide": "Scunne",
        "rcshowhideliu": "$1 utinde reggistrate",
-       "rcshowhideliu-show": "Fà vedè",
+       "rcshowhideliu-show": "Fà 'ndrucà",
        "rcshowhideliu-hide": "Scunne",
        "rcshowhideanons": "$1 utende scanusciute",
-       "rcshowhideanons-show": "Fà vedè",
+       "rcshowhideanons-show": "Fà 'ndrucà",
        "rcshowhideanons-hide": "Scunne",
        "rcshowhidepatr": "$1 cangiaminde condrollete",
-       "rcshowhidepatr-show": "Fà vedè",
+       "rcshowhidepatr-show": "Fà 'ndrucà",
        "rcshowhidepatr-hide": "Scunne",
        "rcshowhidemine": "$1 cangiaminde mie",
-       "rcshowhidemine-show": "Fà vedè",
+       "rcshowhidemine-show": "Fà 'ndrucà",
        "rcshowhidemine-hide": "Scunne",
        "rcshowhidecategorization": "$1 categorizzazzione d'a pàgene",
        "rcshowhidecategorization-show": "Fà 'ndrucà",
        "diff": "diff",
        "hist": "cunde",
        "hide": "Scunne",
-       "show": "Fà vedè",
+       "show": "Fà 'ndrucà",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} apprisse 'u cangiamende",
        "newsectionsummary": "/* $1 */ seziona nove",
-       "rc-enhanced-expand": "Fà vedè le dettaglie",
+       "rc-enhanced-expand": "Fà 'ndrucà le dettaglie",
        "rc-enhanced-hide": "Scunne le dettaglie",
        "rc-old-title": "origgenariamende ccreajate cumme \"$1\"",
        "recentchangeslinked": "Cangiaminde culleghete",
        "pageswithprop-prophidden-long": "valore d'a probbietà d'u teste lunghe scunnute ($1)",
        "pageswithprop-prophidden-binary": "valore probbietà binarie scunnute ($1)",
        "doubleredirects": "Ridirezionaminde a doppie",
-       "doubleredirectstext": "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.\nOgne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà vedè addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà.\nLe situaziune de <del>ingrocie</del> onne state resolte.",
+       "doubleredirectstext": "Sta pàgene elenghe le pàggene ca se ridirezionane sus a otre pàggene de ridirezionaminde.\nOgne righe condene 'nu collegamende a 'u prime e a 'u seconde ridirezionamende pe fà 'ndrucà addò arrive 'u seconde ridirezionamende, 'u quale jè normalmende 'a pàgena de destinaziona \"rèale\", addò 'u prime ridirezionamende avesse appondà.\nLe situaziune de <del>ingrocie</del> onne state resolte.",
        "double-redirect-fixed-move": "[[$1]] ha state spustate.\nAvène aggiornate automaticamende e mò s'avène redirette a [[$2]].",
        "double-redirect-fixed-maintenance": "Aggiuste le doppie redirezionaminde da [[$1]] a [[$2]] jndr'à 'na fatije de manutenzione",
        "double-redirect-fixer": "Correttore de redirezionaminde",
        "withoutinterwiki": "Pàggene senza collegaminde a otre Uicchi",
        "withoutinterwiki-summary": "Le pàggene seguende non ge sonde collegate a nisciuna otra versione de lènghe diverse.",
        "withoutinterwiki-legend": "Prefisse",
-       "withoutinterwiki-submit": "Fà vedè",
+       "withoutinterwiki-submit": "Fà 'ndrucà",
        "fewestrevisions": "Pàggene cu mene cangiaminde",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|categorije|categorije}}",
        "protectedtitlesempty": "Nisciune titele jè pe mò prutette cu ste parametre.",
        "protectedtitles-submit": "Fà 'ndrucà le titole",
        "listusers": "Liste de l'utende",
-       "listusers-editsonly": "Fà vedè sulamende l'utinde cu cangiaminde fatte",
+       "listusers-editsonly": "Fà 'ndrucà sulamende l'utinde cu cangiaminde fatte",
        "listusers-temporarygroupsonly": "Fà 'ndrucà sulamende le utinde jndr'à le gruppe de utinde temboranèe",
        "listusers-creationsort": "Arrenghete pe date de ccreazione",
        "listusers-desc": "Arranghe jndr'à 'n'ordine ca scenne",
        "alllogstext": "Visualizzazione combinate de tutte le archivije disponibbele sus a {{SITENAME}}.\nTu puè restringere 'a viste selezionanne 'u tipe de archivije, 'u nome utende (senzibbile a le maiuscole), o le pàggene coinvolte (pure chiste senzibbile a le maiuscole).",
        "logempty": "Non ge stè 'n'anema de priatorie jndr'à l'archivije.",
        "log-title-wildcard": "Cirche le titele ca accumenzene cu stu teste",
-       "showhideselectedlogentries": "Fà vedè/scunne le righe scacchiate de l'archivije",
+       "showhideselectedlogentries": "Fà 'ndrucà/scunne le righe scacchiate de l'archivije",
        "log-edit-tags": "Cange le tag de 'na vôsce de l'archivije scacchiate",
        "checkbox-select": "Scacchie: $1",
        "checkbox-all": "Tutte",
        "allpages": "Tutte le pàggene",
        "nextpage": "Pàgene apprisse ($1)",
        "prevpage": "Pàgene apprime ($1)",
-       "allpagesfrom": "Fà vedè le pàggene partenne da:",
-       "allpagesto": "Fà vedè pàggene ca spiccene 'u:",
+       "allpagesfrom": "Fà 'ndrucà le pàggene partenne da:",
+       "allpagesto": "Fà 'ndrucà pàggene ca spiccene 'u:",
        "allarticles": "Tutte le pàggene",
        "allinnamespace": "Tutte le pàggene (neimspeise $1)",
        "allpagessubmit": "Veje",
        "categories": "Le Categorije",
        "categories-submit": "Fà 'ndrucà",
        "categoriespagetext": "{{PLURAL:$1|'A seguende categorije tène|Le seguende categorije tènene}} pàggene o media.\n'Ndruche pure [[Special:WantedCategories|Categorije cercate]].",
-       "categoriesfrom": "Fà vedè le categorije partenne da:",
+       "categoriesfrom": "Fà 'ndrucà le categorije partenne da:",
        "deletedcontributions": "Condrebbute de l'utende scangellete",
        "deletedcontributions-title": "Condrebbute de l'utende scangellate",
        "sp-deletedcontributions-contribs": "condrebbute",
        "linksearch-text": "Le wildcard cumme a \"*.wikipedia.org\" ponne essere ausate.<br />\nOnne abbesogne almene de 'nu dominie de levèlle ierte, pe esembie \"*.org\". <br />\n{{PLURAL:$2|Protocolle}} supportate: $1 ('u valore de base jè http:// ce 'u protocolle non g'è specificate).",
        "linksearch-line": "$1 jè pundete da $2",
        "linksearch-error": "Le wildcard ponne essere ausate sulamende a l'inzie de l'hostname.",
-       "listusersfrom": "Fà vedè l'utinde partenne da:",
+       "listusersfrom": "Fà 'ndrucà l'utinde partenne da:",
        "listusers-submit": "Fa vedè",
        "listusers-noresult": "Nisciune utende acchiete.",
        "listusers-blocked": "(bloccate)",
        "activeusers": "Liste de l'utinde attive",
        "activeusers-intro": "Queste jè 'n'elenghe de utinde ca avene fatte certe tipe de attività fine a l'urteme $1 {{PLURAL:$1|sciurne|sciurne}}.",
        "activeusers-count": "$1 {{PLURAL:$1|cangiamende|cangiaminde}} jndr'à l'urteme {{PLURAL:$3|sciurne}}",
-       "activeusers-from": "Fà vedè l'utinde partenne da:",
+       "activeusers-from": "Fà 'ndrucà l'utinde partenne da:",
        "activeusers-noresult": "Nisciune utende acchiate.",
        "listgrouprights": "Deritte de le gruppe utinde",
        "listgrouprights-summary": "'A liste ca ste vide ète 'na liste de le gruppe utinde ccreiate sus a sta Uicchi, cu le lore deritte d'accesse associate.\nPonne stà [[{{MediaWiki:Listgrouprights-helppage}}|'mbormaziune de cchiù]] sus a le deritte individuale.",
        "wlshowhidemine": "cangiaminde mie",
        "wlshowhidecategorization": "categorizzazzione d'a pàgene",
        "watchlist-options": "Opzione d'a liste de le pàggene condrollete",
-       "watching": "Fà vedè...",
-       "unwatching": "No fà vedè...",
+       "watching": "Fà 'ndrucà...",
+       "unwatching": "No fà 'ndrucà...",
        "watcherrortext": "'N'errore s'a verificate quanne ste cangiave le 'mbostaziune de le pàggene condrollate pe \"$1\".",
        "enotif_reset": "Signe tutte le pàggene cumme visitete",
        "enotif_impersonal_salutation": "Utende de {{SITENAME}}",
        "undelete-header": "Vide [[Special:Log/delete|l'archivije de le scangellaminde]] pe l'urteme pàggene scangellete.",
        "undelete-search-title": "Cirche le pàggene scangellate",
        "undelete-search-box": "Cirche le pàggene scangellete",
-       "undelete-search-prefix": "Fà vedè le pàggene ca accumenzene cu:",
+       "undelete-search-prefix": "Fà 'ndrucà le pàggene ca accumenzene cu:",
        "undelete-search-submit": "Cirche",
        "undelete-no-results": "Non ge stonne pàggene acchiate jndr'à l'archivije de le scangellaminde.",
        "undelete-filename-mismatch": "Non ge pozze repristinà 'a revisione d'u file cu orarie $1: nome d'u file errate",
        "sp-contributions-search": "Ricerche pe condrebbute",
        "sp-contributions-username": "Indirizze IP o nome de l'utende:",
        "sp-contributions-toponly": "Sulamende facenne vedè le cangiaminde de l'urteme revisiune",
-       "sp-contributions-newonly": "Fà vedè sulamende le cangiaminde ca onne ccrejate 'a pàgene",
+       "sp-contributions-newonly": "Fà 'ndrucà sulamende le cangiaminde ca onne ccrejate 'a pàgene",
        "sp-contributions-hideminor": "Scunne le cangiaminde stuèdeche",
        "sp-contributions-submit": "Cirche",
        "whatlinkshere": "Appondene aqquà",
        "thumbnail_image-type": "Tipe de immaggine non supportate",
        "thumbnail_gd-library": "Configurazione d'a libbrerie GD ingomblete: funziona perse $1",
        "thumbnail_image-missing": "'U file pare ca non ge se iacchie: $1",
-       "thumbnail_image-failure-limit": "Onne state fatte 'nu sacche de tendative ($1 o de cchiù) pe fà vedè sta miniature. Pe piacere pruéve cchiù tarde.",
+       "thumbnail_image-failure-limit": "Onne state fatte 'nu sacche de tendative ($1 o de cchiù) pe fà 'ndrucà sta miniature. Pe piacere pruéve cchiù tarde.",
        "import": "Pàggene 'mbortete",
        "importinterwiki": "'Mborte da 'n'otra uicchi",
        "import-interwiki-text": "Schacchie 'na Uicchi e 'nu titole de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
        "tooltip-ca-nstab-project": "Vide 'a pàgene d'u proggette",
        "tooltip-ca-nstab-image": "Vide 'a pàgene d'u fail",
        "tooltip-ca-nstab-mediawiki": "Vide le messàgge d'u sisteme",
-       "tooltip-ca-nstab-template": "Fà vedè 'u template",
+       "tooltip-ca-nstab-template": "Fà 'ndrucà 'u template",
        "tooltip-ca-nstab-help": "Vide 'a pàgene d'ajute",
        "tooltip-ca-nstab-category": "Vide a pàgene de le categorije",
        "tooltip-minoredit": "Signe cumme a 'nu cangiaminde stuèdeche",
        "tooltip-save": "Reggistre le cangiaminde ca è fatte",
        "tooltip-publish": "Pubbleche le cangiaminde tune",
        "tooltip-preview": "Fà l'andeprime de le cangiaminde ca ste face. Pe piacere falle prima cu reggistre 'a vôsce!",
-       "tooltip-diff": "Fà vedè ce cangiaminde e fatte a 'u teste.",
+       "tooltip-diff": "Fà 'ndrucà ce cangiaminde e fatte a 'u teste.",
        "tooltip-compareselectedversions": "Vide le differenze 'mbrà le doje versiune selezionete de sta pàgene.",
        "tooltip-watch": "Mitte sta pàgene jndr'à liste de le pàggene condrollete",
        "tooltip-watchlistedit-normal-submit": "Live le titele",
        "pageinfo-header-edits": "Cunde de le cangiaminde",
        "pageinfo-header-restrictions": "Protezione d'a pàgene",
        "pageinfo-header-properties": "Probbietà d'a pàgene",
-       "pageinfo-display-title": "Fà vedè 'u titole",
+       "pageinfo-display-title": "Fà 'ndrucà 'u titole",
        "pageinfo-default-sort": "Chiave de ordenamende de base",
        "pageinfo-length": "Lunghezze d'a pàgene (in byte)",
        "pageinfo-namespace": "Namespace",
        "newimages-legend": "Filtre",
        "newimages-label": "Nome d'u fail (o 'nu stuezze de jidde):",
        "newimages-user": "Indirizze IP o nome de l'utende",
-       "newimages-showbots": "Fà vedè le scarecaminde da bot",
+       "newimages-showbots": "Fà 'ndrucà le scarecaminde da bot",
        "newimages-hidepatrolled": "Scunne le carecaminde condrollate",
        "newimages-mediatype": "Tipe de media:",
        "noimages": "Non ge stè ninde da vedè.",
        "watchlistedit-clear-submit": "Sdevache l'elenghe de le pàggene condrollate (Quiste jè permanende)",
        "watchlistedit-clear-done": "L'elenghe de le pàggene condrollate ha state sdevacate.",
        "watchlistedit-clear-removed": "{{PLURAL:$1|1 titole ha state|$1 titole onne state}} luate:",
-       "watchlistedit-too-many": "Stonne troppe pàggene da fà vedè aqquà.",
+       "watchlistedit-too-many": "Stonne troppe pàggene da fà 'ndrucà aqquà.",
        "watchlisttools-clear": "Sdevache l'elenghe de le pàggene condrollate",
        "watchlisttools-view": "Vide le cangiaminde 'mbortande",
        "watchlisttools-edit": "Vide e cange le pàggene condrollete",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Live le commende",
        "expand_templates_remove_nowiki": "No fà vede le tag <nowiki> jndr'à 'u resultate",
-       "expand_templates_generate_xml": "Fà vedè l'arvule de l'analisi XML",
-       "expand_templates_generate_rawhtml": "Fà vedè l'HTML grezze",
+       "expand_templates_generate_xml": "Fà 'ndrucà l'arvule de l'analisi XML",
+       "expand_templates_generate_rawhtml": "Fà 'ndrucà  l'HTML grezze",
        "expand_templates_preview": "Andeprime",
        "expand_templates_preview_fail_html": "<em>Purcé {{SITENAME}} téne abbilitate l'HTML grezze e stavane 'nu sbuénne de date de sessione perdute, l'andeprime avène scunnute pe precauzione condre a attacche JavaScript.</em>\n\n<strong>Ce quiste jè 'nu tendative de andeprime leggittime, pe piacere pruéve arrete.</strong>\nCe angore non ge funzione, pruéve a [[Special:UserLogout|assè]] e trasè arrete e verifiche ca 'u browser tune face ausà le cookie da stu site.",
        "expand_templates_preview_fail_html_anon": "<em>Purcé {{SITENAME}} téne abbilitate l'HTML grezze e tu non g'è trasute, l'andeprime avène scunnute pe precauzione condre a attacche JavaScript.</em>\n\n<strong>Ce quiste jè 'nu tendative de andeprime leggittime, [[Special:UserLogin|tràse]] e pruéve arrete.</strong>",
index c9990ed..d3475a5 100644 (file)
                        "ЛингвоЧел",
                        "OlegVeliky",
                        "Saimongoltinio",
-                       "Wikisaurus"
+                       "Wikisaurus",
+                       "Katunchik"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "listfiles-userdoesnotexist": "Учётная запись «$1» не зарегистрирована.",
        "imgfile": "файл",
        "listfiles": "Список файлов",
+       "listfiles_subpage": "Загрузки $1",
        "listfiles_thumb": "Миниатюра",
        "listfiles_date": "Дата",
        "listfiles_name": "Имя файла",
        "ipblocklist-legend": "Поиск заблокированного участника",
        "blocklist-userblocks": "Скрыть блокировки учётных записей",
        "blocklist-tempblocks": "Скрыть временные блокировки",
-       "blocklist-indefblocks": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ð½ÐµÐ¾Ð¿Ñ\80еделÑ\91нные блокировки",
+       "blocklist-indefblocks": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ð±ÐµÑ\81Ñ\81Ñ\80оÑ\87ные блокировки",
        "blocklist-addressblocks": "Скрыть блокировки отдельных IP",
        "blocklist-type": "Тип:",
        "blocklist-type-opt-all": "Все",
        "mycustomjsredirectprotected": "У вас нет прав на редактирование этой JavaScript-страницы, так как она является перенаправлением и не указывает внутрь вашего пространства участника.",
        "easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом",
        "unprotected-js": "По соображениям безопасности JavaScript нельзя загружать с незащищённых страниц. Пожалуйста, создавайте скрипты только в пространстве имён MediaWiki: или как подстраницы участника.",
-       "userlogout-continue": "Вы хотите выйти?"
+       "userlogout-continue": "Вы хотите выйти?",
+       "rest-prefix-mismatch": "Запрашиваемый путь ($1) не найден внутри корневого пути REST API ($2)",
+       "rest-wrong-method": "Метод запроса ($1) не был {{{{PLURAL:$3|}}|разрешенным методом для этого пути|одним из разрешенных методов для этого пути}} ($2)",
+       "rest-no-match": "Запрошенный относительный путь ($1) не соответствует ни одному известному обработчику"
 }
index 494b61b..61af209 100644 (file)
        "noarticletext": "ᱱᱮᱛᱚᱜ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟᱨᱮ ᱪᱮᱫᱜᱮ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\nᱮᱴᱟᱜ ᱥᱟᱦᱴᱟᱨᱮᱢ [[Special:Search/{{PAGENAME}}|ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱧᱩᱛᱩᱢ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ᱡᱚᱲᱟᱣᱟᱱ ᱞᱚᱜᱽ ᱠᱚ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱯᱲᱟᱣ ᱢᱮ]</span>.",
        "noarticletext-nopermission": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟᱨᱮ ᱱᱤᱛᱚᱜ ᱪᱮᱫᱜᱮ ᱚᱞ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\n\nᱟᱢ [[Special:Search/{{PAGENAME}}|ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟᱨᱮᱱᱟᱜ ᱧᱤᱛᱩᱢᱮᱢ ᱥᱮᱸᱫᱽᱨᱟ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ]] ᱮᱴᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱚᱨᱮᱦᱚᱸ,\nᱟᱨᱵᱟᱝ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" ᱧᱩᱛᱩᱢᱟᱱ ᱡᱟᱸᱦᱟᱸᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱜ ᱦᱤᱥᱟᱹᱵ ᱠᱷᱟᱛᱷᱟ ᱫᱚ ᱵᱟᱝ ᱨᱮᱥᱴᱨᱤ ᱦᱩᱭ ᱟᱠᱟᱱᱟ᱾\nᱫᱟᱭᱟᱠᱟᱛᱮ ᱵᱤᱰᱟᱹᱣ ᱠᱟᱛᱮᱛ ᱧᱮᱞᱢᱮ ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱵᱮᱱᱟᱣ/ᱥᱟᱯᱲᱟᱣ ᱢᱮᱱᱮᱫ ᱠᱟᱱᱟ ᱥᱮ ᱵᱟᱝ᱾",
-       "userpage-userdoesnotexist-view": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±\9c \"$1\" á±®á± á±\9fᱣᱱᱴ ᱫᱚ ᱵᱟᱝ ᱨᱮᱥᱴᱨᱤ ᱟᱠᱟᱱᱟ᱾",
+       "userpage-userdoesnotexist-view": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±¹ \"$1\" á±®á± á±\9fᱶᱩᱴ ᱫᱚ ᱵᱟᱝ ᱨᱮᱥᱴᱨᱤ ᱟᱠᱟᱱᱟ᱾",
        "blocked-notice-logextract": "ᱱᱩᱭ ᱵᱮᱵᱦᱟᱨᱤᱡ ᱫᱚ ᱱᱮᱛᱚᱜ ᱮ ᱥᱮᱥᱫᱜᱮᱭᱟ᱾\nᱨᱮᱯᱷᱟᱨᱮᱱᱥ ᱞᱟᱹᱜᱤᱛᱛᱮ ᱱᱟᱣᱟᱱᱟᱜ ᱵᱚᱞᱚᱜ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱞᱟᱛᱟᱨᱨᱮ ᱮᱢ ᱦᱩᱭᱱᱟ:",
        "clearyourcache": "<strong>ᱧᱮᱛᱮᱞ:</strong> ᱨᱩᱠᱷᱤᱭᱟᱹ ᱦᱩᱭ ᱠᱟᱛᱮ, ᱟᱢᱟᱜ ᱵᱨᱟᱣᱡᱚᱨ ᱠᱮᱪ ᱵᱟᱭᱯᱟᱥ ᱦᱩᱭᱩᱜ ᱛᱟᱢᱟ ᱚᱫᱚᱞ ᱠᱚ ᱧᱮᱞ ᱞᱟᱹᱜᱤᱫ ᱾\n* <strong>ᱯᱷᱟᱭᱟᱨᱯᱷᱚᱠᱥ / ᱥᱟᱯᱷᱟᱨᱤ:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "updated": "(ᱩᱛᱷᱱᱟᱣ ᱜᱮᱭᱟ)",
        "prefs-skin": "ᱦᱟᱨᱛᱟ",
        "skin-preview": "ᱧᱮᱞ ᱵᱤᱰᱟᱹᱣ",
        "datedefault": "ᱠᱩᱥᱤ ᱵᱟᱹᱱᱩᱜ-ᱟ",
-       "prefs-user-pages": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±\9c ᱥᱟᱦᱴᱟᱠᱚ",
+       "prefs-user-pages": "ᱵᱮᱵᱷá±\9fᱨᱤᱭá±\9fá±¹ ᱥᱟᱦᱴᱟᱠᱚ",
        "prefs-rc": "ᱨᱚᱠᱟ ᱵᱚᱫᱚᱞᱠᱚ",
        "prefs-watchlist": "ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤ",
        "prefs-editwatchlist": "ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤ ᱥᱟᱯᱲᱟᱣ",
        "prefs-editor": "ᱥᱟᱯᱲᱮᱛ",
        "prefs-preview": "ᱧᱮᱞ ᱵᱤᱰᱟᱹᱣ",
        "prefs-diffs": "ᱵᱷᱮᱯᱮᱫ",
-       "userrights": "ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱠᱩ",
+       "userrights": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱜ ᱟᱹᱭᱫᱟᱹᱨᱤ ᱠᱩ",
        "userrights-lookup-user": "ᱢᱤᱫᱴᱮᱱ ᱵᱮᱵᱦᱟᱨᱤ ᱴᱷᱤᱠᱤ ᱢᱮ",
-       "userrights-user-editname": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±\9c á±§á±¤á±\9bᱩᱢ á±µá±\9aá±\9eá±\9aá±­ ᱢᱮ:",
+       "userrights-user-editname": "ᱵᱮᱵᱷá±\9fᱨᱤᱭá±\9fá±\9c á±§á±¤á±\9bᱩᱢ á±\9fᱫᱮᱨ ᱢᱮ:",
        "editusergroup": "ᱵᱮᱵᱦᱟᱨᱤ ᱜᱟᱶᱛᱟᱠᱩ ᱩᱰᱩᱜᱽ ᱢᱮ",
        "userrights-editusergroup": "ᱥᱟᱯᱲᱟᱣ {{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤ}} ᱜᱟᱶᱛᱟᱠᱩ",
        "saveusergroups": "ᱨᱩᱠᱷᱤᱭᱟᱹ {{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤ}} ᱜᱟᱶᱛᱟᱠᱩ",
        "tooltip-namespace_association": "ᱱᱚᱶᱟ ᱵᱟᱠᱥᱟ ᱴᱤᱠ ᱢᱮ ᱨᱚᱯᱚᱲ ᱵᱟᱝᱠᱷᱟᱱ ᱥᱟᱛᱟᱢ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱵᱟᱪᱷᱚᱱ ᱟᱠᱟᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱥᱟᱶ ᱡᱚᱯᱚᱲᱟᱣ ᱟᱠᱟᱱᱟᱜ",
        "blanknamespace": "(ᱢᱩᱬᱩᱛ)",
        "contributions": "{{GENDER:$1|ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱹ}} ᱮᱱᱮᱢᱠᱩ",
-       "contributions-title": "$1 á±µá±®á±µá±¦ᱟᱨᱤᱭᱟᱜ ᱮᱱᱮᱢᱠᱩ",
+       "contributions-title": "$1 á±µá±®á±µá±·ᱟᱨᱤᱭᱟᱜ ᱮᱱᱮᱢᱠᱩ",
        "mycontris": "ᱮᱱᱮᱢᱠᱩ",
        "anoncontribs": "ᱮᱱᱮᱢᱠᱩ",
        "contribsub2": "{{GENDER:$3|$1}} ($2) ᱞᱟᱹᱜᱤᱫ ᱛᱮ",
        "sp-contributions-logs": "ᱛᱟᱞᱟᱠᱩ",
        "sp-contributions-talk": "ᱨᱚᱲ",
        "sp-contributions-search": "ᱮᱱᱮᱢᱠᱩ ᱞᱟᱹᱜᱤᱛ ᱥᱮᱸᱫᱨᱟ",
-       "sp-contributions-username": "IP á±´á±·á±¤á± á±\9fᱹᱱá±\9f á±¥á±® á±µá±®á±µá±¦á±\9fᱨᱤᱭá±\9fá±\9c ᱧᱩᱛᱩᱢ",
+       "sp-contributions-username": "IP á±´á±·á±¤á± á±\9fᱹᱱá±\9f á±¥á±® á±µá±®á±µá±·á±\9fᱨᱤᱭá±\9fá±¹ ᱧᱩᱛᱩᱢ",
        "sp-contributions-toponly": "ᱱᱮᱛᱟᱨ ᱥᱩᱫᱷᱨᱟᱹᱣ ᱠᱚᱨᱮᱭᱟᱜ ᱥᱟᱯᱲᱟᱣ ᱠᱟᱹᱢᱤᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "sp-contributions-newonly": "ᱥᱩᱢᱩᱝ ᱟᱹᱨᱩᱠᱚ ᱥᱚᱫᱚᱨᱢᱮ ᱡᱟᱦᱟᱸ ᱥᱟᱦᱟᱴᱟ ᱫᱚ ᱥᱤᱨᱡᱟᱹᱣᱟᱜ ᱠᱟᱱᱟ",
        "sp-contributions-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "reblock-logentry": "ᱵᱚᱫᱚᱞᱮᱱᱟ ᱵᱚᱸᱫ ᱥᱟᱡᱟᱣᱠᱚ [[$1]] ᱞᱟᱹᱜᱤᱫ ᱪᱟᱵᱟᱜ ᱚᱠᱛᱚ $2 $3 ᱥᱟᱶ",
        "block-log-flags-nocreate": "ᱮᱠᱟᱶᱩᱴ ᱵᱮᱱᱟᱣ ᱵᱚᱸᱫᱽ ᱜᱮᱭᱟ",
        "block-log-flags-noemail": "ᱤᱢᱮᱞ ᱵᱚᱸᱫᱷ ᱜᱮᱭᱟ",
-       "block-log-flags-hiddenname": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±\9c ᱧᱩᱛᱩᱢ ᱩᱠᱩ ᱜᱮᱭᱟ",
+       "block-log-flags-hiddenname": "ᱵᱮᱵᱷá±\9fᱨᱤᱭá±\9fá±¹ ᱧᱩᱛᱩᱢ ᱩᱠᱩ ᱜᱮᱭᱟ",
        "proxyblocker": "ᱯᱨᱚᱠᱥᱤ ᱮᱥᱮᱫᱤᱡ",
        "movepagebtn": "ᱥᱟᱦᱴᱟ ᱩᱪᱟᱹᱲᱢᱮ",
        "pagemovedsub": "ᱚᱪᱟᱜ ᱫᱚ ᱦᱩᱭᱱᱟ",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ᱩᱪᱟᱹᱲᱠᱮᱜ-ᱟᱭ}} ᱥᱟᱦᱴᱟ $3 to $4 ᱢᱚᱦᱰᱟ ᱵᱤᱱ ᱵᱟᱹᱜᱤ ᱠᱟᱛᱮ",
        "logentry-move-move_redir": "ᱥᱟᱦᱴᱟ $3 ᱠᱷᱚᱱ $4 ᱛᱮ $1 {{GENDER:$2|ᱩᱪᱟᱹᱲ ᱠᱮᱫᱼᱟᱭ}} ᱢᱚᱸᱦᱰᱟ ᱥᱟᱶᱛᱮ",
        "logentry-patrol-patrol-auto": "$1 ᱟᱡᱛᱮᱜᱮ {{GENDER:$2|ᱪᱤᱱᱦᱟᱹᱭᱮᱱᱟ}} $4 ᱧᱮᱞᱟᱹᱨᱩ $3 ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱾",
-       "logentry-newusers-create": "ᱵᱮᱵᱦá±\9fᱨᱤᱭá±\9fá±\9c á±¦á±¤á±¥á±\9fᱹᱵ $1 á±«á±\9a {{GENDER:$2|á±\9bᱮᱭá±\9fᱨᱱᱟ}}",
+       "logentry-newusers-create": "ᱵᱮᱵᱷá±\9fᱨᱤᱭá±\9fá±¹ á±®á± á±\9fᱶᱩᱴ $1 á±«á±\9a {{GENDER:$2|á±\9bᱮᱭá±\9fᱨᱮᱱᱟ}}",
        "logentry-newusers-autocreate": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ $1 ᱫᱚ {{GENDER:$2|ᱛᱮᱭᱟᱨᱮᱱᱟ}} ᱟᱡᱛᱮᱜᱮ",
        "logentry-upload-upload": "$1 {{GENDER:$2|ᱞᱟᱫᱮᱭᱮᱱᱟ}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ᱞᱟᱫᱮᱭᱮᱱᱟ}} ᱢᱤᱫ ᱱᱟᱶᱟ ᱵᱷᱟᱨᱥᱚᱱ $3 ᱨᱮᱱᱟᱜ",
index 71b6a90..756ee8a 100644 (file)
        "listfiles-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "imgfile": "datoteka",
        "listfiles": "Spisak slika",
+       "listfiles_subpage": "Postavljene datoteke $1",
        "listfiles_thumb": "Smanjeni pregled",
        "listfiles_date": "Datum",
        "listfiles_name": "Naziv",
index 5e55228..78d9ce7 100644 (file)
@@ -88,6 +88,7 @@
        "tog-norollbackdiff": "Vynechať rozdiel po vykonaní rollbacku",
        "tog-useeditwarning": "Upozorniť ma, keď opúšťam upravovaciu stránku s neuloženými zmenami",
        "tog-prefershttps": "Po prihlásení používať vždy zabezpečené pripojenie",
+       "tog-requireemail": "Pre obnovu hesla vyžadovať e-mail",
        "underline-always": "Vždy",
        "underline-never": "Nikdy",
        "underline-default": "Podľa nastavení prehliadača alebo témy vzhľadu",
        "returnto": "Späť na $1.",
        "tagline": "Z {{GRAMMAR:genitív|{{SITENAME}}}}",
        "help": "Pomoc",
+       "help-mediawiki": "Nápoveda k MediaWiki",
        "search": "Hľadať",
        "search-ignored-headings": " #<!-- tento riadok je nutné nechať bez zmeny --> <pre>\n# Nadpisy, ktoré bude vyhľadávanie ignorovať.\n# Tieto zmenu sa prejavia akonáhle bude stránka s nadpisom zaindexovaná.\n# Reindexovanie stránky môžete vynútiť uložením prázdnej úpravy.\n# Syntax je nasledovná:\n#   * Všetko počínajúc znakom „#“ do konca riadka je komentár.\n#   * Každý neprázdny riadok je presný názov, ktorý má byť ignorovaný, presne ako je napísaný, pričom na veľkosti písmen záleží.\nReferencie\nExterné odkazy\nPozri aj\n #</pre> <!-- tento riadok je nutné nechať bez zmeny -->",
        "searchbutton": "Hľadať",
        "badarticleerror": "Na tejto stránke túto činnosť nemožno vykonať.",
        "cannotdelete": "Nebolo možné zmazať stránku alebo súbor „$1“.\nMožno ju už zmazal nieto iný.",
        "cannotdelete-title": "Nemôžete zmazať stránku „$1“",
+       "delete-scheduled": "Zmazanie stránky „$1“ bolo naplánované.\nBuďte, prosím, trpezliví.",
        "delete-hook-aborted": "Zmazanie zrušila prídavná funkcia (prípojný bod syntaktického analyzátora).\nNeudala vysvetlenie.",
        "no-null-revision": "Nepodarilo sa vytvoriť novú prázdnu revíziu stránky „$1“",
        "badtitle": "Neplatný nadpis",
        "customcssprotected": "Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného používateľa.",
        "customjsonprotected": "Nemáte právo upravovať túto JSON stránku, pretože obsahuje osobné nastavenie iného používateľa.",
        "customjsprotected": "Nemáte právo upravovať túto JavaScript stránku, pretože obsahuje osobné nastavenie iného používateľa.",
+       "sitecssprotected": "Nemáte oprávnenie editovať túto stránku s CSS, pretože to môže mať dopad na všetkých návštevníkov.",
        "mycustomcssprotected": "Nemáte povolenie na úpravu tejto CSS stránky.",
        "mycustomjsonprotected": "Nemáte povolenie na úpravu tejto JSON stránky.",
        "mycustomjsprotected": "Nemáte povolenie na úpravu tejto JavaScriptovej stránky.",
        "createaccountmail": "Použiť dočasné náhodné heslo a poslať ho na uvedenú e-mailovú adresu",
        "createaccountmail-help": "Môže byť použité na vytvorenie účtu pre inú osobu bez prezradenia hesla.",
        "createacct-realname": "Skutočné meno (nepovinné)",
-       "createacct-reason": "Dôvod",
+       "createacct-reason": "Dôvod (verejne zaznamenaný)",
        "createacct-reason-ph": "Prečo si vytvárate ďalší účet",
        "createacct-reason-help": "Správa zobrazená v knihe nových používateľov",
        "createacct-submit": "Vytvoriť si účet",
        "badretype": "Zadané heslá nie sú rovnaké.",
        "usernameinprogress": "Vytváranie účtu s týmto menom už prebieha. Prosím, počkajte.",
        "userexists": "Zadané používateľské meno sa už používa.\nProsím, zvoľte si iné meno.",
+       "createacct-normalization": "Vaše používateľské meno bude z technických dôvodov upravené na „$2“.",
        "loginerror": "Chyba pri prihlasovaní",
        "createacct-error": "Chyba pri vytváraní účtu",
        "createaccounterror": "Nepodarilo sa vytvoriť účet: $1",
        "nosuchusershort": "V súčasnosti neexistuje používateľ s menom „$1“. Skontrolujte preklepy.",
        "nouserspecified": "Musíte uviesť meno používateľa.",
        "login-userblocked": "Tento používateľ je zablokovaný. Nie je mu dovolené prihlásiť sa.",
-       "wrongpassword": "Zadané heslo je nesprávne. Prosím, skúste to znova.",
+       "wrongpassword": "Zadané používateľské meno alebo heslo je nesprávne. Prosím, skúste to znova.",
        "wrongpasswordempty": "Zadané heslo bolo prázdne. Prosím, skúste to znova.",
        "passwordtooshort": "Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.",
        "passwordtoolong": "Heslá nemôžu byť dlhšie než {{PLURAL:$1|1 znak|$1 znaky|$1 znakov}}.",
-       "passwordtoopopular": "Nie je možné použiť priveľmi frekventované heslá. Zvoľte si prosím iné, menej frekventované heslo.",
+       "passwordtoopopular": "Nie je možné použiť priveľmi frekventované heslá. Zvoľte si, prosím, iné heslo, ktoré je zložitejšie uhádnuť.",
+       "passwordinlargeblacklist": "Zadané heslo je uvedené na zozname veľmi často používaných hesiel. Zvoľte si, prosím, unikátnejšie heslo.",
        "password-name-match": "Vaše heslo musí byť iné ako vaše používateľské meno.",
        "password-login-forbidden": "Použitie tohto používateľského mena a hesla bolo zakázané.",
        "mailmypassword": "Obnoviť heslo",
        "resetpass-submit-loggedin": "Zmeniť heslo",
        "resetpass-submit-cancel": "Zrušiť",
        "resetpass-wrong-oldpass": "Neplatné, dočasné alebo aktuálne heslo.\nJe možné, že sa vám už podarilo úspešne zmeniť svoje heslo alebo ste si vyžiadali nové dočasné heslo.",
-       "resetpass-recycled": "Ako nové heslo si prosím nastavte niečo iné než súčasné heslo.",
+       "resetpass-recycled": "Ako nové heslo si, prosím, nastavte niečo iné ako súčasné heslo.",
        "resetpass-temp-emailed": "Prihlasujete sa dočasným heslom, zaslaným e-mailom. Aby ste dokončili prihlásenie, nastavte si tu nové heslo:",
        "resetpass-temp-password": "Dočasné heslo:",
        "resetpass-abort-generic": "Zmena hesla bola zablokovaná rozšírením.",
        "autoblockedtext": "Vaša IP adresa bola automaticky zablokovaná, pretože ju používa iný používateľ, ktorého zablokoval $1.\nUdaný dôvod zablokovania:\n\n:''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nAk potrebujete informácie o blokovaní, môžete kontaktovať $1 alebo niektorého iného\n[[{{MediaWiki:Grouppage-sysop}}|správcu]].\n\nPozn.: Nemôžete použiť funkciu „{{int:emailuser}}“, ak ste si vo svojich\n[[Special:Preferences|používateľských nastaveniach]] nezaregistrovali platnú e-mailovú adresu.\n\nVaša aktuálna IP adresa je $3. ID vášho blokovania je $5.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "systemblockedtext": "Vaša IP adresa bola automaticky zablokovaná.\nUdaný dôvod zablokovania:\n\n:<em>$2</em>\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nVaša aktuálna IP adresa je $3.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "blockednoreason": "nebol uvedený dôvod",
+       "blockedtext-composite-no-ids": "Vaša IP adresa sa objavuje na niekoľkých čiernych listinách",
+       "blockedtext-composite-reason": "Na váš účet a/alebo vašu IP adresu sa vzťahuje viac blokovaní.",
        "whitelistedittext": "Aby ste mohli upravovať stránky, musíte sa $1",
        "confirmedittext": "Pred úpravami stránok musíte potvrdiť vašu e-mailovú adresu. Prosím, nastavte a overte svoju e-mailovú adresu v [[Special:Preferences|používateľských nastaveniach]].",
        "nosuchsectiontitle": "Sekcia nebola nájdená",
        "nocreate-loggedin": "Nemáte povolenie vytvárať nové stránky.",
        "sectioneditnotsupported-title": "Úprava sekcie nie je podporovaná",
        "sectioneditnotsupported-text": "Táto stránka úprav nepodporuje úpravu sekcie.",
+       "modeleditnotsupported-title": "Editácia nie je podporovaná",
        "permissionserrors": "Chyba oprávnenia",
        "permissionserrorstext": "Na to nemáte povolenie z {{PLURAL:$1|nasledujúceho dôvodu|nasledujúcich dôvodov}}:",
        "permissionserrorstext-withaction": "Nemáte oprávnenie $2 z {{PLURAL:$1|nasledovného dôvodu|nasledovných dôvodov}}:",
        "postedit-confirmation-created": "Stránka bola vytvorená.",
        "postedit-confirmation-restored": "Stránka bola obnovená.",
        "postedit-confirmation-saved": "Vaša úprava bola uložená.",
+       "postedit-confirmation-published": "Vaša úprava bola zverejnená.",
        "edit-already-exists": "Nebolo možné vytvoriť novú stránku.\nUž existuje.",
        "defaultmessagetext": "Predvolený text správy",
        "content-failed-to-parse": "Nepodarilo sa spracovať obsah $2 pre model $1: $3",
        "search-file-match": "(výskyt v obsahu súboru)",
        "search-suggest": "Mali ste na mysli „$1“?",
        "search-rewritten": "Zobrazujú sa výsledky pre $1. Vyhľadať namiesto toho $2.",
-       "search-interwiki-caption": "Sesterské projekty",
+       "search-interwiki-caption": "Výsledky zo sesterských projektov",
        "search-interwiki-default": "Výsledky z $1:",
        "search-interwiki-more": "(viac)",
        "search-interwiki-more-results": "ďalšie výsledky",
        "prefs-advancedwatchlist": "Rozšírené možnosti",
        "prefs-displayrc": "Možnosti zobrazenia",
        "prefs-displaywatchlist": "Možnosti zobrazenia",
+       "prefs-changesrc": "Zobrazené zmeny",
        "prefs-changeswatchlist": "Zobrazené zmeny",
        "prefs-pageswatchlist": "Sledované stránky",
        "prefs-tokenwatchlist": "Kľúč",
        "prefs-help-prefershttps": "Táto voľba sa prejaví pri vašom ďalšom prihlásení.",
        "prefswarning-warning": "Vykonali ste zmeny v nastaveniach, ktoré zatiaľ nie sú uložené. Ak túto stránku opustíte bez kliknutia na „$1“, vaše nastavenia sa neaktualizujú.",
        "prefs-tabs-navigation-hint": "Tip: prepínať medzi záložkami môžete aj pomocou šípok vľavo a vpravo.",
-       "userrights": "Spravovanie používateľských práv",
-       "userrights-lookup-user": "Spravovať členstvo používateľa v skupinách",
+       "userrights": "Používateľské práva",
+       "userrights-lookup-user": "Vybrať používateľa",
        "userrights-user-editname": "Zadajte meno používateľa:",
-       "editusergroup": "Upraviť skupiny {{GENDER:$1|používateľa|používateľky}}",
+       "editusergroup": "Načítať skupiny používateľov",
        "editinguser": "Zmena práv používateľa '''[[User:$1|$1]]''' $2",
        "viewinguserrights": "Prehliadanie práv {{GENDER:$1|používateľa|používateľky}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Upraviť skupiny používateľa",
        "userrights-nodatabase": "Databáza $1 neexistuje alebo nie je lokálna.",
        "userrights-changeable-col": "Skupiny, ktoré môžete zmeniť",
        "userrights-unchangeable-col": "Skupiny, ktoré nemôžete zmeniť",
+       "userrights-expiry-othertime": "Iný čas:",
        "userrights-conflict": "Konflikt zmien práv používateľov! Prosím, skontrolujte ho a potvrďte svoje zmeny.",
        "group": "Skupina:",
        "group-user": "Používatelia",
        "grant-createeditmovepage": "Vytvárať, upravovať a presúvať stránky",
        "grant-delete": "Odstraňovať stránky, revízie a položky záznamu",
        "grant-editinterface": "Upravovať menný priestor MediaWiki a projektový/používateľský JSON",
-       "grant-editmycssjs": "Upravovať váš používateľský CSS/JavaScript",
+       "grant-editmycssjs": "Upravovať váš používateľský CSS/JSON/JavaScript",
        "grant-editmyoptions": "Upravovať nastavenia vášho používateľského účtu",
        "grant-editmywatchlist": "Upravovať váš zoznam sledovaných stránok",
        "grant-editsiteconfig": "Upravovať projektové a používateľské CSS/JS súbory",
        "action-upload_by_url": "nahrať tento súbor z URL adresy",
        "action-writeapi": "použiť API na zápis",
        "action-delete": "zmazať túto stránku",
-       "action-deleterevision": "zmazať túto revíziu",
+       "action-deleterevision": "zmazať revízie",
        "action-deletelogentry": "mazať záznamy",
        "action-deletedhistory": "zobraziť históriu zmazaných revízií tejto stránky",
        "action-deletedtext": "zobraziť si zmazané texty revízií",
        "rcfilters-savedqueries-already-saved": "Tieto filtre sú už uložené. Zmeňte niektoré nastavenia, ak chcete vytvoriť nový uložený filter.",
        "rcfilters-restore-default-filters": "Obnoviť predvolené filtre",
        "rcfilters-clear-all-filters": "Zrušiť všetky filtre",
-       "rcfilters-show-new-changes": "Zobraziť najnovšie zmeny",
-       "rcfilters-search-placeholder": "Filtrovať posledné úpravy (vyhľadávajte alebo začnite písať)",
+       "rcfilters-show-new-changes": "Zobraziť zmeny od $1",
+       "rcfilters-search-placeholder": "Filtrovať posledné úpravy (použite menu alebo vyhľadajte názov filtra)",
+       "rcfilters-search-placeholder-mobile": "Filtre",
        "rcfilters-invalid-filter": "Neplatný filter",
        "rcfilters-empty-filter": "Žiadne aktívne filtre. Všetky príspevky sú zobrazené.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-watchlist-markseen-button": "Označiť všetky úpravy ako zobrazené",
        "rcfilters-watchlist-edit-watchlist-button": "Upraviť zoznam sledovaných stránok",
        "rcfilters-watchlist-showupdated": "Zmeny stránok, ktoré ste od ich zmeny nenavštívili, sú zobrazené <strong>hrubo</strong> s vyplneným krúžkom.",
-       "rcfilters-preference-label": "Skryť vylepšenú verziu posledných úprav",
+       "rcfilters-preference-label": "Použiť rozhranie bez JavaScriptu",
        "rcfilters-preference-help": "Zruší novú podobu rozhrania z roku 2017 a všetky nástroje odvtedy pridané.",
        "rcfilters-watchlist-preference-label": "Skryť vylepšenú verziu sledovaných stránok",
        "rcfilters-watchlist-preference-help": "Zruší novú podobu rozhrania z roku 2017 a všetky nástroje odvtedy pridané.",
        "backend-fail-contenttype": "Nebolo možné určiť typ obsahu súboru, ktorý sa má uložiť na „$1“.",
        "backend-fail-batchsize": "Do úložiska bola zaslaná dávka s $1 {{PLURAL:$1|operáciou|operáciami}}; limit je $2 {{PLURAL:$2|operácia|operácie|operácií}}.",
        "backend-fail-usable": "Nie je možné čítať alebo zapísať súbor  $1  kvôli nedostatočným povoleniam alebo chýbajúcim adresárom/kontajnerom.",
+       "backend-fail-stat": "Nepodarilo sa načítať stav súboru „$1“.",
        "filejournal-fail-dbconnect": "Nepodarilo sa pripojiť k žurnálovej databáze úložiska „$1“.",
        "filejournal-fail-dbquery": "Nepodarilo sa aktualizovať žurnálovú databázu úložiska „$1“.",
        "lockmanager-notlocked": "Nepodarilo sa odomknúť zámok „$1“; nie je zamknutý.",
        "uploadstash-refresh": "Obnoviť zoznam súborov",
        "uploadstash-thumbnail": "zobraziť náhľad",
        "uploadstash-exception": "Načítaný súbor sa nepodarilo uložiť do skrýše ($1): „$2“.",
+       "uploadstash-bad-path": "Cesta neexistuje.",
+       "uploadstash-bad-path-invalid": "Cesta nie je platná.",
+       "uploadstash-bad-path-unknown-type": "Neznámy typ „$1“.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nerozpoznaný názov náhľadu.",
+       "uploadstash-file-not-found-no-thumb": "Nepodarilo sa získať náhľad.",
        "invalid-chunk-offset": "Neplatný posun bloku",
        "img-auth-accessdenied": "Prístup zamietnutý",
        "img-auth-nopathinfo": "Váš server nie je nastavený tak, aby poskytoval tieto informácie.\nMôže byť založený na CGI a nedokáže podporovať img_auth.\nPozri https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "http-timed-out": "Vyhradený čas požiadavky HTTP vypršal.",
        "http-curl-error": "Chyba pri sťahovaní URL: $1",
        "http-bad-status": "Počas požiadavky HTTP nastal problém: $1 $2",
+       "http-internal-error": "Interná chyba HTTP.",
        "upload-curl-error6": "Nedostupný URL",
        "upload-curl-error6-text": "Poskytnutý URL nebol dostupný. Prosím, skontrolujte znova, že URL je správny a lokalita je dostupná.",
        "upload-curl-error28": "Vypršal čas vyhradený pre nahrávanie",
        "listfiles-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "imgfile": "súbor",
        "listfiles": "Zoznam obrázkov",
+       "listfiles_subpage": "Súbory {{GENDER:$1|používateľa|používateľky}} $1",
        "listfiles_thumb": "Náhľad",
        "listfiles_date": "Dátum",
        "listfiles_name": "Názov",
        "listfiles_size": "Veľkosť (v bajtoch)",
        "listfiles_description": "Popis",
        "listfiles_count": "Verzie",
-       "listfiles-show-all": "Vrátane starších verzií obrázkov",
+       "listfiles-show-all": "Zahrnúť staré verzie súborov",
        "listfiles-latestversion": "Aktuálna verzia",
        "listfiles-latestversion-yes": "Áno",
        "listfiles-latestversion-no": "Nie",
        "pageswithprop-legend": "Stránky s vlastnosťou stránky",
        "pageswithprop-text": "Táto stránka obsahuje stránky, ktoré používajú konkrétnu vlastnosť stránky.",
        "pageswithprop-prop": "Názov vlastnosti:",
+       "pageswithprop-reverse": "Zoradiť v opačnom poradí",
+       "pageswithprop-sortbyvalue": "Zoradiť podľa hodnoty vlastnosti",
        "pageswithprop-submit": "Vykonať",
        "pageswithprop-prophidden-long": "dlhá hodnota textovej vlastnosti bola skrytá ($1)",
        "pageswithprop-prophidden-binary": "hodnota binárnej vlastnosti bola skrytá ($1)",
        "deadendpages": "Slepé stránky",
        "deadendpagestext": "Nasledujúce stránky neodkazujú na žiadne iné stránky na {{GRAMMAR:lokál|{{SITENAME}}}}.",
        "protectedpages": "Zamknuté stránky",
+       "protectedpages-filters": "Filtre:",
        "protectedpages-indef": "Zamknutia iba na neurčito",
        "protectedpages-summary": "Táto stránka obsahuje zoznam existujúcich stránok, ktoré sú momentálne zamknuté. Zoznam názvov zamknutých proti vytvoreniu nájdete na stránke [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Iba kaskádové zamykanie",
        "apisandbox-submit": "Odoslať dopyt",
        "apisandbox-reset": "Vyčistiť",
        "apisandbox-retry": "Skúsiť znova",
+       "apisandbox-helpurls": "Odkazy na nápovedu",
        "apisandbox-examples": "Príklady",
+       "apisandbox-dynamic-parameters": "Doplnkové parametre",
+       "apisandbox-dynamic-parameters-add-label": "Pridať parameter:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Meno parametra",
+       "apisandbox-add-multi": "Pridať",
+       "apisandbox-submit-invalid-fields-title": "Niektoré polia sú neplatné",
+       "apisandbox-submit-invalid-fields-message": "Opravte označené polia a skúste to znova.",
        "apisandbox-results": "Výsledky",
        "apisandbox-request-url-label": "URL požiadavky:",
+       "apisandbox-continue": "Pokračovať",
+       "apisandbox-continue-clear": "Vymazať",
+       "apisandbox-multivalue-all-namespaces": "$1 (Všetky menné priestory)",
+       "apisandbox-multivalue-all-values": "$1 (Všetky hodnoty)",
        "booksources": "Knižné zdroje",
        "booksources-search-legend": "Vyhľadávať knižné zdroje",
        "booksources-search": "Hľadať",
        "speciallogtitlelabel": "Cieľ (názov alebo {{ns:user}}:Používateľské meno):",
        "log": "Záznamy",
        "logeventslist-submit": "Zobraziť",
+       "logeventslist-more-filters": "Zobraziť ďalšie záznamy:",
        "logeventslist-patrol-log": "Kniha preverených úprav",
        "logeventslist-tag-log": "Kniha značiek",
        "all-logs-page": "Všetky verejné záznamy",
        "sessionfailure": "Zdá sa, že je problém s vašou prihlasovacou reláciou;\ntáto akcia bola zrušená ako prevencia proti zneužitiu relácie (session).\nProsím, stlačte \"naspäť\", obnovte stránku, z ktorej ste sa sem dostali, a skúste to znova.",
        "changecontentmodel": "Zmeniť model obsahu stránky",
        "changecontentmodel-legend": "Zmeniť model obsahu",
-       "changecontentmodel-title-label": "Názov stránky",
-       "changecontentmodel-model-label": "Nový model obsahu",
+       "changecontentmodel-title-label": "Názov stránky:",
+       "changecontentmodel-model-label": "Nový model obsahu:",
        "changecontentmodel-reason-label": "Dôvod:",
        "changecontentmodel-submit": "Zmeniť",
        "changecontentmodel-success-title": "Model obsahu bol zmenený",
        "ipbreason": "Dôvod:",
        "ipbreason-dropdown": "* Bežné dôvody blokovania\n** Zámerné vkladanie chybných informácií\n** Mazanie obsahu stránok\n** Spam odkazy na externé stránky\n** Vkladanie nezmyslov do stránok\n** Zastrašujúce správanie/obťažovanie\n** Zneužívanie viacerých účtov\n** Neprípustné používateľské meno",
        "ipb-hardblock": "Zabrániť prihláseným používateľom upravovať z tejto IP adresy",
-       "ipbcreateaccount": "Zabrániť vytváraniu účtov",
-       "ipbemailban": "Zabrániť používateľovi posielať e-maily",
+       "ipbcreateaccount": "Vytváranie účtov",
+       "ipbemailban": "Posielanie e-mailov",
        "ipbenableautoblock": "Automaticky blokovať poslednú IP adresu, ktorú tento používateľ použil, a všetky ďalšie adresy, z ktorých sa pokúsi upravovať.",
        "ipbsubmit": "Zablokovať tohto používateľa",
        "ipbother": "Iný čas",
        "ipboptions": "2 hodiny:2 hours,1 deň:1 day,3 dni:3 days,1 týždeň:1 week,2 týždne:2 weeks,1 mesiac:1 month,3 mesiace:3 months,6 mesiacov:6 months,1 rok:1 year,na neurčito:infinite",
        "ipbhidename": "Skryť meno používateľa z úprav a zoznamov",
        "ipbwatchuser": "Sledovať používateľskú a diskusnú stránku tohto používateľa",
-       "ipb-disableusertalk": "Zabrániť tomuto používateľovi upravovať vlastnú diskusnú stránku, kým je zablokovaný",
+       "ipb-disableusertalk": "Upravovanie vlastnej diskusnej stránky",
        "ipb-change-block": "Znovu zablokovať používateľa s týmito voľbami",
        "ipb-confirm": "Potvrdiť blokovanie",
        "badipaddress": "IP adresa má nesprávny formát.",
        "createaccountblock": "tvorba účtov bola zablokovaná",
        "emailblock": "e-mail blokovaný",
        "blocklist-nousertalk": "nemôže upravovať svoju diskusnú stránku",
+       "blocklist-editing-page": "stránky",
+       "blocklist-editing-ns": "menné priestory",
        "ipblocklist-empty": "Zoznam blokovaní je prázdny.",
-       "ipblocklist-no-results": "Požadovaná IP adresa alebo používateľské meno nie je blokovaná.",
+       "ipblocklist-no-results": "Nebolo nájdené žiadne zablokovanie danej IP adresy alebo používateľa.",
        "blocklink": "zablokovať",
        "unblocklink": "odblokovať",
        "change-blocklink": "zmeniť blokovanie",
+       "empty-username": "(používateľské meno nie je dostupné)",
        "contribslink": "príspevky",
        "emaillink": "poslať e-mail",
        "autoblocker": "Boli ste automaticky zablokovaný, pretože vašu IP adresu nedávno použil „[[User:$1|$1]]“.\nDôvodom zablokovania redaktora $1 bolo „$2“",
        "newimages-summary": "Táto špeciálna stránka zobrazuje posledné nahrané súbory.",
        "newimages-legend": "Filter",
        "newimages-label": "Názov súboru (alebo jeho časť):",
+       "newimages-user": "IP adresa alebo používateľské meno",
        "newimages-showbots": "Zobraziť súbory nahrané botmi",
        "newimages-hidepatrolled": "Skryť preverené nahratia súborov",
+       "newimages-mediatype": "Typ multimédia:",
        "noimages": "Niet čo zobraziť.",
        "gallery-slideshow-toggle": "Prepnúť náhľady",
        "ilsubmit": "Hľadať",
        "confirm-unwatch-top": "Odstrániť túto stránku z vášho zoznamu sledovaných?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Vrátiť úpravy na tejto stránke?",
+       "confirm-mcrundo-title": "Vrátiť späť zmenu",
+       "mcrundofailed": "Vrátenie úpravy sa nepodarilo",
        "quotation-marks": "„$1“",
        "imgmultipageprev": "← predošlá stránka",
        "imgmultipagenext": "ďalšia stránka →",
        "diff-form": "Rozdiely",
        "dberr-problems": "Prepáčte! Táto stránka má práve technické problémy.",
        "dberr-again": "Skúste niekoľko minút počkať a potom opäť načítať stránku.",
-       "dberr-info": "(Spojenie s databázovým serverom neúspešné: $1)",
-       "dberr-info-hidden": "(Nie je možné kontaktovať databázový server)",
+       "dberr-info": "(Nie je možné pripojiť sa k databáze: $1)",
+       "dberr-info-hidden": "(Nie je možné pripojiť sa k databáze)",
        "htmlform-invalid-input": "Niekotrý z údajov, ktoré ste zadali je problematický",
        "htmlform-select-badoption": "Hodnota, ktorú ste uviedli nie je platná.",
        "htmlform-int-invalid": "Hodnota, ktorú ste uviedli nie je celé číslo.",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|zamkol|zamkla}} stránku $3 $4 [kaskádovým zámkom]",
        "logentry-protect-modify": "$1 {{GENDER:$2|zmenil|zmenila}} úroveň zámku stránky $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|zmenil|zmenila}} úroveň zámku stránky $3 $4 [kaskádový zámok]",
-       "logentry-rights-rights": "$1 zmenil členstvo $3 v skupinách z $4 na $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|zmenil|zmenila}} členstvo {{GENDER:$6|používateľa|používateľky}} $3 v skupinách z $4 na $5",
        "logentry-rights-rights-legacy": "$1 zmenil členstvo $3 v skupinách",
        "logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|pridal|pridala}} $3",
        "expandtemplates": "Substituovať šablóny",
        "expand_templates_intro": "Táto špeciálna stránka prijme na\nvstup text a rekurzívne substituuje všetky šablóny,\nktoré sú v ňom použité. Tiež expanduje funkcie\nsyntaktického analyzátora ako <nowiki>{{</nowiki>#language:...}}\na premenné ako <nowiki>{{</nowiki>CURRENTDAY}}—v podstate\ntakmer všetko v zložených zátvorkách. Robí to pomocou\nvolania relevantnej fázy syntaktického analyzátora\nsamotného MediaWiki.",
        "expand_templates_title": "Názov kontextu pre {{FULLPAGENAME}} atď.:",
-       "expand_templates_input": "Vstupný text:",
+       "expand_templates_input": "Vstupný wikitext:",
        "expand_templates_output": "Výsledok",
        "expand_templates_xml_output": "XML výstup",
        "expand_templates_html_output": "Surový HTML výstup",
        "date-range-from": "Od dátumu:",
        "date-range-to": "Po dátum:",
        "randomrootpage": "Náhodná koreňová stránka",
+       "authmanager-provider-password": "Autentifikácia pomocou hesla",
        "changecredentials": "Zmena prihlasovacích údajov",
+       "changecredentials-submit": "Zmeniť prihlasovacie údaje",
        "removecredentials": "Odstránenie prihlasovacích údajov",
+       "credentialsform-provider": "Typ prihlasovacích údajov:",
+       "credentialsform-account": "Názov účtu:",
        "userjsispublic": "Uvedomte si prosím, že podstránky s JavaScriptom by nemali obsahovať tajné údaje, pretože sú viditeľné ostatným používateľom.",
        "usercssispublic": "Uvedomte si prosím, že podstránky s CSS by nemali obsahovať tajné údaje, pretože sú viditeľné ostatným používateľom.",
        "passwordpolicies": "Pravidlá pre heslá"
index e888fda..d9be5c2 100644 (file)
        "createaccountmail": "Ustvari začasno naključno geslo in ga pošlji na spodaj navedeni e-poštni naslov",
        "createaccountmail-help": "Se lahko uporablja za ustvarjanje računa za drugo osebo brez da bi vedeli geslo.",
        "createacct-realname": "Pravo ime (izbirno)",
-       "createacct-reason": "Razlog",
+       "createacct-reason": "Razlog (javno zabeležen)",
        "createacct-reason-ph": "Zakaj ustvarjate drug račun",
        "createacct-reason-help": "Sporočilo, prikazano v dnevniku ustvarjanja računov",
        "createacct-submit": "Ustvarite svoj račun",
        "listfiles-userdoesnotexist": "Uporabniški račun »$1« ni registriran.",
        "imgfile": "dat.",
        "listfiles": "Seznam datotek",
+       "listfiles_subpage": "Nalaganja $1",
        "listfiles_thumb": "Sličica",
        "listfiles_date": "Datum",
        "listfiles_name": "Ime",
        "mycustomjsredirectprotected": "Nimate pravic za urejanje te strani z JavaScriptom, ker je preusmeritev in ne kaže v vaš uporabniški prostor.",
        "easydeflate-invaliddeflate": "Dana vsebina ni pravilno stisnjena",
        "unprotected-js": "Iz varnostnih razlogov JavaScripta ni možno naložiti z nezaščitenih strani. Prosimo, da JavaScript ustvarite samo v imenskem prostoru MediaWiki ali kot uporabniško podstran.",
-       "userlogout-continue": "Se želite odjaviti?"
+       "userlogout-continue": "Se želite odjaviti?",
+       "rest-prefix-mismatch": "Zahtevana pot ($1) ni bila znotraj korenske poti REST API ($2)",
+       "rest-wrong-method": "Zahtevana metoda ($1) ni {{PLURAL:$3|veljavna metoda|ena od veljavnih metod}} za to pot ($2)",
+       "rest-no-match": "Zahtevana relativna pot ($1) se ne ujema z nobenim znanim krmilnikom"
 }
index e1f585c..af8170c 100644 (file)
        "userinvalidconfigtitle": "'''Varning:''' Utseendet \"$1\" finns inte. Kom ihåg att .css-, .json- och .js-sidor för enskilda användare börjar på liten bokstav. Exempel: {{ns:user}}:Foo/vector.css i stället för {{ns:user}}:Foo/Vector.css.",
        "updated": "(Uppdaterad)",
        "note": "'''Obs!'''",
-       "previewnote": "'''Kom ihåg att detta bara är en förhandsvisning.'''\nDina ändringar har ännu inte sparats!",
+       "previewnote": "<strong>Kom ihåg att detta bara är en förhandsgranskning.</strong>\nDina ändringar har ännu inte sparats!",
        "continue-editing": "Fortsätt redigera",
        "previewconflict": "Den här förhandsvisningen är resultatet av den\nredigerbara texten ovanför,\nså som det kommer att se ut om du väljer att spara.",
        "session_fail_preview": "Vi kunde inte behandla din redigering eftersom sessionsdata gått förlorad.\nDu kanske har loggats ut. Var god se till att du fortfarande är inloggad och försök igen.\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen, samt kontrollera att din webbläsare tillåter kakor från denna webbplats.",
index d3e4af9..83a72df 100644 (file)
@@ -64,6 +64,7 @@
        "tog-watchlisthideminor": "చిన్న మార్పులను నా వీక్షణా జాబితాలో చూపించొద్దు",
        "tog-watchlisthideliu": "లాగిన్ ఐన వాడుకరులు చేసే మార్పులను వీక్షణా జాబితాలో చూపించకు",
        "tog-watchlistreloadautomatically": "ఫిల్టరు మారినప్పుడెల్లా వీక్షణ జాబితాను తిరిగి లోడు చెయ్యి (JavaScript అవసరం)",
+       "tog-watchlistunwatchlinks": "మార్పులు జరిగిన వీక్షణ పేజీలకు నేరుగా వీక్షించు/వద్దు సూచికలను ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) చేర్చు (టాగుల్ చెయాలంటే JavaScript ఆవశ్యకం)",
        "tog-watchlisthideanons": "అజ్ఞాత వాడుకరుల మార్పులను వీక్షణా జాబితాలో చూపించకు",
        "tog-watchlisthidepatrolled": "నిఘా ఉన్న మార్పులను వీక్షణజాబితా నుంచి దాచిపెట్టు",
        "tog-watchlisthidecategorization": "పేజీ వర్గీకరణను దాచు",
@@ -74,6 +75,7 @@
        "tog-useeditwarning": "ఏదైనా పేజీని నేను వదిలివెళ్తున్నప్పుడు దానిలో భద్రపరచని మార్పులు ఉంటే నన్ను హెచ్చరించు",
        "tog-prefershttps": "లాగిన్ అయి ఉన్నప్పుడెల్లా భద్ర కనెక్షనునే వాడు",
        "tog-showrollbackconfirmation": "రోల్‌బ్యాక్ లింకును నొక్కినపుడు నిర్ధారించుకునే సందేశాన్ని చూపించు",
+       "tog-requireemail": "సంకేతపదం మార్చుకోడానికి ఈమెయిలు ఆవశ్యకం",
        "underline-always": "ఎల్లప్పుడూ",
        "underline-never": "ఎప్పటికీ వద్దు",
        "underline-default": "అలంకారపు లేదా విహారిణి అప్రమేయం",
        "createaccountmail": "ఏదో ఒక తాత్కాలిక సంకేతపదాన్ని వాడి దాన్ని పేర్కొన్న ఈమెయిలు చిరునామాకు పంపించు",
        "createaccountmail-help": "సంకేతపదం తెలుసుకోనవసరం లేకుండా వేరొకరి కోసం ఖాతా సృష్టించేందుకు వాడవచ్చు.",
        "createacct-realname": "అసలు పేరు (ఐచ్చికం)",
-       "createacct-reason": "కారణం",
+       "createacct-reason": "కారణం (అందరికీ కనిపిస్తుంది)",
        "createacct-reason-ph": "మీరు మరో ఖాతాను ఎందుకు సృష్టించుకుంటున్నారు",
        "createacct-reason-help": "సృష్టించిన ఖాతాల చిట్టాలో చూపించే సందేశం",
        "createacct-submit": "మీ ఖాతాను సృష్టించుకోండి",
        "botpasswords": "బాట్ సంకేతపదాలు",
        "botpasswords-disabled": "బాట్ సంకేతపదాలను అచేతనం చేసాం.",
        "botpasswords-no-central-id": "బాఅత్ సంకేతపదాలను వాడాలంటే, మీరు ఒక కేంద్రీకృత ఖాతాలోకి లాగినవ్వాలి.",
+       "botpasswords-existing": "ప్రస్తుతం ఉన్న బాట్ సంకేతపదాలు",
        "botpasswords-createnew": "ఓ కొత్త బాట్ సంకేతపదాన్ని సృష్టించండి",
        "botpasswords-editexisting": "ఉనికిలో ఉన్న బాట్ సంకేతపదాన్ని మార్చండి",
+       "botpasswords-label-needsreset": "(సంకేతపదాన్ని మార్చాల్సిన అవసరం ఉంది)",
        "botpasswords-label-appid": "బాట్ పేరు:",
        "botpasswords-label-create": "సృష్టించు",
        "botpasswords-label-update": "తాజాకరించు",
index 9c00f4f..5d75381 100644 (file)
        "tog-useeditwarning": "当我离开编辑页面时,如果有尚未保存的更改,请提醒我",
        "tog-prefershttps": "在登录后总是使用安全连接",
        "tog-showrollbackconfirmation": "当点击回退链接时显示确认提示",
+       "tog-requireemail": "需要电子邮件用于重置密码",
        "underline-always": "始终",
        "underline-never": "从不",
        "underline-default": "皮肤或浏览器默认设置",
        "createaccountmail": "使用一个临时的随机密码并将其发送到指定的电子邮件地址中",
        "createaccountmail-help": "可被用于为另一个人创建账户而不需要得知密码。",
        "createacct-realname": "真实姓名(可选)",
-       "createacct-reason": "原因",
+       "createacct-reason": "原因(公开记录)",
        "createacct-reason-ph": "您为什么要创建另一个账户",
        "createacct-reason-help": "在账户创建日志中显示的消息",
        "createacct-submit": "创建您的账户",
        "content-model-css": "CSS",
        "content-json-empty-object": "空的对象",
        "content-json-empty-array": "空的数组",
+       "unsupported-content-model": "<strong>警告:</strong>内容模型$1在此wiki上不支持。",
        "deprecated-self-close-category": "使用无效自封闭HTML标签的页面",
        "deprecated-self-close-category-desc": "页面包含无效的自封闭HTML标签,例如<code>&lt;b/></code>或<code>&lt;span/></code>。这些标签的行为将很快被更改以与HTML5规格相一致,所以它们在wiki文本中的使用已弃用。",
        "duplicate-args-warning": "<strong>警告:</strong>[[:$1]]正在调用超过一个[[:$2]]中“$3”参数的值。只有最后提供的值会被使用。",
        "listfiles-userdoesnotexist": "用户帐户“$1”未注册。",
        "imgfile": "文件",
        "listfiles": "文件列表",
+       "listfiles_subpage": "由$1上传",
        "listfiles_thumb": "缩略图",
        "listfiles_date": "日期",
        "listfiles_name": "名称",
index 2bce867..49b362f 100644 (file)
        "nouserspecified": "您必須指定一個使用者名稱。",
        "login-userblocked": "這位使用者已被封鎖,不允許登入。",
        "wrongpassword": "您輸入的使用者名稱或密碼錯誤,請再試一次。",
-       "wrongpasswordempty": "輸入的密碼是空的。\n請再試一次。",
+       "wrongpasswordempty": "輸入的密碼是空的。請再試一次。",
        "passwordtooshort": "您的密碼至少需要 $1 個字元。",
        "passwordtoolong": "密碼不能超過 {{PLURAL:$1|1 個字元|$1 個字元}}。",
        "passwordtoopopular": "不能使用普遍選擇的密碼。請選擇更難猜出的密碼",
        "move-watch": "監視來源以及目標頁面",
        "movepagebtn": "移動頁面",
        "pagemovedsub": "已成功移動",
-       "cannotmove": "ç\84¡æ³\95移é\99¤é \81é\9d¢ï¼\8cå\87ºæ\96¼ä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b |å\8e\9få\9b }}:",
+       "cannotmove": "ç\94±æ\96¼ä»¥ä¸\8b{{PLURAL:$1|å\8e\9få\9b }}ä¸\8dè\83½ç§»å\8b\95é \81é\9d¢:",
        "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
        "movepage-moved-redirect": "已建立重新導向頁面。",
        "movepage-moved-noredirect": "已取消建立重新導向頁面。",
index f89fa62..f741cd2 100644 (file)
@@ -587,7 +587,7 @@ abstract class Maintenance {
                        "server name detection may fail in command line scripts.", false, true );
                $this->addOption( 'profiler', 'Profiler output format (usually "text")', false, true );
                // This is named --mwdebug, because --debug would conflict in the phpunit.php CLI script.
-               $this->addOption( 'mwdebug', 'Enable built-in MediaWiki development settings', false, true );
+               $this->addOption( 'mwdebug', 'Enable built-in MediaWiki development settings', false, false );
 
                # Save generic options to display them separately in help
                $this->mGenericParameters = $this->mParams;
index b78e691..a7a6465 100644 (file)
@@ -87,7 +87,7 @@ class TableCleanup extends Maintenance {
 
                $this->output(
                        sprintf( "%s %s: %6.2f%% done on %s; ETA %s [%d/%d] %.2f/sec <%.2f%% updated>\n",
-                               wfWikiID(),
+                               WikiMap::getCurrentWikiDbDomain()->getId(),
                                wfTimestamp( TS_DB, intval( $now ) ),
                                $portion * 100.0,
                                $this->table,
index 2271c39..7bbf3d0 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -57,6 +59,10 @@ class MigrateArchiveText extends LoggedUpdateMaintenance {
        protected function doDBUpdates() {
                $replaceMissing = $this->hasOption( 'replace-missing' );
                $defaultExternalStore = $this->getConfig()->get( 'DefaultExternalStore' );
+               // @phan-suppress-next-line PhanAccessMethodInternal
+               $blobStore = MediaWikiServices::getInstance()
+                       ->getBlobStoreFactory()
+                       ->newSqlBlobStore();
                $batchSize = $this->getBatchSize();
 
                $dbr = $this->getDB( DB_REPLICA, [ 'vslow' ] );
@@ -90,8 +96,9 @@ class MigrateArchiveText extends LoggedUpdateMaintenance {
 
                                // Recompress the text (and store in external storage, if
                                // applicable) if it's not already in external storage.
-                               if ( !in_array( 'external', explode( ',', $row->ar_flags ), true ) ) {
-                                       $data = Revision::getRevisionText( $row, 'ar_' );
+                               $arFlags = explode( ',', $row->ar_flags );
+                               if ( !in_array( 'external', $arFlags, true ) ) {
+                                       $data = $blobStore->decompressData( $row->ar_text, $arFlags );
                                        if ( $data !== false ) {
                                                $flags = Revision::compressRevisionText( $data );
 
index 5f7f9d5..cbe5d27 100644 (file)
@@ -110,8 +110,9 @@ class UserDupes {
         * @return bool
         */
        private function checkDupes( $doDelete = false ) {
+               $dbDomain = WikiMap::getCurrentWikiDbDomain()->getId();
                if ( $this->hasUniqueIndex() ) {
-                       echo wfWikiID() . " already has a unique index on its user table.\n";
+                       echo "$dbDomain already has a unique index on its user table.\n";
 
                        return true;
                }
@@ -122,7 +123,7 @@ class UserDupes {
                $dupes = $this->getDupes();
                $count = count( $dupes );
 
-               $this->out( "Found $count accounts with duplicate records on " . wfWikiID() . ".\n" );
+               $this->out( "Found $count accounts with duplicate records on $dbDomain.\n" );
                $this->trimmed = 0;
                $this->reassigned = 0;
                $this->failed = 0;
@@ -145,11 +146,13 @@ class UserDupes {
 
                if ( $this->trimmed > 0 ) {
                        if ( $doDelete ) {
-                               $this->out( "$this->trimmed duplicate user records were deleted from "
-                                       . wfWikiID() . ".\n" );
+                               $this->out(
+                                       "$this->trimmed duplicate user records were deleted from $dbDomain.\n" );
                        } else {
-                               $this->out( "$this->trimmed duplicate user accounts were found on "
-                                       . wfWikiID() . " which can be removed safely.\n" );
+                               $this->out(
+                                       "$this->trimmed duplicate user accounts were found on $dbDomain " .
+                                       "which can be removed safely.\n"
+                               );
                        }
                }
 
index c8eae03..0b0e485 100644 (file)
@@ -1983,6 +1983,7 @@ return [
                        'resources/src/mediawiki.special/special.less',
                        'resources/src/mediawiki.special/apisandbox.css',
                        'resources/src/mediawiki.special/comparepages.less',
+                       'resources/src/mediawiki.special/contributions.less',
                        'resources/src/mediawiki.special/edittags.css',
                        'resources/src/mediawiki.special/movePage.css',
                        'resources/src/mediawiki.special/newpages.less',
@@ -2146,9 +2147,12 @@ return [
        'mediawiki.special.contributions' => [
                'scripts' => 'resources/src/mediawiki.special.contributions.js',
                'dependencies' => [
+                       'jquery.makeCollapsible',
+                       'oojs-ui',
                        'mediawiki.widgets.DateInputWidget',
                        'mediawiki.jqueryMsg',
-               ]
+               ],
+               'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.edittags' => [
                'scripts' => 'resources/src/mediawiki.special.edittags.js',
@@ -2195,6 +2199,9 @@ return [
                'styles' => 'resources/src/mediawiki.special.preferences.styles.ooui.less',
        ],
        'mediawiki.special.recentchanges' => [
+               'dependencies' => [
+                       'mediawiki.widgets'
+               ],
                'scripts' => 'resources/src/mediawiki.special.recentchanges.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
index ac89616..23e86f7 100644 (file)
@@ -125,12 +125,6 @@ li,
        }
 }
 
-fieldset.mw-collapsible .mw-collapsible-toggle {
-       position: absolute;
-       right: 0;
-       z-index: 1;
-}
-
 // special treatment for list items to match above
 // !important necessary to override overly-specific float left and right above.
 ol.mw-collapsible:not( @{exclude} ):before,
index b6aa5fd..2bf685e 100644 (file)
@@ -4,57 +4,58 @@
  * @class mw.errorLogger
  * @singleton
  */
-( function () {
-       'use strict';
+mw.errorLogger = {
+       /**
+        * Fired via mw.track when an error is not handled by local code and is caught by the
+        * window.onerror handler.
+        *
+        * @event global_error
+        * @param {string} errorMessage Error errorMessage.
+        * @param {string} url URL where error was raised.
+        * @param {number} lineNumber Line number where error was raised.
+        * @param {number} [columnNumber] Line number where error was raised. Not all browsers
+        *   support this.
+        * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
+        *   (even a primitive value) passed to a throw clause will end up here.
+        */
 
-       mw.errorLogger = {
-               /**
-                * Fired via mw.track when an error is not handled by local code and is caught by the
-                * window.onerror handler.
-                *
-                * @event global_error
-                * @param {string} errorMessage Error errorMessage.
-                * @param {string} url URL where error was raised.
-                * @param {number} lineNumber Line number where error was raised.
-                * @param {number} [columnNumber] Line number where error was raised. Not all browsers
-                *   support this.
-                * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
-                *   (even a primitive value) passed to a throw clause will end up here.
-                */
+       /**
+        * Install a window.onerror handler that will report via mw.track, while preserving
+        * any previous handler.
+        *
+        * @param {Object} window
+        */
+       installGlobalHandler: function ( window ) {
+               // We will preserve the return value of the previous handler. window.onerror works the
+               // opposite way than normal event handlers (returning true will prevent the default
+               // action, returning false will let the browser handle the error normally, by e.g.
+               // logging to the console), so our fallback old handler needs to return false.
+               var oldHandler = window.onerror || function () {
+                       return false;
+               };
 
                /**
-                * Install a window.onerror handler that will report via mw.track, while preserving
-                * any previous handler.
+                * Dumb window.onerror handler which forwards the errors via mw.track.
                 *
-                * @param {Object} window
+                * @param {string} errorMessage
+                * @param {string} url
+                * @param {number} lineNumber
+                * @param {number} [columnNumber]
+                * @param {Error|Mixed} [errorObject]
+                * @return {boolean} True to prevent the default action
+                * @fires global_error
                 */
-               installGlobalHandler: function ( window ) {
-                       // We will preserve the return value of the previous handler. window.onerror works the
-                       // opposite way than normal event handlers (returning true will prevent the default
-                       // action, returning false will let the browser handle the error normally, by e.g.
-                       // logging to the console), so our fallback old handler needs to return false.
-                       var oldHandler = window.onerror || function () {
-                               return false;
-                       };
-
-                       /**
-                        * Dumb window.onerror handler which forwards the errors via mw.track.
-                        *
-                        * @param {string} errorMessage
-                        * @param {string} url
-                        * @param {number} lineNumber
-                        * @param {number} [columnNumber]
-                        * @param {Error|Mixed} [errorObject]
-                        * @return {boolean} True to prevent the default action
-                        * @fires global_error
-                        */
-                       window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
-                               mw.track( 'global.error', { errorMessage: errorMessage, url: url,
-                                       lineNumber: lineNumber, columnNumber: columnNumber, errorObject: errorObject } );
-                               return oldHandler.apply( this, arguments );
-                       };
-               }
-       };
+               window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
+                       mw.track( 'global.error', {
+                               errorMessage: errorMessage,
+                               url: url,
+                               lineNumber: lineNumber,
+                               columnNumber: columnNumber,
+                               errorObject: errorObject
+                       } );
+                       return oldHandler.apply( this, arguments );
+               };
+       }
+};
 
-       mw.errorLogger.installGlobalHandler( window );
-}() );
+mw.errorLogger.installGlobalHandler( window );
index 470d826..22dc924 100644 (file)
@@ -6,6 +6,7 @@
 @ooui-font-size-browser: 16; // assumed browser default of `16px`
 @ooui-font-size-base: 0.875em; // equals `14px` at browser default of `16px`
 
+@ooui-spacing-small: 8 / @ooui-font-size-browser / @ooui-font-size-base; // equals `0.57142857em`≈`8px`
 @ooui-spacing-medium: 12 / @ooui-font-size-browser / @ooui-font-size-base; // equals `0.8571429em`≈`12px`
 @ooui-spacing-large: 16 / @ooui-font-size-browser / @ooui-font-size-base; // equals `1.1428571em`≈`16px`
 @ooui-padding-horizontal: 12 / @ooui-font-size-browser / @ooui-font-size-base;
        // Reducing `padding-top`, as the heading's `line-height` provides similar distance.
        padding: @ooui-spacing-medium @ooui-spacing-large @ooui-spacing-large;
 
-       // Trigger only when collapsible & JS is available via `.mw-collapsed`.
-       .client-js & .oo-ui-fieldsetLayout.mw-collapsed .oo-ui-fieldsetLayout-header {
-               // Negative margin to match the reduced distance on the top caused by the previous rule.
-               margin-bottom: -( @ooui-spacing-large - @ooui-spacing-medium );
+       .client-js & .oo-ui-fieldsetLayout.mw-collapsible .oo-ui-fieldsetLayout-header {
+               // Push legend up when JS is on, to increase clickable area.
+               margin-top: -@ooui-spacing-small;
+               margin-bottom: @ooui-spacing-small;
+               // Add `padding-top` to make up for negative `margin` above.
+               padding: @ooui-spacing-small;
+               // Make space for toggle icon defined below.
+               padding-left: 24 / @ooui-font-size-browser / @ooui-font-size-base;
 
                .oo-ui-labelElement-label {
                        margin-bottom: 0;
                }
        }
+
+       // Trigger only when collapsible & JS is available via `.mw-collapsed`.
+       .client-js & .oo-ui-fieldsetLayout.mw-collapsed .oo-ui-fieldsetLayout-header {
+               min-height: 30px;
+               // Negative margin to match the reduced distance on the top caused by the previous rule.
+               margin-bottom: -@ooui-spacing-medium;
+       }
 }
 
 .mw-htmlform-ooui {
 .mw-htmlform-ooui .mw-htmlform-submit-buttons {
        margin-top: @ooui-spacing-medium;
 }
+
+.oo-ui-fieldsetLayout.mw-collapsible {
+       .oo-ui-fieldsetLayout-header {
+               max-width: none;
+       }
+
+       .mw-collapsible-toggle .oo-ui-iconElement-icon {
+               position: absolute;
+               top: 0;
+               left: 0;
+               // Special case: Reduce to `16px` icon size here.
+               min-width: 16px;
+               width: 16 / @ooui-font-size-browser / @ooui-font-size-base;
+               margin-right: 0.5em;
+       }
+
+       // When expanded: only 'collapse' icon visible
+       .mw-collapsible-toggle .oo-ui-icon-expand {
+               display: none;
+       }
+
+       // When collapsed: only 'expand' icon visible
+       &.mw-collapsed {
+               .mw-collapsible-toggle .oo-ui-icon-expand {
+                       display: inline-block;
+               }
+
+               .mw-collapsible-toggle .oo-ui-icon-collapse {
+                       display: none;
+               }
+       }
+}
index dff7881..9559d3a 100644 (file)
        font-weight: bold;
 }
 
+// on smaller screen, set .watchlistDetail to full width
+// so that the spinner doesn't appear beside it. T225127#5518870
+@media screen and ( max-width: @width-breakpoint-tablet ) {
+       .client-js {
+               /* stylelint-disable-next-line selector-class-pattern */
+               .watchlistDetails {
+                       float: none;
+                       width: auto;
+               }
+       }
+}
+
 @-webkit-keyframes rcfiltersBouncedelay {
        // 50% equals 800ms
        0%,
index 52f7ff2..75da5dd 100644 (file)
                border-top: 2px solid @colorGray14;
        }
 }
+
+// On small screens, remove the table properties from the
+// top section. T225127#5518870
+@media screen and ( max-width: @width-breakpoint-tablet ) {
+       .mw-rcfilters-ui-watchlistTopSectionWidget {
+               .mw-rcfilters-ui-table,
+               .mw-rcfilters-ui-row,
+               .mw-rcfilters-ui-cell {
+                       display: block;
+               }
+
+               &-editWatchlistButton {
+                       margin-top: 1em;
+               }
+       }
+}
index 310832d..c62acd9 100644 (file)
@@ -2,7 +2,7 @@
  * JavaScript for Special:RecentChanges
  */
 ( function () {
-       var rc, $checkboxes, $select;
+       var rc, $checkboxes, $select, namespaceDropdown;
 
        /**
         * @class mw.special.recentchanges
                 */
                updateCheckboxes: function () {
                        // The option element for the 'all' namespace has an empty value
-                       var isAllNS = $select.val() === '';
+                       var value = $select.val(),
+                               isAllNS = value === 'all' || value === '';
 
                        // Iterates over checkboxes and propagate the selected option
                        $checkboxes.toggleClass( 'mw-input-hidden', isAllNS );
                },
 
                init: function () {
-                       $select = $( '#namespace' );
-                       $checkboxes = $( '#nsassociated, #nsinvert' ).closest( '.mw-input-with-label' );
+                       $select = $( 'select#namespace' );
+                       $checkboxes = $( '#nsassociated, #nsinvert, .contribs-ns-filters' )
+                               .closest( '.mw-input-with-label' );
 
-                       // Bind to change event of the checkboxes.
-                       // The initial state is already set in HTML.
-                       $select.on( 'change', rc.updateCheckboxes );
+                       if ( $select.length === 0 ) {
+                               $select = $( '#namespace select' );
+                               if ( $select.length > 0 ) {
+                                       namespaceDropdown = OO.ui.infuse( $( '#namespace' ).closest( '[data-ooui]' ) );
+                                       namespaceDropdown.on( 'change', rc.updateCheckboxes );
+                               }
+                       } else {
+                               // Bind to change event of the checkboxes.
+                               // The initial state is already set in HTML.
+                               $select.on( 'change', rc.updateCheckboxes );
+                       }
                }
        };
 
diff --git a/resources/src/mediawiki.special/contributions.less b/resources/src/mediawiki.special/contributions.less
new file mode 100644 (file)
index 0000000..cc0e538
--- /dev/null
@@ -0,0 +1,65 @@
+/*!
+ * Styling for Special:Contributions
+ */
+@import 'mediawiki.ui/variables.less';
+
+// OOUIHTMLForm styles.
+@ooui-font-size-browser: 16; // Assumed browser default of `16px`.
+@ooui-font-size-base: 0.875em; // Equals `14px` at browser default of `16px`.
+
+@ooui-spacing-small: 8 / @ooui-font-size-browser / @ooui-font-size-base; // Equals `0.57142857em`≈`8px`.
+@ooui-spacing-medium: 12 / @ooui-font-size-browser / @ooui-font-size-base; // Equals `0.8571429em`≈`12px`.
+@ooui-spacing-large: 16 / @ooui-font-size-browser / @ooui-font-size-base; // Equals `1.1428571em`≈`16px`.
+
+.oo-ui-fieldsetLayout-group {
+       max-width: 50em;
+
+       .oo-ui-panelLayout-padded.oo-ui-panelLayout-framed {
+               margin: 0;
+               border: 0;
+               padding: 0;
+       }
+
+       // Hide extra `legend`s when grouping form in sections.
+       .oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-fieldsetLayout-header {
+               display: none;
+       }
+}
+
+.mw-autocomplete-user.oo-ui-fieldLayout {
+       margin-top: @ooui-spacing-small;
+}
+
+// Higher specificity needed to override OOUIHTMLForm styles.
+.mw-htmlform-field-HTMLMultiSelectField.mw-htmlform-flatlist.oo-ui-fieldLayout {
+       margin-top: @ooui-spacing-small;
+}
+
+.mw-htmlform-field-HTMLTagFilter ~ .mw-htmlform-field-HTMLCheckField.oo-ui-fieldLayout {
+       display: inline-block;
+       padding-right: @ooui-spacing-large;
+}
+
+// Clearfix for floated `.mw-htmlform-field-HTMLDateTimeField` below.
+#mw-htmlform-contribs-date:after {
+       content: '';
+       clear: both;
+       display: block;
+}
+
+.mw-htmlform-field-HTMLDateTimeField {
+       margin-right: @ooui-spacing-large;
+       margin-bottom: @ooui-spacing-small;
+
+       .oo-ui-fieldLayout.oo-ui-labelElement&:first-child {
+               margin-top: @ooui-spacing-medium;
+       }
+}
+
+@media all and ( min-width: @width-breakpoint-tablet ) {
+       .mw-htmlform-field-HTMLDateTimeField {
+               float: left;
+               // Same `width` as DateInputWidget.
+               width: 21em;
+       }
+}
index 3f76cf0..40a2ec2 100644 (file)
        font-weight: bold;
 }
 
-.mw-contributions-form select {
-       vertical-align: middle;
-}
-
 /* Special:EditWatchlist */
 .watchlistredir {
        font-style: italic;
index 0eb1134..89de155 100644 (file)
@@ -73,7 +73,7 @@
 
                // Highlight matching parts of link suggestion
                if ( config.query ) {
-                       this.setHighlightedQuery( config.data, config.query, config.compare );
+                       this.setHighlightedQuery( config.data, config.query, config.compare, true );
                }
                this.$label.attr( 'title', config.data );
 
index 21d95df..f814d89 100644 (file)
@@ -13,7 +13,7 @@
        'use strict';
 
        var mw, StringSet, log,
-               hasOwn = Object.prototype.hasOwnProperty;
+               hasOwn = Object.hasOwnProperty;
 
        /**
         * FNV132 hash function
                                        try {
                                                sortDependencies( modules[ i ], resolved );
                                        } catch ( err ) {
-                                               // This module is unknown or has unknown dependencies.
-                                               // Undo any incomplete resolutions made and keep going.
+                                               // This module is not currently known, or has invalid dependencies.
+                                               // Most likely due to a cached reference after the module was
+                                               // removed, otherwise made redundant, or omitted from the registry
+                                               // by the ResourceLoader "target" system.
                                                resolved = saved;
-                                               mw.trackError( 'resourceloader.exception', {
-                                                       exception: err,
-                                                       source: 'resolve'
-                                               } );
+                                               mw.log.warn( 'Skipped unresolvable module ' + modules[ i ] );
+                                               if ( modules[ i ] in registry ) {
+                                                       // If the module was known but had unknown or circular dependencies,
+                                                       // also track it as an error.
+                                                       mw.trackError( 'resourceloader.exception', {
+                                                               exception: err,
+                                                               source: 'resolve'
+                                                       } );
+                                               }
                                        }
                                }
                                return resolved;
index afb4737..2787f58 100644 (file)
@@ -1,54 +1,51 @@
 /* global mw */
-( function () {
-       var maxBusy = 50;
+mw.requestIdleCallbackInternal = function ( callback ) {
+       setTimeout( function () {
+               var start = mw.now();
+               callback( {
+                       didTimeout: false,
+                       timeRemaining: function () {
+                               // Hard a target maximum busy time of 50 milliseconds
+                               return Math.max( 0, 50 - ( mw.now() - start ) );
+                       }
+               } );
+       }, 1 );
+};
 
-       mw.requestIdleCallbackInternal = function ( callback ) {
-               setTimeout( function () {
-                       var start = mw.now();
-                       callback( {
-                               didTimeout: false,
-                               timeRemaining: function () {
-                                       return Math.max( 0, maxBusy - ( mw.now() - start ) );
-                               }
-                       } );
-               }, 1 );
-       };
-
-       /**
-        * Schedule a deferred task to run in the background.
-        *
-        * This allows code to perform tasks in the main thread without impacting
-        * time-critical operations such as animations and response to input events.
-        *
-        * Basic logic is as follows:
-        *
-        * - User input event should be acknowledged within 100ms per [RAIL].
-        * - Idle work should be grouped in blocks of upto 50ms so that enough time
-        *   remains for the event handler to execute and any rendering to take place.
-        * - Whenever a native event happens (e.g. user input), the deadline for any
-        *   running idle callback drops to 0.
-        * - As long as the deadline is non-zero, other callbacks pending may be
-        *   executed in the same idle period.
-        *
-        * See also:
-        *
-        * - <https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback>
-        * - <https://w3c.github.io/requestidlecallback/>
-        * - <https://developers.google.com/web/updates/2015/08/using-requestidlecallback>
-        * [RAIL]: https://developers.google.com/web/fundamentals/performance/rail
-        *
-        * @member mw
-        * @param {Function} callback
-        * @param {Object} [options]
-        * @param {number} [options.timeout] If set, the callback will be scheduled for
-        *  immediate execution after this amount of time (in milliseconds) if it didn't run
-        *  by that time.
-        */
-       mw.requestIdleCallback = window.requestIdleCallback ?
-               // Bind because it throws TypeError if context is not window
-               window.requestIdleCallback.bind( window ) :
-               mw.requestIdleCallbackInternal;
-       // Note: Polyfill was previously disabled due to
-       // https://bugs.chromium.org/p/chromium/issues/detail?id=647870
-       // See also <http://codepen.io/Krinkle/full/XNGEvv>
-}() );
+/**
+ * Schedule a deferred task to run in the background.
+ *
+ * This allows code to perform tasks in the main thread without impacting
+ * time-critical operations such as animations and response to input events.
+ *
+ * Basic logic is as follows:
+ *
+ * - User input event should be acknowledged within 100ms per [RAIL].
+ * - Idle work should be grouped in blocks of upto 50ms so that enough time
+ *   remains for the event handler to execute and any rendering to take place.
+ * - Whenever a native event happens (e.g. user input), the deadline for any
+ *   running idle callback drops to 0.
+ * - As long as the deadline is non-zero, other callbacks pending may be
+ *   executed in the same idle period.
+ *
+ * See also:
+ *
+ * - <https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback>
+ * - <https://w3c.github.io/requestidlecallback/>
+ * - <https://developers.google.com/web/updates/2015/08/using-requestidlecallback>
+ * [RAIL]: https://developers.google.com/web/fundamentals/performance/rail
+ *
+ * @member mw
+ * @param {Function} callback
+ * @param {Object} [options]
+ * @param {number} [options.timeout] If set, the callback will be scheduled for
+ *  immediate execution after this amount of time (in milliseconds) if it didn't run
+ *  by that time.
+ */
+mw.requestIdleCallback = window.requestIdleCallback ?
+       // Bind because it throws TypeError if context is not window
+       window.requestIdleCallback.bind( window ) :
+       mw.requestIdleCallbackInternal;
+// Note: Polyfill was previously disabled due to
+// https://bugs.chromium.org/p/chromium/issues/detail?id=647870
+// See also <http://codepen.io/Krinkle/full/XNGEvv>
index 9c08b9f..57cc073 100644 (file)
@@ -73,6 +73,47 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                return $store;
        }
 
+       /**
+        * @dataProvider provideConstructor
+        * @param int $stage
+        * @param string|null $exceptionMsg
+        */
+       public function testConstructor( $stage, $exceptionMsg ) {
+               try {
+                       $m = new CommentStore( Language::factory( 'qqx' ), $stage );
+                       if ( $exceptionMsg !== null ) {
+                               $this->fail( 'Expected exception not thrown' );
+                       }
+                       $this->assertInstanceOf( CommentStore::class, $m );
+               } catch ( InvalidArgumentException $ex ) {
+                       $this->assertSame( $exceptionMsg, $ex->getMessage() );
+               }
+       }
+
+       public static function provideConstructor() {
+               return [
+                       [ 0, '$stage must include a write mode' ],
+                       [ SCHEMA_COMPAT_READ_OLD, '$stage must include a write mode' ],
+                       [ SCHEMA_COMPAT_READ_NEW, '$stage must include a write mode' ],
+                       [ SCHEMA_COMPAT_READ_BOTH, '$stage must include a write mode' ],
+
+                       [ SCHEMA_COMPAT_WRITE_OLD, '$stage must include a read mode' ],
+                       [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_OLD, null ],
+                       [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_NEW, null ],
+                       [ SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_BOTH, null ],
+
+                       [ SCHEMA_COMPAT_WRITE_NEW, '$stage must include a read mode' ],
+                       [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_OLD, null ],
+                       [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_NEW, null ],
+                       [ SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_BOTH, null ],
+
+                       [ SCHEMA_COMPAT_WRITE_BOTH, '$stage must include a read mode' ],
+                       [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, null ],
+                       [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, null ],
+                       [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_BOTH, null ],
+               ];
+       }
+
        /**
         * @dataProvider provideGetFields
         * @param int $stage
@@ -115,6 +156,14 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_NEW, 'ipb_reason',
                                [ 'ipb_reason_id' => 'ipb_reason_id' ],
                        ],
+                       'Simple table, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'ipb_reason',
+                               [ 'ipb_reason_text' => 'ipb_reason', 'ipb_reason_data' => 'NULL', 'ipb_reason_cid' => 'NULL' ],
+                       ],
+                       'Simple table, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'ipb_reason',
+                               [ 'ipb_reason_id' => 'ipb_reason_id' ],
+                       ],
 
                        'Revision, old' => [
                                MIGRATION_OLD, 'rev_comment',
@@ -136,6 +185,18 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_NEW, 'rev_comment',
                                [ 'rev_comment_pk' => 'rev_id' ],
                        ],
+                       'Revision, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'rev_comment',
+                               [
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                               ],
+                       ],
+                       'Revision, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'rev_comment',
+                               [ 'rev_comment_pk' => 'rev_id' ],
+                       ],
 
                        'Image, old' => [
                                MIGRATION_OLD, 'img_description',
@@ -165,6 +226,20 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        'img_description_id' => 'img_description_id'
                                ],
                        ],
+                       'Image, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'img_description',
+                               [
+                                       'img_description_text' => 'img_description',
+                                       'img_description_data' => 'NULL',
+                                       'img_description_cid' => 'NULL',
+                               ],
+                       ],
+                       'Image, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'img_description',
+                               [
+                                       'img_description_id' => 'img_description_id'
+                               ],
+                       ],
                ];
        }
 
@@ -244,6 +319,30 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        ],
                                ],
                        ],
+                       'Simple table, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'ipb_reason', [
+                                       'tables' => [],
+                                       'fields' => [
+                                               'ipb_reason_text' => 'ipb_reason',
+                                               'ipb_reason_data' => 'NULL',
+                                               'ipb_reason_cid' => 'NULL',
+                                       ],
+                                       'joins' => [],
+                               ],
+                       ],
+                       'Simple table, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'ipb_reason', [
+                                       'tables' => [ 'comment_ipb_reason' => 'comment' ],
+                                       'fields' => [
+                                               'ipb_reason_text' => 'comment_ipb_reason.comment_text',
+                                               'ipb_reason_data' => 'comment_ipb_reason.comment_data',
+                                               'ipb_reason_cid' => 'comment_ipb_reason.comment_id',
+                                       ],
+                                       'joins' => [
+                                               'comment_ipb_reason' => [ 'JOIN', 'comment_ipb_reason.comment_id = ipb_reason_id' ],
+                                       ],
+                               ],
+                       ],
 
                        'Revision, old' => [
                                MIGRATION_OLD, 'rev_comment', [
@@ -310,6 +409,35 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        ],
                                ],
                        ],
+                       'Revision, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'rev_comment', [
+                                       'tables' => [],
+                                       'fields' => [
+                                               'rev_comment_text' => 'rev_comment',
+                                               'rev_comment_data' => 'NULL',
+                                               'rev_comment_cid' => 'NULL',
+                                       ],
+                                       'joins' => [],
+                               ],
+                       ],
+                       'Revision, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'rev_comment', [
+                                       'tables' => [
+                                               'temp_rev_comment' => 'revision_comment_temp',
+                                               'comment_rev_comment' => 'comment',
+                                       ],
+                                       'fields' => [
+                                               'rev_comment_text' => 'comment_rev_comment.comment_text',
+                                               'rev_comment_data' => 'comment_rev_comment.comment_data',
+                                               'rev_comment_cid' => 'comment_rev_comment.comment_id',
+                                       ],
+                                       'joins' => [
+                                               'temp_rev_comment' => [ 'JOIN', 'temp_rev_comment.revcomment_rev = rev_id' ],
+                                               'comment_rev_comment' => [ 'JOIN',
+                                                       'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id' ],
+                                       ],
+                               ],
+                       ],
 
                        'Image, old' => [
                                MIGRATION_OLD, 'img_description', [
@@ -373,6 +501,34 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        ],
                                ],
                        ],
+                       'Image, write-both/read-old' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD, 'img_description', [
+                                       'tables' => [],
+                                       'fields' => [
+                                               'img_description_text' => 'img_description',
+                                               'img_description_data' => 'NULL',
+                                               'img_description_cid' => 'NULL',
+                                       ],
+                                       'joins' => [],
+                               ],
+                       ],
+                       'Image, write-both/read-new' => [
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, 'img_description', [
+                                       'tables' => [
+                                               'comment_img_description' => 'comment',
+                                       ],
+                                       'fields' => [
+                                               'img_description_text' => 'comment_img_description.comment_text',
+                                               'img_description_data' => 'comment_img_description.comment_data',
+                                               'img_description_cid' => 'comment_img_description.comment_id',
+                                       ],
+                                       'joins' => [
+                                               'comment_img_description' => [ 'JOIN',
+                                                       'comment_img_description.comment_id = img_description_id',
+                                               ],
+                                       ],
+                               ],
+                       ],
                ];
        }
 
@@ -413,6 +569,15 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_NEW ],
                        MIGRATION_WRITE_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
                        MIGRATION_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
+
+                       SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD => [
+                               MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+                       ],
+                       SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW => [
+                               MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+                       ],
                ];
 
                foreach ( $stages as $writeStage => $possibleReadStages ) {
@@ -427,12 +592,12 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                $fields = $wstore->insert( $this->db, $key, $comment, $data );
                        }
 
-                       if ( $writeStage <= MIGRATION_WRITE_BOTH ) {
+                       if ( $writeStage & SCHEMA_COMPAT_WRITE_OLD ) {
                                $this->assertSame( $expect['text'], $fields[$key], "old field, stage=$writeStage" );
                        } else {
                                $this->assertArrayNotHasKey( $key, $fields, "old field, stage=$writeStage" );
                        }
-                       if ( $writeStage >= MIGRATION_WRITE_BOTH && !$usesTemp ) {
+                       if ( ( $writeStage & SCHEMA_COMPAT_WRITE_NEW ) && !$usesTemp ) {
                                $this->assertArrayHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
                        } else {
                                $this->assertArrayNotHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
@@ -463,13 +628,17 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        $queryInfo['joins']
                                );
 
+                               $expectForCombination = (
+                                       ( $writeStage & SCHEMA_COMPAT_WRITE_BOTH ) === SCHEMA_COMPAT_WRITE_OLD ||
+                                       ( $readStage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD
+                               ) ? $expectOld : $expect;
                                $this->assertComment(
-                                       $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+                                       $expectForCombination,
                                        $rstore->getCommentLegacy( $this->db, $key, $fieldRow ),
                                        "w=$writeStage, r=$readStage, from getFields()"
                                );
                                $this->assertComment(
-                                       $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+                                       $expectForCombination,
                                        $rstore->getComment( $key, $joinRow ),
                                        "w=$writeStage, r=$readStage, from getJoin()"
                                );
@@ -503,6 +672,15 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_NEW ],
                        MIGRATION_WRITE_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
                        MIGRATION_NEW => [ MIGRATION_WRITE_BOTH, MIGRATION_WRITE_NEW, MIGRATION_NEW ],
+
+                       SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD => [
+                               MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+                       ],
+                       SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW => [
+                               MIGRATION_OLD, SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD,
+                               SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW, MIGRATION_NEW
+                       ],
                ];
 
                foreach ( $stages as $writeStage => $possibleReadStages ) {
@@ -517,12 +695,12 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                $fields = $wstore->insert( $this->db, $comment, $data );
                        }
 
-                       if ( $writeStage <= MIGRATION_WRITE_BOTH ) {
+                       if ( $writeStage & SCHEMA_COMPAT_WRITE_OLD ) {
                                $this->assertSame( $expect['text'], $fields[$key], "old field, stage=$writeStage" );
                        } else {
                                $this->assertArrayNotHasKey( $key, $fields, "old field, stage=$writeStage" );
                        }
-                       if ( $writeStage >= MIGRATION_WRITE_BOTH && !$usesTemp ) {
+                       if ( ( $writeStage & SCHEMA_COMPAT_WRITE_NEW ) && !$usesTemp ) {
                                $this->assertArrayHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
                        } else {
                                $this->assertArrayNotHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
@@ -553,13 +731,17 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                        $queryInfo['joins']
                                );
 
+                               $expectForCombination = (
+                                       ( $writeStage & SCHEMA_COMPAT_WRITE_BOTH ) === SCHEMA_COMPAT_WRITE_OLD ||
+                                       ( $readStage & SCHEMA_COMPAT_READ_BOTH ) === SCHEMA_COMPAT_READ_OLD
+                               ) ? $expectOld : $expect;
                                $this->assertComment(
-                                       $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+                                       $expectForCombination,
                                        $rstore->getCommentLegacy( $this->db, $fieldRow ),
                                        "w=$writeStage, r=$readStage, from getFields()"
                                );
                                $this->assertComment(
-                                       $writeStage === MIGRATION_OLD || $readStage === MIGRATION_OLD ? $expectOld : $expect,
+                                       $expectForCombination,
                                        $rstore->getComment( $joinRow ),
                                        "w=$writeStage, r=$readStage, from getJoin()"
                                );
@@ -725,6 +907,9 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                        'MIGRATION_WRITE_BOTH' => [ MIGRATION_WRITE_BOTH ],
                        'MIGRATION_WRITE_NEW' => [ MIGRATION_WRITE_NEW ],
                        'MIGRATION_NEW' => [ MIGRATION_NEW ],
+
+                       'SCHEMA_COMPAT write-both/read-old' => [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_OLD ],
+                       'SCHEMA_COMPAT write-both/read-new' => [ SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_COMPAT_READ_NEW ],
                ];
        }
 
index 4401410..35d06dd 100644 (file)
@@ -566,11 +566,11 @@ class HtmlTest extends MediaWikiTestCase {
                        '<div class="errorbox">err</div>'
                );
                $this->assertEquals(
-                       Html::errorBox( 'err', 'heading' ),
-                       '<div class="errorbox"><h2>heading</h2>err</div>'
+                       Html::errorBox( 'err', 'heading', 'errorbox-custom-class' ),
+                       '<div class="errorbox errorbox-custom-class"><h2>heading</h2>err</div>'
                );
                $this->assertEquals(
-                       Html::errorBox( 'err', '0' ),
+                       Html::errorBox( 'err', '0', '' ),
                        '<div class="errorbox"><h2>0</h2>err</div>'
                );
        }
index 4c92545..6fff68f 100644 (file)
@@ -316,8 +316,8 @@ class DatabaseMysqlBaseTest extends PHPUnit\Framework\TestCase {
         * @dataProvider provideCommonDomainGTIDs
         * @covers Wikimedia\Rdbms\MySQLMasterPos
         */
-       public function testCommonGtidDomains( MySQLMasterPos $pos, MySQLMasterPos $ref, $gtids ) {
-               $this->assertEquals( $gtids, MySQLMasterPos::getCommonDomainGTIDs( $pos, $ref ) );
+       public function testGetRelevantActiveGTIDs( MySQLMasterPos $pos, MySQLMasterPos $ref, $gtids ) {
+               $this->assertEquals( $gtids, MySQLMasterPos::getRelevantActiveGTIDs( $pos, $ref ) );
        }
 
        public static function provideCommonDomainGTIDs() {
@@ -327,6 +327,12 @@ class DatabaseMysqlBaseTest extends PHPUnit\Framework\TestCase {
                                new MySQLMasterPos( '255-11-1000', 1 ),
                                [ '255-13-99' ]
                        ],
+                       [
+                               ( new MySQLMasterPos( '255-13-99,256-12-50,257-14-50', 1 ) )
+                                       ->setActiveDomain( 257 ),
+                               new MySQLMasterPos( '255-11-1000,257-14-30', 1 ),
+                               [ '257-14-50' ]
+                       ],
                        [
                                new MySQLMasterPos(
                                        '2E11FA47-71CA-11E1-9E33-C80AA9429562:1-5,' .
index dad9f1e..6ebbc3a 100644 (file)
@@ -292,9 +292,8 @@ TEXT
                        ->disableOriginalConstructor()
                        ->getMock();
                $image->method( 'getDataUri' )
-                       ->will( $this->returnValue( $dataUriReturnValue ) );
-               $image->expects( $this->any() )
-                       ->method( 'getUrl' )
+                       ->willReturn( $dataUriReturnValue );
+               $image->method( 'getUrl' )
                        ->will( $this->returnValueMap( [
                                [ $context, 'load.php', null, 'original', 'original.svg' ],
                                [ $context, 'load.php', null, 'rasterized', 'rasterized.png' ],
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderImageTest.php
deleted file mode 100644 (file)
index c3fc55a..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * @group ResourceLoader
- */
-class ResourceLoaderImageTest extends ResourceLoaderTestCase {
-
-       protected $imagesPath;
-
-       protected function setUp() {
-               parent::setUp();
-               $this->imagesPath = __DIR__ . '/../../data/resourceloader';
-       }
-
-       protected function getTestImage( $name ) {
-               $options = ResourceLoaderImageModuleTest::$commonImageData[$name];
-               $fileDescriptor = is_string( $options ) ? $options : $options['file'];
-               $allowedVariants = ( is_array( $options ) && isset( $options['variants'] ) ) ?
-                       $options['variants'] : [];
-               $variants = array_fill_keys( $allowedVariants, [ 'color' => 'red' ] );
-               return new ResourceLoaderImageTestable(
-                       $name,
-                       'test',
-                       $fileDescriptor,
-                       $this->imagesPath,
-                       $variants
-               );
-       }
-
-       public static function provideGetPath() {
-               return [
-                       [ 'abc', 'en', 'abc.gif' ],
-                       [ 'abc', 'he', 'abc.gif' ],
-                       [ 'def', 'en', 'def.svg' ],
-                       [ 'def', 'he', 'def.svg' ],
-                       [ 'ghi', 'en', 'ghi.svg' ],
-                       [ 'ghi', 'he', 'jkl.svg' ],
-                       [ 'mno', 'en', 'mno-ltr.svg' ],
-                       [ 'mno', 'ar', 'mno-rtl.svg' ],
-                       [ 'mno', 'he', 'mno-ltr.svg' ],
-                       [ 'pqr', 'en', 'pqr-b.svg' ],
-                       [ 'pqr', 'en-gb', 'pqr-b.svg' ],
-                       [ 'pqr', 'de', 'pqr-f.svg' ],
-                       [ 'pqr', 'de-formal', 'pqr-f.svg' ],
-                       [ 'pqr', 'ar', 'pqr-f.svg' ],
-                       [ 'pqr', 'fr', 'pqr-a.svg' ],
-                       [ 'pqr', 'he', 'pqr-a.svg' ],
-               ];
-       }
-
-       /**
-        * @covers ResourceLoaderImage::getPath
-        * @dataProvider provideGetPath
-        */
-       public function testGetPath( $imageName, $languageCode, $path ) {
-               static $dirMap = [
-                       'en' => 'ltr',
-                       'en-gb' => 'ltr',
-                       'de' => 'ltr',
-                       'de-formal' => 'ltr',
-                       'fr' => 'ltr',
-                       'he' => 'rtl',
-                       'ar' => 'rtl',
-               ];
-
-               $image = $this->getTestImage( $imageName );
-               $context = $this->getResourceLoaderContext( [
-                       'lang' => $languageCode,
-                       'dir' => $dirMap[$languageCode],
-               ] );
-
-               $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path );
-       }
-
-       /**
-        * @covers ResourceLoaderImage::getExtension
-        * @covers ResourceLoaderImage::getMimeType
-        */
-       public function testGetExtension() {
-               $image = $this->getTestImage( 'def' );
-               $this->assertEquals( $image->getExtension(), 'svg' );
-               $this->assertEquals( $image->getExtension( 'original' ), 'svg' );
-               $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' );
-               $image = $this->getTestImage( 'abc' );
-               $this->assertEquals( $image->getExtension(), 'gif' );
-               $this->assertEquals( $image->getExtension( 'original' ), 'gif' );
-               $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' );
-       }
-
-       /**
-        * @covers ResourceLoaderImage::getImageData
-        * @covers ResourceLoaderImage::variantize
-        * @covers ResourceLoaderImage::massageSvgPathdata
-        */
-       public function testGetImageData() {
-               $context = $this->getResourceLoaderContext();
-
-               $image = $this->getTestImage( 'def' );
-               $data = file_get_contents( $this->imagesPath . '/def.svg' );
-               $dataConstructive = file_get_contents( $this->imagesPath . '/def_variantize.svg' );
-               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
-               $this->assertEquals(
-                       $image->getImageData( $context, 'destructive', 'original' ),
-                       $dataConstructive
-               );
-               // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
-               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' );
-
-               $image = $this->getTestImage( 'abc' );
-               $data = file_get_contents( $this->imagesPath . '/abc.gif' );
-               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
-               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data );
-       }
-
-       /**
-        * @covers ResourceLoaderImage::massageSvgPathdata
-        */
-       public function testMassageSvgPathdata() {
-               $image = $this->getTestImage( 'ghi' );
-               $data = file_get_contents( $this->imagesPath . '/ghi.svg' );
-               $dataMassaged = file_get_contents( $this->imagesPath . '/ghi_massage.svg' );
-               $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged );
-       }
-}
-
-class ResourceLoaderImageTestable extends ResourceLoaderImage {
-       // Make some protected methods public
-       public function massageSvgPathdata( $svg ) {
-               return parent::massageSvgPathdata( $svg );
-       }
-
-       // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
-       public function rasterize( $svg ) {
-               return 'RASTERIZESTUB';
-       }
-}
diff --git a/tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php b/tests/phpunit/unit/includes/resourceloader/ResourceLoaderImageTest.php
new file mode 100644 (file)
index 0000000..5265b3e
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderImageTest extends MediaWikiUnitTestCase {
+
+       private $imagesPath;
+
+       protected function setUp() {
+               parent::setUp();
+               $this->imagesPath = __DIR__ . '/../../../data/resourceloader';
+       }
+
+       protected function tearDown() {
+               Language::$dataCache = null;
+       }
+
+       protected function getTestImage( $name ) {
+               $options = ResourceLoaderImageModuleTest::$commonImageData[$name];
+               $fileDescriptor = is_string( $options ) ? $options : $options['file'];
+               $allowedVariants = ( is_array( $options ) && isset( $options['variants'] ) ) ?
+                       $options['variants'] : [];
+               $variants = array_fill_keys( $allowedVariants, [ 'color' => 'red' ] );
+               return new ResourceLoaderImageTestable(
+                       $name,
+                       'test',
+                       $fileDescriptor,
+                       $this->imagesPath,
+                       $variants
+               );
+       }
+
+       public static function provideGetPath() {
+               return [
+                       [ 'abc', 'en', 'abc.gif' ],
+                       [ 'abc', 'he', 'abc.gif' ],
+                       [ 'def', 'en', 'def.svg' ],
+                       [ 'def', 'he', 'def.svg' ],
+                       [ 'ghi', 'en', 'ghi.svg' ],
+                       [ 'ghi', 'he', 'jkl.svg' ],
+                       [ 'mno', 'en', 'mno-ltr.svg' ],
+                       [ 'mno', 'ar', 'mno-rtl.svg' ],
+                       [ 'mno', 'he', 'mno-ltr.svg' ],
+                       [ 'pqr', 'en', 'pqr-b.svg' ],
+                       [ 'pqr', 'en-gb', 'pqr-b.svg' ],
+                       [ 'pqr', 'de', 'pqr-f.svg' ],
+                       [ 'pqr', 'de-formal', 'pqr-f.svg' ],
+                       [ 'pqr', 'ar', 'pqr-f.svg' ],
+                       [ 'pqr', 'fr', 'pqr-a.svg' ],
+                       [ 'pqr', 'he', 'pqr-a.svg' ],
+               ];
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getPath
+        * @dataProvider provideGetPath
+        */
+       public function testGetPath( $imageName, $languageCode, $path ) {
+               static $dirMap = [
+                       'en' => 'ltr',
+                       'en-gb' => 'ltr',
+                       'de' => 'ltr',
+                       'de-formal' => 'ltr',
+                       'fr' => 'ltr',
+                       'he' => 'rtl',
+                       'ar' => 'rtl',
+               ];
+
+               $image = $this->getTestImage( $imageName );
+               $context = new DerivativeResourceLoaderContext(
+                       $this->createMock( ResourceLoaderContext::class )
+               );
+               $context->setLanguage( $languageCode );
+               $context->setDirection( $dirMap[$languageCode] );
+               Language::$dataCache = $this->createMock( LocalisationCache::class );
+               Language::$dataCache->method( 'getItem' )->will( $this->returnCallback( function ( $code ) {
+                       return ( [
+                               'en-gb' => [ 'en' ],
+                               'de-formal' => [ 'de' ],
+                       ] )[ $code ] ?? [];
+               } ) );
+
+               $this->assertEquals( $image->getPath( $context ), $this->imagesPath . '/' . $path );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getExtension
+        * @covers ResourceLoaderImage::getMimeType
+        */
+       public function testGetExtension() {
+               $image = $this->getTestImage( 'def' );
+               $this->assertEquals( $image->getExtension(), 'svg' );
+               $this->assertEquals( $image->getExtension( 'original' ), 'svg' );
+               $this->assertEquals( $image->getExtension( 'rasterized' ), 'png' );
+               $image = $this->getTestImage( 'abc' );
+               $this->assertEquals( $image->getExtension(), 'gif' );
+               $this->assertEquals( $image->getExtension( 'original' ), 'gif' );
+               $this->assertEquals( $image->getExtension( 'rasterized' ), 'gif' );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::getImageData
+        * @covers ResourceLoaderImage::variantize
+        * @covers ResourceLoaderImage::massageSvgPathdata
+        */
+       public function testGetImageData() {
+               $context = $this->createMock( ResourceLoaderContext::class );
+
+               $image = $this->getTestImage( 'def' );
+               $data = file_get_contents( $this->imagesPath . '/def.svg' );
+               $dataConstructive = file_get_contents( $this->imagesPath . '/def_variantize.svg' );
+               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+               $this->assertEquals(
+                       $image->getImageData( $context, 'destructive', 'original' ),
+                       $dataConstructive
+               );
+               // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), 'RASTERIZESTUB' );
+
+               $image = $this->getTestImage( 'abc' );
+               $data = file_get_contents( $this->imagesPath . '/abc.gif' );
+               $this->assertEquals( $image->getImageData( $context, null, 'original' ), $data );
+               $this->assertEquals( $image->getImageData( $context, null, 'rasterized' ), $data );
+       }
+
+       /**
+        * @covers ResourceLoaderImage::massageSvgPathdata
+        */
+       public function testMassageSvgPathdata() {
+               $image = $this->getTestImage( 'ghi' );
+               $data = file_get_contents( $this->imagesPath . '/ghi.svg' );
+               $dataMassaged = file_get_contents( $this->imagesPath . '/ghi_massage.svg' );
+               $this->assertEquals( $image->massageSvgPathdata( $data ), $dataMassaged );
+       }
+}
+
+class ResourceLoaderImageTestable extends ResourceLoaderImage {
+       // Make some protected methods public
+       public function massageSvgPathdata( $svg ) {
+               return parent::massageSvgPathdata( $svg );
+       }
+
+       // Stub, since we don't know if we even have a SVG handler, much less what exactly it'll output
+       public function rasterize( $svg ) {
+               return 'RASTERIZESTUB';
+       }
+}
index 4c6e7c9..16c3183 100644 (file)
                        [ 'test.load.circleB', '0', [ 'test.load.circleC' ] ],
                        [ 'test.load.circleC', '0', [ 'test.load.circleA' ] ]
                ] );
-               this.sandbox.stub( mw, 'track', function ( topic, data ) {
+               this.sandbox.stub( mw, 'trackError', function ( topic, data ) {
                        capture.push( {
                                topic: topic,
                                error: data.exception && data.exception.message,
                mw.loader.register( [
                        [ 'test.load.circleDirect', '0', [ 'test.load.circleDirect' ] ]
                ] );
-               this.sandbox.stub( mw, 'track', function ( topic, data ) {
+               this.sandbox.stub( mw, 'trackError', function ( topic, data ) {
                        capture.push( {
                                topic: topic,
                                error: data.exception && data.exception.message,
 
        QUnit.test( '.load() - Error: Unregistered', function ( assert ) {
                var capture = [];
-               this.sandbox.stub( mw, 'track', function ( topic, data ) {
-                       capture.push( {
-                               topic: topic,
-                               error: data.exception && data.exception.message,
-                               source: data.source
-                       } );
+               this.sandbox.stub( mw.log, 'warn', function ( str ) {
+                       capture.push( str );
                } );
 
                mw.loader.load( 'test.load.unreg' );
-               assert.deepEqual(
-                       [ {
-                               topic: 'resourceloader.exception',
-                               error: 'Unknown module: test.load.unreg',
-                               source: 'resolve'
-                       } ],
-                       capture
-               );
+               assert.deepEqual( capture, [ 'Skipped unresolvable module test.load.unreg' ] );
        } );
 
        // Regression test for T36853
        QUnit.test( '.load() - Error: Missing dependency', function ( assert ) {
                var capture = [];
-               this.sandbox.stub( mw, 'track', function ( topic, data ) {
+               this.sandbox.stub( mw, 'trackError', function ( topic, data ) {
                        capture.push( {
                                topic: topic,
                                error: data.exception && data.exception.message,
                this.useStubClock();
 
                // Don't actually emit an error event
-               this.sandbox.stub( mw, 'track' );
+               this.sandbox.stub( mw, 'trackError' );
 
                mw.loader.register( [
                        [ 'test.module1', '0' ],
                }, {}, {} );
                this.tick();
 
-               assert.strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'Expected "error" state for test.module1' );
-               assert.strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'Expected "error" state for test.module2' );
-               assert.strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'Expected "error" state for test.module3' );
+               assert.strictEqual( mw.loader.getState( 'test.module1' ), 'error', 'State of test.module1' );
+               assert.strictEqual( mw.loader.getState( 'test.module2' ), 'error', 'State of test.module2' );
+               assert.strictEqual( mw.loader.getState( 'test.module3' ), 'error', 'State of test.module3' );
 
-               assert.strictEqual( mw.track.callCount, 1 );
+               assert.strictEqual( mw.trackError.callCount, 1 );
        } );
 
        QUnit.test( 'Out-of-order implementation', function ( assert ) {
 
                mw.loader.implement( 'test.module4', function () {} );
                this.tick();
-               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
-               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'Expected "registered" state for test.module6' );
+               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'State of test.module4' );
+               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'State of test.module5' );
+               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'registered', 'State of test.module6' );
 
                mw.loader.implement( 'test.module6', function () {} );
                this.tick();
-               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'Expected "registered" state for test.module5' );
-               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'Expected "loaded" state for test.module6' );
+               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'State of test.module4' );
+               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'registered', 'State of test.module5' );
+               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'loaded', 'State of test.module6' );
 
                mw.loader.implement( 'test.module5', function () {} );
                this.tick();
-               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'Expected "ready" state for test.module4' );
-               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'Expected "ready" state for test.module5' );
-               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'Expected "ready" state for test.module6' );
+               assert.strictEqual( mw.loader.getState( 'test.module4' ), 'ready', 'State of test.module4' );
+               assert.strictEqual( mw.loader.getState( 'test.module5' ), 'ready', 'State of test.module5' );
+               assert.strictEqual( mw.loader.getState( 'test.module6' ), 'ready', 'State of test.module6' );
        } );
 
        QUnit.test( 'Missing dependency', function ( assert ) {