Merge "RCFilters: make isStructuredFilterUiEnabled public"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 5 Sep 2017 22:20:42 +0000 (22:20 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 5 Sep 2017 22:20:42 +0000 (22:20 +0000)
158 files changed:
RELEASE-NOTES-1.30
autoload.php
includes/Block.php
includes/CommentStore.php
includes/DefaultSettings.php
includes/EditPage.php
includes/MovePage.php
includes/Revision.php
includes/actions/CreditsAction.php
includes/actions/InfoAction.php
includes/api/ApiEditPage.php
includes/api/ApiQuery.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRevisions.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiUpload.php
includes/api/i18n/gl.json
includes/api/i18n/ja.json
includes/api/i18n/pt-br.json
includes/changes/EnhancedChangesList.php
includes/changes/RecentChange.php
includes/deferred/DeferredUpdates.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/externalstore/ExternalStoreDB.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/import/WikiRevision.php
includes/installer/DatabaseUpdater.php
includes/installer/MssqlInstaller.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/pt-br.json
includes/installer/i18n/vi.json
includes/jobqueue/JobQueueDB.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/rdbms/ChronologyProtector.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/stats/SamplingStatsdClient.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/logging/LogEntry.php
includes/logging/LogPage.php
includes/media/TransformationalImageHandler.php
includes/page/PageArchive.php
includes/page/WikiPage.php
includes/rcfeed/FormattedRCFeed.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevDelArchivedFileItem.php
includes/revisiondelete/RevDelList.php
includes/site/DBSiteStore.php
includes/skins/Skin.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialChangeContentModel.php
includes/specials/SpecialContributions.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialUpload.php
includes/specials/pagers/BlockListPager.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/ProtectedPagesPager.php
includes/upload/UploadStash.php
includes/user/User.php
languages/i18n/ais.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/id.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/kab.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/mwl.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/archives/patch-l10n_cache-primary-key.sql [new file with mode: 0644]
maintenance/archives/patch-log_search-rename-index.sql [deleted file]
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/populateIpChanges.php [new file with mode: 0644]
maintenance/sqlite/archives/patch-l10n_cache-primary-key.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-log_search-rename-index.sql [deleted file]
maintenance/tables.sql
resources/Resources.php
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MarkSeenButtonWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.WatchlistTopSectionWidget.js
resources/src/mediawiki.special/mediawiki.special.changeslist.legend.js
resources/src/mediawiki.widgets/mw.widgets.UsersMultiselectWidget.js
resources/src/mediawiki/mediawiki.js
tests/parser/ParserTestRunner.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/CommentStoreTest.php
tests/phpunit/includes/PageArchiveTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php
tests/phpunit/includes/page/WikiPageTest.php
tests/phpunit/includes/specials/ContribsPagerTest.php
tests/phpunit/includes/specials/SpecialPageDataTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_PageTest.php
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js

index d38a34d..b478f51 100644 (file)
@@ -25,6 +25,8 @@ section).
   to plain class names, using the 'factory' key in the module description
   array. This allows dependency injection to be used for ResourceLoader modules.
 * $wgExceptionHooks has been removed.
+* (T163562) $wgRangeContributionsCIDRLimit was introduced to control the size
+  of IP ranges that can be queried at Special:Contributions.
 * (T45547) $wgUsePigLatinVariant added (off by default).
 * (T152540) MediaWiki now supports a section ID escaping style that allows to display
   non-Latin characters verbatim on many modern browsers. This is controlled by the
@@ -44,6 +46,8 @@ section).
 * (T37247) Output from Parser::parse() will now be wrapped in a div with
   class="mw-parser-output" by default. This may be changed or disabled using
   ParserOptions::setWrapOutputClass().
+* (T163562) Added ability to search for contributions within an IP ranges
+  at Special:Contributions.
 * Added 'ChangeTagsAllowedAdd' hook, enabling extensions to allow software-
   specific tags to be added by users.
 * Added a 'ParserOptionsRegister' hook to allow extensions to register
@@ -189,6 +193,10 @@ changes to languages because of Phabricator reports.
 * MWMemcached and MemCachedClientforWiki classes (deprecated in 1.27) were removed.
   The MemcachedClient class should be used instead.
 * EditPage::isOouiEnabled() is deprecated and will always return true.
+* EditPage::getSummaryInput() and ::getSummaryInputOOUI() are deprecated. Please
+  use ::getSummaryInputWidget() instead.
+* EditPage::getCheckboxes() and ::getCheckboxesOOUI() are deprecated. Please
+  use ::getCheckboxesWidget() instead.
 * Parser::getRandomString() (deprecated in 1.26) was removed.
 * Parser::uniqPrefix() (deprecated in 1.26) was removed.
 * Parser::extractTagsAndParams() now only accepts three arguments. The fourth,
@@ -199,6 +207,8 @@ changes to languages because of Phabricator reports.
   templatelinks, text, transcache, user_former_groups, user_properties.
 * IDatabase::nextSequenceValue() is no longer needed by any database backends
   (formerly it was needed by PostgreSQL and Oracle), and is now deprecated.
+* (T146591) The lc_lang_key index on the l10n_cache table has been changed into a
+  PRIMARY KEY.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index eab8e45..c7f13d5 100644 (file)
@@ -1117,6 +1117,7 @@ $wgAutoloadLocalClasses = [
        'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
        'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
        'PopulateInterwiki' => __DIR__ . '/maintenance/populateInterwiki.php',
+       'PopulateIpChanges' => __DIR__ . '/maintenance/populateIpChanges.php',
        'PopulateLogSearch' => __DIR__ . '/maintenance/populateLogSearch.php',
        'PopulateLogUsertext' => __DIR__ . '/maintenance/populateLogUsertext.php',
        'PopulatePPSortKey' => __DIR__ . '/maintenance/populatePPSortKey.php',
index 0b17e93..40095f1 100644 (file)
@@ -493,7 +493,6 @@ class Block {
                }
 
                $row = $this->getDatabaseArray( $dbw );
-               $row['ipb_id'] = $dbw->nextSequenceValue( "ipblocks_ipb_id_seq" );
 
                $dbw->insert( 'ipblocks', $row, __METHOD__, [ 'IGNORE' ] );
                $affected = $dbw->affectedRows();
index 0c86c1e..2ed21d1 100644 (file)
@@ -29,6 +29,12 @@ use Wikimedia\Rdbms\IDatabase;
  */
 class CommentStore {
 
+       /** Maximum length of a comment. Longer comments will be truncated. */
+       const MAX_COMMENT_LENGTH = 65535;
+
+       /** Maximum length of serialized data. Longer data will result in an exception. */
+       const MAX_DATA_LENGTH = 65535;
+
        /**
         * Define fields that use temporary tables for transitional purposes
         * @var array Keys are '$key', values are arrays with four fields:
@@ -68,15 +74,21 @@ class CommentStore {
        /** @var array|null Cache for `self::getJoin()` */
        protected $joinCache = null;
 
+       /** @var Language Language to use for comment truncation */
+       protected $lang;
+
        /**
         * @param string $key A key such as "rev_comment" identifying the comment
         *  field being fetched.
+        * @param Language $lang Language to use for comment truncation. Defaults
+        *  to $wgContLang.
         */
-       public function __construct( $key ) {
-               global $wgCommentTableSchemaMigrationStage;
+       public function __construct( $key, Language $lang = null ) {
+               global $wgCommentTableSchemaMigrationStage, $wgContLang;
 
                $this->key = $key;
                $this->stage = $wgCommentTableSchemaMigrationStage;
+               $this->lang = $lang ?: $wgContLang;
        }
 
        /**
@@ -376,6 +388,9 @@ class CommentStore {
                        }
                }
 
+               # Truncate comment in a Unicode-sensitive manner
+               $comment->text = $this->lang->truncate( $comment->text, self::MAX_COMMENT_LENGTH );
+
                if ( $this->stage > MIGRATION_OLD && !$comment->id ) {
                        $dbData = $comment->data;
                        if ( !$comment->message instanceof RawMessage ) {
@@ -386,6 +401,11 @@ class CommentStore {
                        }
                        if ( $dbData !== null ) {
                                $dbData = FormatJson::encode( (object)$dbData, false, FormatJson::ALL_OK );
+                               $len = strlen( $dbData );
+                               if ( $len > self::MAX_DATA_LENGTH ) {
+                                       $max = self::MAX_DATA_LENGTH;
+                                       throw new OverflowException( "Comment data is too long ($len bytes, maximum is $max)" );
+                               }
                        }
 
                        $hash = self::hash( $comment->text, $dbData );
@@ -400,11 +420,9 @@ class CommentStore {
                                __METHOD__
                        );
                        if ( !$comment->id ) {
-                               $comment->id = $dbw->nextSequenceValue( 'comment_comment_id_seq' );
                                $dbw->insert(
                                        'comment',
                                        [
-                                               'comment_id' => $comment->id,
                                                'comment_hash' => $hash,
                                                'comment_text' => $comment->text,
                                                'comment_data' => $dbData,
@@ -432,7 +450,7 @@ class CommentStore {
                $comment = $this->createComment( $dbw, $comment, $data );
 
                if ( $this->stage <= MIGRATION_WRITE_BOTH ) {
-                       $fields[$this->key] = $comment->text;
+                       $fields[$this->key] = $this->lang->truncate( $comment->text, 255 );
                }
 
                if ( $this->stage >= MIGRATION_WRITE_BOTH ) {
@@ -459,7 +477,7 @@ class CommentStore {
        }
 
        /**
-        * Prepare for the insertion of a row with a comment
+        * Insert a comment in preparation for a row that references it
         *
         * @note It's recommended to include both the call to this method and the
         *  row insert in the same transaction.
@@ -478,7 +496,7 @@ class CommentStore {
        }
 
        /**
-        * Prepare for the insertion of a row with a comment and temporary table
+        * Insert a comment in a temporary table in preparation for a row that references it
         *
         * This is currently needed for "rev_comment" and "img_description". In the
         * future that requirement will be removed.
index cf3e569..cf8e089 100644 (file)
@@ -8727,6 +8727,18 @@ $wgCSPFalsePositiveUrls = [
        'https://ad.lkqd.net/vpaid/vpaid.js' => true,
 ];
 
+/**
+ * Shortest CIDR limits that can be checked in any individual range check
+ * at Special:Contributions.
+ *
+ * @var array
+ * @since 1.30
+ */
+$wgRangeContributionsCIDRLimit = [
+       'IPv4' => 16,
+       'IPv6' => 32,
+];
+
 /**
  * The following variables define 3 user experience levels:
  *
index 2860664..06a5cc3 100644 (file)
@@ -511,6 +511,7 @@ class EditPage {
         * @deprecated since 1.29, call edit directly
         */
        public function submit() {
+               wfDeprecated( __METHOD__, '1.29' );
                $this->edit();
        }
 
@@ -526,7 +527,7 @@ class EditPage {
         * the newly-edited page.
         */
        public function edit() {
-               global $wgOut, $wgRequest, $wgUser;
+               global $wgRequest, $wgUser;
                // Allow extensions to modify/prevent this form or submission
                if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) {
                        return;
@@ -536,7 +537,7 @@ class EditPage {
 
                // If they used redlink=1 and the page exists, redirect to the main article
                if ( $wgRequest->getBool( 'redlink' ) && $this->mTitle->exists() ) {
-                       $wgOut->redirect( $this->mTitle->getFullURL() );
+                       $this->context->getOutput()->redirect( $this->mTitle->getFullURL() );
                        return;
                }
 
@@ -701,13 +702,14 @@ class EditPage {
         * @throws PermissionsError
         */
        protected function displayPermissionsError( array $permErrors ) {
-               global $wgRequest, $wgOut;
+               global $wgRequest;
 
+               $out = $this->context->getOutput();
                if ( $wgRequest->getBool( 'redlink' ) ) {
                        // The edit page was reached via a red link.
                        // Redirect to the article page and let them click the edit tab if
                        // they really want a permission error.
-                       $wgOut->redirect( $this->mTitle->getFullURL() );
+                       $out->redirect( $this->mTitle->getFullURL() );
                        return;
                }
 
@@ -722,7 +724,7 @@ class EditPage {
 
                $this->displayViewSourcePage(
                        $content,
-                       $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' )
+                       $out->formatPermissionsErrorMessage( $permErrors, 'edit' )
                );
        }
 
@@ -732,29 +734,28 @@ class EditPage {
         * @param string $errorMessage additional wikitext error message to display
         */
        protected function displayViewSourcePage( Content $content, $errorMessage = '' ) {
-               global $wgOut;
-
-               Hooks::run( 'EditPage::showReadOnlyForm:initial', [ $this, &$wgOut ] );
+               $out = $this->context->getOutput();
+               Hooks::run( 'EditPage::showReadOnlyForm:initial', [ $this, &$out ] );
 
-               $wgOut->setRobotPolicy( 'noindex,nofollow' );
-               $wgOut->setPageTitle( $this->context->msg(
+               $out->setRobotPolicy( 'noindex,nofollow' );
+               $out->setPageTitle( $this->context->msg(
                        'viewsource-title',
                        $this->getContextTitle()->getPrefixedText()
                ) );
-               $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
-               $wgOut->addHTML( $this->editFormPageTop );
-               $wgOut->addHTML( $this->editFormTextTop );
+               $out->addBacklinkSubtitle( $this->getContextTitle() );
+               $out->addHTML( $this->editFormPageTop );
+               $out->addHTML( $this->editFormTextTop );
 
                if ( $errorMessage !== '' ) {
-                       $wgOut->addWikiText( $errorMessage );
-                       $wgOut->addHTML( "<hr />\n" );
+                       $out->addWikiText( $errorMessage );
+                       $out->addHTML( "<hr />\n" );
                }
 
                # If the user made changes, preserve them when showing the markup
                # (This happens when a user is blocked during edit, for instance)
                if ( !$this->firsttime ) {
                        $text = $this->textbox1;
-                       $wgOut->addWikiMsg( 'viewyourtext' );
+                       $out->addWikiMsg( 'viewyourtext' );
                } else {
                        try {
                                $text = $this->toEditText( $content );
@@ -763,20 +764,20 @@ class EditPage {
                                # (e.g. for an old revision with a different model)
                                $text = $content->serialize();
                        }
-                       $wgOut->addWikiMsg( 'viewsourcetext' );
+                       $out->addWikiMsg( 'viewsourcetext' );
                }
 
-               $wgOut->addHTML( $this->editFormTextBeforeContent );
+               $out->addHTML( $this->editFormTextBeforeContent );
                $this->showTextbox( $text, 'wpTextbox1', [ 'readonly' ] );
-               $wgOut->addHTML( $this->editFormTextAfterContent );
+               $out->addHTML( $this->editFormTextAfterContent );
 
-               $wgOut->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) );
+               $out->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) );
 
-               $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' );
+               $out->addModules( 'mediawiki.action.edit.collapsibleFooter' );
 
-               $wgOut->addHTML( $this->editFormTextBottom );
+               $out->addHTML( $this->editFormTextBottom );
                if ( $this->mTitle->exists() ) {
-                       $wgOut->returnToMain( null, $this->mTitle );
+                       $out->returnToMain( null, $this->mTitle );
                }
        }
 
@@ -850,7 +851,7 @@ class EditPage {
         * @throws ErrorPageError
         */
        public function importFormData( &$request ) {
-               global $wgContLang, $wgUser;
+               global $wgUser;
 
                # Section edit can come from either the form or a link
                $this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
@@ -876,8 +877,7 @@ class EditPage {
                                }
                        }
 
-                       # Truncate for whole multibyte characters
-                       $this->summary = $wgContLang->truncate( $request->getText( 'wpSummary' ), 255 );
+                       $this->summary = $request->getText( 'wpSummary' );
 
                        # If the summary consists of a heading, e.g. '==Foobar==', extract the title from the
                        # header syntax, e.g. 'Foobar'. This is mainly an issue when we are using wpSummary for
@@ -889,7 +889,7 @@ class EditPage {
                        # currently doing double duty as both edit summary and section title. Right now this
                        # is just to allow API edits to work around this limitation, but this should be
                        # incorporated into the actual edit form when EditPage is rewritten (Bugs 18654, 26312).
-                       $this->sectiontitle = $wgContLang->truncate( $request->getText( 'wpSectionTitle' ), 255 );
+                       $this->sectiontitle = $request->getText( 'wpSectionTitle' );
                        $this->sectiontitle = preg_replace( '/^\s*=+\s*(.*?)\s*=+\s*$/', '$1', $this->sectiontitle );
 
                        $this->edittime = $request->getVal( 'wpEdittime' );
@@ -1123,7 +1123,7 @@ class EditPage {
         * @since 1.21
         */
        protected function getContentObject( $def_content = null ) {
-               global $wgOut, $wgRequest, $wgUser, $wgContLang;
+               global $wgRequest, $wgUser, $wgContLang;
 
                $content = false;
 
@@ -1231,9 +1231,10 @@ class EditPage {
                                                $undoMsg = 'norev';
                                        }
 
+                                       $out = $this->context->getOutput();
                                        // Messages: undo-success, undo-failure, undo-norev, undo-nochange
                                        $class = ( $undoMsg == 'success' ? '' : 'error ' ) . "mw-undo-{$undoMsg}";
-                                       $this->editFormPageTop .= $wgOut->parse( "<div class=\"{$class}\">" .
+                                       $this->editFormPageTop .= $out->parse( "<div class=\"{$class}\">" .
                                                $this->context->msg( 'undo-' . $undoMsg )->plain() . '</div>', true, /* interface */true );
                                }
 
@@ -1460,7 +1461,7 @@ class EditPage {
                        $val = 'restored';
                }
 
-               $response = RequestContext::getMain()->getRequest()->response();
+               $response = $this->context->getRequest()->response();
                $response->setCookie( $postEditKey, $val, time() + self::POST_EDIT_COOKIE_DURATION );
        }
 
@@ -1506,7 +1507,7 @@ class EditPage {
         * @return bool False, if output is done, true if rest of the form should be displayed
         */
        private function handleStatus( Status $status, $resultDetails ) {
-               global $wgUser, $wgOut;
+               global $wgUser;
 
                /**
                 * @todo FIXME: once the interface for internalAttemptSave() is made
@@ -1523,9 +1524,11 @@ class EditPage {
                        }
                }
 
+               $out = $this->context->getOutput();
+
                // "wpExtraQueryRedirect" is a hidden input to modify
                // after save URL and is not used by actual edit form
-               $request = RequestContext::getMain()->getRequest();
+               $request = $this->context->getRequest();
                $extraQueryRedirect = $request->getVal( 'wpExtraQueryRedirect' );
 
                switch ( $status->value ) {
@@ -1546,7 +1549,7 @@ class EditPage {
 
                        case self::AS_CANNOT_USE_CUSTOM_MODEL:
                        case self::AS_PARSE_ERROR:
-                               $wgOut->addWikiText( '<div class="error">' . "\n" . $status->getWikiText() . '</div>' );
+                               $out->addWikiText( '<div class="error">' . "\n" . $status->getWikiText() . '</div>' );
                                return true;
 
                        case self::AS_SUCCESS_NEW_ARTICLE:
@@ -1559,7 +1562,7 @@ class EditPage {
                                        }
                                }
                                $anchor = isset( $resultDetails['sectionanchor'] ) ? $resultDetails['sectionanchor'] : '';
-                               $wgOut->redirect( $this->mTitle->getFullURL( $query ) . $anchor );
+                               $out->redirect( $this->mTitle->getFullURL( $query ) . $anchor );
                                return false;
 
                        case self::AS_SUCCESS_UPDATE:
@@ -1587,7 +1590,7 @@ class EditPage {
                                        }
                                }
 
-                               $wgOut->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor );
+                               $out->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor );
                                return false;
 
                        case self::AS_SPAM_ERROR:
@@ -2342,29 +2345,31 @@ class EditPage {
        }
 
        public function setHeaders() {
-               global $wgOut, $wgUser, $wgAjaxEditStash;
+               global $wgUser, $wgAjaxEditStash;
 
-               $wgOut->addModules( 'mediawiki.action.edit' );
-               $wgOut->addModuleStyles( 'mediawiki.action.edit.styles' );
+               $out = $this->context->getOutput();
+
+               $out->addModules( 'mediawiki.action.edit' );
+               $out->addModuleStyles( 'mediawiki.action.edit.styles' );
 
                if ( $wgUser->getOption( 'showtoolbar' ) ) {
                        // The addition of default buttons is handled by getEditToolbar() which
                        // has its own dependency on this module. The call here ensures the module
                        // is loaded in time (it has position "top") for other modules to register
                        // buttons (e.g. extensions, gadgets, user scripts).
-                       $wgOut->addModules( 'mediawiki.toolbar' );
+                       $out->addModules( 'mediawiki.toolbar' );
                }
 
                if ( $wgUser->getOption( 'uselivepreview' ) ) {
-                       $wgOut->addModules( 'mediawiki.action.edit.preview' );
+                       $out->addModules( 'mediawiki.action.edit.preview' );
                }
 
                if ( $wgUser->getOption( 'useeditwarning' ) ) {
-                       $wgOut->addModules( 'mediawiki.action.edit.editWarning' );
+                       $out->addModules( 'mediawiki.action.edit.editWarning' );
                }
 
                # Enabled article-related sidebar, toplinks, etc.
-               $wgOut->setArticleRelated( true );
+               $out->setArticleRelated( true );
 
                $contextTitle = $this->getContextTitle();
                if ( $this->isConflict ) {
@@ -2387,10 +2392,10 @@ class EditPage {
                if ( $displayTitle === false ) {
                        $displayTitle = $contextTitle->getPrefixedText();
                }
-               $wgOut->setPageTitle( $this->context->msg( $msg, $displayTitle ) );
+               $out->setPageTitle( $this->context->msg( $msg, $displayTitle ) );
                # Transmit the name of the message to JavaScript for live preview
                # Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys
-               $wgOut->addJsConfigVars( [
+               $out->addJsConfigVars( [
                        'wgEditMessage' => $msg,
                        'wgAjaxEditStash' => $wgAjaxEditStash,
                ] );
@@ -2400,16 +2405,17 @@ class EditPage {
         * Show all applicable editing introductions
         */
        protected function showIntro() {
-               global $wgOut, $wgUser;
+               global $wgUser;
                if ( $this->suppressIntro ) {
                        return;
                }
 
+               $out = $this->context->getOutput();
                $namespace = $this->mTitle->getNamespace();
 
                if ( $namespace == NS_MEDIAWIKI ) {
                        # Show a warning if editing an interface message
-                       $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+                       $out->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
                        # If this is a default message (but not css or js),
                        # show a hint that it is translatable on translatewiki.net
                        if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS )
@@ -2417,7 +2423,7 @@ class EditPage {
                        ) {
                                $defaultMessageText = $this->mTitle->getDefaultMessageText();
                                if ( $defaultMessageText !== false ) {
-                                       $wgOut->wrapWikiMsg( "<div class='mw-translateinterface'>\n$1\n</div>",
+                                       $out->wrapWikiMsg( "<div class='mw-translateinterface'>\n$1\n</div>",
                                                'translateinterface' );
                                }
                        }
@@ -2429,11 +2435,11 @@ class EditPage {
                                # there must be a description url to show a hint to shared repo
                                if ( $descUrl ) {
                                        if ( !$this->mTitle->exists() ) {
-                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", [
+                                               $out->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", [
                                                                        'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl
                                                ] );
                                        } else {
-                                               $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-edit\">\n$1\n</div>", [
+                                               $out->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-edit\">\n$1\n</div>", [
                                                                        'sharedupload-desc-edit', $file->getRepo()->getDisplayName(), $descUrl
                                                ] );
                                        }
@@ -2449,12 +2455,12 @@ class EditPage {
                        $ip = User::isIP( $username );
                        $block = Block::newFromTarget( $user, $user );
                        if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
-                               $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
+                               $out->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
                                        [ 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ] );
                        } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
                                # Show log extract if the user is currently blocked
                                LogEventsList::showLogExtract(
-                                       $wgOut,
+                                       $out,
                                        'block',
                                        MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(),
                                        '',
@@ -2475,7 +2481,7 @@ class EditPage {
                                $this->context->msg( 'helppage' )->inContentLanguage()->text()
                        ) );
                        if ( $wgUser->isLoggedIn() ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        // Suppress the external link icon, consider the help url an internal one
                                        "<div class=\"mw-newarticletext plainlinks\">\n$1\n</div>",
                                        [
@@ -2484,7 +2490,7 @@ class EditPage {
                                        ]
                                );
                        } else {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        // Suppress the external link icon, consider the help url an internal one
                                        "<div class=\"mw-newarticletextanon plainlinks\">\n$1\n</div>",
                                        [
@@ -2498,7 +2504,7 @@ class EditPage {
                if ( !$this->mTitle->exists() ) {
                        $dbr = wfGetDB( DB_REPLICA );
 
-                       LogEventsList::showLogExtract( $wgOut, [ 'delete', 'move' ], $this->mTitle,
+                       LogEventsList::showLogExtract( $out, [ 'delete', 'move' ], $this->mTitle,
                                '',
                                [
                                        'lim' => 10,
@@ -2519,9 +2525,8 @@ class EditPage {
                if ( $this->editintro ) {
                        $title = Title::newFromText( $this->editintro );
                        if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) {
-                               global $wgOut;
                                // Added using template syntax, to take <noinclude>'s into account.
-                               $wgOut->addWikiTextTitleTidy(
+                               $this->context->getOutput()->addWikiTextTitleTidy(
                                        '<div class="mw-editintro">{{:' . $title->getFullText() . '}}</div>',
                                        $this->mTitle
                                );
@@ -2593,7 +2598,7 @@ class EditPage {
        }
 
        /**
-        * Send the edit form and related headers to $wgOut
+        * Send the edit form and related headers to OutputPage
         * @param callable|null $formCallback That takes an OutputPage parameter; will be called
         *     during form output near the top, for captchas and the like.
         *
@@ -2601,7 +2606,7 @@ class EditPage {
         * use the EditPage::showEditForm:fields hook instead.
         */
        public function showEditForm( $formCallback = null ) {
-               global $wgOut, $wgUser;
+               global $wgUser;
 
                # need to parse the preview early so that we know which templates are used,
                # otherwise users with "show preview after edit box" will get a blank list
@@ -2612,9 +2617,11 @@ class EditPage {
                        $previewOutput = $this->getPreviewText();
                }
 
+               $out = $this->context->getOutput();
+
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
-               Hooks::run( 'EditPage::showEditForm:initial', [ &$editPage, &$wgOut ] );
+               Hooks::run( 'EditPage::showEditForm:initial', [ &$editPage, &$out ] );
 
                $this->setHeaders();
 
@@ -2627,19 +2634,19 @@ class EditPage {
                        // We use $this->section to much before this and getVal('wgSection') directly in other places
                        // at this point we can't reset $this->section to '' to fallback to non-section editing.
                        // Someone is welcome to try refactoring though
-                       $wgOut->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
+                       $out->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
                        return;
                }
 
                $this->showHeader();
 
-               $wgOut->addHTML( $this->editFormPageTop );
+               $out->addHTML( $this->editFormPageTop );
 
                if ( $wgUser->getOption( 'previewontop' ) ) {
                        $this->displayPreviewArea( $previewOutput, true );
                }
 
-               $wgOut->addHTML( $this->editFormTextTop );
+               $out->addHTML( $this->editFormTextTop );
 
                $showToolbar = true;
                if ( $this->wasDeletedSinceLastEdit() ) {
@@ -2648,14 +2655,14 @@ class EditPage {
                                // Add an confirmation checkbox and explanation.
                                $showToolbar = false;
                        } else {
-                               $wgOut->wrapWikiMsg( "<div class='error mw-deleted-while-editing'>\n$1\n</div>",
+                               $out->wrapWikiMsg( "<div class='error mw-deleted-while-editing'>\n$1\n</div>",
                                        'deletedwhileediting' );
                        }
                }
 
                // @todo add EditForm plugin interface and use it here!
                //       search for textarea1 and textarea2, and allow EditForm to override all uses.
-               $wgOut->addHTML( Html::openElement(
+               $out->addHTML( Html::openElement(
                        'form',
                        [
                                'class' => 'mw-editform',
@@ -2669,11 +2676,11 @@ class EditPage {
 
                if ( is_callable( $formCallback ) ) {
                        wfWarn( 'The $formCallback parameter to ' . __METHOD__ . 'is deprecated' );
-                       call_user_func_array( $formCallback, [ &$wgOut ] );
+                       call_user_func_array( $formCallback, [ &$out ] );
                }
 
                // Add an empty field to trip up spambots
-               $wgOut->addHTML(
+               $out->addHTML(
                        Xml::openElement( 'div', [ 'id' => 'antispam-container', 'style' => 'display: none;' ] )
                        . Html::rawElement(
                                'label',
@@ -2694,7 +2701,7 @@ class EditPage {
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
-               Hooks::run( 'EditPage::showEditForm:fields', [ &$editPage, &$wgOut ] );
+               Hooks::run( 'EditPage::showEditForm:fields', [ &$editPage, &$out ] );
 
                // Put these up at the top to ensure they aren't lost on early form submission
                $this->showFormBeforeText();
@@ -2708,7 +2715,7 @@ class EditPage {
                        $key = $comment === ''
                                ? 'confirmrecreate-noreason'
                                : 'confirmrecreate';
-                       $wgOut->addHTML(
+                       $out->addHTML(
                                '<div class="mw-confirm-recreate">' .
                                        $this->context->msg( $key, $username, "<nowiki>$comment</nowiki>" )->parse() .
                                Xml::checkLabel( $this->context->msg( 'recreate' )->text(), 'wpRecreate', 'wpRecreate', false,
@@ -2720,7 +2727,7 @@ class EditPage {
 
                # When the summary is hidden, also hide them on preview/show changes
                if ( $this->nosummary ) {
-                       $wgOut->addHTML( Html::hidden( 'nosummary', true ) );
+                       $out->addHTML( Html::hidden( 'nosummary', true ) );
                }
 
                # If a blank edit summary was previously provided, and the appropriate
@@ -2731,15 +2738,15 @@ class EditPage {
                # For a bit more sophisticated detection of blank summaries, hash the
                # automatic one and pass that in the hidden field wpAutoSummary.
                if ( $this->missingSummary || ( $this->section == 'new' && $this->nosummary ) ) {
-                       $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) );
+                       $out->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) );
                }
 
                if ( $this->undidRev ) {
-                       $wgOut->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) );
+                       $out->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) );
                }
 
                if ( $this->selfRedirect ) {
-                       $wgOut->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) );
+                       $out->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) );
                }
 
                if ( $this->hasPresetSummary ) {
@@ -2750,29 +2757,29 @@ class EditPage {
                }
 
                $autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary );
-               $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
+               $out->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
 
-               $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) );
-               $wgOut->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) );
+               $out->addHTML( Html::hidden( 'oldid', $this->oldid ) );
+               $out->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) );
 
-               $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
-               $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
+               $out->addHTML( Html::hidden( 'format', $this->contentFormat ) );
+               $out->addHTML( Html::hidden( 'model', $this->contentModel ) );
 
-               $wgOut->enableOOUI();
+               $out->enableOOUI();
 
                if ( $this->section == 'new' ) {
                        $this->showSummaryInput( true, $this->summary );
-                       $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) );
+                       $out->addHTML( $this->getSummaryPreview( true, $this->summary ) );
                }
 
-               $wgOut->addHTML( $this->editFormTextBeforeContent );
+               $out->addHTML( $this->editFormTextBeforeContent );
 
                if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
-                       $wgOut->addHTML( self::getEditToolbar( $this->mTitle ) );
+                       $out->addHTML( self::getEditToolbar( $this->mTitle ) );
                }
 
                if ( $this->blankArticle ) {
-                       $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) );
+                       $out->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) );
                }
 
                if ( $this->isConflict ) {
@@ -2790,7 +2797,7 @@ class EditPage {
                        $this->showContentForm();
                }
 
-               $wgOut->addHTML( $this->editFormTextAfterContent );
+               $out->addHTML( $this->editFormTextAfterContent );
 
                $this->showStandardInputs();
 
@@ -2800,17 +2807,17 @@ class EditPage {
 
                $this->showEditTools();
 
-               $wgOut->addHTML( $this->editFormTextAfterTools . "\n" );
+               $out->addHTML( $this->editFormTextAfterTools . "\n" );
 
-               $wgOut->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) );
+               $out->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) );
 
-               $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ],
+               $out->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ],
                        Linker::formatHiddenCategories( $this->page->getHiddenCategories() ) ) );
 
-               $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'limitreport' ],
+               $out->addHTML( Html::rawElement( 'div', [ 'class' => 'limitreport' ],
                        self::getPreviewLimitReport( $this->mParserOutput ) ) );
 
-               $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' );
+               $out->addModules( 'mediawiki.action.edit.collapsibleFooter' );
 
                if ( $this->isConflict ) {
                        try {
@@ -2823,7 +2830,7 @@ class EditPage {
                                        $this->contentFormat,
                                        $ex->getMessage()
                                );
-                               $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
+                               $out->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
                        }
                }
 
@@ -2837,12 +2844,12 @@ class EditPage {
                } else {
                        $mode = 'text';
                }
-               $wgOut->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) );
+               $out->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) );
 
                // Marker for detecting truncated form data.  This must be the last
                // parameter sent in order to be of use, so do not move me.
-               $wgOut->addHTML( Html::hidden( 'wpUltimateParam', true ) );
-               $wgOut->addHTML( $this->editFormTextBottom . "\n</form>\n" );
+               $out->addHTML( Html::hidden( 'wpUltimateParam', true ) );
+               $out->addHTML( $this->editFormTextBottom . "\n</form>\n" );
 
                if ( !$wgUser->getOption( 'previewontop' ) ) {
                        $this->displayPreviewArea( $previewOutput, false );
@@ -2891,11 +2898,12 @@ class EditPage {
        }
 
        protected function showHeader() {
-               global $wgOut, $wgUser;
+               global $wgUser;
                global $wgAllowUserCss, $wgAllowUserJs;
 
+               $out = $this->context->getOutput();
                if ( $this->isConflict ) {
-                       $this->addExplainConflictHeader( $wgOut );
+                       $this->addExplainConflictHeader( $out );
                        $this->editRevId = $this->page->getLatest();
                } else {
                        if ( $this->section != '' && $this->section != 'new' ) {
@@ -2910,43 +2918,43 @@ class EditPage {
                        $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text();
 
                        if ( $this->missingComment ) {
-                               $wgOut->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' );
+                               $out->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' );
                        }
 
                        if ( $this->missingSummary && $this->section != 'new' ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        "<div id='mw-missingsummary'>\n$1\n</div>",
                                        [ 'missingsummary', $buttonLabel ]
                                );
                        }
 
                        if ( $this->missingSummary && $this->section == 'new' ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        "<div id='mw-missingcommentheader'>\n$1\n</div>",
                                        [ 'missingcommentheader', $buttonLabel ]
                                );
                        }
 
                        if ( $this->blankArticle ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        "<div id='mw-blankarticle'>\n$1\n</div>",
                                        [ 'blankarticle', $buttonLabel ]
                                );
                        }
 
                        if ( $this->selfRedirect ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        "<div id='mw-selfredirect'>\n$1\n</div>",
                                        [ 'selfredirect', $buttonLabel ]
                                );
                        }
 
                        if ( $this->hookError !== '' ) {
-                               $wgOut->addWikiText( $this->hookError );
+                               $out->addWikiText( $this->hookError );
                        }
 
                        if ( !$this->checkUnicodeCompliantBrowser() ) {
-                               $wgOut->addWikiMsg( 'nonunicodebrowser' );
+                               $out->addWikiMsg( 'nonunicodebrowser' );
                        }
 
                        if ( $this->section != 'new' ) {
@@ -2955,12 +2963,12 @@ class EditPage {
                                        // Let sysop know that this will make private content public if saved
 
                                        if ( !$revision->userCan( Revision::DELETED_TEXT, $wgUser ) ) {
-                                               $wgOut->wrapWikiMsg(
+                                               $out->wrapWikiMsg(
                                                        "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                                        'rev-deleted-text-permission'
                                                );
                                        } elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
-                                               $wgOut->wrapWikiMsg(
+                                               $out->wrapWikiMsg(
                                                        "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                                        'rev-deleted-text-view'
                                                );
@@ -2968,26 +2976,26 @@ class EditPage {
 
                                        if ( !$revision->isCurrent() ) {
                                                $this->mArticle->setOldSubtitle( $revision->getId() );
-                                               $wgOut->addWikiMsg( 'editingold' );
+                                               $out->addWikiMsg( 'editingold' );
                                                $this->isOldRev = true;
                                        }
                                } elseif ( $this->mTitle->exists() ) {
                                        // Something went wrong
 
-                                       $wgOut->wrapWikiMsg( "<div class='errorbox'>\n$1\n</div>\n",
+                                       $out->wrapWikiMsg( "<div class='errorbox'>\n$1\n</div>\n",
                                                [ 'missing-revision', $this->oldid ] );
                                }
                        }
                }
 
                if ( wfReadOnly() ) {
-                       $wgOut->wrapWikiMsg(
+                       $out->wrapWikiMsg(
                                "<div id=\"mw-read-only-warning\">\n$1\n</div>",
                                [ 'readonlywarning', wfReadOnlyReason() ]
                        );
                } elseif ( $wgUser->isAnon() ) {
                        if ( $this->formtype != 'preview' ) {
-                               $wgOut->wrapWikiMsg(
+                               $out->wrapWikiMsg(
                                        "<div id='mw-anon-edit-warning' class='warningbox'>\n$1\n</div>",
                                        [ 'anoneditwarning',
                                                // Log-in link
@@ -3001,7 +3009,7 @@ class EditPage {
                                        ]
                                );
                        } else {
-                               $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\" class=\"warningbox\">\n$1</div>",
+                               $out->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\" class=\"warningbox\">\n$1</div>",
                                        'anonpreviewwarning'
                                );
                        }
@@ -3009,25 +3017,25 @@ class EditPage {
                        if ( $this->isCssJsSubpage ) {
                                # Check the skin exists
                                if ( $this->isWrongCaseCssJsPage ) {
-                                       $wgOut->wrapWikiMsg(
+                                       $out->wrapWikiMsg(
                                                "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>",
                                                [ 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ]
                                        );
                                }
                                if ( $this->getTitle()->isSubpageOf( $wgUser->getUserPage() ) ) {
-                                       $wgOut->wrapWikiMsg( '<div class="mw-usercssjspublic">$1</div>',
+                                       $out->wrapWikiMsg( '<div class="mw-usercssjspublic">$1</div>',
                                                $this->isCssSubpage ? 'usercssispublic' : 'userjsispublic'
                                        );
                                        if ( $this->formtype !== 'preview' ) {
                                                if ( $this->isCssSubpage && $wgAllowUserCss ) {
-                                                       $wgOut->wrapWikiMsg(
+                                                       $out->wrapWikiMsg(
                                                                "<div id='mw-usercssyoucanpreview'>\n$1\n</div>",
                                                                [ 'usercssyoucanpreview' ]
                                                        );
                                                }
 
                                                if ( $this->isJsSubpage && $wgAllowUserJs ) {
-                                                       $wgOut->wrapWikiMsg(
+                                                       $out->wrapWikiMsg(
                                                                "<div id='mw-userjsyoucanpreview'>\n$1\n</div>",
                                                                [ 'userjsyoucanpreview' ]
                                                        );
@@ -3064,9 +3072,51 @@ class EditPage {
                ];
        }
 
+       /**
+        * Standard summary input and label (wgSummary), abstracted so EditPage
+        * subclasses may reorganize the form.
+        * Note that you do not need to worry about the label's for=, it will be
+        * inferred by the id given to the input. You can remove them both by
+        * passing [ 'id' => false ] to $userInputAttrs.
+        *
+        * @deprecated since 1.30 Use getSummaryInputWidget() instead
+        * @param string $summary The value of the summary input
+        * @param string $labelText The html to place inside the label
+        * @param array $inputAttrs Array of attrs to use on the input
+        * @param array $spanLabelAttrs Array of attrs to use on the span inside the label
+        * @return array An array in the format [ $label, $input ]
+        */
+       public function getSummaryInput( $summary = "", $labelText = null,
+               $inputAttrs = null, $spanLabelAttrs = null
+       ) {
+               wfDeprecated( __METHOD__, '1.30' );
+               $inputAttrs = $this->getSummaryInputAttributes( $inputAttrs );
+               $inputAttrs += Linker::tooltipAndAccesskeyAttribs( 'summary' );
+
+               $spanLabelAttrs = ( is_array( $spanLabelAttrs ) ? $spanLabelAttrs : [] ) + [
+                       'class' => $this->missingSummary ? 'mw-summarymissed' : 'mw-summary',
+                       'id' => "wpSummaryLabel"
+               ];
+
+               $label = null;
+               if ( $labelText ) {
+                       $label = Xml::tags(
+                               'label',
+                               $inputAttrs['id'] ? [ 'for' => $inputAttrs['id'] ] : null,
+                               $labelText
+                       );
+                       $label = Xml::tags( 'span', $spanLabelAttrs, $label );
+               }
+
+               $input = Html::input( 'wpSummary', $summary, 'text', $inputAttrs );
+
+               return [ $label, $input ];
+       }
+
        /**
         * Builds a standard summary input with a label.
         *
+        * @deprecated since 1.30 Use getSummaryInputWidget() instead
         * @param string $summary The value of the summary input
         * @param string $labelText The html to place inside the label
         * @param array $inputAttrs Array of attrs to use on the input
@@ -3074,6 +3124,20 @@ class EditPage {
         * @return OOUI\FieldLayout OOUI FieldLayout with Label and Input
         */
        function getSummaryInputOOUI( $summary = "", $labelText = null, $inputAttrs = null ) {
+               wfDeprecated( __METHOD__, '1.30' );
+               $this->getSummaryInputWidget( $summary, $labelText, $inputAttrs );
+       }
+
+       /**
+        * Builds a standard summary input with a label.
+        *
+        * @param string $summary The value of the summary input
+        * @param string $labelText The html to place inside the label
+        * @param array $inputAttrs Array of attrs to use on the input
+        *
+        * @return OOUI\FieldLayout OOUI FieldLayout with Label and Input
+        */
+       function getSummaryInputWidget( $summary = "", $labelText = null, $inputAttrs = null ) {
                $inputAttrs = OOUI\Element::configFromHtmlAttributes(
                        $this->getSummaryInputAttributes( $inputAttrs )
                );
@@ -3107,8 +3171,6 @@ class EditPage {
         * @param string $summary The text of the summary to display
         */
        protected function showSummaryInput( $isSubjectPreview, $summary = "" ) {
-               global $wgOut;
-
                # Add a class if 'missingsummary' is triggered to allow styling of the summary line
                $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
                if ( $isSubjectPreview ) {
@@ -3122,7 +3184,7 @@ class EditPage {
                }
 
                $labelText = $this->context->msg( $isSubjectPreview ? 'subject' : 'summary' )->parse();
-               $wgOut->addHTML( $this->getSummaryInputOOUI(
+               $this->context->getOutput()->addHTML( $this->getSummaryInputWidget(
                                $summary,
                                $labelText,
                                [ 'class' => $summaryClass ]
@@ -3159,21 +3221,20 @@ class EditPage {
        }
 
        protected function showFormBeforeText() {
-               global $wgOut;
-
-               $wgOut->addHTML( Html::hidden( 'wpSection', htmlspecialchars( $this->section ) ) );
-               $wgOut->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) );
-               $wgOut->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) );
-               $wgOut->addHTML( Html::hidden( 'editRevId', $this->editRevId ) );
-               $wgOut->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop, [ 'id' => 'wpScrolltop' ] ) );
+               $out = $this->context->getOutput();
+               $out->addHTML( Html::hidden( 'wpSection', htmlspecialchars( $this->section ) ) );
+               $out->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) );
+               $out->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) );
+               $out->addHTML( Html::hidden( 'editRevId', $this->editRevId ) );
+               $out->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop, [ 'id' => 'wpScrolltop' ] ) );
 
                if ( !$this->checkUnicodeCompliantBrowser() ) {
-                       $wgOut->addHTML( Html::hidden( 'safemode', '1' ) );
+                       $out->addHTML( Html::hidden( 'safemode', '1' ) );
                }
        }
 
        protected function showFormAfterText() {
-               global $wgOut, $wgUser;
+               global $wgUser;
                /**
                 * To make it harder for someone to slip a user a page
                 * which submits an edit form to the wiki without their
@@ -3186,7 +3247,9 @@ class EditPage {
                 * include the constant suffix to prevent editing from
                 * broken text-mangling proxies.
                 */
-               $wgOut->addHTML( "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n" );
+               $this->context->getOutput()->addHTML(
+                       "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n"
+               );
        }
 
        /**
@@ -3260,18 +3323,17 @@ class EditPage {
        }
 
        protected function showTextbox( $text, $name, $customAttribs = [] ) {
-               global $wgOut, $wgUser;
+               global $wgUser;
 
                $wikitext = $this->safeUnicodeOutput( $text );
                $wikitext = $this->addNewLineAtEnd( $wikitext );
 
                $attribs = $this->buildTextboxAttribs( $name, $customAttribs, $wgUser );
 
-               $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
+               $this->context->getOutput()->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
        }
 
        protected function displayPreviewArea( $previewOutput, $isOnTop = false ) {
-               global $wgOut;
                $classes = [];
                if ( $isOnTop ) {
                        $classes[] = 'ontop';
@@ -3283,7 +3345,8 @@ class EditPage {
                        $attribs['style'] = 'display: none;';
                }
 
-               $wgOut->addHTML( Xml::openElement( 'div', $attribs ) );
+               $out = $this->context->getOutput();
+               $out->addHTML( Xml::openElement( 'div', $attribs ) );
 
                if ( $this->formtype == 'preview' ) {
                        $this->showPreview( $previewOutput );
@@ -3292,10 +3355,10 @@ class EditPage {
                        $pageViewLang = $this->mTitle->getPageViewLanguage();
                        $attribs = [ 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(),
                                'class' => 'mw-content-' . $pageViewLang->getDir() ];
-                       $wgOut->addHTML( Html::rawElement( 'div', $attribs ) );
+                       $out->addHTML( Html::rawElement( 'div', $attribs ) );
                }
 
-               $wgOut->addHTML( '</div>' );
+               $out->addHTML( '</div>' );
 
                if ( $this->formtype == 'diff' ) {
                        try {
@@ -3307,26 +3370,26 @@ class EditPage {
                                        $this->contentFormat,
                                        $ex->getMessage()
                                );
-                               $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
+                               $out->addWikiText( '<div class="error">' . $msg->text() . '</div>' );
                        }
                }
        }
 
        /**
-        * Append preview output to $wgOut.
+        * Append preview output to OutputPage.
         * Includes category rendering if this is a category page.
         *
         * @param string $text The HTML to be output for the preview.
         */
        protected function showPreview( $text ) {
-               global $wgOut;
                if ( $this->mArticle instanceof CategoryPage ) {
                        $this->mArticle->openShowCategory();
                }
                # This hook seems slightly odd here, but makes things more
                # consistent for extensions.
-               Hooks::run( 'OutputPageBeforeHTML', [ &$wgOut, &$text ] );
-               $wgOut->addHTML( $text );
+               $out = $this->context->getOutput();
+               Hooks::run( 'OutputPageBeforeHTML', [ &$out, &$text ] );
+               $out->addHTML( $text );
                if ( $this->mArticle instanceof CategoryPage ) {
                        $this->mArticle->closeShowCategory();
                }
@@ -3340,7 +3403,7 @@ class EditPage {
         * save and then make a comparison.
         */
        public function showDiff() {
-               global $wgUser, $wgContLang, $wgOut;
+               global $wgUser, $wgContLang;
 
                $oldtitlemsg = 'currentrev';
                # if message does not exist, show diff against the preloaded default
@@ -3395,7 +3458,7 @@ class EditPage {
                        $difftext = '';
                }
 
-               $wgOut->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
+               $this->context->getOutput()->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
        }
 
        /**
@@ -3404,8 +3467,7 @@ class EditPage {
        protected function showHeaderCopyrightWarning() {
                $msg = 'editpage-head-copy-warn';
                if ( !$this->context->msg( $msg )->isDisabled() ) {
-                       global $wgOut;
-                       $wgOut->wrapWikiMsg( "<div class='editpage-head-copywarn'>\n$1\n</div>",
+                       $this->context->getOutput()->wrapWikiMsg( "<div class='editpage-head-copywarn'>\n$1\n</div>",
                                'editpage-head-copy-warn' );
                }
        }
@@ -3422,10 +3484,10 @@ class EditPage {
                $msg = 'editpage-tos-summary';
                Hooks::run( 'EditPageTosSummary', [ $this->mTitle, &$msg ] );
                if ( !$this->context->msg( $msg )->isDisabled() ) {
-                       global $wgOut;
-                       $wgOut->addHTML( '<div class="mw-tos-summary">' );
-                       $wgOut->addWikiMsg( $msg );
-                       $wgOut->addHTML( '</div>' );
+                       $out = $this->context->getOutput();
+                       $out->addHTML( '<div class="mw-tos-summary">' );
+                       $out->addWikiMsg( $msg );
+                       $out->addHTML( '</div>' );
                }
        }
 
@@ -3434,8 +3496,7 @@ class EditPage {
         * characters not present on most keyboards for copying/pasting.
         */
        protected function showEditTools() {
-               global $wgOut;
-               $wgOut->addHTML( '<div class="mw-editTools">' .
+               $this->context->getOutput()->addHTML( '<div class="mw-editTools">' .
                        $this->context->msg( 'edittools' )->inContentLanguage()->parse() .
                        '</div>' );
        }
@@ -3529,28 +3590,28 @@ class EditPage {
        }
 
        protected function showStandardInputs( &$tabindex = 2 ) {
-               global $wgOut;
-               $wgOut->addHTML( "<div class='editOptions'>\n" );
+               $out = $this->context->getOutput();
+               $out->addHTML( "<div class='editOptions'>\n" );
 
                if ( $this->section != 'new' ) {
                        $this->showSummaryInput( false, $this->summary );
-                       $wgOut->addHTML( $this->getSummaryPreview( false, $this->summary ) );
+                       $out->addHTML( $this->getSummaryPreview( false, $this->summary ) );
                }
 
-               $checkboxes = $this->getCheckboxesOOUI(
+               $checkboxes = $this->getCheckboxesWidget(
                        $tabindex,
                        [ 'minor' => $this->minoredit, 'watch' => $this->watchthis ]
                );
                $checkboxesHTML = new OOUI\HorizontalLayout( [ 'items' => $checkboxes ] );
 
-               $wgOut->addHTML( "<div class='editCheckboxes'>" . $checkboxesHTML . "</div>\n" );
+               $out->addHTML( "<div class='editCheckboxes'>" . $checkboxesHTML . "</div>\n" );
 
                // Show copyright warning.
-               $wgOut->addWikiText( $this->getCopywarn() );
-               $wgOut->addHTML( $this->editFormTextAfterWarn );
+               $out->addWikiText( $this->getCopywarn() );
+               $out->addHTML( $this->editFormTextAfterWarn );
 
-               $wgOut->addHTML( "<div class='editButtons'>\n" );
-               $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
+               $out->addHTML( "<div class='editButtons'>\n" );
+               $out->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
 
                $cancel = $this->getCancelLink();
                if ( $cancel !== '' ) {
@@ -3570,13 +3631,13 @@ class EditPage {
                        $this->context->msg( 'word-separator' )->escaped() .
                        $this->context->msg( 'newwindow' )->parse();
 
-               $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
-               $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
-               $wgOut->addHTML( "</div><!-- editButtons -->\n" );
+               $out->addHTML( "        <span class='cancelLink'>{$cancel}</span>\n" );
+               $out->addHTML( "        <span class='editHelp'>{$edithelp}</span>\n" );
+               $out->addHTML( "</div><!-- editButtons -->\n" );
 
-               Hooks::run( 'EditPage::showStandardInputs:options', [ $this, $wgOut, &$tabindex ] );
+               Hooks::run( 'EditPage::showStandardInputs:options', [ $this, $out, &$tabindex ] );
 
-               $wgOut->addHTML( "</div><!-- editOptions -->\n" );
+               $out->addHTML( "</div><!-- editOptions -->\n" );
        }
 
        /**
@@ -3584,14 +3645,13 @@ class EditPage {
         * If you want to use another entry point to this function, be careful.
         */
        protected function showConflict() {
-               global $wgOut;
-
+               $out = $this->context->getOutput();
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
-               if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$wgOut ] ) ) {
+               if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$out ] ) ) {
                        $this->incrementConflictStats();
 
-                       $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+                       $out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
 
                        $content1 = $this->toEditContent( $this->textbox1 );
                        $content2 = $this->toEditContent( $this->textbox2 );
@@ -3604,7 +3664,7 @@ class EditPage {
                                $this->context->msg( 'storedversion' )->text()
                        );
 
-                       $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+                       $out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
                        $this->showTextbox2();
                }
        }
@@ -3734,9 +3794,11 @@ class EditPage {
         * @return string
         */
        public function getPreviewText() {
-               global $wgOut, $wgRawHtml, $wgLang;
+               global $wgRawHtml, $wgLang;
                global $wgAllowUserCss, $wgAllowUserJs;
 
+               $out = $this->context->getOutput();
+
                if ( $wgRawHtml && !$this->mTokenOk ) {
                        // Could be an offsite preview attempt. This is very unsafe if
                        // HTML is enabled, as it could be an attack.
@@ -3745,7 +3807,7 @@ class EditPage {
                                // Do not put big scary notice, if previewing the empty
                                // string, which happens when you initially edit
                                // a category page, due to automatic preview-on-open.
-                               $parsedNote = $wgOut->parse( "<div class='previewnote'>" .
+                               $parsedNote = $out->parse( "<div class='previewnote'>" .
                                        $this->context->msg( 'session_fail_preview_html' )->text() . "</div>",
                                        true, /* interface */true );
                        }
@@ -3833,7 +3895,7 @@ class EditPage {
                        $parserOutput = $parserResult['parserOutput'];
                        $previewHTML = $parserResult['html'];
                        $this->mParserOutput = $parserOutput;
-                       $wgOut->addParserOutputMetadata( $parserOutput );
+                       $out->addParserOutputMetadata( $parserOutput );
 
                        if ( count( $parserOutput->getWarnings() ) ) {
                                $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
@@ -3859,7 +3921,7 @@ class EditPage {
 
                $previewhead = "<div class='previewnote'>\n" .
                        '<h2 id="mw-previewheader">' . $this->context->msg( 'preview' )->escaped() . "</h2>" .
-                       $wgOut->parse( $note, true, /* interface */true ) . $conflict . "</div>\n";
+                       $out->parse( $note, true, /* interface */true ) . $conflict . "</div>\n";
 
                $pageViewLang = $this->mTitle->getPageViewLanguage();
                $attribs = [ 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(),
@@ -4125,6 +4187,7 @@ class EditPage {
         * Returns an array of html code of the following checkboxes old style:
         * minor and watch
         *
+        * @deprecated since 1.30 Use getCheckboxesWidget() or getCheckboxesDefinition() instead
         * @param int &$tabindex Current tabindex
         * @param array $checked See getCheckboxesDefinition()
         * @return array
@@ -4180,21 +4243,34 @@ class EditPage {
        }
 
        /**
-        * Returns an array of html code of the following checkboxes:
-        * minor and watch
+        * Returns an array of checkboxes for the edit form, including 'minor' and 'watch' checkboxes and
+        * any other added by extensions.
         *
+        * @deprecated since 1.30 Use getCheckboxesWidget() or getCheckboxesDefinition() instead
         * @param int &$tabindex Current tabindex
         * @param array $checked Array of checkbox => bool, where bool indicates the checked
         *                 status of the checkbox
         *
-        * @return array
+        * @return array Associative array of string keys to OOUI\FieldLayout instances
         */
        public function getCheckboxesOOUI( &$tabindex, $checked ) {
+               return $this->getCheckboxesWidget( $tabindex, $checked );
+       }
+
+       /**
+        * Returns an array of checkboxes for the edit form, including 'minor' and 'watch' checkboxes and
+        * any other added by extensions.
+        *
+        * @param int &$tabindex Current tabindex
+        * @param array $checked Array of checkbox => bool, where bool indicates the checked
+        *                 status of the checkbox
+        *
+        * @return array Associative array of string keys to OOUI\FieldLayout instances
+        */
+       public function getCheckboxesWidget( &$tabindex, $checked ) {
                $checkboxes = [];
                $checkboxesDef = $this->getCheckboxesDefinition( $checked );
 
-               $origTabindex = $tabindex;
-
                foreach ( $checkboxesDef as $name => $options ) {
                        $legacyName = isset( $options['legacy-name'] ) ? $options['legacy-name'] : $name;
 
@@ -4207,9 +4283,6 @@ class EditPage {
                        if ( isset( $options['title-message'] ) ) {
                                $title = $this->context->msg( $options['title-message'] )->text();
                        }
-                       if ( isset( $options['label-id'] ) ) {
-                               $labelAttribs['id'] = $options['label-id'];
-                       }
 
                        $checkboxes[ $legacyName ] = new OOUI\FieldLayout(
                                new OOUI\CheckboxInputWidget( [
@@ -4233,7 +4306,19 @@ class EditPage {
                // Backwards-compatibility hack to run the EditPageBeforeEditChecks hook. It's important,
                // people have used it for the weirdest things completely unrelated to checkboxes...
                // And if we're gonna run it, might as well allow its legacy checkboxes to be shown.
-               $legacyCheckboxes = $this->getCheckboxes( $origTabindex, $checked );
+               $legacyCheckboxes = [];
+               if ( !$this->isNew ) {
+                       $legacyCheckboxes['minor'] = '';
+               }
+               $legacyCheckboxes['watch'] = '';
+               // Copy new-style checkboxes into an old-style structure
+               foreach ( $checkboxes as $name => $oouiLayout ) {
+                       $legacyCheckboxes[$name] = (string)$oouiLayout;
+               }
+               // Avoid PHP 7.1 warning of passing $this by reference
+               $ep = $this;
+               Hooks::run( 'EditPageBeforeEditChecks', [ &$ep, &$legacyCheckboxes, &$tabindex ], '1.29' );
+               // Copy back any additional old-style checkboxes into the new-style structure
                foreach ( $legacyCheckboxes as $name => $html ) {
                        if ( $html && !isset( $checkboxes[$name] ) ) {
                                $checkboxes[$name] = new OOUI\Widget( [ 'content' => new OOUI\HtmlSnippet( $html ) ] );
@@ -4344,18 +4429,17 @@ class EditPage {
         * they have attempted to edit a nonexistent section.
         */
        public function noSuchSectionPage() {
-               global $wgOut;
-
-               $wgOut->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) );
+               $out = $this->context->getOutput();
+               $out->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) );
 
                $res = $this->context->msg( 'nosuchsectiontext', $this->section )->parseAsBlock();
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
                Hooks::run( 'EditPageNoSuchSection', [ &$editPage, &$res ] );
-               $wgOut->addHTML( $res );
+               $out->addHTML( $res );
 
-               $wgOut->returnToMain( false, $this->mTitle );
+               $out->returnToMain( false, $this->mTitle );
        }
 
        /**
@@ -4364,28 +4448,29 @@ class EditPage {
         * @param string|array|bool $match Text (or array of texts) which triggered one or more filters
         */
        public function spamPageWithContent( $match = false ) {
-               global $wgOut, $wgLang;
+               global $wgLang;
                $this->textbox2 = $this->textbox1;
 
                if ( is_array( $match ) ) {
                        $match = $wgLang->listToText( $match );
                }
-               $wgOut->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) );
+               $out = $this->context->getOutput();
+               $out->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) );
 
-               $wgOut->addHTML( '<div id="spamprotected">' );
-               $wgOut->addWikiMsg( 'spamprotectiontext' );
+               $out->addHTML( '<div id="spamprotected">' );
+               $out->addWikiMsg( 'spamprotectiontext' );
                if ( $match ) {
-                       $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
+                       $out->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
                }
-               $wgOut->addHTML( '</div>' );
+               $out->addHTML( '</div>' );
 
-               $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+               $out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
                $this->showDiff();
 
-               $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+               $out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
                $this->showTextbox2();
 
-               $wgOut->addReturnTo( $this->getContextTitle(), [ 'action' => 'edit' ] );
+               $out->addReturnTo( $this->getContextTitle(), [ 'action' => 'edit' ] );
        }
 
        /**
@@ -4526,15 +4611,14 @@ class EditPage {
         * @since 1.29
         */
        protected function addEditNotices() {
-               global $wgOut;
-
+               $out = $this->context->getOutput();
                $editNotices = $this->mTitle->getEditNotices( $this->oldid );
                if ( count( $editNotices ) ) {
-                       $wgOut->addHTML( implode( "\n", $editNotices ) );
+                       $out->addHTML( implode( "\n", $editNotices ) );
                } else {
                        $msg = $this->context->msg( 'editnotice-notext' );
                        if ( !$msg->isDisabled() ) {
-                               $wgOut->addHTML(
+                               $out->addHTML(
                                        '<div class="mw-editnotice-notext">'
                                        . $msg->parseAsBlock()
                                        . '</div>'
@@ -4547,10 +4631,8 @@ class EditPage {
         * @since 1.29
         */
        protected function addTalkPageText() {
-               global $wgOut;
-
                if ( $this->mTitle->isTalkPage() ) {
-                       $wgOut->addWikiMsg( 'talkpagetext' );
+                       $this->context->getOutput()->addWikiMsg( 'talkpagetext' );
                }
        }
 
@@ -4558,14 +4640,15 @@ class EditPage {
         * @since 1.29
         */
        protected function addLongPageWarningHeader() {
-               global $wgMaxArticleSize, $wgOut, $wgLang;
+               global $wgMaxArticleSize, $wgLang;
 
                if ( $this->contentLength === false ) {
                        $this->contentLength = strlen( $this->textbox1 );
                }
 
+               $out = $this->context->getOutput();
                if ( $this->tooBig || $this->contentLength > $wgMaxArticleSize * 1024 ) {
-                       $wgOut->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
+                       $out->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
                                [
                                        'longpageerror',
                                        $wgLang->formatNum( round( $this->contentLength / 1024, 3 ) ),
@@ -4574,7 +4657,7 @@ class EditPage {
                        );
                } else {
                        if ( !$this->context->msg( 'longpage-hint' )->isDisabled() ) {
-                               $wgOut->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
+                               $out->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
                                        [
                                                'longpage-hint',
                                                $wgLang->formatSize( strlen( $this->textbox1 ) ),
@@ -4589,8 +4672,7 @@ class EditPage {
         * @since 1.29
         */
        protected function addPageProtectionWarningHeaders() {
-               global $wgOut;
-
+               $out = $this->context->getOutput();
                if ( $this->mTitle->isProtected( 'edit' ) &&
                        MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace() ) !== [ '' ]
                ) {
@@ -4601,7 +4683,7 @@ class EditPage {
                                # Then it must be protected based on static groups (regular)
                                $noticeMsg = 'protectedpagewarning';
                        }
-                       LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '',
+                       LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '',
                                [ 'lim' => 1, 'msgKey' => [ $noticeMsg ] ] );
                }
                if ( $this->mTitle->isCascadeProtected() ) {
@@ -4617,10 +4699,10 @@ class EditPage {
                                }
                        }
                        $notice .= '</div>';
-                       $wgOut->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] );
+                       $out->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] );
                }
                if ( !$this->mTitle->exists() && $this->mTitle->getRestrictions( 'create' ) ) {
-                       LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '',
+                       LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '',
                                [ 'lim' => 1,
                                        'showIfEmpty' => false,
                                        'msgKey' => [ 'titleprotectedwarning' ],
index 39dc642..2f8255b 100644 (file)
@@ -442,7 +442,6 @@ class MovePage {
        private function moveToInternal( User $user, &$nt, $reason = '', $createRedirect = true,
                array $changeTags = []
        ) {
-               global $wgContLang;
                if ( $nt->exists() ) {
                        $moveOverRedirect = true;
                        $logType = 'move_redir';
@@ -520,8 +519,6 @@ class MovePage {
                if ( $reason ) {
                        $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                }
-               # Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $comment, 255 );
 
                $dbw = wfGetDB( DB_MASTER );
 
index ff4a284..006e700 100644 (file)
@@ -1401,7 +1401,7 @@ class Revision implements IDBAccessObject {
         *
         * @param IDatabase $dbw (master connection)
         * @throws MWException
-        * @return int
+        * @return int The revision ID
         */
        public function insertOn( $dbw ) {
                global $wgDefaultExternalStore, $wgContentHandlerUseDB;
@@ -1442,10 +1442,8 @@ class Revision implements IDBAccessObject {
 
                # Record the text (or external storage URL) to the text table
                if ( $this->mTextId === null ) {
-                       $old_id = $dbw->nextSequenceValue( 'text_old_id_seq' );
                        $dbw->insert( 'text',
                                [
-                                       'old_id' => $old_id,
                                        'old_text' => $data,
                                        'old_flags' => $flags,
                                ], __METHOD__
@@ -1458,11 +1456,7 @@ class Revision implements IDBAccessObject {
                }
 
                # Record the edit in revisions
-               $rev_id = $this->mId !== null
-                       ? $this->mId
-                       : $dbw->nextSequenceValue( 'revision_rev_id_seq' );
                $row = [
-                       'rev_id'         => $rev_id,
                        'rev_page'       => $this->mPage,
                        'rev_text_id'    => $this->mTextId,
                        'rev_minor_edit' => $this->mMinorEdit ? 1 : 0,
@@ -1478,6 +1472,9 @@ class Revision implements IDBAccessObject {
                                ? self::base36Sha1( $this->mText )
                                : $this->mSha1,
                ];
+               if ( $this->mId !== null ) {
+                       $row['rev_id'] = $this->mId;
+               }
 
                list( $commentFields, $commentCallback ) =
                        CommentStore::newKey( 'rev_comment' )->insertWithTempTable( $dbw, $this->mComment );
@@ -1508,7 +1505,7 @@ class Revision implements IDBAccessObject {
                $dbw->insert( 'revision', $row, __METHOD__ );
 
                if ( $this->mId === null ) {
-                       // Only if nextSequenceValue() was called
+                       // Only if auto-increment was used
                        $this->mId = $dbw->insertId();
                }
                $commentCallback( $this->mId );
@@ -1521,6 +1518,16 @@ class Revision implements IDBAccessObject {
                        );
                }
 
+               // Insert IP revision into ip_changes for use when querying for a range.
+               if ( $this->mUser === 0 && IP::isValid( $this->mUserText ) ) {
+                       $ipcRow = [
+                               'ipc_rev_id'        => $this->mId,
+                               'ipc_rev_timestamp' => $row['rev_timestamp'],
+                               'ipc_hex'           => IP::toHex( $row['rev_user_text'] ),
+                       ];
+                       $dbw->insert( 'ip_changes', $ipcRow, __METHOD__ );
+               }
+
                // Avoid PHP 7.1 warning of passing $this by reference
                $revision = $this;
                Hooks::run( 'RevisionInsertComplete', [ &$revision, $data, $flags ] );
@@ -1706,7 +1713,7 @@ class Revision implements IDBAccessObject {
         * @return Revision|null Revision or null on error
         */
        public static function newNullRevision( $dbw, $pageId, $summary, $minor, $user = null ) {
-               global $wgContentHandlerUseDB, $wgContLang;
+               global $wgContentHandlerUseDB;
 
                $fields = [ 'page_latest', 'page_namespace', 'page_title',
                                                'rev_text_id', 'rev_len', 'rev_sha1' ];
@@ -1733,9 +1740,6 @@ class Revision implements IDBAccessObject {
                                $user = $wgUser;
                        }
 
-                       // Truncate for whole multibyte characters
-                       $summary = $wgContLang->truncate( $summary, 255 );
-
                        $row = [
                                'page'       => $pageId,
                                'user_text'  => $user->getName(),
index 021f426..7025477 100644 (file)
@@ -131,7 +131,7 @@ class CreditsAction extends FormlessAction {
                $anon_ips = [];
 
                # Sift for real versus user names
-               /** @var $user User */
+               /** @var User $user */
                foreach ( $contributors as $user ) {
                        $cnt--;
                        if ( $user->isLoggedIn() ) {
index 68dda37..d3ba0aa 100644 (file)
@@ -848,7 +848,7 @@ class InfoAction extends FormlessAction {
                $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
 
                # Sift for real versus user names
-               /** @var $user User */
+               /** @var User $user */
                foreach ( $contributors as $user ) {
                        $page = $user->isAnon()
                                ? SpecialPage::getTitleFor( 'Contributions', $user->getName() )
index 2245195..4360b4d 100644 (file)
@@ -62,7 +62,7 @@ class ApiEditPage extends ApiBase {
 
                                $redirValues = [];
 
-                               /** @var $newTitle Title */
+                               /** @var Title $newTitle */
                                foreach ( $titles as $id => $newTitle ) {
                                        if ( !isset( $titles[$id - 1] ) ) {
                                                $titles[$id - 1] = $oldTitle;
@@ -359,7 +359,7 @@ class ApiEditPage extends ApiBase {
                $articleContext->setWikiPage( $pageObj );
                $articleContext->setUser( $this->getUser() );
 
-               /** @var $articleObject Article */
+               /** @var Article $articleObject */
                $articleObject = Article::newFromWikiPage( $pageObj, $articleContext );
 
                $ep = new EditPage( $articleObject );
index e6f3fc4..987bb99 100644 (file)
@@ -245,7 +245,7 @@ class ApiQuery extends ApiBase {
                $cacheMode = $this->mPageSet->getCacheMode();
 
                // Execute all unfinished modules
-               /** @var $module ApiQueryBase */
+               /** @var ApiQueryBase $module */
                foreach ( $modules as $module ) {
                        $params = $module->extractRequestParams();
                        $cacheMode = $this->mergeCacheMode(
@@ -381,7 +381,7 @@ class ApiQuery extends ApiBase {
                        ];
                }
                // Report special pages
-               /** @var $title Title */
+               /** @var Title $title */
                foreach ( $pageSet->getSpecialTitles() as $fakeId => $title ) {
                        $vals = [];
                        ApiQueryBase::addTitleInfo( $vals, $title );
@@ -434,7 +434,7 @@ class ApiQuery extends ApiBase {
                $titles = $pageSet->getGoodTitles();
                if ( count( $titles ) ) {
                        $user = $this->getUser();
-                       /** @var $title Title */
+                       /** @var Title $title */
                        foreach ( $titles as $title ) {
                                if ( $title->userCan( 'read', $user ) ) {
                                        $exportTitles[] = $title;
index 56cbaac..54be254 100644 (file)
@@ -228,7 +228,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $titleWhere = [];
                $allRedirNs = [];
                $allRedirDBkey = [];
-               /** @var $t Title */
+               /** @var Title $t */
                foreach ( $this->redirTitles as $t ) {
                        $redirNs = $t->getNamespace();
                        $redirDBkey = $t->getDBkey();
index 2a3bf38..25e9b27 100644 (file)
@@ -47,7 +47,7 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
                $titles = $this->getPageSet()->getGoodAndMissingTitles();
                $cattitles = [];
                foreach ( $categories as $c ) {
-                       /** @var $t Title */
+                       /** @var Title $t */
                        $t = $titles[$c];
                        $cattitles[$c] = $t->getDBkey();
                }
index 2ebd6de..0eaeaec 100644 (file)
@@ -91,7 +91,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
 
                $sha1s = [];
                foreach ( $files as $file ) {
-                       /** @var $file File */
+                       /** @var File $file */
                        $sha1s[$file->getName()] = $file->getSha1();
                }
 
@@ -114,7 +114,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
                        if ( $params['dir'] == 'descending' ) {
                                $dupFiles = array_reverse( $dupFiles );
                        }
-                       /** @var $dupFile File */
+                       /** @var File $dupFile */
                        foreach ( $dupFiles as $dupFile ) {
                                $dupName = $dupFile->getName();
                                if ( $image == $dupName && $dupFile->isLocal() ) {
index 7b0080e..b1df982 100644 (file)
@@ -124,7 +124,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                        }
                                }
 
-                               /** @var $img File */
+                               /** @var File $img */
                                $img = $images[$title];
 
                                if ( self::getTransformCount() >= self::TRANSFORM_LIMIT ) {
@@ -199,7 +199,7 @@ class ApiQueryImageInfo extends ApiQueryBase {
                                // Get one more to facilitate query-continue functionality
                                $count = ( $gotOne ? 1 : 0 );
                                $oldies = $img->getHistory( $params['limit'] - $count + 1, $start, $params['end'] );
-                               /** @var $oldie File */
+                               /** @var File $oldie */
                                foreach ( $oldies as $oldie ) {
                                        if ( ++$count > $params['limit'] ) {
                                                // We've reached the extra one which shows that there are
index ecdebd4..bff1978 100644 (file)
@@ -372,7 +372,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->getDisplayTitle();
                }
 
-               /** @var $title Title */
+               /** @var Title $title */
                foreach ( $this->everything as $pageid => $title ) {
                        $pageInfo = $this->extractPageInfo( $pageid, $title );
                        $fit = $pageInfo !== null && $result->addValue( [
@@ -548,7 +548,7 @@ class ApiQueryInfo extends ApiQueryBase {
 
                        $res = $this->select( __METHOD__ );
                        foreach ( $res as $row ) {
-                               /** @var $title Title */
+                               /** @var Title $title */
                                $title = $this->titles[$row->pr_page];
                                $a = [
                                        'type' => $row->pr_type,
@@ -688,7 +688,7 @@ class ApiQueryInfo extends ApiQueryBase {
        private function getTSIDs() {
                $getTitles = $this->talkids = $this->subjectids = [];
 
-               /** @var $t Title */
+               /** @var Title $t */
                foreach ( $this->everything as $t ) {
                        if ( MWNamespace::isTalk( $t->getNamespace() ) ) {
                                if ( $this->fld_subjectid ) {
index caa5f05..46c2265 100644 (file)
@@ -59,7 +59,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                $params = $this->extractRequestParams();
                $result = $this->getResult();
 
-               /** @var $qp QueryPage */
+               /** @var QueryPage $qp */
                $qp = new $this->qpMap[$params['page']]();
                if ( !$qp->userCanExecute( $this->getUser() ) ) {
                        $this->dieWithError( 'apierror-specialpage-cantexecute' );
@@ -129,7 +129,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        }
 
        public function getCacheMode( $params ) {
-               /** @var $qp QueryPage */
+               /** @var QueryPage $qp */
                $qp = new $this->qpMap[$params['page']]();
                if ( $qp->getRestriction() != '' ) {
                        return 'private';
index a4f0315..2dfa42a 100644 (file)
@@ -166,7 +166,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        // For each page we will request, the user must have read rights for that page
                        $user = $this->getUser();
                        $status = Status::newGood();
-                       /** @var $title Title */
+                       /** @var Title $title */
                        foreach ( $pageSet->getGoodTitles() as $title ) {
                                if ( !$title->userCan( 'read', $user ) ) {
                                        $status->fatal( ApiMessage::create(
index 663416e..b6a0a78 100644 (file)
@@ -150,7 +150,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
                                );
 
                                // Now, put the valid titles into the result
-                               /** @var $title Title */
+                               /** @var Title $title */
                                foreach ( $pageSet->getTitles() as $title ) {
                                        $ns = $title->getNamespace();
                                        $dbkey = $title->getDBkey();
index a283b5a..cfe1968 100644 (file)
@@ -71,7 +71,7 @@ class ApiUpload extends ApiBase {
                $this->checkPermissions( $user );
 
                // Fetch the file (usually a no-op)
-               /** @var $status Status */
+               /** @var Status $status */
                $status = $this->mUpload->fetchFile();
                if ( !$status->isGood() ) {
                        $this->dieStatus( $status );
@@ -772,7 +772,7 @@ class ApiUpload extends ApiBase {
                        $this->mParams['text'] = $this->mParams['comment'];
                }
 
-               /** @var $file LocalFile */
+               /** @var LocalFile $file */
                $file = $this->mUpload->getLocalFile();
 
                // For preferences mode, we want to watch if 'watchdefault' is set,
@@ -829,7 +829,7 @@ class ApiUpload extends ApiBase {
                        $result['result'] = 'Poll';
                        $result['stage'] = 'queued';
                } else {
-                       /** @var $status Status */
+                       /** @var Status $status */
                        $status = $this->mUpload->performUpload( $this->mParams['comment'],
                                $this->mParams['text'], $watch, $this->getUser(), $this->mParams['tags'] );
 
index 1a0cad9..c873685 100644 (file)
        "api-help-param-upload": "Debe ser enviado como un ficheiro importado usando multipart/form-data.",
        "api-help-param-multi-separate": "Separe os valores con <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|outros]].",
        "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para os bots).",
+       "api-help-param-multi-max-simple": "O número máximo de valores é {{PLURAL:1$|1$}}.",
        "api-help-param-multi-all": "Para especificar tódolos valores use <kbd>$1</kbd>.",
        "api-help-param-default": "Por defecto: $1",
        "api-help-param-default-empty": "Por defecto: <span class=\"apihelp-empty\">(baleiro)</span>",
index c9eabbb..e637be3 100644 (file)
        "apihelp-setpagelanguage-extended-description-disabled": "ページ言語の変更はこのwikiでは許可されていません。\n\nこの操作を利用するには、<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> を設定してください。",
        "apihelp-setpagelanguage-param-title": "言語を変更したいページのページ名。<var>$1pageid</var> とは同時に使用できません。",
        "apihelp-setpagelanguage-param-pageid": "言語を変更したいページのページID。<var>$1title</var> とは同時に使用できません。",
+       "apihelp-setpagelanguage-param-reason": "変更の理由。",
        "apihelp-stashedit-param-title": "編集されているページのページ名。",
        "apihelp-stashedit-param-section": "節番号です。先頭の節の場合は <kbd>0</kbd>、新しい節の場合は <kbd>new</kbd>を指定します。",
        "apihelp-stashedit-param-sectiontitle": "新しい節の名前です。",
index b09f570..0b9a57b 100644 (file)
        "api-help-param-upload": "Deve ser postado como um upload de arquivo usando multipart/form-data.",
        "api-help-param-multi-separate": "Valores separados com <kbd>|</kbd> ou [[Special:ApiHelp/main#main/datatypes|alternativas]].",
        "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para bots).",
+       "api-help-param-multi-max-simple": "O número máximo de valores é {{PLURAL:$1|$1}}.",
        "api-help-param-multi-all": "Para especificar todos os valores, use <kbd>$1</kbd>.",
        "api-help-param-default": "Padrão: $1",
        "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
index 21a811e..8e24efe 100644 (file)
@@ -515,7 +515,7 @@ class EnhancedChangesList extends ChangesList {
 
                $sinceLast = 0;
                $unvisitedOldid = null;
-               /** @var $rcObj RCCacheEntry */
+               /** @var RCCacheEntry $rcObj */
                foreach ( $block as $rcObj ) {
                        // Same logic as below inside main foreach
                        if ( $rcObj->watched && $rcObj->mAttribs['rc_timestamp'] >= $rcObj->watched ) {
@@ -537,7 +537,7 @@ class EnhancedChangesList extends ChangesList {
 
                # Total change link
                $links = [];
-               /** @var $block0 RecentChange */
+               /** @var RecentChange $block0 */
                $block0 = $block[0];
                $last = $block[count( $block ) - 1];
                if ( !$allLogs ) {
index 588f602..1992223 100644 (file)
@@ -284,7 +284,7 @@ class RecentChange {
         * @param bool $noudp
         */
        public function save( $noudp = false ) {
-               global $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang;
+               global $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker;
 
                $dbw = wfGetDB( DB_MASTER );
                if ( !is_array( $this->mExtra ) ) {
@@ -315,12 +315,8 @@ class RecentChange {
                # Trim spaces on user supplied text
                $this->mAttribs['rc_comment'] = trim( $this->mAttribs['rc_comment'] );
 
-               # Make sure summary is truncated (whole multibyte characters)
-               $this->mAttribs['rc_comment'] = $wgContLang->truncate( $this->mAttribs['rc_comment'], 255 );
-
                # Fixup database timestamps
                $this->mAttribs['rc_timestamp'] = $dbw->timestamp( $this->mAttribs['rc_timestamp'] );
-               $this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
 
                # # If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
                if ( $this->mAttribs['rc_cur_id'] == 0 ) {
@@ -333,6 +329,10 @@ class RecentChange {
                unset( $row['rc_comment'], $row['rc_comment_text'], $row['rc_comment_data'] );
                $row += CommentStore::newKey( 'rc_comment' )->insert( $dbw, $comment );
 
+               # Don't reuse an existing rc_id for the new row, if one happens to be
+               # set for some reason.
+               unset( $row['rc_id'] );
+
                # Insert new row
                $dbw->insert( 'recentchanges', $row, __METHOD__ );
 
index 40069f3..e8e250b 100644 (file)
@@ -149,7 +149,7 @@ class DeferredUpdates {
                if ( $update instanceof MergeableUpdate ) {
                        $class = get_class( $update ); // fully-qualified class
                        if ( isset( $queue[$class] ) ) {
-                               /** @var $existingUpdate MergeableUpdate */
+                               /** @var MergeableUpdate $existingUpdate */
                                $existingUpdate = $queue[$class];
                                $existingUpdate->merge( $update );
                        } else {
index 18a87e8..33d4e70 100644 (file)
@@ -548,7 +548,6 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                foreach ( $diffs as $url => $dummy ) {
                        foreach ( wfMakeUrlIndexes( $url ) as $index ) {
                                $arr[] = [
-                                       'el_id' => $this->getDB()->nextSequenceValue( 'externallinks_el_id_seq' ),
                                        'el_from' => $this->mId,
                                        'el_to' => $url,
                                        'el_index' => $index,
index 7f9af60..34f2852 100644 (file)
@@ -918,7 +918,7 @@ class DifferenceEngine extends ContextSource {
                        $wikidiff2Version = phpversion( 'wikidiff2' );
                        if (
                                $wikidiff2Version !== false &&
-                               version_compare( $wikidiff2Version, '0.3.0', '>=' )
+                               version_compare( $wikidiff2Version, '0.3', '>=' )
                        ) {
                                $text = wikidiff2_do_diff(
                                        $otext,
index 6bb1618..e5d36e1 100644 (file)
@@ -92,9 +92,8 @@ class ExternalStoreDB extends ExternalStoreMedium {
 
        public function store( $location, $data ) {
                $dbw = $this->getMaster( $location );
-               $id = $dbw->nextSequenceValue( 'blob_blob_id_seq' );
                $dbw->insert( $this->getTable( $dbw ),
-                       [ 'blob_id' => $id, 'blob_text' => $data ],
+                       [ 'blob_text' => $data ],
                        __METHOD__ );
                $id = $dbw->insertId();
                if ( !$id ) {
index 20d51c2..ed00793 100644 (file)
@@ -274,14 +274,13 @@ class LocalRepo extends FileRepo {
                        );
                };
 
-               $that = $this;
                $applyMatchingFiles = function ( ResultWrapper $res, &$searchSet, &$finalFiles )
-                       use ( $that, $fileMatchesSearch, $flags )
+                       use ( $fileMatchesSearch, $flags )
                {
                        global $wgContLang;
-                       $info = $that->getInfo();
+                       $info = $this->getInfo();
                        foreach ( $res as $row ) {
-                               $file = $that->newFileFromRow( $row );
+                               $file = $this->newFileFromRow( $row );
                                // There must have been a search for this DB key, but this has to handle the
                                // cases were title capitalization is different on the client and repo wikis.
                                $dbKeysLook = [ strtr( $file->getName(), ' ', '_' ) ];
index 460fe51..32f4504 100644 (file)
@@ -1147,7 +1147,7 @@ abstract class File implements IDBAccessObject {
                if ( !$thumb ) { // bad params?
                        $thumb = false;
                } elseif ( $thumb->isError() ) { // transform error
-                       /** @var $thumb MediaTransformError */
+                       /** @var MediaTransformError $thumb */
                        $this->lastError = $thumb->toText();
                        // Ignore errors if requested
                        if ( $wgIgnoreImageErrors && !( $flags & self::RENDER_NOW ) ) {
@@ -1282,11 +1282,10 @@ abstract class File implements IDBAccessObject {
                // Thumbnailing a very large file could result in network saturation if
                // everyone does it at once.
                if ( $this->getSize() >= 1e7 ) { // 10MB
-                       $that = $this;
                        $work = new PoolCounterWorkViaCallback( 'GetLocalFileCopy', sha1( $this->getName() ),
                                [
-                                       'doWork' => function () use ( $that ) {
-                                               return $that->getLocalRefPath();
+                                       'doWork' => function () {
+                                               return $this->getLocalRefPath();
                                        }
                                ]
                        );
index 904c932..810f788 100644 (file)
@@ -1195,8 +1195,6 @@ class LocalFile extends File {
        function upload( $src, $comment, $pageText, $flags = 0, $props = false,
                $timestamp = false, $user = null, $tags = []
        ) {
-               global $wgContLang;
-
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
@@ -1230,9 +1228,6 @@ class LocalFile extends File {
                // Trim spaces on user supplied text
                $comment = trim( $comment );
 
-               // Truncate nicely or the DB will do it for us
-               // non-nicely (dangling multi-byte chars, non-truncated version in cache).
-               $comment = $wgContLang->truncate( $comment, 255 );
                $this->lock(); // begin
                $status = $this->publish( $src, $flags, $options );
 
@@ -1556,7 +1551,7 @@ class LocalFile extends File {
                                                );
 
                                                if ( isset( $status->value['revision'] ) ) {
-                                                       /** @var $rev Revision */
+                                                       /** @var Revision $rev */
                                                        $rev = $status->value['revision'];
                                                        // Associate new page revision id
                                                        $logEntry->setAssociatedRevId( $rev->getId() );
@@ -1564,7 +1559,7 @@ class LocalFile extends File {
                                                // This relies on the resetArticleID() call in WikiPage::insertOn(),
                                                // which is triggered on $descTitle by doEditContent() above.
                                                if ( isset( $status->value['revision'] ) ) {
-                                                       /** @var $rev Revision */
+                                                       /** @var Revision $rev */
                                                        $rev = $status->value['revision'];
                                                        $updateLogPage = $rev->getPage();
                                                }
index 93a92ef..edb0c9a 100644 (file)
@@ -720,9 +720,7 @@ class WikiRevision {
                                . $this->timestamp . "\n" );
                        return false;
                }
-               $log_id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
                $data = [
-                       'log_id' => $log_id,
                        'log_type' => $this->type,
                        'log_action' => $this->action,
                        'log_timestamp' => $dbw->timestamp( $this->timestamp ),
index 645fa8a..752bc54 100644 (file)
@@ -83,7 +83,8 @@ abstract class DatabaseUpdater {
                FixDefaultJsonContentPages::class,
                CleanupEmptyCategories::class,
                AddRFCAndPMIDInterwiki::class,
-               PopulatePPSortKey::class
+               PopulatePPSortKey::class,
+               PopulateIpChanges::class,
        ];
 
        /**
index 43d3574..d01f954 100644 (file)
@@ -266,7 +266,7 @@ class MssqlInstaller extends DatabaseInstaller {
                if ( !$status->isOK() ) {
                        return false;
                }
-               /** @var $conn Database */
+               /** @var Database $conn */
                $conn = $status->value;
 
                // We need the server-level ALTER ANY LOGIN permission to create new accounts
index 0250b6f..dc63899 100644 (file)
@@ -275,7 +275,7 @@ class MysqlInstaller extends DatabaseInstaller {
                if ( !$status->isOK() ) {
                        return false;
                }
-               /** @var $conn Database */
+               /** @var Database $conn */
                $conn = $status->value;
 
                // Get current account name
index c591974..aeecbb0 100644 (file)
@@ -170,7 +170,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'doLogUsertextPopulation' ],
                        [ 'doLogSearchPopulation' ],
                        [ 'addTable', 'l10n_cache', 'patch-l10n_cache.sql' ],
-                       [ 'addIndex', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ],
                        [ 'addIndex', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ],
                        [ 'addField', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ],
                        [ 'doUpdateTranscacheField' ],
@@ -328,6 +327,8 @@ class MysqlUpdater extends DatabaseUpdater {
                                'patch-user_properties-fix-pk.sql' ],
                        [ 'addTable', 'comment', 'patch-comment-table.sql' ],
                        [ 'migrateComments' ],
+                       [ 'renameIndex', 'l10n_cache', 'lc_lang_key', 'PRIMARY', false,
+                               'patch-l10n_cache-primary-key.sql' ],
                ];
        }
 
index b501cb3..1a3fb10 100644 (file)
@@ -594,7 +594,7 @@ class PostgresInstaller extends DatabaseInstaller {
                        return $status;
                }
 
-               /** @var $conn DatabasePostgres */
+               /** @var DatabasePostgres $conn */
                $conn = $status->value;
 
                if ( $conn->tableExists( 'archive' ) ) {
index e79dcb1..9f71001 100644 (file)
@@ -54,7 +54,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'doLogUsertextPopulation' ],
                        [ 'doLogSearchPopulation' ],
                        [ 'addTable', 'l10n_cache', 'patch-l10n_cache.sql' ],
-                       [ 'addIndex', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ],
                        [ 'addIndex', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ],
                        [ 'addField', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ],
                        [ 'doUpdateTranscacheField' ],
@@ -192,6 +191,8 @@ class SqliteUpdater extends DatabaseUpdater {
                                'patch-user_properties-fix-pk.sql' ],
                        [ 'addTable', 'comment', 'patch-comment-table.sql' ],
                        [ 'migrateComments' ],
+                       [ 'renameIndex', 'l10n_cache', 'lc_lang_key', 'PRIMARY', false,
+                               'patch-l10n_cache-primary-key.sql' ],
                ];
        }
 
index 5ae3a0c..7a49051 100644 (file)
@@ -98,6 +98,7 @@
        "config-no-cli-uploads-check": "<strong>Atenção:</strong> O seu diretório padrão para envios (<code>$1</code>) não está marcado para vulnerabilidade\npara execução de script arbitrário durante a instalação do CLI.",
        "config-brokenlibxml": "O sistema tem uma combinação de PHP e libxml2 que é conflitante e pode causar corrupção de dados ocultos no MediaWiki e outros aplicativos da web.\nAtualize para o libxml2 2.7.3 ou mais recente ([https://bugs.php.net/bug.php?id=45996 bugs com o PHP]).\nInstalação abortada.",
        "config-suhosin-max-value-length": "O Suhosin está instalado e limita o parâmetro GET <code>length</code> para $1 bytes. O componente ResourceLoader trabalhará em torno deste limite, mas degradará a performance.\nSe possível, defina <code>suhosin.get.max_value_length</code> em <code>php.ini</code> para 1024 ou mais e defina <code>$wgResourceLoaderMaxQueryLength</code> em <code>LocalSettings.php</code> para o mesmo valor.",
+       "config-using-32bit": "<strong>Aviso:</strong> o seu sistema parece estar sendo executado com inteiros de 32 bits. Isto [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit não é recomendado].",
        "config-db-type": "Tipo do banco de dados:",
        "config-db-host": "Servidor do banco de dados:",
        "config-db-host-help": "Se a banco de dados do seu servidor está em um servidor diferente, digite o nome do host ou o endereço IP aqui.\n\nSe você está utilizando uma hospedagem web compartilhada, o seu provedor de hospedagem deverá fornecer o nome do host correto na sua documentação.\n\nSe você está instalando em um servidor Windows e usando o MySQL, usar \"localhost\" pode não funcionar para o nome de servidor. Se não funcionar, tente \"127.0.0.1\" para o endereço de IP local.\n\nSe você está usando PostgreSQl, deixe este campo em branco para se conectar através de um socket Unix.",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "O arquivo \"$1\" não foi encontrado. Ele foi apagado?",
        "config-extension-link": "Você sabia que sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou visitar a [https://www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
+       "config-skins-screenshots": "$1 (screenshots: $2)",
+       "config-screenshot": "screenshot",
        "mainpagetext": "<strong>O MediaWiki foi instalado.</strong>",
        "mainpagedocfooter": "Consulte o [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Manual de Usuário] para informações de como usar o software wiki.\n\n== Começando ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ do MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]"
 }
index 0a7f8cd..1c441cd 100644 (file)
@@ -82,6 +82,7 @@
        "config-no-cli-uploads-check": "<strong>Cảnh báo:</strong> Thư mục tải lên mặc định của bạn (<code>$1</code>) không được kiểm tra lỗ hỏng bảo mật dễ bị khai thác bởi các đoạn mã thực thi xấu trong quá trình cài đặt giao diện dòng lệnh.",
        "config-brokenlibxml": "Hệ thống của bạn có kết hợp các phiên bản lỗi lầm của PHP và libxml2, điều này có thể gây ra tổn thương không nhìn thấy được đối với dữ liệu trong MediaWiki và các ứng dụng Web khác.\nHãy nâng cấp lên phiên bản libxml2 2.7.3 trở lên ([https://bugs.php.net/bug.php?id=45996 lỗi nộp PHP]).\nCài đặt bị hủy bỏ.",
        "config-suhosin-max-value-length": "Suhosin được cài đặt và hạn chế tham số GET <code>length</code> (độ dài) không thể vượt quá $1 byte.\nThành phần ResourceLoader của MediaWiki sẽ khắc phục giới hạn này, nhưng điều này sẽ làm giảm hiệu suất.\nNếu có thể, bạn nên tăng <code>suhosin.get.max_value_length</code> lên 1024 trở lên trong <code>php.ini</code>, và đặt <code>$wgResourceLoaderMaxQueryLength</code> cùng giá trị trong <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Cảnh báo:</strong> Máy của bạn hình như sử dụng các số nguyên 32 bit. Chế độ này [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit không được khuyên khích].",
        "config-db-type": "Kiểu cơ sở dữ liệu:",
        "config-db-host": "Máy chủ của cơ sở dữ liệu:",
        "config-db-host-help": "Nếu máy chủ cơ sở dữ liệu của bạn nằm trên máy chủ khác, hãy điền tên hoặc địa chỉ IP của máy chủ vào đây.\n\nNếu bạn đang dùng Web hosting chia sẻ, tài liệu của nhà cung cấp hosting của bạn sẽ có tên chính xác của máy chủ.\n\nNếu bạn đang cài đặt trên một máy chủ Windows và sử dụng MySQL, việc dùng “localhost” có thể không hợp với tên máy chủ. Nếu bị như vậy, hãy thử “127.0.0.1” tức địa chỉ IP địa phương.\n\nNếu bạn đang dùng PostgreSQL, hãy để trống mục này để kết nối với một ổ cắm Unix.",
        "config-help-tooltip": "nhấn chuột để mở rộng",
        "config-nofile": "Không tìm thấy tập tin “$1”. Nó có phải bị xóa không?",
        "config-extension-link": "Bạn có biết rằng wiki của bạn có hỗ trợ [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions mở rộng]?\n\nBạn có thể truy cập [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category phần mở rộng theo thể loại] hoặc [https://www.mediawiki.org/wiki/Extension_Matrix Ma trận Mở rộng] để xem danh sách đầy đủ các phần mở rộng.",
+       "config-skins-screenshots": "$1 (ảnh chụp màn hình: $2)",
+       "config-screenshot": "ảnh chụp màn hình",
        "mainpagetext": "'''MediaWiki đã được cài đặt.'''",
        "mainpagedocfooter": "Xin đọc [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Hướng dẫn sử dụng] để biết thêm thông tin về cách sử dụng phần mềm wiki.\n\n== Để bắt đầu ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Danh sách các thiết lập cấu hình]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Các câu hỏi thường gặp MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Tìm hiểu cách chống spam tại wiki của bạn]"
 }
index b5f331b..b68fdae 100644 (file)
@@ -734,7 +734,6 @@ class JobQueueDB extends JobQueue {
                        'job_title' => $job->getTitle()->getDBkey(),
                        'job_params' => self::makeBlob( $job->getParams() ),
                        // Additional job metadata
-                       'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
                        'job_timestamp' => $dbw->timestamp(),
                        'job_sha1' => Wikimedia\base_convert(
                                sha1( serialize( $job->getDeduplicationInfo() ) ),
index eb72edc..de5a103 100644 (file)
@@ -1250,7 +1250,7 @@ class SwiftFileBackend extends FileBackendStore {
         * @return StatusValue[]
         */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
-               /** @var $statuses StatusValue[] */
+               /** @var StatusValue[] $statuses */
                $statuses = [];
 
                $auth = $this->getAuthentication();
index f002d3e..8121654 100644 (file)
@@ -315,7 +315,7 @@ class ChronologyProtector implements LoggerAwareInterface {
         * @return array
         */
        private static function mergePositions( $curValue, array $shutdownPositions ) {
-               /** @var $curPositions DBMasterPos[] */
+               /** @var DBMasterPos[] $curPositions */
                if ( $curValue === false ) {
                        $curPositions = $shutdownPositions;
                } else {
index b925e2c..4c3cbdd 100644 (file)
@@ -34,7 +34,7 @@ use IP;
  * @see Database
  */
 class DatabaseMysqli extends DatabaseMysqlBase {
-       /** @var $mConn mysqli */
+       /** @var mysqli $mConn */
 
        /**
         * @param string $sql
index 736447f..0283c4b 100644 (file)
@@ -420,12 +420,9 @@ interface IDatabase {
        /**
         * Get the inserted value of an auto-increment row
         *
-        * The value inserted should be fetched from nextSequenceValue()
-        *
-        * Example:
-        * $id = $dbw->nextSequenceValue( 'page_page_id_seq' );
-        * $dbw->insert( 'page', [ 'page_id' => $id ] );
-        * $id = $dbw->insertId();
+        * This should only be called after an insert that used an auto-incremented
+        * value. If no such insert was previously done in the current database
+        * session, the return value is undefined.
         *
         * @return int
         */
index 493cde8..12e59b5 100644 (file)
@@ -9,7 +9,7 @@ use stdClass;
  * doesn't go anywhere near an actual database.
  */
 class FakeResultWrapper extends ResultWrapper {
-       /** @var $result stdClass[] */
+       /** @var stdClass[] $result */
 
        /**
         * @param stdClass[] $rows
index 4cfa542..f6d080e 100644 (file)
@@ -239,7 +239,7 @@ interface ILBFactory {
         *   - cluster : wait on the given external load balancer DBs
         *   - timeout : Max wait time. Default: ~60 seconds
         *   - ifWritesSince: Only wait if writes were done since this UNIX timestamp
-        * @throws DBReplicationWaitError If a timeout or error occured waiting on a DB cluster
+        * @throws DBReplicationWaitError If a timeout or error occurred waiting on a DB cluster
         */
        public function waitForReplication( array $opts = [] );
 
index 36de39e..8393e2b 100644 (file)
@@ -384,9 +384,9 @@ class LoadBalancer implements ILoadBalancer {
                        throw new InvalidArgumentException( "Empty server array given to LoadBalancer" );
                }
 
-               /** @var $i int|bool Index of selected server */
+               /** @var int|bool $i Index of selected server */
                $i = false;
-               /** @var $laggedReplicaMode bool Whether server is considered lagged */
+               /** @var bool $laggedReplicaMode Whether server is considered lagged */
                $laggedReplicaMode = false;
 
                // Quickly look through the available servers for a server that meets criteria...
@@ -538,7 +538,7 @@ class LoadBalancer implements ILoadBalancer {
        public function getAnyOpenConnection( $i ) {
                foreach ( $this->mConns as $connsByServer ) {
                        if ( !empty( $connsByServer[$i] ) ) {
-                               /** @var $serverConns IDatabase[] */
+                               /** @var IDatabase[] $serverConns */
                                $serverConns = $connsByServer[$i];
 
                                return reset( $serverConns );
index 1da9468..6494c26 100644 (file)
@@ -56,7 +56,7 @@ class SamplingStatsdClient extends StatsdClient {
                }
                if ( $samplingRates ) {
                        array_walk( $data, function ( $item ) use ( $samplingRates ) {
-                               /** @var $item StatsdData */
+                               /** @var StatsdData $item */
                                foreach ( $samplingRates as $pattern => $rate ) {
                                        if ( fnmatch( $pattern, $item->getKey(), FNM_NOESCAPE ) ) {
                                                $item->setSampleRate( $item->getSampleRate() * $rate );
index 35c45de..90865ff 100644 (file)
@@ -61,11 +61,9 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
                        'fixedUrl' => false,
                ], $params );
                // Ensure that the url parameter has a trailing slash.
-               $mparams['url'] = preg_replace(
-                       '#/?$#',
-                       '/',
-                       $mparams['url']
-               );
+               if ( substr( $mparams['url'], -1 ) !== '/' ) {
+                       $mparams['url'] .= '/';
+               }
                // Ensure the correct domain format: strip protocol, port,
                // and trailing slash if present.  This lets us use
                // $wgCanonicalServer as a default value, which is very convenient.
index 6587304..8b51932 100644 (file)
@@ -593,10 +593,7 @@ class ManualLogEntry extends LogEntryBase {
         * @throws MWException
         */
        public function insert( IDatabase $dbw = null ) {
-               global $wgContLang;
-
                $dbw = $dbw ?: wfGetDB( DB_MASTER );
-               $id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
 
                if ( $this->timestamp === null ) {
                        $this->timestamp = wfTimestampNow();
@@ -605,9 +602,6 @@ class ManualLogEntry extends LogEntryBase {
                // Trim spaces on user supplied text
                $comment = trim( $this->getComment() );
 
-               // Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $comment, 255 );
-
                $params = $this->getParameters();
                $relations = $this->relations;
 
@@ -619,7 +613,6 @@ class ManualLogEntry extends LogEntryBase {
                }
 
                $data = [
-                       'log_id' => $id,
                        'log_type' => $this->getType(),
                        'log_action' => $this->getSubtype(),
                        'log_timestamp' => $dbw->timestamp( $this->getTimestamp() ),
index 257f76d..e421209 100644 (file)
@@ -90,12 +90,10 @@ class LogPage {
                global $wgLogRestrictions;
 
                $dbw = wfGetDB( DB_MASTER );
-               $log_id = $dbw->nextSequenceValue( 'logging_log_id_seq' );
 
                // @todo FIXME private/protected/public property?
                $this->timestamp = $now = wfTimestampNow();
                $data = [
-                       'log_id' => $log_id,
                        'log_type' => $this->type,
                        'log_action' => $this->action,
                        'log_timestamp' => $dbw->timestamp( $now ),
@@ -329,8 +327,6 @@ class LogPage {
         * @return int The log_id of the inserted log entry
         */
        public function addEntry( $action, $target, $comment, $params = [], $doer = null ) {
-               global $wgContLang;
-
                if ( !is_array( $params ) ) {
                        $params = [ $params ];
                }
@@ -342,9 +338,6 @@ class LogPage {
                # Trim spaces on user supplied text
                $comment = trim( $comment );
 
-               # Truncate for whole multibyte characters.
-               $comment = $wgContLang->truncate( $comment, 255 );
-
                $this->action = $action;
                $this->target = $target;
                $this->comment = $comment;
index 32208cc..de438da 100644 (file)
@@ -221,7 +221,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
                }
 
                # Try a hook. Called "Bitmap" for historical reasons.
-               /** @var $mto MediaTransformOutput */
+               /** @var MediaTransformOutput $mto */
                $mto = null;
                Hooks::run( 'BitmapHandlerTransform', [ $this, $image, &$scalerParams, &$mto ] );
                if ( !is_null( $mto ) ) {
index f6580e9..c98d4f7 100644 (file)
@@ -735,6 +735,17 @@ class PageArchive {
                                        ] );
 
                                $revision->insertOn( $dbw );
+
+                               // Also restore reference to the revision in ip_changes if it was an IP edit.
+                               if ( (int)$row->ar_rev_id === 0 && IP::isValid( $row->ar_user_text ) ) {
+                                       $ipcRow = [
+                                               'ipc_rev_id' => $row->ar_rev_id,
+                                               'ipc_rev_timestamp' => $row->ar_timestamp,
+                                               'ipc_hex' => IP::toHex( $row->ar_user_text ),
+                                       ];
+                                       $dbw->insert( 'ip_changes', $ipcRow, __METHOD__ );
+                               }
+
                                $restored++;
 
                                Hooks::run( 'ArticleRevisionUndeleted',
index 790845e..bf8a597 100644 (file)
@@ -878,11 +878,10 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // Update the DB post-send if the page has not cached since now
-               $that = $this;
                $latest = $this->getLatest();
                DeferredUpdates::addCallableUpdate(
-                       function () use ( $that, $retval, $latest ) {
-                               $that->insertRedirectEntry( $retval, $latest );
+                       function () use ( $retval, $latest ) {
+                               $this->insertRedirectEntry( $retval, $latest );
                        },
                        DeferredUpdates::POSTSEND,
                        wfGetDB( DB_MASTER )
@@ -1166,11 +1165,10 @@ class WikiPage implements Page, IDBAccessObject {
         *   page ID is already in use.
         */
        public function insertOn( $dbw, $pageId = null ) {
-               $pageIdForInsert = $pageId ?: $dbw->nextSequenceValue( 'page_page_id_seq' );
+               $pageIdForInsert = $pageId ? [ 'page_id' => $pageId ] : [];
                $dbw->insert(
                        'page',
                        [
-                               'page_id'           => $pageIdForInsert,
                                'page_namespace'    => $this->mTitle->getNamespace(),
                                'page_title'        => $this->mTitle->getDBkey(),
                                'page_restrictions' => '',
@@ -1180,7 +1178,7 @@ class WikiPage implements Page, IDBAccessObject {
                                'page_touched'      => $dbw->timestamp(),
                                'page_latest'       => 0, // Fill this in shortly...
                                'page_len'          => 0, // Fill this in shortly...
-                       ],
+                       ] + $pageIdForInsert,
                        __METHOD__,
                        'IGNORE'
                );
@@ -1659,7 +1657,7 @@ class WikiPage implements Page, IDBAccessObject {
                // Convenience variables
                $now = wfTimestampNow();
                $oldid = $meta['oldId'];
-               /** @var $oldContent Content|null */
+               /** @var Content|null $oldContent */
                $oldContent = $meta['oldContent'];
                $newsize = $content->getSize();
 
@@ -2299,7 +2297,7 @@ class WikiPage implements Page, IDBAccessObject {
        public function doUpdateRestrictions( array $limit, array $expiry,
                &$cascade, $reason, User $user, $tags = null
        ) {
-               global $wgCascadingRestrictionLevels, $wgContLang;
+               global $wgCascadingRestrictionLevels;
 
                if ( wfReadOnly() ) {
                        return Status::newFatal( wfMessage( 'readonlytext', wfReadOnlyReason() ) );
@@ -2372,9 +2370,6 @@ class WikiPage implements Page, IDBAccessObject {
                        $logAction = 'protect';
                }
 
-               // Truncate for whole multibyte characters
-               $reason = $wgContLang->truncate( $reason, 255 );
-
                $logRelationsValues = [];
                $logRelationsField = null;
                $logParamsDetails = [];
@@ -2446,7 +2441,6 @@ class WikiPage implements Page, IDBAccessObject {
                                        $dbw->insert(
                                                'page_restrictions',
                                                [
-                                                       'pr_id' => $dbw->nextSequenceValue( 'page_restrictions_pr_id_seq' ),
                                                        'pr_page' => $id,
                                                        'pr_type' => $action,
                                                        'pr_level' => $restrictions,
@@ -2839,9 +2833,14 @@ class WikiPage implements Page, IDBAccessObject {
                        'FOR UPDATE',
                        $commentQuery['joins']
                );
+
                // Build their equivalent archive rows
                $rowsInsert = [];
                $revids = [];
+
+               /** @var int[] Revision IDs of edits that were made by IPs */
+               $ipRevIds = [];
+
                foreach ( $res as $row ) {
                        $comment = $revCommentStore->getComment( $row );
                        $rowInsert = [
@@ -2867,6 +2866,12 @@ class WikiPage implements Page, IDBAccessObject {
                        }
                        $rowsInsert[] = $rowInsert;
                        $revids[] = $row->rev_id;
+
+                       // Keep track of IP edits, so that the corresponding rows can
+                       // be deleted in the ip_changes table.
+                       if ( (int)$row->rev_user === 0 && IP::isValid( $row->rev_user_text ) ) {
+                               $ipRevIds[] = $row->rev_id;
+                       }
                }
                // Copy them into the archive table
                $dbw->insert( 'archive', $rowsInsert, __METHOD__ );
@@ -2885,6 +2890,11 @@ class WikiPage implements Page, IDBAccessObject {
                        $dbw->delete( 'revision_comment_temp', [ 'revcomment_rev' => $revids ], __METHOD__ );
                }
 
+               // Also delete records from ip_changes as applicable.
+               if ( count( $ipRevIds ) > 0 ) {
+                       $dbw->delete( 'ip_changes', [ 'ipc_rev_id' => $ipRevIds ], __METHOD__ );
+               }
+
                // Log the deletion, if the page was suppressed, put it in the suppression log instead
                $logtype = $suppress ? 'suppress' : 'delete';
 
@@ -3148,9 +3158,6 @@ class WikiPage implements Page, IDBAccessObject {
                // Trim spaces on user supplied text
                $summary = trim( $summary );
 
-               // Truncate for whole multibyte characters.
-               $summary = $wgContLang->truncate( $summary, 255 );
-
                // Save
                $flags = EDIT_UPDATE | EDIT_INTERNAL;
 
index 48a9f94..afe900d 100644 (file)
@@ -52,7 +52,7 @@ abstract class FormattedRCFeed extends RCFeed {
         */
        public function notify( RecentChange $rc, $actionComment = null ) {
                $params = $this->params;
-               /** @var $formatter RCFeedFormatter */
+               /** @var RCFeedFormatter $formatter */
                $formatter = is_object( $params['formatter'] ) ? $params['formatter'] : new $params['formatter'];
 
                $line = $formatter->getLine( $params, $rc, $actionComment );
index 8973fe3..d535ffc 100644 (file)
@@ -296,6 +296,16 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return true;
        }
 
+       /**
+        * @return array
+        */
+       public function getPreloadLinks( ResourceLoaderContext $context ) {
+               $url = self::getStartupModulesUrl( $context );
+               return [
+                       $url => [ 'as' => 'script' ]
+               ];
+       }
+
        /**
         * Base modules required for the base environment of ResourceLoader
         *
@@ -359,6 +369,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                }, [
                        '$VARS.wgLegacyJavaScriptGlobals' => $this->getConfig()->get( 'LegacyJavaScriptGlobals' ),
                        '$VARS.configuration' => $this->getConfigSettings( $context ),
+                       // This url may be preloaded. See getPreloadLinks().
                        '$VARS.baseModulesUri' => self::getStartupModulesUrl( $context ),
                ] );
                $pairs['$CODE.registrations()'] = str_replace(
index 32d4891..b098422 100644 (file)
@@ -23,8 +23,8 @@
  * Item class for a filearchive table row
  */
 class RevDelArchivedFileItem extends RevDelFileItem {
-       /** @var $list RevDelArchivedFileList */
-       /** @var $file ArchivedFile */
+       /** @var RevDelArchivedFileList $list */
+       /** @var ArchivedFile $file */
        /** @var LocalFile */
        protected $lockFile;
 
index a2c58e6..011c7b0 100644 (file)
@@ -83,7 +83,7 @@ abstract class RevDelList extends RevisionListBase {
        public function areAnySuppressed() {
                $bit = $this->getSuppressBit();
 
-               /** @var $item RevDelItem */
+               /** @var RevDelItem $item */
                foreach ( $this as $item ) {
                        if ( $item->getBits() & $bit ) {
                                return true;
@@ -151,7 +151,7 @@ abstract class RevDelList extends RevisionListBase {
                // passed to doPostCommitUpdates().
                $visibilityChangeMap = [];
 
-               /** @var $item RevDelItem */
+               /** @var RevDelItem $item */
                foreach ( $this as $item ) {
                        unset( $missing[$item->getId()] );
 
@@ -294,7 +294,7 @@ abstract class RevDelList extends RevisionListBase {
 
        final protected function acquireItemLocks() {
                $status = Status::newGood();
-               /** @var $item RevDelItem */
+               /** @var RevDelItem $item */
                foreach ( $this as $item ) {
                        $status->merge( $item->lock() );
                }
@@ -304,7 +304,7 @@ abstract class RevDelList extends RevisionListBase {
 
        final protected function releaseItemLocks() {
                $status = Status::newGood();
-               /** @var $item RevDelItem */
+               /** @var RevDelItem $item */
                foreach ( $this as $item ) {
                        $status->merge( $item->unlock() );
                }
index e106f37..7fcfbe5 100644 (file)
@@ -214,8 +214,6 @@ class DBSiteStore implements SiteStore {
                                        'sites', $fields, [ 'site_id' => $rowId ], __METHOD__
                                ) && $success;
                        } else {
-                               $rowId = $dbw->nextSequenceValue( 'sites_site_id_seq' );
-                               $fields['site_id'] = $rowId;
                                $success = $dbw->insert( 'sites', $fields, __METHOD__ ) && $success;
                                $rowId = $dbw->insertId();
                        }
index e1d0034..df7a9ed 100644 (file)
@@ -1251,11 +1251,10 @@ abstract class Skin extends ContextSource {
        function buildSidebar() {
                global $wgEnableSidebarCache, $wgSidebarCacheExpiry;
 
-               $that = $this;
-               $callback = function () use ( $that ) {
+               $callback = function () {
                        $bar = [];
-                       $that->addToSidebar( $bar, 'sidebar' );
-                       Hooks::run( 'SkinBuildSidebar', [ $that, &$bar ] );
+                       $this->addToSidebar( $bar, 'sidebar' );
+                       Hooks::run( 'SkinBuildSidebar', [ $this, &$bar ] );
 
                        return $bar;
                };
index 500c2e9..0cdc55f 100644 (file)
@@ -688,7 +688,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
 
                        if ( isset( $singleFieldInfo['options'] ) ) {
                                $descriptor['options'] = array_flip( array_map( function ( $message ) {
-                                       /** @var $message Message */
+                                       /** @var Message $message */
                                        return $message->parse();
                                }, $singleFieldInfo['options'] ) );
                        }
index 66e4fbe..252dc68 100644 (file)
@@ -618,7 +618,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return bool|string
         */
        public static function processForm( array $data, IContextSource $context ) {
-               global $wgBlockAllowsUTEdit, $wgHideUserContribLimit, $wgContLang;
+               global $wgBlockAllowsUTEdit, $wgHideUserContribLimit;
 
                $performer = $context->getUser();
 
@@ -720,8 +720,7 @@ class SpecialBlock extends FormSpecialPage {
                $block = new Block();
                $block->setTarget( $target );
                $block->setBlocker( $performer );
-               # Truncate reason for whole multibyte characters
-               $block->mReason = $wgContLang->truncate( $data['Reason'][0], 255 );
+               $block->mReason = $data['Reason'][0];
                $block->mExpiry = $expiryTime;
                $block->prevents( 'createaccount', $data['CreateAccount'] );
                $block->prevents( 'editownusertalk', ( !$wgBlockAllowsUTEdit || $data['DisableUTEdit'] ) );
index bee6a39..87c899f 100644 (file)
@@ -154,8 +154,6 @@ class SpecialChangeContentModel extends FormSpecialPage {
        }
 
        public function onSubmit( array $data ) {
-               global $wgContLang;
-
                if ( $data['pagetitle'] === '' ) {
                        // Initial form view of special page, pass
                        return false;
@@ -240,8 +238,6 @@ class SpecialChangeContentModel extends FormSpecialPage {
                if ( $data['reason'] !== '' ) {
                        $reason .= $this->msg( 'colon-separator' )->inContentLanguage()->text() . $data['reason'];
                }
-               # Truncate for whole multibyte characters.
-               $reason = $wgContLang->truncate( $reason, 255 );
 
                // Run edit filters
                $derivativeContext = new DerivativeContext( $this->getContext() );
index 1b14fcb..5a5f005 100644 (file)
@@ -103,7 +103,12 @@ class SpecialContributions extends IncludableSpecialPage {
                                'pagetitle',
                                $this->msg( 'contributions-title', $target )->plain()
                        )->inContentLanguage() );
-                       $this->getSkin()->setRelevantUser( $userObj );
+
+                       # For IP ranges, we want the contributionsSub, but not the skin-dependent
+                       # links under 'Tools', which may include irrelevant links like 'Logs'.
+                       if ( !IP::isValidRange( $target ) ) {
+                               $this->getSkin()->setRelevantUser( $userObj );
+                       }
                } else {
                        $out->addSubtitle( $this->msg( 'sp-contributions-newbies-sub' ) );
                        $out->setHTMLTitle( $this->msg(
@@ -206,7 +211,12 @@ class SpecialContributions extends IncludableSpecialPage {
                                'associated' => $this->opts['associated'],
                        ] );
 
-                       if ( !$pager->getNumRows() ) {
+                       if ( IP::isValidRange( $target ) && !$pager->isQueryableRange( $target ) ) {
+                               // Valid range, but outside CIDR limit.
+                               $limits = $this->getConfig()->get( 'RangeContributionsCIDRLimit' );
+                               $limit = $limits[ IP::isIPv4( $target ) ? 'IPv4' : 'IPv6' ];
+                               $out->addWikiMsg( 'sp-contributions-outofrange', $limit );
+                       } elseif ( !$pager->getNumRows() ) {
                                $out->addWikiMsg( 'nocontribs', $target );
                        } else {
                                # Show a message about replica DB lag, if applicable
@@ -223,11 +233,14 @@ class SpecialContributions extends IncludableSpecialPage {
                                }
                                $out->addHTML( $output );
                        }
+
                        $out->preventClickjacking( $pager->getPreventClickjacking() );
 
                        # Show the appropriate "footer" message - WHOIS tools, etc.
                        if ( $this->opts['contribs'] == 'newbie' ) {
                                $message = 'sp-contributions-footer-newbies';
+                       } elseif ( IP::isValidRange( $target ) ) {
+                               $message = 'sp-contributions-footer-anon-range';
                        } elseif ( IP::isIPAddress( $target ) ) {
                                $message = 'sp-contributions-footer-anon';
                        } elseif ( $userObj->isAnon() ) {
@@ -258,8 +271,11 @@ class SpecialContributions extends IncludableSpecialPage {
         */
        protected function contributionsSub( $userObj ) {
                if ( $userObj->isAnon() ) {
-                       // Show a warning message that the user being searched for doesn't exists
-                       if ( !User::isIP( $userObj->getName() ) ) {
+                       // Show a warning message that the user being searched for doesn't exists.
+                       // User::isIP returns true for IP address and usemod IPs like '123.123.123.xxx',
+                       // but returns false for IP ranges. We don't want to suggest either of these are
+                       // valid usernames which we would with the 'contributions-userdoesnotexist' message.
+                       if ( !User::isIP( $userObj->getName() ) && !$userObj->isIPRange() ) {
                                $this->getOutput()->wrapWikiMsg(
                                        "<div class=\"mw-userpage-userdoesnotexist error\">\n\$1\n</div>",
                                        [
@@ -286,7 +302,13 @@ class SpecialContributions extends IncludableSpecialPage {
                        // Do not expose the autoblocks, since that may lead to a leak of accounts' IPs,
                        // and also this will display a totally irrelevant log entry as a current block.
                        if ( !$this->including() ) {
-                               $block = Block::newFromTarget( $userObj, $userObj );
+                               // For IP ranges you must give Block::newFromTarget the CIDR string and not a user object.
+                               if ( $userObj->isIPRange() ) {
+                                       $block = Block::newFromTarget( $userObj->getName(), $userObj->getName() );
+                               } else {
+                                       $block = Block::newFromTarget( $userObj, $userObj );
+                               }
+
                                if ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) {
                                        if ( $block->getType() == Block::TYPE_RANGE ) {
                                                $nt = MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget();
@@ -332,10 +354,14 @@ class SpecialContributions extends IncludableSpecialPage {
                $talkpage = $target->getTalkPage();
 
                $linkRenderer = $sp->getLinkRenderer();
-               $tools['user-talk'] = $linkRenderer->makeLink(
-                       $talkpage,
-                       $sp->msg( 'sp-contributions-talk' )->text()
-               );
+
+               # No talk pages for IP ranges.
+               if ( !IP::isValidRange( $username ) ) {
+                       $tools['user-talk'] = $linkRenderer->makeLink(
+                               $talkpage,
+                               $sp->msg( 'sp-contributions-talk' )->text()
+                       );
+               }
 
                if ( ( $id !== null ) || ( $id === null && IP::isIPAddress( $username ) ) ) {
                        if ( $sp->getUser()->isAllowed( 'block' ) ) { # Block / Change block / Unblock links
@@ -374,24 +400,28 @@ class SpecialContributions extends IncludableSpecialPage {
                                );
                        }
                }
-               # Uploads
-               $tools['uploads'] = $linkRenderer->makeKnownLink(
-                       SpecialPage::getTitleFor( 'Listfiles', $username ),
-                       $sp->msg( 'sp-contributions-uploads' )->text()
-               );
 
-               # Other logs link
-               $tools['logs'] = $linkRenderer->makeKnownLink(
-                       SpecialPage::getTitleFor( 'Log', $username ),
-                       $sp->msg( 'sp-contributions-logs' )->text()
-               );
+               # Don't show some links for IP ranges
+               if ( !IP::isValidRange( $username ) ) {
+                       # Uploads
+                       $tools['uploads'] = $linkRenderer->makeKnownLink(
+                               SpecialPage::getTitleFor( 'Listfiles', $username ),
+                               $sp->msg( 'sp-contributions-uploads' )->text()
+                       );
 
-               # Add link to deleted user contributions for priviledged users
-               if ( $sp->getUser()->isAllowed( 'deletedhistory' ) ) {
-                       $tools['deletedcontribs'] = $linkRenderer->makeKnownLink(
-                               SpecialPage::getTitleFor( 'DeletedContributions', $username ),
-                               $sp->msg( 'sp-contributions-deleted', $username )->text()
+                       # Other logs link
+                       $tools['logs'] = $linkRenderer->makeKnownLink(
+                               SpecialPage::getTitleFor( 'Log', $username ),
+                               $sp->msg( 'sp-contributions-logs' )->text()
                        );
+
+                       # Add link to deleted user contributions for priviledged users
+                       if ( $sp->getUser()->isAllowed( 'deletedhistory' ) ) {
+                               $tools['deletedcontribs'] = $linkRenderer->makeKnownLink(
+                                       SpecialPage::getTitleFor( 'DeletedContributions', $username ),
+                                       $sp->msg( 'sp-contributions-deleted', $username )->text()
+                               );
+                       }
                }
 
                # Add a link to change user rights for privileged users
index 0a653e7..693b8aa 100644 (file)
@@ -155,7 +155,6 @@ class SpecialNewFiles extends IncludableSpecialPage {
 
                        'mediatype' => [
                                'type' => 'multiselect',
-                               'dropdown' => true,
                                'flatlist' => true,
                                'name' => 'mediatype',
                                'label-message' => 'newimages-mediatype',
index 4cdc78f..d0eb8e3 100644 (file)
@@ -1256,7 +1256,6 @@ class UploadForm extends HTMLForm {
                $out->addJsConfigVars( $scriptVars );
 
                $out->addModules( [
-                       'mediawiki.action.edit', // For <charinsert> support
                        'mediawiki.special.upload', // Extras for thumbnail and license preview.
                ] );
        }
index 2206be8..924fd06 100644 (file)
@@ -79,7 +79,7 @@ class BlockListPager extends TablePager {
                        }
                }
 
-               /** @var $row object */
+               /** @var object $row */
                $row = $this->mCurrentRow;
 
                $language = $this->getLanguage();
index d7819c4..7d0a9df 100644 (file)
@@ -87,6 +87,10 @@ class ContribsPager extends RangeChronologicalPager {
                }
                $this->getDateRangeCond( $startTimestamp, $endTimestamp );
 
+               // This property on IndexPager is set by $this->getIndexField() in parent::__construct().
+               // We need to reassign it here so that it is used when the actual query is ran.
+               $this->mIndexField = $this->getIndexField();
+
                // Most of this code will use the 'contributions' group DB, which can map to replica DBs
                // with extra user based indexes or partioning by user. The additional metadata
                // queries should use a regular replica DB since the lookup pattern is not all by user.
@@ -207,6 +211,12 @@ class ContribsPager extends RangeChronologicalPager {
                        'join_conds' => $join_cond
                ];
 
+               // For IPv6, we use ipc_rev_timestamp on ip_changes as the index field,
+               // which will be referenced when parsing the results of a query.
+               if ( self::isQueryableRange( $this->target ) ) {
+                       $queryInfo['fields'][] = 'ipc_rev_timestamp';
+               }
+
                ChangeTags::modifyDisplayQuery(
                        $queryInfo['tables'],
                        $queryInfo['fields'],
@@ -257,8 +267,18 @@ class ContribsPager extends RangeChronologicalPager {
                                $condition['rev_user'] = $uid;
                                $index = 'user_timestamp';
                        } else {
-                               $condition['rev_user_text'] = $this->target;
-                               $index = 'usertext_timestamp';
+                               $ipRangeConds = $this->getIpRangeConds( $this->mDb, $this->target );
+
+                               if ( $ipRangeConds ) {
+                                       $tables[] = 'ip_changes';
+                                       $join_conds['ip_changes'] = [
+                                               'LEFT JOIN', [ 'ipc_rev_id = rev_id' ]
+                                       ];
+                                       $condition[] = $ipRangeConds;
+                               } else {
+                                       $condition['rev_user_text'] = $this->target;
+                                       $index = 'usertext_timestamp';
+                               }
                        }
                }
 
@@ -305,8 +325,57 @@ class ContribsPager extends RangeChronologicalPager {
                return [];
        }
 
-       function getIndexField() {
-               return 'rev_timestamp';
+       /**
+        * Get SQL conditions for an IP range, if applicable
+        * @param IDatabase      $db
+        * @param string         $ip The IP address or CIDR
+        * @return string|false  SQL for valid IP ranges, false if invalid
+        */
+       private function getIpRangeConds( $db, $ip ) {
+               // First make sure it is a valid range and they are not outside the CIDR limit
+               if ( !$this->isQueryableRange( $ip ) ) {
+                       return false;
+               }
+
+               list( $start, $end ) = IP::parseRange( $ip );
+
+               return 'ipc_hex BETWEEN ' . $db->addQuotes( $start ) . ' AND ' . $db->addQuotes( $end );
+       }
+
+       /**
+        * Is the given IP a range and within the CIDR limit?
+        *
+        * @param string $ipRange
+        * @return bool True if it is valid
+        * @since 1.30
+        */
+       public function isQueryableRange( $ipRange ) {
+               $limits = $this->getConfig()->get( 'RangeContributionsCIDRLimit' );
+
+               $bits = IP::parseCIDR( $ipRange )[1];
+               if (
+                       ( $bits === false ) ||
+                       ( IP::isIPv4( $ipRange ) && $bits < $limits['IPv4'] ) ||
+                       ( IP::isIPv6( $ipRange ) && $bits < $limits['IPv6'] )
+               ) {
+                       return false;
+               }
+
+               return true;
+       }
+
+       /**
+        * Override of getIndexField() in IndexPager.
+        * For IP ranges, it's faster to use the replicated ipc_rev_timestamp
+        * on the `ip_changes` table than the rev_timestamp on the `revision` table.
+        * @return string Name of field
+        */
+       public function getIndexField() {
+               if ( self::isQueryableRange( $this->target ) ) {
+                       return 'ipc_rev_timestamp';
+               } else {
+                       return 'rev_timestamp';
+               }
        }
 
        function doBatchLookups() {
@@ -400,6 +469,7 @@ class ContribsPager extends RangeChronologicalPager {
                        # Mark current revisions
                        $topmarktext = '';
                        $user = $this->getUser();
+
                        if ( $row->rev_id === $row->page_latest ) {
                                $topmarktext .= '<span class="mw-uctop">' . $this->messages['uctop'] . '</span>';
                                $classes[] = 'mw-contributions-current';
@@ -473,8 +543,10 @@ class ContribsPager extends RangeChronologicalPager {
 
                        # Show user names for /newbies as there may be different users.
                        # Note that only unprivileged users have rows with hidden user names excluded.
+                       # When querying for an IP range, we want to always show user and user talk links.
                        $userlink = '';
-                       if ( $this->contribs == 'newbie' && !$rev->isDeleted( Revision::DELETED_USER ) ) {
+                       if ( ( $this->contribs == 'newbie' && !$rev->isDeleted( Revision::DELETED_USER ) )
+                               || self::isQueryableRange( $this->target ) ) {
                                $userlink = ' . . ' . $lang->getDirMark()
                                        . Linker::userLink( $rev->getUser(), $rev->getUserText() );
                                $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
index 20b44d2..1587abc 100644 (file)
@@ -120,7 +120,7 @@ class ProtectedPagesPager extends TablePager {
         * @throws MWException
         */
        function formatValue( $field, $value ) {
-               /** @var $row object */
+               /** @var object $row */
                $row = $this->mCurrentRow;
 
                switch ( $field ) {
index 48477f8..755f9fd 100644 (file)
@@ -290,7 +290,6 @@ class UploadStash {
                }
 
                $this->fileMetadata[$key] = [
-                       'us_id' => $dbw->nextSequenceValue( 'uploadstash_us_id_seq' ),
                        'us_user' => $this->userId,
                        'us_key' => $key,
                        'us_orig_path' => $path,
index 08f054d..0c39610 100644 (file)
@@ -827,6 +827,16 @@ class User implements IDBAccessObject {
                        || IP::isIPv6( $name );
        }
 
+       /**
+        * Is the user an IP range?
+        *
+        * @since 1.30
+        * @return bool
+        */
+       public function isIPRange() {
+               return IP::isValidRange( $this->mName );
+       }
+
        /**
         * Is the input a valid username?
         *
@@ -4109,12 +4119,10 @@ class User implements IDBAccessObject {
                        unset( $params['options'] );
                }
                $dbw = wfGetDB( DB_MASTER );
-               $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
 
                $noPass = PasswordFactory::newInvalidPassword()->toString();
 
                $fields = [
-                       'user_id' => $seqVal,
                        'user_name' => $name,
                        'user_password' => $noPass,
                        'user_newpassword' => $noPass,
@@ -4179,10 +4187,8 @@ class User implements IDBAccessObject {
                $noPass = PasswordFactory::newInvalidPassword()->toString();
 
                $dbw = wfGetDB( DB_MASTER );
-               $seqVal = $dbw->nextSequenceValue( 'user_user_id_seq' );
                $dbw->insert( 'user',
                        [
-                               'user_id' => $seqVal,
                                'user_name' => $this->mName,
                                'user_password' => $noPass,
                                'user_newpassword' => $noPass,
index c3662c9..4268c7b 100644 (file)
@@ -7,6 +7,7 @@
                        "Tokoabibi"
                ]
        },
+       "underline-never": "caaytu",
        "sunday": "pilipayan",
        "monday": "sakacacay a demied nu lipay",
        "tuesday": "sakatusa a demied nu lipay",
@@ -80,7 +81,7 @@
        "category-article-count": "{{PLURAL:$2|uyni kakuniza hatiza ku cacay yamalyilu sailuc-kakuniza. kina kakuniza yamalyilu isasa $2 a sailuc-kasasizuma, ilabu {{PLURAL:$1}}mahiza ku isasaay}}",
        "category-file-count": "{{PLURAL:$2|kakuniza yamalyilu isasaay a cacay ku tangan. kakuniza yamalyilu isasaay izaway $1 ku tangan, pulung $2 makalaan.}}",
        "listingcontinuesabbrev": "palalid",
-       "about": "mahizaay u",
+       "about": "mahizaay",
        "newwindow": "(paynin baluhay a azih-sasingalan miwawah)",
        "cancel": "palawpes",
        "moredotdotdot": "yadah...",
        "anontalk": "sasukamu",
        "navigation": "pasubana’ tu miidangay",
        "and": "&#32;",
+       "actions": "saungay",
        "namespaces": "pangangananay a salaedan",
        "variants": "masazumaay",
        "navigation-heading": "pasubana’ tu miidangay pipili’an",
+       "errorpagetitle": "mungangaw",
        "returnto": "tatiku tazuma至 $1.",
        "tagline": "makayzaay i {{SITENAME}}",
        "help": "buhci tu kamu",
        "history_small": "nazipa’an",
        "printableversion": "kapah tu insace baziyong / sapad",
        "permalink": "saluimengay misiket",
+       "print": "insace",
        "view": "ciwsace",
        "view-foreign": "i $1 miciwsace",
-       "edit": "mikawaway tu kalumyiti",
+       "edit": "mikawaway-kalumyiti",
        "create": "patizeng",
        "create-local": "cunusen itiniay a buhci tu kamu",
+       "delete": "misipu",
+       "protect_change": "misumad",
        "newpage": "baluhayay a kasabelih",
        "talkpagelinktext": "sasukamu",
        "personaltools": "teked sakaluk",
        "jumpto": "taayaw:",
        "jumptonavigation": "pasubana’ tu miidangay",
        "jumptosearch": "kilim",
-       "aboutsite": "mahizaay {{SITENAME}}",
-       "aboutpage": "Project:mahizaay u...",
+       "aboutsite": "mahizaay {{SITENAME}}",
+       "aboutpage": "Project:mahizaay",
        "copyright": "anu izaw ku zuma buhci tu kamu, kasabelih aazihen a lacul i labu, pisaungay hamin $1 sapabeli tu kinli a ceding.",
        "copyrightpage": "{{ns:project}}:nisanga’an niza tu tungus a kawaw",
        "currentevents": "ayzaay a sinbun",
        "portal-url": "Project:komiyonityi sacumudan",
        "privacy": "salimek a mikuwanay a kawaw",
        "privacypage": "Project:salimek a mikuwanay a kawaw",
+       "ok": "malucekay",
        "retrievedfrom": "miala i \"$1\"",
-       "editsection": "mikawaway tu kalumyiti",
+       "editsection": "mikawaway-kalumyiti",
        "editold": "mikawaway tu kalumyiti",
        "viewsourceold": "ciwsace sakatizeng bangu",
-       "editlink": "mikawaway tu kalumyiti",
+       "editlink": "mikawaway-kalumyiti",
        "viewsourcelink": "ciwsace sakatizeng bangu",
        "editsectionhint": "mikawaway tu kalumyiti tusil: $1",
        "toc": "dilyikotoling",
        "nstab-special": "sazumaay a kasabelih",
        "nstab-project": "cwanan kasabelih",
        "nstab-image": "tangan",
+       "nstab-mediawiki": "palatuh",
        "nstab-template": "taazihan mitudung",
        "nstab-category": "kakuniza",
        "mainpage-nstab": "saayaway a belih",
+       "error": "mungangaw",
+       "databaseerror-query": "palalitemuh tu kawaw: $1",
+       "databaseerror-function": "sakapaluwaluway: $1",
+       "databaseerror-error": "mungangaw: $1",
        "badtitle": "a’cusay a pyawti",
        "badtitletext": "matuzu’ay a kasabelih pyawti u la’cusay、nayi’ ku cacan, caaysa tatenga’ay tu misiket kamu Wikiay a pyawti.\ntebanay pyawti akay amalyilu la’cusay pisaungay i pyawtayi a tatebanan nu nisulitan.",
        "viewsource": "ciwsace sakatizeng bangu",
+       "welcomeuser": "manamuh tu tayniay, $1!",
+       "yourname": "misaungayay a kalungangan:",
        "userlogin-yourname": "misaungayay a kalungangan",
        "userlogin-yourname-ph": "pisulitan tu nu misay a misaungayay a kalungangan",
        "yourpassword": "mima:",
        "userlogin-helplink2": "patalabu miedap",
        "createacct-emailoptional": "imyiyo(email) tigami (u pili’ay sasulitan)",
        "createacct-email-ph": "pisulitan ku imyiyo(email) nu misu",
+       "createacct-reason": "mahicaay",
        "createacct-submit": "panganganen ku misuay a canghaw",
        "createacct-another-submit": "panganganen ku canghaw",
        "createacct-benefit-heading": "{{SITENAME}} paanin tu nisulitan tu nu tapangay mahiza kisuan.",
        "createacct-benefit-body1": "saka{{PLURAL:$1|ku mikawaway tu kalumyiti}}",
        "createacct-benefit-body2": "{{PLURAL:$1| kasabelih}}",
        "createacct-benefit-body3": "cay katenesay{{PLURAL:$1|paaninay tu kalusasing}}",
+       "loginsuccesstitle": "patalabutu",
        "loginlanguagelabel": "kamu: $1",
        "pt-login": "patalabu",
        "pt-login-button": "patalabu",
        "pt-createaccount": "panganganen ku canghaw",
        "pt-userlogout": "katahkal",
+       "botpasswords-label-create": "patizeng",
+       "botpasswords-label-update": "misabaluhay",
        "botpasswords-label-cancel": "palawpes",
+       "botpasswords-label-delete": "masipu",
+       "botpasswords-label-grants-column": "pabeli tu kinli",
        "resetpass-submit-cancel": "palawpes",
        "passwordreset": "miliyaw miteka setin mima",
+       "passwordreset-username": "misaungayay a kalungangan:",
        "changeemail-none": "(nayi’)",
+       "resettokens-tokens": "sabuhat:",
        "bold_sample": "kibetulay a sulit",
        "bold_tip": "kibetulay a sulit",
        "italic_sample": "tukenihay nisulit",
        "sig_tip": "misuay a sulit nu ngangan atu demiad, tuki",
        "hr_tip": "Sapisasuala (cayka yadah kawiza)",
        "summary": "pecu’ nu lacul:",
+       "subject": "taazihan tu kawaw:",
        "minoredit": "payni mikilulay a mikawaway tu kalumyiti",
        "watchthis": "miazih tuyni kasabelih",
        "savearticle": "misuped kasabelih",
-       "preview": "paazih pataayaway miazih",
+       "preview": "pataayaway miazih",
        "showpreview": "paazih pataayaway miazih",
        "showdiff": "paazih ku masumaday",
        "anoneditwarning": "<strong>patalaw:</strong>caay henay kisu patalabu. anu miteka mikawaway tu kalumyiti, IP adolyise nu misu ama mitilak. anu kisu <strong>[$1  patalabu ]</strong> acasa <strong>[$2 panganganen ku canghaw ]</strong>, misuay mikawaway tu kalumyiti payni tu nu misuay misaungayay kalungangan sacuzu’ ,izaway zuma kapahayay.",
        "loginreqlink": "patalabu",
+       "newarticle": "(baluhay)",
        "newarticletext": "masasiket kisu tu nayi’ay tu kasabelih.\namipatizeng tina kasabelih, kaisasa mikawaway tu kalumyiti atilad misulit ku lacul (kahica nu kawaw piazih tu tatenga’ay [$1 misaungay a buhci tu kamu  kasabelih ]).\namahica caay padeteng tayza tina kasabelih kisu haw, pihaymaw sapecec saazihay a <strong>tatiku</strong> pipenecan.",
        "noarticletext": "kina kasabelih inayi’ lacul ayza,kapah tu kisu i zumaay a kasabelih [[Special:Search/{{PAGENAME}}| mikilim kina kasabelih pyawti ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  mikilim sasuala nasulitan nakawawan ] caay sa[{{fullurl:{{FULLPAGENAME}}|action=edit}} patizeng kina kasabelih ]</span>.",
        "noarticletext-nopermission": "tina kasabelih ayza inayi’ lacul,\nkapah tu kisu i zuma kasabelih [[Special:Search/{{PAGENAME}}| kilim kina kasabelih pyawti ]],acasa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  kilim sasuala nasulitan nakawawan ]</span>,uyzasa  inayi’  ku tungus patizeng tina kasabelih.",
+       "updated": "(misabaluhay)",
        "editing": "mikawaway tu kalumyiti  $1 ayza",
        "creating": "patizeng ayza $1",
        "editingsection": "mikawaway tu kalumyiti ayza $1 (tusil)",
+       "yourdiff": "sasizuma",
        "templatesused": "uyni kasabelih pisaungay tu isasaay {{PLURAL:$1|taazihan mitudung}}:",
        "template-protected": "(madiputay)",
        "template-semiprotected": "(madiputay a kasabelih - satizep mikawaway tu kalumyiti)",
        "hiddencategories": "kina kasabelih tungusay nu {{PLURAL:$1|1 midimut kakuniza }}mamikawaw:",
        "permissionserrorstext-withaction": "namakay isasaay {{PLURAL:$1|mahicaay}}, inayi’ kisu situngus miteka $2 miteka tuway misaungay:",
        "moveddeleted-notice": "kina kasabelih masipu tu.\nisasa nipabeli kina kasabelihay a masipu atu milimad nasulitan nakawawan, taneng miazih tu tatenga’ay.",
+       "content-json-empty-object": "inayi’ay a tuutuud",
+       "content-json-empty-array": "inayi’ay a papazengan tu nisulitan",
        "viewpagelogs": "ciwsace kina kasabelih a nasulitan nakawawan",
        "currentrev-asof": "i $1 a sabaluhay masumad",
        "revisionasof": "$1 a sumad",
        "nextrevision": "kilulay masumad →",
        "currentrevisionlink": "sabaluhay masumad",
        "cur": "ayza",
+       "next": "nuzikuzan",
        "last": "ayaway",
+       "page_last": "sazikuzay a kasabelih",
+       "histfirst": "sakasumamadan",
+       "histlast": "sabaluhay",
+       "historyempty": "(inayi’)",
        "rev-showdeleted": "paazih",
        "revdelete-show-file-submit": "hang",
        "revdelete-radio-set": "midimut",
+       "revdelete-log": "mahicaay:",
+       "mergehistory-reason": "mahicaay:",
        "history-title": "\"$1\" masumaday a nazipa’an",
        "difference-title": "\"$1\" misumad laeday sasizuma",
        "lineno": "silsil $1:",
        "search-redirect": "(miliyaw tazuma namakay $1)",
        "search-section": "(tusil $1)",
        "search-suggest": "u tuzu’ nu misu ku:$1 haw?",
+       "search-interwiki-more": "(yadah)",
+       "search-relatedarticle": "mahizaay",
        "searchall": "hamin",
        "search-showingresults": "{{PLURAL:$4|saka <strong>$1</strong> a heci, pulung <strong>$3</strong>|saka <strong>$1-$2</strong> a heci, pulung <strong>$3</strong>}}",
        "search-nonefound": "nayi’ matatungusay palalitemuh tu kawaw maheciay.",
        "powersearch-toggleall": "hamin",
        "powersearch-togglenone": "nayi’",
        "mypreferences": "setin tu kanamuhan",
-       "skin-preview": "paazih pataayaway miazih",
+       "prefs-skin": "nuhekalan",
+       "skin-preview": "pataayaway miazih",
        "prefs-rc": "capi a demaiday a sumad",
-       "prefs-editing": "mikawaway tu kalumyiti",
+       "prefs-misc": "zuma",
+       "prefs-rendering": "nuhekalan",
+       "saveprefs": "suped",
+       "prefs-editing": "mikawaway-kalumyiti",
        "searchresultshead": "kilim",
+       "stub-threshold-sample-link": "maaziahan",
        "stub-threshold-disabled": "mapasatezep",
+       "timezoneregion-africa": "Afulika",
+       "timezoneregion-america": "Amilikaco",
+       "timezoneregion-antarctica": "Nancico",
+       "timezoneregion-arctic": "Sasaamisan",
+       "timezoneregion-asia": "Yaco",
+       "timezoneregion-australia": "Awco",
+       "timezoneregion-europe": "Oco",
+       "timezoneregion-indian": "Intuyang-bayu’",
        "prefs-searchoptions": "kilim",
+       "default": "pataayaw tu kawaw",
+       "prefs-custom-css": "pakuniza misanga’ CSS",
        "yourlanguage": "kamu:",
-       "prefs-editor": "mikawaway tu kalumyiti",
-       "prefs-preview": "paazih pataayaway miazih",
+       "prefs-i18n": "masakitakiay",
+       "prefs-signature": "sulitan a ngangan",
+       "prefs-timeoffset": "ilaed nu tuki",
+       "prefs-editor": "mikawaway-kalumyitiay",
+       "prefs-preview": "pataayaway miazih",
+       "prefs-tokenwatchlist": "sabuhat",
+       "prefs-diffs": "sasizuma",
+       "userrights-reason": "mahicaay:",
+       "userrights-expiry-current": "kakatekuhan $1",
+       "userrights-expiry": "kakatekuhan:",
+       "group": "luyaluy:",
+       "group-user": "misaungayay",
+       "group-bot": "kikay a tademaw",
+       "group-sysop": "mikuwanay",
+       "group-bureaucrat": "situngusay a mikawaway",
        "group-all": "(hamin)",
+       "group-bot-member": "{{GENDER:$1|kikay a tademaw}}",
+       "grouppage-bot": "{{ns:project}}:kikay a tademaw",
+       "grouppage-sysop": "{{ns:project}}:mikuwanay",
+       "grouppage-bureaucrat": "{{ns:project}}:situngusay a mikawaway",
        "right-writeapi": "pisaungay suliten API",
        "grant-createaccount": "panganganen ku canghaw",
        "newuserlogpage": "patizeng misaungayay nasulitan nakawawan",
        "recentchanges-legend-heading": "<strong>u tinaku nu kulit:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (piazih tu tatenga’ay [[Special:NewPages| baluhayay a kasabelih]])",
        "recentchanges-submit": "paazih",
+       "rcfilters-savedqueries-new-name-label": "kalungangan",
        "rcfilters-savedqueries-cancel-label": "palawpes",
        "rcfilters-filterlist-title": "kilim",
+       "rcfilters-filter-user-experience-level-newcomer-label": "baluhayay a misaungayay",
+       "rcfilters-filter-user-experience-level-learner-label": "mahananamay",
+       "rcfilters-filter-bots-label": "kikay a tademaw",
+       "rcfilters-filter-minor-label": "cayka yadah ku misumad",
        "rclistfrom": "paazih nay $3 $2 baluhayay a sumad katukuh ayza",
        "rcshowhideminor": "$1 mikilulay mikawaway tu kalumyiti",
        "rcshowhideminor-show": "paazih",
        "newpageletter": "baluhay",
        "boteditletter": "kikay a tademaw",
        "rc-change-size-new": "masumadtu sa u $1 {{PLURAL:$1|wyiyincu}}",
+       "newsectionsummary": "/* $1 */ baluhay a tusil",
        "recentchangeslinked": "sasuala a sumad",
        "recentchangeslinked-feed": "sasuala a sumad",
        "recentchangeslinked-toolbox": "sasuala a sumad",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead\nmisumad ku paazih masasiket tayza matuzu’ay kasabelih a nisumad",
        "upload": "patapabaw ku tangan",
        "filedesc": "pecu’ nu lacul",
+       "fileuploadsummary": "pecu’ nu lacul:",
+       "filesource": "saangangan:",
        "upload-dialog-button-cancel": "palawpes",
+       "upload-dialog-button-back": "tatiku",
+       "upload-dialog-button-done": "pahezek",
+       "upload-dialog-button-save": "suped",
+       "upload-dialog-button-upload": "patapabaw",
+       "upload-form-label-infoform-name": "kalungangan",
        "upload-form-label-infoform-description": "patahkal",
        "upload-form-label-infoform-categories": "kakuniza",
        "upload-form-label-infoform-date": "demiad",
        "license": "sapabeli tu kinli a cedang",
        "license-header": "sapabeli tu kinli a cedang",
+       "listfiles-delete": "misipu",
        "imgfile": "tangan",
        "listfiles": "tangan-tangan misiket",
+       "listfiles_thumb": "sukep tu zunga",
        "listfiles_date": "demiad",
+       "listfiles_name": "kalungangan",
+       "listfiles_user": "misaungayay",
+       "listfiles_size": "hacica-tabaki",
        "listfiles_description": "patahkal",
+       "listfiles_count": "baziyong",
        "listfiles-latestversion-yes": "hang",
        "listfiles-latestversion-no": "caay",
        "file-anchor-link": "tangan",
        "linkstoimage": "isasaay {{PLURAL:$1| kasabelih  misiket |saka $1 a kasabelih misiket}}katukuh tina tangan:",
        "nolinkstoimage": "nayi’ ku kasabelih masasiket katukuh tini a tangan.",
        "sharedupload-desc-here": "kina tangan nay $1 hakay satu pisaungay tu zuma a cwanan.\nisasaay paazih kuyniay a tangan i [$2 tangan patahkal kasabelih] a patahkalay a lacul.",
+       "shared-repo-from": "nay $1",
        "upload-disallowed-here": "la’cus kisu mitahpu tuyni a tangan.",
+       "filerevert-comment": "mahicaay:",
+       "filedelete-comment": "mahicaay:",
+       "filedelete-submit": "masipu",
+       "download": "patasasa'",
        "randompage": "kakibalucu’ ay a kasabelih",
        "randomincategory-submit": "mileku",
+       "statistics": "sausi",
        "pageswithprop-submit": "mileku",
+       "brokenredirects-delete": "misipu",
+       "withoutinterwiki-legend": "saayaway a sulit",
        "withoutinterwiki-submit": "paazih",
        "nbytes": "$1 {{PLURAL:$1|wyiyincu}}",
        "ncategories": "{{PLURAL:$1|kakuniza}}",
        "nmembers": "$1 {{PLURAL:$1|ku mamikawaw}}",
        "prefixindex-submit": "paazih",
        "protectedpages-page": "kasabelih",
+       "protectedpages-expiry": "kakatekuhan",
+       "protectedpages-reason": "mahicaay",
        "newpages": "baluhay kasabelih",
        "newpages-submit": "paazih",
        "move": "milimad",
        "pager-older-n": "{{PLURAL:$1| kusa malumanay}}",
        "suppress": "malangat",
+       "apisandbox-reset": "palawpis",
+       "apisandbox-retry": "miliyaw mitaneng",
+       "apisandbox-examples": "tinaku",
+       "apisandbox-results": "heci",
        "apisandbox-continue": "palalid",
+       "apisandbox-continue-clear": "palawpis",
        "booksources": "nu cudad atu laculaculan",
        "booksources-search-legend": "mikilim ku cudad atu laculaculan",
        "booksources-search": "kilim",
        "log": "nasulitan nakawawan",
        "logeventslist-submit": "paazih",
+       "checkbox-select": "mipili’: $1",
        "checkbox-all": "hamin",
        "checkbox-none": "nayi’",
        "allpages": "hamin nu kasabelih",
        "allpagessubmit": "mileku",
        "categories": "kakuniza",
        "categories-submit": "paazih",
+       "linksearch-ns": "pangangananay a salaedan:",
        "linksearch-ok": "kilim",
        "listusers-submit": "paazih",
+       "listgrouprights-group": "luyaluy",
+       "listgrants": "pabeli tu kinli",
+       "listgrants-rights": "kinli",
+       "emailusernamesubmit": "patayzaan",
+       "emailfrom": "nay:",
+       "emailto": "katukuh:",
+       "emailsubject": "taazihan tu kawaw:",
+       "emailmessage": "palatuh:",
+       "emailsend": "patigamitu",
        "watchlist": "miazihay a piazihan tu sulit",
        "mywatchlist": "miazihay a piazihan tu sulit",
        "watch": "miazih",
        "watchlist-hide": "midimut",
+       "wlshowhideminor": "cayka yadah ku misumad",
+       "wlshowhidebots": "kikay a tademaw",
+       "confirm": "malucekaytu",
+       "delete-confirm": "misipu \"$1\"",
        "historyaction-submit": "paazih",
        "dellogpage": "masipu ku nasulitan nakawawan",
+       "deletecomment": "mahicaay:",
        "rollbacklink": "panukasan",
        "rollbacklinkcount": "patiku {{PLURAL:$1|mikawaway tu kalumyiti}}",
+       "changecontentmodel-reason-label": "mahicaay:",
        "protectlogpage": "midiput nasulitan nakawawan",
-       "restriction-edit": "mikawaway tu kalumyiti",
+       "protectcomment": "mahicaay:",
+       "protectexpiry": "kakatekuhan:",
+       "protect-summary-cascade": "patatusul",
+       "protect-expiring": "kakatekuhan $1 (UTC)",
+       "protect-expiry-indefinite": "inayi’ u sungliw",
+       "restriction-edit": "mikawaway-kalumyiti",
        "restriction-move": "milimad",
+       "restriction-create": "patizeng",
+       "restriction-upload": "patapabaw",
+       "undeletebtn": "patiku",
+       "undeletecomment": "mahicaay:",
        "undelete-search-submit": "kilim",
        "undelete-show-file-submit": "hang",
        "namespace": "pangangananay a salaedan:",
        "month": "sazikuzay demiad nabuladan:",
        "year": "sazikuzay demiad mihcaan:",
        "sp-contributions-blocklog": "milangat tu nasulitan nakawawan",
+       "sp-contributions-uploads": "patapabaw",
        "sp-contributions-logs": "nasulitan nakawawan",
        "sp-contributions-talk": "sasukamu",
        "sp-contributions-submit": "kilim",
        "whatlinkshere-hideimages": "$1 tangan-tangan misiket",
        "whatlinkshere-filters": "kilim",
        "whatlinkshere-submit": "mileku",
+       "ipbexpiry": "kakatekuhan:",
+       "ipbreason": "mahicaay:",
+       "ipb-blocklist-duration-left": "$1 pakawili",
        "autoblocklist-submit": "kilim",
+       "blocklist-target": "pabalucu’an",
+       "blocklist-expiry": "kakatekuhan",
+       "blocklist-reason": "mahicaay",
        "ipblocklist-submit": "kilim",
+       "infiniteblock": "inayi’ u sungliw",
        "blocklink": "malangat",
        "contribslink": "paanin",
        "blocklogpage": "milangat tu nasulitan nakawawan",
        "movelogpage": "milimad ku nasulitan nakawawan",
+       "movereason": "mahicaay:",
        "export": "patahkal ku kasabelih",
+       "export-submit": "patahkal",
+       "allmessagesname": "kalungangan",
        "allmessages-filter-legend": "kilim",
        "allmessages-filter-all": "hamin",
+       "allmessages-filter-modified": "masumad tuway",
        "allmessages-language": "kamu:",
        "allmessages-filter-submit": "mileku",
+       "allmessages-filter-translate": "mibelih",
        "thumbnail-more": "patabaki(micuwat)",
+       "import-interwiki-submit": "pacumud",
+       "import-comment": "pacunus sakacaay kapawan:",
        "tooltip-pt-userpage": "{{GENDER:|misaungayay nu misu}} kasabelih",
        "tooltip-pt-mytalk": "{{GENDER:|misuay }}sasukamu a kasabelih",
        "tooltip-pt-preferences": "{{GENDER:|misuay}} setin tu kanamuhan",
        "tooltip-rollback": "sapecec \"patiku\" misiket, kapah patiku tayza nuayawanay a paanin tu nisulitan tina kasabelih mikawaway tu kalumyiti",
        "tooltip-undo": "\"patiku\" kapah tu patiku tuyni mikawaway tu kalumyiti payni pataayaway miazih muse miwawah mikawaway tu kalumyiti aazihan cudad, saka caay cayaw nu labu micunus mahicaay.",
        "tooltip-summary": "kapisulitan apuyu’ay a pecu’ nu lacul",
+       "others": "zuma",
        "simpleantispam-label": "sapi tena’ babakahen a sulit kinsa.\nyu <strong>amana</strong> misulit kuyni pisinga’an!",
+       "pageinfo-language-change": "misumad",
+       "pageinfo-content-model-change": "misumad",
+       "pageinfo-robot-noindex": "amana",
        "pageinfo-toolboxlink": "kasabelih cesyun",
+       "pageinfo-redirectsto-info": "katinengan",
        "pageinfo-contentpage-yes": "hang",
        "pageinfo-protect-cascading-yes": "hang",
+       "confirm-markpatrolled-button": "malucekay",
        "previousdiff": "← malumanay a mikawaway tu kalumyiti",
        "nextdiff": "baluhayay mikawaway tu kalumyit →",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ku kasabelih}}",
        "show-big-image": "saayaway a tangan",
        "show-big-image-preview": "pataayaway miazih hacica ku tabaki: $1.",
        "show-big-image-size": "$1 × $2 syangsu",
+       "file-info-gif-looped": "palalacalen",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|misabacu}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|misabacu}}",
        "newimages-legend": "kilim",
        "ilsubmit": "kilim",
+       "bydate": "ahizan tu demiad",
+       "just-now": "nasawni",
        "metadata": "pulita tu kalunasulitan",
        "metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi  sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay la’cus mileku mabetil a misumad tu tangan.",
        "metadata-fields": "i tini palatuh patahkal i labuay a EXIF pulita tu kalunasulitanay a kakitizaan, yamalyilu i zunga paazih kasabelih, sapipulita tu cudad nu nasulitan malepi’ paazih palatuh.\nzumaay a pulita tu cudad pataayaw tu kawaw midimut.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-imagewidth": "ahebal",
+       "exif-imagelength": "u takalaw",
        "exif-orientation": "papayzaan",
        "exif-xresolution": "sasuala katingalaw",
        "exif-yresolution": "mitelekay katingalaw",
        "exif-colorspace": "kalukulit salaedan",
        "exif-datetimeoriginal": "kalunasulitan masangaay’ a demiad atu tuki",
        "exif-datetimedigitized": "suwyihwaay a demiad atu tuki",
+       "exif-lightsource": "katahkalan nu likat",
+       "exif-flash": "sabelabelatay a tinghuy",
+       "exif-focallength": "saed nu sapisasing",
+       "exif-contrast": "e-contrast",
+       "exif-keywords": "aazihen dulit",
+       "exif-objectname": "sapuyuay a ngangan",
+       "exif-headline": "satangahan",
+       "exif-source": "saangangan",
+       "exif-writer": "misacudaday",
        "exif-languagecode": "kamu",
        "exif-iimcategory": "kakuniza",
+       "exif-identifier": "mapulitaay a kodo",
+       "exif-label": "aazihen paya",
        "exif-orientation-1": "tatungus",
+       "exif-componentsconfiguration-0": "inayi’",
+       "exif-exposureprogram-1": "palima",
+       "exif-meteringmode-255": "zuma",
+       "exif-lightsource-1": "edil",
+       "exif-lightsource-2": "inkwang a tinghuy",
+       "exif-lightsource-4": "sabelabelatay a tinghuy",
+       "exif-lightsource-9": "cilalah a demiad",
+       "exif-lightsource-10": "kenutan",
+       "exif-focalplaneresolutionunit-2": "incun",
+       "exif-scenecapturetype-0": "tatungus",
+       "exif-scenecapturetype-1": "makaazihay",
+       "exif-scenecapturetype-2": "sassing nu tademaw",
+       "exif-scenecapturetype-3": "makaazihay nu labiyi",
        "exif-gaincontrol-0": "nayi’",
+       "exif-gaincontrol-1": "adidi’ tu cunusan",
+       "exif-gaincontrol-2": "takalaw ku cunusan",
+       "exif-gaincontrol-3": "adidi’ tu selepan",
+       "exif-gaincontrol-4": "takalaw ku selepan",
        "exif-contrast-0": "tatungus",
        "exif-contrast-1": "pu’nel",
        "exif-contrast-2": "takalaw",
        "exif-sharpness-0": "tatungus",
        "exif-sharpness-1": "pu’nel",
        "exif-sharpness-2": "takalaw",
+       "exif-subjectdistancerange-2": "pakatepalay a azih",
+       "exif-subjectdistancerange-3": "pakabatatay a azih",
+       "exif-gpslatitude-n": "pyiwyi",
+       "exif-gpslatitude-s": "nanwyi",
+       "exif-gpslongitude-e": "tongcing",
+       "exif-gpslongitude-w": "sicing",
+       "exif-gpsdestdistance-k": "kungli",
+       "exif-gpsdestdistance-m": "inli",
+       "exif-gpsdestdistance-n": "hayli",
+       "exif-objectcycle-a": "namalamam a cacay",
+       "exif-objectcycle-p": "nakalahukan a cacay",
+       "exif-dc-contributor": "paaninay tu kalusasing",
        "exif-dc-date": "demiad",
+       "exif-dc-rights": "kinli",
+       "exif-iimcategory-edu": "pasubana’ay a kawaw",
+       "exif-iimcategory-evn": "liwliw",
+       "exif-iimcategory-hth": "kapah ku uzip",
+       "exif-iimcategory-lab": "makawaw",
+       "exif-iimcategory-spo": "wundukay",
+       "exif-iimcategory-wea": "demidad",
        "exif-urgency-normal": "tatungus ($1)",
        "namespacesall": "hamin",
        "monthsall": "hamin",
+       "confirm_purge_button": "malucekay",
+       "confirm-watch-button": "malucekay",
+       "confirm-unwatch-button": "malucekay",
+       "confirm-rollback-button": "malucekay",
        "imgmultigo": "mileku!",
        "img-lang-go": "mileku",
+       "ascending_abbrev": "masalaylay adidi’ay katukuh tabakiay",
+       "descending_abbrev": "masalaylay tabakiay katukuh adidi’ay",
+       "table_pager_last": "sazikuzay a kasabelih",
        "table_pager_limit_submit": "mileku",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
+       "timezone-local": "itizaay",
+       "version": "baziyong",
        "version-specialpages": "sazumaay a kasabelih",
+       "version-other": "zuma",
+       "version-hooks": "kulawid",
+       "version-hook-subscribedby": "pangangan",
+       "version-skin-colheader-name": "nuhekalan",
+       "version-ext-colheader-version": "baziyong",
        "version-ext-colheader-description": "patahkal",
        "version-ext-colheader-credits": "masacudaday",
+       "version-poweredby-others": "zuma",
+       "version-software-product": "nasang’ay a tuutuud",
+       "version-software-version": "baziyong",
+       "version-entrypoints-header-url": "URL",
+       "version-libraries-library": "sulu nu cengse",
+       "version-libraries-version": "baziyong",
        "version-libraries-description": "patahkal",
        "version-libraries-authors": "masacudaday",
        "redirect-submit": "mileku",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
+       "tags-source-header": "saangangan",
+       "tags-actions-header": "saungay",
        "tags-active-yes": "hang",
        "tags-active-no": "caay",
+       "tags-delete": "masipu",
+       "tags-activate": "miteka’",
        "tags-deactivate": "mapasatezep",
+       "tags-create-reason": "mahicaay:",
+       "tags-create-submit": "patizeng",
+       "tags-delete-reason": "mahicaay:",
+       "tags-activate-reason": "mahicaay:",
+       "tags-activate-submit": "miteka’",
+       "tags-deactivate-reason": "mahicaay:",
+       "tags-edit-reason": "mahicaay:",
+       "compare-submit": "sasutili’ay",
+       "diff-form": "sasizuma",
        "permanentlink": "saluimengay misiket",
+       "htmlform-submit": "patayzaan",
+       "htmlform-selectorother-other": "zuma",
        "htmlform-no": "caay",
        "htmlform-yes": "hang",
        "htmlform-cloner-delete": "milimad",
+       "htmlform-title-not-exists": "$1 inayi’",
+       "htmlform-user-not-exists": "<strong>$1</strong> inayi’",
        "logentry-delete-delete": "$1 {{GENDER:$2|masiputu}} kasabelih $3",
        "restore-count-files": "{{PLURAL:$1|1 tangan}}",
        "logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
        "logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
        "rightsnone": "(nayi’)",
+       "feedback-back": "tatiku",
        "feedback-cancel": "palawpes",
+       "feedback-close": "pahezek",
+       "feedback-message": "palatuh:",
+       "feedback-subject": "taazihan tu kawaw:",
+       "feedback-submit": "patayzaan",
        "searchsuggest-search": "kilim {{SITENAME}}",
-       "expand_templates_preview": "paazih pataayaway miazih",
+       "expand_templates_output": "heci",
+       "expand_templates_ok": "malucekay",
+       "expand_templates_preview": "pataayaway miazih",
        "pagelang-language": "kamu",
+       "pagelang-reason": "mahicaay:",
+       "pagelang-submit": "patayzaan",
+       "mediastatistics-header-bitmap": "pacepacekan a zunga",
+       "mediastatistics-header-audio": "ludihang",
+       "mediastatistics-header-video": "yiga",
+       "mediastatistics-header-office": "zimusiw",
+       "mediastatistics-header-executable": "kapah tu mileku",
+       "special-characters-group-latin": "u sulit nu Latin",
+       "special-characters-group-symbols": "sawantan",
+       "special-characters-group-greek": "u sulit nu Sila",
+       "special-characters-group-devanagari": "Devanagari a kamu",
+       "special-characters-group-thai": "u sulit nu Tayko",
+       "special-characters-group-lao": "u sulit nu Liau",
+       "special-characters-group-khmer": "u sulit nu Kaomien",
+       "special-characters-title-minus": "selep a bacu",
        "log-action-filter-all": "hamin",
-       "log-action-filter-block-block": "malangat"
+       "log-action-filter-block-block": "malangat",
+       "log-action-filter-protect-protect": "midiput",
+       "log-action-filter-upload-upload": "baluhay a patapabaw",
+       "authprovider-resetpass-skip-label": "sekipo"
 }
index eef7a45..626cf61 100644 (file)
        "rcfilters-liveupdates-button": "تحديثات حية",
        "rcfilters-liveupdates-button-title-on": "إيقاف التحديثات الحية",
        "rcfilters-liveupdates-button-title-off": "عرض التغييرات الجديدة فور حدوثها",
-       "rcfilters-watchlist-markSeen-button": "التعليم على كل التغييرات كمرئية",
-       "rcfilters-watchlist-editWatchlist-button": "تعديل قائمة الصفحات المراقبة",
+       "rcfilters-watchlist-markseen-button": "التعليم على كل التغييرات كمرئية",
+       "rcfilters-watchlist-edit-watchlist-button": "تعديل قائمة الصفحات المراقبة",
        "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfromreset": "إعادة ضبط خيار التاريخ",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
index bb82b6e..60607f4 100644 (file)
        "permissionserrorstext": "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
        "permissionserrorstext-withaction": "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
        "recreate-moveddeleted-warn": "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''\n\nএই পৃষ্ঠাটো সম্পাদনা কৰা উচিত হব নে নহয় আপুনি বিবেচনা কৰি চাওক।\nএই পৃষ্ঠাটো বিলোপ আৰু স্থানান্তৰ কৰাৰ অভিলেখ আপোনাৰ সুবিধাৰ্থে ইয়াত দিয়া হৈছে।",
-       "moveddeleted-notice": "এই পৃষ্ঠা বিলোপ কৰা হৈছে।\nপৃষ্ঠাৰ বিলোপ আৰু স্থানান্তৰণ অভিলেখ তলত দিয়া হ'ল।",
+       "moveddeleted-notice": "এই পৃষ্ঠা বিলোপ কৰা হৈছে।\nপৃষ্ঠাৰ বিলোপন, সুৰক্ষা আৰু স্থানান্তৰণ অভিলেখ তলত দিয়া হ'ল।",
        "log-fulllog": "সম্পূৰ্ণ অভিলেখ চাওক",
        "edit-hook-aborted": "হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে।\nইয়াৰ কোনো ব্যাখ্যা নাই।",
        "edit-gone-missing": "পৃষ্ঠাটো নবীকৰণ কৰিব পৰা নগ’ল।\nসম্ভৱতঃ পৃষ্ঠাটো বিলোপ কৰা হৈছে।",
        "page_first": "প্ৰথম",
        "page_last": "অন্তিম",
        "histlegend": "পাৰ্থক্য বাছনি: পাৰ্থক্য চাবলৈ সংকলনবোৰৰ সম্মুখত থকা ৰেডিঅ' বুটামবোৰ বাচনী কৰি এণ্টাৰ টিপক অথবা একেবাৰে তলত দিয়া বুটামতো ক্লিক কৰক <br />\nলিজেণ্ড: '''({{int:cur}})''' = বৰ্তমানৰ সংকলনৰ লগত পাৰ্থক্য,\n'''({{int:last}})''' = আগৰ সংকলনৰ লগত পাৰ্থক্য, '''{{int:minoreditletter}}'' = অগুৰুত্বপূৰ্ণ সম্পাদনা।",
-       "history-fieldset-title": "à¦\87তিহাসত à¦\85নà§\81সন্ধান কৰক",
+       "history-fieldset-title": "সà¦\82শà§\8bধিত à¦¸à¦\82সà§\8dà¦\95ৰণ সন্ধান কৰক",
        "history-show-deleted": "মাথোঁ বিলোপ কৰা",
        "histfirst": "আটাইতকৈ পুৰণি",
        "histlast": "শেহতীয়া",
index 80d2a17..9301106 100644 (file)
        "rcfilters-liveupdates-button": "Імгненныя абнаўленьні",
        "rcfilters-liveupdates-button-title-on": "Адключыць аўтаматычнае абнаўленьне",
        "rcfilters-liveupdates-button-title-off": "Паказваць новыя зьмены як толькі яны адбываюцца",
-       "rcfilters-watchlist-markSeen-button": "Пазначыць усе зьмены як прагледжаныя",
+       "rcfilters-watchlist-markseen-button": "Пазначыць усе зьмены як прагледжаныя",
+       "rcfilters-watchlist-edit-watchlist-button": "Рэдагаваць ваш сьпіс назіраньня за старонкамі",
+       "rcfilters-watchlist-showupdated": "Зьмены старонак, якія вы не наведвалі пасьля гэтых зьменаў, пазначаныя <strong>тоўстым</strong> з адпаведнымі пазнакамі.",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "rclistfromreset": "Скінуць выбар даты",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "unwatchthispage": "Перастаць назіраць",
        "notanarticle": "Не старонка зьместу",
        "notvisiblerev": "Вэрсія была выдаленая",
-       "watchlist-details": "У Ð\92аÑ\88Ñ\8bм Ñ\81Ñ\8cпÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f $1 {{PLURAL:$1|Ñ\81Ñ\82аÑ\80онка|Ñ\81Ñ\82аÑ\80онкÑ\96\81Ñ\82аÑ\80онак}} Ð·Ð° Ð²Ñ\8bклÑ\8eÑ\87Ñ\8dнÑ\8cнем Ñ\81Ñ\82аÑ\80онак Ð°Ð±Ð¼ÐµÑ\80каванÑ\8cнÑ\8f.",
+       "watchlist-details": "У Ð²Ð°Ñ\88Ñ\8bм Ñ\81Ñ\8cпÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f $1 {{PLURAL:$1|Ñ\81Ñ\82аÑ\80онка|Ñ\81Ñ\82аÑ\80онкÑ\96\81Ñ\82аÑ\80онак}} (плÑ\8eÑ\81 Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\80азмоваÑ\9e).",
        "wlheader-enotif": "Апавяшчэньне па e-mail уключанае.",
        "wlheader-showupdated": "Старонкі, зьмененыя з часу вашага апошняга візыту, вылучаныя '''тоўстым''' шрыфтам.",
        "wlnote": "Ніжэй {{PLURAL:$1|паказаная <strong>$1</strong> апошняя зьмена|паказаныя <strong>$1</strong> апошнія зьмены|паказаныя <strong>$1</strong> апошніх зьменаў}} за <strong>$2</strong> {{PLURAL:$2|гадзіну|гадзіны|гадзінаў}}, па стане на $4 $3.",
        "compare-revision-not-exists": "Пазначаная вэрсія не існуе.",
        "diff-form": "Адрозьненьні",
        "diff-form-oldid": "Ідэнтыфікатар старой вэрсіі (неабавязкова)",
+       "diff-form-revid": "Ідэнтыфікатар вэрсіі з адрозьненьнямі",
+       "diff-form-submit": "Паказаць адрозьненьні",
+       "permanentlink": "Сталая спасылка",
        "dberr-problems": "Прабачце! На гэтым сайце ўзьніклі тэхнічныя цяжкасьці.",
        "dberr-again": "Паспрабуйце пачакаць некалькі хвілінаў і абнавіць.",
        "dberr-info": "(Немагчыма злучыцца з базай зьвестак: $1)",
index db4c738..f443e19 100644 (file)
        "recentchangescount": "Брой показвани редакции по подразбиране:",
        "prefs-help-recentchangescount": "Това включва последните промени, историите на страниците и дневниците.",
        "savedprefs": "Настройките ви бяха съхранени.",
+       "savedrights": "Потребителските групи на {{GENDER:$1|$1}} са запазени.",
        "timezonelegend": "Часова зона:",
        "localtime": "Местно време:",
        "timezoneuseserverdefault": "По подразбиране от уикито ($1)",
index 9f20ded..6812863 100644 (file)
        "linksearch-pat": "অনুসন্ধান প্যাটার্ন:",
        "linksearch-ns": "নামস্থান:",
        "linksearch-ok": "অনুসন্ধান",
-       "linksearch-text": "\"*.wikipedia.org\" à¦\8fর à¦®à¦¤ à¦\93য়াà¦\87লà§\8dড à¦\95ারà§\8dড à¦¬à§\8dযবহার à¦\95রা à¦¯à§\87তà§\87 à¦ªà¦¾à¦°à§\87।\nনà§\82নà§\8dযতম à¦\8fà¦\95à¦\9fি à¦\9fপ à¦²à§\87ভà§\87ল à¦¡à§\8bমà§\87à¦\87ন à¦ªà§\8dরয়à§\8bà¦\9cন, à¦¯à§\87মন \"*.org\"।<br />\nযà§\87 à¦¸à¦\95ল {{PLURAL:$2|পà§\8dরà§\8bà¦\9fà§\8bà¦\95ল|পà§\8dরà§\8bà¦\9fà§\8bà¦\95লসমà§\82হ}} à¦¸à¦®à¦°à§\8dথন à¦\95রà§\87: $1 (পà§\8dরà§\8bà¦\9fà§\8bà¦\95ল à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¨à¦¾ à¦¹à¦²à§\87 http:// à¦¡à¦¿à¦«à¦²à§\8dà¦\9f à¦¹à¦¿à¦¸à¦¾à¦¬à§\87 ব্যবহৃত হবে)।",
+       "linksearch-text": "\"*.wikipedia.org\" à¦\8fর à¦®à¦¤ à¦\93য়াà¦\87লà§\8dড à¦\95ারà§\8dড à¦¬à§\8dযবহার à¦\95রা à¦¯à§\87তà§\87 à¦ªà¦¾à¦°à§\87।\nনà§\82নà§\8dযতম à¦\8fà¦\95à¦\9fি à¦¶à§\80রà§\8dষ à¦¸à§\8dতরà§\87র à¦¡à§\8bমà§\87à¦\87ন à¦ªà§\8dরয়à§\8bà¦\9cন, à¦¯à§\87মন \"*.org\"।<br />\nযà§\87 à¦¸à¦\95ল {{PLURAL:$2|পà§\8dরà§\8bà¦\9fà§\8bà¦\95ল|পà§\8dরà§\8bà¦\9fà§\8bà¦\95লসমà§\82হ}} à¦¸à¦®à¦°à§\8dথন à¦\95রà§\87: $1 (পà§\8dরà§\8bà¦\9fà§\8bà¦\95ল à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¨à¦¾ à¦¹à¦²à§\87 à¦¡à¦¿à¦«à¦²à§\8dà¦\9f à¦¹à¦¿à¦¸à¦¾à¦¬à§\87 http:// ব্যবহৃত হবে)।",
        "linksearch-line": "$2 থেকে $1 এ লিংক করা হয়েছে",
        "linksearch-error": "হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।",
        "listusersfrom": "সেই সব ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:",
index 3cecdd7..d99bf55 100644 (file)
        "hidden-category-category": "Categories ocultes",
        "category-subcat-count": "{{PLURAL:$2|Aquesta categoria només té la següent subcategoria.|Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}, d'un total de $2.}}",
        "category-subcat-count-limited": "Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}.",
-       "category-article-count": "{{PLURAL:$2|Aquesta categoria només té la següent pàgina.|{{PLURAL:$1|La següent pàgina és|Les següents $1 pàgines són}} dins d'aquesta categoria, d'un total de $2.}}",
+       "category-article-count": "{{PLURAL:$2|Aquesta categoria només té la pàgina següent.|{{PLURAL:$1|La pàgina següent és|Les $1 pàgines següents són}} dins d’aquesta categoria, d’un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La següent pàgina és|Les següents $1 pàgines són}} dins la categoria actual.",
-       "category-file-count": "{{PLURAL:$2|Aquesta categoria només té el següent fitxer.|{{PLURAL:$1|El següent fitxer és|Els següents $1 fitxers són}} dins d'aquesta categoria, d'un total de $2.}}",
+       "category-file-count": "{{PLURAL:$2|Aquesta categoria només té el fitxer següent.|{{PLURAL:$1|El fitxer següent és|Els $1 fitxers següents són}} dins d’aquesta categoria, d’un total de $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|El següent fitxer és|Els següents $1 fitxers són}} dins la categoria actual.",
        "listingcontinuesabbrev": " cont.",
        "index-category": "Pàgines indexades",
index 5c669a0..eae54a2 100644 (file)
        "recentchanges-submit": "Гайта",
        "rcfilters-other-review-tools": "<strong>Талларан кхин гӀирсаш</strong>",
        "rcfilters-group-results-by-page": "Карийнарш, агӀонгахь тобанаш ян",
-       "rcfilters-grouping-title": "Тобанаш",
+       "rcfilters-grouping-title": "Тобанашца нисъяр",
        "rcfilters-activefilters": "Жигара литтарш",
+       "rcfilters-advancedfilters": "Шуьйра литтарш",
        "rcfilters-limit-title": "Гойту хийцамаш",
        "rcfilters-limit-shownum": "Гайта тӀеххьара {{PLURAL:$1|хийцам}}",
        "rcfilters-days-title": "ТӀеххьара денош",
        "rcfilters-savedqueries-add-new-title": "Ӏалашде литтар нисъяр",
        "rcfilters-restore-default-filters": "Литтарш Ӏадйитаран кепе меттахӀоттае",
        "rcfilters-clear-all-filters": "Ерриге литтарш цӀанъян",
+       "rcfilters-show-new-changes": "ТӀеххьара хийцамаш",
        "rcfilters-search-placeholder": "Литтаран керла хийцамаш лахар",
        "rcfilters-filterlist-title": "Литтарш",
        "rcfilters-filterlist-feedbacklink": "Керла (бета) литтарех лаьцна хьайна хеттарг язде",
        "rcfilters-filter-editsbyself-label": "Хьан дисдарш",
        "rcfilters-filter-editsbyself-description": "Хьан нисдарш.",
        "rcfilters-filter-editsbyother-label": "Кхечу декъашхойн нисдарш",
+       "rcfilters-filter-editsbyother-description": "Дерриге нисдарш, хьайнаш диссалц.",
        "rcfilters-filtergroup-userExpLevel": "Декъашхочун регистраци а, цуна зеделларг а",
-       "rcfilters-filter-user-experience-level-registered-label": "РегиÑ\81Ñ\82Ñ\80аÑ\86ийинарш",
+       "rcfilters-filter-user-experience-level-registered-label": "Ð\94Ó\80абазбелларш",
        "rcfilters-filter-user-experience-level-registered-description": "Чубаьлла декъашхой.",
-       "rcfilters-filter-user-experience-level-unregistered-label": "РегиÑ\81Ñ\82Ñ\80аÑ\86иÑ\86айинарш",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Ð\94Ó\80абазбаланзарш",
        "rcfilters-filter-user-experience-level-unregistered-description": "Системин чубалаза декъашхой.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Керланиш",
        "rcfilters-filter-user-experience-level-newcomer-description": "10 нисдар дина а, 4 дийнахь болх бина а регистрацийина декъашхой",
        "rcfilters-filter-user-experience-level-learner-label": "Доьшуш берш",
+       "rcfilters-filter-user-experience-level-experienced-label": "Зеделла декъашхой",
+       "rcfilters-filter-user-experience-level-experienced-description": "500 сов нисдарш а дина 30 дийнахь жигара а хийла болу дӀабазбелла декъашхой.",
        "rcfilters-filtergroup-automated": "Авто-къинхьегам",
        "rcfilters-filter-bots-label": "Бот",
        "rcfilters-filter-bots-description": "Авто-гӀирсашца дина нисдарш.",
        "rcfilters-filter-previousrevision-description": "Дерриге нисдарш, «тӀеххьара верси» йоцу.",
        "rcfilters-filter-excluded": "ДӀаяьккхина",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
+       "rcfilters-exclude-button-off": "Хаьржинарг юкъарадаккха",
+       "rcfilters-exclude-button-on": "Хаьржинарг юкъарадаккхар",
        "rcfilters-view-advanced-filters-label": "Шуьйра литтарш",
        "rcfilters-view-tags": "Билгалонаш",
        "rcfilters-view-namespaces-tooltip": "Меттигийн цӀерашца литтаран карийнарш",
index badda46..f9a4353 100644 (file)
        "rcfilters-liveupdates-button": "Živé aktualizace",
        "rcfilters-liveupdates-button-title-on": "Vypnout živé aktualizace",
        "rcfilters-liveupdates-button-title-off": "Zobrazovat nové změny, jakmile jsou zveřejněny",
-       "rcfilters-watchlist-markSeen-button": "Označit všechny změny jako zkontrolované",
-       "rcfilters-watchlist-editWatchlist-button": "Editovat seznam sledovaných stránek",
+       "rcfilters-watchlist-markseen-button": "Označit všechny změny jako zkontrolované",
+       "rcfilters-watchlist-edit-watchlist-button": "Editovat seznam sledovaných stránek",
        "rcfilters-watchlist-showupdated": "Změny stránek, které jste od provedení změn nenavštívili, jsou zobrazeny <strong>tučně</strong> s vyplněnou značkou.",
        "rcnotefrom": "Níže {{PLURAL:$5|je změna|jsou změny}} od <strong>$3, $4</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
        "rclistfromreset": "Obnovit výběr data",
        "unwatchthispage": "Nesledovat tuto stránku",
        "notanarticle": "Toto není stránka",
        "notvisiblerev": "Verze byla smazána",
-       "watchlist-details": "Na vašem seznamu sledovaných stránek {{PLURAL:$1|je $1 stránka|jsou $1 stránky|je $1 stránek}}, nepočítaje v to diskusní stránky.",
+       "watchlist-details": "Na vašem seznamu sledovaných stránek {{PLURAL:$1|je $1 stránka|jsou $1 stránky|je $1 stránek}} (a k tomu diskusní stránky).",
        "wlheader-enotif": "Upozorňování e-mailem je zapnuto.",
        "wlheader-showupdated": "Stránky, které se změnily od vaší poslední návštěvy, jsou zobrazeny <strong>tučně</strong>.",
        "wlnote": "Níže {{PLURAL:$1|je poslední změna|jsou poslední <strong>$1</strong> změny|je posledních <strong>$1</strong> změn}} za {{PLURAL:$2|poslední hodinu|poslední <strong>$2</strong> hodiny|posledních <strong>$2</strong> hodin}} do $4, $3.",
index 64307c3..1f118bb 100644 (file)
        "botpasswords-label-delete": "Slet",
        "botpasswords-label-resetpassword": "Nulstil adgangskode",
        "botpasswords-label-grants": "Tilgængelige bevillinger:",
+       "botpasswords-label-grants-column": "Tildelt",
        "botpasswords-bad-appid": "Robotnavnet »$1« er ikke gyldigt.",
+       "botpasswords-insert-failed": "Kunne ikke tilføje robotnavnet »$1«. Var det allerede tilføjet?",
+       "botpasswords-update-failed": "Kunne ikke tilføje robotnavnet »$1«. Er det slettet?",
        "botpasswords-created-title": "Botkodeord oprettet",
+       "botpasswords-created-body": "Robottens adgangskode for robotnavn »$1« for bruger »$2« blev oprettet.",
        "botpasswords-updated-title": "Bot kodeord opdateret",
        "botpasswords-deleted-title": "Bot kodeord slettet",
        "resetpass_forbidden": "Adgangskoder kan ikke ændres",
        "rcfilters-filter-watchlist-watchednew-description": "Ændringer af overvågede sider du ikke har besøgt siden ændringerne blev gjort.",
        "rcfilters-filter-watchlist-notwatched-label": "Ikke på overvågningsliste",
        "rcfilters-filter-watchlist-notwatched-description": "Alt undtagen ændringer af sider på din overvågningsliste.",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Usete ændringer",
+       "rcfilters-filter-watchlistactivity-seen-label": "Sete ændringer",
        "rcfilters-filtergroup-changetype": "Type ændring",
        "rcfilters-filter-pageedits-label": "Sideredigeringer",
        "rcfilters-filter-pageedits-description": "Ændringer af wikiindhold, diskussioner, kategoribeskrivelser...",
        "tags-deactivate-not-allowed": "Det er ikke muligt at deaktivere mærket »$1«.",
        "tags-deactivate-submit": "Deaktiver",
        "tags-apply-no-permission": "Du har ikke rettigheder til at anvende ændringsmærker sammen med dine ændringer.",
+       "tags-update-blocked": "Du kan ikke tilføje eller fjerne ændringsmærker mens {{GENDER:$1|du}} er blokeret.",
        "tags-edit-title": "Rediger mærker",
        "tags-edit-manage-link": "Håndter mærker",
        "tags-edit-existing-tags": "Eksisterende mærker:",
index 0665579..4e4a469 100644 (file)
        "rcfilters-liveupdates-button": "Live-Aktualisierungen",
        "rcfilters-liveupdates-button-title-on": "Live-Aktualisierungen ausschalten",
        "rcfilters-liveupdates-button-title-off": "Neue Änderungen bei Auftreten anzeigen",
-       "rcfilters-watchlist-markSeen-button": "Alle Änderungen als gesehen markieren",
-       "rcfilters-watchlist-editWatchlist-button": "Deine Liste der beobachteten Seiten bearbeiten",
+       "rcfilters-watchlist-markseen-button": "Alle Änderungen als gesehen markieren",
+       "rcfilters-watchlist-edit-watchlist-button": "Deine Liste der beobachteten Seiten bearbeiten",
        "rcfilters-watchlist-showupdated": "Änderungen an Seiten, die du seit ihrem Auftreten nicht besucht hast, sind <strong>fett</strong> markiert.",
        "rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Änderung|werden die Änderungen}} seit <strong>$3, $4</strong> (max. <strong>$1</strong> Einträge).",
        "rclistfromreset": "Datumsauswahl zurücksetzen",
        "unwatchthispage": "Nicht mehr beobachten",
        "notanarticle": "Keine Seite",
        "notvisiblerev": "Version wurde gelöscht",
-       "watchlist-details": "Du beobachtest {{PLURAL:$1|eine Seite|$1 Seiten}}, ohne dass Diskussionsseiten getrennt gezählt werden.",
+       "watchlist-details": "{{PLURAL:$1|Eine Seite ist|$1 Seiten sind}} auf deiner Beobachtungsliste (sowie Diskussionsseiten).",
        "wlheader-enotif": "Der E-Mail-Benachrichtigungsdienst ist aktiviert.",
        "wlheader-showupdated": "Seiten mit noch nicht gesehenen Änderungen werden '''fett''' dargestellt.",
        "wlnote": "Es {{PLURAL:$1|folgt die letzte Änderung|folgen die letzten <strong>$1</strong> Änderungen}} der letzten {{PLURAL:$2|Stunde|<strong>$2</strong> Stunden}}. Stand: $3, $4 Uhr.",
index b280488..4b01132 100644 (file)
        "rcfilters-liveupdates-button": "Live updates",
        "rcfilters-liveupdates-button-title-on": "Turn off live updates",
        "rcfilters-liveupdates-button-title-off": "Display new changes as they happen",
-       "rcfilters-watchlist-markSeen-button": "Mark all changes as seen",
-       "rcfilters-watchlist-editWatchlist-button": "Edit your list of watched pages",
+       "rcfilters-watchlist-markseen-button": "Mark all changes as seen",
+       "rcfilters-watchlist-edit-watchlist-button": "Edit your list of watched pages",
        "rcfilters-watchlist-showupdated": "Changes to pages you haven't visited since the changes occurred are in <strong>bold</strong>, with solid markers.",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Reset date selection",
        "unwatchthispage": "Stop watching",
        "notanarticle": "Not a content page",
        "notvisiblerev": "The last revision by a different user has been deleted",
-       "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your watchlist, not separately counting talk pages.",
+       "watchlist-details": "{{PLURAL:$1|$1 page is|$1 pages are}} on your Watchlist (plus talk pages).",
        "wlheader-enotif": "Email notification is enabled.",
        "wlheader-showupdated": "Pages that have been changed since you last visited them are shown in <strong>bold</strong>.",
        "wlnote": "Below {{PLURAL:$1|is the last change|are the last <strong>$1</strong> changes}} in the last {{PLURAL:$2|hour|<strong>$2</strong> hours}}, as of $3, $4.",
        "sp-contributions-explain": "",
        "sp-contributions-footer": "-",
        "sp-contributions-footer-anon": "-",
+       "sp-contributions-footer-anon-range": "-",
        "sp-contributions-footer-newbies": "-",
+       "sp-contributions-outofrange": "Unable to show any results. The requested IP range is larger than the CIDR limit of /$1.",
        "whatlinkshere": "What links here",
        "whatlinkshere-title": "Pages that link to \"$1\"",
        "whatlinkshere-summary": "",
        "undelete-cantedit": "You cannot undelete this page as you are not allowed to edit this page.",
        "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page.",
        "pagedata-title": "Page data",
-       "pagedata-text": "This page provides a data interface to pages. Please provide the page title in the URL, using subpage syntax.\n* Content negotiation applies based on you client's Accept header. This means that the page data will be provided in the format preferred by your client.",
+       "pagedata-text": "This page provides a data interface to pages. Please provide the page title in the URL, using subpage syntax.\n* Content negotiation applies based on your client's Accept header. This means that the page data will be provided in the format preferred by your client.",
        "pagedata-not-acceptable": "No matching format found. Supported MIME types: $1",
        "pagedata-bad-title": "Invalid title: $1."
 }
index b4e840e..c510099 100644 (file)
        "rcfilters-liveupdates-button": "Actualizaciones en directo",
        "rcfilters-liveupdates-button-title-on": "Apagar actualizaciones en directo",
        "rcfilters-liveupdates-button-title-off": "Mostar los cambios en tiempo real",
-       "rcfilters-watchlist-markSeen-button": "Marcar todos los cambios como vistos",
+       "rcfilters-watchlist-markseen-button": "Marcar todos los cambios como vistos",
        "rcfilters-watchlist-showupdated": "Los cambios hechos a páginas que no has visitado desde que se efectuaron aparecen en <strong>negrita</strong>, acompañados de marcadores sólidos.",
        "rcnotefrom": "Debajo {{PLURAL:$5|aparece el cambio|aparecen los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
        "rclistfromreset": "Restablecer selección de fecha",
        "unwatchthispage": "Dejar de vigilar",
        "notanarticle": "No es una página de contenido",
        "notvisiblerev": "La última revisión de un usuario diferente ha sido borrada",
-       "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} en tu lista de seguimiento, sin contar las de discusión.",
+       "watchlist-details": "Hay {{PLURAL:$1|$1 página|$1 páginas}} en tu lista de seguimiento (más las páginas de discusión).",
        "wlheader-enotif": "La notificación por correo está activada.",
        "wlheader-showupdated": "Las páginas modificadas desde tu última visita aparecen en <strong>negrita</strong>.",
        "wlnote": "A continuación {{PLURAL:$1|se muestra el último cambio|se muestran los últimos <strong>$1</strong> cambios}} en {{PLURAL:$2|la última hora|las últimas <strong>$2</strong> horas}} a fecha de $4 $3.",
index a90570f..2ccddbf 100644 (file)
        "rcfilters-liveupdates-button": "Uuendused reaalajas",
        "rcfilters-liveupdates-button-title-on": "Lülita reaalajas uuendamine välja",
        "rcfilters-liveupdates-button-title-off": "Näita uusi muudatusi kohe nende tegemise järel",
-       "rcfilters-watchlist-markSeen-button": "Märgi kõik muudatused nähtuks",
+       "rcfilters-watchlist-markseen-button": "Märgi kõik muudatused nähtuks",
        "rcnotefrom": "Allpool on toodud {{PLURAL:$5|muudatus|muudatused}} alates: <strong>$3, kell $4</strong> (näidatakse kuni <strong>$1</strong> muudatust)",
        "rclistfromreset": "Lähtesta kuupäeva valik",
        "rclistfrom": "Näita muudatusi alates: $3, kell $2",
index d93d92f..a1bb68b 100644 (file)
        "title-invalid-interwiki": "Eskatutako orriaren tituluak bertan erabili ezin den interwiki linka darama.",
        "title-invalid-talk-namespace": "Eskatutako orriaren izenburuak agian existitzen ez den eztabaida-orri bati egiten dio erreferentzia.",
        "title-invalid-characters": "Eskatutako orriaren izenburuak baliagarri ez diren karaktereak ditu: \"$1\".",
+       "title-invalid-leading-colon": "Eskatutako orriaren izenburua puntuazio baliogabea dauka hasieran.",
        "perfcached": "Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.",
        "perfcachedts": "Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$4|emaitza 1 dago|$4 emaitza daude}} eskuragarri katxean.",
        "querypage-no-updates": "Orrialde honen berritzeak ez dira baimentzen. Hemen dagoen data ez da zuzenean berrituko.",
        "createaccount-text": "Norbaitek zure e-postarekin kontu bat sortu du {{SITENAME}}(e)n ($4) \"$2\" izenarekin eta \"$3\" pasahitzarekin.\nOrain bertan sar zaitezke eta zure pasahitza aldatu.\n\nKontu honen sorrera akats bat dela uste baduzu mezu honi ez diozu zertan jaramonik egin.",
        "login-throttled": "Saioa hasteko saiakera gehiegi egin berri dituzu.\nBerriro saiatu aurretik $1 itxoin, mesedez.",
        "login-abort-generic": "Zure sarrerak akatsa izan du - Abortatua",
+       "login-migrated-generic": "Zure kontua migratu da, eta zure erabiltzaile-izena ez dago jadanik wiki honetan.",
        "loginlanguagelabel": "Hizkuntza: $1",
        "suspicious-userlogout": "Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.",
        "createacct-another-realname-tip": "Benetako izena hautazkoa da.\nEmatea erabakitzen baduzu hori erabiliko da lanaren atribuzioa egiterako garaian.",
        "rcfilters-tag-remove": "$1 ezabatu",
        "rcfilters-legend-heading": "<indartsu>Laburpenen zerrenda:</indartsu>",
        "rcfilters-other-review-tools": "<strong>Beste berrikusketa tresna:</strong>",
+       "rcfilters-group-results-by-page": "Talde emaitzak orrika",
        "rcfilters-grouping-title": "Taldekatzen",
        "rcfilters-activefilters": "Iragazki aktiboak",
        "rcfilters-advancedfilters": "Iragazki aurreratuak",
        "rcfilters-savedqueries-add-new-title": "Gorde oraingo iragazki ezarpenak",
        "rcfilters-restore-default-filters": "Leheneratu iragazki lehenetsiak",
        "rcfilters-clear-all-filters": "Iragazki guztiak garbitu",
+       "rcfilters-show-new-changes": "Aldaketa berrienak ikusi",
        "rcfilters-search-placeholder": "Aldaketa berriak iragazi (nabigatu ala idatzi)",
        "rcfilters-invalid-filter": "Balio ez duen iragazkia",
        "rcfilters-empty-filter": "Filtro aktiborik ez dago. Ekarpen guztiak erakusten.",
        "rcfilters-filterlist-whatsthis": "Nola erabiltzen da?",
        "rcfilters-highlightbutton-title": "Nabarmendu emaitzak",
        "rcfilters-highlightmenu-title": "Hautatu kolore bat",
+       "rcfilters-highlightmenu-help": "Aukeratu kolore bat propietate hau nabarmentzeko",
        "rcfilters-filterlist-noresults": "Ez da iragazkirik aurkitu",
        "rcfilters-filtergroup-authorship": "Ekarpenaren egiletza",
        "rcfilters-filter-editsbyself-label": "Zuk egindako aldaketak",
        "rcfilters-view-return-to-default-tooltip": "Oinarrizko iragazketa menura bueltatu",
        "rcfilters-liveupdates-button": "Zuzenean egindako eguneraketak",
        "rcfilters-liveupdates-button-title-on": "Desgaitu zuzenean egindako eguneraketak",
-       "rcfilters-watchlist-markSeen-button": "Aldaketa guztiak ikusitakoak bezala markatu",
+       "rcfilters-watchlist-markseen-button": "Aldaketa guztiak ikusitakoak bezala markatu",
        "rcnotefrom": "Jarraian azaltzen diren {{PLURAL:$5|aldaketak}} data honetatik aurrerakoak dira: <strong>$3,$4</strong> (gehienez <b>$1</b> erakusten dira).",
        "rclistfromreset": "Data aukeraketa berrezarri",
        "rclistfrom": "Erakutsi $3 $2 ondorengo aldaketa berriak",
        "compare-title-not-exists": "Adierazi duzun izenburua ez da existitzen.",
        "compare-revision-not-exists": "Zehazturiko berrikuspena ez da existitzen.",
        "diff-form": "Ezberdintasunak",
+       "diff-form-revid": "Ezberdintasunaren ID berrikusketa",
        "diff-form-submit": "Erakutsi ezberdintasunak",
        "permanentlink": "Lotura finkoa",
        "permanentlink-revid": "Berrikuspen IDa",
        "feedback-subject": "Gaia:",
        "feedback-submit": "Bidali",
        "feedback-thanks-title": "Eskerrik asko!",
+       "feedback-useragent": "Erabiltzaile agentea:",
        "searchsuggest-search": "{{SITENAME}} wikian bilatu",
        "searchsuggest-containing": "edukian...",
        "api-error-badtoken": "Barne akatsa: token okerra.",
        "authprovider-resetpass-skip-label": "Utzi",
        "authform-wrongtoken": "Token okerra",
        "specialpage-securitylevel-not-allowed-title": "Baimenik gabe",
+       "authpage-cannot-login": "Saio hasiera ezin izan da burutu.",
        "cannotauth-not-allowed-title": "Ez da baimendu",
        "cannotauth-not-allowed": "Ez duzu baimenik orri hau erabiltzeko",
        "changecredentials": "Kredentzialak aldatu",
        "removecredentials-submit": "Kredentzialak kendu",
        "credentialsform-provider": "Kredentzial mota:",
        "credentialsform-account": "Kontuaren izena:",
+       "linkaccounts": "Kontuak lotu",
+       "linkaccounts-success-text": "Kontua lotu da.",
+       "linkaccounts-submit": "Kontuak lotu",
+       "unlinkaccounts": "Kontuak desestekatu",
+       "unlinkaccounts-success": "Kontua desestekatu da.",
+       "revid": "$1 berrikusi",
+       "pageid": "$1 orri IDa",
        "gotointerwiki": "{{SITENAME}}(e)tik irteten",
-       "pagedata-title": "Orri data"
+       "pagedata-title": "Orri data",
+       "pagedata-bad-title": "Izenburu baliogabea: $1"
 }
index d43ab0e..d376427 100644 (file)
        "rcfilters-empty-filter": "پالایه‌ای فعال نیست. همهٔ مشارکت‌های دیده می‌شوند.",
        "rcfilters-filterlist-title": "پالایه‌ها",
        "rcfilters-filterlist-whatsthis": "این چطور کار می‌کند؟",
-       "rcfilters-filterlist-feedbacklink": "ارساÙ\84 Ø¨Ø§Ø²Ø®Ù\88رد Ø¨Ø±Ø§Û\8c Ù¾Ø§Ù\84اÛ\8cÙ\87â\80\8cÙ\87اÛ\8c Ø¬Ø¯Û\8cد (آزÙ\85اÛ\8cØ´Û\8c)",
+       "rcfilters-filterlist-feedbacklink": "بÙ\87 Ù\85ا Ø¯Ø± Ù\85Ù\88رد Ø§Û\8cÙ\86 Ù¾Ø§Ù\84اÛ\8cÙ\87â\80\8cÙ\87اÛ\8c Ø¬Ø¯Û\8cد Ø¨Ø§Ø²Ø®Ù\88رد Ø¯Ù\87Û\8cد",
        "rcfilters-highlightbutton-title": "پررنگ کردن نتایج",
        "rcfilters-highlightmenu-title": "انتخاب رنگ",
        "rcfilters-highlightmenu-help": "یک رنگ انتخاب کنید تا این خصوصیت پر رنگ شود",
        "rcfilters-liveupdates-button": "به‌روزرسانی‌های زنده",
        "rcfilters-liveupdates-button-title-on": "خاموش کردن به‌روزرسانی خودکار",
        "rcfilters-liveupdates-button-title-off": "نمایش تغییرات جدید همچنان که رخ می‌دهند",
-       "rcfilters-watchlist-markSeen-button": "نشانه‌گذاری تمام تغییرات به‌عنوان خوانده‌شده",
+       "rcfilters-watchlist-markseen-button": "نشانه‌گذاری تمام تغییرات به‌عنوان خوانده‌شده",
+       "rcfilters-watchlist-edit-watchlist-button": "ویرایش فهرست صفحه‌های پی‌گیری‌هایتان",
        "rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).",
        "rclistfromreset": "از نو کردن انتخاب تاریخ",
        "rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
        "unwatchthispage": "توقف پی‌گیری",
        "notanarticle": "صفحه محتوایی نیست",
        "notvisiblerev": "آخرین نسخه توسط کاربری دیگر حذف شده‌است",
-       "watchlist-details": "بدون احتساب صفحه‌های جداگانهٔ بحث، {{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارند}}.",
+       "watchlist-details": "{{PLURAL:$1|$1 صفحه|$1 صفحه}} در فهرست پی‌گیری‌های شما قرار {{PLURAL:$1|دارد|دارند}}.",
        "wlheader-enotif": "ایمیل‌های اعلان فعال است.",
        "wlheader-showupdated": "صفحه‌هایی که پس از آخرین بازدید شما تغییر کرده‌اند <strong>پررنگ</strong> نمایش داده شده‌اند.",
        "wlnote": "در زیر {{PLURAL:$1|تغییری|<strong>$1</strong> تغییری}} که در {{PLURAL:$2|ساعت|<strong>$2</strong> ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4",
index bfce7d9..4fb2636 100644 (file)
                        "Trizek (WMF)",
                        "Framawiki",
                        "Jona",
-                       "Epok"
+                       "Epok",
+                       "DePlusJean"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "october-gen": "octobre",
        "november-gen": "novembre",
        "december-gen": "décembre",
-       "jan": "jan",
-       "feb": "fév",
-       "mar": "mar",
-       "apr": "avr",
+       "jan": "janv.",
+       "feb": "fév.",
+       "mar": "mars",
+       "apr": "avr.",
        "may": "mai",
        "jun": "juin",
-       "jul": "juil",
+       "jul": "juill.",
        "aug": "août",
-       "sep": "sep",
-       "oct": "oct",
-       "nov": "nov",
-       "dec": "déc",
+       "sep": "sept.",
+       "oct": "oct.",
+       "nov": "nov.",
+       "dec": "déc.",
        "january-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} janvier",
        "february-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} février",
        "march-date": "{{PLURAL:$1|1=1ᵉʳ|$1}} mars",
        "returnto": "Revenir à la page $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Aide",
-       "search": "Rechercher",
+       "search": "Chercher",
        "search-ignored-headings": " #<!-- ne pas modifier cette ligne --><pre>\n# Titres des sections qui seront ignorés par la recherche.\n# Les changements effectués ici prennent effet dès lors que la page avec le titre est indexée.\n# Vous pouvez forcer la réindexation de la page en effectuant une modification vide.\n# La syntaxe est la suivante :\n#   * Toute ce qui suit un « # » jusqu’à la fin de la ligne est un commentaire.\n#   * Toute ligne non-vide est le titre exact à ignorer, casse comprise.\nRéférences\nLiens externes\nVoir aussi\n #</pre><!-- ne pas modifier cette ligne -->",
-       "searchbutton": "Rechercher",
+       "searchbutton": "Chercher",
        "go": "Consulter",
-       "searcharticle": "Lire",
+       "searcharticle": "Continuer",
        "history": "Historique de la page",
        "history_short": "Historique",
        "history_small": "historique",
        "updatedmarker": "modifié depuis ma dernière visite",
        "printableversion": "Version imprimable",
-       "permalink": "Adresse permanente",
+       "permalink": "Lien permanent",
        "print": "Imprimer",
        "view": "Lire",
        "view-foreign": "Voir sur $1",
        "redirectedfrom": "(Redirigé depuis $1)",
        "redirectpagesub": "Page de redirection",
        "redirectto": "Rediriger vers :",
-       "lastmodifiedat": "Cette page a été modifiée pour la dernière fois le $1 à $2.",
+       "lastmodifiedat": "La dernière modification de cette page a été faite le $1 à $2.",
        "viewcount": "Cette page {{PLURAL:$1|0=n’a jamais été consultée|1=a été consultée une seule fois|a été consultée $1 fois}}.",
        "protectedpage": "Page protégée",
        "jumpto": "Aller à :",
        "pool-servererror": "Le service de réservation n’est pas disponible ($1).",
        "poolcounter-usage-error": "Erreur d’utilisation : $1",
        "aboutsite": "À propos de {{SITENAME}}",
-       "aboutpage": "Project:À propos",
+       "aboutpage": "Project: À propos de",
        "copyright": "Le contenu est disponible sous licence $1 sauf mention contraire.",
        "copyrightpage": "{{ns:project}}:Copyrights",
        "currentevents": "Actualités",
-       "currentevents-url": "Project:Actualités",
+       "currentevents-url": "Project: Actualités",
        "disclaimers": "Avertissements",
-       "disclaimerpage": "Project:Avertissements généraux",
+       "disclaimerpage": "Project: Avertissements généraux",
        "edithelp": "Aide pour l'édition",
        "helppage-top-gethelp": "Aide",
        "mainpage": "Accueil",
        "mainpage-description": "Accueil",
        "policy-url": "Project:Règles",
        "portal": "Communauté",
-       "portal-url": "Project:Accueil",
+       "portal-url": "Project: portail communautaire",
        "privacy": "Politique de confidentialité",
-       "privacypage": "Project:Confidentialité",
+       "privacypage": "Project: Politique de confidentialité",
        "badaccess": "Erreur de permissions",
        "badaccess-group0": "Vous n’avez pas les droits suffisants pour réaliser l’action demandée.",
        "badaccess-groups": "L’action que vous essayez de réaliser n’est permise qu’aux utilisateurs {{PLURAL:$2|du groupe|d’un des groupes}} : $1.",
        "rcfilters-liveupdates-button": "Mises à jour en direct",
        "rcfilters-liveupdates-button-title-on": "Désactiver les mises à jour à chaud",
        "rcfilters-liveupdates-button-title-off": "Afficher les nouveaux changements dès qu'ils se produisent",
-       "rcfilters-watchlist-markSeen-button": "Marquer toutes les modifications comme vues",
-       "rcfilters-watchlist-editWatchlist-button": "Modifier votre liste de pages suivies",
+       "rcfilters-watchlist-markseen-button": "Marquer toutes les modifications comme vues",
+       "rcfilters-watchlist-edit-watchlist-button": "Modifier votre liste de pages suivies",
        "rcfilters-watchlist-showupdated": "Les modifications faites aux pages que vous n’avez pas visitées depuis qu’elles ont été modifiées sont en <strong>gras</strong>, avec des balises unies.",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
        "rclistfromreset": "Réinitialiser la sélection de la date",
        "filehist-datetime": "Date et heure",
        "filehist-thumb": "Vignette",
        "filehist-thumbtext": "Vignette pour la version du $1",
-       "filehist-nothumb": "Pas de miniature",
+       "filehist-nothumb": "Aucune miniature",
        "filehist-user": "Utilisateur",
        "filehist-dimensions": "Dimensions",
        "filehist-filesize": "Taille du fichier",
        "unwatchthispage": "Ne plus suivre",
        "notanarticle": "Ce n'est pas une page de contenu",
        "notvisiblerev": "La dernière version relue par un utilisateur différent, a été supprimée",
-       "watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} dans votre liste de suivi, sans compter les pages de discussion.",
+       "watchlist-details": "{{PLURAL:$1|$1 page est|$1 pages sont}} dans votre liste de suivi (plus les pages de discussion).",
        "wlheader-enotif": "La notification par courriel est activée.",
        "wlheader-showupdated": "Les pages qui ont été modifiées depuis votre dernière visite sont affichées en <strong>gras</strong>.",
        "wlnote": "Ci-dessous {{PLURAL:$1|figure la dernière modification effectuée|figurent les <strong>$1</strong> dernières modifications effectuées}} durant {{PLURAL:$2|la dernière heure|les <strong>$2</strong> dernières heures}}, jusqu'au $3, $4.",
        "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": "Il est recommandé de vous identifier ; ce n'est cependant pas obligatoire.",
+       "tooltip-pt-login": "Sans être obligatoire, il est recommandé de vous connecter.",
        "tooltip-pt-login-private": "Vous devez vous connecter pour utiliser ce wiki",
        "tooltip-pt-logout": "Se déconnecter",
-       "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
+       "tooltip-pt-createaccount": "Sans être obligatoire, il vous est conseillé de créer un compte utilisateur pour vous connecter",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "tooltip-ca-edit": "Modifier le wikicode",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "tooltip-ca-viewsource": "Cette page est protégée.\nVous pouvez toutefois en visualiser la source.",
-       "tooltip-ca-history": "Les versions passées de cette page (avec leurs contributeurs)",
+       "tooltip-ca-history": "Historique des versions de cette page",
        "tooltip-ca-protect": "Protéger cette page",
        "tooltip-ca-unprotect": "Changer la protection de cette page",
        "tooltip-ca-delete": "Supprimer cette page",
        "tooltip-ca-watch": "Ajouter cette page à votre liste de suivi",
        "tooltip-ca-unwatch": "Retirer cette page de votre liste de suivi",
        "tooltip-search": "Rechercher dans {{SITENAME}}",
-       "tooltip-search-go": "Aller vers une page portant exactement ce nom si elle existe.",
+       "tooltip-search-go": "Accédez à une page du même nom si elle existe",
        "tooltip-search-fulltext": "Rechercher les pages comportant ce texte.",
-       "tooltip-p-logo": "Page principale",
+       "tooltip-p-logo": "Accueil général",
        "tooltip-n-mainpage": "Visiter la page d'accueil du site",
-       "tooltip-n-mainpage-description": "Aller à l'accueil",
-       "tooltip-n-portal": "À propos du projet, ce que vous pouvez faire, où trouver des informations",
-       "tooltip-n-currentevents": "Trouver les informations de fond sur l'actualité du moment",
+       "tooltip-n-mainpage-description": "Accueil général",
+       "tooltip-n-portal": "À propos du projet, ce que vous pouvez faire, où trouver les informations",
+       "tooltip-n-currentevents": "Trouver plus d'informations sur les actualités en cours",
        "tooltip-n-recentchanges": "Liste des modifications récentes sur le wiki",
        "tooltip-n-randompage": "Afficher une page au hasard",
-       "tooltip-n-help": "Aide",
+       "tooltip-n-help": "Accès à l'aide",
        "tooltip-t-whatlinkshere": "Liste des pages liées qui pointent sur celle-ci",
        "tooltip-t-recentchangeslinked": "Liste des modifications récentes des pages appelées par celle-ci",
        "tooltip-feed-rss": "Flux RSS pour cette page",
        "tooltip-t-contributions": "Voir la liste des contributions de {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
        "tooltip-t-emailuser": "Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
        "tooltip-t-info": "Plus d’information sur cette page",
-       "tooltip-t-upload": "Téléverser des fichiers",
+       "tooltip-t-upload": "Importer des fichiers",
        "tooltip-t-specialpages": "Liste de toutes les pages spéciales",
        "tooltip-t-print": "Version imprimable de cette page",
        "tooltip-t-permalink": "Adresse permanente de cette version de la page",
-       "tooltip-ca-nstab-main": "Voir la page de contenu",
+       "tooltip-ca-nstab-main": "Voir le contenu de la page",
        "tooltip-ca-nstab-user": "Voir la page utilisateur",
        "tooltip-ca-nstab-media": "Voir la page du média",
        "tooltip-ca-nstab-special": "Ceci est une page spéciale, et elle ne peut pas être modifiée.",
        "pageinfo-content-model-change": "modifier",
        "pageinfo-robot-policy": "Indexation par robots",
        "pageinfo-robot-index": "Autorisée",
-       "pageinfo-robot-noindex": "Interdite",
+       "pageinfo-robot-noindex": "Non autorisé",
        "pageinfo-watchers": "Nombre de contributeurs ayant la page dans leur liste de suivi",
        "pageinfo-visiting-watchers": "Nombre d’observateurs de la page ayant consulté les modifications récentes de la page",
        "pageinfo-few-watchers": "Moins de $1 {{PLURAL:$1|observateur|observateurs}}",
        "pageinfo-few-visiting-watchers": "Il peut ou non y avoir un observateur regardant les modifications récentes",
        "pageinfo-redirects-name": "Nombre de redirections vers cette page",
-       "pageinfo-subpages-name": "Sous-pages de cette page",
+       "pageinfo-subpages-name": "Nombre de sous-pages de cette page",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirection|redirections}}; $3 {{PLURAL:$3|non-redirection|non-redirections}})",
        "pageinfo-firstuser": "Créateur de la page",
        "pageinfo-firsttime": "Date de création de la page",
        "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": "Plus d’informations",
        "pageinfo-redirectsto": "Rediriger vers",
        "pageinfo-redirectsto-info": "info",
        "pageinfo-contentpage": "Comptée comme page de contenu",
        "widthheightpage": "$1 × $2, $3 page{{PLURAL:$3||s}}",
        "file-info": "Taille du fichier : $1, type MIME : $2",
        "file-info-size": "$1 × $2 pixels, taille du fichier : $3, type MIME : $4",
-       "file-info-size-pages": "$1 × $2 pixels, taille de fichier : $3, type MIME : $4, $5 page{{PLURAL:$5||s}}",
+       "file-info-size-pages": "$1 × $2 pixels, taille du fichier : $3, type MIME: $4, $5 page{{PLURAL:$5||s}}",
        "file-nohires": "Pas de plus haute résolution disponible.",
        "svg-long-desc": "Fichier SVG, résolution de $1 × $2 pixels, taille : $3",
        "svg-long-desc-animated": "Fichier SVG animé, résolution $1 × $2 pixels, taille du fichier : $3",
        "feedback-thanks": "Merci ! Votre commentaire a été publié sur la page « [$2 $1] ».",
        "feedback-thanks-title": "Merci !",
        "feedback-useragent": "Agent utilisateur :",
-       "searchsuggest-search": "Rechercher sur {{SITENAME}}",
+       "searchsuggest-search": "Rechercher dans {{SITENAME}}",
        "searchsuggest-containing": "contenant...",
        "api-error-badtoken": "Erreur interne : mauvais « jeton ».",
        "api-error-emptypage": "Création de pages vide n'est pas autorisée.",
index 9c67f0b..27758c3 100644 (file)
        "talk": "ચર્ચા",
        "views": "દેખાવ",
        "toolbox": "સાધનો",
+       "tool-link-userrights": "બદલો {{GENDER:$1|સભ્ય}} સમુહો",
+       "tool-link-userrights-readonly": "દેખાડો {{GENDER:$1|સભ્ય}} સમુહો",
        "tool-link-emailuser": "આ {{GENDER:$1|સભ્ય}}ને ઇમેલ કરો",
        "imagepage": "ફાઇલનું પાનું જુઓ",
        "mediawikipage": "સંદેશનું પાનું જુઓ",
        "virus-scanfailed": "સ્કેન અસફળ (code $1)",
        "virus-unknownscanner": "અજાણ્યું એન્ટીવાઇરસ:",
        "logouttext": "'''તમે સફળતાપૂર્વક બહાર નીકળી ચૂક્યા છો.'''\n\nધ્યાન રાખો કે જ્યાં સુધી તમે તમારા બ્રાઉઝરની કૅશ સાફ નહીં કરો ત્યાં સુધી કેટલાક પાનાં તમે પ્રવેશ કરેલો છે તેમ બતાવશે.",
+       "cannotlogoutnow-title": "હવે લૉગ આઉટ કરી શકાતું નથી",
+       "cannotlogoutnow-text": "$1 નો ઉપયોગ કરતી વખતે લૉગ આઉટ શક્ય નથી.",
        "welcomeuser": "સુસ્વાગતમ્, $1!",
        "welcomecreation-msg": "તમારૂં ખાતું ખુલી ગયું છે.\nતમારી [[Special:Preferences|{{SITENAME}} પસંદ]] બદલવાનું ભૂલશો નહીં.",
        "yourname": "સભ્ય નામ:",
        "createacct-yourpasswordagain-ph": "પાસવર્ડ ફરીથી દાખલ કરો",
        "userlogin-remembermypassword": "મને પ્રવેશિત રાખો",
        "userlogin-signwithsecure": "સલામત જોડાણ વાપરો",
+       "cannotlogin-title": "લૉગ ઇન કરી શકતા નથી",
+       "cannotlogin-text": "લોગ ઇન કરવું શક્ય નથી.",
+       "cannotloginnow-title": "હવે લૉગ ઇન કરી શકાતું નથી",
+       "cannotloginnow-text": "$1 નો ઉપયોગ કરતી વખતે લૉગ ઇન શક્ય નથી.",
+       "cannotcreateaccount-title": "ખાતું ખોલી શકાય તેમ નથી",
        "yourdomainname": "તમારૂં ડોમેઇન:",
        "password-change-forbidden": "તમે આ વિકિ માટે પાસવર્ડ્સ બદલી શકતા નથી.",
        "externaldberror": "પ્રમાણભૂતતાની ત્રુટી આવી અથવા તમારૂ બહારનુ ખાતું અપડેટ કરવાનો અધિકાર તમને નથી.",
index e1a9271..b4f87e5 100644 (file)
        "rcfilters-liveupdates-button": "עדכונים חיים",
        "rcfilters-liveupdates-button-title-on": "כיבוי העדכונים החיים",
        "rcfilters-liveupdates-button-title-off": "הצגת שינויים חדשים כשהם מתרחשים",
-       "rcfilters-watchlist-markSeen-button": "סימון כל השינויים כאילו נצפו",
-       "rcfilters-watchlist-editWatchlist-button": "עריכת רשימת הדפים במעקב שלך",
+       "rcfilters-watchlist-markseen-button": "סימון כל השינויים כאילו נצפו",
+       "rcfilters-watchlist-edit-watchlist-button": "עריכת רשימת הדפים במעקב שלך",
        "rcfilters-watchlist-showupdated": "שינויים בדפים שלא ביקרת בהם מאז ביצוע השינויים מופיעים בכתב <strong>מודגש</strong>, ומודגשים בצבע.",
        "rcnotefrom": "להלן {{PLURAL:$5|השינוי שבוצע|השינויים שבוצעו}} מאז <strong>$3, $4</strong> (מוצגים עד <strong>$1</strong>).",
        "rclistfromreset": "איפוס בחירת התאריך",
        "unwatchthispage": "הפסקת המעקב אחרי דף זה",
        "notanarticle": "זהו אינו דף תוכן",
        "notvisiblerev": "הגרסה האחרונה שנוצרה על־ידי משתמש אחר נמחקה",
-       "watchlist-details": "×\91רש×\99×\9eת ×\94×\9eעק×\91 ×\99ש {{PLURAL:$1|×\93×£ ×\90×\97×\93|$1 ×\93פ×\99×\9d}}, ×\9b×\90שר ×\93פ×\99 ×\94ש×\99×\97×\94 ×\90×\99× ×\9d × ×¡×¤×¨×\99×\9d ×\91נפר×\93.",
+       "watchlist-details": "×\91רש×\99×\9eת ×\94×\9eעק×\91 ×©×\9c×\9a ×\99ש {{PLURAL:$1|×\93×£ ×\90×\97×\93|$1 ×\93פ×\99×\9d}} (×\95×\91× ×\95סף ×\9c×\94×\9d, ×\93פ×\99 ×©×\99×\97×\94).",
        "wlheader-enotif": "הודעות דוא\"ל מאופשרות.",
        "wlheader-showupdated": "דפים שהשתנו מאז ביקורך האחרון בהם מוצגים ב'''הדגשה'''.",
        "wlnote": "להלן {{PLURAL:$1|השינוי האחרון|<strong>$1</strong> השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־<strong>$2</strong> השעות האחרונות}}, עד $4, $3.",
index e06895e..c0950d6 100644 (file)
        "rcfilters-liveupdates-button": "जीवंत अद्यतन",
        "rcfilters-liveupdates-button-title-on": "जीवंत अद्यतन बंद करें",
        "rcfilters-liveupdates-button-title-off": "नये परिवर्तन प्रदर्शित करें जैसे ही वे घटित होते हैं",
-       "rcfilters-watchlist-markSeen-button": "देखे गए के रूप में सभी परिवर्तनों को चिह्नित करें",
-       "rcfilters-watchlist-editWatchlist-button": "देखे गए पन्नों की सूची को संपादित करें",
+       "rcfilters-watchlist-markseen-button": "देखे गए के रूप में सभी परिवर्तनों को चिह्नित करें",
+       "rcfilters-watchlist-edit-watchlist-button": "देखे गए पन्नों की सूची को संपादित करें",
        "rcfilters-watchlist-showupdated": "उन पन्नों में परिवर्तन जिनपर आप परिवर्तन के बाद से नहीं गए हैं, ठोस चिन्ह के साथ <strong>bold</strong> दिखाए गए हैं।",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "rclistfromreset": "चुने दिनांक पहले जैसा करें",
index aa598a2..2857f4a 100644 (file)
@@ -73,6 +73,7 @@
        "tog-watchlisthideminor": "Sakrij manje promjene s popisa praćenja",
        "tog-watchlisthideliu": "Sakrij uređivanja prijavljenih s popisa praćenja",
        "tog-watchlistreloadautomatically": "Ponovo učitaj popis praćenja kad god dođe do promjene filtra (potreban JavaScript)",
+       "tog-watchlistunwatchlinks": "Dodaj poveznice za izravno dodavanje/uklanjanje stranica s popisa praćenja (za funkcionalnost mogućnosti potreban je JavaScript)",
        "tog-watchlisthideanons": "Sakrij uređivanja neprijavljenih s popisa praćenja",
        "tog-watchlisthidepatrolled": "Sakrij pregledane izmjene u popisu praćenja",
        "tog-watchlisthidecategorization": "Sakrij kategorizaciju stranica",
        "cannotloginnow-title": "Prijava trenutno nije moguća.",
        "cannotloginnow-text": "Prijava nije moguća tijekom uporabe $1.",
        "cannotcreateaccount-title": "Nije moguće stvoriti račune",
+       "cannotcreateaccount-text": "Direktno stvaranje računa nije omogućeno na ovome wikiju.",
        "yourdomainname": "Vaša domena",
        "password-change-forbidden": "Ne možete promjeniti zaporku na ovom projektu.",
        "externaldberror": "Došlo je do pogreške s vanjskom autorizacijom ili Vam nije dopušteno osvježavanje vanjskog suradničkog računa.",
        "createacct-email-ph": "Upišite svoju adresu e-pošte",
        "createacct-another-email-ph": "Upišite adresu e-pošte",
        "createaccountmail": "Uporabite nasumice odabranu privremenu zaporku i pošaljite ju na navedenu adresu e-pošte",
+       "createaccountmail-help": "Može se rabiti da se nekome stvori račun bez da se sazna zaporka.",
        "createacct-realname": "Stvarno ime (neobvezatno)",
        "createacct-reason": "Razlog",
        "createacct-reason-ph": "Zašto stvarate drugi račun",
+       "createacct-reason-help": "Poruka koja se prikazuje u evidenciji stvaranja suradničkih računa",
        "createacct-submit": "Stvorite svoj suradnički račun",
        "createacct-another-submit": "Otvori račun",
        "createacct-continue-submit": "Pritisni za stvaranje računa",
        "createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
        "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavnih suradnika}}",
        "badretype": "Unesene zaporke nisu istovjetne.",
+       "usernameinprogress": "Stvaranje računa za ovo suradničko ime upravo je u tijeku.\nMolimo, pričekajte.",
        "userexists": "Uneseno suradničko ime već je u upotrebi.\nUnesite neko drugo ime.",
        "loginerror": "Pogrješka u prijavi",
        "createacct-error": "Pogrješka u stvaranju računa",
        "search-interwiki-caption": "Rezultati sa sestrinskih projekata",
        "search-interwiki-default": "Rezultati s projekta $1:",
        "search-interwiki-more": "(više)",
+       "search-interwiki-more-results": "više rezultata",
        "search-relatedarticle": "Povezano",
        "searchrelated": "povezano",
        "searchall": "sve",
        "prefs-registration": "Vrijeme prijave:",
        "yourrealname": "Pravo ime (nije obvezno)*",
        "yourlanguage": "Jezik:",
-       "yourvariant": "Inačica jezika:",
-       "prefs-help-variant": "Željena varijanta ili pravopis za prikaz stranica ovog wikija.",
+       "yourvariant": "Jezična inačica sadržaja:",
+       "prefs-help-variant": "Vaša preferirana inačica ili pravopis za prikaz sadržaja stranica na ovom wikiju.",
        "yournick": "Vaš nadimak (za potpisivanje)",
        "prefs-help-signature": "Komentari na stranicama za razgovor trebali bi biti potpisani s \"<nowiki>~~~~</nowiki>\" što će biti pretvoreno u Vaš potpis i datum.",
        "badsig": "Kôd Vašeg potpisa nije valjan; provjerite HTML tagove.",
        "logempty": "Nema pronađenih stavki u evidenciji.",
        "log-title-wildcard": "Traži stranice koje počinju s navedenim izrazom",
        "showhideselectedlogentries": "Otkrij/sakrij odabrane evidencije",
+       "log-edit-tags": "Uredi oznake izabranih unosa u evidencijama",
        "checkbox-select": "Odaberite: $1",
        "checkbox-all": "Sve",
        "checkbox-none": "Ništa",
        "tags-hitcount": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
        "tags-manage-no-permission": "Nemate pravo upravljati promjenama oznaka.",
        "tags-create-heading": "Stvori novu oznaku",
+       "tags-create-explanation": "Predodređeno je da će novostvorene oznake biti omogućene za upotrebu suradnicima i botovima.",
        "tags-create-tag-name": "Naziv oznake:",
        "tags-create-reason": "Razlog:",
        "tags-create-submit": "Stvori",
index 6a925ac..6ab149a 100644 (file)
        "rcfilters-view-return-to-default-tooltip": "Vissza a főszűrőmenübe.",
        "rcfilters-liveupdates-button": "Élő frissítések",
        "rcfilters-liveupdates-button-title-on": "Élő frissítések kikapcsolása",
-       "rcfilters-watchlist-markSeen-button": "Összes változtatás megjelölése olvasottként",
+       "rcfilters-watchlist-markseen-button": "Összes változtatás megjelölése olvasottként",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfromreset": "Dátumválasztás visszaállítása",
        "rclistfrom": "$3, $2 után történt változtatások megtekintése",
        "version-libraries-license": "Licenc",
        "version-libraries-description": "Leírás",
        "version-libraries-authors": "Szerzők",
-       "redirect": "Átirányítás fájl, szerkesztő, olda, oldalváltozat vagy naplóazonosító alapján",
+       "redirect": "Átirányítás fájl, szerkesztő, oldal, oldalváltozat vagy naplóazonosító alapján",
        "redirect-summary": "Ez a speciális lap átirányít egy fájlra (megadott fájlnévvel), lapra (megadott lapváltozat- vagy lapazonosító számmal), felhasználóra (felhasználó azonosítószáma alapján) vagy naplóbejegyzésre (naplóazonosító alapján). Használat: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] vagy [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Mehet",
        "redirect-lookup": "Keresés:",
index 6d209f3..439edb6 100644 (file)
        "rcfilters-liveupdates-button": "Perubahan langsung",
        "rcfilters-liveupdates-button-title-on": "Matikan perubahan langsung",
        "rcfilters-liveupdates-button-title-off": "Tampilkan perubahan baru ketika perubahan tersebut terjadi",
-       "rcfilters-watchlist-markSeen-button": "Tandai semua perubahan sebagai terlihat",
+       "rcfilters-watchlist-markseen-button": "Tandai semua perubahan sebagai terlihat",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfromreset": "Atur ulang pilihan tanggal",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
index 3b85292..6629710 100644 (file)
@@ -56,7 +56,7 @@
        "tog-shownumberswatching": "Sýna fjölda vaktandi notenda",
        "tog-oldsig": "Núverandi undirskriftin þín:",
        "tog-fancysig": "Meðhöndla undirskrift sem wikitexta (án sjálfvirks tengils)",
-       "tog-uselivepreview": "Nota beina forskoðun",
+       "tog-uselivepreview": "Nota beina forskoðun án þess að endurhlaða síðuna",
        "tog-forceeditsummary": "Birta áminningu þegar breytingarágripið er tómt",
        "tog-watchlisthideown": "Ekki sýna mínar breytingar á vaktlistanum",
        "tog-watchlisthidebots": "Ekki sýna breytingar vélmenna á vaktlistanum",
        "anontalk": "Spjall",
        "navigation": "Flakk",
        "and": "&#32;og",
-       "qbfind": "Finna",
-       "qbbrowse": "Flakka",
-       "qbedit": "Breyta",
-       "qbpageoptions": "Þessi síða",
-       "qbmyoptions": "Mínar síður",
        "faq": "Algengar spurningar",
-       "faqpage": "Project:Algengar spurningar",
        "actions": "Aðgerðir",
        "namespaces": "Nafnrými",
        "variants": "Útgáfur",
        "edit-local": "Breyta staðbundinni lýsingu",
        "create": "Skapa",
        "create-local": "Bæta við staðbundinni lýsingu",
-       "editthispage": "Breyta þessari síðu",
-       "create-this-page": "Skapa þessari síðu",
        "delete": "Eyða",
-       "deletethispage": "Eyða þessari síðu",
-       "undeletethispage": "Endurvekja þessa síðu",
        "undelete_short": "Endurvekja {{PLURAL:$1|$1 breytingu|$1 breytingar}}",
        "viewdeleted_short": "Skoða $1 {{PLURAL:$1|eydda breytingu|eyddar breytingar}}",
        "protect": "Vernda",
        "protect_change": "breyta",
-       "protectthispage": "Vernda þessa síðu",
        "unprotect": "Afvernda",
-       "unprotectthispage": "Afvernda þessa síðu",
        "newpage": "Ný síða",
-       "talkpage": "Ræða um þessa síðu",
        "talkpagelinktext": "Spjall",
        "specialpage": "Kerfissíða",
        "personaltools": "Tenglar",
-       "articlepage": "Sýna núverandi síðu",
        "talk": "Spjall",
        "views": "Sýn",
        "toolbox": "Verkfæri",
        "tool-link-userrights": "Breyta {{GENDER:$1|notanda}} hópum",
        "tool-link-userrights-readonly": "Skoða {{GENDER:$1|notanda}} hópa",
        "tool-link-emailuser": "Senda þessum {{GENDER:$1|notanda}} tölvupóst",
-       "userpage": "Skoða notandasíðu",
-       "projectpage": "Skoða verkefnissíðu",
        "imagepage": "Skoða skráarsíðu",
        "mediawikipage": "Skoða skilaboðasíðu",
        "templatepage": "Skoða sniðmátasíðu",
        "filereadonlyerror": "Ekki var hægt að breyta skránni \"$1\" því skráin í skráarsafninu \"$2\" er engöngu hægt að lesa.\n\nKerfisstjórinn sem læsti skránni gaf þessa ástæðu: \"$3\".",
        "invalidtitle-knownnamespace": "Ógildur titill í nafnrými \"$2\" og með textann \"$3\"",
        "invalidtitle-unknownnamespace": "Ógildur titill með óþekkt nafnrými númer $1 og texta \"$2\"",
-       "exception-nologin": "Óinnskráð(ur)",
+       "exception-nologin": "Ekki skráð/ur inn",
        "exception-nologin-text": "Skráðu þig inn til þess að fá aðgang að þessari síðu eða aðgerð.",
        "exception-nologin-text-manual": "$1 til þess að fá aðgang að þessari síðu eða aðgerð.",
        "virus-badscanner": "Slæm stilling: óþekktur veiruskannari: <em>$1</em>",
        "welcomecreation-msg": "Aðgangurinn þinn hefur verið búinn til.\nEkki gleyma að breyta [[Special:Preferences|{{SITENAME}} stillingunum]] þínum.",
        "yourname": "Notandanafn:",
        "userlogin-yourname": "Notandanafn",
-       "userlogin-yourname-ph": "Skrifaðu inn notandanafnið þitt",
-       "createacct-another-username-ph": "Skrifaðu inn notandanafnið",
+       "userlogin-yourname-ph": "Settu inn notandanafnið þitt",
+       "createacct-another-username-ph": "Settu inn notandanafnið",
        "yourpassword": "Lykilorð:",
        "userlogin-yourpassword": "Lykilorð",
-       "userlogin-yourpassword-ph": "Skrifaðu niður lykilorðið þitt",
-       "createacct-yourpassword-ph": "Skrifaðu niður lykilorð",
+       "userlogin-yourpassword-ph": "Settu inn lykilorðið þitt",
+       "createacct-yourpassword-ph": "Settu inn lykilorð",
        "yourpasswordagain": "Endurrita lykilorð:",
        "createacct-yourpasswordagain": "Staðfestu lykilorðið",
        "createacct-yourpasswordagain-ph": "Sláðu inn lykilorðið aftur",
        "userlogin-remembermypassword": "Muna innskráningu mína",
        "userlogin-signwithsecure": "Nota örugga tengingu",
+       "cannotlogin-title": "Get ekki skráð inn",
+       "cannotlogin-text": "Innskráning er ekki möguleg.",
        "cannotloginnow-title": "Get ekki skráð inn núna",
        "cannotloginnow-text": "Innskráning er ekki möguleg þegar verið er að nota $1.",
+       "cannotcreateaccount-title": "Ekki hægt að búa til aðganga",
        "yourdomainname": "Þitt lén:",
        "password-change-forbidden": "Þú getur ekki breytt lykilorðum á þessum wiki.",
        "externaldberror": "Uppfærsla mistókst. Annaðhvort varð villa í gagnasafninu eða að þér sé óheimilt að uppfæra aðra aðganga.",
-       "login": "Innskrá",
-       "nav-login-createaccount": "Innskrá / Búa til aðgang",
+       "login": "Skrá inn",
+       "login-security": "Sannreyndu auðkennin þín",
+       "nav-login-createaccount": "Skrá inn / Búa til aðgang",
        "logout": "Útskráning",
        "userlogout": "Útskrá",
-       "notloggedin": "Ekki innskráð(ur)",
-       "userlogin-noaccount": "Áttu ekki aðgang?",
+       "notloggedin": "Ekki skráð/ur inn",
+       "userlogin-noaccount": "Ertu ekki með aðgang?",
        "userlogin-joinproject": "Sameina {{SITENAME}}",
        "createaccount": "Nýskrá",
-       "userlogin-resetpassword-link": "Gleymdiru lykilorðinu þínu?",
+       "userlogin-resetpassword-link": "Gleymdirðu lykilorðinu þínu?",
        "userlogin-helplink2": "Hjálp við innskráningu",
        "userlogin-loggedin": "Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.\nNotaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.",
+       "userlogin-reauth": "Þú verður að skrá þig aftur inn til að sannreyna að þú sért {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Stofna annan aðgang",
        "createacct-emailrequired": "Netfang",
        "createacct-emailoptional": "Netfang (valfrjálst)",
-       "createacct-email-ph": "Skrifaðu niður netfangið þitt",
+       "createacct-email-ph": "Settu inn netfangið þitt",
        "createacct-another-email-ph": "Skrifaðu netfang",
        "createaccountmail": "Nota handahófsvalið bráðabirgðalykilorð og senda það á netfangið sem er tilgreint hér fyrir neðan",
        "createacct-realname": "Raunverulegt nafn (valfrjálst)",
        "createacct-reason-ph": "Afhverju ertu að búa til annan aðgang",
        "createacct-submit": "Búa til aðganginn",
        "createacct-another-submit": "Stofna aðgang",
+       "createacct-continue-submit": "Halda áfram við að búa til aðgang",
+       "createacct-another-continue-submit": "Halda áfram við að búa til aðgang",
        "createacct-benefit-heading": "{{SITENAME}} er skrifuð af fólki eins og þér.",
        "createacct-benefit-body1": "{{PLURAL:$1|breyting|breytingar}}",
        "createacct-benefit-body2": "{{PLURAL:$1|síða|síður}}",
        "emaildisabled": "Þessi síða getur ekki sent tölvupóst.",
        "accountcreated": "Aðgangur búinn til",
        "accountcreatedtext": "Notandaaðgangurinn fyrir [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|spjall]]) hefur verið búinn til.",
-       "createaccount-title": "Innskráningagerð á {{SITENAME}}",
+       "createaccount-title": "Gerð notandaaðgangs á {{SITENAME}}",
        "createaccount-text": "Einhver bjó til aðgang fyrir netfangið þitt á {{SITENAME}} ($4) undir nafninu „$2“, með lykilorðið „$3“.\nÞú ættir að skrá þig inn og breyta lykilorðinu núna.\n\nÞú getur hunsað þessi skilaboð, ef villa hefur átt sér stað.",
        "login-throttled": "Þér hefur of oft mistekist að skrá þig inn með þessu notandanafni.\nBíddu $1 áður en þú reynir aftur.",
        "login-abort-generic": "Innskráningin misheppnaðist - hætt var við hana.",
        "loginlanguagelabel": "Tungumál: $1",
        "suspicious-userlogout": "Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.",
        "createacct-another-realname-tip": "Alvöru nafn er valfrjálst. Ef þú kýst að gefa það upp, verður það notað til að gefa þér heiður af verkum þínum.",
-       "pt-login": "Innskrá",
-       "pt-login-button": "Innskrá",
+       "pt-login": "Skrá inn",
+       "pt-login-button": "Skrá inn",
+       "pt-login-continue-button": "Halda áfram við að skrá þig inn",
        "pt-createaccount": "Stofna aðgang",
        "pt-userlogout": "Útskrá",
        "php-mail-error-unknown": "Óþekkt villa í PHP mail() aðgerð.",
        "botpasswords-label-delete": "Eyða",
        "botpasswords-label-resetpassword": "Endurstilla lykilorðið",
        "resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
+       "resetpass_forbidden-reason": "Ekki er hægt að breyta lykilorðum: $1",
        "resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "resetpass-submit-loggedin": "Breyta lykilorði",
        "resetpass-submit-cancel": "Hætta við",
        "passwordreset-emailelement": "Notandanafn: \n$1\n\nBráðabirgðalykilorð: \n$2",
        "passwordreset-emailsentemail": "Ef þetta netfang er skráð fyrir aðganginum þínum þá hefur töluvpóstur verið sendur til að endursetja lykilorðið.",
        "passwordreset-emailsentusername": "Ef eitthvað netfang er skráð fyrir aðganginum þínum, þá mun verða sendur töluvpóstur til að endursetja lykilorðið.",
+       "passwordreset-invalidemail": "Ógilt tölvupóstfang",
        "changeemail": "Breyta eða fjarlægja netfang",
        "changeemail-header": "Fylltu út þetta eyðublað til að breyta netfanginu þínu. Ef þú vilt fjarlægja tengingu allra netfanga frá aðganginum þínum skildu þá netfangs reitinn eftir tóman.",
        "changeemail-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "showdiff": "Sýna breytingar",
        "blankarticle": "<strong>Viðvörun:</strong> Síðan sem þú ert að búa til er tóm.\nEf þú smellir aftur á \"$1\", verður síðan búin til án innihalds.",
        "anoneditwarning": "<strong>Viðvörun:</strong> Þú ert ekki innskráð(ur). Vistfang þitt verður sýnt opinberlega ef þú gerir einhverjar breytingar. Ef þú <strong>[$1 skráir þig inn]</strong> eða <strong>[$2 stofnar aðgang]</strong> munu breytingarnar þínar vera tengdar við notandanafn þitt, ásamt öðrum kostum.",
-       "anonpreviewwarning": "Þú ert ekki innskráð(ur). Vistfang þitt skráist í breytingaskrá síðunnar.",
+       "anonpreviewwarning": "<em>Þú ert ekki skráð(ur) inn. Vistfang þitt skráist í breytingaskrá síðunnar.</em>",
        "missingsummary": "'''Áminning:''' Þú hefur ekki skrifað breytingarágrip.\nEf þú smellir á Vista aftur, verður breyting þín vistuð án þess.",
        "missingcommenttext": "Gerðu svo vel og skrifaðu athugasemd fyrir neðan.",
        "missingcommentheader": "<strong>Áminning:</strong> Þú hefur ekki gefið upp umræðuefni.\nEf þú smellir á \"$1\" aftur, verður breyting þín vistuð án þess.",
        "summary-preview": "Forskoða breytingarágrip:",
-       "subject-preview": "Forskoðun umræðuefnis:",
+       "subject-preview": "Forskoðun viðfangsefnis:",
        "blockedtitle": "Notandi er bannaður",
        "blockedtext": "'''Notandanafn þitt eða vistfang hefur verið bannað.'''\n\nBannið var sett af $1.\nÁstæðan er eftirfarandi: ''$2''.\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\nÞú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|kjörstillingum þínum]] og að þér hafi ekki verið óheimilað það.\nNúverandi vistfang þitt er $3, og bannnúmerið er #$5.\nHafðu með allar þessar upplýsingar hér fyrir ofan í fyrirspurnum þínum.",
        "autoblockedtext": "Vistfang þitt hefur verið sjálfvirkt bannað því það var notað af öðrum notanda, sem var bannaður af $1.\nÁstæðan er eftirfarandi:\n\n:''$2''\n\n* Bannið hófst: $8\n* Banninu lýkur: $6\n* Sá sem banna átti: $7\n\nÞú getur haft samband við $1 eða annan [[{{MediaWiki:Grouppage-sysop}}|stjórnanda]] til að ræða bannið.\n\nAthugaðu að þú getur ekki notað „Senda þessum notanda tölvupóst“ aðgerðina nema gilt netfang sé skráð í [[Special:Preferences|kjörstillingum þínum]] og að þér hafi ekki verið óheimilað það.\n\nNúverandi vistfang þitt er $3, og bannnúmerið er #$5.\nHafðu með allar þessar upplýsingar hér fyrir ofan í fyrirspurnum þínum.",
        "nosuchsectiontitle": "Hluti ekki til",
        "nosuchsectiontext": "Þú reyndir að breyta hluta sem er ekki til.\nHlutinn gæti hafa verið fluttur til eða hent á meðan þú varst að skoða síðuna.",
        "loginreqtitle": "Innskráningar krafist",
-       "loginreqlink": "innskrá",
+       "loginreqlink": "skrá inn",
        "loginreqpagetext": "Þú þarft að $1 þig til að geta séð aðrar síður.",
        "accmailtitle": "Lykilorð sent.",
        "accmailtext": "Lykilorðið fyrir [[User talk:$1|$1]] hefur verið sent á $2. Hægt er að breyta því á síðunni ''[[Special:ChangePassword|breyta lykilorði]]'' þegar notandinn hefur skráð sig inn.",
        "readonlywarning": "<strong>AÐVÖRUN: Gagnagrunninum hefur verið læst til að unnt sé að framkvæma viðhaldsaðgerðir, svo þú getur ekki vistað breytingar þínar núna.</strong>\nÞú ættir að klippa og líma textann yfir í textaskjal til þess að geyma hann til seinni tíma.\n\nKerfisstjórinn sem læsti honum gaf þessa skýringu: $1",
        "protectedpagewarning": "'''Viðvörun: Þessari síðu hefur verið læst svo aðeins notendur með möppudýraréttindi geti breytt henni.'''\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
        "semiprotectedpagewarning": "'''Athugið''': Þessari síðu hefur verið læst þannig að aðeins innskráðir notendur geti breytt henni.\nSíðasta færsla síðunnar úr verndunarskrá er sýnd til skýringar:",
-       "cascadeprotectedwarning": "<strong>Viðvörun:</strong> Þessari síðu hefur verið læst svo aðeins möppudýr geta breytt henni, því hún er ítengd keðjuvörn eftirfarandi {{PLURAL:$1|síðu|síðna}}:",
+       "cascadeprotectedwarning": "<strong>Viðvörun:</strong> Þessari síðu hefur verið læst þannig að aðeins notendur með [[Special:ListGroupRights|sérstök réttindi]] geta breytt henni, því hún er ítengd keðjuvörn eftirfarandi {{PLURAL:$1|síðu|síðna}}:",
        "titleprotectedwarning": "''VIÐVÖRUN: Þessari síðu hefur verið læst svo aðeins [[Special:ListGroupRights|sérstakir notendur]] geta breytt henni.'''\nVerndunarskrá síðunnar er gefin fyrir neðan til tilvísunar.",
        "templatesused": "Sniðmát {{PLURAL:$1|notað|notuð}} á þessari síðu:",
        "templatesusedpreview": "Sniðmát {{PLURAL:$1|notað|notuð}} í forskoðuninni:",
        "permissionserrorstext": "Þú hefur ekki leyfi til að gera þetta, af eftirfarandi {{PLURAL:$1|ástæðu|ástæðum}}:",
        "permissionserrorstext-withaction": "Þú hefur ekki réttindi til að $2, af eftirfarandi {{PLURAL:$1|ástæðu|ástæðum}}:",
        "recreate-moveddeleted-warn": "'''Viðvörun: Þú ert að endurskapa síðu sem áður hefur verið eytt.'''\n\nAthuga skal hvort viðeigandi sé að gera þessa síðu.\nEyðingarskrá og flutningaskrá fyrir þessa síðu eru útvegaðar hér til þæginda:",
-       "moveddeleted-notice": "Þessari síðu hefur verið eytt.\nEyðingaskrá og flutningaskrá síðunnar eru gefnar fyrir neðan til tilvísunar.",
-       "moveddeleted-notice-recent": "Því miður var þessari síðu eytt nýlega (innan síðustu 24 tímana).\nEyðingar og færsluskráin fyrir síðuna eru gefnar hér fyrir neðan til glöggvunar.",
+       "moveddeleted-notice": "Þessari síðu hefur verið eytt.\nEyðinga-, verndunar- og flutningaskrá síðunnar eru gefnar fyrir neðan til tilvísunar.",
+       "moveddeleted-notice-recent": "Því miður var þessari síðu eytt nýlega (innan síðustu 24 klst).\nEyðingar-, verndunar- og færsluskrár fyrir síðuna eru gefnar hér fyrir neðan til glöggvunar.",
        "log-fulllog": "Skoða alla aðgerðaskrána",
        "edit-hook-aborted": "Breyting síðu stöðvuð af viðbótarkrók (extension hook).\nEngin skýring gefin.",
        "edit-gone-missing": "Gat ekki uppfært síðu.\nSvo virðist sem henni hafi verið eytt.",
        "search-file-match": "(passar við innihald skráa)",
        "search-suggest": "Varstu að leita að: $1",
        "search-rewritten": "Sýni niðurstöður $1. Leita í staðinn að $2.",
-       "search-interwiki-caption": "Systurverkefni",
+       "search-interwiki-caption": "Niðurstöður úr systurverkefnum",
        "search-interwiki-default": "Útkomur frá $1:",
        "search-interwiki-more": "(fleiri)",
+       "search-interwiki-more-results": "fleiri niðurstöður",
        "search-relatedarticle": "Tengt",
        "searchrelated": "tengt",
        "searchall": "öllum",
        "search-external": "Ytri leit",
        "searchdisabled": "{{SITENAME}}-leit er óvirk.\nÞú getur leitað í genum Google á meðan.\nAthugaðu að skrár þeirra yfir {{SITENAME}}-efni kunna að vera úreltar.",
        "search-error": "Villa kom upp við leit að: $1",
+       "search-warning": "Aðvörun kom upp við leit: $1",
        "preferences": "Kjörstillingar",
        "mypreferences": "Kjörstillingar",
        "prefs-edits": "Fjöldi breytinga:",
        "prefs-editwatchlist-clear": "Hreinsa vaktlista",
        "prefs-watchlist-days": "Fjöldi daga sem vaktlistinn nær yfir:",
        "prefs-watchlist-days-max": "Hámark $1 {{PLURAL:$1|dagur|dagar}}",
-       "prefs-watchlist-edits": "Fjöldi breytinga sem vaktlistinn nær yfir:",
+       "prefs-watchlist-edits": "Hámarksfjöldi breytinga sem birta skal í vaktlista:",
        "prefs-watchlist-edits-max": "Hámarkstala: 1000",
        "prefs-watchlist-token": "Tóki vaktlistans:",
        "prefs-misc": "Aðrar stillingar",
        "username": "{{Gender:$1|Notandanafn}}:",
        "prefs-memberingroups": "{{GENDER:$2|Meðlimur}} {{PLURAL:$1|hóps|hópa}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 (til $2)",
        "prefs-registration": "Skráningartími:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "Fullt nafn:",
        "prefs-diffs": "Breytingar",
        "prefs-help-prefershttps": "Þessi stilling tekur gildi í næsta skiptið sem þú skráir þig inn.",
        "prefswarning-warning": "Þú hefur gert breytingar á kjörstillingum þínum sem ekki er búið að vista.\nEf þú ferð af þessari síðu án þess að smella á \"$1\" verða kjörstillingar þínar ekki uppfærðar.",
-       "userrights": "Breyta notandaréttindum",
+       "userrights": "Notandaréttindi",
        "userrights-lookup-user": "Velja notanda",
        "userrights-user-editname": "Skráðu notandanafn:",
        "editusergroup": "Hlaða inn notanda hópum",
        "editinguser": "Breyti réttindum {{GENDER:$1|notandans}} <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Breyta notandahópum",
+       "userrights-editusergroup": "Breyta hópum {{GENDER:$1|notanda}}",
+       "userrights-viewusergroup": "Skoða hópa {{GENDER:$1|notanda}}",
        "saveusergroups": "Vista {{GENDER:$1|notanda}} hópa",
        "userrights-groupsmember": "Meðlimur:",
        "userrights-groupsmember-auto": "Sjálfvirkt bætt við sem meðlimur í:",
        "userrights-groupsmember-type": "$1",
-       "userrights-groups-help": "Þú getur breytt hópunum sem að þessi notandi er í.\n* Valinn reitur þýðir að notandinn er í hópnum.\n* Óvalinn reitur þýðir að notandinn er ekki í hópnum.\n* Stjarnan (*) þýðir að þú getur ekki fært hópinn eftir að þú hefur breytt honum, eða öfugt.",
+       "userrights-groups-help": "Þú getur breytt hópunum sem að þessi notandi er í.\n* Valinn reitur þýðir að notandinn er í hópnum.\n* Óvalinn reitur þýðir að notandinn er ekki í hópnum.\n* Stjarnan (*) þýðir að þú getur ekki fært hópinn eftir að þú hefur breytt honum, eða öfugt.\n* Myllumerki (#) þýðir að þú getur flutt til baka úreldingartíma á þátttöku í þessum hópi; þú getur ekki lengt hann.",
        "userrights-reason": "Ástæða:",
        "userrights-no-interwiki": "Þú hefur ekki leyfi til að breyta notandaréttindum á öðrum wiki-síðum.",
        "userrights-nodatabase": "Gagnagrunnurinn $1 er ekki til eða ekki staðbundinn.",
        "userrights-changeable-col": "Hópar sem þú getur breytt",
        "userrights-unchangeable-col": "Hópar sem þú getur ekki breytt",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "Rennur út $1",
+       "userrights-expiry-none": "Rennur ekki út",
+       "userrights-expiry": "Rennur út:",
+       "userrights-expiry-existing": "Núverandi gildislok: $3, $2",
+       "userrights-expiry-othertime": "Annar tími:",
+       "userrights-expiry-options": "1 dagur:1 dagur,1 vika:1 vika,1 mánuður:1 mánuður,3 mánuðir:3 mánuðir,6 mánuðir:6 mánuðir,1 ár:1 ár",
        "userrights-conflict": "Árekstur í að breyta notandaréttindum! Skoðaðu þetta aftur og staðfestu breytingar þínar.",
        "group": "Hópur:",
        "group-user": "Notendur",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (sjá einng [[Special:NewPages|lista yfir nýjar síður]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Sýna",
+       "rcfilters-tag-remove": "Fjarlægja '$1'",
+       "rcfilters-legend-heading": "<strong>Listi yfir styttingar</strong>",
+       "rcfilters-grouping-title": "Hópun",
+       "rcfilters-activefilters": "Virkar síur",
+       "rcfilters-advancedfilters": "Ítarlegar síur",
+       "rcfilters-limit-title": "Breytingar sem á að sýna",
+       "rcfilters-limit-shownum": "Birta síðustu {{PLURAL:$1|breytingu|$1 breytingar}}",
+       "rcfilters-days-title": "Síðustu daga",
+       "rcfilters-hours-title": "Síðustu klukkutíma",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|dag|daga}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|klukkustund|klukkustundir}}",
+       "rcfilters-highlighted-filters-list": "Áherslulitað: $1",
+       "rcfilters-quickfilters": "Vistaðar síur",
+       "rcfilters-savedqueries-defaultlabel": "Vistaðar síur",
+       "rcfilters-savedqueries-rename": "Endurnefna",
+       "rcfilters-savedqueries-setdefault": "Setja sem sjálfgefið",
+       "rcfilters-savedqueries-unsetdefault": "Fjarlægja sjálfgefið",
+       "rcfilters-savedqueries-remove": "Fjarlægja",
+       "rcfilters-savedqueries-new-name-label": "Heiti",
+       "rcfilters-savedqueries-new-name-placeholder": "Lýstu markmiði síunnar",
+       "rcfilters-savedqueries-apply-label": "Búa til síu",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Búa til sjálfgefna síu",
+       "rcfilters-savedqueries-cancel-label": "Hætta við",
+       "rcfilters-clear-all-filters": "Hreinsa allar síur",
+       "rcfilters-show-new-changes": "Skoða nýjustu breytingarnar",
+       "rcfilters-filterlist-title": "Síur",
+       "rcfilters-highlightbutton-title": "Áherslulita niðurstöður",
+       "rcfilters-highlightmenu-title": "Veldu lit",
+       "rcfilters-filter-editsbyself-label": "Breytingar eftir þig",
+       "rcfilters-filter-editsbyself-description": "Þín eigin framlög.",
+       "rcfilters-filter-editsbyother-label": "Breytingar eftir aðra",
+       "rcfilters-filter-editsbyother-description": "Allir breytingar nema þínar eigin.",
+       "rcfilters-filtergroup-userExpLevel": "Skráning notanda og reynsla",
+       "rcfilters-filter-user-experience-level-registered-label": "Skráð/ur",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Óskráður",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Byrjendur",
+       "rcfilters-filter-user-experience-level-learner-label": "Námshestar",
+       "rcfilters-filter-user-experience-level-experienced-label": "Vanir notendur",
+       "rcfilters-filtergroup-automated": "Sjálfvirk framlög",
+       "rcfilters-filter-bots-label": "Vélmenni",
+       "rcfilters-filter-humans-label": "Manneskja (ekki vélmenni)",
+       "rcfilters-filtergroup-reviewstatus": "Staða yfirferðar",
+       "rcfilters-filter-patrolled-label": "Vaktað",
+       "rcfilters-filter-minor-label": "Minniháttar breytingar",
+       "rcfilters-filter-watchlist-watched-label": "Á vaktlista",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "rcshowhideminor": "$1 minniháttar breytingar",
        "rcshowhideliu": "$1 skráða notendur",
        "rcshowhideliu-show": "Sýna",
        "rcshowhideliu-hide": "Fela",
-       "rcshowhideanons": "$1 óinnskráða notendur",
+       "rcshowhideanons": "$1 nafnlausa notendur",
        "rcshowhideanons-show": "Sýna",
        "rcshowhideanons-hide": "Fela",
        "rcshowhidepatr": "$1 vaktaðar breytingar",
        "uploadbtn": "Hlaða inn skrá",
        "reuploaddesc": "Hætta við og fara aftur á innhleðsluformið.",
        "upload-tryagain": "Sendu breytta myndlýsingu",
-       "uploadnologin": "Óinnskráð(ur)",
+       "uploadnologin": "Ekki skráð/ur inn",
        "uploadnologintext": "Þú verður $1 til að hlaða inn skrám.",
        "upload_directory_missing": "Innhleðslumappan ($1) er týnd og vefþjónninn gat ekki búið hana til.",
        "upload_directory_read_only": "Mistókst að skrifa í innhleðslumöppu ($1) á vefþjóninum.",
        "upload-copy-upload-invalid-domain": "Lokað er fyrir afritun skráa frá öðrum vefþjónum á þessu vefsvæði.",
        "upload-dialog-title": "Hlaða inn skrá",
        "upload-dialog-button-cancel": "Hætta við",
+       "upload-dialog-button-back": "Til baka",
        "upload-dialog-button-done": "Lokið",
        "upload-dialog-button-save": "Vista",
        "upload-dialog-button-upload": "Hlaða inn",
        "uploadstash-badtoken": "Þessi aðgerð misheppnaðist, kannski hafa réttindi þín til breytinga runnið út.\nReyndu aftur.",
        "uploadstash-errclear": "Tæming listans mistókst.",
        "uploadstash-refresh": "Endurhlaða listann",
+       "uploadstash-thumbnail": "skoða smámynd",
        "invalid-chunk-offset": "Ógild raðbreyting bunka",
        "img-auth-accessdenied": "Aðgangur óheimill",
        "img-auth-nopathinfo": "PATH_INFO vantar.\nBiðlarinn þínn er ekki stilltur til að gefa upp þessar upplýsingar.\nÞær mega vera CGI-byggðar og mega ekki styðja img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "apisandbox-submit-invalid-fields-title": "Sumir reitir eru ógildir",
        "apisandbox-results": "Niðurstöður",
        "apisandbox-alert-field": "Gildi þessa reits er ekki leyfilegt.",
+       "apisandbox-continue": "Halda áfram",
+       "apisandbox-continue-clear": "Hreinsa",
        "booksources": "Bókaleit",
        "booksources-search-legend": "Leita að bókaheimildum",
        "booksources-isbn": "ISBN:",
        "trackingcategories-nodesc": "Enginn lýsing tiltæk.",
        "trackingcategories-disabled": "Flokkurinn er óvirkur",
        "mailnologin": "Ekkert netfang til að senda á",
-       "mailnologintext": "Þú verður að vera [[Special:UserLogin|innskráð(ur)]] auk þess að hafa gilt netfang í [[Special:Preferences|stillingunum]] þínum til að senda tölvupóst til annara notenda.",
+       "mailnologintext": "Þú verður að vera [[Special:UserLogin|skráð(ur) inn]] auk þess að hafa gilt netfang í [[Special:Preferences|stillingunum]] þínum til að senda tölvupóst til annara notenda.",
        "emailuser": "Senda þessum notanda tölvupóst",
        "emailuser-title-target": "Sendu þessum {{GENDER:$1|notanda}} tölvupóst",
        "emailuser-title-notarget": "Senda tölvupóst",
        "emailccsubject": "Afrit af skilaboðinu þínu til $1: $2",
        "emailsent": "Sending tókst",
        "emailsenttext": "Skilaboðin þín hafa verið send.",
-       "emailuserfooter": "Þessi tölvupóstur var {{GENDER:$1|sendur}} af $1 til {{GENDER:$2|$2}} með möguleikanum \"{{int:emailuser}}\" á {{SITENAME}}. Netfangið {{GENDER:$2|þitt}} verður sent {{GENDER:$1|upphaflega sendandanum}}, sem uppljóstrar netfangi {{GENDER:$2|þínu}} til hans.",
+       "emailuserfooter": "Þessi tölvupóstur var {{GENDER:$1|sendur}} af $1 til {{GENDER:$2|$2}} með möguleikanum \"{{int:emailuser}}\" á {{SITENAME}}.Ef {{GENDER:$2|þú}} svarar þessum pósti, verður netfangið {{GENDER:$2|þitt}} sent {{GENDER:$1|upphaflega sendandanum}}, sem uppljóstrar netfangi {{GENDER:$2|þínu}} til  {{GENDER:$1|þeirra}}.",
        "usermessage-summary": "Skil eftir kerfismeldingu.",
        "usermessage-editor": "Skilaboðakerfi",
        "watchlist": "Vaktlistinn",
        "watchlistfor2": "Eftir $1 $2",
        "nowatchlist": "Vaktlistinn er tómur.",
        "watchlistanontext": "Skráðu þig til að skoða eða breyta hlutum á vaktlistanum þínum.",
-       "watchnologin": "Óinnskráð(ur)",
+       "watchnologin": "Ekki skráð/ur inn",
        "addwatch": "Bæta á vaktlistann",
        "addedwatchtext": "Síðunni „[[:$1]]“ og spjallsíðu hennar hafa verið bætt á [[Special:Watchlist|vaktlistann]] þinn.",
        "addedwatchtext-short": "Síðunni  \"$1\" hefur verið bætt við á vaktlistann þinn.",
        "unwatchthispage": "Hætta vöktun",
        "notanarticle": "Ekki efnisleg síða",
        "notvisiblerev": "Síðasta breyting eftir annan notanda hefur verið eytt.",
-       "watchlist-details": "{{PLURAL:$1|$1 síða|$1 síður}} á vaktlistanum þínum, fyrir utan spjallsíður.",
+       "watchlist-details": "{{PLURAL:$1|$1 síða|$1 síður}} á vaktlistanum þínum (fyrir utan spjallsíður).",
        "wlheader-enotif": "Tilkynning með tölvupósti er virk.",
        "wlheader-showupdated": "Síðum sem hefur verið breytt síðan þú skoðaðir þær síðast eru '''feitletraðar'''.",
        "wlnote": "Hér fyrir neðan {{PLURAL:$1|er síðasta <strong>$1</strong> breyting|eru síðustu <strong>$1</strong> breytingar}} {{PLURAL:$2|síðasta <strong>$2</strong> klukkutímann|síðustu <strong>$2</strong> klukkutímana}}, frá $3, $4.",
        "enotif_body_intro_moved": "Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið færð $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.",
        "enotif_body_intro_restored": "Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið endurvakin $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.",
        "enotif_body_intro_changed": "Síðan „$1” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið breytt $PAGEEDITDATE af {{gender:$2|$2}}. Þetta er tengill á síðuna: $3.",
-       "enotif_lastvisited": "Heimsóttu eftirfarandi tengil til að sjá allar breytingar síðan \nþú heimsóttir síðuna síðast:\n  $1",
-       "enotif_lastdiff": "Einnig getur þú heimsótt eftirfarandi tengil til að skoða þessa breytingu:\n  $1",
+       "enotif_lastvisited": "Til að sjá allar breytingar síðan þú heimsóttir síðuna síðast, skoðaðu $1",
+       "enotif_lastdiff": "Til að sjá þessa breytingu, skoðaðu $1",
        "enotif_anon_editor": "ónefndum notanda $1",
        "enotif_body": "Kæri $WATCHINGUSERNAME,\n\n$PAGEINTRO\n$NEWPAGE\n\n$PAGEEDITOR skildi eftir eftirfarandi breytingarágrip: $PAGESUMMARY $PAGEMINOREDIT\n\nTil þess að hafa samband við $PAGEEDITOR, smelltu á $PAGEEDITOR_WIKI eða sentu tölvupóst á $PAGEEDITOR_EMAIL\n\nAthugaðu að frekari aðgerðir á $PAGETITLE leiða\nekki af sér fleiri tilkynningar fyrr en þú hefur heimsótt síðuna á meðan þú ert skráð/ur inn. Þú getur einnig endursett tilkynningar fyrir allar þær síður sem þú fylgist með.\n\nKveðja,\n{{SITENAME}}\n\n--\n\nTil þess að breyta stillingum um hvenær þú færð sendar tilkynningar, smelltu á:\n\n{{canonicalurl:{{#special:Preferences}}}}\n\n\nTil þess að hætta að fylgjast með „$PAGETITLE”, smelltu á:\n\n$UNWATCHURL\n\nFrekari hjálp er að finna á $HELPPAGE.",
+       "enotif_minoredit": "Þetta er minniháttar breyting",
        "created": "búin til",
        "changed": "breytt",
        "deletepage": "Eyða",
        "editcomment": "Beytingaágripið var: <em>$1</em>.",
        "revertpage": "Tók aftur breytingar [[Special:Contributions/$2|$2]] ([[User talk:$2|spjall]]), breytt til síðustu útgáfu [[User:$1|$1]]",
        "revertpage-nouser": "Tók aftur breytingar falins notanda til síðustu útgáfu {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "Tók til baka breytingar eftir $1; núverandi $2.",
+       "rollback-success": "Tók til baka breytingar eftir {{GENDER:$3|$1}};\nsetti yfir á síðustu útgáfu eftir {{GENDER:$4|$2}}.",
        "sessionfailure-title": "Mistök í setu",
-       "sessionfailure": "Líklega er vandamál með innskráningar setuna þína;\nhætt hefur verið við þessa aðgerð sem vörn gegn mögulegu samskiptaráni setunar.\nFarðu aftur á fyrri síðu, endurhladdu hana og reyndu aftur.",
+       "sessionfailure": "Líklega er vandamál með innskráningarsetuna þína;\nhætt hefur verið við þessa aðgerð sem vörn gegn mögulegu samskiptaráni setunar.\nFarðu aftur á fyrri síðu, endurhladdu hana og reyndu aftur.",
        "changecontentmodel-title-label": "Titill síðu",
        "changecontentmodel-reason-label": "Ástæða:",
+       "changecontentmodel-submit": "Breyta",
        "logentry-contentmodel-change-revertlink": "taka aftur",
        "logentry-contentmodel-change-revert": "taka aftur",
        "protectlogpage": "Verndunarskrá",
        "sp-contributions-uploads": "innsendingar",
        "sp-contributions-logs": "aðgerðaskrá",
        "sp-contributions-talk": "spjall",
-       "sp-contributions-userrights": "Breyta notandaréttindum",
+       "sp-contributions-userrights": "Breyta {{GENDER:$1|notandaréttindum}}",
        "sp-contributions-blocked-notice": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "sp-contributions-blocked-notice-anon": "Þetta vistfang er í banni.\nSíðasta færsla vistfangsins úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "sp-contributions-search": "Leita að framlögum",
        "ipbexpiry": "Bannið rennur út:",
        "ipbreason": "Ástæða:",
        "ipbreason-dropdown": "* Algengar bannástæður\n** Setur inn rangar upplýsingar\n** Fjarlægir efni af síðum\n** Setur inn rusltengla á utanaðkomandi síður\n** Setur inn vitleysu/þvaður á síður\n** Yfirþyrmandi framkoma/áreitni\n** Misnotkun á fjölda notandanafna\n** Óásættanlegt notandanafn",
-       "ipb-hardblock": "Banna innskráðum notendum að breyta frá þessu vistfangi.",
+       "ipb-hardblock": "Banna innskráðum notendum að breyta frá þessu IP-vistfangi.",
        "ipbcreateaccount": "Banna nýskráningu notandanafns",
        "ipbemailban": "Banna notanda að senda tölvupóst",
        "ipbenableautoblock": "Banna síðasta vistfang notanda sjálfkrafa; og þau vistföng sem viðkomandi notar til að breyta síðum",
        "ipb-unblock": "Afbanna notanda eða vistfang",
        "ipb-blocklist": "Sjá núverandi bönn",
        "ipb-blocklist-contribs": "Framlög fyrir {{GENDER:$1|$1}}",
+       "ipb-blocklist-duration-left": "$1 eftir",
        "unblockip": "Afbanna notanda",
        "unblockiptext": "Endurvekja skrifréttindi bannaðra notenda eða vistfanga.",
        "ipusubmit": "Afbanna",
        "unblocked-id": "Bann $1 hefur verið fjarlægt",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] hefur verið afbannaður.",
        "blocklist": "Bannaðir notendur og vistföng",
+       "autoblocklist-submit": "Leita",
        "ipblocklist": "Bannaðir notendur og vistföng",
        "ipblocklist-legend": "Finna bannaðan notanda",
        "blocklist-userblocks": "Fela notendabönn",
        "movepagetalktext": "Ef þú hakar við þennan reit mun viðeigandi spjallsíða vera færð sjálfkrafa á nýja titilinn, nema að spjallsíða sem er ekki tóm sé þegar til staðar.\n\nÍ því tilfelli þarft þú að færa eða sameina síðuna handvirkt ef þess er óskað.",
        "moveuserpage-warning": "<strong>Viðvörun:</strong> Þú ert í þann mund að færa notandasíðu. Athugaðu aðeins síðan verður færð og notandanafni hans verður <em>ekki</em> breytt.",
        "movecategorypage-warning": "<strong>Viðvörun:</strong> Þú ert í þann mund að færa flokkssíðu. Athugaðu aðeins síðan verður færð og allar síður í gamla flokknum verða <em>ekki</em> endurflokkaðar í nýja flokkinn.",
-       "movenologintext": "Þú verður að vera [[Special:UserLogin|innskráð(ur)]] til að geta fært síður.",
+       "movenologintext": "Þú verður að vera [[Special:UserLogin|skráð(ur) inn]] til að geta fært síður.",
        "movenotallowed": "Þú hefur ekki leyfi til að færa síður.",
        "movenotallowedfile": "Þú hefur ekki leyfi til að færa skrár.",
        "cant-move-user-page": "Þú hefur ekki leyfi til að færa notandasíðu (fyrir utan undirsíður).",
        "import-nonewrevisions": "Engar breytingar voru fluttar inn (þær voru allar annaðhvort þegar til eða sleppt vegna villna).",
        "xml-error-string": "$1 í línu $2, dálki $3 ($4 bæt): $5",
        "import-upload": "Hlaða inn XML-gögnum",
-       "import-token-mismatch": "Týnd setugögn.\n\nÞú hefur kannski verið skráð/ur út. <strong>Athugaðu hvort þú sért ennþá skráð/ur inn og reyndu aftur</strong>.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og gakktu úr skugga um að vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
+       "import-token-mismatch": "Týnd setugögn.\n\nÞú hefur kannski verið skráð/ur út. '''Athugaðu hvort þú sért ennþá skráð/ur inn og reyndu aftur'''.\nEf það virkar ekki, reyndu að [[Special:UserLogout|skrá þig út]], skrá þig aftur inn og gakktu úr skugga um að vafrinn þinn leyfi vefkökur frá þessu vefsvæði.",
        "import-invalid-interwiki": "Get ekki flutt inn frá þessum wiki.",
        "import-error-edit": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að breyta henni.",
        "import-error-create": "Síðan \"$1\" var ekki flutt inn því þú hefur ekki réttindi til að stofna hana.",
        "tooltip-ca-nstab-category": "Sýna efnisflokkasíðuna",
        "tooltip-minoredit": "Merkja þessa breytingu sem minniháttar",
        "tooltip-save": "Vista breytingarnar",
+       "tooltip-publish": "Gefa út breytingarnar þínar",
        "tooltip-preview": "Forskoða breytingarnar þínar. Gerðu þetta áður en þú vistar.",
        "tooltip-diff": "Sýna hvaða breytingar þú gerðir á textanum.",
        "tooltip-compareselectedversions": "Sjá breytingarnar á þessari grein á milli útgáfanna sem þú valdir.",
        "pageinfo-length": "Lengd síðunnar (í bætum)",
        "pageinfo-article-id": "Einkennisnúmer síðunnar",
        "pageinfo-language": "Tungumál síðunnar",
+       "pageinfo-language-change": "breyta",
+       "pageinfo-content-model-change": "breyta",
        "pageinfo-robot-policy": "Attriðaskráning af vélmennum",
        "pageinfo-robot-index": "Heimilað",
        "pageinfo-robot-noindex": "Ekki heimilað",
        "pageinfo-category-pages": "Fjöldi síðna",
        "pageinfo-category-subcats": "Fjöldi undirflokka",
        "pageinfo-category-files": "Fjöldi skráa",
+       "pageinfo-user-id": "Notandanúmer",
        "markaspatrolleddiff": "Merkja sem yfirfarið",
        "markaspatrolledtext": "Merkja þessa síðu sem yfirfarna",
        "markaspatrolledtext-file": "Merkja þessa útgáfu skrár sem yfirfarna",
        "patrol-log-header": "Þetta er skrá yfir yfirfarnar breytingar.",
        "log-show-hide-patrol": "$1 listi yfir yfirfarnar síður",
        "log-show-hide-tag": "$1 merkjaannáll",
+       "confirm-markpatrolled-button": "Í lagi",
        "deletedrevision": "Eyddi gamla útgáfu $1",
        "filedeleteerror-short": "Villa við eyðingu: $1",
        "filedeleteerror-long": "Það kom upp villa við eyðingu skrárinnar: $1",
        "confirm-watch-top": "Bæta þessari síðu á vaktlistann þinn?",
        "confirm-unwatch-button": "Í lagi",
        "confirm-unwatch-top": "Fjarlægja þessa síðu af vaktlistanum þínum?",
+       "confirm-rollback-button": "Í lagi",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "fileduplicatesearch-noresults": "Mistókst að finna skrána \"$1\"",
        "specialpages": "Kerfissíður",
        "specialpages-note-top": "Fyrirsögn",
-       "specialpages-note": "* Venjulegar kerfissíður.\n* <span class=\"mw-specialpagerestricted\">Kerfissíður með takmörkuðum aðgangi.</span>",
        "specialpages-group-maintenance": "Viðhaldsskýrslur",
        "specialpages-group-other": "Aðrar kerfissíður",
-       "specialpages-group-login": "Innskrá / Búa til aðgang",
+       "specialpages-group-login": "Skrá inn / Búa til aðgang",
        "specialpages-group-changes": "Nýlegar breytingar og skrár",
        "specialpages-group-media": "Skýrslur um gagnamiðla og innsendingar",
        "specialpages-group-users": "Notendur og réttindi",
        "tags-create-reason": "Ástæða:",
        "tags-create-submit": "Stofna",
        "tags-create-no-name": "Þú verður að gefa upp heiti merkisins.",
-       "tags-create-invalid-chars": "Heiti merkja mega ekki innihalda kommur (<code>,</code>) eða öfug skástrik (<code>/</code>).",
+       "tags-create-invalid-chars": "Heiti merkja mega ekki innihalda kommur (<code>,</code>), pípur (<code>|</code>), eða öfug skástrik (<code>/</code>).",
        "tags-create-invalid-title-chars": "Heiti merkja mega ekki innihalda stafi sem ekki má nota í síðutitlum.",
        "tags-create-already-exists": "Merkið \"$1\" er nú þegar til.",
        "tags-create-warnings-below": "Viltu halda áfram við að búa til merkið?",
        "tags-edit-chosen-placeholder": "Veldu einhver merki",
        "tags-edit-chosen-no-results": "Engin merki fundust sem samsvara",
        "tags-edit-reason": "Ástæða:",
+       "tags-edit-success": "Breytingarnar voru framkvæmdar.",
        "tags-edit-nooldid-title": "Ógild markútgáfa",
        "tags-edit-none-selected": "Vinsamlega veldu a.m.k. eitt merki til að bæta við eða fjarlægja.",
        "comparepages": "Bera saman síður",
        "compare-invalid-title": "Titillinn sem þú gafst upp er ógildur.",
        "compare-title-not-exists": "Umbeðinn titill er ekki til.",
        "compare-revision-not-exists": "Umbeðin útgáfa er ekki til.",
+       "diff-form": "Mismunur",
        "dberr-problems": "Því miður!Tæknilegir örðugleikar eru á þessari síðu.",
        "dberr-again": "Reyndu að bíða í nokkrar mínútur og endurhlaða síðan síðuna.",
        "dberr-info": "(Mistókst að fá aðgang að gagnaþjóni: $1)",
        "htmlform-cloner-create": "Bæta við meiru",
        "htmlform-cloner-delete": "Fjarlægja",
        "htmlform-cloner-required": "Það þarf allavega eitt gildi.",
+       "htmlform-date-placeholder": "ÁÁÁÁ-MM-DD",
+       "htmlform-time-placeholder": "KK:MM:SS",
+       "htmlform-datetime-placeholder": "ÁÁÁÁ-MM-DD KK:MM:SS",
        "htmlform-title-badnamespace": "[[:$1]] er ekki í \"{{ns:$2}}\" nafnrýminu.",
        "htmlform-title-not-creatable": "\"$1\" er ekki hægt að nota við að búa til titil á síðu",
        "htmlform-title-not-exists": "$1 er ekki til",
        "htmlform-user-not-exists": "<strong>$1</strong> er ekki til.",
        "htmlform-user-not-valid": "<strong>$1</strong> er ekki gilt notandanafn.",
        "logentry-delete-delete": "$1 {{GENDER:$2|eyddi}} síðunni $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|endurvakti}} $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|endurvakti}} síðu $3 ($4)",
        "logentry-delete-event": "$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|færslu|$5 færslna}} á $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|breytti}} sýnileika {{PLURAL:$5|útgáfu|$5 útgáfna}} á $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|breytti}} sýnileika færslna á $3",
        "api-error-emptypage": "Stofnun nýrra, tómra síðna er óheimil.",
        "api-error-publishfailed": "Innri villa: Vefþjónninn gat ekki gefið út bráðabirgðaskrá.",
        "api-error-stashfailed": "Innri villa: Vefþjónninn gat ekki geymt bráðabirgðaskrá.",
-       "api-error-unknown-warning": "Óþekkt viðvörun: $1",
+       "api-error-unknown-warning": "Óþekkt viðvörun: \"$1\".",
        "api-error-unknownerror": "Óþekkt villa: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|sekúnda|sekúndur}}",
        "duration-minutes": "$1 {{PLURAL:$1|mínúta|mínútur}}",
index b3a3fd6..6d7992b 100644 (file)
        "rcfilters-view-namespaces-tooltip": "Filtra risultati per namespace",
        "rcfilters-view-tags-tooltip": "Filtra risultati per etichette di modifica",
        "rcfilters-view-return-to-default-tooltip": "Torna al menu filtri principale",
-       "rcfilters-watchlist-editWatchlist-button": "Modifica il tuo elenco di pagine osservate",
+       "rcfilters-watchlist-edit-watchlist-button": "Modifica il tuo elenco di pagine osservate",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfromreset": "Reimposta la selezione della data",
        "rclistfrom": "Mostra le nuove modifiche a partire daː $2, $3",
index 5c9498a..7991e23 100644 (file)
        "unwatchthispage": "ウォッチをやめる",
        "notanarticle": "記事ではありません",
        "notvisiblerev": "別の利用者による最終版は削除されました",
-       "watchlist-details": "ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\81¯ {{PLURAL:$1|$1 ã\83\9aã\83¼ã\82¸}}ã\81\8cç\99»é\8c²ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99 (ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\92é\99¤ã\81\8f)。",
+       "watchlist-details": "ã\82¦ã\82©ã\83\83ã\83\81ã\83ªã\82¹ã\83\88ã\81«ã\81¯ {{PLURAL:$1|$1 ã\83\9aã\83¼ã\82¸}}ã\81\8cç\99»é\8c²ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99 (ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\82å\90«ã\82\80)。",
        "wlheader-enotif": "メール通知が有効になっています。",
        "wlheader-showupdated": "最終訪問以降に変更されたページは、<strong>太字</strong>で表示されます。",
        "wlnote": "$3 $4 までの{{PLURAL:$2|<strong>$2</strong>時間}}になされた{{PLURAL:$1|<strong>$1</strong>件の変更}}は以下の通りです。",
index d5bd1ab..f4e291f 100644 (file)
        "notextmatches": "ulac ayen yecban azwel n usebter",
        "prevn": "{{PLURAL:$1|$1}} ssabeq",
        "nextn": "{{PLURAL:$1|$1}} ameḍfir",
+       "prev-page": "Asebter yezrin",
+       "next-page": "Asebter d-iteddun",
        "prevn-title": "$1 {{PLURAL:$1|agmud n uqbel|igmad n uqbel}}",
        "nextn-title": "$1 {{PLURAL:$1|agmud n sakin|igmad n sakin}}",
        "shown-title": "Beqqeḍ $1 {{PLURAL:$1|agmud|igmad}} s usebter",
        "search-result-category-size": "$1 {{PLURAL:$1|amseqdac|imseqdacen}} $2 ({{PLURAL:$2|adu-taggayt|adu-tiggayin}}, $3 {{PLURAL:$3|afaylu|ifuyla}})",
        "search-redirect": "(awelleh seg $1)",
        "search-section": "(tigezmi $1)",
+       "search-category": "(taggayt $1)",
        "search-file-match": "(yzega i ugbur n ufaylu)",
        "search-suggest": "D awal $1 i tnadiḍ ?",
-       "search-interwiki-caption": "Isenfaren atmaten",
-       "search-interwiki-default": "Igemmaḍ ɣef $1 :",
+       "search-rewritten": "Igmaḍ yettwaseknen i $1. Anadi n $2 deg umḍiq-is.",
+       "search-interwiki-caption": "Igmaḍ n isenfaṛen atmaten",
+       "search-interwiki-default": "Igmaḍ si $1:",
        "search-interwiki-more": "(ugar)",
+       "search-interwiki-more-results": "ugar n igmaḍ",
        "search-relatedarticle": "Amassaɣ",
        "searchrelated": "ineqqes",
        "searchall": "akk",
        "powersearch-togglelabel": "Ɛellem :",
        "powersearch-toggleall": "Akkw",
        "powersearch-togglenone": "Ulac",
+       "powersearch-remember": "Cfu ɣef ufran n yinadiyen d-iteddun",
        "search-external": "Anadi yeffɣen",
        "searchdisabled": "Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meɛna ur tettuḍ ara, tasmult n google taqdimt.",
        "search-error": "Tella tuccḍa deg unadi n : $1",
+       "search-warning": "Alɣu yettwammel degu unadi n: $1",
        "preferences": "Ismenyifen",
        "mypreferences": "Ismenyifen",
        "prefs-edits": "Amḍan n ibeddlilen :",
        "prefs-personal": "Profile n wemseqdac",
        "prefs-rc": "Ibeddilen imaynuten",
        "prefs-watchlist": "Tabdart n uḍfaṛ",
+       "prefs-editwatchlist": "Ẓreg tabdart n uḍfaṛ",
+       "prefs-editwatchlist-label": "Ẓreg inekcam ɣef tedbart n uḍfaṛ:",
+       "prefs-editwatchlist-edit": "Wali sakin kkes izwal n tebdart-ik n uḍfaṛ",
+       "prefs-editwatchlist-raw": "Ẓreg tabdart n uḍfaṛ deg uskar arewway",
+       "prefs-editwatchlist-clear": "Sfeḍ tabdart-ik n uḍfaṛ",
        "prefs-watchlist-days": "Amḍan n ussan i ubeqqeḍ deg umuɣ n uɛassi :",
        "prefs-watchlist-days-max": "Afellay $1 {{PLURAL:$1|ass|ussan}}",
        "prefs-watchlist-edits": "Amḍan afellay n ubeddel ara d-ibabnen deg tebdart n uḍfaṛ:",
        "prefs-watchlist-token": "Tiddest  umuɣ n uɛassi :",
        "prefs-misc": "Ismenyifien-nniḍen",
        "prefs-resetpass": "Beddel awal n uɛaddi",
-       "prefs-changeemail": "Beddel tansa n e-mail",
+       "prefs-changeemail": "Beddel neɣ kkes tansan n yimayl",
        "prefs-setemail": "Sbadu yiwet tansa e-mail",
        "prefs-email": "Tixtiṛiyin n tira",
        "prefs-rendering": "Tummant",
        "restoreprefs": "Err akkw iɣewwaren s lexṣas (deg akkw tigezmiwin)",
        "prefs-editing": "Abedddil",
        "searchresultshead": "Anadi",
-       "stub-threshold": "Talast timinegt i <a href=\"#\" class=\"stub\">izdayen ɣer ibegzan</a> (itamḍanen) :",
+       "stub-threshold": "Talast i umasal n iseɣwan n isumar ($1) :",
+       "stub-threshold-sample-link": "amedya",
        "stub-threshold-disabled": "Yensa",
        "recentchangesdays": "Amḍan n ussan an beqqeḍ deg ibeddilen ineggura.",
        "recentchangesdays-max": "Afellay $1 {{PLURAL:$1|ass|ussan}}",
        "prefs-help-recentchangescount": "Wagi yesɛa deg-es ibeddilen ineggura, isebtar n umezruy d iɣmisen.",
        "prefs-help-watchlist-token2": "Hattan tasarut tufurt n usuddem Web n umuɣ inek/inem n uḍfar.\nAkkw amḍan yesɛan tasarut agi, ad yezmer ad i ɣer umuɣ inek/inem n uḍfar, ur d-sselɣu ara tasarut agi ihi.\n[[Special:ResetTokens|Nqer d-agi ma tebɣiḍ ad wennezeḍ tasarut agi]].",
        "savedprefs": "Ismenyifen-ik ttwaskelsen.",
+       "savedrights": "Izerfan n useqdac n {{GENDER:$1|$1}}  ttwaskelsen.",
        "timezonelegend": "Iẓḍi n ukud :",
        "localtime": "Asrag adigan :",
        "timezoneuseserverdefault": "Seqdec azal s lexṣas n wiki ($1)",
        "youremail": "E-mail *:",
        "username": "{{GENDER:$1|Isem n umseqdac|Isem n tamseqdact}} :",
        "prefs-memberingroups": "{{GENDER:$2|Aεeggal|Taɛggalt}} n {{PLURAL:$1|ugraw|igrawen}} :",
+       "group-membership-link-with-expiry": "$1 (arams d $2)",
        "prefs-registration": "Azmez n tiggezt :",
        "yourrealname": "Isem n ṣṣeḥ *:",
        "yourlanguage": "Tutlayt:",
        "prefs-diffs": "Timeẓliwin",
        "prefs-help-prefershttps": "Asmenyif agi, ad yelḥu ar tuqqna ay d-yetteddun.",
        "prefs-tabs-navigation-hint": "Taxbalut : Tzemreḍ ad seqdeceḍ tineccabin n uzelmaḍ d uyeffus iwakken ad ssileleḍ gar iccaren.",
-       "userrights": "Laɛej iserfan n wemseqdac",
-       "userrights-lookup-user": "Laɛej iderman n yimseqdacen",
+       "userrights": "Izerfan n useqdac",
+       "userrights-lookup-user": "Fren aseqdac",
        "userrights-user-editname": "Ssekcem isem n wemseqdac:",
-       "editusergroup": "Beddel iderman n yimseqdacen",
-       "editinguser": "Abeddel n izerfan n {{GENDER:$1|useqdac|taseqdact}} '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Beddel iderman n wemseqdac",
-       "saveusergroups": "Smekti iderman n yimseqdacen",
+       "editusergroup": "Sali-d igrawen n iseqdacen",
+       "editinguser": "Abeddel n izerfan n {{GENDER:$1|useqdac|tseqdact}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Askan n izefan iseqdacen n {{GENDER:$1|useqdac|tseqdact}} <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Snifel izerfan n {{GENDER:$1|useqdsac|tseqdact}}",
+       "userrights-viewusergroup": "Sken igrawen n {{GENDER:$1|useqdac|tseqdact}}",
+       "saveusergroups": "Sekles igrawen n {{GENDER:$1|useqdac|tseqdact}}",
        "userrights-groupsmember": "Amaslad deg:",
        "userrights-groupsmember-auto": "Aεeggal udrig n :",
        "userrights-groups-help": "Tzemreḍ ad beddeleḍ igrawen anda yella aseqdac agi :\n* Taxxamt i tekkin : aseqdac yella deg ugraw agi.\n* Taxxamt ur tekkin ara : aseqdac ur yella ara deg ugraw agi\n* Titrit (*) : ur tzemreḍ ara ad ekkeseḍ agraw agi sakin i tid ernuḍ, naɣ bis-bersa.",
        "userrights-nodatabase": "Taffa n isefka « $1 » ulac itt naɣ mačči d tadigant.",
        "userrights-changeable-col": "Igrawen i tzemreḍ ad beddeleḍ",
        "userrights-unchangeable-col": "Igrawen ur tzemreḍ ara ad beddeleḍ",
+       "userrights-expiry-current": "Ad ifat di $1",
+       "userrights-expiry-none": "Ur yettfat ara",
+       "userrights-expiry": "Ad ifat di:",
+       "userrights-expiry-existing": "Azemz n ufati yellan: $3,  $2",
+       "userrights-expiry-othertime": "Akud-nniḍen:",
+       "userrights-expiry-options": "1 ass:1 day,1 amalas:1 week,1 aggur:1 month,3 agguren:3 montghs,6 agguren:6 month,1 aseggas:1 year",
+       "userrights-invalid-expiry": "Azemz n tagara i ugraw \"$1\" mačči d ameɣtu.",
+       "userrights-expiry-in-past": "Azemz n tagara i ugraw \"$1\" yezri.",
        "userrights-conflict": "Ccwal n ubeddel n izerfan n umseqdac ! Ilaq ad ɛzemeḍ tikelt nniḍen dɣa ad sergegeḍ ibeddilen.",
        "group": "Adrum:",
        "group-user": "Iseqdacen",
        "grouppage-bot": "{{ns:project}}:Iṛubuten",
        "grouppage-sysop": "{{ns:project}}:Inedbalen",
        "grouppage-bureaucrat": "{{ns:project}}:Imsfelluran",
-       "grouppage-suppress": "{{ns:project}}:Inemdayen",
+       "grouppage-suppress": "{{ns:project}}:Suppress",
        "right-read": "Ɣeṛ isebtar",
        "right-edit": "Beddel isebtar",
        "right-createpage": "Snulfud isebtar (mačči d-isebtar n umeslay)",
        "right-createtalk": "Snulfud isebtar n umeslay",
        "right-createaccount": "Snulfud imiḍanen n iseqdacen",
+       "right-autocreateaccount": "Tuqqna tawurmant s umiḍan n useqdac azɣaray",
        "right-minoredit": "Ffer ibeddilen yellan d-imectuḥen",
        "right-move": "Beddel isem n isebtar",
        "right-move-subpages": "Beddel isem n isebtar d adu-isebtar nsen",
        "right-move-rootuserpages": "Beddel isem n usebtar amenzawi n useqdac",
+       "right-move-categorypages": "Ugar n isebtar n taggayin",
        "right-movefile": "Beddel isem n ifuyla",
        "right-suppressredirect": "Ur snulfu ara asemmimeḍ seg azwel amezwaru s ubeddel n isem usebter",
        "right-upload": "Azen ifuyla",
        "right-deletedtext": "Ẓeṛ aḍris yemḥan d timeẓliwin gar ileqman yemḥan",
        "right-browsearchive": "Nadi ɣef isebtar yettumḥan",
        "right-undelete": "Erred asebter yemḥan",
-       "right-suppressrevision": "Ssekyed dɣa erred ileqman yefren i inedbalen",
+       "right-suppressrevision": "Sken, ffer, werri iceggiren n isebtar n yal aseqdac",
        "right-suppressionlog": "Ẓeṛ iɣmisen usligen",
        "right-block": "Kyef deg tira iseqdacen nniḍen",
        "right-blockemail": "Sḍiqqef aceggaɛ n tira (e-mail) i yiwen useqdac",
        "boteditletter": "b",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|aɛessas|iɛessasen}}]",
        "rc_categories": "Ḥedded i taggayin (ferreq s \"|\")",
-       "rc_categories_any": "Ulayɣer",
+       "rc_categories_any": "Yiwet seg tid yettwafernen",
        "rc-change-size-new": "$1 {{PLURAL:$1|atamḍan|itamḍanen}} seld abeddel",
        "newsectionsummary": "/* $1 */ tigezmi tamaynut",
        "rc-enhanced-expand": "Ẓeṛ ttfaṣil",
        "uploaderror": "Agul deg usekcam",
        "upload-recreate-warning": "'''Ɣur-wet : Afaylu s isem agi yetwekkes naɣ yetembiwel.'''\nAɣmis n tukksiwin d win n ittembiwilen n usebter agi beqqeḍen d-agi i tilɣa :",
        "uploadtext": "Sseqdec tiferkit agi iwakken ad ktereḍ ifuyla ɣef uqeddac.\nIwakken ad ẓṛeḍ naɣ ad nadiḍ tugniwin i ktren uqbel, ẓeṛ [[Special:FileList|umuɣ n tugniwin]]. Taktert tella daɣen deg [[Special:Log/upload|aɣmis n taktert n ifuyla]], dɣa inuzal deg [[Special:Log/delete|aɣmis n inuzal]].\n\nAkken ad tessekcmeḍ afaylu deg usebter, seqdec azay am wagi\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:afaylu.jpg]]</nowiki></code>''', iwakken ad beqqeḍeḍ afaylu deg tabadut tačurant (lukan d-tugna) ;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:afaylu.png|200px|thumb|left|aḍris n uglam]]</nowiki></code>''' i useqdac n uqmamaḍ n 200px s tehri deg tanaka af uzelmeḍ s « aḍris n uglam » am aglam ;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:afaylu.ogg]]</nowiki></code>''' iwakken ad qqeneḍ ɣer ufaylu war ubeqqeḍ.",
-       "upload-permitted": "Amasal n ifuyla i siregen : $1.",
-       "upload-preferred": "Amasal n ifuyla i smenyifen : $1.",
-       "upload-prohibited": "Amasal n ifuyla igdelen : $1.",
+       "upload-permitted": "{{PLURAL:$2|Amasal|Imasalen}} n ifuyla {{PLURAL:$2|yettwasireg|ttwasirgen}} : $1.",
+       "upload-preferred": "{{PLURAL:$2|Amasal|Imasalen}} n ifuyla {{PLURAL:$2|anurif|inurifen}} : $1.",
+       "upload-prohibited": "‎{{PLURAL:$2|Amasal|Imasalen}} n ifuyla {{PLURAL:$2|ugdil|ugdilen}} : $1.",
        "uploadlogpage": "Amezruy n usekcam",
        "uploadlogpagetext": "Hat-an umuɣ n ifuyla ineggura i kteren ɣef uqeddac.\nẒeṛ [[Special:NewFiles|tihawt n tugniwin timaynutin]].",
        "filename": "Isem n ufaylu",
        "thumbnail_gd-library": "Tawila tagermazt n tamkarḍit GD : ulac tasɣent $1",
        "thumbnail_image-missing": "Afaylu agi ulac-it : $1",
        "import": "Ssekcem isebtar",
-       "importinterwiki": "Assekcem n transwiki",
+       "importinterwiki": "kter seg uwiki-nniḍen",
        "import-interwiki-text": "Fren yiwen wiki d yiwen azwel n usebtar ad ketreḍ.\nIzemzen n ileqman d isemawen n ittekkiyen ad qqimen.\nAkkw tigawin n taktert ager-wiki ad illint deg [[Special:Log/import|umezruy n tiketrin]].",
        "import-interwiki-history": "Xdem alsaru n akk tisiwal umezruy n usebter-agi",
        "import-interwiki-templates": "Sekcem akkw talɣiwin",
        "scarytranscludetoolong": "[URL agi uffay aṭas]",
        "deletedwhileediting": "Aɣtal: Asebter-agi yettumḥa qbel ad tebdiḍ a t-tbeddleḍ!",
        "confirmrecreate": "Aseqdac [[User:$1|$1]] ([[User talk:$1|Asqerdec]]) yekkes asebter-agi makken tebdiḍ abeddel deg-s, ɣef sebba n :\n: <em>$2</em>\nMa ulac aɣilif, sentem d akken tebɣiḍ ad talseḍ timerna n usebter-agi.",
-       "confirmrecreate-noreason": "Amseqdac [[User:$1|$1]] ([[User talk:$1|Meslay]]) yemḥu asebter-agi wannag tebedduḍ att beddeleḍ. Ilaq ad sergegeḍ tebɣiḍ ad snulfuḍ tikkelt nniḍen asebtar agi.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Aseqdac|Taseqdact}} [[User:$1|$1]] ([[User talk:$1|Asqerdec]]) {{GENDER:$1|yekkes|tekkes}} asebter-agi, makken tebdiḍ tettbeddileḍ-t. Sentem ma ulac aɣilif me tebɣiḍ ad talsseḍ timerna n usebter-agi.",
        "recreate": "Ɛiwed xleq",
        "confirm_purge_button": "Seɣbel",
        "confirm-purge-top": "Mḥu lkac n usebter-agi?",
        "compare-revision-not-exists": "Lqem id efkiḍ ulac-it.",
        "dberr-problems": "Ssurfet-aɣ ! Asmel agi yemliled ilɣiten itikniten.",
        "dberr-again": "Ɛreḍ ad arǧuḍ kra n tisdidin dɣa sismeḍ.",
-       "dberr-info": "(Ulamek an qqen ar uqeddac n taffa n isefka : $1)",
+       "dberr-info": "(Ur izmir ara ad yeqqen ar taffa n isefka: $1)",
        "dberr-info-hidden": "(Ur izmir ara ad yeqqen ara taffa n isefka)",
        "dberr-usegoogle": "Tzemreḍ ad ɛreḍeḍ anadi s Google deg ukud agi.",
        "dberr-outofdate": "Ani i imataren nsen n ugbur nneɣ zemren ad yetwagaren",
index 7e3c57a..3a29feb 100644 (file)
        "rcfilters-liveupdates-button": "실시간 업데이트",
        "rcfilters-liveupdates-button-title-on": "실시간 업데이트 끄기",
        "rcfilters-liveupdates-button-title-off": "새로운 변경사항이 발생하면 표시",
-       "rcfilters-watchlist-markSeen-button": "모든 변경사항을 본 것으로 표시",
-       "rcfilters-watchlist-editWatchlist-button": "내 주시문서 목록 편집",
+       "rcfilters-watchlist-markseen-button": "모든 변경사항을 본 것으로 표시",
+       "rcfilters-watchlist-edit-watchlist-button": "내 주시문서 목록 편집",
+       "rcfilters-watchlist-showupdated": "변경이 발생한 이후로 방문한 적이 없는 문서의 변경사항은 <strong>굵게</strong> 표시됩니다.",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
        "rclistfromreset": "날짜 선택 초기화",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "unwatchthispage": "주시 해제하기",
        "notanarticle": "문서가 아님",
        "notvisiblerev": "이 판은 삭제되었습니다.",
-       "watchlist-details": "토론 문서의 수는 제외하고, 주시문서 목록에 {{PLURAL:$1|문서 $1개}}가 있습니다.",
+       "watchlist-details": "{{PLURAL:$1|문서 $1개}}가 주시문서 목록에 있습니다. (토론 문서 포함)",
        "wlheader-enotif": "이메일 알림 기능이 활성화되었습니다.",
        "wlheader-showupdated": "마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보입니다.",
        "wlnote": "$3 $4 기준으로, 아래에 최근 {{PLURAL:$2|한 시간|<strong>$2</strong>시간}} 동안 {{PLURAL:$1|마지막 바뀜이|마지막 바뀜 <strong>$1</strong>개가}} 있습니다.",
index dab6ded..7a1c129 100644 (file)
@@ -19,7 +19,8 @@
                        "MikaelF",
                        "Macofe",
                        "Matma Rex",
-                       "Stryn"
+                       "Stryn",
+                       "Cûndûllah el-Kurdî"
                ]
        },
        "tog-underline": "Xetekê di bin girêdanê de çêke:",
        "october-date": "Kewçêr $1",
        "november-date": "Sermawez $1",
        "december-date": "Berfanbar $1",
+       "period-am": "Berî Nîvro",
+       "period-pm": "PN",
        "pagecategories": "{{PLURAL:$1|Kategorî|Kategorî}}",
        "category_header": "Gotarên di kategoriya \"$1\" de",
        "subcategories": "Binkategorî",
        "searcharticle": "Here",
        "history": "Dîroka rûpelê",
        "history_short": "Dîrok",
+       "history_small": "dîrok",
        "updatedmarker": "ji serdana min a dawî ve hate rojanekirin",
        "printableversion": "Guhertoya çapkirinê",
        "permalink": "Girêdana daîmî",
        "unwatch": "Êdî neşopîne",
        "unwatchthispage": "Êdî neşopîne",
        "notanarticle": "Ne gotar e",
-       "watchlist-details": "{{PLURAL:$1|Rûpeleka|$1 rûpel}} li ser lîsteya te ya şopandinê, rûpelên gotûbêjê nayên jimartin.",
+       "watchlist-details": "{{PLURAL:$1|Rûpelekî|$1 rûpel}} li ser lîsteya te ya şopandinê ye (xeynî rûpelên gotûbêjê).",
        "wlheader-enotif": "Agahdariya e-nameyan hate çalakkirin",
        "wlheader-showupdated": "Ev rûpela hatî guhertin dema te lê meyzand bi '''nivîsa stûr''' tê xuyakirin.",
        "wlnote": "Niha {{PLURAL:$1|xeyrandinê|'''$1''' xeyrandinên}} dawî yê {{PLURAL:$2|seetê|'''$2''' seetên}} dawî {{PLURAL:$1|tê|tên}} dîtin.",
        "version-libraries-license": "Destûr",
        "version-libraries-description": "Danasîn",
        "version-libraries-authors": "Xwedî",
+       "redirect-submit": "Here",
+       "redirect-user": "ID'ya Bikarhêner",
+       "redirect-page": "ID'ya  Rûpelê",
        "fileduplicatesearch-filename": "Navê dosyeyê:",
        "fileduplicatesearch-submit": "Lê bigere",
        "specialpages": "Rûpelên taybet",
-       "specialpages-note": "* Rûpelên taybetî ji her kesan ra\n* <strong class=\"mw-specialpagerestricted\">Rûpelên taybetî ji bikarhêneran bi mafên zêdetir ra</strong>",
        "specialpages-group-other": "Rûpelên taybetî yên din",
        "specialpages-group-login": "Têkeve / hesabekî nû çêke",
        "specialpages-group-changes": "Guherandinên dawî û têketin",
index 749ef09..7b13861 100644 (file)
        "rcfilters-liveupdates-button": "Live-Aktualiséierungen",
        "rcfilters-liveupdates-button-title-on": "Live-Aktualiséierungen ausschalten",
        "rcfilters-liveupdates-button-title-off": "Nei Ännerunge weisen esoubal wéi se gemaach ginn",
-       "rcfilters-watchlist-markSeen-button": "All Ännerungen als gesi markéieren",
-       "rcfilters-watchlist-editWatchlist-button": "Ännert Är Lëscht vun iwwerwaachte säiten",
+       "rcfilters-watchlist-markseen-button": "All Ännerungen als gesi markéieren",
+       "rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte säiten",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
        "rcshowhideminor": "Kleng Ännerunge $1",
        "unwatchthispage": "Net méi iwwerwaachen",
        "notanarticle": "Keng Säit",
        "notvisiblerev": "Versioun gouf geläscht",
-       "watchlist-details": "{{PLURAL:$1|1 Säit|$1 Säite}} sinn op Ärer Iwwerwaachungslëscht, d'Diskussiounssäiten net matgezielt.",
+       "watchlist-details": "{{PLURAL:$1|1 Säit|$1 Säite}} sinn op Ärer Iwwerwaachungslëscht, (plus Diskussiounssäiten).",
        "wlheader-enotif": "E-Mail-Notifikatioun ass ageschalt.",
        "wlheader-showupdated": "Säiten déi zanter Ärer leschter Visite geännert goufen, si '''fett''' geschriwwen",
        "wlnote": "Hei {{PLURAL:$1|ass déi lescht Ännerung|sinn déi lescht <strong>$1</strong> Ännerunge}} vun {{PLURAL:$2|der leschter Stonn|de leschte(n) <strong>$2</strong> Stonnen}}, Stand: $3 ëm $4 Auer.",
index c0c6def..5237062 100644 (file)
        "exif-sensingmethod-2": "Vienas mikroshēmas krāsu zonas sensors",
        "exif-sensingmethod-3": "Divu mikroshēmu krāsu zonas sensors",
        "exif-sensingmethod-4": "Trīs mikroshēmu krāsu zonas sensors",
+       "exif-filesource-3": "Digitālā kamera",
+       "exif-scenetype-1": "Tieši fotografēts attēls",
        "exif-customrendered-0": "Normāls process",
        "exif-customrendered-1": "Dažādots process",
        "exif-exposuremode-0": "Automātiskā ekspozīcija",
index 9639f7b..6815b8e 100644 (file)
        "rcfilters-liveupdates-button": "Поднови во живо",
        "rcfilters-liveupdates-button-title-on": "Исклучи поднови во живо",
        "rcfilters-liveupdates-button-title-off": "Прикажува нови промени во живо",
-       "rcfilters-watchlist-markSeen-button": "Означи ги сите промени како видени",
-       "rcfilters-watchlist-editWatchlist-button": "Уреди набљудувани",
+       "rcfilters-watchlist-markseen-button": "Означи ги сите промени како видени",
+       "rcfilters-watchlist-edit-watchlist-button": "Уреди набљудувани",
        "rcfilters-watchlist-showupdated": "Промени во страниците што ги немате посетено откако се случиле се <strong>задебелени</strong>.",
        "rcnotefrom": "Подолу {{PLURAL:$5|е прикажана промената|се прикажани промените}} почнувајќи од <strong>$3, $4</strong>  (се прикажуваат до <b>$1</b>).",
        "rclistfromreset": "Нов избор на датуми",
        "unwatchthispage": "Престани набљудување",
        "notanarticle": "Не е статија",
        "notvisiblerev": "Преработката била избришана",
-       "watchlist-details": "{{PLURAL:$1|$1 страница|$1 страници}} во вашиот список на набљудувања, не броејќи ги посебно страниците за разговор.",
+       "watchlist-details": "Во вашите набљудувани имате {{PLURAL:$1|$1 страница|$1 страници}} (не броејќи ги страниците за разговор).",
        "wlheader-enotif": "Известувањето по е-пошта е вклучено.",
        "wlheader-showupdated": "Страниците што се изменети од вашата последна посета се прикажани со '''задебелени''' букви",
        "wlnote": "Подолу {{PLURAL:$1|е прикажана последната промена|се прикажани последните <strong>$1</strong> промени}} во {{PLURAL:$2|последниов час|последниве <strong>$2</strong> часа}}, заклучно со $3, $4 ч.",
index af1d803..53f0e54 100644 (file)
        "page-atom-feed": "Feed Atom de \"$1\"",
        "red-link-title": "$1 (la páigina nun eisiste)",
        "nstab-main": "Páigina",
-       "nstab-user": "Páigina de l'{{GENDER:{{BASEPAGENAME}}|outelizador|outelizadora|outelizador(a)}}",
+       "nstab-user": "Páigina d{{GENDER:{{BASEPAGENAME}}|e l outelizador|e la outelizadora|e outelizador(a)}}",
        "nstab-media": "Páigina de média",
        "nstab-special": "Páigina special",
        "nstab-project": "Páigina de l porjeto",
        "changepassword": "Demudar palabra-chabe",
        "resetpass_header": "Demudar palabra-chabe de la cuonta",
        "retypenew": "Pon outra beç la nuoba palabra chabe:",
+       "botpasswords": "Palabras-chabe de robós",
+       "botpasswords-label-resetpassword": "Redefenir palabra-chabe",
        "resetpass-submit-loggedin": "Demudar palabra-chabe",
+       "passwordreset": "Redefenir palabra-chabe",
        "changeemail": "Altarar ó remober l'andereço de correio eiletrónico",
+       "resettokens": "Redefenir chabes",
        "bold_sample": "Testo a negrito",
        "bold_tip": "Testo a negrito",
        "italic_sample": "Testo an eitálico",
        "prefs-displaywatchlist": "Oupçones de bisualizaçon",
        "prefs-tokenwatchlist": "Chabe",
        "prefs-diffs": "Defréncias",
+       "userrights": "Prebilégios {{GENDER:{{BASEPAGENAME}}|de l outelizador|de la outelizadora|de outelizador(a)}}",
        "editusergroup": "Cargar grupos de outelizadores",
        "userrights-groupsmember": "Nembro de:",
        "group": "Grupo:",
        "action-move": "arrastrar esta páigina",
        "action-movefile": "arrastrar este fexeiro",
        "action-delete": "apagar esta páigina",
+       "action-purge": "recargar esta páigina",
        "nchanges": "$1 {{PLURAL:$1|altaraçon|altaraçones}}",
        "recentchanges": "Redadeiras altaraçones",
        "recentchanges-legend": "Oupçones de las redadeiras altaraçones",
        "statistics-articles": "Páiginas de cuntenido",
        "statistics-pages": "Páiginas",
        "statistics-users-active": "Outelizadores atibos",
+       "pageswithprop": "Páiginas que outelizan ua propiadade",
+       "pageswithprop-legend": "Páiginas que outelizan ua propiadade",
        "doubleredirects": "Ancaminamientos duplos",
        "brokenredirects": "Ancaminamientos scachados",
        "brokenredirects-edit": "eiditar",
        "unusedimages": "Fexeiros nun outelizados",
        "wantedcategories": "Catadories pedidas",
        "wantedpages": "Páiginas pedidas",
+       "wantedfiles": "Fexeiros zeiados",
+       "wantedtemplates": "Modelos zeiados",
        "mostlinked": "Páiginas mais lhigadas",
        "mostlinkedcategories": "Catadories cun mais nembros",
        "mostlinkedtemplates": "Páiginas mais transcluídas",
        "longpages": "Páiginas cumpridas",
        "deadendpages": "Páiginas sin salida",
        "protectedpages": "Páiginas protegidas",
+       "protectedtitles": "Títalos portegidos",
        "listusers": "Lhista de outelizadores",
        "newpages": "Páiginas nuobas",
        "ancientpages": "Páiginas mais antigas",
        "linksearch-ok": "Percurar",
        "listusers-submit": "Amostrar",
        "activeusers": "Lhista de outelizadores atibos",
+       "listgrouprights": "Prebilégios de ls grupos de outelizadores",
        "listgrouprights-rights": "Dreitos",
        "listgrouprights-members": "(lista de nembros)",
+       "listgrants": "Cuncessones de permissones a las aplicaçones lhigadas",
+       "trackingcategories": "Catadories de monitorizaçon",
        "emailuser": "Ambiar carta eiletrónica a {{GENDER:{{BASEPAGENAME}}|este outelizador|esta outelizadora|este(a) outelizador(a)}}",
        "emailfrom": "De:",
        "emailto": "Para:",
        "whatlinkshere-filters": "Filtros",
        "blockip": "Bloquiar {{GENDER:$1|outelizador|outelizadora|outelizador(a)}}",
        "ipboptions": "2 horas:2 hours,1 die:1 day,3 dias:3 days,1 sumana:1 week,2 sumanas:2 weeks,1 més:1 month,3 meses:3 months,6 meses:6 months,1 anho:1 year,anfenito:infinite",
+       "blocklist": "Outelizadores bloquiados",
+       "autoblocklist": "Bloqueios outomáticos",
        "ipblocklist": "Outelizadores bloquiados",
        "blocklink": "bloquiar",
        "unblocklink": "zbloquiar",
        "tooltip-t-print": "Berson pa ampremir desta páigina",
        "tooltip-t-permalink": "Lhigaçon pa siempre desta berson desta páigina",
        "tooltip-ca-nstab-main": "Ber la páigina de l cuntenido",
-       "tooltip-ca-nstab-user": "Ber la páigina de outelizador",
+       "tooltip-ca-nstab-user": "Ber la páigina de outelizador",
        "tooltip-ca-nstab-special": "Esta ye ua páigina special, i nun puode ser eiditada.",
        "tooltip-ca-nstab-project": "Ber la páigina de l porjeto",
        "tooltip-ca-nstab-image": "Ber la páigina de l fexeiro",
        "exif-subjectdistancerange-0": "Çcoincido",
        "namespacesall": "todos",
        "monthsall": "todos",
+       "confirm-purge-title": "Purgar esta páigina",
        "confirm_purge_button": "Stá bien",
+       "confirm-purge-top": "Lhimpar a mimória cache desta páigina?",
+       "confirm-purge-bottom": "Recargar ua páigina lhimpa la mimória cache i fuorça la sue berson mais reciente a aparecer.",
        "imgmultipageprev": "← páigina atrasada",
        "imgmultipagenext": "páigina seguinte →",
        "imgmultigo": "Bota!",
        "rightsnone": "(nanhun)",
        "mediastatistics-header-multimedia": "Média anriquecida",
        "authmanager-email-label": "Correio eiletrónico",
+       "changecredentials": "Altarar credenciales",
+       "changecredentials-submit": "Altarar credenciales",
+       "removecredentials": "Remober credenciales",
+       "removecredentials-submit": "Remober credenciales",
        "gotointerwiki": "Salindo de {{SITENAME}}"
 }
index 6ac7a24..7c60994 100644 (file)
        "rcfilters-liveupdates-button": "Live-oppdateringer",
        "rcfilters-liveupdates-button-title-on": "Slå av live-oppdateringer",
        "rcfilters-liveupdates-button-title-off": "Vis nye endringer når de skjer",
-       "rcfilters-watchlist-markSeen-button": "Merk alle endringer som sett.",
+       "rcfilters-watchlist-markseen-button": "Merk alle endringer som sett.",
        "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
        "rclistfromreset": "Nullstill datovalg",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
index b323961..cf25286 100644 (file)
        "jumptonavigation": "अन्वेषण",
        "jumptosearch": "खोज्नुहोस्",
        "view-pool-error": "माफ गर्नुहोस् , यस समयमा सर्भरहरूमा कार्यभार उच्च रहेको छ ।\nअति धेरै प्रयोगकर्ताहरू यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो पृष्ठ पुन: हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।\n\n$1",
-       "generic-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\81मा कार्यभार उच्च रहेको छ।\nअति धेरै प्रयोगकर्ताहरू यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो सामग्री  हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।",
+       "generic-pool-error": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d , à¤¯à¤¸ à¤¸à¤®à¤¯à¤®à¤¾ à¤¸à¤°à¥\8dभरहरà¥\82मा कार्यभार उच्च रहेको छ।\nअति धेरै प्रयोगकर्ताहरू यो पृष्ट हेर्ने प्रयास गरी रहनु भएको छ।\nकृपया यो सामग्री  हेर्नु अगाडि केही समय पर्खिदिनुहोस् ।",
        "pool-timeout": "समय सकियो बन्द गर्ने प्रतीक्षामा",
        "pool-queuefull": "प्रतीक्षा पङ्क्ति भरियो",
        "pool-errorunknown": "अज्ञात त्रुटि",
        "passwordremindertext": "कसैले (सायद तपाईं, IP ठेगाना $1 बाट), {{SITENAME}}($4) को लागि नयाँ प्रवेशशब्द अनुरोध गर्नुभएको छ । प्रयोगकर्ता \"$2\" को लागि नयाँ अस्थायी प्रवेशशब्द \"$3\"तयार पारिएको छ । यदि यो तपाईंको इच्छामा भएको भए अहिले तपाईँले प्रवेशगरी नयाँ प्रवेशशब्द छान्नु पर्ने हुन्छ ।\nतपाईंको अस्थायी प्रवेशशब्द  {{PLURAL:$5|एक दिन|$5 दिनहरू पछि}} अमान्य हुनेछ ।\n\nयदि कोही अरुले नै अनुरोध गरेको हो भने , या तपाईंले आफ्नो प्रवेशशब्द सम्झिनु भयो भने, अथवा\nत्यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यो सन्देशको वेवास्ता गर्नसक्नुहुन्छ र पुरानै प्रवेशशब्द प्रयोग गरिरहन सक्नुहुन्छ ।",
        "noemail": "प्रयोगकर्ता  \"$1\"को लागि कुनै पनि इ-मेल दर्ता गरिएको छैन ।",
        "noemailcreate": "तपाईंले सही ई-मेल ठेगाना दिनुपर्छ",
-       "passwordsent": "\"$1\" को लागि दर्ता गरिएको ई-मेल ठेगानामा एक प्रवेशशव्द पठाइएको छ।\nकृपया त्यसलाई प्राप्त गरेपछि प्रवेश गर्नुहोला ।",
+       "passwordsent": "\"$1\" को लागि दर्ता गरिएको ई-मेल ठेगानामा एक प्रवेश शब्द पठाइएको छ।\nकृपया त्यसलाई प्राप्त गरेपछि प्रवेश गर्नुहोला ।",
        "blocked-mailpassword": "तपाईंको IP ठेगानालाई सम्पादनगर्नबाट रोक लगाइएको छ, र त्यसैले दुरुपयोग रोक्नको लागि प्रवेसशब्द पुनर्लाभ प्रक्रिया प्रयोग गर्न अनुमति छैन ।",
        "eauthentsent": "दिइएको इमेल ठेगानामा इमेल पठाइएको छ ।\nतपाईंको खातामा अरु इमेल पठउनु अघि , इमेलमा लेखिएको मार्गदर्शन अनुसार , त्यो खाता तपाईंकै हो भनेर निश्चित गर्नु पर्नेछ ।",
        "throttled-mailpassword": "बितेको {{PLURAL:$1|घण्टा|$1 घण्टाहरु}} भित्र एउटा पासवर्ड अनुस्मारक पठाई सकिएको छ।\nदुरुपयोगबाट बचाउकोलागि प्रत्येक {{PLURAL:$1|घण्टा|$1 घण्टाहरु}}मा केवल एउटा पासवर्ड अनुस्मारक पठाइन्छ।",
        "passwordreset-domain": "डोमेन",
        "passwordreset-email": "इमेल ठेगाना:",
        "passwordreset-emailtitle": "{{SITENAME}}मा खाता विवरण",
-       "passwordreset-emailtext-ip": "à¤\95सà¥\88लà¥\87 (सायद à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, $1 à¤\86à¤\88पि à¤ à¥\87à¤\97ानाबाà¤\9f) {{SITENAME}} ($4)मा à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\96ाता à¤µà¤¿à¤µà¤°à¤£à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dति à¤\8fà¤\89à¤\9fा à¤\85नà¥\81सà¥\8dमारà¤\95à¤\95à¥\8b à¤\85नà¥\81रà¥\8bध à¤\97रà¥\87à¤\95à¥\8b à¤\9b। à¤¨à¤¿à¤®à¥\8dन à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता {{PLURAL:$3|à¤\96ाता à¤¯à¤¸ à¤\87मà¥\87ल à¤ à¥\87à¤\97ानासित à¤¸à¤®à¥\8dबनà¥\8dधित à¤\9b|à¤\96ाताहरà¥\82 à¤¯à¤¸ à¤\87मà¥\87ल à¤ à¥\87à¤\97ानासित à¤¸à¤®à¥\8dबनà¥\8dधित à¤\9bनà¥\8d}}:\n\n$2\n\n{{PLURAL:$3|यà¥\8b à¤\85सà¥\8dथाà¤\88 à¤ªà¤¾à¤¸à¤µà¤°à¥\8dडà¤\95à¥\8b|यà¥\80 à¤\85सà¥\8dथाà¤\88 à¤ªà¤¾à¤¸à¤µà¤°à¥\8dडहरà¥\81को}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस्।",
+       "passwordreset-emailtext-ip": "à¤\95सà¥\88लà¥\87 (सायद à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, $1 à¤\86à¤\88पि à¤ à¥\87à¤\97ानाबाà¤\9f) {{SITENAME}} ($4)मा à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤\96ाता à¤µà¤¿à¤µà¤°à¤£à¤\95à¥\8b à¤¨à¤¿à¤®à¥\8dति à¤\8fà¤\89à¤\9fा à¤\85नà¥\81सà¥\8dमारà¤\95à¤\95à¥\8b à¤\85नà¥\81रà¥\8bध à¤\97रà¥\87à¤\95à¥\8b à¤\9b। à¤¨à¤¿à¤®à¥\8dन à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता {{PLURAL:$3|à¤\96ाता à¤¯à¤¸ à¤\87मà¥\87ल à¤ à¥\87à¤\97ानासित à¤¸à¤®à¥\8dबनà¥\8dधित à¤\9b|à¤\96ाताहरà¥\82 à¤¯à¤¸ à¤\87मà¥\87ल à¤ à¥\87à¤\97ानासित à¤¸à¤®à¥\8dबनà¥\8dधित à¤\9bनà¥\8d}}:\n\n$2\n\n{{PLURAL:$3|यà¥\8b à¤\85सà¥\8dथाà¤\88 à¤ªà¤¾à¤¸à¤µà¤°à¥\8dडà¤\95à¥\8b|यà¥\80 à¤\85सà¥\8dथाà¤\88 à¤ªà¤¾à¤¸à¤µà¤°à¥\8dडहरà¥\82को}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस्।",
        "passwordreset-emailtext-user": "{{SITENAME}} को $1 प्रयोगकर्ताले  {{SITENAME}} ($4)को लागि खाता विवरणको निम्ति एउटा अनुस्मारकको अनुरोध गरेको छ । निम्न प्रयोगकर्ता {{PLURAL:$3|खाता यस इमेल ठेगानासित सम्बन्धित छ|खाताहरू यस इमेल ठेगानासित सम्बन्धित छन् ।}}:\n\n$2\n\n{{PLURAL:$3|यो अस्थाई पासवर्डको|यी अस्थाई पासवर्डहरूको}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस् ।",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsentemail": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
        "changeemail-submit": "इमेल परिवर्तन गर्ने",
        "changeemail-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेशको निम्ति प्रयास गर्नुभएको छ।\nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "resettokens": "टोकन पूर्वरुपमा फर्काउने",
-       "resettokens-text": "जुन टोकन तपाईंको खातासँग सम्बद्ध केहि विशिष्ट व्यक्तिगत जानकारी प्रदान गर्छन, तपाईं त्यसलाई यहाँ रिसेट गर्न सक्नुहुन्छ।\n\nयदि तपाईंले तिनलाई भुलवस कसैलाई देखाईदिनु भएको छ वा तपाईंको खाता ह्याक भइसकेको छ भने तपाईं यसलाई रिसेट गर्नुहोला।",
+       "resettokens-text": "जुन टोकनले तपाईंको खातासँग सम्बद्ध केहि विशिष्ट व्यक्तिगत जानकारी प्रदान गर्छन्, तपाईं त्यसलाई यहाँ रिसेट गर्न सक्नुहुन्छ।\n\nयदि तपाईंले तिनलाई भुलवस कसैलाई देखाउनु भएको छ वा तपाईंको खाता ह्याक भइसकेको छ भने तपाईं यसलाई रिसेट गर्नुहोला।",
        "resettokens-no-tokens": "पूर्वरुपमा फर्काउन कुनै पनि टोकन छैन ।",
        "resettokens-tokens": "टोकनहरू:",
        "resettokens-token-label": "$1 (वर्तमान मूल्यः $2)",
        "continue-editing": "सम्पादन क्षेत्रमा जानुहोस",
        "previewconflict": "यस पूर्वावलोकनले सम्पादन क्षेत्र को माथिल्लो भागको पाठ परिवर्तन गर्ने ठाउँको पाठलाइ देखाउँछ अनि तपाईंले यसलाई सेभ गरेपछि देखापर्छ।",
        "session_fail_preview": "'''माफ गर्नुहोस्! सत्र-आँकड़ा (session data) हराउनाले हामीले तपाईंको सम्पादन प्रक्रिया अघि बढाउन सकेनौं।.'''\nकृपया पुनः प्रयास गर्नुहोस्।\nयदि फेरि पनि काम भएन भनें, [[Special:UserLogout|बाहिर गई(लग आउट गरी)]]  फेरि प्रवेश गर्नुहोस्।",
-       "session_fail_preview_html": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bला ! à¤¸à¥\87शन à¤¡à¤¾à¤\9fा à¤¨à¤·à¥\8dà¤\9f à¤­à¤\8fà¤\95à¥\8b à¤\95ारण à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¶à¥\81रà¤\95à¥\8dषित à¤\97रà¥\8dन à¤¸à¤\95िà¤\8fन à¥¤\n\n<em>à¤\95िनà¤\95à¥\80 {{SITENAME}}मा raw HTML à¤¸à¤\95à¥\8dषम à¤\9b, à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤¹à¤®à¤¹à¤°à¥\82बाà¤\9f à¤¬à¤\9aाà¤\89नà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\9dलà¤\95 à¤¨à¤¹à¥\80à¤\82 à¤¦à¥\87à¤\96ाà¤\87à¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤</em>\n\n<strong>यदà¥\80 à¤¯à¥\8b à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤µà¥\88ध à¤¸à¤®à¥\8dपादन à¤¯à¤¤à¥\8dन à¤¥à¤¿à¤¯à¥\8b à¤­à¤¨à¥\87 à¤\95à¥\83पया à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¥¤</strong>\nयदà¥\80 à¤¯à¤¸ पनि यस्तै भयो भने कृपया [[Special:UserLogout|लग आउट]] गरेर पुनः लग इन गर्नुहोस् तथा तपाईंको ब्राउजरले यस साइटसँग कुकीजको अनुमति दिन्छ दिन्न जाँच गर्नुहोस् ।",
+       "session_fail_preview_html": "माफ à¤\97रà¥\8dनà¥\81हà¥\8bला ! à¤¸à¥\87शन à¤¡à¤¾à¤\9fा à¤¨à¤·à¥\8dà¤\9f à¤­à¤\8fà¤\95à¥\8b à¤\95ारण à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¶à¥\81रà¤\95à¥\8dषित à¤\97रà¥\8dन à¤¸à¤\95िà¤\8fन à¥¤\n\n<em>à¤\95िनà¤\95à¥\80 {{SITENAME}}मा raw HTML à¤¸à¤\95à¥\8dषम à¤\9b, à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤¹à¤®à¤²à¤¾à¤¹à¤°à¥\82बाà¤\9f à¤¬à¤\9aाà¤\89नà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤\9dलà¤\95 à¤¦à¥\87à¤\96ाà¤\87à¤\8fà¤\95à¥\8b à¤\9bà¥\88न à¥¤</em>\n\n<strong>यदà¥\80 à¤¯à¥\8b à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤µà¥\88ध à¤¸à¤®à¥\8dपादन à¤¯à¤¤à¥\8dन à¤¥à¤¿à¤¯à¥\8b à¤­à¤¨à¥\87 à¤\95à¥\83पया à¤ªà¥\81नà¤\83 à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d à¥¤</strong>\nयदà¥\80 à¤«à¥\87रà¥\80 पनि यस्तै भयो भने कृपया [[Special:UserLogout|लग आउट]] गरेर पुनः लग इन गर्नुहोस् तथा तपाईंको ब्राउजरले यस साइटसँग कुकीजको अनुमति दिन्छ दिन्न जाँच गर्नुहोस् ।",
        "token_suffix_mismatch": "'''सम्पादन टोकनमा विराम चिह्न र वर्ण सम्बन्धित गड़बड़ीको कारण तपाईंको सम्पादन अस्वीकार गरिएको छ'''\nपृष्ठको पाठ बचाउन सम्पादन अस्वीकार गरिएको हो।\nयस्तो त्यसबेला हुन्छ जब तपाईंले बगी वेवमा आधारित अज्ञात प्रोक्सी सेवा प्रयोग गर्नुहुन्छ।",
        "edit_form_incomplete": "'''सम्पादनको केहि भाग सर्वरसम्म पुग्न सकेन, दुइपल्ट जाँच गर्नुहोस्, तपाईंको सम्पादन यथावत रहे पुनः प्रयास गर्नुहोस्'''",
        "editing": "$1 सम्पादन गरिदै",
        "editingsection": "$1 (खण्ड) सम्पादन गरिदै",
        "editingcomment": "$1 सम्पादन गर्दै(नयाँ खण्ड)",
        "editconflict": "सम्पादन बाँझियो: $1",
-       "explainconflict": "तपाईंले सम्पादन कार्य सुरु गरेपछि कसैले यस पृष्टलाई परिवर्तन गरेकोछ।\nमाथिल्लो पाठक्षेत्रमा पृष्ठको वर्तमान पाठ छ।\nतपाईंको परिवर्तन तल्लो भागमा दर्शाइएकोछ। \nतपाईंले गर्नुभएको परिवर्तनलाई वर्तमान पाठसित मिसाउनु पर्नेछ, यदि तपाईंले \"$1\" थिच्नु भयो भनें पाठको माथिल्लो भाग '''मात्र''' संग्रह गरिनेछ।",
+       "explainconflict": "तपाईंले सम्पादन कार्य सुरु गरेपछि कसैले यस पृष्टलाई परिवर्तन गरेकोछ।\nमाथिल्लो पाठक्षेत्रमा पृष्ठको वर्तमान पाठ छ।\nतपाईंको परिवर्तन तल्लो भागमा दर्शाइएकोछ। \nतपाईंले गर्नुभएको परिवर्तनलाई वर्तमान पाठसित मिसाउनु पर्नेछ, यदि तपाईंले \"$1\" थिच्नु भयो भने पाठको माथिल्लो भाग '''मात्र''' सङ्ग्रह गरिनेछ।",
        "yourtext": "तपाईंका पाठहरु",
        "storedversion": "संग्रहित पुनरावलोकन",
        "nonunicodebrowser": "<strong>चेतावनी: तपाईंको ब्राउजर युनिकोडलाई स्वीकार गर्दैन।</strong> \nतपाईंद्वारा सहि रुपले पृष्ठ सम्पादनको लागि: गैर-एयससिआइआइ क्यारेक्टर हेक्जाडेसिमल कोड (hexadecimal) मा देखाइनेछ।",
        "rev-deleted-user-contribs": "[प्रयोगकर्ताको नाम अथवा IP ठेगाना हटाइयो - योगदानहरुबाट सम्पादन लुकाइयो]",
        "rev-deleted-text-permission": "यस पृष्ठको पुनरावलोकन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटिएको लगमा पाउन सकिन्छ]।",
        "rev-suppressed-text-permission": "यो पृष्ठ संशोधनलाई <strong>दमन</strong> गरिएको छ । \nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} दमन लग]मा पाउन सकिन्छ ।",
-       "rev-deleted-text-unhide": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].\nयदि चाहनु भयो भने [$1 संशोधन हेर्न] सक्नुहुन्छ।",
+       "rev-deleted-text-unhide": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} को मेटिएको लगमा पाउन सकिन्छ].\nयदि चाहनु भयो भने [$1 संशोधन हेर्न] सक्नुहुन्छ।",
        "rev-suppressed-text-unhide": "यस पृष्ठको पुनरावलोकन '''दमन''' गरिएको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तपाईं अगाडि बढ्न चाहनु हुन्छ भने पनि तपाईंले  [$1 यि संशोधनहरू हेर्न] पाउनु हुनेछ ।",
        "rev-deleted-text-view": "यस पृष्ठको संशोधन '''मेटिएकोछ'''।\nतपाईंले हेर्न सक्नुहुन्छ; [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} मेटिएको लगमा विवरण पाउन सकिन्छ]।",
        "rev-suppressed-text-view": "यस पृष्ठको पुनरावलोकन <strong>थिचिएको छ</strong>।\nप्रबन्धकको हैसियतले हेर्न सक्नुहुन्छ; [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा विवरण पाउन सकिन्छ]",
        "rev-suppressed-no-diff": "तपाईं यसको भिन्नता हेर्न सक्नुहुन्न किनभने यसको एउटा संशोधन <strong>मेटाइएको</strong>छ।",
        "rev-deleted-unhide-diff": "यस पृष्ठका पुनरावलोकनहरू मध्ये एउटा भिन्नता <strong>मेटाइएकोछ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}}को मेटाइएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रवन्धकको हैसियतले [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
        "rev-suppressed-unhide-diff": "यस पृष्ठको पुनरावलोकनहरू मध्ये एउटा भिन्नता <strong>थिचिएको छ</strong>।\nयसको पूर्ण विवरण [{{fullurl:{{#Special:Log}}/suppress|पृष्ठ={{FULLPAGENAMEE}}}}को थिचिएको लगमा पाउन सकिन्छ]।\nयदि चाहनु भयो भने प्रबन्धकको हैसियतमा [यो भिन्नता $1] हेर्न सक्नुहुन्छ।",
-       "rev-deleted-diff-view": "यस à¤­à¤¿à¤¨à¥\8dनताà¤\95ा à¤¸à¤\82शà¥\8bधनहरà¥\81मध्येको एउटा चाहिं <strong>मेटियो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} मेटाइएको लग]मा पाउन सकिनेछ।",
-       "rev-suppressed-diff-view": "यस à¤­à¤¿à¤¨à¥\8dनताà¤\95ा à¤¸à¤\82शà¥\8bधनहरà¥\81मध्येको एउटा चाहिं  <strong>दबाइयो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दबाइएको लग]मा पाउन सकिनेछ।",
+       "rev-deleted-diff-view": "यस à¤­à¤¿à¤¨à¥\8dनताà¤\95ा à¤¸à¤\82शà¥\8bधनहरà¥\82 मध्येको एउटा चाहिं <strong>मेटियो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} मेटाइएको लग]मा पाउन सकिनेछ।",
+       "rev-suppressed-diff-view": "यस à¤­à¤¿à¤¨à¥\8dनताà¤\95ा à¤¸à¤\82शà¥\8bधनहरà¥\82 मध्येको एउटा चाहिं  <strong>दबाइयो।<strong> \nतपाईंले यस भिन्नतालाई हेर्न सक्नुहुन्छ; सबै विवरण  [{{fullurl:{{#Special:Log}}/delete|पृष्ठ={{FULLPAGENAMEE}}}} दबाइएको लग]मा पाउन सकिनेछ।",
        "rev-delundel": "दृश्यता परिवर्तन गर्ने",
        "rev-showdeleted": "देखाउनुहोस्",
        "revisiondelete": "मेटाउने/मेटाएको रद्दगर्ने  पुनरावलोकनहरू",
        "revdelete-edit-reasonlist": "मेट्ने कार्यहरु सम्पादन गर्ने",
        "revdelete-offender": "संशोधन कर्ता:",
        "suppressionlog": "कमगरेको लग",
-       "suppressionlogtext": "मà¥\87à¤\9fà¥\8dन à¤° à¤°à¥\8bà¤\95à¥\8dनà¤\95ा à¤¨à¤¿à¤®à¤¿à¤¤à¥\8dत à¤¨à¤¿à¤®à¥\8dन à¤¸à¥\81à¤\9aà¥\80 à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b à¤\9cसमा à¤ªà¥\8dरवनà¥\8dधà¤\95बाà¤\9f à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤¸à¤®à¥\87त à¤°à¤¹à¥\87à¤\95ा à¤\9bन।\nà¤\95à¥\83पया à¤¹à¤¾à¤² à¤ªà¥\8dरयà¥\8bà¤\97मा à¤°à¤¹à¥\87à¤\95ा à¤°à¥\8bà¤\95 à¤° à¤°à¥\8bà¤\95ावà¤\9fà¤\95à¥\8b à¤¸à¥\81à¤\9aà¥\80à¤\95ा à¤²à¤¾à¤\97ि [[Special:BlockList|रà¥\8bà¤\95 à¤¸à¥\81ची]] हेर्नुहोला।",
+       "suppressionlogtext": "मà¥\87à¤\9fà¥\8dन à¤° à¤°à¥\8bà¤\95à¥\8dनà¤\95ा à¤¨à¤¿à¤®à¤¿à¤¤à¥\8dत à¤¨à¤¿à¤®à¥\8dन à¤¸à¥\82à¤\9aà¥\80 à¤°à¤¹à¥\87à¤\95à¥\8b à¤\9b à¤\9cसमा à¤ªà¥\8dरवनà¥\8dधà¤\95बाà¤\9f à¤²à¥\81à¤\95ाà¤\87à¤\8fà¤\95ा à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤¸à¤®à¥\87त à¤°à¤¹à¥\87à¤\95ा à¤\9bनà¥\8d।\nà¤\95à¥\83पया à¤¹à¤¾à¤² à¤ªà¥\8dरयà¥\8bà¤\97मा à¤°à¤¹à¥\87à¤\95ा à¤°à¥\8bà¤\95 à¤° à¤°à¥\8bà¤\95ावà¤\9fà¤\95à¥\8b à¤¸à¥\82à¤\9aà¥\80à¤\95ा à¤²à¤¾à¤\97ि [[Special:BlockList|रà¥\8bà¤\95 à¤¸à¥\82ची]] हेर्नुहोला।",
        "mergehistory": "पृष्ठ इतिहासहरु मिसाउने",
        "mergehistory-header": "यो पृष्ठ एक स्रोत पृष्ठको इतिहास कुनै अन्य पृष्ठमा मिलाउनको लागि हो।\nसुनिश्चित गर्नुस कि यो परिवर्तन पृष्ठ इतिहासमा निरन्तरता प्रदान गर्न सकोस।",
        "mergehistory-box": "दुई पृष्ठहरूको पुनरावलोकन जोड्नुहोस् :",
        "action-userrights-interwiki": "अरु विकिका प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
        "action-siteadmin": "डेटाबेस बन्दगर्ने वा खोल्ने",
        "action-sendemail": "इमेलहरु पठाउने",
-       "action-editmywatchlist": "तपाईंको निगरानी सूची सम्पादन गर्नुहोस",
+       "action-editmywatchlist": "तपाईंको निगरानी सूची सम्पादन गर्नुहोस",
        "action-viewmywatchlist": "तपाईंको निगरानी सूची हेर्नुहोस्",
        "action-viewmyprivateinfo": "तपाईंको व्यक्तिगत जानकारी हेर्नुहोस",
-       "action-editmyprivateinfo": "तपाईंको व्यक्तिगत जानकारी सम्पादन गर्नुहोस",
+       "action-editmyprivateinfo": "तपाईंको व्यक्तिगत जानकारी सम्पादन गर्नुहोस",
        "action-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "action-managechangetags": "डाटाबेसबाट ट्यागहरू बनाउने र मेटाउने",
        "action-applychangetags": "तपाईंको परिवर्तनसँगै ट्यागहरू लागु गर्ने",
        "badfilename": "फाइलको नाम \"$1\"मा सारियो।",
        "filetype-mime-mismatch": "\".$1\" फाइल विस्तार  पाइएको फाइल ($2)को MIME प्रकारसित मेल खाँदैन।",
        "filetype-badmime": "MIME \"$1\" प्रकारको फाइल उर्ध्वभरण गर्ने अनुमति छैन।",
-       "filetype-bad-ie-mime": "यो फाइल उर्ध्वभरण गर्न सकिएन किनभनें '''इण्टरनेट एक्स्प्लोरर'''ले यस फाइललाई \"$1\" बतायो जसलाई संभावित खतरनाक प्रकारको फाइल मानियो।",
+       "filetype-bad-ie-mime": "यो फाइल उर्ध्वभरण गर्न सकिएन किन भने '''इण्टरनेट एक्स्प्लोरर'''ले यस फाइललाई \"$1\" बतायो जसलाई सम्भावित खतरनाक प्रकारको फाइल मानियो।",
        "filetype-unwanted-type": "<strong>\".$1\"</strong> फाइल नचाहिने प्रकारको फाइल हो।\nमुख्यतया {{PLURAL:$3|फाइलको प्रकार हो|फाइलका प्रकार हुन्}} $2।",
        "filetype-banned-type": "<strong>\".$1\"</strong> फाइल {{PLURAL:$4|प्रकार|प्रकारहरू}} को अनुमति छैन।\nफाइल प्रकार {{PLURAL:$3|जसको|जुनको}} अनुमति छ: $2।",
        "filetype-missing": "फाइलको एक्स्टेन्शन छैन (उदा- \".jpg\")।",
        "randompage-nopages": "{{PLURAL:$2| $1 नाम भएको कुनै पृष्ट छैन|$1 नाम भएका कुनै पृष्टहरु छैनन्}}",
        "randomincategory": "श्रेणीमा रहेको अनियमित पृष्ठ",
        "randomincategory-invalidcategory": "''$1'' वैध श्रेणी नाम होइन ।",
-       "randomincategory-nopages": "यस [[:Category:$1|$1]] श्रेणीमा कुनै पनि पृष्ठ छैन ।",
+       "randomincategory-nopages": "यस [[:Category:$1|$1]] श्रेणीमा कुनै पनि पृष्ठ छैन ।",
        "randomincategory-category": "श्रेणी:",
        "randomincategory-legend": "श्रेणीमा अनियमित पृष्ठ",
        "randomincategory-submit": "जाउ",
        "statistics-header-pages": "पृष्ठहरूको तथ्याङ्क",
        "statistics-header-edits": "सम्पादनहरूको तथ्याङ्क",
        "statistics-header-users": "प्रयोगकर्ता तथ्याङ्कहरू",
-       "statistics-header-hooks": "à¤\85नà¥\8dय à¤¤à¤¥à¥\8dयाà¤\99à¥\8dà¤\95हरà¥\81",
+       "statistics-header-hooks": "à¤\85नà¥\8dय à¤¤à¤¥à¥\8dयाà¤\99à¥\8dà¤\95हरà¥\82",
        "statistics-articles": "सामग्री पृष्ठहरू",
        "statistics-pages": "पृष्ठहरू",
        "statistics-pages-desc": "विकिका सबै पृष्ठहरू, वार्तापका पृष्ठहरूसमेत, रिडाइरेक्ट, इत्यादि ।",
        "revertpage-nouser": "(सदस्य नाम हटाइएको छ) को सम्पादनहरूलाई हटाएर {{GENDER:$1|[[User:$1|$1]]}} ले अन्तिम अवतरणमा पूर्ववत गर्यो।",
        "rollback-success": "$1द्वारा उल्टाइएका सम्पादनहरू;\nपछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।",
        "sessionfailure-title": "सत्र त्रुटी",
-       "sessionfailure": "यसà¥\8dतà¥\8b à¤²à¤¾à¤\97दà¥\88à¤\9b à¤\95ि à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¤\97à¤\87न à¤¸à¤¤à¥\8dरसà¤\81à¤\97 à¤\95à¥\81नà¥\88 à¤¸à¤®à¤¸à¥\8dया à¤\9b। à¤¸à¤¤à¥\8dर à¤\85पहरणबाà¤\9f à¤¬à¤\9aाà¤\89न à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¸à¤¾à¤µà¤§à¤¾à¤¨à¥\80à¤\95à¥\8b à¤°à¥\82पमा à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¯à¥\8b à¤\95à¥\8dरियाà¤\95लाप à¤°à¤¦à¥\8dद à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b। à¤\95à¥\83पया à¤ªà¤\9bाडà¥\80 à¤\9cानà¥\81हà¥\8bस à¤° à¤ªà¥\83षà¥\8dठलाà¤\88 à¤ªà¥\81नà¤\83 à¤²à¥\8bड à¤\97रà¥\8dनà¥\81हà¥\8bस, अनि फेरी प्रयास गर्नुहोला।",
+       "sessionfailure": "यसà¥\8dतà¥\8b à¤²à¤¾à¤\97à¥\8dदà¥\88à¤\9b à¤\95ि à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤²à¤\97à¤\87न à¤¸à¤¤à¥\8dरसà¤\81à¤\97 à¤\95à¥\81नà¥\88 à¤¸à¤®à¤¸à¥\8dया à¤\9b। à¤¸à¤¤à¥\8dर à¤\85पहरणबाà¤\9f à¤¬à¤\9aाà¤\89न à¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¸à¤¾à¤µà¤§à¤¾à¤¨à¥\80à¤\95à¥\8b à¤°à¥\82पमा à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¯à¥\8b à¤\95à¥\8dरियाà¤\95लाप à¤°à¤¦à¥\8dद à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b। à¤\95à¥\83पया à¤ªà¤\9bाडà¥\80 à¤\9cानà¥\81हà¥\8bस à¤° à¤ªà¥\83षà¥\8dठलाà¤\88 à¤ªà¥\81नà¤\83 à¤²à¥\8bड à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d, अनि फेरी प्रयास गर्नुहोला।",
        "changecontentmodel-title-label": "पाना शीर्षक",
        "changecontentmodel-reason-label": "कारण:",
        "logentry-contentmodel-change-revertlink": "पहिलेको रुपमा फर्काउने",
        "ipbother": "अरु समय:",
        "ipboptions": "२ घण्टाहरू:2 hours,१ दिन :1 day,३ दिनहरू:3 days,१ हप्ता:1 week,२ हप्ताहरू:2 weeks,१ महिना:1 month,३ महिनाहरू:3 months,६ महिनाहरू:6 months,१ वर्ष:1 year,अनगिन्ती:infinite",
        "ipbhidename": "प्रयोगकर्ताको नाम सम्पादनबाट र सूचीबाट हटाउने",
-       "ipbwatchuser": "यो प्रयोगकर्ताको  प्रयपोगकर्ता र वार्तलाप पृष्ठ हेर्नुहोस्",
+       "ipbwatchuser": "यो प्रयोगकर्ताको प्रयपोगकर्ता पृष्ठ र वार्तालाप पृष्ठ हेर्नुहोस्",
        "ipb-disableusertalk": "यस प्रयोगकर्तालाई निषेधित समयमा आफ्नै वार्तालाप पृष्ठ सम्पादन गर्न नदिने",
        "ipb-change-block": "निम्म स्थितीमा प्रयोगकर्तालाई पुन: निषेध गर्ने",
        "ipb-confirm": "रोक सुनिश्चित गर्ने",
        "blocklist-reason": "कारण",
        "ipblocklist-submit": "खोज्ने",
        "ipblocklist-localblock": "स्थानीय रोक",
-       "ipblocklist-otherblocks": "à¤\85नà¥\8dय {{PLURAL:$1|रà¥\8bà¤\95|रà¥\8bà¤\95हरà¥\81}}",
+       "ipblocklist-otherblocks": "à¤\85नà¥\8dय {{PLURAL:$1|रà¥\8bà¤\95|रà¥\8bà¤\95हरà¥\82}}",
        "infiniteblock": "अनिश्चित काल",
        "expiringblock": "$1 को दिन  $2 मा सकिनेछ",
        "anononlyblock": "अज्ञातहरु मात्र",
        "blocklog-showsuppresslog": "यो प्रयोगकर्तालाई पहिला रोक लगाइएको र लुकेको थियो ।\nलु्काइएको लग सन्दर्भको निम्ति तल दिइन्छ:",
        "blocklogentry": " [[$1]]लाई $2 $3 समयसम्म को लागि निषेध गरिएको छ",
        "reblock-logentry": "$2 $3 मा सकिने गरि  [[$1]] को निषेध स्थिति परिवर्तन गरिएको छ ।",
-       "blocklogtext": "यà¥\8b à¤²à¤\97 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤°à¥\8bà¤\95ावà¤\9f à¤° à¤«à¥\81à¤\95à¥\81वा à¤\95ारà¥\8dयहरà¥\81को हो।\nस्वतः रोकिएका आईपी ठेगानाहरू सूचीमा छैनन्।\nवर्तमानका चालू रोक र प्रतिबन्धहरूको सूचीकोलागि हेर्नुहोस् [[Special:BlockList|आईपी निषेध सूची]]।",
+       "blocklogtext": "यà¥\8b à¤²à¤\97 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95à¥\8b à¤°à¥\8bà¤\95ावà¤\9f à¤° à¤«à¥\81à¤\95à¥\81वा à¤\95ारà¥\8dयहरà¥\82को हो।\nस्वतः रोकिएका आईपी ठेगानाहरू सूचीमा छैनन्।\nवर्तमानका चालू रोक र प्रतिबन्धहरूको सूचीकोलागि हेर्नुहोस् [[Special:BlockList|आईपी निषेध सूची]]।",
        "unblocklogentry": "$1 लाई अनिषेधित गरियो",
        "block-log-flags-anononly": "अज्ञात प्रयोगकर्ताहरू मात्र",
        "block-log-flags-nocreate": "खाता खोल्न निस्क्रिय पारिएको",
        "ipb_hide_invalid": "यो खातालाई दबाउन सकिने छैन; किन कि यसका धेरै {{PLURAL:$1|एक सम्पादन|$1 सम्पादनहरू}} छन्।",
        "ipb_already_blocked": "\"$1\"लाई पहिले नै रोक लगाइएको छ",
        "ipb-needreblock": "$1लाई अघिबाट नैं प्रतिबन्ध लगाइएकोछ।\nके तपाईं यसको व्यवस्थालाई परिवर्तन गर्न चाहनुहुन्छ?",
-       "ipb-otherblocks-header": "à¤\85रà¥\81 {{PLURAL:$1|रà¥\8bà¤\95|रà¥\8bà¤\95हरà¥\81}}",
+       "ipb-otherblocks-header": "à¤\85रà¥\81 {{PLURAL:$1|रà¥\8bà¤\95|रà¥\8bà¤\95हरà¥\82}}",
        "unblock-hideuser": "यस प्रयोगकर्तालाई रोक फुकुवा गर्न सक्नु हुन्न, यस प्रयोगकर्ताको नाम लुकेको छ।",
        "ipb_cant_unblock": "त्रुटी: रोक आइडी $1 भेटिएन। या यो पहिले नै खोलिइसकेको हुनसक्छ ।",
        "ipb_blocked_as_range": "त्रुटी:  IP ठेगाना $1 is लाई सिधै रोकलगाइएको छैन र यस रोकलाई खोल्न मिल्दैन\nयो एक रेन्ज रोक $2, को अन्तर्गत रहेको छ जसलाई रोक खोल्न मिल्छ ।",
        "ipbnounblockself": "तपाईं आफैले आफैलाई रोक खुलाउन सक्नुहुन्न ।",
        "lockdb": "डेटाबेस ताल्चामार्ने",
        "unlockdb": "डेटाबेसको ताल्चा खोल्ने",
-       "lockdbtext": "डà¥\87à¤\9fाबà¥\87समा à¤¤à¤¾à¤²à¤¾ à¤²à¤\97ाà¤\89नालà¥\87 à¤¸à¤¬à¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन, à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\82à¤\9aà¥\80मा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन, à¤\86फà¥\8dनà¥\8b à¤§à¥\8dयानसà¥\82à¤\9aà¥\80मा à¤¸à¤®à¥\8dपादन, à¤° à¤\85नà¥\8dय à¤µà¤¸à¥\8dतà¥\81 à¤\9cसà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¡à¥\87à¤\9fाबà¥\87समा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\87à¤\82 हुन्छ, त्यसबाट वन्चित हुनेछ। कृपया यो सुनिश्चित गर्नुहोस् कि तपाईं यो गर्न चाहनुहुन्छ, र तपाईं रक्षण पश्चात ताला खोल्नुहुन्छ ।",
+       "lockdbtext": "डà¥\87à¤\9fाबà¥\87समा à¤¤à¤¾à¤²à¤¾ à¤²à¤\97ाà¤\89नालà¥\87 à¤¸à¤¬à¥\88 à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤ªà¥\83षà¥\8dठ à¤¸à¤®à¥\8dपादन, à¤\86फà¥\8dनà¥\8b à¤\85भिरà¥\82à¤\9aà¥\80मा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन, à¤\86फà¥\8dनà¥\8b à¤§à¥\8dयानसà¥\82à¤\9aà¥\80मा à¤¸à¤®à¥\8dपादन, à¤° à¤\85नà¥\8dय à¤µà¤¸à¥\8dतà¥\81 à¤\9cसà¤\95à¥\8b à¤²à¤¾à¤\97ि à¤¡à¥\87à¤\9fाबà¥\87समा à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dनà¥\81 à¤ªà¤°à¥\8dनà¥\87 हुन्छ, त्यसबाट वन्चित हुनेछ। कृपया यो सुनिश्चित गर्नुहोस् कि तपाईं यो गर्न चाहनुहुन्छ, र तपाईं रक्षण पश्चात ताला खोल्नुहुन्छ ।",
        "unlockdbtext": "डेटाबेसको ताला खोल्नका लागि सबै प्रयोगकर्ता पृष्ठ सम्पादन, आफ्नो अभिरूचीहरूमा परिवर्तन, आफ्नो ध्यानसूचीमा सम्पादन, र अन्य वस्तु जसको लागि डेटाबेसमा परिवर्तन गर्नु पर्छ, को सक्षमतालाई पुनर्स्थापित गर्नछ। कृपया यो सुनिश्चित गर्नुस कि तपाईं यो गर्न चाहनुहुन्छ।",
        "lockconfirm": "हो, म साँच्चिकै डेटाबेस थुन्न चाहन्छु।",
        "unlockconfirm": "हो , म साँच्चै  डेटाबेसको ताल्चा खोल्न चाहन्छु ।",
        "import-error-special": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यो एउटा यस्तो विशेष नामस्थान अन्तर्गत आउँछ जसमा पृष्ठ बनाउन सकिंदैन।",
        "import-error-invalid": "पृष्ठ \"$1\" आयात गर्न सकिएन किनभने यसको आयात पश्चात जुन नाम हुन्थ्यो त्यो यस विकिमा मान्य छैन।",
        "import-error-unserialize": "पृष्ठ \"$1\" को संशोधन $2 लाई क्रमबाट हटाउन सकिएन। संशोधनको बारेमा भनिएको छ कि सामग्री नमूना $3 लाई क्रम $4 को रूप प्रयोगमा ल्याइएको थियो।",
-       "import-error-bad-location": "संशोधन $2 जसमा सामग्री नमूनाहरू $3 मा प्रयोग गरिएको छ, लाई यस विकिमा \"$1\" मा सङ्ग्रह गर्न सकिंदैन, किनकि त्यो नमूना यस पृष्ठको नमूनहरू भन्दा भिन्न छ।",
+       "import-error-bad-location": "सà¤\82शà¥\8bधन $2 à¤\9cसमा à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤¨à¤®à¥\82नाहरà¥\82 $3 à¤®à¤¾ à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रिà¤\8fà¤\95à¥\8b à¤\9b, à¤²à¤¾à¤\88 à¤¯à¤¸ à¤µà¤¿à¤\95िमा \"$1\" à¤®à¤¾ à¤¸à¤\99à¥\8dà¤\97à¥\8dरह à¤\97रà¥\8dन à¤¸à¤\95िà¤\82दà¥\88न, à¤\95िनà¤\95ि à¤¤à¥\8dयà¥\8b à¤¨à¤®à¥\82ना à¤¯à¤¸ à¤ªà¥\83षà¥\8dठà¤\95à¥\8b à¤¨à¤®à¥\82नाहरà¥\82 à¤­à¤¨à¥\8dदा à¤­à¤¿à¤¨à¥\8dन à¤\9b।",
        "import-options-wrong": "गलत {{PLURAL:$2|विकल्प|विकल्पहरू}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "दिइएको उपसर्ग पृष्ठ शीर्षक अमान्य छ।",
        "import-rootpage-nosubpage": "दिइएको उपसर्ग पृष्ठ \"$1\" को नामस्थानमा उप-पृष्ठ बनाउन सकिंदैन।",
        "creditspage": "क्रेडिट पृष्ठ",
        "nocredits": "यो पृष्ठको लागि कुनै श्रेय उपलब्ध छैन ।",
        "spamprotectiontitle": "स्प्याम सुरक्षा फिल्टर",
-       "spamprotectiontext": "तपाà¤\88à¤\82लà¥\87 à¤\9cà¥\81न à¤ªà¤¨à¥\8dना à¤²à¤¾à¤\87 à¤¸à¥\87भ à¤\97रà¥\8dन à¤\9aाहनà¥\81हà¥\81नà¥\8dथà¥\8dयà¥\8b à¤¤à¥\8dयसलाà¤\88 à¤°à¤¦à¥\8dदà¥\80 à¤\9bननà¥\80 à¤\95ारà¥\8dयà¤\95à¥\8dरमलà¥\87 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\8fà¤\95à¥\8b à¤\9b।\nयà¥\8b à¤¸à¤\82भवतà¤\83 à¤\95à¥\81नà¥\88 à¤\95रà¥\8dपसà¥\82à¤\9aित à¤¬à¤¾à¤¹à¤¿à¤°à¥\80 à¤¸à¥\8dथल à¤¸à¤\82à¤\97 à¤¸à¤®à¥\8dबनà¥\8dधित à¤\95डà¥\80 को कारणले भएको हुन सक्छ।",
+       "spamprotectiontext": "तपाà¤\88à¤\82लà¥\87 à¤\9cà¥\81न à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¸à¥\87भ à¤\97रà¥\8dन à¤\9aाहनà¥\81हà¥\81नà¥\8dथà¥\8dयà¥\8b à¤¤à¥\8dयसलाà¤\88 à¤°à¤¦à¥\8dदà¥\80 à¤\9bननà¥\80 à¤\95ारà¥\8dयà¤\95à¥\8dरमलà¥\87 à¤°à¥\8bà¤\95 à¤²à¤\97ाà¤\8fà¤\95à¥\8b à¤\9b।\nयà¥\8b à¤¸à¤\82भवतà¤\83 à¤\95à¥\81नà¥\88 à¤\95रà¥\8dपसà¥\82à¤\9aित à¤¬à¤¾à¤¹à¤¿à¤°à¥\80 à¤¸à¥\8dथलसà¤\81à¤\97 à¤¸à¤®à¥\8dबनà¥\8dधित à¤²à¤¿à¤\99à¥\8dà¤\95को कारणले भएको हुन सक्छ।",
        "spamprotectionmatch": "निम्न पाठले हाम्रो स्प्प्याम फिल्टर : $1 घच्घच्यायो",
        "spambot_username": "MediaWiki स्पाम सर-सफाइ",
        "spam_reverting": "$1 मा कडीहरू  नभएका पुरानो अवतरणमा पुनर्स्थापित गर्दै",
        "confirmemail_loggedin": "तपाईंको इमेल ठेगाना प्रमाणित भएको छ।",
        "confirmemail_subject": "{{SITENAME}} ई मेलl ठेगानाको पुष्टि",
        "confirmemail_body": "कसैले, सायद तपाईंले, आई पी ठेगाना $1बाट,\n{{SITENAME}}मा एउटा  खाता  \"$2\"को नाममा यस ई मेल ठेगानामा  पञ्जीकरण गरेकोछ।\n\nयो खाता साँच्ची नैं तपाईंको हो भनेर पुष्टि गर्न र {{SITENAME}}मा यो ई मेलका सुविधाहरु  सक्रिय गर्न तपाईंको ब्राउजरमा यो लिंक खोल्नुहोस्:\n\n$3 \n\nयदि त्यो खाता तपाईंले पञ्जीकरण गर्नु भएको *होइन* भनें, ई मेलको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
-       "confirmemail_body_changed": "à¤\95सà¥\88लà¥\87, à¤¸à¤¾à¤¯à¤¦ à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, à¤\86à¤\88 à¤ªà¥\80 à¤ à¥\87à¤\97ाना $1बाà¤\9f,\n{{SITENAME}}मा \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाताà¤\95à¥\8b  à¤\88 à¤®à¥\87ल à¤ à¥\87à¤\97ाना à¤¯à¤¸ à¤ à¥\87à¤\97ानामा  à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\87à¤\95à¥\8bà¤\9b।\n\nयà¥\8b à¤\96ाता à¤¸à¤¾à¤\81à¤\9aà¥\8dà¤\9aà¥\80 à¤¨à¥\88à¤\82 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87र à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤° {{SITENAME}}मा à¤¯à¥\8b à¤\88 à¤®à¥\87लà¤\95ा à¤¸à¥\81विधाहरà¥\81  à¤ªà¥\81नà¤\83 à¤¸à¤\95à¥\8dरिय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरमा à¤¯à¥\8b à¤²à¤¿à¤\82à¤\95 à¤\96à¥\8bलà¥\8dनà¥\81हà¥\8bसà¥\8d:\n\n$3 \n\nयदि à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b *हà¥\8bà¤\87न* à¤­à¤¨à¥\87à¤\82, ई मेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
-       "confirmemail_body_set": "à¤\95सà¥\88लà¥\87, à¤¸à¤¾à¤¯à¤¦ à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, à¤\86à¤\88पà¥\80 à¤ à¥\87à¤\97ाना $1बाà¤\9f,\n{{SITENAME}}मा \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाताà¤\95à¥\8b à¤\88मà¥\87ल à¤ à¥\87à¤\97ाना à¤¯à¤¸ à¤ à¥\87à¤\97ानासित à¤\9cà¥\8bडà¥\87à¤\95à¥\8b à¤\9b।\n\nयà¥\8b à¤\96ाता à¤¸à¤¾à¤\81à¤\9aà¥\8dà¤\9aà¥\80 à¤¨à¥\88à¤\82 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87र à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤° {{SITENAME}}मा à¤¯à¥\8b à¤\88मà¥\87लà¤\95ा à¤¸à¥\81विधाहरà¥\81 à¤ªà¥\81नà¤\83 à¤¸à¤\95à¥\8dरिय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरमा à¤¯à¥\8b à¤²à¤¿à¤\99à¥\8dà¤\95 à¤\96à¥\8bलà¥\8dनà¥\81हà¥\8bसà¥\8d:\n\n$3 \n\nयदि à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b *हà¥\8bà¤\87न* à¤­à¤¨à¥\87à¤\82, ईमेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिङ्क पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
+       "confirmemail_body_changed": "à¤\95सà¥\88लà¥\87, à¤¸à¤¾à¤¯à¤¦ à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, à¤\86à¤\88 à¤ªà¥\80 à¤ à¥\87à¤\97ाना $1बाà¤\9f,\n{{SITENAME}}मा \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाताà¤\95à¥\8b  à¤\88 à¤®à¥\87ल à¤ à¥\87à¤\97ाना à¤¯à¤¸ à¤ à¥\87à¤\97ानामा  à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\87à¤\95à¥\8bà¤\9b।\n\nयà¥\8b à¤\96ाता à¤¸à¤¾à¤\81à¤\9aà¥\8dà¤\9aà¥\80 à¤¨à¥\88à¤\82 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87र à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤° {{SITENAME}}मा à¤¯à¥\8b à¤\88 à¤®à¥\87लà¤\95ा à¤¸à¥\81विधाहरà¥\82  à¤ªà¥\81नà¤\83 à¤¸à¤\95à¥\8dरिय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरमा à¤¯à¥\8b à¤²à¤¿à¤\82à¤\95 à¤\96à¥\8bलà¥\8dनà¥\81हà¥\8bसà¥\8d:\n\n$3 \n\nयदि à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b *हà¥\8bà¤\87न* à¤­à¤¨à¥\87, ई मेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिंक पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
+       "confirmemail_body_set": "à¤\95सà¥\88लà¥\87, à¤¸à¤¾à¤¯à¤¦ à¤¤à¤ªà¤¾à¤\88à¤\82लà¥\87, à¤\86à¤\88पà¥\80 à¤ à¥\87à¤\97ाना $1बाà¤\9f,\n{{SITENAME}}मा \"$2\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\96ाताà¤\95à¥\8b à¤\88मà¥\87ल à¤ à¥\87à¤\97ाना à¤¯à¤¸ à¤ à¥\87à¤\97ानासित à¤\9cà¥\8bडà¥\87à¤\95à¥\8b à¤\9b।\n\nयà¥\8b à¤\96ाता à¤¸à¤¾à¤\81à¤\9aà¥\8dà¤\9aà¥\80 à¤¨à¥\88à¤\82 à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¹à¥\8b à¤­à¤¨à¥\87र à¤ªà¥\81षà¥\8dà¤\9fि à¤\97रà¥\8dन à¤° {{SITENAME}}मा à¤¯à¥\8b à¤\88मà¥\87लà¤\95ा à¤¸à¥\81विधाहरà¥\82 à¤ªà¥\81नà¤\83 à¤¸à¤\95à¥\8dरिय à¤\97रà¥\8dन à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b à¤¬à¥\8dराà¤\89à¤\9cरमा à¤¯à¥\8b à¤²à¤¿à¤\99à¥\8dà¤\95 à¤\96à¥\8bलà¥\8dनà¥\81हà¥\8bसà¥\8d:\n\n$3 \n\nयदि à¤¤à¥\8dयà¥\8b à¤\96ाता à¤¤à¤ªà¤¾à¤\88à¤\82à¤\95à¥\8b *हà¥\8bà¤\87न* à¤­à¤¨à¥\87, ईमेल ठेगानाको पुष्टिकरण रद्द गर्न यो लिङ्क पहिल्याउनुहोस्:\n\n$5\n\nयो पुष्टिकरणको समय  $4 मा सकिनेछ।",
        "confirmemail_invalidated": "ई मेल ठेगाना रद्द भएको पुष्टिकरण",
        "invalidateemail": "इमेल यकिन कार्य रद्द गर्नुहोस्",
        "scarytranscludedisabled": "[अन्तरविकि दस्तावेज अन्तरकरण निस्क्रिय]",
        "tag-filter-submit": "फिल्टर",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
        "tags-title": "ट्यागहरु",
-       "tags-intro": "यà¥\8b à¤ªà¥\83षà¥\8dठलà¥\87 à¤ªà¥\81à¤\9aà¥\8dà¤\9bरहरà¥\81 à¤¸à¥\81à¤\9aà¥\80à¤\95à¥\83त à¤\97रà¥\8dà¤\9b à¤\9cससà¤\81à¤\97 à¤¯à¥\8b à¤¸à¤«à¥\8dà¤\9fवà¥\87यरलà¥\87 à¤\9aिनà¥\8b à¤²à¤\97ाà¤\89न à¤° à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dन à¤¸à¤\95à¥\8dà¤\9b à¤° à¤¤à¤¿à¤¨à¤\95ा à¤\85रà¥\8dथहरà¥\81 ।",
+       "tags-intro": "यà¥\8b à¤ªà¥\83षà¥\8dठलà¥\87 à¤\9fà¥\8dयाà¤\97हरà¥\82 à¤¸à¥\82à¤\9aà¥\80à¤\95à¥\83त à¤\97रà¥\8dà¤\9b à¤\9cससà¤\81à¤\97 à¤¯à¥\8b à¤¸à¤«à¥\8dà¤\9fवà¥\87यरलà¥\87 à¤\9aिनà¥\8b à¤²à¤\97ाà¤\89न à¤° à¤¸à¤®à¥\8dपादन à¤\97रà¥\8dन à¤¸à¤\95à¥\8dà¤\9b à¤° à¤¤à¤¿à¤¨à¤\95ा à¤\85रà¥\8dथहरà¥\82 ।",
        "tags-tag": "आन्तरिक ट्याग नाम",
        "tags-display-header": "परिवर्तन सूचीहरूमाथि झलक",
        "tags-description-header": "पूर्ण अर्थको वर्णन",
index fe275cc..56b0a91 100644 (file)
        "rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergeven.",
        "rcfilters-filterlist-title": "Filters",
        "rcfilters-filterlist-whatsthis": "Hoe werkt dit?",
-       "rcfilters-filterlist-feedbacklink": "Geef terugkoppeling op de nieuwe (beta)filters",
+       "rcfilters-filterlist-feedbacklink": "Laat ons weten wat u denkt over deze (nieuwe) filterhulpmiddelen",
        "rcfilters-highlightbutton-title": "Resultaten markeren",
        "rcfilters-highlightmenu-title": "Kies een kleur",
        "rcfilters-highlightmenu-help": "Selecteer een kleur om deze eigenschap uit te lichten",
        "rcfilters-liveupdates-button": "Liveupdates",
        "rcfilters-liveupdates-button-title-on": "Live updates uitschakelen",
        "rcfilters-liveupdates-button-title-off": "Toon nieuwe wijzigingen op het moment dat ze gebeuren",
-       "rcfilters-watchlist-markSeen-button": "Alle wijzigingen markeren als bezocht.",
+       "rcfilters-watchlist-markseen-button": "Alle wijzigingen markeren als bezocht.",
+       "rcfilters-watchlist-edit-watchlist-button": "Bewerk uw volglijst",
        "rcnotefrom": "Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).",
        "rclistfromreset": "Datum selectie opnieuw instellen",
        "rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
        "unwatchthispage": "Niet meer volgen",
        "notanarticle": "Is geen pagina",
        "notvisiblerev": "De laatste versie van een andere gebruiker is verwijderd",
-       "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst. Overlegpagina's worden niet meegeteld.",
+       "watchlist-details": "Er {{PLURAL:$1|staat één pagina|staan $1 pagina's}} op uw volglijst (inclusief overlegpagina's).",
        "wlheader-enotif": "U wordt per e-mail gewaarschuwd.",
        "wlheader-showupdated": "Pagina's die zijn bewerkt sinds uw laatste bezoek worden '''vet''' weergegeven.",
        "wlnote": "Hieronder {{PLURAL:$1|staat de laaste wijziging|staan de laatste $1 wijzigingen}} in {{PLURAL:$2|het laatste uur|de laatste $2 uur}} per $3 om $4.",
index a823223..e2bb178 100644 (file)
        "rcfilters-savedqueries-apply-label": "Lagra innstillingar",
        "rcfilters-savedqueries-add-new-title": "Lagra gjeldande filterinnstillingar",
        "rcfilters-clear-all-filters": "Fjern alle filter",
+       "rcfilters-show-new-changes": "Sjå dei nyaste endringane",
        "rcfilters-search-placeholder": "Filtrer siste endringar (gå gjennom liste eller skriv filternamn)",
        "rcfilters-invalid-filter": "Ugyldig filter",
        "rcfilters-empty-filter": "Ingen aktive filter. Alle bidrag er viste.",
index a97428c..8fcd2b7 100644 (file)
        "rcfilters-empty-filter": "Brak aktywnych filtrów. Wyświetlane są wszystkie zmiany.",
        "rcfilters-filterlist-title": "Filtry",
        "rcfilters-filterlist-whatsthis": "Jak działają?",
-       "rcfilters-filterlist-feedbacklink": "Podziel się swoją opinią na temat tych nowych (beta) filtrów",
+       "rcfilters-filterlist-feedbacklink": "Napisz co sądzisz o tych nowych narzędziach filtrowania",
        "rcfilters-highlightbutton-title": "Podświetl wyniki",
        "rcfilters-highlightmenu-title": "Wybierz kolor",
        "rcfilters-highlightmenu-help": "Wybierz kolor, aby podświetlić tę właściwość",
        "rcfilters-liveupdates-button": "Aktualizacje na bieżąco",
        "rcfilters-liveupdates-button-title-on": "Wyłącz aktualizacje na bieżąco",
        "rcfilters-liveupdates-button-title-off": "Wyświetlaj nowe zmiany zaraz po tym jak nastąpią",
-       "rcfilters-watchlist-markSeen-button": "Oznacz wszystkie zmiany jako obejrzane",
+       "rcfilters-watchlist-markseen-button": "Oznacz wszystkie zmiany jako obejrzane",
+       "rcfilters-watchlist-edit-watchlist-button": "Edytuj swoją listę obserwowanych stron",
        "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfromreset": "Zresetuj wybór daty",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
index 3480433..d1c9de9 100644 (file)
                        "Felipe L. Ewald",
                        "WikiUser22222",
                        "BarbaraAckles",
-                       "Trigonometria87"
+                       "Trigonometria87",
+                       "RadiX"
                ]
        },
        "tog-underline": "Link sublinhado:",
        "rcfilters-liveupdates-button": "Atualizações instantâneas",
        "rcfilters-liveupdates-button-title-on": "Desativar as atualizações ao vivo",
        "rcfilters-liveupdates-button-title-off": "Exibir novas mudanças à medida que elas acontecem",
-       "rcfilters-watchlist-markSeen-button": "Marque todas as mudanças como visto",
-       "rcfilters-watchlist-editWatchlist-button": "Edite sua lista de páginas vigiadas",
+       "rcfilters-watchlist-markseen-button": "Marque todas as mudanças como visto",
+       "rcfilters-watchlist-edit-watchlist-button": "Edite sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
        "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Redefinir seleção da data",
        "unwatchthispage": "Parar de vigiar esta página",
        "notanarticle": "Não é uma página de conteúdo",
        "notvisiblerev": "Edição eliminada",
-       "watchlist-details": "{{PLURAL:$1|$1 página|$1 páginas}} na sua lista de páginas vigiadas, excluindo as páginas de discussão.",
+       "watchlist-details": "{{PLURAL:$1|$1 página está|$1 páginas estão}} na sua lista de páginas vigiadas (incluindo páginas de discussão).",
        "wlheader-enotif": "A notificação por email encontra-se ativada.",
        "wlheader-showupdated": "As páginas modificadas desde a sua última visita são mostradas em <strong>negrito</strong>.",
        "wlnote": "A seguir {{PLURAL:$1|está a última alteração ocorrida|estão as últimas <strong>$1</strong> alterações ocorridas}} {{PLURAL:$2|na última hora|nas últimas <strong>$2</strong> horas}} até $3, $4.",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]",
        "logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|mudou}} membros do grupo para {{GENDER:$6|$3}} de $4 para $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|alterou}} os grupos de usuário de {{GENDER:$6|$3}} de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3",
index 7f9026d..1839dfd 100644 (file)
        "rcfilters-liveupdates-button": "Atualizações instantâneas",
        "rcfilters-liveupdates-button-title-on": "Desligar atualizações ao vivo",
        "rcfilters-liveupdates-button-title-off": "Apresentar mudanças novas à medida que acontecem",
-       "rcfilters-watchlist-markSeen-button": "Marcar todas as modificações como já vistas",
+       "rcfilters-watchlist-markseen-button": "Marcar todas as modificações como já vistas",
        "rcnotefrom": "Abaixo {{PLURAL:$5|está a mudança|estão as mudanças}} desde <strong>$2</strong> (mostradas até <strong>$1</strong>).",
        "rclistfromreset": "Reiniciar a seleção da data",
        "rclistfrom": "Mostrar as novas mudanças a partir das $2 de $3",
index 800ee08..897728e 100644 (file)
@@ -91,6 +91,7 @@
                        "Mormegil",
                        "Mpradeep",
                        "Murma174",
+                       "MusikAnimal",
                        "Najami",
                        "Naudefj",
                        "Nemo bis",
        "rcfilters-liveupdates-button": "Label for the button to enable or disable live updates on [[Special:RecentChanges]]",
        "rcfilters-liveupdates-button-title-on": "Title for the button to enable or disable live updates on [[Special:RecentChanges]] when the feature is ON.",
        "rcfilters-liveupdates-button-title-off": "Title for the button to enable or disable live updates on [[Special:RecentChanges]] when the feature is OFF.",
-       "rcfilters-watchlist-markSeen-button": "Label for the button to mark all changes as seen on [[Special:Watchlist]] when using the structured filters interface.",
-       "rcfilters-watchlist-editWatchlist-button": "Label for the button to edit the watched pages on [[Special:Watchlist]] when using the structured filters interface.\n\nCf. {{msg-mw|watchlisttools-edit}}.",
+       "rcfilters-watchlist-markseen-button": "Label for the button to mark all changes as seen on [[Special:Watchlist]] when using the structured filters interface.",
+       "rcfilters-watchlist-edit-watchlist-button": "Label for the button to edit the watched pages on [[Special:Watchlist]] when using the structured filters interface.\n\nCf. {{msg-mw|watchlisttools-edit}}.",
        "rcfilters-watchlist-showupdated": "Message at the top of [[Special:Watchlist]] when the Structured filters are enabled that describes what unseen changes look like.\n\nCf. {{msg-mw|wlheader-showupdated}}",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a selection of a certain date range.",
        "sp-contributions-explain": "{{optional}}",
        "sp-contributions-footer": "{{ignored}}This is the footer for users that are not anonymous or newbie on [[Special:Contributions]].",
        "sp-contributions-footer-anon": "{{ignored}}This is the footer for anonymous users on [[Special:Contributions]].",
+       "sp-contributions-footer-anon-range": "{{ignored}}This is the footer for IP ranges on [[Special:Contributions]].",
        "sp-contributions-footer-newbies": "{{ignored}}This is the footer for newbie users on [[Special:Contributions]].",
+       "sp-contributions-outofrange": "Message shown when a user tries to view contributions of an IP range that's too large. $1 is the numerical limit imposed on the CIDR range.",
        "whatlinkshere": "The text of the link in the toolbox (on the left, below the search menu) going to [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Whatlinkshere}}\n* {{msg-mw|Accesskey-t-whatlinkshere}}\n* {{msg-mw|Tooltip-t-whatlinkshere}}",
        "whatlinkshere-title": "Title of the special page [[Special:WhatLinksHere]]. This page appears when you click on the 'What links here' button in the toolbox. $1 is the name of the page concerned.",
        "whatlinkshere-summary": "{{doc-specialpagesummary|whatlinkshere}}",
index c752011..5fb74ed 100644 (file)
        "botpasswords-label-grants": "Assegnazziune applicabbile:",
        "botpasswords-label-grants-column": "Assegnazziune",
        "botpasswords-bad-appid": "'U nome d'u bot \"$1\" non g'è valide.",
+       "botpasswords-insert-failed": "'Mbossibbile aggiungere 'u nome bot \"$1\". Ha state ggià mise?",
+       "botpasswords-update-failed": "'Mbossibbile aggiornà 'u nome bot \"$1\". Ha state ggià scangellate?",
        "botpasswords-created-title": "Passuord d'u bot ccrejate",
+       "botpasswords-created-body": "'A passuord pu bot de nome \"$1\" de l'utende \"$2\" ha state ccrejate.",
        "botpasswords-updated-title": "Passuord d'u bot cangiate",
+       "botpasswords-updated-body": "'A passuord pu bot de nome \"$1\" de l'utende \"$2\" ha state aggiornate.",
        "botpasswords-deleted-title": "Passuord d'u bot scangellate",
+       "botpasswords-deleted-body": "'A passuord pu bot de nome \"$1\" de l'utende \"$2\" ha state scangellate.",
        "resetpass_forbidden": "Le Password non ge ponne cangià",
        "resetpass_forbidden-reason": "Le passuord non ge ponne essere cangiate: $1",
        "resetpass-no-info": "Tu a essere colleghete pe accedere a sta pàgene direttamende.",
        "unwatchthispage": "No condrollà cchiù 'a pàgene",
        "notanarticle": "Non g'è 'na vosce",
        "notvisiblerev": "'A revisione ha state scangellete",
-       "watchlist-details": "{{PLURAL:$1|$1 pàgene|$1 pàggene}} jndr'à l'elenghe de le pàggene condrollate, scartanne le pàggene de le 'ngazzaminde.",
+       "watchlist-details": "{{PLURAL:$1|$1 pàgene jè|$1 pàggene stonne}} jndr'à l'elenghe de le pàggene condrollate (cchiù le pàggene de le 'ngazzaminde).",
        "wlheader-enotif": "* Notifiche pe email abbilitate.",
        "wlheader-showupdated": "* Le pàggene ca onne state cangiate da l'urtema visite avènene fatte vedè in '''grascette'''",
        "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme <strong>$1</strong> cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme <strong>$2</strong> ore}}, jndr'à $3, $4.",
index 3b85640..c34cec3 100644 (file)
        "rcfilters-empty-filter": "Нет активных фильтров. Показываются все правки.",
        "rcfilters-filterlist-title": "Фильтры",
        "rcfilters-filterlist-whatsthis": "Как это работает?",
-       "rcfilters-filterlist-feedbacklink": "Ð\9eÑ\81Ñ\82авиÑ\82Ñ\8c Ð¾Ñ\82зÑ\8bв Ð¾ Ð½Ð¾Ð²Ñ\8bÑ\85 (беÑ\82а) Ñ\84илÑ\8cÑ\82Ñ\80аÑ\85",
+       "rcfilters-filterlist-feedbacklink": "РаÑ\81Ñ\81кажиÑ\82е Ð½Ð°Ð¼, Ñ\87Ñ\82о Ð²Ñ\8b Ð´Ñ\83маеÑ\82е Ð¾Ð± Ñ\8dÑ\82иÑ\85 (новÑ\8bÑ\85) Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82аÑ\85 Ñ\84илÑ\8cÑ\82Ñ\80аÑ\86ии",
        "rcfilters-highlightbutton-title": "Выделить результаты",
        "rcfilters-highlightmenu-title": "Выберите цвет",
        "rcfilters-highlightmenu-help": "Выберите цвет, чтобы подсветить это свойство",
        "rcfilters-liveupdates-button": "Обновлять автоматически",
        "rcfilters-liveupdates-button-title-on": "Отключить автоматические обновления",
        "rcfilters-liveupdates-button-title-off": "Показывать новые изменения сразу после их появления",
-       "rcfilters-watchlist-markSeen-button": "Отметить все изменения как просмотренные",
+       "rcfilters-watchlist-markseen-button": "Отметить все изменения как просмотренные",
+       "rcfilters-watchlist-edit-watchlist-button": "Редактировать ваш список просмотренных страниц",
+       "rcfilters-watchlist-showupdated": "Изменения страниц, которые вы не посещали с того момента, как они изменились, выделены <strong>жирным</strong> и отмечены полным маркером.",
        "rcnotefrom": "Ниже {{PLURAL:$5|указано изменение|перечислены изменения}} с <strong>$3, $4</strong> (показано не более <strong>$1</strong>).",
        "rclistfromreset": "Сбросить выбор даты",
        "rclistfrom": "Показать изменения с $3 $2.",
        "unwatchthispage": "Прекратить наблюдение",
        "notanarticle": "Не статья",
        "notvisiblerev": "Версия была удалена",
-       "watchlist-details": "В вашем списке наблюдения $1 {{PLURAL:$1|страница|страницы|страниц}}, не считая страниц обсуждений.",
+       "watchlist-details": "В вашем Списке наблюдения $1 {{PLURAL:$1|страница|страницы|страниц}} (а также страницы обсуждений).",
        "wlheader-enotif": "Уведомления по эл. почте включены.",
        "wlheader-showupdated": "Страницы, изменившиеся с вашего последнего их посещения, выделены '''полужирным''' шрифтом.",
        "wlnote": "Ниже {{PLURAL:$1|показано последнее изменение|показаны <strong>$1</strong> последние изменения|показаны <strong>$1</strong> последних изменений}} за {{PLURAL:$2|последний час|последние <strong>$2</strong> часа|последние <strong>$2</strong> часов}}, по состоянию на $3 $4.",
index decb939..c033af2 100644 (file)
@@ -11,6 +11,7 @@
        "tog-numberheadings": "سرخیاں کوں خود کار نمبر ݙیوو",
        "tog-showtoolbar": "آلات ترمیم ݙکھاؤ",
        "tog-editondblclick": "ڈبل کلک نال ورقے وچ تبدیلیاں کرو",
+       "tog-previewonfirst": "پہلی تبدیلی تے پری ویویو ݙکھاؤ",
        "tog-oldsig": "تہاݙے موجودہ دستخط:",
        "tog-uselivepreview": "ورقہ ولدا لوڈ کیتے ٻاجھوں نمائش ݙکھاؤ",
        "tog-watchlisthideminor": "چھوٹیاں تبدیلیاں اکھیں ہیٹھ فہرست وچوں لکاؤ",
        "ok": "ٹھیک ہے",
        "retrievedfrom": "\"$1\" توں گھدا",
        "youhavenewmessages": "{{PLURAL:$3| تہاݙے کیتے}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|تہاݙے کیتے}} {{PLURAL:$3|کہیں ٻئے صارف|$3 صارفین}} دی طرفوں $1 ($2)۔",
        "newmessageslinkplural": "{{PLURAL:$1|نواں سنیہا|999=نویں سنیہے}}",
        "newmessagesdifflinkplural": "چھیکڑی {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "editsection": "لکھو",
        "viewsourcetext": "تساں ایں ورقے کوں صرف ݙیکھ تے ماخز نقل کر سڳدے ہو لیکن تبدیلی نہوے کر سڳدے",
        "ns-specialprotected": "خاص ورقیاں وچ تبدیلی نی تھی سڳدی",
        "exception-nologin": "لاگ ان نہوے تھئے",
+       "virus-scanfailed": "سکین نی تھی سڳیا(کوڈ$1)",
        "virus-unknownscanner": "ان ڄاݨ اینٹی وائرس",
        "cannotlogoutnow-title": "ہݨ لاگ ان نہوے تھی سڳدے",
        "welcomeuser": "خوش آمدید، $1!",
        "createacct-error": "کھاتہ بݨاوݨ وچ غلطی",
        "loginsuccesstitle": "لاگ ان تھی ڳیا",
        "mailmypassword": "نواں پاس ورڈ بݨاؤ",
+       "mailerror": "ای میل بھیجݨ وچ غلطی: $1",
        "emailconfirmlink": "آپݨے ای میل پتے دی تصدیق کرو",
        "emaildisabled": "ایہ سائٹ ای میل نی بھیج سڳدی۔",
        "accountcreated": "کھاتہ کھل ڳیا",
        "permissionserrorstext-withaction": "انہاں {{PLURAL:$1|وجہ|وجوہات}} پاروں تہاکوں$2 دی اجازت کائنی",
        "moveddeleted-notice": "ایہ ورقہ مٹایا ڳیا ہے۔ مٹاوݨ دا لاگ،حفاظت دا لاگ تے ورقہ ٹورݨ دا لاگ  حوالے کیتے ہیٹھاں ݙتے ہوئے ہن۔",
        "log-fulllog": "پورا لاگ ݙیکھو",
+       "postedit-confirmation-created": "ورقہ بݨ ڳیا ہے۔",
+       "postedit-confirmation-restored": "ورقہ بحال تھی ڳئے",
+       "postedit-confirmation-saved": "تہاݙی تبدیلی محفوظ تھی ڳئی ہے۔",
        "content-model-wikitext": "ویکی متن",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا  سکرپٹ",
        "revdelete-radio-set": "پوشیدہ",
        "revdelete-radio-unset": "ظاہر",
        "revdelete-log": "سبب:",
+       "pagehist": "ورقے دی تاریخ",
        "deletedhist": "مٹایا ہویا تاریخچہ",
        "revdelete-reasonotherlist": "ہور وجہ",
        "revdelete-edit-reasonlist": "مٹاوݨ دی وجہ لکھو",
        "prefs-personal": "پروفائل",
        "prefs-rc": "نویاں تبدیلیاں",
        "prefs-watchlist": "نظریں ہیٹھ فہرست",
+       "prefs-resetpass": "پاس ورڈ تبدیل کرو",
        "prefs-rendering": "شکل و صورت",
        "saveprefs": "بچاؤ",
        "searchresultshead": "ڳولو",
        "prefs-advancedrendering": "اعلیٰ اختیارات",
        "prefs-advancedsearchoptions": "اعلیٰ اختیارات",
        "prefs-advancedwatchlist": "اعلیٰ اختیارات",
+       "prefs-displayrc": "ݙکھاوݨ دے اختیارات",
+       "prefs-displaywatchlist": "ݙکھاوݨ دے اختیارات",
        "prefs-tokenwatchlist": "ٹوکن",
        "prefs-diffs": "فرق",
        "userrights-user-editname": "ورتݨ آلا ناں درج کرو:",
        "group-user-member": "{{GENDER:$1|ورتݨ آلا}}",
        "grouppage-bot": "{{ns:project}}:بوٹ",
        "grouppage-sysop": "{{ns:project}}:ایڈمنسٹریٹر",
+       "right-move": "ورقے ٹورو",
+       "right-movefile": "فائلاں ٹورو",
        "right-upload": "فائلاں چڑھاؤ",
        "right-writeapi": "اے پی آئی تحریر دا استعمال",
        "right-delete": "ورقے مٹاؤ",
        "grant-group-email": "ای میل بھیجو",
        "grant-createaccount": "کھاتے کھولو",
        "grant-basic": "بنیادی حقوق",
-       "newuserlogpage": "یوزر بنݨاوݨ آلی لاگ",
+       "newuserlogpage": "کھاتہ بݨاوݨ آلی لاگ",
        "rightslog": "ورتݨ والے دے حقاں دی لاگ",
        "action-read": "ایہ ورقہ پڑھو",
        "action-edit": "ایں ورقے تے لکھو",
        "recentchangeslinked-feed": "رلدیاں ملدیاں تبدیلیاں",
        "recentchangeslinked-toolbox": "رلدیاں ملدیاں تبدیلیاں",
        "recentchangeslinked-title": "\"$1\" دے متعلقہ تبدیلیاں",
+       "recentchangeslinked-summary": "ایہ انہاں نویاں تبدیلیاں دی لسٹ ہے جہڑیاں خاص ورقے نال جُڑے ہوئے ورقیاں( یا خاص قسم دے ممبراں) وچ تھیاں ہن۔\nتہاݙی [[Special:Watchlist|اکھیں ہیٹھ ورقے]] <strong>موٹے</strong> نظر آسن۔",
        "recentchangeslinked-page": "ورقے دا ناں",
        "recentchangeslinked-to": "کھلے ہوئے ورقے دی بجائے ایندے نال جُڑے ہوئے ورقے دیاں تبدیلیاں ݙکھاؤ",
        "upload": "فائل چڑھاؤ",
        "watchlistfor2": "$1 تے $2 کیتے",
        "watch": "اکھ تلے رکھو",
        "unwatch": "اکھ ہیٹھوں ہٹاؤ",
+       "watchlist-details": "{{PLURAL:$1|$1 ورقہ ہے|$1 ورقے ہن}} تہاݙیاں نظراں ہیٹھ (تے ڳالھ مہاڑ آلے ورقے).",
        "wlshowlast": "ݙیکھاؤ چھیکڑی $1 گھنٹے $2 ݙینہ",
        "watchlist-hide": "لُکاؤ",
        "watchlist-submit": "ݙِکھاؤ",
        "logentry-delete-restore": "$1 {{GENDER:$2|بحال تھی ڳیوہے}} page $3 ($4)",
        "revdelete-content-hid": "مواد لکیا",
        "logentry-move-move": "$1 {{جنس:$2|پلٹی}} ورقہ $3 توں $4",
+       "logentry-move-move-noredirect": "$1 نے $3 کوں $4 آلے پاسے ریڈائرکٹ کیتے ٻاڄھ{{GENDER:$2|منتقل کیتے}}",
        "logentry-move-move_redir": "$1 نے رجوع مکرر ہٹا تے ورقہ $3 کوں $4 آلے پاسے {{GENDER:$2|منتقل کیتا}}",
+       "logentry-patrol-patrol-auto": "$1 نے ورقہ $3 دے نسخہ $4 کوں خودکار طور تے گشت کیتا ہویا {{GENDER:$2|نشان زد کیتا}}",
        "logentry-newusers-create": "صارف کھاتہ $1 {{GENDER:$2|بݨایا ڳیا}}",
        "logentry-newusers-autocreate": "صارف کھاتہ $1 خودکار طور  {{GENDER:$2|تخلیق تھیا}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|اپلوڈ}} $3",
index beaefe4..3997ac7 100644 (file)
        "rcfilters-liveupdates-button": "Posodobitve v živo",
        "rcfilters-liveupdates-button-title-on": "Izklopi posodobitve v živo",
        "rcfilters-liveupdates-button-title-off": "Prikaži nove spremembe, ko se zgodijo",
-       "rcfilters-watchlist-markSeen-button": "Označi vse spremembe kot pregledane",
-       "rcfilters-watchlist-editWatchlist-button": "Uredite svoj seznam nadzorovanih strani",
+       "rcfilters-watchlist-markseen-button": "Označi vse spremembe kot pregledane",
+       "rcfilters-watchlist-edit-watchlist-button": "Uredite svoj seznam nadzorovanih strani",
        "rcfilters-watchlist-showupdated": "Spremembe strani, ki jih niste obiskali od zadnje spremembe, so prikazane <strong>krepko</strong>, z močnimi oznakami.",
        "rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od <strong>$3 $4</strong> dalje (prikazujem jih do <strong>$1</strong>).",
        "rclistfromreset": "Ponastavi izbiro datuma",
        "unwatchthispage": "Prenehaj opazovati stran",
        "notanarticle": "Ni članek",
        "notvisiblerev": "Redakcija je bila izbrisana",
-       "watchlist-details": "Na vašem spisku nadzorov {{PLURAL:$1|je $1 stran|sta $1 strani|so $1 strani|je $1 strani}}; pogovorne strani niso štete posebej.",
+       "watchlist-details": "Na vašem spisku nadzorov {{PLURAL:$1|je $1 stran|sta $1 strani|so $1 strani|je $1 strani}} (plus pogovorne strani).",
        "wlheader-enotif": "Obveščanje po elektronski pošti je omogočeno.",
        "wlheader-showupdated": "Strani, spremenjene od vašega zadnjega ogleda, so prikazane '''krepko'''.",
        "wlnote": "{{PLURAL:$1|Navedena je zadnja|Navedeni sta zadnji|Navedene so zadnje|Navedenih je zadnjih}} <strong>$1</strong> {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb}} v {{PLURAL:$2|zadnji <strong>$2</strong> uri|zadnjih <strong>$2</strong> urah}}, od $3, $4.",
index 4940ba8..6335655 100644 (file)
        "content-model-css": "CSS",
        "content-json-empty-object": "Празан објекат",
        "content-json-empty-array": "Празан низ",
-       "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е ÐºÐ¾Ñ\80иÑ\81Ñ\82е Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð°Ð½ Ñ\81амозаÑ\82ваÑ\80аÑ\98Ñ\83Ñ\9bи HTML Ñ\82аг.",
+       "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86е ÐºÐ¾Ñ\98е ÐºÐ¾Ñ\80иÑ\81Ñ\82е Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ðµ Ñ\81амозаÑ\82ваÑ\80аÑ\98Ñ\83Ñ\9bе HTML Ñ\82агове",
        "duplicate-args-warning": "<strong>Упозорење:</strong> [[:$1]] позива [[:$2]] са више од једне вредности за параметар „$3“. Само последња наведена вредност ће бити коришћена.",
        "duplicate-args-category": "Странице с дуплираним аргументима код позива шаблона",
        "duplicate-args-category-desc": "Страница садржи позиве шаблона који користе двоструке аргументе, као што су <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> или <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
index e5587c4..54e4498 100644 (file)
        "rcfilters-liveupdates-button": "Parobahan langsung",
        "rcfilters-liveupdates-button-title-on": "Pareuman parobahan langsung",
        "rcfilters-liveupdates-button-title-off": "Témbongkeun parobahan anyar nalika éta parobahan prung",
-       "rcfilters-watchlist-markSeen-button": "Tandaan sakumna parobahan minangka katémbong",
-       "rcfilters-watchlist-editWatchlist-button": "Édit daptar kaca awaskeuneun anjeun",
+       "rcfilters-watchlist-markseen-button": "Tandaan sakumna parobahan minangka katémbong",
+       "rcfilters-watchlist-edit-watchlist-button": "Édit daptar kaca awaskeuneun anjeun",
        "rcnotefrom": "Di handap ieu {{PLURAL:$5|parobahan}} ti <strong>$3, $4</strong> (nepi ka <strong>$1</strong> ditémbongkeun).",
        "rclistfromreset": "Rését pilihan kaping",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
index ce66881..909b2a6 100644 (file)
        "rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-filterlist-whatsthis": "Hur fungerar desse?",
-       "rcfilters-filterlist-feedbacklink": "Ge återkoppling på nya (beta)filter",
+       "rcfilters-filterlist-feedbacklink": "Berätta vad du tycker om dessa (nya) filtreringsverktyg",
        "rcfilters-highlightbutton-title": "Markera resultat",
        "rcfilters-highlightmenu-title": "Välj en färg",
        "rcfilters-highlightmenu-help": "Välj en färg att markera denna egenskap",
        "rcfilters-liveupdates-button": "Liveuppdateringar",
        "rcfilters-liveupdates-button-title-on": "Stäng av live-uppdateringar",
        "rcfilters-liveupdates-button-title-off": "Visa nya ändringar när de händer",
-       "rcfilters-watchlist-markSeen-button": "Markera alla ändringar som sedda",
+       "rcfilters-watchlist-markseen-button": "Markera alla ändringar som sedda",
+       "rcfilters-watchlist-edit-watchlist-button": "Redigera din lista över bevakade sidor",
+       "rcfilters-watchlist-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i <strong>fetstil</strong> med färgmarkering.",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfromreset": "Återställ datumval",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "unwatchthispage": "Sluta bevaka",
        "notanarticle": "Inte en artikel",
        "notvisiblerev": "Sidversionen har raderats",
-       "watchlist-details": "Du har {{PLURAL:$1|en sida|$1 sidor}} på din bevakningslista (diskussionssidor är inte separat medräknade).",
+       "watchlist-details": "{{PLURAL:$1|$1 sida|$1 sidor}} är på din bevakningslista (inklusive diskussionssidor).",
        "wlheader-enotif": "E-postmeddelanden är aktiverade.",
        "wlheader-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i '''fetstil.'''",
        "wlnote": "Nedan finns {{PLURAL:$1|den senaste ändringen|de senaste <strong>$1</strong> ändringarna}} under {{PLURAL:$2|den senaste timmen|de senaste <strong>$2</strong> timmarna}} från den $3 kl. $4.",
        "modifiedarticleprotection": "ändrade skyddsnivån för \"[[$1]]\"",
        "unprotectedarticle": "tog bort skrivskydd från \"[[$1]]\"",
        "movedarticleprotection": "flyttade skrivskyddsinställningar från \"[[$2]]\" till \"[[$1]]\"",
-       "protectedarticle-comment": "{{GENDER:$2|Skyddad}} \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Skyddade}} \"[[$1]]\"",
        "modifiedarticleprotection-comment": "{{GENDER:$2|Ändrade skyddsnivå}} för \"[[$1]]\"",
        "unprotectedarticle-comment": "{{GENDER:$2|Tog bort skydd}} från \"[[$1]]\"",
        "protect-title": "Ändra skrivskyddsnivå för \"$1\"",
index b40f5d4..c4ffd62 100644 (file)
        "rcfilters-empty-filter": "Без фільтрів. Показано всі зміни.",
        "rcfilters-filterlist-title": "Фільтри",
        "rcfilters-filterlist-whatsthis": "Як це працює?",
-       "rcfilters-filterlist-feedbacklink": "Ð\9dадайÑ\82е Ð²Ñ\96дгÑ\83к Ð¿Ñ\80о Ð½Ð¾Ð²Ñ\96 (беÑ\82а) Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80и",
+       "rcfilters-filterlist-feedbacklink": "РозкажÑ\96Ñ\82Ñ\8c Ð½Ð°Ð¼, Ñ\89о Ð\92и Ð´Ñ\83маÑ\94Ñ\82е Ð¿Ñ\80о Ñ\86Ñ\96 (новÑ\96) Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83менÑ\82и Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\83ваннÑ\8f",
        "rcfilters-highlightbutton-title": "Виділити результати",
        "rcfilters-highlightmenu-title": "Вибрати колір",
        "rcfilters-highlightmenu-help": "Вибрати колір, щоб виділити цю властивість",
        "rcfilters-liveupdates-button": "Оновлення наживо",
        "rcfilters-liveupdates-button-title-on": "Вимкнути оновлення наживо",
        "rcfilters-liveupdates-button-title-off": "Показувати нові зміни одразу ж після їх здійснення",
-       "rcfilters-watchlist-markSeen-button": "Позначити всі зміни як переглянуті",
+       "rcfilters-watchlist-markseen-button": "Позначити всі зміни як переглянуті",
+       "rcfilters-watchlist-edit-watchlist-button": "Редагувати Ваш список сторінок, за якими Ви спостерігаєте",
+       "rcfilters-watchlist-showupdated": "Зміни до сторінок, які Ви не відвідували з моменту здійснення змін, виділені <strong>жирним</strong>, із цілісними маркерами.",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
        "rclistfromreset": "Скинути вибір дати",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "unwatchthispage": "Скасувати спостереження",
        "notanarticle": "Не стаття",
        "notvisiblerev": "Версія була вилучена",
-       "watchlist-details": "У Ð²Ð°Ñ\88омÑ\83 Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f $1 {{PLURAL:$1|Ñ\81Ñ\82оÑ\80Ñ\96нка|Ñ\81Ñ\82оÑ\80Ñ\96нки|Ñ\81Ñ\82оÑ\80Ñ\96нок}} (не Ð²Ñ\80аÑ\85овÑ\83Ñ\8eÑ\87и Ñ\81Ñ\82оÑ\80Ñ\96нок обговорення).",
+       "watchlist-details": "У Ð\92аÑ\88омÑ\83 Ñ\81пиÑ\81кÑ\83 Ñ\81поÑ\81Ñ\82еÑ\80еженнÑ\8f $1 {{PLURAL:$1|Ñ\81Ñ\82оÑ\80Ñ\96нка|Ñ\81Ñ\82оÑ\80Ñ\96нки|Ñ\81Ñ\82оÑ\80Ñ\96нок}} (плÑ\8eÑ\81 Ñ\81Ñ\82оÑ\80Ñ\96нки обговорення).",
        "wlheader-enotif": "Сповіщення електронною поштою ввімкнено.",
        "wlheader-showupdated": "Сторінки, що змінилися після Вашого останнього їх відвідування, виділені '''жирним''' шрифтом.",
        "wlnote": "Нижче наведено {{PLURAL:$1|останнє $1 редагування|останні $1 редагування|останні $1 редагувань}} за {{PLURAL:$2|останню|останні|останні}} <strong>$2</strong> {{PLURAL:$2|годину|години|годин}}, на час $3 $4.",
index 0986d7e..6497dfa 100644 (file)
        "recentchanges-submit": "دکھائیں",
        "rcfilters-filterlist-feedbacklink": "ہمیں بتایئے کہ آپ آپ ان (نئے) چھننی والے آلات کے بارے میں کیا سوچتے ہیں",
        "rcfilters-filter-user-experience-level-experienced-label": "تجربہ کار صارف",
-       "rcfilters-watchlist-editWatchlist-button": "اپنی زیرنظر صفحات کی فہرست ترمیم کیجیے",
+       "rcfilters-watchlist-edit-watchlist-button": "اپنی زیرنظر صفحات کی فہرست ترمیم کیجیے",
        "rcfilters-watchlist-showupdated": "تبدیلیوں کے رونما ہونے کے بعد جن صفحات کا آپ دورہ نہیں کیے ہیں وہ <strong>جلی</strong> میں، ٹھوس مارکروں کے ساتھ ہیں۔",
        "rcnotefrom": "ذیل میں <strong>$2</strong> سے کی گئی {{PLURAL:$5|تبدیلی|تبدیلیاں}} <strong>$1</strong> تک دکھائی جا رہی ہیں۔",
        "rclistfrom": "$2، $3ء سے ہونے والی نئی تبدیلیاں دکھائیں",
index fe2be9b..2118541 100644 (file)
        "tog-shownumberswatching": "Hiển thị số người đang xem",
        "tog-oldsig": "Chữ ký hiện tại của bạn:",
        "tog-fancysig": "Xem chữ ký là mã wiki (không có liên kết tự động)",
-       "tog-uselivepreview": "Xem trước trực tiếp",
+       "tog-uselivepreview": "Tránh tải lại trang khi xem trước",
        "tog-forceeditsummary": "Nhắc tôi khi tôi quên tóm lược sửa đổi",
        "tog-watchlisthideown": "Ẩn các sửa đổi của tôi khỏi danh sách theo dõi",
        "tog-watchlisthidebots": "Ẩn các sửa đổi của robot khỏi danh sách theo dõi",
        "tog-watchlisthideminor": "Ẩn các sửa đổi nhỏ khỏi danh sách theo dõi",
        "tog-watchlisthideliu": "Ẩn sửa đổi của thành viên đã đăng nhập khỏi danh sách theo dõi",
        "tog-watchlistreloadautomatically": "Tự động tải lại danh sách theo dõi khi nào bộ lọc được thay đổi (cần JavaScript)",
+       "tog-watchlistunwatchlinks": "Thêm liên kết ngừng theo dõi/theo dõi trực tiếp vào mục trong danh sách theo dõi (cần JavaScript để bật/tắt)",
        "tog-watchlisthideanons": "Ẩn sửa đổi của người dùng vô danh khỏi danh sách theo dõi",
        "tog-watchlisthidepatrolled": "Ẩn sửa đổi đã tuần tra trong danh sách theo dõi",
        "tog-watchlisthidecategorization": "Ẩn việc xếp thể loại",
        "permissionserrorstext-withaction": "Bạn không được quyền $2, vì {{PLURAL:$1|lý do|các lý do}} sau:",
        "contentmodelediterror": "Bạn không thể sửa đổi phiên bản này vì kiểu nội dung của nó là <code>$1</code>, trong khi kiểu nội dung của trang là <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Cảnh báo: Bạn sắp tạo lại một trang từng bị xóa trước đây.'''\n\nBạn nên cân nhắc trong việc tiếp tục soạn thảo trang này.\nCác nhật trình xóa và di chuyển của trang được đưa ra dưới đây để tiện theo dõi:",
-       "moveddeleted-notice": "Trang này đã bị xóa.\nCác nhật trình xóa và di chuyển của trang được đưa ra dưới đây để tiện theo dõi.",
-       "moveddeleted-notice-recent": "Rất tiếc, trang này vừa bị xóa (trong vòng 24 giờ trước).\nCác nhật trình xóa và di chuyển của trang được đưa ra dưới đây để tiện theo dõi.",
+       "moveddeleted-notice": "Trang này đã bị xóa.\nCác nhật trình xóa, khóa, và di chuyển của trang được đưa ra dưới đây để tiện theo dõi.",
+       "moveddeleted-notice-recent": "Rất tiếc, trang này vừa bị xóa (trong vòng 24 giờ trước).\nCác nhật trình xóa, khóa, và di chuyển của trang được đưa ra dưới đây để tiện theo dõi.",
        "log-fulllog": "Xem nhật trình đầy đủ",
        "edit-hook-aborted": "Một phần bổ trợ phần mềm đã bỏ qua sửa đổi này.\nKhông có lý do nào được đưa ra.",
        "edit-gone-missing": "Không thể cập nhật trang.\nDường như trang này đã bị xóa.",
        "postedit-confirmation-saved": "Sửa đổi của bạn đã được lưu.",
        "edit-already-exists": "Không thể tạo trang mới.\nNó đã tồn tại.",
        "defaultmessagetext": "Nội dung mặc định",
-       "content-failed-to-parse": "Thất bại phân tích nội dung $2 cho mô hình $1: $3",
+       "content-failed-to-parse": "Thất bại phân tích nội dung $2 cho kiểu $1: $3",
        "invalid-content-data": "Dữ liệu nội dung không hợp lệ",
        "content-not-allowed-here": "Không cho phép đưa nội dung “$1” vào trang [[$2]]",
        "editwarning-warning": "Rời khỏi trang này sẽ khiến bạn mất các sửa đổi đã thực hiện.\nNếu đã đăng nhập, bạn có thể tắt cảnh báo này tại mục “{{int:prefs-editing}}” trong tùy chọn cá nhân.",
-       "editpage-invalidcontentmodel-title": "Không hỗ trợ mô hình nội dung",
-       "editpage-invalidcontentmodel-text": "Mô hình nội dung “$1” không được hỗ trợ.",
+       "editpage-invalidcontentmodel-title": "Không hỗ trợ kiểu nội dung",
+       "editpage-invalidcontentmodel-text": "Kiểu nội dung “$1” không được hỗ trợ.",
        "editpage-notsupportedcontentformat-title": "Không hỗ trợ định dạng nội dung",
        "editpage-notsupportedcontentformat-text": "Kiểu nội dung $2 không hỗ trợ định dạng nội dung $1.",
        "content-model-wikitext": "mã wiki",
        "prefs-help-prefershttps": "Đăng xuất và đăng nhập lại để áp dụng tùy chọn này.",
        "prefswarning-warning": "Bạn chưa lưu những thay đổi tùy chọn đã thực hiện.\nNếu bạn rời khỏi trang này mà không bấm “$1”, các tùy chọn của bạn sẽ không được cập nhật.",
        "prefs-tabs-navigation-hint": "Mẹo: Bạn có thể bấm các phím mũi tên trái phải để luân chuyển qua các thẻ trong danh sách thẻ.",
-       "userrights": "Quản lý quyền thành viên",
+       "userrights": "Quyền thành viên",
        "userrights-lookup-user": "Chọn thành viên",
        "userrights-user-editname": "Nhập tên thành viên:",
        "editusergroup": "Tải nhóm người dùng",
        "userrights-expiry-options": "1 ngày:1 day,1 tuần:1 week,1 tháng:1 month,3 tháng:3 months,6 tháng:6 months,1 năm:1 year",
        "userrights-invalid-expiry": "Thời hạn của nhóm “$1” không hợp lệ.",
        "userrights-expiry-in-past": "Thời hạn của nhóm “$1” đã xảy ra ở quá khứ.",
-       "userrights-cannot-shorten-expiry": "Bạn không thể đẩy sớm thời hạn của nhóm “$1”. Chỉ có những người dùng có quyền thêm hay xóa nhóm này có thể đẩy sớm thời hạn.",
+       "userrights-cannot-shorten-expiry": "Bạn không thể đẩy sớm thời hạn thuộc nhóm “$1”. Chỉ có những người dùng có quyền thêm hay xóa nhóm này có thể đẩy sớm thời hạn.",
        "userrights-conflict": "Mâu thuẫn thay đổi sửa nhóm thành viên! Xin vui lòng xem lại và xác nhận các thay đổi của bạn.",
        "group": "Nhóm:",
        "group-user": "Thành viên thông thường",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (xem thêm [[Special:NewPages|danh sách các trang mới]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Xem",
+       "rcfilters-tag-remove": "Loại bỏ “$1”",
+       "rcfilters-legend-heading": "<strong>Danh sách chữ viết tắt:</strong>",
+       "rcfilters-other-review-tools": "<strong>Công cụ duyệt khác</strong>",
+       "rcfilters-group-results-by-page": "Nhóm kết quả theo trang",
+       "rcfilters-grouping-title": "Nhóm",
        "rcfilters-activefilters": "Bộ lọc hiện hành",
+       "rcfilters-advancedfilters": "Bộ lọc nâng cao",
+       "rcfilters-limit-title": "Số kết quả để hiển thị",
+       "rcfilters-limit-shownum": "Xem {{PLURAL:$1|thay đổi|$1 thay đổi}} cuối cùng",
        "rcfilters-days-title": "Những ngày gần đây",
+       "rcfilters-hours-title": "Số giờ gần đây",
+       "rcfilters-days-show-days": "$1 ngày",
+       "rcfilters-days-show-hours": "$1 giờ",
+       "rcfilters-highlighted-filters-list": "Tô màu: $1",
+       "rcfilters-quickfilters": "Bộ lọc đã lưu",
+       "rcfilters-quickfilters-placeholder-title": "Chưa lưu liên kết",
+       "rcfilters-quickfilters-placeholder-description": "Để lưu thiết lập bộ lọc để dùng lại sau, bấm hình dấu trang trong hộp “Bộ lọc hiện hành” bên dưới.",
+       "rcfilters-savedqueries-defaultlabel": "Bộ lọc đã lưu",
+       "rcfilters-savedqueries-rename": "Đổi tên",
        "rcfilters-savedqueries-setdefault": "Đặt làm mặc định",
        "rcfilters-savedqueries-unsetdefault": "Loại bỏ mặc định",
+       "rcfilters-savedqueries-remove": "Loại bỏ",
+       "rcfilters-savedqueries-new-name-label": "Tên",
+       "rcfilters-savedqueries-new-name-placeholder": "Miêu tả mục đích của bộ lọc",
+       "rcfilters-savedqueries-apply-label": "Tạo bộ lọc",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Tạo bộ lọc mặc định",
+       "rcfilters-savedqueries-cancel-label": "Hủy bỏ",
+       "rcfilters-savedqueries-add-new-title": "Lưu thiết lập bộ lọc hiện tại",
        "rcfilters-restore-default-filters": "Mặc định lại các bộ lọc",
        "rcfilters-clear-all-filters": "Xóa sạch các bộ lọc",
+       "rcfilters-show-new-changes": "Xem các thay đổi mới nhất",
        "rcfilters-search-placeholder": "Lọc các thay đổi gần đây (duyệt hoặc bắt đầu đánh chữ)",
        "rcfilters-invalid-filter": "Bộ lọc không hợp lệ",
        "rcfilters-empty-filter": "Không có bộ lọc hiện hành. Tất cả các đóng góp được hiển thị.",
        "rcfilters-filterlist-title": "Bộ lọc",
+       "rcfilters-filterlist-whatsthis": "Chúng hoạt động làm sao?",
+       "rcfilters-filterlist-feedbacklink": "Cho chúng tôi biết bạn cảm thấy sao về các công cụ bộ lọc mới này",
        "rcfilters-highlightbutton-title": "Làm nổi bật kết quả",
        "rcfilters-highlightmenu-title": "Chọn màu",
        "rcfilters-highlightmenu-help": "Chọn màu để làm nổi bật thuộc tính này",
        "rcfilters-filterlist-noresults": "Không tìm thấy bộ lọc",
        "rcfilters-noresults-conflict": "Không tìm thấy kết quả nào do tiêu chí tìm kiếm đang bị mâu thuẫn",
-       "rcfilters-filtergroup-authorship": "Người sửa đổi",
+       "rcfilters-state-message-subset": "Bộ lọc này không có hiệu lực vì kết quả của nó cũng có trong kết quả của {{PLURAL:$2|bộ lọc|các bộ lọc}} rộng hơn này (thử tô màu để phân biệt): $1",
+       "rcfilters-state-message-fullcoverage": "Chọn tất cả các bộ lọc trong nhóm này có cùng kết quả bằng không chọn gì, nên bộ lọc này không có hiệu lực. Nhóm này bao gồm: $1",
+       "rcfilters-filtergroup-authorship": "Người đóng góp",
        "rcfilters-filter-editsbyself-label": "Sửa đổi của bạn",
        "rcfilters-filter-editsbyself-description": "Các sửa đổi do bạn tạo ra.",
        "rcfilters-filter-editsbyother-label": "Sửa đổi của người khác",
        "rcfilters-filter-editsbyother-description": "Các sửa đổi của người khác.",
-       "rcfilters-filtergroup-userExpLevel": "Trình độ (chỉ người dùng đã đăng ký)",
+       "rcfilters-filtergroup-userExpLevel": "Trạng thái đăng nhập và trình độ của người dùng",
        "rcfilters-filter-user-experience-level-registered-label": "Đã đăng ký",
        "rcfilters-filter-user-experience-level-registered-description": "Người dùng đã đăng nhập.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Vô danh",
        "rcfilters-filter-user-experience-level-unregistered-description": "Người dùng chưa đăng nhập.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Người mới đến",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Chưa tới 10 sửa đổi và 4 ngày hoạt động.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Người dùng đã đăng nhập có ít hơn 10 sửa đổi và 4 ngày hoạt động.",
        "rcfilters-filter-user-experience-level-learner-label": "Người đang tập",
-       "rcfilters-filter-user-experience-level-learner-description": "Nhiều ngày hoạt động và sửa đổi hơn “Người mới đến” mà ít hơn “Người có kinh nghiệm”.",
+       "rcfilters-filter-user-experience-level-learner-description": "Người dùng đã đăng nhập có nhiều kinh nghiệm hơn “Người mới đến” mà ít hơn “Người có kinh nghiệm”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Người có kinh nghiệm",
-       "rcfilters-filter-user-experience-level-experienced-description": "Hơn 30 ngày hoạt động và 500 sửa đổi.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Người dùng đã đăng nhập có hơn 500 sửa đổi và 30 ngày hoạt động.",
        "rcfilters-filtergroup-automated": "Đóng góp tự động",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Các sửa đổi của công cụ tự động.",
        "rcfilters-filter-watchlist-watchednew-description": "Thay đổi mới trên các trang nằm trong danh sách theo dõi kể từ lần cuối bạn xem trang đó.",
        "rcfilters-filter-watchlist-notwatched-label": "Không trong danh sách theo dõi",
        "rcfilters-filter-watchlist-notwatched-description": "Sửa đổi trên các trang không nằm trong danh sách theo dõi của bạn.",
+       "rcfilters-filtergroup-watchlistactivity": "Hành động trong danh sách theo dõi",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Thay đổi chưa xem",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Thay đổi mới trên các trang kể từ lần cuối bạn xem trang đó.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Thay đổi đã xem",
+       "rcfilters-filter-watchlistactivity-seen-description": "Thay đổi mới trên các trang mà bạn đã xem kể từ lần cuối trang được thay đổi.",
        "rcfilters-filtergroup-changetype": "Kiểu thay đổi",
        "rcfilters-filter-pageedits-label": "Sửa đổi trang",
        "rcfilters-filter-pageedits-description": "Các sửa đổi đối với nội dung wiki, các trang thảo luận, các miêu tả thể loại…",
        "rcfilters-typeofchange-conflicts-hideminor": "Bộ lọc Loại sửa đổi này mâu thuẫn với bộ lọc \"Các sửa đổi nhỏ\". Có một số loại sửa đổi không thể được đánh dấu là \"nhỏ\".",
        "rcfilters-filtergroup-lastRevision": "Phiên bản mới nhất",
        "rcfilters-filter-lastrevision-label": "Phiên bản mới nhất",
-       "rcfilters-filter-lastrevision-description": "Sửa đổi mới nhất trên một trang.",
-       "rcfilters-filter-previousrevision-label": "Các sửa đổi trước",
-       "rcfilters-filter-previousrevision-description": "Tất cả các sửa đổi không phải là sửa đổi mới nhất của trang.",
+       "rcfilters-filter-lastrevision-description": "Chỉ sửa đổi mới nhất trên một trang.",
+       "rcfilters-filter-previousrevision-label": "Không phải phiên bản mới nhất",
+       "rcfilters-filter-previousrevision-description": "Tất cả các sửa đổi không phải là “phiên bản mới nhất”.",
+       "rcfilters-filter-excluded": "Loại trừ",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:không</strong> $1",
+       "rcfilters-exclude-button-off": "Loại trừ lựa chọn",
+       "rcfilters-exclude-button-on": "Đang trừ lựa chọn",
+       "rcfilters-view-advanced-filters-label": "Bộ lọc nâng cao",
+       "rcfilters-view-tags": "Sửa đổi được gắn thẻ",
+       "rcfilters-view-namespaces-tooltip": "Lọc kết quả theo không gian tên",
+       "rcfilters-view-tags-tooltip": "Lọc kết quả theo thẻ đánh dấu",
+       "rcfilters-view-return-to-default-tooltip": "Quay lại trình đơn bộ lọc chính",
+       "rcfilters-liveupdates-button": "Cập nhật trực tiếp",
+       "rcfilters-liveupdates-button-title-on": "Tắt cập nhật trực tiếp",
+       "rcfilters-liveupdates-button-title-off": "Hiển thị các thay đổi mới lúc khi xảy ra",
+       "rcfilters-watchlist-markseen-button": "Đánh dấu tất cả thay đổi là đã xem",
+       "rcfilters-watchlist-edit-watchlist-button": "Sửa danh sách trang theo dõi",
+       "rcfilters-watchlist-showupdated": "Thay đổi mới trên các trang kể lần cuối bạn xem trang được in <strong>đậm</strong> và có dấu tô màu.",
        "rcnotefrom": "Dưới đây là {{PLURAL:$5|thay đổi duy nhất|các thay đổi}} từ <strong>$3 $4</strong> (hiển thị tối đa <strong>$1</strong> thay đổi).",
        "rclistfromreset": "Đặt lại lựa chọn ngày",
        "rclistfrom": "Xem các thay đổi từ $2 $3 trở về sau",
        "pageswithprop-legend": "Các trang có thuộc tính trang",
        "pageswithprop-text": "Trang này liệt kê các trang sử dụng một thuộc tính trang nào đó.",
        "pageswithprop-prop": "Tên thuộc tính:",
+       "pageswithprop-reverse": "Sắp xếp chiều ngược",
+       "pageswithprop-sortbyvalue": "Sắp xếp theo giá trị thuộc tính",
        "pageswithprop-submit": "Xem",
        "pageswithprop-prophidden-long": "giá trị thuộc tính văn bản dài dòng bị ẩn ($1)",
        "pageswithprop-prophidden-binary": "giá trị thuộc tính nhị phân bị ẩn ($1)",
        "apisandbox-sending-request": "Đang gửi yêu cầu API...",
        "apisandbox-loading-results": "Nhận kết quả API...",
        "apisandbox-results-error": "Một lỗi xuất hiện khi tải các đáp ứng truy vấn API: $1.",
+       "apisandbox-results-login-suppressed": "Yêu cầu này đã được xử lý giống như thể người dùng chưa đăng nhập yêu cầu, nếu không thì có thể vượt qua chính sách bảo mật cùng gốc (Same-Origin) của trình duyệt. Lưu ý rằng chức năng tự động xử lý dấu hiệu của chỗ thử API không hoạt động tốt đối với những yêu cầu này, nên bạn phải điền thủ công.",
        "apisandbox-request-selectformat-label": "Hiển thị dữ liệu yêu cầu dưới dạng:",
        "apisandbox-request-format-url-label": "Chuỗi truy vấn URL",
        "apisandbox-request-url-label": "URL của yêu cầu:",
        "unwatchthispage": "Ngừng theo dõi",
        "notanarticle": "Không phải trang có nội dung",
        "notvisiblerev": "Phiên bản bị xóa",
-       "watchlist-details": "Bạn đang theo dõi {{PLURAL:$1}}$1 trang, không kể riêng các trang thảo luận.",
+       "watchlist-details": "Bạn đang theo dõi $1 trang, không kể các trang thảo luận.",
        "wlheader-enotif": "Đã bật thông báo qua thư điện tử.",
-       "wlheader-showupdated": "Các trang đã thay đổi kể từ lần cuối bạn xem chúng được in '''đậm'''",
+       "wlheader-showupdated": "Các trang đã thay đổi kể từ lần cuối bạn xem chúng được in <strong>đậm</strong>.",
        "wlnote": "Dưới đây là {{PLURAL:$1|thay đổi duy nhất|<strong>$1</strong> thay đổi gần nhất}} trong {{PLURAL:$2|giờ|<strong>$2</strong> giờ}} qua, tính tới $3 lúc $4.",
        "wlshowlast": "Hiển thị $1 giờ $2 ngày gần đây",
        "watchlist-hide": "Ẩn",
        "enotif_body_intro_moved": "Trang $1 tại {{SITENAME}} đã được $2 di chuyển vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .",
        "enotif_body_intro_restored": "Trang $1 tại {{SITENAME}} đã được $2 phục hồi vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .",
        "enotif_body_intro_changed": "Trang $1 tại {{SITENAME}} đã được $2 thay đổi vào $PAGEEDITDATE. Xem phiên bản hiện hành tại $3 .",
-       "enotif_lastvisited": "Xem $1 để biết các thay đổi diễn ra từ lần xem cuối cùng của bạn.",
-       "enotif_lastdiff": "Vào $1 để xem sự thay đổi này.",
+       "enotif_lastvisited": "Xem $1 để biết các thay đổi diễn ra từ lần xem cuối cùng của bạn",
+       "enotif_lastdiff": "Vào $1 để xem sự thay đổi này",
        "enotif_anon_editor": "người dùng vô danh $1",
        "enotif_body": "Xin chào $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nTóm lược sửa đổi: $PAGESUMMARY $PAGEMINOREDIT\n\nLiên lạc với người viết trang qua:\nthư: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nSẽ không có thông báo nào khác nếu có sự thay đổi tiếp theo trừ khi bạn xem trang đó lúc khi đăng nhập. Bạn cũng có thể thiết lập lại việc nhắc nhở cho tất cả các trang nằm trong danh sách theo dõi của bạn.\n\nHệ thống báo tin {{SITENAME}} thân thiện của bạn\n\n--\nĐể thay đổi các thiết lập thư điện tử thông báo, mời xem:\n{{canonicalurl:{{#special:Preferences}}}}\n\nĐể thay đổi các thiết lập danh sách theo dõi, mời xem:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nĐể xóa trang ra khỏi danh sách theo dõi của bạn, mời xem:\n$UNWATCHURL\n\nPhản hồi và cần sự hỗ trợ:\n$HELPPAGE",
+       "enotif_minoredit": "Sửa đổi nhỏ",
        "created": "viết mới",
        "changed": "thay đổi",
        "deletepage": "Xóa trang",
        "delete-warning-toobig": "Trang này có lịch sử sửa đổi lớn, đến hơn $1 lần sửa đổi.\nViệc xóa các trang có thể làm tổn hại đến hoạt động của cơ sở dữ liệu {{SITENAME}};\nhãy cẩn trọng khi thực hiện.",
        "deleteprotected": "Bạn không thể xóa trang này vì nó đã được khóa lại.",
        "deleting-backlinks-warning": "<strong>Cảnh báo:</strong> Có [[Special:WhatLinksHere/{{FULLPAGENAME}}|trang khác]] liên kết đến hoặc nhúng trang mà bạn sắp xóa.",
+       "deleting-subpages-warning": "<strong>Cảnh báo:</strong> Bạn sắp sửa xóa trang có [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|trang con|$1 trang con|51=hơn 50 trang con}}]].",
        "rollback": "Lùi tất cả sửa đổi",
        "rollbacklink": "lùi tất cả",
        "rollbacklinkcount": "lùi tất cả $1 sửa đổi",
        "editcomment": "Tóm lược sửa đổi: <em>$1</em>.",
        "revertpage": "Đã lùi lại sửa đổi của [[Special:Contributions/$2|$2]] ([[User talk:$2|Thảo luận]]) quay về phiên bản cuối của [[User:$1|$1]]",
        "revertpage-nouser": "Đã lùi lại sửa đổi của người dùng ẩn quay về phiên bản cuối của {{GENDER:$1}}[[User:$1|$1]]",
-       "rollback-success": "Đã hủy sửa đổi của $1;\nquay về phiên bản cuối của $2.",
+       "rollback-success": "Đã hủy sửa đổi của {{GENDER:$3}}$1;\nquay về phiên bản cuối của {{GENDER:$4}}$2.",
        "rollback-success-notify": "Đã hủy sửa đổi của $1;\nquay về phiên bản cuối của $2. [$3 Xem thay đổi]",
        "sessionfailure-title": "Phiên thất bại",
        "sessionfailure": "Dường như có trục trặc với phiên đăng nhập của bạn; thao tác này đã bị hủy để tránh việc cướp quyền đăng nhập. Xin hãy nhấn nút “Back”, tải lại trang đó, rồi thử lại.",
        "undelete-search-title": "Tìm kiếm trang đã bị xóa",
        "undelete-search-box": "Tìm kiếm trang đã bị xóa",
        "undelete-search-prefix": "Hiển thị trang có tiền tố:",
+       "undelete-search-full": "Hiển thị các tên trang chứa:",
        "undelete-search-submit": "Tìm kiếm",
        "undelete-no-results": "Không tìm thấy trang đã bị xóa nào khớp với từ khóa.",
        "undelete-filename-mismatch": "Không thể phục hồi phiên bản tập tin vào thời điểm $1: không có tập tin trùng tên",
        "sp-contributions-uploads": "tập tin tải lên",
        "sp-contributions-logs": "nhật trình",
        "sp-contributions-talk": "thảo luận",
-       "sp-contributions-userrights": "quản lý quyền thành viên",
+       "sp-contributions-userrights": "quản lý quyền {{GENDER:$1}}thành viên",
        "sp-contributions-blocked-notice": "Thành viên này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:",
        "sp-contributions-blocked-notice-anon": "Địa chỉ IP này đang bị cấm. Hãy tham khảo mục mới nhất trong nhật trình cấm IP này:",
        "sp-contributions-search": "Tìm kiếm đóng góp",
        "unblocked-id": "$1 đã hết bị cấm",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] đã được bỏ cấm.",
        "blocklist": "Người dùng bị cấm",
-       "autoblocklist": "Các lệnh cấm tự động",
+       "autoblocklist": "Tác vụ cấm tự động",
        "autoblocklist-submit": "Tìm kiếm",
+       "autoblocklist-legend": "Xem danh sách các tác vụ cấm tự động",
+       "autoblocklist-localblocks": "{{PLURAL:$1}}Tác vụ cấm tự động cục bộ",
+       "autoblocklist-total-autoblocks": "Tổng số cấm tự động: $1",
+       "autoblocklist-empty": "Danh sách cấm tự động hiện đang trống.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1}}Tác vụ cấm tự động khác",
        "ipblocklist": "Người dùng bị cấm",
        "ipblocklist-legend": "Tìm một thành viên bị cấm",
        "blocklist-userblocks": "Ẩn tác vụ cấm tài khoản",
        "import-nonewrevisions": "Không nhập phiên bản nào (tất cả các phiên bản đều đã có sẵn hoặc bị bỏ qua do lỗi).",
        "xml-error-string": "$1 tại dòng $2, cột $3 (byte $4): $5",
        "import-upload": "Tải lên dữ liệu XML",
-       "import-token-mismatch": "Mất dữ liệu phiên làm việc.\n\nCó thể bạn đã được đăng xuất. <strong>Xin hãy xác nhận rằng bạn vẫn được đăng nhập và thử lại.</strong>\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.",
+       "import-token-mismatch": "Mất dữ liệu phiên làm việc.\n\nCó thể bạn đã được đăng xuất. '''Xin hãy xác nhận rằng bạn vẫn được đăng nhập và thử lại.'''\nNếu vẫn không được, hãy thử [[Special:UserLogout|đăng xuất]] rồi đăng nhập lại, và kiểm tra rằng trình duyệt của bạn cho phép các cookie của trang Web này.",
        "import-invalid-interwiki": "Không thể nhập trang từ wiki được chỉ định.",
        "import-error-edit": "Trang “$1” không được nhập tại vì bạn không được phép sửa đổi nó.",
        "import-error-create": "Trang “$1” không được nhập tại vì bạn không được phép tạo ra nó.",
        "tooltip-pt-mycontris": "Danh sách các đóng góp của tôi",
        "tooltip-pt-anoncontribs": "Danh sách các sửa đổi được thực hiện qua địa chỉ  IP này",
        "tooltip-pt-login": "Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc.",
+       "tooltip-pt-login-private": "Bạn cần phải đăng nhập để sử dụng wiki này",
        "tooltip-pt-logout": "Đăng xuất",
        "tooltip-pt-createaccount": "Khuyến khích bạn mở tài khoản và đăng nhập; tuy nhiên, không phải bắt buộc phải có tài khoản",
        "tooltip-ca-talk": "Thảo luận về trang này",
        "tooltip-ca-nstab-category": "Xem trang thể loại",
        "tooltip-minoredit": "Đánh dấu đây là sửa đổi nhỏ",
        "tooltip-save": "Lưu lại những thay đổi của bạn",
-       "tooltip-publish": "Xuất bản các thay đổi của bạn",
+       "tooltip-publish": "Đăng các thay đổi của bạn",
        "tooltip-preview": "Xem trước những thay đổi, hãy dùng nó trước khi lưu!",
        "tooltip-diff": "Xem thay đổi bạn đã thực hiện.",
        "tooltip-compareselectedversions": "Xem khác biệt giữa hai phiên bản đã chọn của trang này.",
        "anonymous": "{{PLURAL:$1}}Người dùng vô danh của {{SITENAME}}",
        "siteuser": "thành viên $1 của {{SITENAME}}",
        "anonuser": "người dùng vô danh $1 tại {{SITENAME}}",
-       "lastmodifiedatby": "Trang này được $3 cập nhật lần cuối lúc $2 $1.",
+       "lastmodifiedatby": "Trang này được $3 sửa đổi lần cuối lúc $2 $1.",
        "othercontribs": "Dựa trên công trình của $1.",
        "others": "những người khác",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|người dùng}}|users}} $1",
        "newimages-summary": "Trang đặc biệt này hiển thị các tập tin được tải lên gần đây nhất.",
        "newimages-legend": "Bộ lọc",
        "newimages-label": "Tên tập tin (hoặc một phần tên):",
+       "newimages-user": "Địa chỉ IP hoặc tên người dùng",
+       "newimages-newbies": "Chỉ hiển thị đóng góp của tài khoản mới",
        "newimages-showbots": "Xem các tập tin do bot tải lên",
        "newimages-hidepatrolled": "Ẩn tập tin tải lên đã tuần tra",
+       "newimages-mediatype": "Kiểu phương tiện:",
        "noimages": "Chưa có hình.",
        "gallery-slideshow-toggle": "Bật/tắt hình nhỏ",
        "ilsubmit": "Tìm kiếm",
        "fileduplicatesearch-noresults": "Không tìm thấy tập tin nào tên “$1”.",
        "specialpages": "Các trang đặc biệt",
        "specialpages-note-top": "Chú giải",
+       "specialpages-note-restricted": "* Trang đặc biệt thông thường.\n* <strong class=\"mw-specialpagerestricted\">Trang đặc biệt được hạn chế.</strong>",
        "specialpages-group-maintenance": "Báo cáo bảo quản",
        "specialpages-group-other": "Trang đặc biệt khác",
        "specialpages-group-login": "Đăng nhập / Mở tài khoản",
        "tag-filter": "Bộ lọc [[Special:Tags|thẻ]]:",
        "tag-filter-submit": "Bộ lọc",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1}}Thẻ]]: $2)",
-       "tag-mw-contentmodelchange": "thay đổi mô hình nội dung",
-       "tag-mw-contentmodelchange-description": "Sửa đổi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel thay đổi mô hình nội dung] của trang",
+       "tag-mw-contentmodelchange": "thay đổi kiểu nội dung",
+       "tag-mw-contentmodelchange-description": "Sửa đổi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel thay đổi kiểu nội dung] của trang",
        "tags-title": "Thẻ đánh dấu",
        "tags-intro": "Trang này liệt kê các thẻ đánh dấu mà phần mềm dùng nó để đánh dấu một sửa đổi, và ý nghĩa của nó.",
        "tags-tag": "Tên thẻ",
        "tags-create-reason": "Lý do:",
        "tags-create-submit": "Tạo mới",
        "tags-create-no-name": "Bạn phải chỉ định một tên thẻ.",
-       "tags-create-invalid-chars": "Tên thẻ không được chứa dấu phẩy (<code>,</code>) hoặc dấu gạch chéo lên (<code>/</code>).",
+       "tags-create-invalid-chars": "Tên thẻ không được chứa dấu phẩy (<code>,</code>), dấu sổ (<code>|</code>), hoặc dấu gạch chéo lên (<code>/</code>).",
        "tags-create-invalid-title-chars": "Tên thẻ không được chứa các ký tự mà không thể được sử dụng trong tiêu đề của trang .",
        "tags-create-already-exists": "Các từ khóa “$1” đã tồn tại.",
        "tags-create-warnings-above": "{{PLURAL:$2|Cảnh báo|Các cảnh báo}} sau gặp phải khi cố gắng để tạo ra thẻ “$1”:",
        "compare-title-not-exists": "Tên trang chỉ định không tồn tại.",
        "compare-revision-not-exists": "Phiên bản chỉ định không tồn tại.",
        "diff-form": "Khác biệt",
+       "diff-form-oldid": "Số phiên bản cũ (tùy chọn)",
+       "diff-form-revid": "Số phiên bản của khác biệt",
+       "diff-form-submit": "Trình bày khác biệt",
+       "permanentlink": "Liên kết thường trực",
+       "permanentlink-revid": "Số phiên bản",
+       "permanentlink-submit": "Đi đến phiên bản",
        "dberr-problems": "Xin lỗi! Trang này đang gặp phải những khó khăn về kỹ thuật.",
        "dberr-again": "Xin thử đợi vài phút rồi tải lại trang.",
        "dberr-info": "(Không thể liên lạc với máy chủ cơ sở dữ liệu: $1)",
        "logentry-delete-delete": "$1 {{GENDER:$2}}đã xóa trang “$3”",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2}}đã xóa trang đổi hướng $3 bằng cách ghi đè",
        "logentry-delete-restore": "$1 {{GENDER:$2}}đã phục hồi trang $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2}}đã phục hồi trang $3",
+       "restore-count-revisions": "$1 phiên bản",
+       "restore-count-files": "$1 tập tin",
        "logentry-delete-event": "$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một mục nhật trình|$5 mục nhật trình}} về $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2}}đã thay đổi mức hiển thị của {{PLURAL:$5|một phiên bản|$5 phiên bản}} trang $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2}}đã thay đổi mức hiển thị của các mục nhật trình về $3",
        "special-characters-group-thai": "Thái",
        "special-characters-group-lao": "Lào",
        "special-characters-group-khmer": "Khơ-me",
+       "special-characters-group-canadianaboriginal": "Thổ dân Canada",
        "special-characters-title-endash": "dấu gạch en",
        "special-characters-title-emdash": "dấu gạch em",
        "special-characters-title-minus": "dấu trừ",
        "restrictionsfield-help": "Mỗi dòng một địa chỉ IP hoặc dải CIDR. Để kích hoạt tất cả mọi địa chỉ IP, sử dụng:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "phiên bản $1",
        "pageid": "số trang $1",
+       "rawhtml-notallowed": "Không thể sử dụng thẻ &lt;html&gt; bên ngoài trang bình thường.",
        "gotointerwiki": "Rời khỏi {{SITENAME}}",
        "gotointerwiki-invalid": "Tên trang chỉ định không hợp lệ.",
+       "gotointerwiki-external": "Bạn sắp sửa thoát {{SITENAME}} để đi đến [[$2]], đó là trang Web riêng.\n\n'''[$1 Tiếp tục đi đến $1]'''",
+       "undelete-cantedit": "Bạn không thể phục hồi trang này vì bạn không có quyền sửa đổi trang.",
+       "undelete-cantcreate": "Bạn không thể phục hồi trang này vì không có trang nào với tên này và bạn không có quyền tạo ra trang này.",
        "pagedata-title": "Dữ liệu về trang",
+       "pagedata-text": "Trang này cung cấp giao diện dữ liệu cho các trang. Xin hãy cung cấp tên trang trong URL dùng cú pháp trang con.\n* Chế độ đàm phán nội dung được áp dụng tùy theo đầu đề Accept (chấp nhận) của trình khách của bạn. Điều này có nghĩa rằng dữ liệu trang được cung cấp dưới định dạng thích hợp nhất đối với trình khác của bạn.",
        "pagedata-not-acceptable": "Không tìm thấy định dạng phù hợp. Các kiểu MIME được hỗ trợ: $1",
        "pagedata-bad-title": "Tiêu đề không hợp lệ: $1."
 }
index 986f6d3..5008d74 100644 (file)
        "rcfilters-savedqueries-new-name-label": "נאָמען",
        "rcfilters-savedqueries-apply-label": "שאפן פילטער",
        "rcfilters-savedqueries-cancel-label": "אַנולירן",
+       "rcfilters-show-new-changes": "ווייזן די נייעסטע ענדערונגען",
        "rcfilters-search-placeholder": "פֿילטערן לעצטיקע ענדערונגען (דורכקוקן אדער אָנהייבן אַריינקלאַפן)",
        "rcfilters-invalid-filter": "אומגילטיגער פֿילטער",
        "rcfilters-empty-filter": "קיין אַקטיווע פילטערס. אלע ביישטייערונגען געוויזן.",
        "rcfilters-filter-previousrevision-label": "נישט די לעצטע ווערסיעס",
        "rcfilters-filter-excluded": "אויסגעשלאסן",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:נישט</strong> $1",
+       "rcfilters-view-advanced-filters-label": "פֿארגעשריטענע פֿילטערס",
        "rcfilters-liveupdates-button": "לעבעדיקע דערהיינטיקונגען",
        "rcnotefrom": "פֿאלגנד {{PLURAL:$5|איז די ענדערונג| זענען די ענדערונגען}} זײַט <strong>$3, $4</strong> (ביז <strong>$1</strong>).",
        "rclistfrom": "װײַזן נײַע ענדערונגען פֿון $3 $2",
index 09810ba..b34927e 100644 (file)
        "rcfilters-liveupdates-button": "实时更新",
        "rcfilters-liveupdates-button-title-on": "关闭实时更新",
        "rcfilters-liveupdates-button-title-off": "显示新更改(如有)",
-       "rcfilters-watchlist-markSeen-button": "标记所有更改为已查看",
-       "rcfilters-watchlist-editWatchlist-button": "编辑您的监视页面的列表",
+       "rcfilters-watchlist-markseen-button": "标记所有更改为已查看",
+       "rcfilters-watchlist-edit-watchlist-button": "编辑您的监视页面的列表",
        "rcfilters-watchlist-showupdated": "自更改发生以来,对您尚未访问的页面做出的更改以<strong>粗体</strong>显示,并带有立体标记。",
        "rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
        "rclistfromreset": "重置时间选择",
        "unwatchthispage": "停止监视",
        "notanarticle": "非内容页面",
        "notvisiblerev": "上次由不同用户所作的版本已经删除",
-       "watchlist-details": "不计讨论页,您的监视列表中有$1个页面。",
+       "watchlist-details": "您的监视列表中有{{PLURAL:$1|$1个页面}}(外加讨论页)。",
        "wlheader-enotif": "已启用电子邮件通知。",
        "wlheader-showupdated": "您上次访问后发生更改的页面<strong>加粗</strong>显示。",
        "wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
index 2e0a247..46fdcf4 100644 (file)
        "compare-invalid-title": "您所指定的標題無效。",
        "compare-title-not-exists": "您所指定的標題不存在。",
        "compare-revision-not-exists": "您所指定的修訂不存在。",
-       "diff-form": "表",
+       "diff-form": "差異",
+       "diff-form-oldid": "舊修訂版本ID(可選)",
+       "diff-form-revid": "差異的修訂版本ID",
+       "permanentlink": "固定連結",
+       "permanentlink-revid": "修訂版本ID",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
        "dberr-again": "請稍後數分鐘後再試。",
        "dberr-info": "(無法存取資料庫:$1)",
diff --git a/maintenance/archives/patch-l10n_cache-primary-key.sql b/maintenance/archives/patch-l10n_cache-primary-key.sql
new file mode 100644 (file)
index 0000000..d583039
--- /dev/null
@@ -0,0 +1,8 @@
+--
+-- patch-l10n_cache-primary-key.sql
+--
+-- Bug T146591. Add l10n_cache primary key
+
+DELETE FROM /*$wgDBprefix*/l10n_cache;
+
+ALTER TABLE /*$wgDBprefix*/l10n_cache DROP KEY /*i*/lc_lang_key, ADD PRIMARY KEY(lc_lang, lc_key);
diff --git a/maintenance/archives/patch-log_search-rename-index.sql b/maintenance/archives/patch-log_search-rename-index.sql
deleted file mode 100644 (file)
index 7e1113e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
--- Rename the primary unique index from PRIMARY to ls_field_val
--- This is for MySQL only and is necessary only for databases which were updated
--- between MW 1.16 development revisions r50567 and r51465.
-ALTER TABLE /*_*/log_search
-       DROP PRIMARY KEY,
-       ADD UNIQUE INDEX ls_field_val (ls_field,ls_value,ls_log_id);
-
index 9559623..aa11cd9 100644 (file)
@@ -86,6 +86,7 @@ class DeleteOldRevisions extends Maintenance {
                if ( $delete && $count ) {
                        $this->output( "Deleting..." );
                        $dbw->delete( 'revision', [ 'rev_id' => $oldRevs ], __METHOD__ );
+                       $dbw->delete( 'ip_changes', [ 'ipc_rev_id' => $oldRevs ], __METHOD__ );
                        $this->output( "done.\n" );
                }
 
index e99f2b0..4d60070 100644 (file)
@@ -92,6 +92,9 @@ class DeleteOrphanedRevisions extends Maintenance {
                        $id = [ $id ];
                }
                $dbw->delete( 'revision', [ 'rev_id' => $id ], __METHOD__ );
+
+               // Delete from ip_changes should a record exist.
+               $dbw->delete( 'ip_changes', [ 'ipc_rev_id' => $id ], __METHOD__ );
        }
 }
 
index 0fae63c..97cd37e 100644 (file)
@@ -68,13 +68,11 @@ class FixExtLinksProtocolRelative extends LoggedUpdateMaintenance {
                        $db->insert( 'externallinks',
                                [
                                        [
-                                               'el_id' => $db->nextSequenceValue( 'externallinks_el_id_seq' ),
                                                'el_from' => $row->el_from,
                                                'el_to' => $row->el_to,
                                                'el_index' => "http:{$row->el_index}",
                                        ],
                                        [
-                                               'el_id' => $db->nextSequenceValue( 'externallinks_el_id_seq' ),
                                                'el_from' => $row->el_from,
                                                'el_to' => $row->el_to,
                                                'el_index' => "https:{$row->el_index}",
diff --git a/maintenance/populateIpChanges.php b/maintenance/populateIpChanges.php
new file mode 100644 (file)
index 0000000..eb60f80
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Find all revisions by logged out users and copy the rev_id,
+ * rev_timestamp, and a hex representation of rev_user_text to the
+ * new ip_changes table. This table is used to efficiently query for
+ * contributions within an IP range.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Maintenance script that will find all rows in the revision table where
+ * rev_user = 0 (user is an IP), and copy relevant fields to ip_changes so
+ * that historical data will be available when querying for IP ranges.
+ *
+ * @ingroup Maintenance
+ */
+class PopulateIpChanges extends LoggedUpdateMaintenance {
+       public function __construct() {
+               parent::__construct();
+
+               $this->addDescription( <<<TEXT
+This script will find all rows in the revision table where the user is an IP,
+and copy relevant fields to the ip_changes table. This backfilled data will
+then be available when querying for IP ranges at Special:Contributions.
+TEXT
+               );
+               $this->addOption( 'rev-id', 'The rev_id to start copying from. Default: 0', false, true );
+               $this->addOption(
+                       'throttle',
+                       'Wait this many milliseconds after copying each batch of revisions. Default: 0',
+                       false,
+                       true
+               );
+               $this->addOption( 'force', 'Run regardless of whether the database says it\'s been run already' );
+       }
+
+       public function doDBUpdates() {
+               $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $dbw = $this->getDB( DB_MASTER );
+               $throttle = intval( $this->getOption( 'throttle', 0 ) );
+               $start = $this->getOption( 'rev-id', 0 );
+               $end = $dbw->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ );
+               $blockStart = $start;
+               $revCount = 0;
+
+               $this->output( "Copying IP revisions to ip_changes, from rev_id $start to rev_id $end\n" );
+
+               while ( $blockStart <= $end ) {
+                       $cond = "rev_id >= $blockStart AND rev_user = 0 ORDER BY rev_id ASC LIMIT " . $this->mBatchSize;
+                       $rows = $dbw->select(
+                               'revision',
+                               [ 'rev_id', 'rev_timestamp', 'rev_user_text' ],
+                               $cond,
+                               __METHOD__
+                       );
+
+                       if ( !$rows || $rows->numRows() === 0 ) {
+                               break;
+                       }
+
+                       $this->output( "...checking $this->mBatchSize revisions for IP edits that need copying, " .
+                               "starting with rev_id $blockStart\n" );
+
+                       foreach ( $rows as $row ) {
+                               // Double-check to make sure this is an IP, e.g. not maintenance user or imported revision.
+                               if ( IP::isValid( $row->rev_user_text ) ) {
+                                       $dbw->insert(
+                                               'ip_changes',
+                                               [
+                                                       'ipc_rev_id' => $row->rev_id,
+                                                       'ipc_rev_timestamp' => $row->rev_timestamp,
+                                                       'ipc_hex' => IP::toHex( $row->rev_user_text ),
+                                               ],
+                                               __METHOD__,
+                                               'IGNORE'
+                                       );
+
+                                       $revCount++;
+                               }
+
+                               $blockStart = (int)$row->rev_id;
+                       }
+
+                       $blockStart++;
+
+                       $lbFactory->waitForReplication();
+                       usleep( $throttle * 1000 );
+               }
+
+               $this->output( "$revCount IP revisions copied.\n" );
+
+               return true;
+       }
+
+       protected function getUpdateKey() {
+               return 'populate ip_changes';
+       }
+}
+
+$maintClass = "PopulateIpChanges";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/sqlite/archives/patch-l10n_cache-primary-key.sql b/maintenance/sqlite/archives/patch-l10n_cache-primary-key.sql
new file mode 100644 (file)
index 0000000..55df392
--- /dev/null
@@ -0,0 +1,12 @@
+--
+-- patch-l10n_cache-primary-key.sql
+--
+-- Bug T146591. Add l10n_cache primary key
+DROP TABLE IF EXISTS /*_*/l10n_cache;
+
+CREATE TABLE /*$wgDBprefix*/l10n_cache (
+    lc_lang varbinary(32) NOT NULL,
+    lc_key varchar(255) NOT NULL,
+    lc_value mediumblob NOT NULL,
+    PRIMARY KEY (lc_lang, lc_key)
+) /*$wgDBTableOptions*/;
diff --git a/maintenance/sqlite/archives/patch-log_search-rename-index.sql b/maintenance/sqlite/archives/patch-log_search-rename-index.sql
deleted file mode 100644 (file)
index 4b98a0f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-CREATE UNIQUE INDEX ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
index d6ef40c..bed80db 100644 (file)
@@ -1738,9 +1738,9 @@ CREATE TABLE /*_*/l10n_cache (
   -- Cache key
   lc_key varchar(255) NOT NULL,
   -- Value
-  lc_value mediumblob NOT NULL
+  lc_value mediumblob NOT NULL,
+  PRIMARY KEY (lc_lang, lc_key)
 ) /*$wgDBTableOptions*/;
-CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
 
 -- Table caching which local files a module depends on that aren't
 -- registered directly, used for fast retrieval of file dependency.
index 7a95da8..3a5de66 100644 (file)
@@ -1899,8 +1899,8 @@ return [
                        'rcfilters-liveupdates-button',
                        'rcfilters-liveupdates-button-title-on',
                        'rcfilters-liveupdates-button-title-off',
-                       'rcfilters-watchlist-markSeen-button',
-                       'rcfilters-watchlist-editWatchlist-button',
+                       'rcfilters-watchlist-markseen-button',
+                       'rcfilters-watchlist-edit-watchlist-button',
                        'rcfilters-other-review-tools',
                        'blanknamespace',
                        'namespaces',
index 922da31..ecd376a 100644 (file)
                                match = s.match( ts.rgx.isoDate[ 1 ] );
                        }
                        if ( !match ) {
-                               return 0;
+                               return -Infinity;
                        }
                        // Month and day
                        for ( i = 2; i <= 4; i += 2 ) {
index ad99e22..cfcdf35 100644 (file)
                        this.$element.find( 'hr' ).detach();
                }
 
+               // Get rid of all <br>s, which are inside rcshowhide
+               // If we still have content in rcshowhide, the <br>s are
+               // gone. Instead, the CSS now has a rule to mark all <span>s
+               // inside .rcshowhide with display:block; to simulate newlines
+               // where they're actually needed.
+               this.$element.find( 'br' ).detach();
                if ( !this.$element.find( '.rcshowhide' ).contents().length ) {
                        this.$element.find( '.rcshowhide' ).detach();
-                       // If we're hiding rcshowhide, the '<br>'s are around it,
-                       // there's no need for them either.
-                       this.$element.find( 'br' ).detach();
                }
 
                if ( this.$element.find( '.cloption' ).text().trim() === '' ) {
                        '.rclistfrom, .rcnotefrom, .rcoptions-listfromreset'
                ).detach();
 
-               if ( this.$element.text().trim() === this.$element.find( 'legend' ).text() ) {
+               // Get rid of the legend
+               this.$element.find( 'legend' ).detach();
+
+               // Check if the element is essentially empty, and detach it if it is
+               if ( !this.$element.text().trim().length ) {
                        this.$element.detach();
                }
        };
index 073cd1e..56fe5b9 100644 (file)
@@ -14,7 +14,7 @@
 
                // Parent
                mw.rcfilters.ui.MarkSeenButtonWidget.parent.call( this, $.extend( {
-                       label: mw.message( 'rcfilters-watchlist-markSeen-button' ).text(),
+                       label: mw.message( 'rcfilters-watchlist-markseen-button' ).text(),
                        icon: 'doubleCheck'
                }, config ) );
 
index 86c206b..7d78565 100644 (file)
@@ -25,7 +25,7 @@
                mw.rcfilters.ui.WatchlistTopSectionWidget.parent.call( this, config );
 
                editWatchlistButton = new OO.ui.ButtonWidget( {
-                       label: mw.msg( 'rcfilters-watchlist-editWatchlist-button' ),
+                       label: mw.msg( 'rcfilters-watchlist-edit-watchlist-button' ),
                        icon: 'edit',
                        href: mw.config.get( 'wgStructuredChangeFiltersEditWatchlistUrl' )
                } );
index a991d36..0792762 100644 (file)
@@ -3,7 +3,7 @@
  */
 
 /* Remember the collapse state of the legend on recent changes and watchlist pages. */
-( function ( mw, $ ) {
+( function ( mw ) {
        var
                cookieName = 'changeslist-state',
                // Expanded by default
@@ -20,7 +20,5 @@
                                } );
                };
 
-       $( function () {
-               mw.hook( 'wikipage.content' ).add( doCollapsibleLegend );
-       } );
-}( mediaWiki, jQuery ) );
+       mw.hook( 'wikipage.content' ).add( doCollapsibleLegend );
+}( mediaWiki ) );
index 832cb2b..d250ad8 100644 (file)
        mw.widgets.UsersMultiselectWidget.prototype.updateHiddenInput = function () {
                if ( 'hiddenInput' in this ) {
                        this.hiddenInput.val( this.getSelectedUsernames().join( '\n' ) );
+                       // Hidden inputs do not trigger onChange.
+                       // @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/hidden
+                       this.hiddenInput.trigger( 'change' );
                }
        };
 
index c5989c0..fc930ca 100644 (file)
                        msg += ( e ? ':' : '.' );
                        console.log( msg );
 
-                       // If we have an exception object, log it to the error channel to trigger
-                       // proper stacktraces in browsers that support it. No fallback as we have
-                       // no browsers that don't support error(), but do support log().
-                       if ( e && console.error ) {
-                               console.error( String( e ), e );
+                       // If we have an exception object, log it to the warning channel to trigger
+                       // proper stacktraces in browsers that support it.
+                       if ( e && console.warn ) {
+                               console.warn( String( e ), e );
                        }
                }
                /* eslint-enable no-console */
index 0dab130..46c551b 100644 (file)
@@ -1147,7 +1147,7 @@ class ParserTestRunner {
         */
        private function listTables() {
                $tables = [ 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions',
-                       'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks',
+                       'protected_titles', 'revision', 'ip_changes', 'text', 'pagelinks', 'imagelinks',
                        'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks',
                        'site_stats', 'ipblocks', 'image', 'oldimage',
                        'recentchanges', 'watchlist', 'interwiki', 'logging', 'log_search',
index c844e13..91aaff5 100644 (file)
@@ -1303,7 +1303,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private function resetDB( $db, $tablesUsed ) {
                if ( $db ) {
                        $userTables = [ 'user', 'user_groups', 'user_properties' ];
-                       $pageTables = [ 'page', 'revision', 'revision_comment_temp', 'comment' ];
+                       $pageTables = [ 'page', 'revision', 'ip_changes', 'revision_comment_temp', 'comment' ];
                        $coreDBDataTables = array_merge( $userTables, $pageTables );
 
                        // If any of the user or page tables were marked as used, we should clear all of them.
index b65136a..b0f7678 100644 (file)
@@ -363,7 +363,6 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                $this->assertArrayNotHasKey( "{$key}_id", $fields, "new field, stage=$writeStage" );
                        }
 
-                       $extraFields[$pk] = $this->db->nextSequenceValue( "{$table}_{$pk}_seq" );
                        $this->db->insert( $table, $extraFields + $fields, __METHOD__ );
                        $id = $this->db->insertId();
                        if ( $usesTemp ) {
@@ -616,6 +615,31 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                $this->assertTrue( is_callable( $callback ) );
        }
 
+       public function testInsertTruncation() {
+               $comment = str_repeat( '💣', 16400 );
+               $truncated1 = str_repeat( '💣', 63 ) . '...';
+               $truncated2 = str_repeat( '💣', 16383 ) . '...';
+
+               $store = $this->makeStore( MIGRATION_WRITE_BOTH, 'ipb_reason' );
+               $fields = $store->insert( $this->db, $comment );
+               $this->assertSame( $truncated1, $fields['ipb_reason'] );
+               $stored = $this->db->selectField(
+                       'comment', 'comment_text', [ 'comment_id' => $fields['ipb_reason_id'] ], __METHOD__
+               );
+               $this->assertSame( $truncated2, $stored );
+       }
+
+       /**
+        * @expectedException OverflowException
+        * @expectedExceptionMessage Comment data is too long (65611 bytes, maximum is 65535)
+        */
+       public function testInsertTooMuchData() {
+               $store = $this->makeStore( MIGRATION_WRITE_BOTH, 'ipb_reason' );
+               $store->insert( $this->db, 'foo', [
+                       'long' => str_repeat( '💣', 16400 )
+               ] );
+       }
+
        public function testConstructor() {
                $this->assertInstanceOf( CommentStore::class, CommentStore::newKey( 'dummy' ) );
        }
diff --git a/tests/phpunit/includes/PageArchiveTest.php b/tests/phpunit/includes/PageArchiveTest.php
new file mode 100644 (file)
index 0000000..6420c39
--- /dev/null
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * Test class for page archiving.
+ *
+ * @group ContentHandler
+ * @group Database
+ * ^--- important, causes temporary tables to be used instead of the real database
+ *
+ * @group medium
+ * ^--- important, causes tests not to fail with timeout
+ */
+class PageArchiveTest extends MediaWikiTestCase {
+       /**
+        * @var WikiPage $archivedPage
+        */
+       private $archivedPage;
+
+       /**
+        * A logged out user who edited the page before it was archived.
+        * @var string $ipEditor
+        */
+       private $ipEditor;
+
+       /**
+        * Revision ID of the IP edit
+        * @var int $ipRevId
+        */
+       private $ipRevId;
+
+       function __construct( $name = null, array $data = [], $dataName = '' ) {
+               parent::__construct( $name, $data, $dataName );
+
+               $this->tablesUsed = array_merge(
+                       $this->tablesUsed,
+                       [
+                               'page',
+                               'revision',
+                               'ip_changes',
+                               'text',
+                               'archive',
+                               'recentchanges',
+                               'logging',
+                               'page_props',
+                       ]
+               );
+       }
+
+       protected function setUp() {
+               parent::setUp();
+
+               // First create our dummy page
+               $page = Title::newFromText( 'PageArchiveTest_thePage' );
+               $page = new WikiPage( $page );
+               $content = ContentHandler::makeContent(
+                       'testing',
+                       $page->getTitle(),
+                       CONTENT_MODEL_WIKITEXT
+               );
+               $page->doEditContent( $content, 'testing', EDIT_NEW );
+
+               // Insert IP revision
+               $this->ipEditor = '2600:387:ed7:947e:8c16:a1ad:dd34:1dd7';
+               $rev = new Revision( [
+                       'text' => 'Lorem Ipsum',
+                       'comment' => 'just a test',
+                       'page' => $page->getId(),
+                       'user_text' => $this->ipEditor,
+               ] );
+               $dbw = wfGetDB( DB_MASTER );
+               $this->ipRevId = $rev->insertOn( $dbw );
+
+               // Delete the page
+               $page->doDeleteArticleReal( 'Just a test deletion' );
+
+               $this->archivedPage = new PageArchive( $page->getTitle() );
+       }
+
+       /**
+        * @covers PageArchive::undelete
+        */
+       public function testUndeleteRevisions() {
+               // First make sure old revisions are archived
+               $dbr = wfGetDB( DB_REPLICA );
+               $res = $dbr->select( 'archive', '*', [ 'ar_rev_id' => $this->ipRevId ] );
+               $row = $res->fetchObject();
+               $this->assertEquals( $this->ipEditor, $row->ar_user_text );
+
+               // Should not be in revision
+               $res = $dbr->select( 'revision', '*', [ 'rev_id' => $this->ipRevId ] );
+               $this->assertFalse( $res->fetchObject() );
+
+               // Should not be in ip_changes
+               $res = $dbr->select( 'ip_changes', '*', [ 'ipc_rev_id' => $this->ipRevId ] );
+               $this->assertFalse( $res->fetchObject() );
+
+               // Restore the page
+               $this->archivedPage->undelete( [] );
+
+               // Should be back in revision
+               $res = $dbr->select( 'revision', '*', [ 'rev_id' => $this->ipRevId ] );
+               $row = $res->fetchObject();
+               $this->assertEquals( $this->ipEditor, $row->rev_user_text );
+
+               // Should be back in ip_changes
+               $res = $dbr->select( 'ip_changes', '*', [ 'ipc_rev_id' => $this->ipRevId ] );
+               $row = $res->fetchObject();
+               $this->assertEquals( IP::toHex( $this->ipEditor ), $row->ipc_hex );
+       }
+}
index b207e06..e9f16db 100644 (file)
@@ -22,6 +22,7 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->tablesUsed = array_merge( $this->tablesUsed,
                        [ 'page',
                                'revision',
+                               'ip_changes',
                                'text',
 
                                'recentchanges',
@@ -440,6 +441,25 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertEquals( 'some testing text', $rev->getContent()->getNativeData() );
        }
 
+       /**
+        * @covers Revision::insertOn
+        */
+       public function testInsertOn() {
+               $ip = '2600:387:ed7:947e:8c16:a1ad:dd34:1dd7';
+
+               $orig = $this->makeRevision( [
+                       'user_text' => $ip
+               ] );
+
+               // Make sure the revision was copied to ip_changes
+               $dbr = wfGetDB( DB_REPLICA );
+               $res = $dbr->select( 'ip_changes', '*', [ 'ipc_rev_id' => $orig->getId() ] );
+               $row = $res->fetchObject();
+
+               $this->assertEquals( IP::toHex( $ip ), $row->ipc_hex );
+               $this->assertEquals( $orig->getTimestamp(), $row->ipc_rev_timestamp );
+       }
+
        public static function provideUserWasLastToEdit() {
                return [
                        [ # 0
index 04b7ee0..4f917e9 100644 (file)
@@ -40,8 +40,6 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
         * @dataProvider provideModifyQuery
         */
        public function testModifyQuery( $filterDefinitions, $expectedValues, $input ) {
-               $self = $this;
-
                $queryCallable = function (
                        $className,
                        $ctx,
@@ -52,8 +50,8 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
                        &$query_options,
                        &$join_conds,
                        $actualSelectedValues
-               ) use ( $self, $expectedValues ) {
-                       $self->assertSame(
+               ) use ( $expectedValues ) {
+                       $this->assertSame(
                                $expectedValues,
                                $actualSelectedValues
                        );
index d0fefde..386f142 100644 (file)
@@ -18,6 +18,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
                        [ 'page',
                                'revision',
                                'archive',
+                               'ip_changes',
                                'text',
 
                                'recentchanges',
index d7fc13d..9366282 100644 (file)
@@ -3,7 +3,20 @@
 /**
  * @group Database
  */
-class ContribsPagerTest extends \PHPUnit_Framework_TestCase {
+class ContribsPagerTest extends MediaWikiTestCase {
+       /** @var ContribsPager */
+       private $pager;
+
+       function setUp() {
+               $context = new RequestContext();
+               $this->pager = new ContribsPager( $context, [
+                       'start' => '2017-01-01',
+                       'end' => '2017-02-02',
+               ] );
+
+               parent::setUp();
+       }
+
        /**
         * @dataProvider dateFilterOptionProcessingProvider
         * @param array $inputOpts Input options
@@ -47,4 +60,58 @@ class ContribsPagerTest extends \PHPUnit_Framework_TestCase {
                                'end' => '2012-12-31' ] ],
                ];
        }
+
+       /**
+        * @covers ContribsPager::isQueryableRange
+        * @dataProvider provideQueryableRanges
+        */
+       public function testQueryableRanges( $ipRange ) {
+               $this->setMwGlobals( [
+                       'wgRangeContributionsCIDRLimit' => [
+                               'IPv4' => 16,
+                               'IPv6' => 32,
+                       ],
+               ] );
+
+               $this->assertTrue(
+                       $this->pager->isQueryableRange( $ipRange ),
+                       "$ipRange is a queryable IP range"
+               );
+       }
+
+       public function provideQueryableRanges() {
+               return [
+                       [ '116.17.184.5/32' ],
+                       [ '0.17.184.5/16' ],
+                       [ '2000::/32' ],
+                       [ '2001:db8::/128' ],
+               ];
+       }
+
+       /**
+        * @covers ContribsPager::isQueryableRange
+        * @dataProvider provideUnqueryableRanges
+        */
+       public function testUnqueryableRanges( $ipRange ) {
+               $this->setMwGlobals( [
+                       'wgRangeContributionsCIDRLimit' => [
+                               'IPv4' => 16,
+                               'IPv6' => 32,
+                       ],
+               ] );
+
+               $this->assertFalse(
+                       $this->pager->isQueryableRange( $ipRange ),
+                       "$ipRange is not a queryable IP range"
+               );
+       }
+
+       public function provideUnqueryableRanges() {
+               return [
+                       [ '116.17.184.5/33' ],
+                       [ '0.17.184.5/15' ],
+                       [ '2000::/31' ],
+                       [ '2001:db8::/9999' ],
+               ];
+       }
 }
index c93fe47..3d0d344 100644 (file)
@@ -140,7 +140,7 @@ class SpecialPageDataTest extends SpecialPageTestBase {
                list( $output, ) = $this->executeSpecialPage( '', $request );
 
                $this->assertContains(
-                       "Content negotiation applies based on you client's Accept header.",
+                       "Content negotiation applies based on your client's Accept header.",
                        $output,
                        "output"
                );
index b58d71c..aa368de 100644 (file)
@@ -217,6 +217,8 @@ class UserTest extends MediaWikiTestCase {
                        [ 'Ab/cd', false, 'Contains slash' ],
                        [ 'Ab cd', true, 'Whitespace' ],
                        [ '192.168.1.1', false, 'IP' ],
+                       [ '116.17.184.5/32', false, 'IP range' ],
+                       [ '::e:f:2001/96', false, 'IPv6 range' ],
                        [ 'User:Abcd', false, 'Reserved Namespace' ],
                        [ '12abcd232', true, 'Starts with Numbers' ],
                        [ '?abcd', true, 'Start with ? mark' ],
index 8242c79..0a1f3b4 100644 (file)
@@ -30,6 +30,7 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
        function addDBData() {
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'ip_changes';
                $this->tablesUsed[] = 'text';
 
                $this->mergeMwGlobalArrayValue( 'wgContentHandlers', [
index 2262cc0..554d5f6 100644 (file)
@@ -29,6 +29,7 @@ class BackupDumperPageTest extends DumpTestCase {
 
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
+               $this->tablesUsed[] = 'ip_changes';
                $this->tablesUsed[] = 'text';
 
                try {
index 257699a..01589c3 100644 (file)
        parserTest( 'Y Dates', 'date', YDates );
 
        ISODates = [
-               [ '2000',               false,  946684800000, 'Plain 4-digit year' ],
+               [ '',           false,  -Infinity, 'Not a date' ],
+               [ '2000',       false,  946684800000, 'Plain 4-digit year' ],
                [ '2000-01',    true,   946684800000, 'Year with month' ],
                [ '2000-01-01', true,   946684800000, 'Year with month and day' ],
                [ '2000-13-01', false,  978307200000, 'Non existant month' ],