Merge "wdio-mediawiki: relative internal lookups"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 26 Sep 2018 15:16:02 +0000 (15:16 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 26 Sep 2018 15:16:02 +0000 (15:16 +0000)
85 files changed:
docs/pageupdater.txt
includes/OutputPage.php
includes/Revision.php
includes/Revision/RevisionRenderer.php
includes/Storage/DerivedPageDataUpdater.php
includes/Storage/PageUpdater.php
includes/Storage/RevisionStore.php
includes/Storage/SlotRecord.php
includes/api/ApiComparePages.php
includes/api/ApiFeedContributions.php
includes/api/ApiQueryRevisionsBase.php
includes/api/i18n/uk.json
includes/api/i18n/zh-hant.json
includes/diff/DifferenceEngine.php
includes/htmlform/fields/HTMLTitleTextField.php
includes/page/Article.php
includes/page/WikiPage.php
includes/poolcounter/PoolWorkArticleView.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialNewimages.php
languages/i18n/ar.json
languages/i18n/arz.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/fr.json
languages/i18n/gcr.json
languages/i18n/hif-latn.json
languages/i18n/hy.json
languages/i18n/it.json
languages/i18n/jv.json
languages/i18n/kjp.json
languages/i18n/ko.json
languages/i18n/lez.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mnw.json
languages/i18n/my.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/roa-tara.json
languages/i18n/scn.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/uk.json
languages/i18n/wa.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/edit.php
maintenance/populateContentTables.php
maintenance/storage/dumpRev.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/Revision/RenderedRevisionTest.php
tests/phpunit/includes/Revision/RevisionRendererTest.php
tests/phpunit/includes/RevisionDbTestBase.php
tests/phpunit/includes/RevisionMcrDbTest.php
tests/phpunit/includes/RevisionMcrReadNewDbTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
tests/phpunit/includes/Storage/MutableRevisionRecordTest.php
tests/phpunit/includes/Storage/MutableRevisionSlotsTest.php
tests/phpunit/includes/Storage/NoContentModelRevisionStoreDbTest.php
tests/phpunit/includes/Storage/PageUpdaterTest.php
tests/phpunit/includes/Storage/RevisionArchiveRecordTest.php
tests/phpunit/includes/Storage/RevisionQueryInfoTest.php
tests/phpunit/includes/Storage/RevisionRecordTests.php
tests/phpunit/includes/Storage/RevisionSlotsTest.php
tests/phpunit/includes/Storage/RevisionSlotsUpdateTest.php
tests/phpunit/includes/Storage/RevisionStoreDbTestBase.php
tests/phpunit/includes/Storage/RevisionStoreRecordTest.php
tests/phpunit/includes/Storage/RevisionStoreTest.php
tests/phpunit/includes/Storage/SlotRecordTest.php
tests/phpunit/includes/api/ApiQueryWatchlistIntegrationTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/page/ArticleViewTest.php
tests/phpunit/includes/page/PageArchivePreMcrTest.php
tests/phpunit/includes/page/WikiPageDbTestBase.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/poolcounter/PoolWorkArticleViewTest.php

index 4980c92..54eb91a 100644 (file)
@@ -61,7 +61,7 @@ Typical usage for programmatic revision creation (with $page being a WikiPage as
 replaced by a repository service later):
 
   $updater = $page->newPageUpdater( $user );
-  $updater->setContent( 'main', $content );
+  $updater->setContent( SlotRecord::MAIN, $content );
   $updater->setRcPatrolStatus( RecentChange::PRC_PATROLLED );
   $newRev = $updater->saveRevision( $comment );
 
@@ -69,8 +69,8 @@ Usage with content depending on the parent revision
 
   $updater = $page->newPageUpdater( $user );
   $parent = $updater->grabParentRevision();
-  $content = $parent->getContent( 'main' )->replaceSection( $section, $sectionContent );
-  $updater->setContent( 'main', $content );
+  $content = $parent->getContent( SlotRecord::MAIN )->replaceSection( $section, $sectionContent );
+  $updater->setContent( SlotRecord::MAIN, $content );
   $newRev = $updater->saveRevision( $comment, EDIT_UPDATE );
 
 In both cases, all secondary updates will be triggered automatically.
index 99a4c2b..2bfccda 100644 (file)
@@ -1766,7 +1766,8 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add wikitext with a custom Title object
+        * Add wikitext with a custom Title object.
+        * Output is unwrapped.
         *
         * @param string $text Wikitext
         * @param Title $title
@@ -1793,6 +1794,7 @@ class OutputPage extends ContextSource {
 
                $this->addParserOutput( $parserOutput, [
                        'enableSectionEditLinks' => false,
+                       'wrapperDivClass' => '',
                ] );
        }
 
index 1e35dda..a55b1c4 100644 (file)
@@ -691,7 +691,7 @@ class Revision implements IDBAccessObject {
         * @return SlotRecord
         */
        private function getMainSlotRaw() {
-               return $this->mRecord->getSlot( 'main', RevisionRecord::RAW );
+               return $this->mRecord->getSlot( SlotRecord::MAIN, RevisionRecord::RAW );
        }
 
        /**
@@ -926,7 +926,7 @@ class Revision implements IDBAccessObject {
                }
 
                try {
-                       return $this->mRecord->getContent( 'main', $audience, $user );
+                       return $this->mRecord->getContent( SlotRecord::MAIN, $audience, $user );
                }
                catch ( RevisionAccessException $e ) {
                        return null;
index f71f9e7..c937376 100644 (file)
@@ -25,6 +25,7 @@ namespace MediaWiki\Revision;
 use Html;
 use InvalidArgumentException;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 use ParserOptions;
 use ParserOutput;
 use Psr\Log\LoggerInterface;
@@ -165,15 +166,15 @@ class RevisionRenderer {
                $withHtml = $hints['generate-html'] ?? true;
 
                // short circuit if there is only the main slot
-               if ( array_keys( $slots ) === [ 'main' ] ) {
-                       return $rrev->getSlotParserOutput( 'main' );
+               if ( array_keys( $slots ) === [ SlotRecord::MAIN ] ) {
+                       return $rrev->getSlotParserOutput( SlotRecord::MAIN );
                }
 
                // TODO: put fancy layout logic here, see T200915.
 
                // move main slot to front
-               if ( isset( $slots['main'] ) ) {
-                       $slots = [ 'main' => $slots['main'] ] + $slots;
+               if ( isset( $slots[SlotRecord::MAIN] ) ) {
+                       $slots = [ SlotRecord::MAIN => $slots[SlotRecord::MAIN] ] + $slots;
                }
 
                $combinedOutput = new ParserOutput( null );
index e34e406..3f3b0cf 100644 (file)
@@ -659,7 +659,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                }
 
                // TODO: MCR: ask all slots if they have links [SlotHandler/PageTypeHandler]
-               $mainContent = $this->getRawContent( 'main' );
+               $mainContent = $this->getRawContent( SlotRecord::MAIN );
                return $mainContent->isCountable( $hasLinks );
        }
 
@@ -668,7 +668,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         */
        public function isRedirect() {
                // NOTE: main slot determines redirect status
-               $mainContent = $this->getRawContent( 'main' );
+               $mainContent = $this->getRawContent( SlotRecord::MAIN );
 
                return $mainContent->isRedirect();
        }
@@ -680,7 +680,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         */
        private function revisionIsRedirect( RevisionRecord $rev ) {
                // NOTE: main slot determines redirect status
-               $mainContent = $rev->getContent( 'main', RevisionRecord::RAW );
+               $mainContent = $rev->getContent( SlotRecord::MAIN, RevisionRecord::RAW );
 
                return $mainContent->isRedirect();
        }
@@ -751,8 +751,8 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                $stashedEdit = false;
 
                // TODO: MCR: allow output for all slots to be stashed.
-               if ( $useStash && $slotsUpdate->isModifiedSlot( 'main' ) ) {
-                       $mainContent = $slotsUpdate->getModifiedSlot( 'main' )->getContent();
+               if ( $useStash && $slotsUpdate->isModifiedSlot( SlotRecord::MAIN ) ) {
+                       $mainContent = $slotsUpdate->getModifiedSlot( SlotRecord::MAIN )->getContent();
                        $legacyUser = User::newFromIdentity( $user );
                        $stashedEdit = ApiStashEdit::checkCache( $title, $mainContent, $legacyUser );
                }
@@ -807,7 +807,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                                // No PST for inherited slots! Note that "modified" slots may still be inherited
                                // from an earlier version, e.g. for rollbacks.
                                $pstSlot = $slot;
-                       } elseif ( $role === 'main' && $stashedEdit ) {
+                       } elseif ( $role === SlotRecord::MAIN && $stashedEdit ) {
                                // TODO: MCR: allow PST content for all slots to be stashed.
                                $pstSlot = SlotRecord::newUnsaved( $role, $stashedEdit->pstContent );
                        } else {
@@ -1223,11 +1223,11 @@ class DerivedPageDataUpdater implements IDBAccessObject {
 
                $preparedEdit->popts = $this->getCanonicalParserOptions();
                $preparedEdit->output = $this->getCanonicalParserOutput();
-               $preparedEdit->pstContent = $this->revision->getContent( 'main' );
+               $preparedEdit->pstContent = $this->revision->getContent( SlotRecord::MAIN );
                $preparedEdit->newContent =
-                       $slotsUpdate->isModifiedSlot( 'main' )
-                       ? $slotsUpdate->getModifiedSlot( 'main' )->getContent()
-                       : $this->revision->getContent( 'main' ); // XXX: can we just remove this?
+                       $slotsUpdate->isModifiedSlot( SlotRecord::MAIN )
+                       ? $slotsUpdate->getModifiedSlot( SlotRecord::MAIN )->getContent()
+                       : $this->revision->getContent( SlotRecord::MAIN ); // XXX: can we just remove this?
                $preparedEdit->oldContent = null; // unused. // XXX: could get this from the parent revision
                $preparedEdit->revid = $this->revision ? $this->revision->getId() : null;
                $preparedEdit->timestamp = $preparedEdit->output->getCacheTime();
@@ -1394,7 +1394,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
 
                // TODO: MCR: check if *any* changed slot supports categories!
                if ( $this->rcWatchCategoryMembership
-                       && $this->getContentHandler( 'main' )->supportsCategories() === true
+                       && $this->getContentHandler( SlotRecord::MAIN )->supportsCategories() === true
                        && ( $this->options['changed'] || $this->options['created'] )
                        && !$this->options['restored']
                ) {
@@ -1459,7 +1459,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                ) );
 
                // TODO: make search infrastructure aware of slots!
-               $mainSlot = $this->revision->getSlot( 'main' );
+               $mainSlot = $this->revision->getSlot( SlotRecord::MAIN );
                if ( !$mainSlot->isInherited() && !$this->isContentDeleted() ) {
                        DeferredUpdates::addUpdate( new SearchUpdate( $id, $dbKey, $mainSlot->getContent() ) );
                }
@@ -1493,9 +1493,9 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                }
 
                if ( $title->getNamespace() == NS_MEDIAWIKI
-                       && $this->getRevisionSlotsUpdate()->isModifiedSlot( 'main' )
+                       && $this->getRevisionSlotsUpdate()->isModifiedSlot( SlotRecord::MAIN )
                ) {
-                       $mainContent = $this->isContentDeleted() ? null : $this->getRawContent( 'main' );
+                       $mainContent = $this->isContentDeleted() ? null : $this->getRawContent( SlotRecord::MAIN );
 
                        $this->messageCache->updateMessageOverride( $title, $mainContent );
                }
index 1621213..29ce710 100644 (file)
@@ -388,7 +388,7 @@ class PageUpdater {
         * @param string $role A slot role name (but not "main")
         */
        public function removeSlot( $role ) {
-               if ( $role === 'main' ) {
+               if ( $role === SlotRecord::MAIN ) {
                        throw new InvalidArgumentException( 'Cannot remove the main slot!' );
                }
 
@@ -635,7 +635,7 @@ class PageUpdater {
 
                // Make sure the given content type is allowed for this page
                // TODO: decide: Extend check to other slots? Consider the role in check? [PageType]
-               $mainContentHandler = $this->getContentHandler( 'main' );
+               $mainContentHandler = $this->getContentHandler( SlotRecord::MAIN );
                if ( !$mainContentHandler->canBeUsedOn( $this->getTitle() ) ) {
                        $this->status = Status::newFatal( 'content-not-allowed-here',
                                ContentHandler::getLocalizedName( $mainContentHandler->getModelID() ),
@@ -701,7 +701,7 @@ class PageUpdater {
                 */
                $this->derivedDataUpdater->getCanonicalParserOutput();
 
-               $mainContent = $this->derivedDataUpdater->getSlots()->getContent( 'main' );
+               $mainContent = $this->derivedDataUpdater->getSlots()->getContent( SlotRecord::MAIN );
 
                // Trigger pre-save hook (using provided edit summary)
                $hookStatus = Status::newGood( [] );
@@ -1049,7 +1049,7 @@ class PageUpdater {
        private function doCreate( CommentStoreComment $summary, User $user, $flags ) {
                $wikiPage = $this->getWikiPage(); // TODO: use for legacy hooks only!
 
-               if ( !$this->derivedDataUpdater->getSlots()->hasSlot( 'main' ) ) {
+               if ( !$this->derivedDataUpdater->getSlots()->hasSlot( SlotRecord::MAIN ) ) {
                        throw new PageUpdateException( 'Must provide a main slot when creating a page!' );
                }
 
@@ -1186,7 +1186,7 @@ class PageUpdater {
                                $hints['causeAgent'] = $user->getName();
 
                                $newLegacyRevision = new Revision( $newRevisionRecord );
-                               $mainContent = $newRevisionRecord->getContent( 'main', RevisionRecord::RAW );
+                               $mainContent = $newRevisionRecord->getContent( SlotRecord::MAIN, RevisionRecord::RAW );
 
                                // Update links tables, site stats, etc.
                                $this->derivedDataUpdater->prepareUpdate( $newRevisionRecord, $hints );
index 61b428f..bab1b5e 100644 (file)
@@ -437,21 +437,25 @@ class RevisionStore
                $slotRoles = $rev->getSlotRoles();
 
                // Make sure the main slot is always provided throughout migration
-               if ( !in_array( 'main', $slotRoles ) ) {
+               if ( !in_array( SlotRecord::MAIN, $slotRoles ) ) {
                        throw new InvalidArgumentException(
                                'main slot must be provided'
                        );
                }
 
                // If we are not writing into the new schema, we can't support extra slots.
-               if ( !$this->hasMcrSchemaFlags( SCHEMA_COMPAT_WRITE_NEW ) && $slotRoles !== [ 'main' ] ) {
+               if ( !$this->hasMcrSchemaFlags( SCHEMA_COMPAT_WRITE_NEW )
+                       && $slotRoles !== [ SlotRecord::MAIN ]
+               ) {
                        throw new InvalidArgumentException(
                                'Only the main slot is supported when not writing to the MCR enabled schema!'
                        );
                }
 
                // As long as we are not reading from the new schema, we don't want to write extra slots.
-               if ( !$this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_NEW ) && $slotRoles !== [ 'main' ] ) {
+               if ( !$this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_NEW )
+                       && $slotRoles !== [ SlotRecord::MAIN ]
+               ) {
                        throw new InvalidArgumentException(
                                'Only the main slot is supported when not reading from the MCR enabled schema!'
                        );
@@ -519,7 +523,7 @@ class RevisionStore
                // Technically, this could go away after MCR migration: while
                // calling code may require a main slot to exist, RevisionStore
                // really should not know or care about that requirement.
-               $rev->getSlot( 'main', RevisionRecord::RAW );
+               $rev->getSlot( SlotRecord::MAIN, RevisionRecord::RAW );
 
                foreach ( $slotRoles as $role ) {
                        $slot = $rev->getSlot( $role, RevisionRecord::RAW );
@@ -594,7 +598,7 @@ class RevisionStore
                                $newSlots[$role] = $slot;
 
                                // Write the main slot's text ID to the revision table for backwards compatibility
-                               if ( $slot->getRole() === 'main'
+                               if ( $slot->getRole() === SlotRecord::MAIN
                                        && $this->hasMcrSchemaFlags( SCHEMA_COMPAT_WRITE_OLD )
                                ) {
                                        $blobAddress = $slot->getAddress();
@@ -672,7 +676,7 @@ class RevisionStore
                $contentId = null;
 
                // Write the main slot's text ID to the revision table for backwards compatibility
-               if ( $protoSlot->getRole() === 'main'
+               if ( $protoSlot->getRole() === SlotRecord::MAIN
                        && $this->hasMcrSchemaFlags( SCHEMA_COMPAT_WRITE_OLD )
                ) {
                        // If SCHEMA_COMPAT_WRITE_NEW is also set, the fake content ID is overwritten
@@ -876,7 +880,7 @@ class RevisionStore
 
                if ( $this->hasMcrSchemaFlags( SCHEMA_COMPAT_WRITE_OLD ) ) {
                        // In non MCR mode this IF section will relate to the main slot
-                       $mainSlot = $rev->getSlot( 'main' );
+                       $mainSlot = $rev->getSlot( SlotRecord::MAIN );
                        $model = $mainSlot->getModel();
                        $format = $mainSlot->getFormat();
 
@@ -1209,7 +1213,7 @@ class RevisionStore
         */
        private function emulateMainSlot_1_29( $row, $queryFlags, Title $title ) {
                $mainSlotRow = new stdClass();
-               $mainSlotRow->role_name = 'main';
+               $mainSlotRow->role_name = SlotRecord::MAIN;
                $mainSlotRow->model_name = null;
                $mainSlotRow->slot_revision_id = null;
                $mainSlotRow->slot_content_id = null;
@@ -1358,7 +1362,7 @@ class RevisionStore
                        $mainSlotRow->slot_content_id =
                                function ( SlotRecord $slot ) use ( $queryFlags, $mainSlotRow ) {
                                        $db = $this->getDBConnectionRefForQueryFlags( $queryFlags );
-                                       return $this->findSlotContentId( $db, $mainSlotRow->slot_revision_id, 'main' );
+                                       return $this->findSlotContentId( $db, $mainSlotRow->slot_revision_id, SlotRecord::MAIN );
                                };
                }
 
@@ -1609,7 +1613,7 @@ class RevisionStore
                        $slots[$row->role_name] = new SlotRecord( $row, $contentCallback );
                }
 
-               if ( !isset( $slots['main'] ) ) {
+               if ( !isset( $slots[SlotRecord::MAIN] ) ) {
                        throw new RevisionAccessException(
                                'Main slot of revision ' . $revId . ' not found in database!'
                        );
@@ -1640,7 +1644,7 @@ class RevisionStore
        ) {
                if ( !$this->hasMcrSchemaFlags( SCHEMA_COMPAT_READ_NEW ) ) {
                        $mainSlot = $this->emulateMainSlot_1_29( $revisionRow, $queryFlags, $title );
-                       $slots = new RevisionSlots( [ 'main' => $mainSlot ] );
+                       $slots = new RevisionSlots( [ SlotRecord::MAIN => $mainSlot ] );
                } else {
                        // XXX: do we need the same kind of caching here
                        // that getKnownCurrentRevision uses (if $revId == page_latest?)
@@ -2346,7 +2350,7 @@ class RevisionStore
                        $ret['fields']['slot_revision_id'] = 'slots.rev_id';
                        $ret['fields']['slot_content_id'] = 'NULL';
                        $ret['fields']['slot_origin'] = 'slots.rev_id';
-                       $ret['fields']['role_name'] = $db->addQuotes( 'main' );
+                       $ret['fields']['role_name'] = $db->addQuotes( SlotRecord::MAIN );
 
                        if ( in_array( 'content', $options, true ) ) {
                                $ret['fields']['content_size'] = 'slots.rev_len';
index c7eb735..ee36d44 100644 (file)
@@ -37,6 +37,8 @@ use Wikimedia\Assert\Assert;
  */
 class SlotRecord {
 
+       const MAIN = 'main';
+
        /**
         * @var object database result row, as a raw object. Callbacks are supported for field values,
         *      to enable on-demand emulation of these values. This is primarily intended for use
index 02cadbd..c5a2234 100644 (file)
@@ -23,6 +23,7 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
 use MediaWiki\Storage\RevisionStore;
+use MediaWiki\Storage\SlotRecord;
 
 class ApiComparePages extends ApiBase {
 
@@ -271,7 +272,7 @@ class ApiComparePages extends ApiBase {
                }
 
                $guessedTitle = $this->guessTitle();
-               if ( $guessedTitle && $role === 'main' ) {
+               if ( $guessedTitle && $role === SlotRecord::MAIN ) {
                        // @todo: Use SlotRoleRegistry and do this for all slots
                        return $guessedTitle->getContentModel();
                }
@@ -283,7 +284,7 @@ class ApiComparePages extends ApiBase {
                        return $params["tocontentmodel-$role"];
                }
 
-               if ( $role === 'main' ) {
+               if ( $role === SlotRecord::MAIN ) {
                        if ( isset( $params['fromcontentmodel'] ) ) {
                                return $params['fromcontentmodel'];
                        }
@@ -315,7 +316,7 @@ class ApiComparePages extends ApiBase {
                $this->requireMaxOneParameter( $params, "{$prefix}text", "{$prefix}slots" );
                $this->requireMaxOneParameter( $params, "{$prefix}section", "{$prefix}slots" );
                if ( $params["{$prefix}text"] !== null ) {
-                       $params["{$prefix}slots"] = [ 'main' ];
+                       $params["{$prefix}slots"] = [ SlotRecord::MAIN ];
                        $params["{$prefix}text-main"] = $params["{$prefix}text"];
                        $params["{$prefix}section-main"] = null;
                        $params["{$prefix}contentmodel-main"] = $params["{$prefix}contentmodel"];
@@ -378,10 +379,11 @@ class ApiComparePages extends ApiBase {
                                if ( isset( $params["{$prefix}section"] ) ) {
                                        $section = $params["{$prefix}section"];
                                        $newRev = MutableRevisionRecord::newFromParentRevision( $rev );
-                                       $content = $rev->getContent( 'main', RevisionRecord::FOR_THIS_USER, $this->getUser() );
+                                       $content = $rev->getContent( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER,
+                                               $this->getUser() );
                                        if ( !$content ) {
                                                $this->dieWithError(
-                                                       [ 'apierror-missingcontent-revid-role', $rev->getId(), 'main' ], 'missingcontent'
+                                                       [ 'apierror-missingcontent-revid-role', $rev->getId(), SlotRecord::MAIN ], 'missingcontent'
                                                );
                                        }
                                        $content = $content ? $content->getSection( $section ) : null;
@@ -391,7 +393,7 @@ class ApiComparePages extends ApiBase {
                                                        "nosuch{$prefix}section"
                                                );
                                        }
-                                       $newRev->setContent( 'main', $content );
+                                       $newRev->setContent( SlotRecord::MAIN, $content );
                                }
 
                                return [ $newRev, $rev, $rev ];
@@ -412,8 +414,8 @@ class ApiComparePages extends ApiBase {
                foreach ( $params["{$prefix}slots"] as $role ) {
                        $text = $params["{$prefix}text-{$role}"];
                        if ( $text === null ) {
-                               // The 'main' role can't be deleted
-                               if ( $role === 'main' ) {
+                               // The SlotRecord::MAIN role can't be deleted
+                               if ( $role === SlotRecord::MAIN ) {
                                        $this->dieWithError( [ 'apierror-compare-maintextrequired', $prefix ] );
                                }
 
@@ -439,7 +441,7 @@ class ApiComparePages extends ApiBase {
                        if ( !$model && $rev && $rev->hasSlot( $role ) ) {
                                $model = $rev->getSlot( $role, RevisionRecord::RAW )->getModel();
                        }
-                       if ( !$model && $title && $role === 'main' ) {
+                       if ( !$model && $title && $role === SlotRecord::MAIN ) {
                                // @todo: Use SlotRoleRegistry and do this for all slots
                                $model = $title->getContentModel();
                        }
@@ -494,7 +496,7 @@ class ApiComparePages extends ApiBase {
                        }
 
                        // Deprecated 'fromsection'/'tosection'
-                       if ( $role === 'main' && isset( $params["{$prefix}section"] ) ) {
+                       if ( $role === SlotRecord::MAIN && isset( $params["{$prefix}section"] ) ) {
                                $section = $params["{$prefix}section"];
                                $content = $content->getSection( $section );
                                if ( !$content ) {
@@ -581,8 +583,8 @@ class ApiComparePages extends ApiBase {
 
        public function getAllowedParams() {
                $slotRoles = MediaWikiServices::getInstance()->getSlotRoleStore()->getMap();
-               if ( !in_array( 'main', $slotRoles, true ) ) {
-                       $slotRoles[] = 'main';
+               if ( !in_array( SlotRecord::MAIN, $slotRoles, true ) ) {
+                       $slotRoles[] = SlotRecord::MAIN;
                }
                sort( $slotRoles, SORT_STRING );
 
index 92d504e..2b2b32c 100644 (file)
@@ -24,6 +24,7 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\RevisionAccessException;
 use MediaWiki\Storage\RevisionRecord;
 use MediaWiki\Storage\RevisionStore;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * @ingroup API
@@ -174,7 +175,7 @@ class ApiFeedContributions extends ApiBase {
                if ( $revision ) {
                        $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
                        try {
-                               $content = $revision->getContent( 'main' );
+                               $content = $revision->getContent( SlotRecord::MAIN );
                        } catch ( RevisionAccessException $e ) {
                                $content = null;
                        }
index 600c89e..e5d7748 100644 (file)
@@ -307,7 +307,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
                        }
                        if ( $this->slotRoles === null ) {
                                try {
-                                       $slot = $revision->getSlot( 'main', RevisionRecord::RAW );
+                                       $slot = $revision->getSlot( SlotRecord::MAIN, RevisionRecord::RAW );
                                } catch ( RevisionAccessException $e ) {
                                        // Back compat: If there's no slot, there's no content, so set 'textmissing'
                                        // @todo: Gergő says to mention T198099 as a "todo" here.
@@ -621,8 +621,8 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
 
        public function getAllowedParams() {
                $slotRoles = MediaWikiServices::getInstance()->getSlotRoleStore()->getMap();
-               if ( !in_array( 'main', $slotRoles, true ) ) {
-                       $slotRoles[] = 'main';
+               if ( !in_array( SlotRecord::MAIN, $slotRoles, true ) ) {
+                       $slotRoles[] = SlotRecord::MAIN;
                }
                sort( $slotRoles, SORT_STRING );
 
index c9eb3b4..4bff7ef 100644 (file)
        "apihelp-compare-param-fromid": "Перший ID сторінки для порівняння.",
        "apihelp-compare-param-fromrev": "Перша версія для порівняння.",
        "apihelp-compare-param-frompst": "Зробити трансформацію перед збереженням на <var>fromtext-&#x7B;slot}</var>.",
-       "apihelp-compare-param-fromtext": "Використати цей текст замість контенту версії, вказаної через <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var>.",
-       "apihelp-compare-param-fromcontentmodel": "Контентна модель <var>fromtext</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
-       "apihelp-compare-param-fromcontentformat": "Формат серіалізації контенту <var>fromtext</var>.",
+       "apihelp-compare-param-fromslots": "Обійти вміст версії, заданої за допомогою <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var>.\n\nЦей параметр задає слоти, які буде змінено. Використовуйте <var>fromtext-&#x7B;slot}</var>, <var>fromcontentmodel-&#x7B;slot}</var>, та <var>fromcontentformat-&#x7B;slot}</var>, щоб вказувати вміст для кожного слота.",
+       "apihelp-compare-param-fromtext-{slot}": "Текст вказаного слоту. Якщо пропущено, слот буде вилучено з версії.",
+       "apihelp-compare-param-fromsection-{slot}": "Коли <var>fromtext-&#x7B;slot}</var> є вмістом єдиного розділу, це — номер розділу. Його буде вбудовано у версію, задану за допомогою <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var> — так, як для редагувнання розділу.",
+       "apihelp-compare-param-fromcontentmodel-{slot}": "Контентна модель <var>fromtext-&#x7B;slot}</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
+       "apihelp-compare-param-fromcontentformat-{slot}": "Формат серіалізації контенту <var>fromtext-&#x7B;slot}</var>.",
+       "apihelp-compare-param-fromtext": "Вкажіть <kbd>fromslots=main</kbd> і використайте <var>fromtext-main</var> натомість.",
+       "apihelp-compare-param-fromcontentmodel": "Вкажіть <kbd>fromslots=main</kbd> і використайте <var>fromcontentmodel-main</var> натомість.",
+       "apihelp-compare-param-fromcontentformat": "Вкажіть <kbd>fromslots=main</kbd> і використайте <var>fromcontentformat-main</var> натомість.",
        "apihelp-compare-param-fromsection": "Використовувати лише вказану секцію із заданого вмісту «from».",
        "apihelp-compare-param-totitle": "Другий заголовок для порівняння.",
        "apihelp-compare-param-toid": "Другий ID сторінки для порівняння.",
        "apihelp-compare-param-torev": "Друга версія для порівняння.",
        "apihelp-compare-param-torelative": "Використати версію, яка стосується версії, визначеної через <var>fromtitle</var>, <var>fromid</var> або <var>fromrev</var>. Усі інші опції 'to' буде проігноровано.",
        "apihelp-compare-param-topst": "Виконати трансформацію перед збереженням на <var>totext</var>.",
-       "apihelp-compare-param-totext": "Використати цей текст замість контенту версії, вказаної через <var>totitle</var>, <var>toid</var> або <var>torev</var>.",
-       "apihelp-compare-param-tocontentmodel": "Контентна модель <var>totext</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
-       "apihelp-compare-param-tocontentformat": "Формат серіалізації контенту <var>totext</var>.",
+       "apihelp-compare-param-toslots": "Обійти вміст версії, заданої за допомогою <var>totitle</var>, <var>toid</var> або <var>torev</var>.\n\nЦей параметр задає слоти, які буде змінено. Використовуйте <var>totext-&#x7B;slot}</var>, <var>tocontentmodel-&#x7B;slot}</var>, та <var>tocontentformat-&#x7B;slot}</var>, щоб вказувати вміст для кожного слота.",
+       "apihelp-compare-param-totext-{slot}": "Текст вказаного слота. Якщо пропущено, цей слот буде вилучено з версії.",
+       "apihelp-compare-param-tosection-{slot}": "Коли <var>totext-&#x7B;slot}</var> є вмістом єдиного розділу, це — номер цього розділу. Його буде вбудовано у версію, задану за допомогою <var>totitle</var>, <var>toid</var> або <var>torev</var> — так, як для редагування розділу.",
+       "apihelp-compare-param-tocontentmodel-{slot}": "Контентна модель <var>totext-&#x7B;slot}</var>. Якщо не вказано, буде використано припущення на основі інших параметрів.",
+       "apihelp-compare-param-tocontentformat-{slot}": "Формат серіалізації контенту <var>totext-&#x7B;slot}</var>.",
+       "apihelp-compare-param-totext": "Вкажіть <kbd>toslots=main</kbd> і використайте <var>totext-main</var> натомість.",
+       "apihelp-compare-param-tocontentmodel": "Вкажіть <kbd>toslots=main</kbd> і використайте <var>tocontentmodel-main</var> натомість.",
+       "apihelp-compare-param-tocontentformat": "Вкажіть <kbd>toslots=main</kbd> і використайте <var>tocontentformat-main</var> натомість.",
        "apihelp-compare-param-tosection": "Використовувати лише вказану секцію із заданого вмісту «to».",
        "apihelp-compare-param-prop": "Які уривки інформації отримати.",
        "apihelp-compare-paramvalue-prop-diff": "HTML різниці версій.",
        "apihelp-compare-paramvalue-prop-comment": "Опис редагування версій 'from' і 'to'.",
        "apihelp-compare-paramvalue-prop-parsedcomment": "Опрацьований опис редагування версій 'from' і 'to'.",
        "apihelp-compare-paramvalue-prop-size": "Розмір версій 'from' і 'to'.",
+       "apihelp-compare-param-slots": "Повернути окремі дифи для цих слотів замість єдиного спільного дифу для всіх слотів.",
        "apihelp-compare-example-1": "Створити порівняння версій 1 і 2.",
        "apihelp-createaccount-summary": "Створити новий обліковий запис користувача.",
        "apihelp-createaccount-param-preservestate": "Якщо запит <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> повернув істину для <samp>hasprimarypreservedstate</samp>, запити позначені як <samp>primary-required</samp> повинні бути пропущені. Якщо він повернув не порожнє значення для <samp>preservedusername</samp>, це ім'я користувача повинно бути використано для параметру <var>username</var>.",
        "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "<var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> вікі-сайту репозиторію, або еквівалент.",
        "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "Чи можна завантажувати файли в цей репозиторій, напр., через CORS та спільну автентифікацію.",
        "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "Назва вікі-сайту репозиторію, читабельна для людини.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "URL-адреса значка вікіпроекту репозиторію, із <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "Чи сторінки опису беруться з цього репозиторію при перегляді локальних сторінок опису файлів.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Чи назви файлів неявно починаються з великої літери.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "Чи той репозиторій є локальним, чи ні.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-name": "Ключ репозиторію — використовується, наприклад, у повернутих значеннях <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> та[[Special:ApiHelp/query+imageinfo|imageinfo]].",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Кореневий URL-шлях для шляхів до зображень.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "Кореневий URL-шлях для інсталяції MediaWiki у вікіпроекті репозиторію.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-server": "<var>[[mw:Special:MyLanguage/Manual:$wgServer|$wgServer]]</var> (чи його еквівалент) вікіпроекту репозиторію.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "Кореневий URL-шлях для шляхів до мініатюр.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-url": "URL-шлях публічної зони.",
        "apihelp-query+filerepoinfo-example-simple": "Отримати інформацію про репозиторії файлів.",
        "apihelp-query+fileusage-summary": "Знайти всі сторінки, що використовують дані файли.",
        "apihelp-query+fileusage-param-prop": "Які властивості отримати:",
        "apihelp-query+info-paramvalue-prop-readable": "Чи користувач може редагувати цю сторінку.",
        "apihelp-query+info-paramvalue-prop-preload": "Дає текст, виданий EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Дає спосіб, у який відображається назва сторінки.",
+       "apihelp-query+info-paramvalue-prop-varianttitles": "Видає вигляд заголовка всіма варіантами мов контенту цього сайту.",
        "apihelp-query+info-param-testactions": "Перевірити, чи поточний користувач може виконувати певні дії на сторінці.",
        "apihelp-query+info-param-token": "Використати натомість [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
        "apihelp-query+info-example-simple": "Отримати інформацію про сторінку <kbd>Main Page</kbd>.",
        "apihelp-query+prefixsearch-summary": "Виконати пошук назв сторінок за префіксом.",
        "apihelp-query+prefixsearch-extended-description": "Незважаючи на подібність назв, цей модуль не призначений для того, аби бути еквівалентом [[Special:PrefixIndex]]; щодо цього, перегляньте <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> із параметром <kbd>apprefix</kbd>. Мета цього модуля така ж, як і <kbd>[[Special:ApiHelp/opensearch|action=opensearch]]</kbd>: взяти текст, введений користувачем, і вивести найбільш відповідні назви. Залежно від програмної підоснови пошукової системи, сюди можуть також входити виправлення орфографії, уникнення перенаправлень чи інша евристика.",
        "apihelp-query+prefixsearch-param-search": "Рядок пошуку.",
-       "apihelp-query+prefixsearch-param-namespace": "Простори назв, у яких шукати.",
+       "apihelp-query+prefixsearch-param-namespace": "Простори назв, у яких шукати. Ігнорується, якщо <var>$1search</var> починається з коректного префіксу простору назв.",
        "apihelp-query+prefixsearch-param-limit": "Максимальна кількість результатів для виведення.",
        "apihelp-query+prefixsearch-param-offset": "Кількість результатів, які пропустити.",
        "apihelp-query+prefixsearch-example-simple": "Шукати назви сторінок, які починаються з <kbd>meaning</kbd>.",
        "apihelp-query+recentchanges-paramvalue-prop-sizes": "Додає нову і стару довжину сторінки в байтах.",
        "apihelp-query+recentchanges-paramvalue-prop-redirect": "Помічає редагування, якщо сторінка є перенаправленням.",
        "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Помічає редагування як відпатрульвані чи невідпатрульовані.",
+       "apihelp-query+recentchanges-paramvalue-prop-autopatrolled": "Позначає доступні до патрулювання редагування або як автопатрульовані, або як невідпатрульовані.",
        "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Додає інформацію журналу (ID журналу, тип журналу тощо) до записів журналу.",
        "apihelp-query+recentchanges-paramvalue-prop-tags": "Виводить мітки запису.",
        "apihelp-query+recentchanges-paramvalue-prop-sha1": "Додає контрольну суму вмісту для записів, пов'язаних з версією.",
index 55c0671..f559711 100644 (file)
@@ -68,6 +68,7 @@
        "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
        "apihelp-compare-param-torev": "要比對的第二個修訂。",
        "apihelp-compare-param-topst": "在 <var>totext</var> 執行預先保存轉換。",
+       "apihelp-compare-param-tocontentformat-{slot}": "<var>totext-&#x7B;slot}</var> 的內容序列化格式。",
        "apihelp-compare-param-totext": "指定 <kbd>toslots=main</kbd> 並改用 <var>totext-main</var>。",
        "apihelp-compare-param-tocontentmodel": "指定 <kbd>toslots=main</kbd> 並改使用 <var>tocontentmodel-main</var>。",
        "apihelp-compare-param-tocontentformat": "指定 <kbd>toslots=main</kbd> 並改使用 <var>tocontentformat-main</var>。",
        "apihelp-expandtemplates-summary": "展開所有於 wikitext 中模板。",
        "apihelp-expandtemplates-param-title": "頁面標題。",
        "apihelp-expandtemplates-param-text": "要轉換的 Wikitext。",
+       "apihelp-expandtemplates-param-revid": "修訂 ID,用於 <code><nowiki>{{REVISIONID}}</nowiki></code> 和相似變數。",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "展開的 wiki 文字。",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "指定頁面的 JavaScript 設置變量。",
        "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "指定頁面的 JavaScript 設置變量為 JSON 字串。",
        "apihelp-feedwatchlist-summary": "返回監視清單 feed。",
        "apihelp-feedwatchlist-param-feedformat": "Feed 的格式。",
        "apihelp-feedwatchlist-param-linktosections": "若可以的話,直接連結至更改過的段落。",
+       "apihelp-feedwatchlist-example-all6hrs": "顯示過去 6 小時在監視頁面的所有更改。",
        "apihelp-filerevert-summary": "回退檔案至舊的版本。",
        "apihelp-filerevert-param-filename": "目標檔案名稱,不需包含「File:」這樣的前綴字元。",
        "apihelp-filerevert-param-comment": "上載意見。",
+       "apihelp-filerevert-example-revert": "回退 <kbd>Wiki.png</kbd> 至 <kbd>2011-03-05T15:27:40Z</kbd> 的版本。",
        "apihelp-help-summary": "顯示指定模組的說明。",
        "apihelp-help-example-main": "主模組使用說明",
        "apihelp-help-example-recursive": "一個頁面中的所有說明。",
        "apihelp-managetags-param-ignorewarnings": "是否在處理期間發生問題時忽略任何警告。",
        "apihelp-managetags-param-tags": "在標籤管理日誌裡更改套用到項目的標籤。",
        "apihelp-mergehistory-summary": "合併頁面歷史",
+       "apihelp-mergehistory-param-to": "要合併歷史的頁面標題。不能與 <var>$1toid</var> 一起使用。",
+       "apihelp-mergehistory-param-toid": "要合併歷史的頁面之頁面 ID。不能與 <var>$1to</var> 一起使用。",
        "apihelp-mergehistory-param-reason": "合併歷史的原因。",
        "apihelp-mergehistory-example-merge": "將<kbd>Oldpage</kbd>的整個歷史合併至<kbd>Newpage</kbd>。",
        "apihelp-mergehistory-example-merge-timestamp": "將<kbd>Oldpage</kbd>直至<kbd>2015-12-31T04:37:41Z</kbd>的頁面修訂版本合併至<kbd>Newpage</kbd>。",
        "apihelp-paraminfo-example-2": "顯示 <kbd>[[Special:ApiHelp/query|action=query]]</kbd> 所有子模組的資訊。",
        "apihelp-parse-summary": "解析內容併回傳解析器輸出。",
        "apihelp-parse-param-text": "要解析的文字。使用 <var>$1title</var> 或 <var>$1contentmodel</var> 來控制內容模組。",
+       "apihelp-parse-param-revid": "修訂 ID,用於 <code><nowiki>{{REVISIONID}}</nowiki></code> 和相似變數。",
        "apihelp-parse-param-summary": "解析摘要。",
+       "apihelp-parse-param-page": "解析此頁面的內容。不能與 <var>$1text</var> 和 <var>$1title</var> 一起使用。",
        "apihelp-parse-param-pageid": "解析此頁面的內容。覆蓋 <var>$1page</var>。",
        "apihelp-parse-param-redirects": "若 <var>$1page</var> 或者 <var>$1pageid</var> 被設定成重新導向,則解析它。",
+       "apihelp-parse-param-oldid": "解析此修訂的內容。覆蓋 <var>$1page</var> 與 <var>$1pageid</var>。",
        "apihelp-parse-param-prop": "要取得的資訊部份:",
        "apihelp-parse-paramvalue-prop-text": "提供 wiki 文字的解析文字。",
        "apihelp-parse-paramvalue-prop-langlinks": "在已解析的 wiki 文字提供語言連結。",
        "apihelp-parse-paramvalue-prop-displaytitle": "添加已解析 wiki 文字的標題。",
        "apihelp-parse-paramvalue-prop-headitems": "提供放置頁面裡的 <code>&lt;head&gt;</code> 之項目。",
        "apihelp-parse-paramvalue-prop-headhtml": "取得頁面已解析的 <code>&lt;head&gt;</code>。",
+       "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "指定頁面的 JavaScript 設置變量為 JSON 字串。",
        "apihelp-parse-paramvalue-prop-iwlinks": "在已解析的 wiki 文字提供跨 wiki 連結。",
+       "apihelp-parse-paramvalue-prop-wikitext": "指定被解析的原始 wiki 文字。",
+       "apihelp-parse-paramvalue-prop-properties": "指定多項定義在已解析原始 wiki 文字的屬性。",
        "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
+       "apihelp-parse-param-disabletidy": "不要在解析輸出裡執行 HTML 內容清理(例如使用 tidy 軟體工具)",
        "apihelp-parse-param-preview": "在預覽模式下解析。",
        "apihelp-parse-example-page": "解析頁面。",
        "apihelp-parse-example-text": "解析 wikitext。",
        "apihelp-query+allcategories-param-limit": "要回傳的分類數量。",
        "apihelp-query+allcategories-param-prop": "要取得的屬性。",
        "apihelp-query+allcategories-paramvalue-prop-size": "在分類裡添加頁面數。",
+       "apihelp-query+allcategories-paramvalue-prop-hidden": "標記由 <code>_&#95;HIDDENCAT_&#95;</code> 隱藏的分類。",
        "apihelp-query+alldeletedrevisions-summary": "依使用者或所在命名空間來列出所有已刪除的修訂。",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "僅與 <var>$3user</var> 一同使用。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能與 <var>$3user</var> 一同使用。",
        "apihelp-query+alllinks-example-unique-generator": "取得所有已連結標題,標記為遺失。",
        "apihelp-query+alllinks-example-generator": "取得包含連結的頁面。",
        "apihelp-query+allmessages-summary": "返回來自該網站的訊息。",
+       "apihelp-query+allmessages-param-messages": "要輸出的訊息。<kbd>*</kbd>(預設)代表著所有訊息。",
        "apihelp-query+allmessages-param-prop": "要取得的屬性。",
        "apihelp-query+allmessages-param-nocontent": "若有設定,請不要包含在輸出裡的訊息內容。",
        "apihelp-query+allmessages-param-args": "要替代訊息的引數。",
        "apihelp-query+allrevisions-param-user": "此列出由該使用者作出的修訂。",
        "apihelp-query+allrevisions-param-excludeuser": "不要列出由該使用者作出的修訂。",
        "apihelp-query+allrevisions-param-namespace": "僅列出此命名空間的頁面。",
+       "apihelp-query+allrevisions-param-generatetitles": "當作為產生器時使用,產生標題而非修訂 ID。",
        "apihelp-query+allrevisions-example-user": "列出由使用者 <kbd>Example</kbd> 做出的最近 50 個貢獻。",
        "apihelp-query+allrevisions-example-ns-main": "列出在主命名空間的前 50 個修訂。",
        "apihelp-query+mystashedfiles-param-prop": "要索取的檔案屬性。",
        "apihelp-query+categoryinfo-summary": "回傳有關指定分類的資訊。",
        "apihelp-query+categoryinfo-example-simple": "取得有關 <kbd>Category:Foo</kbd> 與 <kbd>Category:Bar</kbd> 的資訊。",
        "apihelp-query+categorymembers-summary": "在指定的分類中列出所有頁面。",
+       "apihelp-query+categorymembers-param-title": "所要列舉的分類(必要)。必須包含 <kbd>{{ns:category}}:</kbd> 前綴。不可與 <var>$1pageid</var> 一同使用。",
+       "apihelp-query+categorymembers-param-pageid": "要列舉的分類之頁面 ID。不能與 <var>$1title</var> 同時使用。",
        "apihelp-query+categorymembers-param-prop": "要包含的資訊部份:",
        "apihelp-query+categorymembers-paramvalue-prop-ids": "添加頁面 ID。",
        "apihelp-query+categorymembers-paramvalue-prop-title": "添加標題與頁面的命名空間 ID。",
        "apihelp-query+embeddedin-param-dir": "列出時所採用的方向。",
        "apihelp-query+embeddedin-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+embeddedin-param-limit": "要回傳的頁面總數。",
+       "apihelp-query+embeddedin-example-simple": "顯示嵌入 <kbd>Template:Stub</kbd> 的頁面。",
+       "apihelp-query+embeddedin-example-generator": "取得有關嵌入 <kbd>Template:Stub</kbd> 的頁面之資訊。",
        "apihelp-query+extlinks-summary": "回傳所有指定頁面的外部 URL (非 interwiki)。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+extlinks-example-simple": "取得 <kbd>Main Page</kbd> 的外部連結清單。",
        "apihelp-query+info-summary": "取得基本頁面訊息。",
        "apihelp-query+info-param-prop": "要取得的額外屬性:",
        "apihelp-query+info-paramvalue-prop-protection": "列出各頁面的保護層級。",
+       "apihelp-query+info-paramvalue-prop-talkid": "各非對話頁的對話頁頁面 ID。",
        "apihelp-query+info-paramvalue-prop-watched": "列出各頁面的監視狀態。",
        "apihelp-query+info-paramvalue-prop-watchers": "監視者的數目,如有允許的話。",
        "apihelp-query+info-paramvalue-prop-visitingwatchers": "有訪問頁面近期編輯數的各頁面監視者數目,如有允許的話。",
+       "apihelp-query+info-paramvalue-prop-notificationtimestamp": "各頁面的監視清單通知時間戳記。",
+       "apihelp-query+info-paramvalue-prop-subjectid": "各對話頁的父頁面頁面 ID。",
        "apihelp-query+info-paramvalue-prop-readable": "使用者是否可閱讀此頁面。",
        "apihelp-query+info-param-testactions": "測試目前使用者是否可執行頁面上的某項操作。",
        "apihelp-query+info-param-token": "請改用 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]。",
        "apihelp-query+info-example-simple": "取得有關頁面 <kbd>Main Page</kbd> 的資訊。",
        "apihelp-query+iwbacklinks-summary": "找出連結至指定跨 wiki 連結的所有頁面。",
        "apihelp-query+iwbacklinks-param-prefix": "跨 wiki 前綴。",
+       "apihelp-query+iwbacklinks-param-title": "要搜尋的跨 wiki 連結。必須與 <var>$1blprefix</var> 一起使用。",
        "apihelp-query+iwbacklinks-param-limit": "要回傳的頁面總數。",
        "apihelp-query+iwbacklinks-param-prop": "要取得的屬性。",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "添加跨 wiki 前綴。",
        "apihelp-query+iwbacklinks-example-generator": "取得連結至 [[wikibooks:Test]] 的頁面相關資訊。",
        "apihelp-query+iwlinks-summary": "回傳指定頁面的所有 interwiki 連結。",
        "apihelp-query+iwlinks-param-url": "是否取得完整的 URL(不能與 $1prop 一同使用)。",
+       "apihelp-query+iwlinks-param-prop": "為各跨語言連結所要取得的額外屬性:",
        "apihelp-query+iwlinks-paramvalue-prop-url": "添加完整的 URL。",
        "apihelp-query+iwlinks-param-limit": "要回傳的跨 Wiki 連結數量。",
        "apihelp-query+iwlinks-param-prefix": "僅回傳帶有此前綴的跨 wiki 連結。",
        "apihelp-query+langlinks-paramvalue-prop-url": "添加完整的 URL。",
        "apihelp-query+langlinks-paramvalue-prop-autonym": "添加本地語言名稱。",
        "apihelp-query+langlinks-param-lang": "僅回傳帶有此語言代碼的語言連結。",
+       "apihelp-query+langlinks-param-title": "要搜尋的連結。必須與 <var>$1lang</var> 一起使用。",
        "apihelp-query+langlinks-param-dir": "列出時所採用的方向。",
        "apihelp-query+langlinks-param-inlanguagecode": "用於本地化語言名稱的語言代碼。",
        "apihelp-query+langlinks-example-simple": "從頁面 <kbd>Main Page</kbd> 取得跨語言連結。",
        "apihelp-query+querypage-example-ancientpages": "回傳來自 [[Special:Ancientpages]] 的結果。",
        "apihelp-query+random-summary": "取得隨機頁面集合",
        "apihelp-query+random-param-namespace": "僅回傳在這些命名空間的頁面。",
+       "apihelp-query+random-param-limit": "限制所回傳的隨機頁面數量。",
        "apihelp-query+random-param-redirect": "請改用 <kbd>$1filterredir=redirects</kbd>。",
        "apihelp-query+random-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+random-example-simple": "從主命名空間回傳兩個隨機頁面。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出由該使用者作出的更改。",
        "apihelp-query+recentchanges-param-tag": "僅列出以此標籤所標記的更改。",
        "apihelp-query+recentchanges-param-prop": "包含的額外資訊部份:",
+       "apihelp-query+recentchanges-paramvalue-prop-userid": "添加承擔編輯的使用者。",
        "apihelp-query+recentchanges-paramvalue-prop-comment": "添加編輯的註釋。",
        "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "添加編輯的解析註釋。",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "添加編輯的標籤。",
        "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加編輯的時間戳記。",
        "apihelp-query+recentchanges-paramvalue-prop-title": "添加編輯的頁面標題。",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "添加頁面 ID、最近更改 ID 以及新舊修訂 ID。",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "添加新舊頁面長度(位元組)。",
        "apihelp-query+recentchanges-paramvalue-prop-redirect": "若頁面為重新導向則標記編輯。",
        "apihelp-query+recentchanges-paramvalue-prop-tags": "列出項目的標籤。",
        "apihelp-query+recentchanges-param-token": "請改用 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-query+usercontribs-example-ipprefix": "顯示所有來自於前綴為 <kbd>192.0.2.</kbd> 的 IP 地址貢獻。",
        "apihelp-query+userinfo-summary": "取得目前使用者的資訊。",
        "apihelp-query+userinfo-param-prop": "要包含的資訊部份:",
+       "apihelp-query+userinfo-paramvalue-prop-hasmsg": "若目前使用者有等待訊息,添加 <samp>messages</samp> 標籤。",
        "apihelp-query+userinfo-paramvalue-prop-groups": "列出目前使用者所隸屬的所有群組。",
        "apihelp-query+userinfo-paramvalue-prop-rights": "列出目前使用者所擁有的權限。",
        "apihelp-query+userinfo-paramvalue-prop-options": "列出目前使用者已設定過的所有偏好設定。",
        "apihelp-query+users-param-users": "要獲取的使用者清單。",
        "apihelp-query+users-param-userids": "要獲取的使用者 ID 清單。",
        "apihelp-query+users-param-token": "請改用 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
+       "apihelp-query+users-example-simple": "返回使用者 <kbd>Example</kbd> 的資訊。",
        "apihelp-query+watchlist-param-start": "起始列舉的時間戳記。",
        "apihelp-query+watchlist-param-end": "結束列舉的時間戳記。",
        "apihelp-query+watchlist-param-user": "此列出由該使用者作出的更改。",
        "apihelp-query+watchlistraw-example-simple": "列出在目前使用者的監視清單裡頭頁面。",
        "apihelp-removeauthenticationdata-summary": "為目前使用者移除身分核對資料。",
        "apihelp-resetpassword-summary": "寄送重新設定密碼的電子郵件給使用者。",
+       "apihelp-resetpassword-param-email": "正被重新設定使用者的電子郵件地址。",
        "apihelp-resetpassword-example-user": "向使用者 <kbd>Example</kbd> 寄送重新設定密碼用的電子郵件。",
        "apihelp-revisiondelete-summary": "刪除和取消刪除修訂。",
        "apihelp-revisiondelete-param-hide": "各修訂所要隱藏的內容。",
        "apihelp-revisiondelete-param-reason": "刪除或取消刪除的原因。",
        "apihelp-revisiondelete-param-tags": "在刪除日誌裡套用到項目的標籤。",
        "apihelp-rollback-summary": "撤修頁面的最後一次編輯。",
+       "apihelp-rollback-param-title": "要回退的頁面標題。不可與 <var>$1pageid</var> 同時使用。",
+       "apihelp-rollback-param-pageid": "要回退的頁面 ID。不可與 <var>$1title</var> 同時使用。",
        "apihelp-rollback-param-tags": "套用到回退的標籤。",
        "apihelp-rollback-param-summary": "自定義編輯摘要。若為空,則使用預設摘要。",
        "apihelp-rollback-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+       "apihelp-setnotificationtimestamp-summary": "更新監視頁面的通知時間戳記。",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "在所有已監視頁面運作。",
        "apihelp-setnotificationtimestamp-example-page": "重新設定用於 <kbd>Main page</kbd> 的通知狀態。",
        "apihelp-setnotificationtimestamp-example-allpages": "重新設定在 <kbd>{{ns:user}}</kbd> 命名空間裡頁面的通知狀態。",
index 9602bd2..936f6bf 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * DifferenceEngine is responsible for rendering the difference between two revisions as HTML.
@@ -273,7 +274,7 @@ class DifferenceEngine extends ContextSource {
        protected function getSlotContents() {
                if ( $this->isContentOverridden ) {
                        return [
-                               'main' => [
+                               SlotRecord::MAIN => [
                                        'old' => $this->mOldContent,
                                        'new' => $this->mNewContent,
                                ]
@@ -302,8 +303,8 @@ class DifferenceEngine extends ContextSource {
                        ];
                }
                // move main slot to front
-               if ( isset( $slots['main'] ) ) {
-                       $slots = [ 'main' => $slots['main'] ] + $slots;
+               if ( isset( $slots[SlotRecord::MAIN] ) ) {
+                       $slots = [ SlotRecord::MAIN => $slots[SlotRecord::MAIN] ] + $slots;
                }
                return $slots;
        }
@@ -1053,7 +1054,7 @@ class DifferenceEngine extends ContextSource {
                foreach ( $this->getSlotDiffRenderers() as $role => $slotDiffRenderer ) {
                        $slotDiff = $slotDiffRenderer->getDiff( $slotContents[$role]['old'],
                                $slotContents[$role]['new'] );
-                       if ( $slotDiff && $role !== 'main' ) {
+                       if ( $slotDiff && $role !== SlotRecord::MAIN ) {
                                // TODO use human-readable role name at least
                                $slotTitle = $role;
                                $difftext .= $this->getSlotHeader( $slotTitle );
@@ -1100,7 +1101,7 @@ class DifferenceEngine extends ContextSource {
                        return false;
                }
 
-               if ( $role !== 'main' ) {
+               if ( $role !== SlotRecord::MAIN ) {
                        // TODO use human-readable role name at least
                        $slotTitle = $role;
                        $slotDiff = $this->getSlotHeader( $slotTitle ) . $slotDiff;
@@ -1640,7 +1641,7 @@ class DifferenceEngine extends ContextSource {
                        $this->mOldPage = Title::newFromLinkTarget( $oldRevision->getPageAsLinkTarget() );
                        // This method is meant for edit diffs and such so there is no reason to provide a
                        // revision that's not readable to the user, but check it just in case.
-                       $this->mOldContent = $oldRevision ? $oldRevision->getContent( 'main',
+                       $this->mOldContent = $oldRevision ? $oldRevision->getContent( SlotRecord::MAIN,
                                RevisionRecord::FOR_THIS_USER, $this->getUser() ) : null;
                } else {
                        $this->mOldPage = null;
@@ -1649,7 +1650,7 @@ class DifferenceEngine extends ContextSource {
                $this->mNewRev = new Revision( $newRevision );
                $this->mNewid = $newRevision->getId();
                $this->mNewPage = Title::newFromLinkTarget( $newRevision->getPageAsLinkTarget() );
-               $this->mNewContent = $newRevision->getContent( 'main',
+               $this->mNewContent = $newRevision->getContent( SlotRecord::MAIN,
                        RevisionRecord::FOR_THIS_USER, $this->getUser() );
 
                $this->mRevisionsIdsLoaded = $this->mRevisionsLoaded = true;
index 93d09e7..dd9f793 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-use MediaWiki\MediaWikiServices;
 use MediaWiki\Widget\TitleInputWidget;
 
 /**
@@ -57,17 +56,10 @@ class HTMLTitleTextField extends HTMLTextField {
                                $title = Title::newFromTextThrow( $value );
                        } else {
                                // Can't use Title::makeTitleSafe(), because it doesn't throw useful exceptions
-                               $namespaceName = MediaWikiServices::getInstance()->getContentLanguage()->
-                                       getNsText( $this->mParams['namespace'] );
-                               $title = Title::newFromTextThrow( $namespaceName . ':' . $value );
+                               $title = Title::newFromTextThrow( Title::makeName( $this->mParams['namespace'], $value ) );
                        }
                } catch ( MalformedTitleException $e ) {
-                       $msg = $this->msg( $e->getErrorMessage() );
-                       $params = $e->getErrorMessageParameters();
-                       if ( $params ) {
-                               $msg->params( $params );
-                       }
-                       return $msg;
+                       return $this->msg( $e->getErrorMessage(), $e->getErrorMessageParameters() );
                }
 
                $text = $title->getPrefixedText();
index 6a42d58..b6f5dce 100644 (file)
@@ -22,6 +22,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * Class for viewing MediaWiki article and history.
@@ -524,7 +525,7 @@ class Article implements Page {
        private function applyContentOverride( Content $override ) {
                // Construct a fake revision
                $rev = new MutableRevisionRecord( $this->getTitle() );
-               $rev->setContent( 'main', $override );
+               $rev->setContent( SlotRecord::MAIN, $override );
 
                $this->mRevision = new Revision( $rev );
 
@@ -870,7 +871,7 @@ class Article implements Page {
                // TODO: find a *good* place for the code that determines the redirect target for
                // a given revision!
                // NOTE: Use main slot content. Compare code in DerivedPageDataUpdater::revisionIsRedirect.
-               $content = $revision->getContent( 'main' );
+               $content = $revision->getContent( SlotRecord::MAIN );
                return $content ? $content->getRedirectTarget() : null;
        }
 
index 74e3179..7c97465 100644 (file)
@@ -1494,7 +1494,7 @@ class WikiPage implements Page, IDBAccessObject {
                $bSlots = $b->getRevisionRecord()->getSlots();
                $changedRoles = $aSlots->getRolesWithDifferentContent( $bSlots );
 
-               return ( $changedRoles !== [ 'main' ] && $changedRoles !== [] );
+               return ( $changedRoles !== [ SlotRecord::MAIN ] && $changedRoles !== [] );
        }
 
        /**
@@ -1853,13 +1853,13 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                $slotsUpdate = new RevisionSlotsUpdate();
-               $slotsUpdate->modifyContent( 'main', $content );
+               $slotsUpdate->modifyContent( SlotRecord::MAIN, $content );
 
                // NOTE: while doEditContent() executes, callbacks to getDerivedDataUpdater and
                // prepareContentForEdit will generally use the DerivedPageDataUpdater that is also
                // used by this PageUpdater. However, there is no guarantee for this.
                $updater = $this->newPageUpdater( $user, $slotsUpdate );
-               $updater->setContent( 'main', $content );
+               $updater->setContent( SlotRecord::MAIN, $content );
                $updater->setOriginalRevisionId( $originalRevId );
                $updater->setUndidRevisionId( $undidRevId );
 
@@ -1966,7 +1966,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $revision = $revision->getRevisionRecord();
                }
 
-               $slots = RevisionSlotsUpdate::newFromContent( [ 'main' => $content ] );
+               $slots = RevisionSlotsUpdate::newFromContent( [ SlotRecord::MAIN => $content ] );
                $updater = $this->getDerivedDataUpdater( $user, $revision, $slots );
 
                if ( !$updater->isUpdatePrepared() ) {
@@ -3069,8 +3069,8 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                // TODO: MCR: also log model changes in other slots, in case that becomes possible!
-               $currentContent = $current->getContent( 'main' );
-               $targetContent = $target->getContent( 'main' );
+               $currentContent = $current->getContent( SlotRecord::MAIN );
+               $targetContent = $target->getContent( SlotRecord::MAIN );
                $changingContentModel = $targetContent->getModel() !== $currentContent->getModel();
 
                if ( in_array( 'mw-rollback', ChangeTags::getSoftwareTags() ) ) {
@@ -3290,7 +3290,7 @@ class WikiPage implements Page, IDBAccessObject {
        ) {
                // TODO: move this into a PageEventEmitter service
 
-               if ( $slotsChanged === null || in_array( 'main',  $slotsChanged ) ) {
+               if ( $slotsChanged === null || in_array( SlotRecord::MAIN,  $slotsChanged ) ) {
                        // Invalidate caches of articles which include this page.
                        // Only for the main slot, because only the main slot is transcluded.
                        // TODO: MCR: not true for TemplateStyles! [SlotHandler]
@@ -3578,7 +3578,7 @@ class WikiPage implements Page, IDBAccessObject {
                } elseif ( $rev instanceof Content ) {
                        wfDeprecated( __METHOD__ . ' with a Content object instead of a RevisionRecord', '1.32' );
 
-                       $slotContent = [ 'main' => $rev ];
+                       $slotContent = [ SlotRecord::MAIN => $rev ];
                } else {
                        $slotContent = array_map( function ( SlotRecord $slot ) {
                                return $slot->getContent( Revision::RAW );
index 286494e..157b508 100644 (file)
@@ -23,6 +23,7 @@ use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
 use MediaWiki\Storage\RevisionStore;
+use MediaWiki\Storage\SlotRecord;
 
 class PoolWorkArticleView extends PoolCounterWork {
        /** @var WikiPage */
@@ -81,7 +82,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                        $revision = new MutableRevisionRecord( $page->getTitle() );
                        $revision->setId( $revid );
                        $revision->setPageId( $page->getId() );
-                       $revision->setContent( 'main', $content );
+                       $revision->setContent( SlotRecord::MAIN, $content );
                }
 
                if ( $revision ) {
index 52300f9..56a701a 100644 (file)
@@ -85,7 +85,7 @@ class MostlinkedCategoriesPage extends QueryPage {
                }
 
                $text = MediaWikiServices::getInstance()->getContentLanguage()
-                       ->convert( new HtmlArmor( $nt->getText() ) );
+                       ->convert( htmlspecialchars( $nt->getText() ) );
                $plink = $this->getLinkRenderer()->makeLink( $nt, new HtmlArmor( $text ) );
                $nlinks = $this->msg( 'nmembers' )->numParams( $result->value )->escaped();
 
index 7526c3e..513d14c 100644 (file)
@@ -218,9 +218,10 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $message = $this->msg( 'newimagestext' )->inContentLanguage();
                if ( !$message->isDisabled() ) {
                        $contLang = MediaWikiServices::getInstance()->getContentLanguage();
-                       $this->getOutput()->addWikiText(
+                       $this->getOutput()->addWikiTextTidy(
                                Html::rawElement( 'p',
                                        [
+
                                                'lang' => $contLang->getHtmlCode(),
                                                'dir' => $contLang->getDir()
                                        ],
index e11f964..00e5ab9 100644 (file)
        "pool-errorunknown": "خطأ غير معروف",
        "pool-servererror": "خدمة العداد غير متاحة ( $1 ).",
        "poolcounter-usage-error": "خطأ الاستخدام: $1",
-       "aboutsite": "عÙ\86 {{SITENAME}}",
+       "aboutsite": "Ø­Ù\88Ù\84 {{SITENAME}}",
        "aboutpage": "Project:عن",
        "copyright": "المحتوى منشور وفق $1 إن لم يرد خلاف ذلك.",
        "copyrightpage": "{{ns:project}}:حقوق التأليف والنشر",
        "confirm-unwatch-top": "إزالة هذه الصفحة من قائمة مراقبتك؟",
        "confirm-rollback-button": "موافق",
        "confirm-rollback-top": "استرجاع التعديلات لهذه الصفحة؟",
+       "confirm-mcrrestore-title": "استرجاع مراجعة",
        "confirm-mcrundo-title": "الرجوع عن تغيير",
        "mcrundofailed": "الرجوع فشل",
        "mcrundo-missingparam": "وسائط مطلوبة مفقودة عند الطلب.",
        "mcrundo-changed": "لقد تم تغيير الصفحة منذ عرضت الفرق; يُرجَى مراجعة التغيير الجديد.",
+       "mcrundo-parse-failed": "فشل في تحليل المراجعة الجديدة: $1",
        "semicolon-separator": "؛&#32;",
        "comma-separator": "،&#32;",
        "quotation-marks": "«$1»",
index f49a5dc..2435640 100644 (file)
        "ncategories": "$1 {{PLURAL:$1|تصنيف واحد|تصنيفين|تصنيفات|تصنيف}}",
        "nlinks": "{{PLURAL:$1|وصله واحده|وصلتين|$1 وصلات|$1 وصله}}",
        "nmembers": "$1 {{PLURAL:$1|عضو|اعضاء}}",
-       "nrevisions": "{{PLURAL:$1|تعديل وحيد|تعديلين|$1 تعديلات|$1 تعديل|$1}}",
+       "nrevisions": "{{PLURAL:$1|مفيش ولا مراجعه|مراجعه واحده|مراجعتين|$1 مراجعه}}",
        "specialpage-empty": "مافيش نتايج للتقرير دا.",
        "lonelypages": "صفحات يتيمه",
        "lonelypagestext": "الصفحات دى ماعندهاش لينكات أو تضمينات من الصفحات التانية فى {{SITENAME}}.",
index 05c33a7..350f733 100644 (file)
        "confirm-unwatch-top": "Выдаліць гэтую старонку з Вашага сьпісу назіраньня?",
        "confirm-rollback-button": "Так",
        "confirm-rollback-top": "Адкаціць праўкі на гэтай старонцы?",
+       "confirm-mcrrestore-title": "Аднавіць вэрсію",
        "confirm-mcrundo-title": "Адмяніць зьмену",
        "mcrundofailed": "Адмена не атрымалася",
        "mcrundo-missingparam": "Адсутнічаюць абавязковыя парамэтры для запыту.",
index 8c637b3..1f87fc3 100644 (file)
@@ -80,7 +80,7 @@
        "tog-watchlisthideminor": "Скриване на малките промени в списъка ми за наблюдение",
        "tog-watchlisthideliu": "Скриване на редакциите от влезли потребители от списъка за наблюдение",
        "tog-watchlistreloadautomatically": "Обновяване на списъка за наблюдение всеки път, когато е сменен филтър (изисква се JavaScript)",
-       "tog-watchlistunwatchlinks": "Ð\94обавÑ\8fне Ð½Ð° Ð¿Ñ\80еки Ð²Ñ\80Ñ\8aзки Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение/Ñ\81пиÑ\80ане Ð½Ð° Ð½Ð°Ð±Ð»Ñ\8eдениеÑ\82о ÐºÑ\8aм Ð·Ð°Ð¿Ð¸Ñ\81иÑ\82е Ð² Ñ\81пиÑ\81Ñ\8aка Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение (нужен е JavaScript за да се включи функционалността)",
+       "tog-watchlistunwatchlinks": "Ð\94обавÑ\8fне Ð½Ð° Ð´Ð¸Ñ\80екÑ\82ни Ð¼Ð°Ñ\80кеÑ\80и ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение/Ñ\81пиÑ\80ане Ð½Ð° Ð½Ð°Ð±Ð»Ñ\8eдениеÑ\82о ÐºÑ\8aм Ð½Ð°Ð±Ð»Ñ\8eдаваниÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86и Ñ\81 Ð¿Ñ\80омени (нужен е JavaScript за да се включи функционалността)",
        "tog-watchlisthideanons": "Скриване на редакциите от анонимни потребители в списъка за наблюдение",
        "tog-watchlisthidepatrolled": "Скриване на патрулираните редакции от списъка за наблюдение",
        "tog-watchlisthidecategorization": "Скриване на категоризацията на статии",
        "password-login-forbidden": "Използването на това потребителско име и парола е забранено.",
        "mailmypassword": "Възстановяване на парола",
        "passwordremindertitle": "Напомняне за парола от {{SITENAME}}",
-       "passwordremindertext": "Някой (най-вероятно вие, от IP-адрес $1) е пожелал нова парола за влизане в {{SITENAME}} ($4).\nЗа потребител „$2“ е създадена временната парола „$3“.\nСега би трябвало да влезете в системата и да си изберете нова парола.\nНовата временна парола ще бъде активна {{PLURAL:$5|един ден|$5 дни}}.\n\nАко заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.",
+       "passwordremindertext": "Някой (най-вероятно вие, от IP-адрес $1) е пожелал нова\nпарола за влизане в {{SITENAME}} ($4). За потребител „$2“ е създадена временната парола\n„$3“. Ако това е било вашето\nнамерение, трябва да влезете в системата и да си изберете нова парола.\nНовата временна парола ще бъде активна {{PLURAL:$5|един ден|$5 дни}}.\n\nАко заявката е направена от друг или пък сте си спомнили паролата\nи не искате да я променяте, можете да пренебрегнете това съобщение и\nда продължите да използвате старата си парола.",
        "noemail": "Няма записана електронна поща за потребителя „$1“.",
        "noemailcreate": "Необходимо е да въведете валиден адрес за ел. поща",
        "passwordsent": "Нова парола беше изпратена на електронната поща на „$1“.\nСлед като я получите, влезте отново.",
        "previewerrortext": "Възникна грешка при опита за преглед на промените.",
        "blockedtitle": "Потребителят е блокиран",
        "blockedtext": "'''Вашето потребителско име (или IP-адрес) беше блокирано.'''\n\nБлокирането е извършено от $1. Посочената причина е: ''$2''\n\n*Начало на блокирането: $8\n*Край на блокирането: $6\n*Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „{{int:emailuser}}“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nВашият IP адрес е $3, а номерът на блокирането е $5. Включвайте едно от двете или и двете във всяко запитване, което правите.",
-       "autoblockedtext": "IP-адресът ви беше блокиран автоматично, защото е бил използван от друг потребител, който е бил блокиран от $1.\nПосочената причина е:\n\n:''$2''\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „Пращане писмо на потребител“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nТекущият ви IP-адрес е $3, а номерът на блокирането ви е $5. Включвайте ги във всяко питане, което правите.",
+       "autoblockedtext": "IP-адресът ви беше блокиран автоматично, защото е бил използван от друг потребител, който е бил блокиран от $1.\nПосочената причина е:\n\n:<em>$2</em>\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nМожете да се свържете с $1 или с някой от останалите [[{{MediaWiki:Grouppage-sysop}}|администратори]], за да обсъдите блокирането.\n\nМожете да използвате услугата „{{int:emailuser}}“ само ако не ви е забранена употребата ѝ и ако сте посочили валидна електронна поща в [[Special:Preferences|настройките]] си.\n\nТекущият Ви IP-адрес е $3, а номерът на блокирането ви е $5.\nВключвайте ги във всяка заявка, която правите.",
        "systemblockedtext": "Вашето потребителско име или IP адрес беше автоматично блокирано от Медия Уики.\nПосочената причина е:\n\n:<em>$2</em>\n\n* Начало на блокирането: $8\n* Край на блокирането: $6\n* Блокирането се отнася за: $7\n\nВашият текущ IP адрес е $3.\nМоля, включете всичките детайли по-горе, ако правите каквито и да е запитвания.",
        "blockednoreason": "не е указана причина",
        "whitelistedittext": "Редактирането на страници изисква $1 в системата.",
        "longpageerror": "<strong>Грешка: Изпратеният текст е с големина {{PLURAL:$1|един килобайт|$1 килобайта}}, което надвишава позволения максимум от {{PLURAL:$2|един килобайт|$2 килобайта}}.</strong>\nПоради тази причина той не може да бъде съхранен.",
        "readonlywarning": "<strong>Внимание: Базата данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.</strong>\nАко желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.\n\nСистемният администратор, който е затворил базата данни, е посочил следната причина: $1",
        "protectedpagewarning": "<strong>Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.</strong>\nЗа справка по-долу е показан последният запис от дневниците.",
-       "semiprotectedpagewarning": "<strong>Забележка:</strong> Тази страница е защитена и само регистрирани потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
+       "semiprotectedpagewarning": "<strong>Забележка:</strong> Тази страница е защитена и само автоматично одобрени потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
        "cascadeprotectedwarning": "<strong>Внимание:</strong> Страницата е защитена, като само потребители със [[Special:ListGroupRights|нужните права]] могат да я редактират, тъй като е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
        "titleprotectedwarning": "<strong>Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.</strong>\nЗа справка по-долу е показан последният запис от дневниците.",
        "templatesused": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} на страницата:",
        "diff-multi-manyusers": "({{PLURAL:$1|Не е показана една междинна версия|Не са показани $1 междинни версии}} от повече от $2 {{PLURAL:$2|потребител|потребители}})",
        "difference-missing-revision": "{{PLURAL:$2|Не беше открита|Не бяха открити}} {{PLURAL:$2|една версия|$2 версии}} от тази разликова препратка ($1).\n\nТова обикновено се случва, когато е последвана остаряла разликова препратка на страница, която е била изтрита.\nПовече подробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
        "searchresults": "Резултати от търсенето",
+       "search-filter-title-prefix-reset": "Търсене във всички страници",
        "searchresults-title": "Резултати от търсенето за „$1“",
        "titlematches": "Съответствия в заглавията на страници",
        "textmatches": "Съответствия в текста на страници",
        "stub-threshold-disabled": "Изключено",
        "recentchangesdays": "Брой дни в последни промени:",
        "recentchangesdays-max": "(най-много $1 {{PLURAL:$1|ден|дни}})",
-       "recentchangescount": "Брой показвани редакции по подразбиране:",
+       "recentchangescount": "Ð\91Ñ\80ой Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ð½Ð¸ Ñ\80едакÑ\86ии Ð² Ð¿Ð¾Ñ\81ледниÑ\82е Ð¿Ñ\80омени, Ð¸Ñ\81Ñ\82оÑ\80иÑ\8fÑ\82а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¸ Ð»Ð¾Ð³Ð¾Ð²Ðµ Ð¿Ð¾ Ð¿Ð¾Ð´Ñ\80азбиÑ\80ане:",
        "prefs-help-recentchangescount": "Максимален брой: 1000",
        "prefs-help-watchlist-token2": "Това е секретният ключ към уеб хранилката на вашия списък за наблюдение.\nВсеки, който го знае, би могъл да прегледа списъка ви за наблюдение, така че не го споделяйте.\nПри нужда можете да го [[Special:ResetTokens|изчистите]].",
        "prefs-help-tokenmanagement": "Можете да видите и нулирате тайния ключ за Вашата сметка, който може да има достъп до уеб хранилката на Вашия списък за наблюдение. Всеки, който знае ключа, ще може да види Вашия списък за наблюдение, така че не го споделяйте.",
        "default": "по подразбиране",
        "prefs-files": "Файлове",
        "prefs-custom-css": "Личен CSS",
+       "prefs-custom-json": "Потребителски JSON",
        "prefs-custom-js": "Личен JS",
        "prefs-common-config": "Общи настройки на CSS/JSON/JavaScript за всички облици:",
        "prefs-reset-intro": "Тази страница може да се използва за възстановяване на потребителските настройки към стандартните за сайта.\nТова действие е необратимо.",
        "right-block": "Спиране на достъпа до редактиране",
        "right-blockemail": "Блокиране на потребители да изпращат писма по е-поща",
        "right-hideuser": "Блокиране и скриване на потребителско име",
-       "right-ipblock-exempt": "Пренебрегване на блокирания по IP, автоматични блокирания и блокирани IP интервали",
+       "right-ipblock-exempt": "Пренебрегване на блокирания по IP, автоматични блокирания и блокирани IP-диапазони",
        "right-unblockself": "Собствено отблокиране",
        "right-protect": "Променяне на нивото на защита и редактиране на каскадно-защитените страници",
        "right-editprotected": "Редактиране на страници защитени като „{{int:protect-level-sysop}}“",
        "upload-form-label-own-work-message-generic-local": "Потвърждавам, че качвам този файл в съответствие с правилата и лицензионната политика на сайта {{SITENAME}}.",
        "upload-form-label-not-own-work-message-generic-local": "Ако не можете да заредите този файл в съответствие с правилата на сайта {{SITENAME}}, моля, затворете този прозорец и опитайте друг метод.",
        "upload-form-label-not-own-work-message-generic-foreign": "Ако не можете да качите този файл в съответствие с правилата на споделеното хранилище, моля, затворете този прозорец и опитайте друг метод.",
+       "backend-fail-backup": "Файлът „$1“ не можа да бъде архивиран.",
        "backend-fail-notexists": "Файлът „$1“ не съществува.",
        "backend-fail-delete": "Файлът „$1“ не може да бъде изтрит.",
        "backend-fail-describe": "Метаданните не могат да бъдат променени за файл „$1“.",
        "uploadstash-errclear": "Изчистването на файловете беше неуспешно.",
        "uploadstash-refresh": "Обновяване на списъка с файлове",
        "uploadstash-thumbnail": "преглед на миниатюра",
+       "uploadstash-bad-path-unknown-type": "Неизвестен тип „$1“.",
        "img-auth-accessdenied": "Достъпът е отказан",
        "img-auth-nopathinfo": "Липсва информация за пътя.\nВашият сървър трябва да бъде настроен да предава променливите REQUEST_URI и PATH_INFO .\nАко това е така, опитайте да активирате $wgUsePathInfo.\n\nВижте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Търсеният път не е в настроената директория за качвания.",
        "deadendpages": "Задънени страници",
        "deadendpagestext": "Следните страници нямат препратки към други страници от {{SITENAME}}.",
        "protectedpages": "Защитени страници",
+       "protectedpages-filters": "Филтри:",
        "protectedpages-indef": "Само безсрочни защити",
        "protectedpages-summary": "Списък на страниците, които са защитени. За списък на заглавията, които са защитени от създаване, вижте [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Само каскадни защити",
        "apisandbox-dynamic-error-exists": "Параметър с име „$1“ вече съществува.",
        "apisandbox-deprecated-parameters": "Остарели параметри",
        "apisandbox-fetch-token": "Автоматично попълване на маркера",
+       "apisandbox-add-multi": "Добавяне",
        "apisandbox-submit-invalid-fields-title": "Някои полета са невалидни",
        "apisandbox-submit-invalid-fields-message": "Моля, поправете маркираните полета и опитайте пак.",
        "apisandbox-results": "Резултати",
        "block-log-flags-nousertalk": "забрана за редактиране на личната беседа",
        "block-log-flags-angry-autoblock": "разширената автоблокировка е включена",
        "block-log-flags-hiddenname": "скрито потребителско име",
-       "range_block_disabled": "Ð\92Ñ\8aзможноÑ\81Ñ\82Ñ\82а Ð½Ð° Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80иÑ\82е Ð´Ð° Ð·Ð°Ð´Ð°Ð²Ð°Ñ\82 Ð¸Ð½Ñ\82еÑ\80вали при IP-адресите е изключена.",
+       "range_block_disabled": "Ð\92Ñ\8aзможноÑ\81Ñ\82Ñ\82а Ð½Ð° Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80иÑ\82е Ð´Ð° Ð·Ð°Ð´Ð°Ð²Ð°Ñ\82 Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½и при IP-адресите е изключена.",
        "ipb_expiry_invalid": "Невалиден срок на изтичане.",
        "ipb_expiry_old": "Срокът на изтичане е минал.",
        "ipb_expiry_temp": "Скритите потребителски имена трябва да се блокират безсрочно.",
        "unblock-hideuser": "Не можете да отблокирате този потребител, тъй като потребителското му име е скрито.",
        "ipb_cant_unblock": "Грешка: Не е намерен блок с номер $1. Вероятно потребителят е вече отблокиран.",
        "ipb_blocked_as_range": "Грешка: IP-адресът $1 не може да бъде разблокиран, тъй като е част от блокирания регистър $2. Можете да разблокирате адреса, като разблокирате целия регистър.",
-       "ip_range_invalid": "Ð\9dевалиден Ð¸Ð½Ñ\82еÑ\80вал Ð·а IP-адреси.",
+       "ip_range_invalid": "Ð\9dевалиден Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð½а IP-адреси.",
        "ip_range_toolarge": "Забранено е блокиране на диапазони от IP адреси по-големи от /$1.",
        "ip_range_exceeded": "IP диапазонът превишава максималния диапазон. Позволен диапазон: /$1.",
        "proxyblocker": "Блокировач на проксита",
        "pageinfo-category-subcats": "Брой подкатегории",
        "pageinfo-category-files": "Брой файлове",
        "pageinfo-user-id": "Потребителски номер",
+       "pageinfo-file-hash": "Хеш-стойност",
        "markaspatrolleddiff": "Отбелязване като проверена редакция",
        "markaspatrolledtext": "Отбелязване на редакцията като проверена",
        "markaspatrolledtext-file": "Отбелязване на версията на файла като проверена",
        "newimages-newbies": "Показване на приносите само на нови потребители",
        "newimages-showbots": "Показване на качвания от ботове",
        "newimages-hidepatrolled": "Скриване на проверените качвания",
+       "newimages-mediatype": "Файлов тип:",
        "noimages": "Няма нищо.",
        "ilsubmit": "Търсене",
        "bydate": "по дата",
        "exif-source": "Източник",
        "exif-urgency": "Спешност",
        "exif-contact": "Информация за контакти",
+       "exif-writer": "Автор на текста",
        "exif-languagecode": "Език",
        "exif-iimversion": "IIM версия",
        "exif-iimcategory": "Категория",
        "version-specialpages": "Специални страници",
        "version-parserhooks": "Куки в парсера",
        "version-variables": "Променливи",
+       "version-editors": "Редактори",
        "version-antispam": "Предотвратяване на спам",
        "version-other": "Други",
        "version-mediahandlers": "Обработчици на медия",
        "linkaccounts-success-text": "Сметката беше свързана.",
        "linkaccounts-submit": "Свързване на сметки",
        "restrictionsfield-badip": "Невалиден IP-адрес или интервал от адреси: $1",
+       "restrictionsfield-label": "Позволени IP-диапазони:",
        "edit-error-short": "Грешка: $1",
        "edit-error-long": "Грешки:\n\n$1",
        "revid": "версия $1",
+       "pageid": "ID на страницата $1",
+       "gotointerwiki": "Напускане на {{SITENAME}}",
+       "gotointerwiki-invalid": "Указаното заглавие е невалидно.",
+       "pagedata-title": "Данни за страницата",
        "pagedata-bad-title": "Невалидно заглавие: $1.",
        "passwordpolicies": "Правила за паролите",
        "passwordpolicies-summary": "Това е списъкът на действащите правила за паролите на потребителските групи дефинирани в това уики.",
+       "passwordpolicies-group": "Група",
+       "passwordpolicies-policies": "Правила",
        "passwordpolicies-policy-minimalpasswordlength": "Паролата трябва да бъде от поне $1 {{PLURAL:$1|знак|знака}}",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Паролата трябва да бъде поне $1 {{PLURAL:$1|знак|знака}} за да можете да влезете",
        "passwordpolicies-policy-passwordcannotmatchusername": "Паролата не може да бъде същата като потребителското име",
index 7a2358c..3f09838 100644 (file)
        "versionrequired": "Kræver version $1 af MediaWiki",
        "versionrequiredtext": "Version $1 af MediaWiki er nødvendig for at bruge denne side. Se [[Special:Version|Versionssiden]]",
        "ok": "OK",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Hentet fra \"$1\"",
        "youhavenewmessages": "Du har $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Du har}} $1 fra {{PLURAL:$3|en anden bruger|$3 brugere}} ($2).",
        "site-atom-feed": "$1 Atom-feed",
        "page-rss-feed": "\"$1\" RSS-feed",
        "page-atom-feed": "\"$1\" Atom-feed",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (siden findes ikke)",
        "sort-descending": "Sorter faldende",
        "sort-ascending": "Sorter stigende",
index 5790fe4..208fb49 100644 (file)
        "confirm-unwatch-top": "Diese Seite von der persönlichen Beobachtungsliste entfernen?",
        "confirm-rollback-button": "Okay",
        "confirm-rollback-top": "Bearbeitungen an dieser Seite zurücksetzen?",
+       "confirm-mcrrestore-title": "Eine Version wiederherstellen",
        "confirm-mcrundo-title": "Eine Änderung rückgängig machen",
        "mcrundofailed": "Rückgängigmachung fehlgeschlagen",
        "mcrundo-missingparam": "Erforderliche Parameter fehlen bei der Anfrage.",
        "mcrundo-changed": "Die Seite wurde verändert, seit du dir den Versionsunterschied ansiehst. Bitte überprüfe die neue Änderung.",
+       "mcrundo-parse-failed": "Die neue Version konnte nicht geparst werden: $1",
        "ellipsis": "…",
        "percent": "$1&#160;%",
        "quotation-marks": "„$1“",
index 45929a7..f34d6db 100644 (file)
        "confirm-unwatch-top": "Supprimer cette page de votre liste de suivi ?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Révoquer les modifications de cette page ?",
+       "confirm-mcrrestore-title": "Restaurer une version",
        "confirm-mcrundo-title": "Annuler une modification",
        "mcrundofailed": "L’annulation a échoué",
        "mcrundo-missingparam": "Paramètres obligatoires absents dans la requête.",
        "mcrundo-changed": "La page a été modifiée depuis que vous avez affiché le diff. Veuillez revoir la nouvelle modification.",
+       "mcrundo-parse-failed": "Echec dans l'analyse de la nouvelle version : $1",
        "semicolon-separator": "&nbsp;;&#32;",
        "colon-separator": "&nbsp;:&#32;",
        "percent": "$1&#160;%",
index f60a814..58e464d 100644 (file)
@@ -18,9 +18,9 @@
        "tog-watchcreations": "Ajouté à mo lis di swivi paj-ya ki mo kréyé é fiché-ya ki mo ka enpòrté",
        "tog-watchdefault": "Ajouté à mo lis di swivi paj-ya ké fiché-ya ki mo ka modifyé",
        "tog-watchmoves": "Ajouté paj-ya ké fiché-ya ki mo ka déplasé annan mo lis di swivi",
-       "tog-watchdeletion": "Ajouté à mo lis di swivi paj-ya ké fiché-ya ki mo ka souprimé",
+       "tog-watchdeletion": "Ajouté à mo lis di swivi paj-ya ké fiché-ya ki mo ka siprimen",
        "tog-watchuploads": "Ajouté nouvèl fiché ki mo ka enpòrté à mo lis di swivi",
-       "tog-watchrollback": "Ajouté à mo lis di swivi paj-ya asou lakèl mo éfèktchwé roun révokasyon",
+       "tog-watchrollback": "Ajouté à mo lis di swivi paj-ya asou lakèl mo éfègtchwé roun révokasyon",
        "tog-minordefault": "Marké tout mo modifikasyon kou minò pa défo",
        "tog-previewontop": "Afiché prévizwalizasyon-an laro di zonn di modifikasyon",
        "tog-previewonfirst": "Afiché prévizwalizasyon-an lò di pronmyé modifikasyon",
        "namespaces": "Lèspas di non",
        "variants": "Varyant",
        "navigation-heading": "Ménou di navigasyon",
-       "errorpagetitle": "Érò",
+       "errorpagetitle": "rò",
        "returnto": "Rouvini kot paj-a $1.",
        "tagline": "Di {{SITENAME}}",
        "help": "Lèd",
        "edit-local": "Modifyé dèskripsyon lokal",
        "create": "Kréyé",
        "create-local": "Ajouté roun dèskripsyon lokal",
-       "delete": "Souprimé",
+       "delete": "Siprimen",
        "undelete_short": "Rèstoré {{PLURAL:$1|roun modifikasyon|$1 modifikasyon}}",
-       "viewdeleted_short": "Wè {{PLURAL:$1|roun modifikasyon souprimé|$1 modifikasyon souprimé}}",
+       "viewdeleted_short": "Wè {{PLURAL:$1|roun modifikasyon ki siprimen|$1 modifikasyon ki siprimen}}",
        "protect": "Protéjé",
        "protect_change": "modifyé",
        "unprotect": "Chanjé protègsyon-an",
        "generic-pool-error": "Dézolé, sèrvò-ya sa sircharjé pou moman-an.\nTròp itilizatò ka sasé konsilté sa rousours.\nSouplé, atann enpé anvan di tanté òkò d'aksédé à sala.",
        "pool-timeout": "Délè di atant di vérou dépasé",
        "pool-queuefull": "Fil dé processus sa plen",
-       "pool-errorunknown": "Éròr enkonèt",
+       "pool-errorunknown": "Lérò enkonnèt",
        "pool-servererror": "Sèrvis-a di rézèrvasyon pa disponnib ($1).",
-       "poolcounter-usage-error": "Éròr di itilizasyon : $1",
+       "poolcounter-usage-error": "Lérò di litilizasyon : $1",
        "aboutsite": "Apropo di {{SITENAME}}",
        "aboutpage": "Project:Apropo di",
        "copyright": "Kontni-a sa disponib anba lisans $1 sof mansyon kontrèr.",
        "portal-url": "Project:Pòrtay kouminotèr",
        "privacy": "Politik di konfidansyalité",
        "privacypage": "Project:Politik di konfidansyalité",
-       "badaccess": "Éròr di pèrmisyon",
+       "badaccess": "Lérò di pèrmisyon",
        "badaccess-group0": "Zòt pa gen drwè sifizan pou réyalizé laksyon doumandé.",
        "badaccess-groups": "Aksyon-an ki zòt ka éséyé di réyalizé sa pèrmi yenk pou itilizatò-ya {{PLURAL:$2|di group|di roun dé group}} : $1.",
        "versionrequired": "Vèrsyon $1 di MediaWiki nésésèr",
        "nstab-help": "Lèd",
        "nstab-category": "Katégori",
        "mainpage-nstab": "Paj prensipal",
-       "nosuchaction": "Aksyon enkonèt",
+       "nosuchaction": "Agsyon enkonnèt",
        "nosuchactiontext": "Agsyon-an ki èspésifyé annan URL-a sa envalid.\nZòt pitèt mal antré URL-a oben swivi roun lyannaj éronnen.\nLi pouvé égalman endiké oun annonmanli annan logisyèl-a ki itilizé pa {{SITENAME}}.",
        "nosuchspecialpage": "Paj èspésyal inègzistant",
        "nospecialpagetext": "<strong>Zòt doumandé oun paj èspésyal ki pa ka ègzisté.</strong>\n\nOun lis dé paj èspésyal valid ka trouvé so kò asou [[Special:SpecialPages|{{int:specialpages}}]].",
-       "error": "Érò",
-       "databaseerror": "Érò di baz-a di data",
+       "error": "rò",
+       "databaseerror": "rò di baz-a di data",
        "databaseerror-text": "Oun lérò di rékèt di baz di data prodjwi so kò.\nSala pouvé provini di roun annomali annan lojisyèl-a.",
        "databaseerror-textcl": "Oun lérò di rékèt di baz di data prodjwi so kò.",
        "databaseerror-query": "Rékèt : $1",
        "databaseerror-function": "Fonksyon : $1",
-       "databaseerror-error": "Érò : $1",
+       "databaseerror-error": "rò : $1",
        "transaction-duration-limit-exceeded": "Pou évité roun tròp fò ogmantasyon di délè di réplikasyon, sa tranzagsyon té annilé pas douré-a di ékritir ($1) dépasé limit-a di $2 ségonn. Si zòt ka sasé à modifyé oun gran nonm di éléman similtanéman, éséyé plito di éfègtchwé lopérasyon-an an plizyò létap pli piti.",
-       "laggedslavemode": "Panga, sa paj pa pouvé kontni tout dannyé modifikasyon éfèktchwé",
+       "laggedslavemode": "Panga, sa paj pa pouvé kontni tout dannyé modifikasyon-yan ki éfègtchwé",
        "readonly": "Baz di data vérouyé",
        "enterlockreason": "Endiké rézon-an di vérouyaj ensi ki roun èstimasyon di so douré",
        "readonlytext": "Ajou ké mizajou di baz di data sa atchwèlman bloké, probabman pou pèrmèt mentnans di baz-a, aprè sa, tout bagaj ké rantré annan lòrd.\n\nAdministratò sistenm-an ki vérouyé baz di data fourni èsplikasyon-an ki ka swiv :<br /> $1",
        "missingarticle-diff": "(diff : $1, $2)",
        "readonly_lag": "Baz-a di data té otonmatikman vérouyé pannan ki sèrvò-ya ségondèr ka réyaligné yé kò asou sèrvò prensipal-a",
        "nonwrite-api-promise-error": "Ankèt-a HTTP « <code>Promise-Non-Write-API-Action:</code> » té voyé mè rékèt-a té fè à oun modjoul di ékritir di API-a.",
-       "internalerror": "Érò entèrn",
-       "internalerror_info": "Érò entèrn : $1",
-       "internalerror-fatal-exception": "Érò fatal di tip « $1 »",
+       "internalerror": "rò entèrn",
+       "internalerror_info": "rò entèrn : $1",
+       "internalerror-fatal-exception": "rò fatal di tip « $1 »",
        "filecopyerror": "Enposib di kopyé fiché-a « $1 » bò'd « $2 ».",
        "filerenameerror": "Enposib di rounonmen fiché-a « $1 » an « $2 ».",
-       "filedeleteerror": "Enposib di souprimé fiché-a « $1 ».",
+       "filedeleteerror": "Enposib di siprimen fiché-a « $1 ».",
        "directorycreateerror": "Enposib di kréyé répèrtwar-a « $1 ».",
        "directoryreadonlyerror": "Répèrtwar-a « $1 » sa an lèktir sèl.",
        "directorynotreadableerror": "Répèrtwar-a « $1 » pa lizib.",
        "filenotfound": "Enposib di trouvé fiché-a « $1 ».",
        "unexpected": "Valò ki pa nòrmal : « $1 » = « $2 ».",
-       "formerror": "Érò : enposib di soumèt fòrmilèr-a.",
-       "badarticleerror": "Sa aksyon pa pouvé fika éfèktchwé asou sa paj.",
-       "cannotdelete": "Enposib di souprimé paj-a oben fiché-a « $1 ».\nSouprésyon-an pitèt ja té éfèktchwé pa rounòt moun.",
-       "cannotdelete-title": "Enposib di souprimé paj-a « $1 »",
-       "delete-hook-aborted": "Souprésyon annilé pa roun ègstansyon.\nPyès èsplikasyon té bay.",
+       "formerror": "rò : enposib di soumèt fòrmilèr-a.",
+       "badarticleerror": "Sa agsyon pa pouvé fika éfègtchwé asou sa paj.",
+       "cannotdelete": "Enposib di siprimen paj-a oben fiché-a « $1 ».\nSiprésyon-an pitèt ja té éfègtchwé pa rounòt moun.",
+       "cannotdelete-title": "Enposib di siprimen paj-a « $1 »",
+       "delete-hook-aborted": "Siprésyon annilé pa roun ègstansyon.\nPyès lèsplikasyon té fourni.",
        "no-null-revision": "Enposib di kréyé roun nouvèl révizyon vid pou paj-a « $1 »",
        "badtitle": "Movè tit",
        "badtitletext": "Tit di paj doumandé pa valid, vid, oben mal fòrmé si a roun tit entèr-lanng oben entèr-projè.\nI ka kontni pitèt oun oben plizyò karaktèr ki pa pouvé fika itilizé annan tit-ya.",
        "title-invalid-magic-tilde": "Tit di paj doumandé ka kontni roun sékans di tilde majik ki pa valid (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Tit di paj doumandé sa tròp lonng. Li pa divèt dépasé $1 {{PLURAL:$1|ògtè}} annan lankodaj-a UTF-8.",
        "title-invalid-leading-colon": "Tit di paj doumandé ka kontni roun dé-pwen envalid o koumansman.",
-       "perfcached": "Data-ya ki ka swiv sa an kach é pa pouvé fika mizajou. Oun magsimonm di {{PLURAL:$1|1=roun rézilta|$1 rézilta}} sa disponib annan kach-a.",
+       "perfcached": "Data-ya ki ka swiv sa an kach é pa pouvé fika mizajou. Oun magsimonm di {{PLURAL:$1|1=roun rézilta|$1 rézilta}} sa disponnib annan kach-a.",
        "perfcachedts": "Data-ya ki ka swiv sa an kach é té mizajou pou dannyè fwè-a $1-a. Oun magsimonm di {{PLURAL:$4|1=roun rézilta sa disponnib|$4 rézilta sa disponnib}} annan kach-a.",
        "querypage-no-updates": "Mizajou-ya pou sa paj sa atchwèlman dézagtivé.\nData-ya ki anba pa ké fika mizajou.",
        "viewsource": "Wè tègs sours-a",
        "viewsource-title": "Wè sours-a di $1",
        "actionthrottled": "Aksyon limité",
-       "actionthrottledtext": "Pou briga kont abi-ya, itilizasyon-an di sa aksyon sa limité à roun sèrten nonm di fwè annan roun laps di tan asé kourt é zòt dépasé sa limit.\nSouplé, éséyé òkò annan tchèk minout.",
+       "actionthrottledtext": "Pou briga kont abi-ya, litilizasyon-an di sa agsyon sa limité à roun sèrten nonm di fwè annan roun laps di tan asé kourt é zòt dépasé sa limit.\nSouplé, éséyé òkò annan tchèk minout.",
        "protectedpagetext": "Sa paj té protéjé pou anpéché so modifikasyon oben dé ròt aksyon.",
        "viewsourcetext": "Zòt pouvé wè é kopyé kontni-a di sa paj.",
        "viewyourtext": "Zòt pouvé wè ké kopyé kontni-a di <strong>zòt modifikasyon</strong> à sa paj.",
        "filereadonlyerror": "Enposib di modifyé fiché-a « $1 » pas répèrtwar-a di fiché « $2 » sa an lèktir sèl.\n\nAdministratò sistèm ki li vérouyé té fourni sa motif : « $3 ».",
        "invalidtitle": "Tit pa valid",
        "invalidtitle-knownnamespace": "Tit pa valid ké lèspas di non « $2 » é entitilé-a « $3 »",
-       "invalidtitle-unknownnamespace": "Tit pa valid ké niméro-a di lèspas di non $1 enkonèt é entitilé-a « $2 »",
+       "invalidtitle-unknownnamespace": "Tit pa valid ké niméro-a di lèspas di non $1 enkonnèt é entitilé-a « $2 »",
        "exception-nologin": "Pa konnègté",
        "exception-nologin-text": "Souplé, konnègté zòt kò pou agsédé à sa paj oben sa agsyon.",
        "exception-nologin-text-manual": "Souplé zòt $1 pou aksédé à sa paj oben sa aksyon.",
-       "virus-badscanner": "Movèz konfigirasyon : analizò di viris enkonèt : <em>$1</em>",
+       "virus-badscanner": "Mové konfigirasyon : analizò di viris enkonnèt : <em>$1</em>",
        "virus-scanfailed": "échèk di analiz-a (kod $1)",
-       "virus-unknownscanner": "antiviris enkonèt :",
+       "virus-unknownscanner": "antiviris enkonnèt :",
        "logouttext": "<strong>Zòt atchwèlman dékonnègté.</strong>\n\nNoté ki sèrten paj pouvé fika òkò afiché kou si zòt toujou konnègté, jouk zòt désidé di éfasé kach-a di zòt navigatò.",
        "cannotlogoutnow-title": "Enposib di dékonnègté so kò atchwèlman",
        "cannotlogoutnow-text": "Dékonnègsyon-an pa posib an itilizan $1.",
        "usernameinprogress": "Oun kréyasyon di kont pou sa non d'itilizatò ja an kour.\nSouplé, pasyanté.",
        "userexists": "Non d'itilizatò sézi ja itilizé.\nSouplé, chwézi roun non diféran.",
        "loginerror": "Lérò di konnègsyon",
-       "createacct-error": "Érò lò kréyasyon-an di kont",
+       "createacct-error": "Lérò lò di kréyasyon-an di kont",
        "createaccounterror": "Enposib di kréyé kont-a : $1",
        "nocookiesnew": "Kont itilizatò-a kréyé, mé zòt pa konnègté.\n{{SITENAME}} ka itilizé dé témwen (''cookies'') pou konsèrvé konnègsyon-an mé zòt dézagtivé yé.\nSouplé, agtivé yé é rikonnègté zòt kò ké menm non é menm modipas.",
        "nocookieslogin": "{{SITENAME}} itilizé dé témwen (''cookies'') pou konsèrvé konnègsyon-an mé zòt dézagtivé yé.\nSouplé, agtivé yé é rikonnègté zòt kò.",
        "passwordtoolong": "Mo di pas pa pouvé dépasé $1 karaktèr{{PLURAL:$1|}}.",
        "passwordtoopopular": "Mo di pas ki tròp kouran pa pouvé fika itilizé. Souplé, chwézi roun mo di pas pli difisil à douviné.",
        "password-name-match": "Zòt mo di pas divèt fika diféran di zòt non d'itilizatò.",
-       "password-login-forbidden": "Itilizasyon-an di sa non d'itilizatò oben di sa mo di pas té entèrdit.",
+       "password-login-forbidden": "Litilizasyon-an di sa non d'itilizatò oben di sa modipas sa entèrdi.",
        "mailmypassword": "Réyinisyalizé modipas-a",
        "passwordremindertitle": "Nouvèl mo di pas tanporèr pou {{SITENAME}}",
        "passwordremindertext": "Tchèk moun (dipi adrès IP-a $1) doumandé roun modipas nòv pou {{SITENAME}} ($4). Oun modipas tanporèr pou itilizatò-a\n« $2 » té kréyé é sa « $3 ». Si sala té zòt entansyon,\nzòt divèt konnègté zòt kò é chwézi roun modipas nòv.\nZòt modipas tanporèr ké èspiré annan $5 jou{{PLURAL:}}.\n\nSi zòt pa lotò di sa doumann, oben si zòt ka souvni zòt kò atchwèlman di zòt modipas é zòt pli ka swété an chanjé, zòt pouvé ignoré sa mésaj é kontinwé di itilizé zòt ansyen modipas.",
        "blocked-mailpassword": "Zòt adrès IP bloké an modifikasyon. Pou évité abi-ya, i pa otorizé di itilizé rékipérasyon-an di mo à partir di sa adrès IP.",
        "eauthentsent": "Roun kouryé di konfirmasyon té voyé à adrès-a ki endiké.\nAnvan ki rounòt kouryé ka fika voyé à sa kont, zòt divèt swiv enstriksyon di kouryé é konfirmé ki kont-a byen di zòt.",
        "throttled-mailpassword": "Roun kouryé di réyinisyalizasyon di zòt mo di pas té ja voyé douran {{PLURAL:$1|dannyé lò|$1 dannyé lò}}. \nAfen di évité abi-ya, roun sèl kouryé di réyinisyalizasyon di zòt mo di pas ké fika voyé pa {{PLURAL:$1|lò|entèrval di $1 lò}}.",
-       "mailerror": "Érò lò di voyé di kouryé : $1",
+       "mailerror": "Lérò lò di voyé-a di kouryé : $1",
        "acct_creation_throttle_hit": "Vizitò-ya di sa wiki ki ka itilizé zòt adrès IP kréyé {{PLURAL:$1|roun kont|$1 kont}} douran dannyé $2, sa ki sa limit maksimal otorizé andan sa entèrval di tan.\nPa konsékan, kréyasyon di kont pou vizitò-ya ki ka itilizé sa adrès IP sa tanporèrman enposib.",
        "emailauthenticated": "Zòt adrès di kouryé té konfirmé $2 à $3.",
        "emailnotauthenticated": "Zòt adrès di kouryé pa òkò konfirmé.\nPyès kouryé ké fika voyé pou chaken dé fonksyon swivant.",
        "accountcreated": "Kont kréyé",
        "accountcreatedtext": "Kont itilizatò pou [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskisyon]]) té kréyé.",
        "createaccount-title": "Kréyasyon di roun kont pou {{SITENAME}}",
-       "createaccount-text": "Tchèk moun kréyé roun kont pou zòt adrès di kouryé asou {{SITENAME}} ($4) entitilé « $2 », ké mo di pas « $3 ».\nZòt divèt ouvri roun sésyon é atchwèlman modifyé zòt mo di pas.\n\nIgnoré sa mésaj si sa kont té kréyé pa érò.",
+       "createaccount-text": "Tchèk moun kréyé roun kont pou zòt adrès di kouryé asou {{SITENAME}} ($4) ki entitilé « $2 », ké modipas « $3 ».\nZòt divèt ouvri roun sésyon é modifyé atchwèlman zòt modipas.\n\nIgnoré sa mésaj si sa kont té kréyé pa lérò.",
        "login-throttled": "Zòt tanté dannyéman roun nonm tròp élvé di konnègsyon.\nSouplé, antann $1 anvan di éséyé òkò.",
        "login-abort-generic": "Zòt échwé zòt tantativ di konnègsyon",
        "login-migrated-generic": "Zòt kont té migré, é zòt non d'itilizatò pa ka ègzisté òkò asou sa wiki.",
        "pt-login-continue-button": "Kontinwé konnègsyon-an",
        "pt-createaccount": "Kréyé roun kont",
        "pt-userlogout": "Dékonnègté so kò",
-       "php-mail-error-unknown": "Érò enkonèt annan fonksyon-an <code>mail()</code> di PHP.",
+       "php-mail-error-unknown": "Lérò enkonnèt annan fongsyon-an <kod>mail()</kod> di PHP.",
        "user-mail-no-addy": "Enposib di voyé roun kouryé san adrès di kouryé.",
        "user-mail-no-body": "Ésè di voyé di roun kouryé ké roun kò vid oben anòrmalman kour.",
        "changepassword": "Chanjé di mo di pas",
        "changepassword-success": "Zòt modipas modifyé !",
        "changepassword-throttled": "Zòt fè tròp di tantativ di konnègsyon résaman. \nSouplé, antann $1 anvan di réyéséyé.",
        "botpasswords": "Mo di pas di robo",
-       "botpasswords-summary": "<em>Modipas-ya di robo</em> ka pèrmèt di agsédé à roun kont itilizatò vya API-a san itilizé idantifyan-yan di konnègsyon prensipal. Drwè itilizatò disponib lò to konnègté ké roun modipas robo pouvé fika rédjwi.\n\nSi zòt pa ka wè poukisa zòt ké lé fè sa, a ki zòt pa benzwen di fè sa. Pésonn divèt janmen doumandé zòt di an jénéré roun é di bay li.",
+       "botpasswords-summary": "<em>Modipas-ya di robo</em> ka pèrmèt di agsédé à roun kont itilizatò vya API-a san itilizé idantifyan-yan di konnègsyon prensipal. Drwè itilizatò-ya ki disponnib lò to konnègté ké roun modipas robo pouvé fika rédjwi.\n\nSi zòt pa ka wè poukisa zòt ké lé fè sa, a ki zòt pa benzwen di fè sa. Pésonn divèt janmen doumandé zòt di an jénéré roun é di bay li.",
        "botpasswords-disabled": "Mo di pas di robo sa dézaktivé.",
        "botpasswords-no-central-id": "Pou itilizé modipas-ya di robo, zòt divèt fika konnègté à roun kont ki santralizé.",
        "botpasswords-existing": "Mo di pas di robo ègzistan",
        "botpasswords-label-create": "Kréyé",
        "botpasswords-label-update": "Mété à jou",
        "botpasswords-label-cancel": "Annilé",
-       "botpasswords-label-delete": "Souprimé",
+       "botpasswords-label-delete": "Siprimen",
        "botpasswords-label-resetpassword": "Réyinisyalizé mo di pas",
        "botpasswords-label-grants": "Drwè aplikab :",
        "botpasswords-help-grants": "Lotorizasyon-yan ka pèrmèt di agsédé o drwè ki déja akòrdé à zòt kont itilizatò. Agtivé roun lotorizasyon isi ka fourni lagsè à pyès drwè ki zòt kont itilizatò péké ganyen dayò. Wè [[Special:ListGrants|tablo dé lotorizasyon]] pou plis di lenfòrmasyon.",
        "botpasswords-label-grants-column": "Akòrdé",
        "botpasswords-bad-appid": "Non-an di robo « $1 » pa valid.",
        "botpasswords-insert-failed": "Échèk di ajou-a di non di robo « $1 ». Ès i té ja ajouté ?",
-       "botpasswords-update-failed": "Échèk di mizajou-a di non di robo « $1 ». Ès i té ja souprimé ?",
+       "botpasswords-update-failed": "Léchèk di mizajou di non di robo « $1 ». Ès i té ja siprimen ?",
        "botpasswords-created-title": "Mo di pas di robo kréyé",
        "botpasswords-created-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té kréyé.",
        "botpasswords-updated-title": "Mo di pas di robo mizajou",
        "botpasswords-updated-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té mizajou.",
-       "botpasswords-deleted-title": "Mo di pas di robo souprimé",
-       "botpasswords-deleted-body": "Mo di pas pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té souprimé.",
-       "botpasswords-newpassword": "Nouvèl modipas-a pou konnègté so kò Ã <strong>$1</strong> sa <strong>$2</strong>. <em>Souplé, anréjistré li pou fè référans asou li iltèryèrman.</em><br> (Pou ansyen robo ki ka nésésité ki non fourni pou konnègsyon-an ka fika menm-an ki non di itilizasyon évantchwèl, zòt pouvé osi itilizé <strong>$3</strong> kou non di itilizatò é <strong>$4</strong> kou modipas).",
+       "botpasswords-deleted-title": "Modipas di robo siprimen",
+       "botpasswords-deleted-body": "Modipas-a pou robo-a « $1 » di {{GENDER:$2|itilizatò|itilizatris}}-a « $2 » té siprimen.",
+       "botpasswords-newpassword": "Nouvèl modipas-a pou konnègté so kò Ã <strong>$1</strong> sa <strong>$2</strong>. <em>Souplé, anréjistré li pou fè référans asou li iltèryòrman.</em><br> (Pou ansyen robo-ya ki ka nésésité ki non-an ki fourni pou konnègsyon-an ka fika menm-an ki non-an di itilizatò évantchwèl, zòt pouvé osi itilizé <strong>$3</strong> kou non di itilizatò é <strong>$4</strong> kou modipas).",
        "botpasswords-no-provider": "BotPasswordsSessionProvider pa disponnib.",
        "botpasswords-restriction-failed": "Rèstrigsyon-yan di modipas di robo ka anpéché sa konnègsyon.",
        "botpasswords-invalid-name": "Non-an d'itilizatò spésifyé pa ka kontni di séparatò di mo di pas di robo (« $1 »).",
        "passwordreset-nosuchcaller": "Apélan-an pa ka ègzisté : $1",
        "passwordreset-invalidemail": "Adrès di mésajri envalid",
        "passwordreset-nodata": "Pyès non d'itilizatò oben adrès di mésajri té fourni",
-       "changeemail": "Chanjé oben souprimé adrès di kouryé",
+       "changeemail": "Chanjé oben siprimen adrès-a di kouryé",
        "changeemail-no-info": "Zòt divèt fika konnègté pou agsédé dirèkman à sa paj.",
        "changeemail-oldemail": "Adrès di kouryé atchwèl :",
        "changeemail-newemail": "Nouvèl adrès di kouryé :",
        "showpreview": "Prévizwalizé",
        "showdiff": "Wè modifikasyon-yan",
        "anoneditwarning": "<strong>Panga :</strong> zòt pa konnègté. Zòt adrès IP ké vizib pa tout moun si zòt ka fè dé modifikasyon. Si zòt <strong>[$1 ka konnègté zòt kò]</strong> oben <strong>[$2 kréyé roun kont]</strong>, zòt modifikasyon ké fika atribiyé à zòt pròp non di itilizatò é zòt ké gen ròt avantaj.",
-       "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP bloké.</strong>\n\nBlokaj té éfèktchwé pa $1.\nRézon-an ki évoké ka swiv : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Èspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pouvé kontakté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pa pouvé itilizé fonksyon-an « {{int:emailuser}} » rounso si oun adrès di kouryé valid sa èspésifyé andan zòt [[Special:Preferences|préférans]] é rounso si sa fonksyonalité pa bloké.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chakin dé rékèt ki zòt ké fè.",
+       "blockedtext": "<strong>Zòt kont itilizatò oben zòt adrès IP bloké.</strong>\n\nBlokaj té éfègtchwé pa $1.\nRézon-an ki évoké ka swiv : <em>$2</em>.\n\n* Koumansman di blokaj : $8\n* Lèspirasyon di blokaj : $6\n* Kont bloké : $7.\n\nZòt pouvé kontagté $1 oben rounòt [[{{MediaWiki:Grouppage-sysop}}|administratò]] pou an diskité.\nZòt pouvé itilizé fongsyon-an « {{int:emailuser}} » rounso si roun adrès di kouryé valid sa èspésifyé annan zòt [[Special:Preferences|préférans]] é rounso si sa fongsyonnalité pa bloké pou zòt.\nZòt adrès IP atchwèl sa $3 é zòt idantifyan di blokaj sa $5.\nSouplé, enkli tout détay-ya lasou'l annan chaken dé rékèt ki zòt ké fè.",
        "loginreqlink": "konnègté so kò",
        "newarticletext": "Zòt té ka swiv roun lyannaj bò'd roun paj ki pa ka ègzisté òkò. \nAfen di kréyé sa paj, antré zòt tègs annan bwèt-a ki apré (zòt pouvé konsilté [$1 paj di lèd-a] pou plis di lenfòrmasyon).\nSi zòt vini{{GENDER:|}} isi pa lérò, kliké asou bouton-an <strong>Routour</strong> di zòt navigatò.",
        "anontalkpagetext": "----\n<em>Zòt asou paj di diskisyon di roun itilizatò annonnim ki pa òkò kréyé di kont oben ki pa ka an itilizé</em>.\nPou sa rézon, nou divèt itilizé so adrès IP pou idantifyé li.\nOun adrès IP pouvé fika patajé pa plizyò itilizatò.\nSi zòt roun itiliza{{GENDER:|ò}} annonnim é si zòt ka kontasté ki dé koumantèr ki pa ka konsèrné zòt sa adrèsé pou zòt, zòt pouvé [[Special:CreateAccount|kréyé roun kont]] oben [[Special:UserLogin|konnègté zòt kò]] atò di évité tout konfizyon fitir ké ròt kontribitò annonnim.",
        "template-protected": "(protéjé)",
        "template-semiprotected": "(sémi-protéjé)",
        "hiddencategories": "{{PLURAL:$1|Katégori kaché}} don sa paj ka fè parti :",
-       "permissionserrors": "Éròr di pèrmisyon",
+       "permissionserrors": "Lérò di pèrmisyon",
        "permissionserrorstext-withaction": "Zòt pa pouvé $2, pou {{PLURAL:$1|rézon swivant}} :",
-       "recreate-moveddeleted-warn": "<strong>Panga : zòt ka roukréyé oun paj ki té présédaman souprimé.</strong>\n\nAsouré-zòt ki li sa pertinan di pourswiv modifikasyon-yan asou sa paj.\nJournal dé souprésyon é dé déplasman pou sa paj sa afiché anba à tit di enfòrmasyon :",
+       "recreate-moveddeleted-warn": "<strong>Panga : zòt ka roukréyé roun paj ki té présédanman siprimen.</strong>\n\nAsouré-zòt ki i sa pèrtinan di pourswiv modifikasyon-yan asou sa paj.\nJournal-ya dé siprésyon é dé déplasman pou sa paj sa fourni isi pou lenfòrmasyon :",
        "moveddeleted-notice": "Sa paj té siprimen. \nJournal-ya dé siprésyon, dé protègsyon é dé déplasman pou paj-a sa afiché anba pou référans.",
        "content-model-wikitext": "wikitèks",
        "undo-failure": "Sa modifikasyon pa pouvé défèt : sala ké antré an konfli ké modifikasyon entèrmédjèr-ya.",
        "recentchanges-label-plusminus": "Tay di paj-a chanjé di sa nonm d'oktè.",
        "recentchanges-legend-heading": "<strong>Léjann :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (wè osi [[Special:NewPages|lis dé nouvèl paj]]).",
-       "rcnotefrom": "Anba {{PLURAL:$5|modifikasyon éfèktchwé}} dipi <strong>$3, $4</strong> (afiché jouk à <strong>$1</strong>).",
+       "rcnotefrom": "Anba {{PLURAL:$5|modifikasyon-an ki éfègtchwé|modifikasyon-yan ki éfègtchwé}} dipi <strong>$3, $4</strong> (afiché jouk <strong>$1</strong>).",
        "rclistfrom": "Afiché nouvèl modifikasyon-yan dipi $3, $2",
        "rcshowhideminor": "$1 modifikasyon minò",
        "rcshowhideminor-show": "Afiché",
        "rcshowhidemine": "$1 mo modifikasyon-yan",
        "rcshowhidemine-show": "Afiché",
        "rcshowhidemine-hide": "Maské",
-       "rclinks": "Afiché $1 dannyé modifikasyon éfèktchwé o kour dé $2 dannyé jou.",
+       "rclinks": "Afiché $1 dannyé modifikasyon-yan ki éfègtchwé o kour dé $2 dannyé jou.",
        "diff": "dif",
        "hist": "ist",
        "hide": "Maské",
        "uploadlogpage": "Journal di enpo di fiché",
        "filedesc": "Dèskripsyon",
        "license": "Lisans",
-       "license-header": "Kondisyon di itilizasyon",
+       "license-header": "Kondisyon di litilizasyon",
        "imgfile": "fiché",
        "listfiles": "Lis di fiché",
        "file-anchor-link": "Fiché",
        "filehist-user": "Itilizatò",
        "filehist-dimensions": "Dimansyon",
        "filehist-comment": "Koumantèr",
-       "imagelinks": "Itilizasyon di fiché",
+       "imagelinks": "Litilizasyon di fiché",
        "linkstoimage": "{{PLURAL:$1|Paj ki ka swiv ka itilizé|$1 paj-ya ki ka swiv ka itilizé}} sa fiché :",
        "linkstoimage-more": "Pli {{PLURAL:$1|di roun paj ka itilizé|di $1 paj ka itilizé}} sa fiché.\nLis-a ki ka swiv ka afiché rounso {{PLURAL:$1|pronmyé paj-a ki ka itilizé|$1 pronmyé paj-ya ki ka itilizé}} sa fiché.\nOun [[Special:WhatLinksHere/$2|lis konplèt]] sa disponnib.",
        "nolinkstoimage": "Pyès paj ka itilizé sa fiché.",
        "speciallogtitlelabel": "Sib (tit oben {{ns:user}}:non di itilizatò) :",
        "log": "Journal d’opérasyon",
        "all-logs-page": "Tout journal piblik",
-       "alllogstext": "Afichaj konbiné di tout journal disponib asou {{SITENAME}}.\nZòt pouvé pèrsonalizé afichaj an sélèksyonnan tip di journal, non di itilizatò oben paj-a ki konsèrné (sa Dé dannyé sa sansib à lakas).",
+       "alllogstext": "Lafichaj konbinen di tout journal-ya ki disponnib asou {{SITENAME}}.\nZòt pouvé pèrsonalizé lafichaj an sélègsyonnan tip di journal-a, non di itilizatò-a oben paj-a ki konsèrnen (sa Dé dannyé sa sansib à lakas).",
        "logempty": "Pyès opérasyon korèspondant andan journal-ya.",
        "allpages": "Tout paj-ya",
        "allarticles": "Tout paj-ya",
        "unwatch": "Pli swiv òkò",
        "watchlist-details": "{{PLURAL:$1|$1 paj sa|$1}} annan zòt lis di swivi (plis paj-ya di diskisyon).",
        "wlheader-showupdated": "Paj-ya ki modifyé dipi zòt dannyé vizit sa afiché an <strong>gra</strong>.",
-       "wlnote": "Anba {{PLURAL:$1|figir dannyé modifikasyon-an éfèktchwé|figir <strong>$1</strong> dannyé modifikasyon-yan éfèktchwé}} douran {{PLURAL:$2|dannyé lò| <strong>$2</strong>}}, jouk o $3, $4.",
+       "wlnote": "Anba {{PLURAL:$1|ka figiré dannyé modifikasyon-an ki éfègtchwé|ka figiré <strong>$1</strong> dannyé modifikasyon-yan ki éfègtchwé}} douran {{PLURAL:$2|dannyé lèr-a|<strong>$2</strong> dannyé lèr-ya}}, jouk $3, $4.",
        "wlshowlast": "Montré dannyé $1 lò, dannyé $2 jou",
        "watchlist-options": "Opsyon di lis di swivi",
        "enotif_reset": "Marké tout paj-ya kou vizité",
-       "dellogpage": "Journal dé souprésyon",
+       "dellogpage": "Journal dé siprésyon",
        "rollbacklink": "révoké",
        "rollbacklinkcount": "révoké $1 {{PLURAL:$1|modifikasyon}}",
        "protectlogpage": "Journal dé protègsyon",
        "tooltip-ca-viewsource": "Sa paj sa protéjé.\nZòt pouvé toutfwè vizwalizé sours-a.",
        "tooltip-ca-history": "Listorik dé vèrsyon di sa paj",
        "tooltip-ca-protect": "Protéjé sa paj",
-       "tooltip-ca-delete": "Souprimé sa paj",
+       "tooltip-ca-delete": "Siprimen sa paj",
        "tooltip-ca-move": "Rounonmen sa paj",
        "tooltip-ca-watch": "Ajouté sa paj annan zòt lis di swivi",
        "tooltip-ca-unwatch": "Routiré sa paj di zòt lis di swivi",
        "watchlisttools-raw": "Modifyé lis di swivi an mòd brout",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskisyon]])",
        "redirect": "Roudirijé pa ID di fiché, itilizatò, paj, révizyon oben journal",
-       "redirect-summary": "Sa paj èspésyal ka roudirijé bò'd roun fiché (non di fiché fourni), oun paj (ID di révizyon oben di paj fourni), oun paj di itilizatò (idantifyan nimérik di itilizatò fourni), oben roun antré di journal (ID di journal fourni). Itilizasyon : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], oben [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-summary": "Sa paj èspésyal ka roudirijé bò'd roun fiché (non di fiché fourni), oun paj (ID di révizyon oben di paj fourni), oun paj di itilizatò (idantifyan nimérik di itilizatò-a ki fourni), oben roun antré di journal (ID di journal fourni). Litilizasyon : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], oben [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Validé",
        "redirect-lookup": "Sasé :",
        "redirect-value": "Valò :",
        "tags-active-yes": "Wi",
        "tags-active-no": "Awa",
        "tags-hitcount": "$1 modifikasyon{{PLURAL:$1|}}",
-       "logentry-delete-delete": "$1 souprimé paj-a $3",
+       "logentry-delete-delete": "$1 siprimen paj-a $3",
        "logentry-delete-restore": "$1 rèstoré paj-a $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|modifyé}} vizibilité {{PLURAL:$5|di oun révizyon|di $5 révizyon}} asou paj $3 : $4",
        "revdelete-content-hid": "kontni maské",
index bce4509..9a1d234 100644 (file)
        "grouppage-user": "{{ns:project}}:Sadasya",
        "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmed sadasya",
        "grouppage-bot": "{{ns:project}}:Bots",
-       "grouppage-sysop": "{{ns:project}}:Администраторар",
+       "grouppage-sysop": "{{ns:project}}:Administrators",
        "grouppage-bureaucrat": "{{ns:project}}:Bureaucrats",
        "grouppage-suppress": "{{ns:project}}:Suppress",
        "right-read": "Panna ke parrho",
index 1e8332f..ab57a67 100644 (file)
        "toolbox": "Գործիքներ",
        "tool-link-userrights": "Փոփոխել {{GENDER:$1|մասնակից}} խմբեր",
        "tool-link-userrights-readonly": "Տեսնել {{GENDER:$1|մասնակից}} խումբը",
-       "tool-link-emailuser": "Ուղարկել էլ այս նամակ {{GENDER:$1|մասնակցին}}",
+       "tool-link-emailuser": "Ուղարկել էլ. նամակ այս {{GENDER:$1|մասնակցին}}",
        "imagepage": "Դիտել նիշքի էջը",
        "mediawikipage": "Դիտել հաղորդագրության էջը",
        "templatepage": "Դիտել կաղապարի էջը",
        "emptyfile": "Ձեր բեռնած նիշքը ըստ երևույթին դատարկ է։ Հնարավոր է սա նիշքի անվանման մեջ տառասխալի հետևանք է։ Խնդրում ենք ստուգել, թե արդյոք իսկապես ուզում եք բեռնել այս նիշքը։",
        "fileexists": "Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի։ Խնդրում ենք ստուգել <strong>[[:$1]]</strong>, եթե դուք համոզված չեք, որ ուզում եք այն փոխարինել։\n[[$1|thumb]]",
        "fileexists-extension": "Գոյություն ունի համանման անվանմամբ նիշք՝ [[$2|thumb]]\n* Բեռնված նիշքի անվանում՝ <strong>[[:$1]]</strong>\n* Գոյություն ունեցող նիշքի անվանում՝ <strong>[[:$2]]</strong>\nԽնդրում ենք ընտրել մեկ այլ անվանում։",
-       "fileexists-thumbnail-yes": "Õ\86Õ«Õ·Ö\84Õ¨ Õ¨Õ½Õ¿ Õ¥Ö\80Ö\87Õ¸Ö\82ÕµÕ©Õ«Õ¶ Ö\83Õ¸Ö\84Ö\80Õ¡Ö\81Õ¾Õ¡Õ® ÕºÕ¡Õ¿Õ³Õ¥Õ¶ Õ§ ''(ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ«Õ¯)''Ö\89 [[$1|thumb]]\nÔ½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84 Õ½Õ¿Õ¸Ö\82Õ£Õ¥Õ¬ <strong>[[:$1]]</strong> Õ¶Õ«Õ·Ö\84Õ¨Ö\89\nÔµÕ©Õ¥ Õ¶Õ·Õ¾Õ¡Õ® Õ¶Õ«Õ·Ö\84Õ¨ Õ¶Õ¸Ö\82ÕµÕ¶ ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ¶ Õ§ Õ¢Õ¶Ö\85Ö\80Õ«Õ¶Õ¡Õ¯ Õ¹Õ¡Ö\83Õ¸Õ¾, Õ¡ÕºÕ¡ Õ°Õ¡Ö\80Õ¯Õ¸վոր չէ բեռնել նրա փոքրացված պատճենը։",
+       "fileexists-thumbnail-yes": "Õ\86Õ«Õ·Ö\84Õ¨ Õ¨Õ½Õ¿ Õ¥Ö\80Ö\87Õ¸Ö\82ÕµÕ©Õ«Õ¶ Ö\83Õ¸Ö\84Ö\80Õ¡Ö\81Õ¾Õ¡Õ® ÕºÕ¡Õ¿Õ³Õ¥Õ¶ Õ§ ''(ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ«Õ¯)''Ö\89 [[$1|thumb]]\nÔ½Õ¶Õ¤Ö\80Õ¸Ö\82Õ´ Õ¥Õ¶Ö\84 Õ½Õ¿Õ¸Ö\82Õ£Õ¥Õ¬ <strong>[[:$1]]</strong> Õ¶Õ«Õ·Ö\84Õ¨Ö\89\nÔµÕ©Õ¥ Õ¶Õ·Õ¾Õ¡Õ® Õ¶Õ«Õ·Ö\84Õ¨ Õ¶Õ¸Ö\82ÕµÕ¶ ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ¶ Õ§ Õ¢Õ¶Ö\85Ö\80Õ«Õ¶Õ¡Õ¯ Õ¹Õ¡Ö\83Õ¸Õ¾, Õ¡ÕºÕ¡ Õ°Õ¡Ö\80Õ¯Õ¡վոր չէ բեռնել նրա փոքրացված պատճենը։",
        "file-thumbnail-no": "Նիշքի անվանման սկիզբն է՝ <strong>$1</strong>։ \nՀավանաբար սա փոքրացված պատճեն է ''(պատկերիկ)''։ \nԵթե դուք այս պատկերը ամբողջական լուծաչափով ունեք, ապա խնդրում ենք բեռնել այն, հակառակ դեպքում՝ խնդրում ենք փոխել նիշքի անվանումը։",
        "fileexists-forbidden": "Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Այսպիսի անվանմամբ նիշք արդեն գոյություն ունի նիշքերի ընդհանուր զետեղարանում։ Խնդրում ենք հետ վերադառնալ և բեռնել նիշքը նոր անվանմամբ։ [[File:$1|thumb|center|$1]]",
        "emailuser": "էլ-նամակ ուղարկել այս մասնակցին",
        "emailuser-title-target": "Ուղարկել էլ․ նամակ {{GENDER:$1|մասնակցին}}",
        "emailuser-title-notarget": "Ուղարկել էլ․ նամակ",
-       "emailpagetext": "Ô´Õ¸Ö\82Ö\84 Õ¯Õ¡Ö\80Õ¸Õ² Õ¥Ö\84 Ö\85Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ¥Õ¬ Õ¶Õ¥Ö\80Ö\84Ö\87Õ« Õ±Ö\87Õ¨ Õ¡ÕµÕ½ {{GENDER:$1|Õ´Õ¡Õ½Õ¶Õ¡Õ¯Ö\81Õ«Õ¶}} Õ§Õ¬-Õ¶Õ¡Õ´Õ¡Õ¡Õ¯ Õ¸Ö\82Õ²Õ¡Ö\80Õ¯Õ¥Õ¬Õ¸Ö\82 Õ°Õ¡Õ´Õ¡Ö\80Ö\89\n\nÕ\81Õ¥Ö\80 Õ¶Õ¡Õ­Õ¨Õ¶Õ¿Ö\80Õ¡Õ¶Ö\84Õ¶Õ¥Ö\80Õ¸Ö\82Õ´ Õ¶Õ·Õ¾Õ¡Õ® Õ§Õ¬-Õ°Õ¡Õ½Ö\81Õ¥Õ¶ Õ¯Õ¥Ö\80Ö\87Õ¡ Â«Õ\88Ö\82Õ´Õ«Ö\81» Õ¤Õ¡Õ·Õ¿Õ¸Ö\82Õ´ Ö\87 Õ½Õ¿Õ¡Ö\81Õ¸Õ²Õ¨ Õ¯Õ¡Ö\80Õ¸Õ² Õ§ Õ¡Õ¶Õ´Õ«Õ»Õ¡ÕºÕ¥Õ½ ÕºÕ¡Õ¿Õ¡Õ½Õ­Õ¡Õ¶Õ¥Õ¬ Õ±Õ¥Õ¦Ö\89",
+       "emailpagetext": "Դուք կարող եք օգտագործել ներքևի ձևը այս {{GENDER:$1|մասնակցին}} էլ-նամակ ուղարկելու համար։\n\nՁեր նախընտրանքներում նշված էլ-հասցեն կերևա «Ումից» դաշտում և ստացողը կարող է անմիջապես պատասխանել ձեզ։",
        "defemailsubject": "{{SITENAME}} էլ-նամակ",
        "usermaildisabled": "Էլ․ նամակ ուղարկելը թույլատրված չէ։",
        "usermaildisabledtext": "Այս վիքիում չեք կարղ էլ․ նամակ ուղարկել այլ մասնակիցների",
        "emailsubject": "Թեմա.",
        "emailmessage": "Ուղերձ.",
        "emailsend": "Ուղարկել",
-       "emailccme": "Ուղարկել ինձ իմ նամակի պատճեն։",
-       "emailccsubject": "Ձեր՝ $1 մասնակցին նամակի պատճեն. $2",
+       "emailccme": "Ուղարկել ինձ իմ նամակի պատճենը։",
+       "emailccsubject": "$1 մասնակցին ուղարկված Ձեր նամակի պատճենը. $2",
        "emailsent": "Էլեկտրոնային նամակն ուղարկված է",
        "emailsenttext": "Ձեր էլ-ուղերձն ուղարկված է։",
        "usermessage-editor": "Համակարգի սուրհանդակ",
index b6541f8..0216ef2 100644 (file)
        "confirm-unwatch-top": "Rimuovere questa pagina dalla tua lista degli osservati speciali?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Ripristinare le modifiche di questa pagina?",
+       "confirm-mcrrestore-title": "Ripristina una versione",
        "confirm-mcrundo-title": "Annulla una modifica",
        "mcrundofailed": "Annullamento fallito",
        "mcrundo-missingparam": "Parametri obbligatori mancanti nella richiesta.",
index d475f92..1591257 100644 (file)
        "internalerror_info": "Masalah njero: $1",
        "filecopyerror": "Ora bisa nurun barkas \"$1\" dadi \"$2\".",
        "filerenameerror": "Ora bisa ngowahi saka \"$1\" dadi \"$2\".",
-       "filedeleteerror": "Ora bisa mbusak barkas \"$1\".",
+       "filedeleteerror": "Ora bisa mbusek barkas \"$1\".",
        "directorycreateerror": "Ora bisa nggawé dirèktori \"$1\".",
        "directoryreadonlyerror": "Pérangan \"$1\" mung kena diwaca.",
        "directorynotreadableerror": "Pérangan \"$1\" ora kena diwaca.",
        "formerror": "Masalah: Ora bisa ngirim formulir",
        "badarticleerror": "Laku iki ora bisa kalakokaké ing kaca iki.",
        "cannotdelete": "Kaca utawa barkas \"$1\" ora bisa panjenengan busak.\nBokmanawa kaca utawa barkasé wis dibusek wong liya.",
-       "cannotdelete-title": "Ora bisa mbusak kaca \"$1\"",
+       "cannotdelete-title": "Ora bisa mbusek kaca \"$1\"",
        "delete-hook-aborted": "Pambusakan dibatalaké déning ''hook''.\nOra ana alesané.",
        "no-null-revision": "Ora isa nggawe revisi 'null' anyar kanggo kaca \"$1\"",
        "badtitle": "Sesirah ala",
        "virus-badscanner": "Kasalahan konfigurasi: pamindai virus ora dikenal: ''$1''",
        "virus-scanfailed": "''Pemindaian'' utawa ''scan'' gagal (kode $1)",
        "virus-unknownscanner": "antivirus buhbuhan:",
-       "logouttext": "<strong>Panjenengan wis metu log.</strong>\n\nTulung gatèkaké yèn sawenèh kaca bokmanawa bakal isih katon kaya déné yèn panjenengan isih mlebu log, kajaba panjenengan mbusak ''cache'' pangluruné panjenengan.",
+       "logouttext": "<strong>Panjenengan wis metu log.</strong>\n\nTulung gatèkaké yèn sawenèh kaca bokmanawa bakal isih katon kaya déné yèn panjenengan isih mlebu log, kajaba panjenengan mbusek telih pangluruné panjenengan.",
        "cannotlogoutnow-title": "Ora bisa metu saiki",
        "cannotlogoutnow-text": "Mokal metu log nalika nganggo $1.",
        "welcomeuser": "Sugeng Rawuh, $1!",
        "accountcreated": "Akun wis kagawé",
        "accountcreatedtext": "Akun panganggo [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|rembug]]) wis digawé.",
        "createaccount-title": "Gawé akun kanggo {{SITENAME}}",
-       "createaccount-text": "Ana kang nggawé akun nganggo alamat layang-èlé panjenengan ing {{SITENAME}} ($4) kanthi aran \"$2\", mawa tembung wadi \"$3\".\nPanjenengan kudu mlebu log lan ngowahi tembung wadiné panjenengan saiki.\n\nPanjenengan kena nglirwakaké layang iki, manawa akun iki digawé awit kaluputan.",
+       "createaccount-text": "Ana kang nggawé akun nganggo alamat layang-èlé panjenengan ing {{SITENAME}} ($4) kanthi aran \"$2\", mawa tembung wadi \"$3\".\nPanjenengan kudu mlebu log lan ngowahi tembung wadiné panjenengan saiki.\n\nPanjenengan kena nglirwakaké layang iki, manawa akun iki ginawé awit kaluputan.",
        "login-throttled": "Panjenengan wis ping akèh njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
        "login-abort-generic": "Panjenengan ora bisa mlebu log - Kawurungan",
        "login-migrated-generic": "Akuné panjenengan wis dimigrasi, lan jeneng panganggoné wis ora ana manèh ing wiki iki.",
        "userpage-userdoesnotexist": "Akun panganggo \"$1\" ora kadhaftar.\nMangga pesthèkaké dhisik yèn panjenengan péngin nggawé/mbesut kaca iki.",
        "userpage-userdoesnotexist-view": "Akun panganggo \"$1\" ora kadhaftar.",
        "blocked-notice-logextract": "Panganggo iki saiki lagi diblokir.\nLog pamblokiran pungkasan dituduhaké ing ngisor iki minangka bahan rujukan:",
-       "clearyourcache": "<strong>Cathetan:</strong> Nalika rampung nyimpen, panjenengan kudu mbusak telihing pangluruné panjenengan supaya owahané katon.\n* <strong>Firefox / Safari:</strong> Pencèt <em>Shift</em> nalika ngeklik <em>Reload</em>, utawa pencèt <em>Ctrl-F5</em> utawa <em>Ctrl-R</em> (<em>⌘-R</em> ing Mac)\n* <strong>Google Chrome:</strong> Pencèt <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> ing Mac)\n* <strong>Internet Explorer:</strong> Pencèt <em>Ctrl</em> nalika ngeklik <em>Refresh</em>, utawa pencèt <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Menyang <em>Menu → Settings</em> (<em>Opera → Preferences</em> ing Mac) nuli menyang <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
+       "clearyourcache": "<strong>Cathetan:</strong> Nalika rampung nyimpen, panjenengan kudu mbusek telihing pangluruné panjenengan supaya owahané katon.\n* <strong>Firefox / Safari:</strong> Pencèt <em>Shift</em> nalika ngeklik <em>Reload</em>, utawa pencèt <em>Ctrl-F5</em> utawa <em>Ctrl-R</em> (<em>⌘-R</em> ing Mac)\n* <strong>Google Chrome:</strong> Pencèt <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> ing Mac)\n* <strong>Internet Explorer:</strong> Pencèt <em>Ctrl</em> nalika ngeklik <em>Refresh</em>, utawa pencèt <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Menyang <em>Menu → Settings</em> (<em>Opera → Preferences</em> ing Mac) nuli menyang <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "usercssyoucanpreview": "'''Tips:''' Gunakna tombol \"{{int:showpreview}}\" kanggo ngetès CSS anyar panjenengan sadurungé disimpen.",
        "userjsyoucanpreview": "'''Tips:''' Gunakna tombol \"{{int:showpreview}}\" kanggo ngetès JavaScript anyar panjenengan sadurungé disimpen.",
        "usercsspreview": "'''Pèngeten yèn panjenengan namung mirsani pratilik CSS panjenengan.''''\n'''Pratilik iku durung kasimpen!'''",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} matesi bisané panjenengan nggawé kaca anyar.\nPanjenengan bisa bali lan mbesut kaca kang ana, utawa [[Special:UserLogin|mlebu log utawa nggawé akun]].",
        "nocreate-loggedin": "Panjenengan ora kagungan idin kanggo nggawé kaca anyar.",
-       "sectioneditnotsupported-title": "Panyuntingan bagéyan ora kasengkuyungan",
+       "sectioneditnotsupported-title": "Besut pérangan ora kasengkuyung",
        "sectioneditnotsupported-text": "Ora bisa mbesut sapérangan ana ing kaca iki.",
        "permissionserrors": "Masalah idin",
        "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni kang panjenengan gayuh amarga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
        "pagehist": "Babading kaca",
        "deletedhist": "Sajarah kabusak",
        "revdelete-hide-current": "Gagal ndhelikaké révisi tanggal $2, $1: iki arupa révisi paling anyar.\nRévisi iki ora bisa didhelikaké.",
-       "revdelete-show-no-access": "Gagal nampilaké révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.",
+       "revdelete-show-no-access": "Ana masalah nalika nuduhaké wiji mawa titimangsa $1, $2: Wiji iki wis tinandhani \"winates\".\nPanjenengan ora kawogan ngaksès iku.",
        "revdelete-modify-no-access": "Gagal ngowahi révisi tanggal $1, jam $2: révisi iki wis ditandhani \"kawates\".\nPanjenengan ora nduwèni aksès menyang révisi iki.",
        "revdelete-modify-missing": "Ana masalah nalika ndandani wiji ID $1: Barangé ora ana ing basis dhatah!",
        "revdelete-no-change": "'''Pènget:''' révisi tanggal $1, jam $2 wis nduwèni aturan pandhelikan kasebut.",
        "yourrealname": "Jeneng asli:",
        "yourlanguage": "Basa kang dianggo:",
        "yourvariant": "Werna basa isi:",
-       "prefs-help-variant": "Varian utawa ortografi kang panjenengan pilih kanggo nampilaké kaca kontèn saka wiki iki.",
+       "prefs-help-variant": "Varian utawa ortografi kang panjenengan pilih supaya kapajang ing kaca kontèn wiki iki.",
        "yournick": "Tapak asma anyar:",
        "prefs-help-signature": "Tanggepan ing kaca parembugan kudu ditapakasmani mawa \"<nowiki>~~~~</nowiki>\", kang bakal salin dadi tapak asma lan tandha wektuné panjenengan.",
        "badsig": "Tapak astanipun klèntu; cèk rambu HTML.",
        "right-apihighlimits": "Nganggo wates kang luwih dhuwur ing kwéri API",
        "right-writeapi": "Nganggo API tulis",
        "right-delete": "Busak kaca",
-       "right-bigdelete": "Busak kaca-kaca mawa sajarah panyuntingan kang gedhé",
+       "right-bigdelete": "Busak kaca mawa sajarah besutan kang gedhé",
        "right-deletelogentry": "Busak lan wurung busak èntri log tartamtu",
        "right-deleterevision": "Busak lan wurung busak owahan tinamtuné kaca",
        "right-deletedhistory": "Ndeleng sajarah èntri-èntri kabusak, tanpa bisa ndeleng apa kang dibusak",
        "right-suppressrevision": "Deleng, dhelikaké, lan wurung dhelikaké owahan tinamtu kaca-kacané panganggo sembarang",
        "right-viewsuppressed": "Deleng owahan kang didhelikaké saka panganggo sembarang",
        "right-suppressionlog": "Deleng log priangga",
-       "right-block": "Blokir panganggo-panganggo liya saka panyuntingan",
+       "right-block": "Blokir panganggo liya saka mbesut",
        "right-blockemail": "Blokir panganggo saka ngirim e-mail",
        "right-hideuser": "Blokir jeneng panganggo, lan delikna saka umum",
        "right-ipblock-exempt": "Bypass pamblokiran IP, pamblokiran otomatis lan pamblokiran rangkéan",
        "filename-bad-prefix": "Jeneng berkas kang panjenengan unggahaké, diawali mawa '''\"$1\"''', ya iku jeneng non-dèskriptif kang biasané diwènèhaké sacara otomatis déning kamera digital. Mangga milih jeneng liyané kang luwih dèskriptif kanggo berkas panjenengan.",
        "upload-proto-error": "Protokol ora bener",
        "upload-proto-error-text": "Pangunggahan jarah adoh mbutuhaké URL kang diawali karo <code>http://</code> utawa <code>ftp://</code>.",
-       "upload-file-error": "Kaluputan internal",
-       "upload-file-error-text": "Ana kaluputan internal nalika nyoba ngunggahaké berkas sauntara ing server.\nMangga kontak [[Special:ListUsers/sysop|pangurus]].",
-       "upload-misc-error": "Kaluputan pamunggahan kang ora dimangertèni",
-       "upload-misc-error-text": "Ana kaluputan kang ora diweruhi kadadéyan nalika pangunggahan. Mangga dipasthèkaké yèn URL kasebut iku absah lan bisa diaksès lan sawisé iku cobanen manèh. Yèn masalah iki isih ana, mangga kontak [[Special:ListUsers/sysop|pangurus sistem]].",
+       "upload-file-error": "Masalah njero",
+       "upload-file-error-text": "Ana masalah njero nalika njajal nggawé barkas sauntara ing paladèn.\nSumangga sesambungan karo [[Special:ListUsers/sysop|pangurus]].",
+       "upload-misc-error": "Masalah pangunggah kang ora kaweruhan",
+       "upload-misc-error-text": "Ana masalah kang ora kaweruhan nalika ngunggah.\nSumangga vèrifikasi yèn URLé trep lan kena ingaksès lan jajala manèh. \nYèn masalah iki isih muncul, sumangga sesambungan karo [[Special:ListUsers/sysop|pangurus]].",
        "upload-too-many-redirects": "URL ngandhut kakèhan pengalihan",
        "upload-http-error": "Ana masalah HTTP: $1",
        "upload-copy-upload-invalid-domain": "Unggahan salinan ora sumadhiya ing domain iki.",
        "filejournal-fail-dbquery": "Tidak bisa update database jurnal untuk penyimpanan backend \"$1\".",
        "lockmanager-notlocked": "Ora bisa mbukak gembok \"$1\"; iku ora kagembok.",
        "lockmanager-fail-closelock": "Ora bisa nutup barkas gembok tumrap \"$1\".",
-       "lockmanager-fail-deletelock": "Ora bisa mbusak barkas gembok tumrap \"$1\".",
+       "lockmanager-fail-deletelock": "Ora bisa mbusek barkas gembok tumrap \"$1\".",
        "lockmanager-fail-acquirelock": "Ora bisa njaluk gembok kanggo \"$1\".",
        "lockmanager-fail-openlock": "Ora bisa mbukak barkas gembok tumrap \"$1\".",
        "lockmanager-fail-releaselock": "Ora bisa ngetokaké gembok kanggo \"$1\".",
        "uploadstash-summary": "Kaca iki nyadhiyakaké dalan ing barkas-barkas kang wis diunggah (utawa lagi diunggah) naning durung kababar ing wiki. Barkas-barkas iki ora katon kanggo sapa baé nanging namung kanggo panganggo kang ngunggah baé.",
        "uploadstash-clear": "Busek barkas kadhelikaké",
        "uploadstash-nofiles": "Panjenengan ora duwé barkas simpenan.",
-       "uploadstash-badtoken": "Nglakoni iki ora suksès, mungkin amarga hak panyuntingan panjenengan wis kedaluwarsa. Jajal manèh.",
+       "uploadstash-badtoken": "Nglakoni iki ora dadi, bokamanawa amarga hak besut panjenengan wis kadaluwarsa. Sumangga jajal manèh.",
        "uploadstash-errclear": "Wurung ngresiki barkasé.",
        "uploadstash-refresh": "Segeraké pratélan barkas",
        "invalid-chunk-offset": "Ganti rugi kethoka ora sah",
        "filerevert-success": "'''[[Media:$1|$1]]''' wis dibalèkaké menyang [vèrsi $4 ing $3, $2].",
        "filerevert-badversion": "Ora ana vèrsi lokal sadurungé saka berkas iki mawa stèmpel wektu kang dikarepaké.",
        "filerevert-identical": "Vèrsi barkasé kang saiki padha plek karo kang dipilih.",
-       "filedelete": "Mbusak $1",
+       "filedelete": "Mbusek $1",
        "filedelete-legend": "Busak barkas",
-       "filedelete-intro": "Panjenengan bakal mbusak berkas '''[[Media:$1|$1]]''' sekaliyan kabèh riwayaté.",
-       "filedelete-intro-old": "Panjenengan mbusak vèrsi '''[[Media:$1|$1]]''' per [$4 $3, $2].",
+       "filedelete-intro": "Panjenengan arep mbusek barkas <strong>[[Media:$1|$1]]</strong> sisan karo kabèh sajarahé.",
+       "filedelete-intro-old": "Panjenengan mbusek vèrsi <strong>[[Media:$1|$1]]</strong> per [$4 $3, $2].",
        "filedelete-comment": "Alesan:",
        "filedelete-submit": "Busak",
        "filedelete-success": "'''$1''' wis dibusak.",
        "filedelete-otherreason": "Alesan tambahan/liya:",
        "filedelete-reason-otherlist": "Alesan liya",
        "filedelete-reason-dropdown": "*Alesan pambusakan\n** Nglanggar hak cipta\n** Berkas duplikat",
-       "filedelete-edit-reasonlist": "Besut alesané mbusak",
+       "filedelete-edit-reasonlist": "Besut alesané mbusek",
        "filedelete-maintenance": "Pambusakan lan pambalikan berkas kanggo sawetara dipatèni salawas ana pangruwatan.",
-       "filedelete-maintenance-title": "Ora bisa mbusak barkas",
+       "filedelete-maintenance-title": "Ora bisa mbusek barkas",
        "mimesearch": "Gegolèkan MIME",
        "mimesearch-summary": "Kaca iki nyedyaké fasilitas nyaring berkas miturut tipe MIME-né. Lebokna: contenttype/subtype, contoné <code>image/jpeg</code>.",
        "mimetype": "Tipe MIME:",
        "unwatchedpages": "Kaca kang ora ingawasan",
        "listredirects": "Pratélan alihan",
        "unusedtemplates": "Cithakan kang ora kanggo",
-       "unusedtemplatestext": "Kaca iki ngamot kabèh kaca ing bilik jeneng {{ns:template}} kang ora dianggo ing kaca ngendi waé.\nPriksanen dhisik pranala-pranala menyang cithakan iki sadurungé mbusak.",
+       "unusedtemplatestext": "Kaca iki isi kabèh kaca ing mandala aran {{ns:template}} kang ora kaanggo ing kaca liya.\nAja lali mesthèkaké ana-orané pranala liya kang ngener cithakané sadurungé panjenengan mbusek.",
        "unusedtemplateswlh": "pranala liya-liyané",
        "randompage": "Kaca sembarang",
        "randompage-nopages": "Ora ana kaca ing {{PLURAL:$2||}}bilik jeneng iki:$1.",
        "listgrouprights-members": "(pratélaning anggota)",
        "listgrouprights-addgroup": "Tambah {{PLURAL:$2|golongan}}: $1",
        "listgrouprights-removegroup": "Busak {{PLURAL:$2|golongan}}: $1",
-       "listgrouprights-addgroup-all": "Bisa nambahaké kabèh klompok",
-       "listgrouprights-removegroup-all": "Bisa mbusak kabèh klompok",
-       "listgrouprights-addgroup-self": "Nambahaké {{PLURAL:$2|klompok|klompok}} menyang akuné dhéwé: $1",
-       "listgrouprights-removegroup-self": "Mbusak {{PLURAL:$2|klompok|klompok}} saka akuné dhéwé: $1",
+       "listgrouprights-addgroup-all": "Wuwuh kabèh golongan",
+       "listgrouprights-removegroup-all": "Busak kabèh golongan",
+       "listgrouprights-addgroup-self": "Muwuh {{PLURAL:$2|golongan|golongan}} menyang akuné dhéwé: $1",
+       "listgrouprights-removegroup-self": "Mbusek {{PLURAL:$2|golongan|golongan}} saka akuné dhéwé: $1",
        "listgrouprights-addgroup-self-all": "Nambahaké kabèh grup menyang akuné dhéwé",
-       "listgrouprights-removegroup-self-all": "Mbusak kabèh klompok saka akuné dhéwé",
+       "listgrouprights-removegroup-self-all": "Busak kabèh golongan saka akuné dhéwé",
        "listgrouprights-namespaceprotection-header": "Watesan mandala aran",
        "listgrouprights-namespaceprotection-namespace": "Mandala aran",
        "listgrouprights-namespaceprotection-restrictedto": "Hak kang ngidinaké panganggo mbesut",
        "deletereasonotherlist": "Alesan liya",
        "deletereason-dropdown": "*Alesan pambusakan\n** Spam\n** Vandhalisme\n** Terakan hak cipta\n** Panyuwun kang nulis\n** Alihan rusak",
        "delete-edit-reasonlist": "Besut alesané pambusak",
-       "delete-toobig": "Kaca iki darbé sajarah besutan kang dawa, punjul $1 {{PLURAL:$1|owahan}}.\nMbusak kaca kang mangkono wis ora diidinaké kanggo njagani supaya ora ana kang rusak ing {{SITENAME}}.",
+       "delete-toobig": "Kaca iki duwé sajarah besutan kang dawa, punjul $1 {{PLURAL:$1|owahan}}.\nMbusek kaca mangkéné wis winates kanggo ngéndhani prakara kang ora ingarepaké {{SITENAME}}.",
        "delete-warning-toobig": "Kaca iki duwé sajarah besutan kang dawa, punjul $1 {{PLURAL:$1|révisi}}.\nMbusak kaca iki bisa ngrusak lakuné basis dhata ing {{SITENAME}};\nkudu diayahi kanthi ngati-ati.",
        "deleteprotected": "Panjenengan ora bisa mbusak kaca iki amarga direksa.",
        "deleting-backlinks-warning": "<strong>Pepéling:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ana kaca liya]] kang nggayut utawa tranklud marang kaca kang arep panjenengan busek.",
        "undelete-no-results": "Ora tinemu kaca kang cocog ing arsip pambusakan.",
        "undelete-filename-mismatch": "Ora bisa mulihaké révisi barkas mawa tandha wektu $1: Jeneng barkas ora padha",
        "undelete-bad-store-key": "Ora bisa mbatalaké pambusakan révisi berkas mawa tandha wektu $1: berkas ilang sadurungé dibusak.",
-       "undelete-cleanup-error": "Ana kaluputan nalika mbusak arsip berkas \"$1\" kang ora dienggo.",
+       "undelete-cleanup-error": "Masalah nalika mbusak barkas arsip \"$1\" kang ora kanggo.",
        "undelete-missing-filearchive": "Ora bisa mulihaké arsip barkas ID $1 amarga ora ana ing basis dhatah.\nBarkas iku bokmanawa wis binusek.",
        "undelete-error": "Masalah mulihaké kaca",
-       "undelete-error-short": "Kaluputan olèhé mbatalaké pambusakan: $1",
-       "undelete-error-long": "Ana kaluputan nalika mbatalaké pambusakan berkas:\n\n$1",
+       "undelete-error-short": "Masalah nalika wurung mbusak barkas: $1",
+       "undelete-error-long": "Masalah nalika wurung mbusak barkas:\n\n$1",
        "undelete-show-file-confirm": "Apa panjenengan yakin arep mirsani révisi berkas \"<nowiki>$1</nowiki>\" kang wis kabusak ing $2 jam $3?",
        "undelete-show-file-submit": "Ya",
        "namespace": "Mandala aran:",
        "ipb-otherblocks-header": "{{PLURAL:$1|Blokiran|Blokiran}} liya",
        "unblock-hideuser": "Panjenengan ora bisa mbukak blokiran panganggo iki amarga jeneng panganggoné didhelikaké.",
        "ipb_cant_unblock": "Masalah: ID blokiran $1 ora tinemu. Blokiran iku bokmanawa wis kabukak.",
-       "ipb_blocked_as_range": "Kaluputan: IP $1 ora diblokir sacara langsung lan ora bisa dijabel blokiré. IP $1 diblokir mawa bagéyan saka pamblokiran kelompok IP $2, kang bisa dijabel pamblokirané.",
+       "ipb_blocked_as_range": "Masalah: Alamat IP $1 ora langsung kablokir lan ora bisa kabukak blokirané.\nMangkonoa, alamat IP-né kablokir awit saka pérangané $2, kang bisa kabukak blokirané.",
        "ip_range_invalid": "Blok IP ora absah.",
        "ip_range_toolarge": "Jangkahé blokiran luwih gedhé saka /$1 ora dililakaké.",
        "proxyblocker": "Pamblokir proxy",
        "allmessages-filter-translate": "Pertal",
        "thumbnail-more": "Gedhèkaké",
        "filemissing": "Barkas ilang",
-       "thumbnail_error": "Kaluputan nalika nggawé gambar cilik (''thumbnail''): $1",
+       "thumbnail_error": "Masalah nalika nggawé gambar mini: $1",
        "thumbnail_error_remote": "Layang masalah saka $1:\n$2",
        "djvu_page_error": "Kaca DjVu ana ing sajabaning ranggèhan (''range'')",
        "djvu_no_xml": "Ora bisa njupuk XML kanggo berkas DjVu",
        "patrol-log-header": "Iki log revisi kang wis dipatroli.",
        "confirm-markpatrolled-button": "YA",
        "deletedrevision": "Revisi lawas kang dibusak $1.",
-       "filedeleteerror-short": "Kaluputan nalika mbusak berkas: $1",
-       "filedeleteerror-long": "Ana kaluputan nalika mbusak berkas:\n\n$1",
+       "filedeleteerror-short": "Masalah nalika mbusak barkas: $1",
+       "filedeleteerror-long": "Ana masalah nalika mbusek barkas:\n\n$1",
        "filedelete-missing": "Barkas \"$1\" ora bisa dibusek amarga ora tinemu.",
        "filedelete-old-unregistered": "Révisi berkas \"$1\" kang diwènèhaké ora ana sajroning basis data.",
        "filedelete-current-unregistered": "Berkas kang dispésifikasi \"$1\" ora ana sajroning basis data.",
        "confirm-purge-title": "Buwang kaca iki",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Busak ''cache'' kaca iki?",
-       "confirm-purge-bottom": "Ngresiki kaca uga bakal mbusak singgahan lan nampilaké vèrsi kaca pungkasan.",
+       "confirm-purge-bottom": "Mbusak kaca bakal ngresiki telih lan meksa supaya révisi kang anyar dhéwé muncul.",
        "confirm-watch-button": "Oké",
        "confirm-watch-top": "Tambahaké kaca iki ing pawawangané panjenengan?",
        "confirm-unwatch-button": "Oké",
index a8b3e5a..bcab4c0 100644 (file)
        "viewsourcelink": "မ်ုယောဝ်ႋ အ်ုထိုဝ်",
        "editsectionhint": "ကၞါင့်ယိုဝ် မ်ုအင်းတင်: $1",
        "toc": "ပ်ုယုံ့ခေါဟ်တင်",
+       "confirmable-no": "လ်ုမာၜး",
        "site-rss-feed": "RSS feed $1 ဍူ",
        "site-atom-feed": "Atom feed $1ဍူ",
        "page-atom-feed": "Atom feed $1 ဍူ",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ၏ <strong>$1</strong> အ်ုတင်ၮေဝ်ႋ|<strong>$3</strong> ၏ <strong>$1 - $2</strong> အ်ုတင်ၮေဝ်ႋလ်ုဖး}}",
        "search-nonefound": "အင်းၰူ့ဆ်ုပ်ုယောဝ်ႋလ်ုၜးဍံင်သယ်လ်ုဖး အ်ုတင်ၮေဝ်လ်ုအှ်ၜးႋ။",
        "mypreferences": "မ်ုလုဲႋၯင်းလ်ုဖး",
+       "group-user": "ဆ်ုသုံႋဆာႋလ်ုဖး",
+       "group-autoconfirmed": "အ်ုဆ်ုမာအ်ုလ်ုအ်ု ဆ်ုထီ့ဆာႋထ ဆ်ုသုံႋဆာႋလ်ုဖး",
        "group-bot": "ဘေါႋလ်ုဖး",
        "group-sysop": "ပိုင်ဆ်ုပျာဆ်ုလ်ုဖး",
+       "grouppage-user": "{{ns:project}}:ဆ်ုသုံႋဆာႋလ်ုဖး",
        "grouppage-bot": "{{ns:project}}:ဘော့သယ်",
        "grouppage-sysop": "{{ns:project}}:ပိုင်ဆ်ုပျာဆိုင်လ်ုဖး",
        "right-writeapi": "ဆ်ုကေဝ်လိက် API အိုဝ် မ်ုအင်းသုံ့",
        "proxyblocker": "ပ်ုရောက်ဆီ ဆ်ုခၠာၜိင်း",
        "movelogpage": "အင်းသုံ့လင် မာၮါင်း",
        "export": "လိက်မေံသယ်လ်ဖး Export ထုက်ထုင်း",
+       "export-submit": "မ်ုသုံႋထုင်း",
        "thumbnail-more": "မာဍောဟ်အ်ုလာဟှင်",
        "importlogpage": "ဍုဂ်ဆူ့ စ်ုရင့်",
        "tooltip-pt-userpage": "{{GENDER:|ၮ်ုခဝ့် ဆ်ုသုံ့ဆာ}} လိက်မေံၜၠါ်",
        "tooltip-rollback": "\"မ်ုထါင် ကျးက္ဍာ\" ယိုဝ် လိက်မေံအ်ုယိုဝ် လါင်းခါင့် ဆ်ုအင်းတင်ႋခဝ့် ကလစ် လ်ုထီးအိုဝ် ထါင်က္ဍာဖှ်ေဝေ့လှ်။",
        "tooltip-undo": "\"ထါင်လါင်းခါင့်\" ၮှ် ဆ်ုအင်းတင်ယိုဝ် ထါင်ဆုဂ်ခါင့်ဝေ့ၯံင် လ်ုအ်ုဍံင်ၯင်မဝ့်မ်ှ မ်ုအင်းတင် မ်ုပၠါ်ထါင်းၮင်။ ဆှ်ၜိုဝ် ထါင်ဆုဂ်ခါင့်ယိုဝ် ပ်ုကုံႋဆုဂ် အ်ုခဝ့်ပ်ုယဝ့် ကေဝ်ၮေဝ်လှ်။",
        "tooltip-summary": "အင်းတင်ႋဖူးဆူ့လင်",
+       "anonusers": "{{SITENAME}} အ်ုမၠိင်လ်ုသှ်ယာႋ {{PLURAL:$2|ဆ်ုသုံႋဆာႋ|ဆ်ုသုံႋဆာႋလ်ုဖး}} $1",
        "simpleantispam-label": "Anti-spam အင်းၰူ့ၯင်းဆ်ုပၠယ်တဝ်။ အှ်ယိုဝ်ၮှ် <strong>ဖိုင့်ၰိုဲလ်ုၯေဝ်</strong>!",
        "pageinfo-title": "\"$1\" အ်ုၯင်း ဆ်ုသုဂ်ကၠယ်လ်ုဖး",
        "pageinfo-header-basic": "အ်ုခင်းထါ်ဆ်ုပြိုင့်အ်ုၯာင်ႋအ်ုကျံင်း",
index 3d36a57..e9a7300 100644 (file)
        "confirm-unwatch-top": "이 문서를 주시문서 목록에서 뺄까요?",
        "confirm-rollback-button": "확인",
        "confirm-rollback-top": "이 문서의 편집을 되돌리시겠습니까?",
+       "confirm-mcrrestore-title": "판 복구",
        "confirm-mcrundo-title": "변경사항 취소",
        "mcrundofailed": "실행 취소를 실패했습니다",
        "mcrundo-missingparam": "요청에 필요한 변수가 존재하지 않습니다.",
        "mcrundo-changed": "차이를 본 이후로 문서가 변경되었습니다. 새로운 변경사항을 검토해 주십시오.",
+       "mcrundo-parse-failed": "새 판의 구문 분석을 실패했습니다: $1",
        "quotation-marks": "“$1”",
        "imgmultipageprev": "← 이전 페이지",
        "imgmultipagenext": "다음 페이지 →",
index 5cd97ce..3b3a5b8 100644 (file)
        "group-autoconfirmed": "Автотестикь хьанвай иштиракчияр",
        "group-bot": "Ботар",
        "group-sysop": "Къавха",
+       "group-interface-admin": "Интерфейсдин администраторар",
        "group-bureaucrat": "Бюрократар",
        "group-suppress": "Ревизорар",
        "group-all": "(вири)",
        "group-user-member": "{{GENDER:$1|иштиракчи}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|администратор}}",
+       "group-interface-admin-member": "{{GENDER:$1|интерфейсдин администратор}}",
        "group-bureaucrat-member": "{{GENDER:$1|бюрократ}}",
        "grouppage-user": "{{ns:project}}:Иштиракчияр",
        "grouppage-bot": "{{ns:project}}:Бот",
index daae6da..5649f9b 100644 (file)
        "confirm-unwatch-top": "Да ја отстранам страницава од набљудуваните?",
        "confirm-rollback-button": "ОК",
        "confirm-rollback-top": "Да ги отповикам уредувањата на страницава?",
+       "confirm-mcrrestore-title": "Поврати преработка",
        "confirm-mcrundo-title": "Откажи промена",
        "mcrundofailed": "Откажувањето не успеа",
        "mcrundo-missingparam": "Недостасуваат задолжителни параметри за барањето.",
        "mcrundo-changed": "Страницата е изменета откако ги гледавте разликите. Прегледајте ја новата промена.",
+       "mcrundo-parse-failed": "Не успеав да ја расчленам новата преработка: $1",
        "percent": "$1&#160;%",
        "quotation-marks": "„$1“",
        "imgmultipageprev": "← претходна страница",
index 774c4e2..6db8de9 100644 (file)
        "right-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "right-editinterface": "ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക",
        "right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
+       "right-edituserjson": "മറ്റ് ഉപയോക്താക്കളുടെ ജെസൺ പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-edituserjs": "മറ്റ് ഉപയോക്താക്കളുടെ JS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editmyusercss": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ സി.എസ്.എസ്. പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editmyuserjs": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ ജാവാസ്ക്രിപ്റ്റ് പ്രമാണങ്ങൾ തിരുത്തുക",
        "rcfilters-watchlist-showupdated": "മാറ്റങ്ങൾ ഉണ്ടായ ശേഷം താങ്കൾ സന്ദർശിക്കാത്ത താളുകളിലെ മാറ്റങ്ങൾ, തളിക അടയാളത്തോടൊപ്പം <strong>കടുപ്പിച്ച്</strong> കാണിച്ചിരിക്കുന്നു.",
        "rcfilters-preference-label": "സമീപകാലമാറ്റങ്ങളുടെ പുതുക്കിയ പതിപ്പ് പ്രദർശിപ്പിക്കേണ്ട",
        "rcfilters-preference-help": "സമ്പർക്കമുഖത്തിൽ 2017-ൽ വരുത്തിയ രൂപകല്പനാമാറ്റങ്ങളും, അതോടൊപ്പവും പിന്നീടും ചേർത്ത എല്ലാ ഉപകരണങ്ങളും ഒഴിവാക്കുക.",
+       "rcfilters-watchlist-preference-label": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയുടെ പുതുക്കിയ പതിപ്പ് പ്രദർശിപ്പിക്കേണ്ടതില്ല",
+       "rcfilters-watchlist-preference-help": "2017-ലെ സമ്പർക്കമുഖ പുനർരൂപകല്പനയും അതോടൊപ്പവും പിന്നീടും ചേർത്ത എല്ലാ ഉപകരണങ്ങളും ഒഴിവാക്കുക",
        "rcfilters-filter-showlinkedfrom-label": "കണ്ണി ചേർക്കപ്പെട്ട താളുകളിലെ മാറ്റങ്ങൾ കാണിക്കുക",
        "rcfilters-filter-showlinkedfrom-option-label": "തിരഞ്ഞെടുത്ത താളിൽ <strong>കണ്ണി ചേർക്കപ്പെട്ട താളുകൾ</strong>",
+       "rcfilters-filter-showlinkedto-label": "കണ്ണി ചേർക്കപ്പെട്ട താളുകളിലെ മാറ്റങ്ങൾ കാണിക്കുക",
+       "rcfilters-filter-showlinkedto-option-label": "തിരഞ്ഞെടുത്ത താളിലേക്ക് <strong>കണ്ണി ചേർക്കപ്പെട്ട താളുകൾ</strong>",
        "rcfilters-target-page-placeholder": "താളിന്റെ (അല്ലെങ്കിൽ വർഗ്ഗത്തിന്റെ) പേര് നൽകുക",
        "rcnotefrom": "<strong>$3, $4</strong> മുതലുള്ള {{PLURAL:$5|മാറ്റം|മാറ്റങ്ങൾ}} ആണ് താഴെയുള്ളത്  (<strong>$1</strong> എണ്ണം വരെ കൊടുക്കുന്നതാണ്).",
        "rclistfromreset": "തീയതി എടുത്തത് പുനഃസജ്ജീകരിക്കുക",
        "http-timed-out": "എച്ച്.റ്റി.റ്റി.പി. അഭ്യർത്ഥന സമയം കഴിഞ്ഞു.",
        "http-curl-error": "യു.ആർ.എൽ. ശേഖരിക്കുന്നതിൽ പിഴവ്: $1",
        "http-bad-status": "എച്ച്.റ്റി.റ്റി.പി. അഭ്യർത്ഥനാ വേളയിൽ ഒരു പിഴവുണ്ടായി: $1 $2",
+       "http-internal-error": "എച്ച്.റ്റി.റ്റി.പി. ആന്തരിക പിഴവ്.",
        "upload-curl-error6": "യൂ.ആർ.എൽ. പ്രാപ്യമല്ല",
        "upload-curl-error6-text": "താങ്കൾ സമർപ്പിച്ച യൂ.ആർ.എൽ. പ്രാപ്യമല്ല‌. ദയവായി യൂ.ആർ.എൽ. സാധുവാണോ എന്നും സൈറ്റ് സജീവമാണോ എന്നും പരിശോധിക്കുക.",
        "upload-curl-error28": "അപ്‌ലോഡ് ടൈംഔട്ട്",
index a9f520b..addbfb3 100644 (file)
        "tog-extendwatchlist": "သၠဲ စရၚ်မမၚ်မဲ သ္ဂောံ ထ္ၜး အလုံ မုက်လိၚ်ဂမၠိုၚ်, ဆ မတုဲကၠုၚ်လၟုဟ် ဟွံသေၚ်",
        "tog-showtoolbar": "ထ္ၜး တာန်ကြိယာမဒါန်",
        "tog-editondblclick": "ဒါန်မုက်လိက်ဂမၠိုၚ် ပွမပ္ဍဵုကေတ်ၜါလ္တန်",
+       "tog-enotifwatchlistpages": "ပြၚ်အီမေလ်ကုအဲ အခိၚ်မုက်လိက် ဟွံသေၚ် ဝှာၚ်မနွံပ္ဍဲစရၚ်မမၚ်မွဲအဲ ဒးဒုၚ်ပြံၚ်",
+       "tog-enotifusertalkpages": "ပြၚ်အဳမေလ်ကုအဲ အခိၚ်မုက်လိက်ဓရီုကျာညးလွပ်အဲ ဒးဒုၚ်ပြံၚ်",
+       "tog-enotifminoredits": "ပြၚ်အဳမေလ်ကုအဲ သွက်မပလေဝ်ဒါန်ညိညဒဒှ်မုက်လိက်ကေုာံဝှာၚ်အဲဂမၠိုၚ်ကီုလေဝ်",
+       "tog-oldsig": "စၟတ်တဲ မၞး မၞုံဒၟံၚ်တုဲတုဲ:",
+       "tog-watchlisthideown": "ဗဒန်ထောံအဲဒါန်လဝ်နူစရၚ်မဗဵုရံၚ်",
+       "tog-watchlisthidebots": "ဗဒန်ထောံ ရုပ်စက်မပလေဝ်ဒါန်   နူ စရၚ်မမၚ်မွဲ",
+       "tog-watchlisthideminor": "ဗဒန်ထောံ ပလေဝ်ဒါန်မညိည နူ စရၚ်မမၚ်မွဲ",
+       "tog-watchlisthidecategorization": "ပၞုက် အရာမဖျေဟ်ကဏ္ဍ ကုမုက်လိက်",
+       "tog-ccmeonemails": "ပြၚ်ကုအဲ ဆာဲကဝ်ပဳဒဒှ်အီမေလ် အဲမပြၚ်ဏာစရၚ်ညးလွပ်တၞဟ်တအ်",
+       "tog-diffonly": "လ္ပထ္ၜး မုက်လိက် မာတိကာ သၟဝ် မတၞဟ်ခြာ",
        "tog-showhiddencats": "ထ္ၜးကဆံၚ်မပၞုက်လဝ်",
        "tog-prefershttps": "လၟိုန်သုၚ်စောဲကေတ် လာၚ်မမၞုံဂီုကၠီု အခိၚ်မလုပ်လံက်အေန်",
        "underline-always": "လၟိုန်အခါ",
        "retrievedfrom": "ကလေင်သီကေတ်လဝ် နူ \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|မၞး ကလိဂွံ}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|မၞး ကလိဂွံ}} $1 နူ {{PLURAL:$3| မဒှ် ညးလွပ်တၞဟ်မွဲ|$3 ညးလွပ်ဂမၠိုင်}} ($2).",
+       "youhavenewmessagesmanyusers": "မၞး မၞုံ$1 မူ ညးလွဟ်ဗွဲမဂၠိုၚ် ($2)",
        "newmessageslinkplural": "{{PLURAL:$1|ပရိုင်မေတ်သုက် တၟိ|999=ပရိုင်မေတ်သုက်တၟိဂမၠိုင်}}",
        "newmessagesdifflinkplural": "လက္ကရဴအိုတ် {{PLURAL:$1|အပြံင်အလှာဲ|999=အပြံင်အလှာဲဂမၠိုင်}}",
+       "youhavenewmessagesmulti": "မၞး မၞုံကဵု ပိုဒ်ဂလာန် မေသုက်မတၟိ ပ္ဍဲ $1",
        "editsection": "ပလေဝ်ဒါန်",
        "editold": "ပလေဝ်ဒါန်",
        "viewsourceold": "ထ္ၜး တမ်ရိုဟ်",
        "confirmable-no": "ဟအှ်ေ",
        "thisisdeleted": "ဗဵု ဟွံသေၚ် ကလၚ်စွံ $1 ဟာ",
        "viewdeleted": "ဗဵု $1 ဟာ",
+       "restorelink": "{{PLURAL:$1|ဒါမပလီုမွဲ|$1 ဒါန်မပလီုဂမၠိုၚ်}}",
        "feedlinks": "တရိုပ်:",
+       "site-rss-feed": "$1 RSS feed",
        "site-atom-feed": "$1 ဒၞာဲ ဗလးပတိတ်",
+       "page-rss-feed": "\"$1\" RSS feed",
        "page-atom-feed": "\"$1\" ဒၞာဲ ဗလးပတိတ်",
        "red-link-title": "$1(မုက်လဝ်ဏအ် ဟွံပြာကတ်)",
+       "sort-descending": "လၟေၚ်မစှေ်ကၠုၚ်ဒၟံၚ်",
+       "sort-ascending": "လၟေၚ်မတိုန်ကၠုၚ်ဒၟံၚ်",
        "nstab-main": "မုက်လိက်",
        "nstab-user": "မုက်လိက် ညးလွပ်",
        "nstab-media": "မုက်လိက် မဳဒဳယာ",
        "nstab-help": "မုက်လိက် မရီုဗင်",
        "nstab-category": "ကဏ္ဍ",
        "mainpage-nstab": "မုက်လိက်တမ်",
+       "nosuchaction": "ဟွံမွဲကဵု ပွမမိက်မွဲမွဲ",
        "nosuchspecialpage": "မုက်လိက် တၟေင် ညံင်ရဴဏအ် ဟွံမဲ",
        "nospecialpagetext": "<strong>မၞး အာတ်မိက်လဝ် မုက်လိက်တၟေင် မဟွံမဲမွဲရ၊၊</strong>\n\nစရင် မုက်လိက်တၟေင် မနွံတအ်ဂှ် ဂွံဆဵုကေတ် ပ္ဍဲ [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "ဗၠေတ်",
+       "databaseerror-query": "သၟာန်: $1",
        "databaseerror-function": "ကမၠောန်: $1",
        "databaseerror-error": "ဗၠေတ်: $1",
+       "missingarticle-rev": "(ကလၚ်ဖျေံ#:$1)",
        "missingarticle-diff": "(တၞဟ်ခြာ: $1, $2)",
        "internalerror": "ဗၠေတ်အပ္ဍဲ",
        "internalerror_info": "ဗၠောတ်အပ္ဍဲ:$1",
+       "filecopyerror": "ဆာဲစၠောံ ဝှာၚ်  \"$1\" ဏာစရေၚ် \"$2\" ဟွံမာန်",
+       "filerenameerror": "ကလေၚ်ကဵုယၟုဝှာၚ် \"$1\" ဏာ \"$2\" ဟွံမာန်",
+       "filedeleteerror": "ပလီုကေတ်ဝှာၚ် \"$1\" ဟွံမာန်",
+       "directorycreateerror": "ခၞံကၠောန်ကေတ် လိက်အုပ်မစၞောန်ထ္ၜးဌာန်ဒၟံၚ်ကဵုယၟုမၞိဟ် \"$1\" ဟွံမာန်",
+       "directoryreadonlyerror": "အိက်အုပ်မစၞောန်ထ္ၜးဌာန်ဒၟံၚ်ကဵုယၟုမၞိဟ် \"$1\" ဂှ် ဆအယာံမာတ်- ဗှ်ဟေၚ်",
+       "directorynotreadableerror": "လိက်အုပ်မစၞောန်ထ္ၜးဌာန်ဒၟံၚ်ကဵုယၟုမၞိဟ် \"$1\" ဂှ် ဗှ်ကေတ်မာန်ဟွံသေၚ်.",
+       "filenotfound": "ဂၠာဲကေတ် ဝှာၚ် \"$1\" ဟွံမာန်",
+       "unexpected": "ၚုဟ်မး ဟွံစၟဳကေတ်: \"$1\"=\"$2\"",
+       "formerror": "ဗၠောတ်: ပတိုန်တၞးဗပေၚ်ဏအ် ဟွံမာန်.",
        "cannotdelete-title": "ပလီုကေတ်မုက်လိက်ဟွံဂွံ$1",
        "badtitle": "က္ဍိုပ်လိက် ဟွံခိုဟ်",
        "badtitletext": "မုက်လိက် မအာတ်မိက်လဝ်ဂှ် ဟွံသၟဟ်အစောမ်၊ သၠာတ်သၠးဒၟံင် ဟွံသေင်မ္ဂး ဆက်စၠောအ်လေန်လဝ် ကုအရေဝ်ဘာသာနာနာ ဟွံသေင်မ္ဂး က္ဍိုပ်လိက် အပ္ဍဲအကြာဝဳကဳ ဟွံဒးရ၊၊\nဟိုတ်နူ စကာလဝ် မလိက် နဒဒှ်က္ဍိုပ်လိက်ဟွံဂွံ ပါလုပ်ဒၟံင် မွဲမ ဟွံသေင်မ္ဂး မဂၠိုင် ကုမ လေဝ် ဒှ်မာန်ရ၊၊",
+       "title-invalid-characters": "က္ဍိုပ်လိက် မုက်လိက်မအာတ်လဝ်အခေါၚ် သၚ်္ကေတ ဟွံစှ်ေသၞောတ် မပါလုပ်: \"$1\"",
        "viewsource": "ထ္ၜး တမ်ရိုဟ်",
        "viewsource-title": "ဗဵု တမ်ရိုဟ် သွက် $1",
        "actionthrottled": "ပွပတ်ကအ်",
        "viewsourcetext": "မၞး ဗဵု ကေုာံ စၠောအ်ကပ်ပဳကေတ် တမ်ရိုဟ် မုက်လိက်ဏအ် ဂွံရ၊၊",
+       "namespaceprotected": "မၞး ဟွဲမွဲကဵု အခေါၚ်အရာ သ္ဂောအ်ပလေဝ်ဒါန် မုက်လိက် ပ္ဍဲ<strong>$1</strong> ဒၞဲါယၟု.",
+       "customcssprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် CSS ဏအ် မုဟိုတ်တှ်ေ ဍေံတအ်ဂှ် မၞုံဒၟံၚ်ကဵု မချိၚ်ထ္ၜတ်ပရၚ်ပူဂိုလ်ညးလွဟ်တၞဟ်တအ်ရ.",
+       "customjsonprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် JSON ဏအ် မုဟိုတ်တှ်ေ ဍေံတအ်ဂှ် မၞုံဒၟံၚ်ကဵု မချိၚ်ထ္ၜတ်ပရၚ်ပူဂိုလ်ညးလွဟ်တၞဟ်တအ်ရ.",
+       "customjsprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် JavaScript ဏအ် မုဟိုတ်တှ်ေ ဍေံတအ်ဂှ် မၞုံဒၟံၚ်ကဵု မချိၚ်ထ္ၜတ်ပရၚ်ပူဂိုလ်ညးလွဟ်တၞဟ်တအ်ရ.",
+       "sitecssprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် CSS ဏအ် မုဟိုတ်တှ်ေ ဇီုကပိုက်အာကဵု ကၟုဲတအ်သီုဖအိုတ်မာန်ဏောၚ်.",
+       "sitejsonprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် JSON ဏအ် မုဟိုတ်တှ်ေ ဇီုကပိုက်အာကဵု ကၟုဲတအ်သီုဖအိုတ်မာန်ဏောၚ်.",
+       "sitejsprotected": "မၞး ဟွံမွဲကဵု အခေါၚ်အရာ သ္ဂောအ် ပလေဝ်ဒါန် မုက်လိက် JavaScript ဏအ် မုဟိုတ်တှ်ေ ဇီုကပိုက်အာကဵု ကၟုဲတအ်သီုဖအိုတ်မာန်ဏောၚ်.",
        "mycustomcssprotected": "မၞးဟွံမွဲကဵုအခေါၚ်ဂွံဒါန်မုက်လိက်CSSဏအ်.",
        "mycustomjsonprotected": "မၞးဟွံမွဲကဵုအခေါၚ်ဂွံဒါန်မုက်လိက်JSONဏအ်",
        "mycustomjsprotected": "မၞးဟွံမွဲကဵုအခေါၚ်ဂွံဒါန်မုက်လိက်JavaScriptဏအ်.",
        "mypreferencesprotected": "မၞးဟွံမွဲကဵုအခေါၚ်ဂွံဒါန်ပၟိက်ဒးဂၞပ်မၞး.",
        "ns-specialprotected": "မုက်လိက်ဗွဲတၟေၚ်မဂပ်ဝ်ဒါန်ဟွံဂွံ.",
        "titleprotected": "က္ဍိုပ်လိက်ဏအ် ဒးဒုၚ်စဵုဒၞါနူမခၞံကၠောန်နကဵု[[User:$1|$1]].\nဟိုတ်မကဵုလဝ်တအ်တုန် <em>$2</em>.",
+       "filereadonlyerror": "ဟွံသၟဟ်အစောန် သ္ဂောံ ပြုပြေၚ် ဝှာၚ် \"$1\" မုဟိုတ်တှေ် ဝှာၚ်မဒုၚ်လျိုၚ် \" $2\" ဂှ် နွံပ္ဍဲ မဝ်ဒယ် ဆ-ဗှ်ဟေၚ်.\nညးကောပ်ကာဲသၞောတ် ပူဂိုလ်မကၟာတ်လတ် အရာဏအ် ကဵုကၠုၚ်တၚ်သောၚ်ကလး: \"$3\"",
        "invalidtitle": "က္ဍိုပ်လိက်မဟွံစှေ်ကဵုဗဗွဲဓရ်",
        "invalidtitle-knownnamespace": "က္ဍိုပ်လိက် မဟွံစှ်ေကဵုဗဗွဲဓရ် နကဵု ဒၞဲါယၟု \"$2\" ကေုာံ လိက် \"$3\"",
        "invalidtitle-unknownnamespace": "က္ဍိုပ်လိက် မဟွံမွဲကဵုဗဗွဲဓရ် ကေုာံ မဂၞန်ဒၞဲါယၟု မတီကေတ်ဟွံမာန် \"$1\"  ကေုာံ လိက်\"$2\"",
        "filereuploadsummary": "ဝှာၚ် ပြံၚ်ဂမၠိုၚ်:",
        "filestatus": "ကဆံၚ် တၠမူ:",
        "filesource": "တမ်ရိုဟ်:",
+       "filename-tooshort": "ယၟုဝှာၚ်ဏအ်ဂှ် ဂၠိကွေအ်ကွေအ်.",
        "savefile": "ဂိုၚ်သိပ် ဝှာၚ်",
        "upload-source": "တမ်ရိုဟ် ဝှာၚ်",
        "sourcefilename": "တမ်ရိုဟ် ယၟုဝှာၚ်:",
        "statistics-pages": "မုက်လိက်ဂမၠိုင်",
        "statistics-files": "ပတိုန်ပၠောပ် ဝှာင်မဂၠိုၚ်",
        "statistics-users": " ညးလွပ် မစၟတ်သမ္တီလဝ်တုဲဂမၠိုင်",
+       "statistics-users-active": "ညးလွပ်မချဳဒရာၚ်",
        "pageswithprop-submit": "အာ",
        "double-redirect-fixer": "ညးမပလေဝ် အရာမကလေင်စၞောန်ပညုင်",
        "brokenredirects-edit": "ပလေဝ်ဒါန်",
        "nlinks": "$1 {{PLURAL:$1|link|links}}",
        "nmembers": "$1 {{PLURAL:$1|ကောန်ဂကောံ|ကောန်ဂကောံဂမၠိုင်}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|ညးလုပ်ဂကောံ|ညးလုပ်ဂကောံဂမၠိုၚ်}}",
+       "unusedcategories": "ကဏ္ဍ မဟွံသုၚ်စောဲလဝ်ဂမၠိုၚ်",
+       "unusedimages": "ဝှာၚ် မဟွံသုၚ်လဝ်တအ်",
+       "wantedcategories": "ကဏ္ဍ မနွံပၟိက်လဝ်တအ်",
        "prefixindex": "မုက်လိက် သီုဖအိုတ် နကဵု prefix",
        "prefixindex-submit": "ထ္ၜး",
        "shortpages": "မုက်လိက် မဂၠိဂမၠိုၚ်",
        "listgrouprights-addgroup-all": "ထပ် ဂကောံဂမၠိုၚ် သီုဖအိုတ်",
        "listgrouprights-removegroup-all": "ပတိတ် ဂကောံသီုဖအိုတ်",
        "listgrouprights-namespaceprotection-namespace": "ဒၞာဲယၟု",
+       "listgrants-rights": "အခေါၚ်အရာဂမၠိုၚ်",
        "emailuser": "ပလံင် အဳမေလ် ကုညးလွပ်ဏအ်",
+       "emailuser-title-target": "ပလံၚ်လိက်ဣဏံ{{GENDER:$1|ညးလွပ်}}",
+       "emailuser-title-notarget": "ညးလွပ် အဳမေလ်",
        "noemailtitle": "ဌာန်အဳမေလ်ဟွံမွဲ",
        "emailusername": "ယၟုညးလွပ်:",
        "emailusernamesubmit": "ဗပေင်",
        "emailsubject": "ပရူပရာ:",
        "emailmessage": "မေတ်သုက်:",
        "emailsend": "ပလံင်",
+       "emailsent": "အဳမေလ် ပြၚ်တုဲ",
+       "emailsenttext": "ပိုဒ်လိက်အဳမေလ် မၞး မဒးပြၚ်ဏာတုဲယျ",
        "usermessage-editor": "သၞောတ် ပရိုင်မေတ်သေန်ဂျာ",
        "watchlist": "စရင်မမင်မဲ",
        "mywatchlist": "စရင်မမင်မဲ",
        "watchlistfor2": "သွက် $1 $2",
+       "watchnologin": "ဟွံ လုပ်လံက်အေန်လဝ်",
+       "addwatch": "စုတ် စရၚ် စရၚ်မမၚ်မွဲ",
+       "addedwatchtext-short": "မုက်လိက်\"$1\" ဒးဒုၚ်စုတ်လဝ် စရေၚ် စရၚ်မမၚ်မွဲမၞးရ.",
+       "removewatch": "ပတိတ်  နူ စရၚ်မမၚ်မွဲ",
+       "removedwatchtext-short": "မုက်လိက်\"$1\" ဒးဒုၚ်ပတိတ်နူ စရၚ် မၞ မမၚ်မွဲရ.",
        "watch": "မင်မဲ",
        "watchthispage": "မင်မဲ မုက်လိက်ဏအ်",
        "unwatch": "ဟွံမင်မဲ",
        "watchlist-hide": "ဗဒန်",
        "watchlist-submit": "ထ္ၜး",
        "wlshowhideminor": "မပလေဝ်ဒါန်လဝ် ညိည",
+       "wlshowhidebots": "ဗောတ်ဂမၠိုင်",
        "wlshowhideliu": " ညးလွပ် မစၟတ်သမ္တီလဝ်တုဲဂမၠိုင်",
        "wlshowhideanons": "ညးလွပ် ဟွံဗမံက်ယၟု",
        "wlshowhidecategorization": "မုက်လိက် မသ္ပကၠောန်ကဏ္ဍ",
        "enotif_subject_changed": "{{SITENAME}} မုက်လိက် $1 ဒးဒုၚ် {{GENDER:$2|ပြံၚ်လဝ်}} နကဵု $2",
        "enotif_body_intro_deleted": "The {{SITENAME}} မုက်လိက် $1 ဒးဒုၚ် {{GENDER:$2|ပလီုလဝ်}} ပ္ဍဲ $PAGEEDITDATE နကဵု $2, see $3.",
        "enotif_lastdiff": "သ္ဂောအ်ဗဵုကေတ်ပြံၚ်လှာဲဏအ်, ရံၚ်ကေတ်$1",
+       "enotif_anon_editor": "ညးလွပ် ဟွံဗမံက်ယၟု $1",
        "enotif_minoredit": "ဣဏအ်ဂှ် ဒှ်အရာ မပလေဝ်ဒါန် ညိည",
        "deletepage": "မုက်မပလီု",
        "confirm": "သ္ပဒတန်",
        "actioncomplete": "ကမၠောန်အာစိုပ်ဒတုဲ",
        "actionfailed": "ကမၠောန် ဟုံဗြီု",
        "dellogpage": "တင်စၟတ်သမ္တီ အရာမဇိုတ်ပလီုလဝ်",
+       "logentry-create-create": "$1 {{GENDER:$2|ခၞံကၠောန်လဝ်}} မုက်လိက် $3",
        "deletecomment": "ဟိုတ်:",
        "deleteotherreason": "တၞဟ်/မထပ် ဟိုတ်:",
        "deletereasonotherlist": "ဟိုတ် တၞဟ်",
        "rollbacklink": "ကလေင်",
        "rollbacklinkcount": "ကလေင်အာ $1 {{PLURAL:$1|ပလေဝ်ဒါန်|ပလေဝ်ဒါန်ဂမၠိုင်}}",
+       "changecontentmodel-legend": "ပြံၚ် မဝ်ဒေလ် မာတိက",
        "changecontentmodel-title-label": "က္ဍိုပ်မုက်လိက်",
        "changecontentmodel-model-label": " မဝ်ဒေလ် မာတိကမတၟိ",
        "changecontentmodel-reason-label": "ဟိုတ်:",
        "changecontentmodel-submit": "ပြံင်လှာဲ",
+       "logentry-contentmodel-change-revertlink": "ကလေင်ပြံင်",
+       "logentry-contentmodel-change-revert": "ကလေင်ပြံင်",
        "protectlogpage": "တင်စၟတ်သမ္တီ အရာမစဵုဒၞာဂမၠိုင်",
        "protectedarticle": "မစဵုဒၞာလဝ် \"[[$1]]\"",
        "modifiedarticleprotection": "ပြံင်လှာဲ ကဆံင်မစဵုဒၞာ သွက် မုက်လိက် \"[[$1]]\"",
+       "prot_1movedto2": "[[$1]] ပြံၚ်ဏာ စရေၚ် [[$2]]",
        "protectcomment": "ဟိုတ်:",
        "protectexpiry": "အိုတ်အာ:",
        "protect-default": "ကဵုအခေါင် ညးလွပ် သီုဖအိုတ်",
        "restriction-move": "ပြံင်ပဆုဲ",
        "restriction-create": "ခၞံကၠောန်",
        "restriction-upload": "ပတိုန်",
+       "undeletebtn": "ကလေၚ်စွံ",
+       "undeletelink": "ဗဗဵု/ကလေၚ်စွံ",
+       "undeleteviewlink": "ဗဗဵု",
+       "undeleteinvert": "ဂတးထောအ် အရာမရုဲစှ်",
        "undeletecomment": "ဟိုတ်:",
+       "undelete-search-title": "ဂၠာဲ မုက်လိက်မပလီုလဝ်တအ်",
+       "undelete-search-box": "ဂၠာဲ မုက်လိက်မပလီုလဝ်တအ်",
        "undelete-search-submit": "ဂၠာဲ",
        "undelete-show-file-submit": "ယွံ",
        "namespace": "ဒၞာဲယၟု",
        "whatlinkshere-hideimages": "$1 ဝှာင်အဆက်အစပ်",
        "whatlinkshere-filters": "ဖဍိုဟ်",
        "whatlinkshere-submit": "အာ",
+       "block": "ညးလွပ် မဒးကၟာတ်",
+       "unblock": "ညးလွပ် ဟွံဒးကၟာတ်",
        "ipbreason": "ဟိုတ်:",
        "ipbsubmit": "ကၟာတ်ထောံ ညးလွပ်ဏအ်",
        "ipbother": "အခိၚ် တၞဟ်:",
        "proxyblocker": "ညးမကၟာတ်စဵု proxy",
        "move-page": "ပဆုဲ $1",
        "move-page-legend": "ပဆုဲမုက်လိက်",
+       "movenotallowed": "မၞး အခေါၚ်အရာဟွံမွဲ သွက်ဂွံပဆုဲမုက်လိက်တအ်.",
+       "movenotallowedfile": "မၞး အခေါၚ်အရာ ဟွံမွဲ သ္ဂောအ်ပဆုဲဝှာၚ်တအ်",
+       "cant-move-user-page": "မၞး အခေါၚ်အရာ ဟွံမွဲ သ္ဂောံပဆုဲမုက်လိက် ညးလွပ် (မဒှ်အဝဲနူ သာပ်မုက်လိက်တအ်).",
+       "cant-move-category-page": "မၞး အခေါၚ်အရာဟွံမွဲ သွက်ဂွံပဆုဲ ကဏ္ဍမုက်လိက်တအ်.",
+       "cant-move-to-category-page": "မၞး အခေါၚ်အရာ ဟွံမွဲ သ္ဂောံပဆုဲမုက်လိက် စရၚ်မုက်လိက်မကဏ္ဍ",
+       "cant-move-subpages": "မၞး အခေါၚ်အရာဟွံမွဲ သွက်ဂွံပဆုဲသာပ်မုက်လိက်တအ်.",
        "newtitle": "က္ဍိုပ်လိက်တၟိ:",
        "movepagebtn": "ပဆုဲမုက်လိက်",
        "pagemovedsub": "ပဆုဲ အံၚ်ဇၞးတုဲဒှ်",
        "movelogpage": "ပြံင်ပဆုဲ တင်စၟတ်သမ္တီ",
        "movereason": "ဟိုတ်:",
        "revertmove": "ကလေင်ပြံင်",
+       "delete_and_move_confirm": "ယွံ, ပလီုမုက်လိက်",
        "immobile-source-page": "မုက်လိက်ဏအ်ဂှ် ပဆုဲဟွံဂွံ.",
        "export": "ပတိတ်တြး မုက်လိက်တအ်",
        "export-submit": "ပတိတ်",
        "allmessagesname": "ယၟု",
        "allmessagesdefault": "လိက်ဂလာန်ပိုဒ်မဒတန်",
        "allmessages-filter-legend": "ဖဍိုဟ်",
+       "allmessages-filter-unmodified": "ဟွံပြုပြောၚ်လဝ်",
        "allmessages-filter-all": " သီုဖအိုတ်",
+       "allmessages-filter-modified": "ပြုပြေၚ်လဝ်",
        "allmessages-language": "အရေဝ်ဘာသာ :",
        "allmessages-filter-submit": "အာ",
+       "allmessages-filter-translate": "မတြာဲ",
        "thumbnail-more": "ဇၞော်ပတိုန်",
        "import": "ပလုပ် မုက်လိက်ဂမၠိုၚ်",
        "importinterwiki": "ပလုပ် နူ ဝဳကဳ တၞဟ်",
        "exif-pixelydimension": "သၠုၚ် ဗီုရုပ်",
        "exif-datetimeoriginal": "စၟတ်တ္ၚဲ ကေုာံ အခိင် မခၞံဗဒှ် ဒါတာ",
        "exif-datetimedigitized": "စၟတ်တ္ၚဲ ကေုာံ အခိင် မပြံင်လှာဲ နကဵုဒဳဂျဳတေဝ်",
+       "exif-headline": "က္ဍိုပ်လိက်",
+       "exif-credit": "မကဵုစရာဲ/ ညးဖန်ကၠောန်",
+       "exif-source": "တမ်ရိုဟ်",
+       "exif-writer": "ညးချူ",
        "exif-languagecode": "အရေဝ်ဘာသာ",
        "exif-iimversion": "မူ IIM",
        "exif-iimcategory": "ကဏ္ဍ",
+       "exif-datetimereleased": "တြးပတိတ်လဝ်",
        "exif-label": "ကရံက်",
+       "exif-unknowndate": "စၟတ်တ္ၚဲ တီကေတ်ဟွံမာန်",
        "exif-orientation-1": "ဓမ္မတာ",
+       "exif-orientation-3": "ဗ္ဂေတ်ကေတ် 180°",
+       "exif-orientation-6": "ဗ္ဂေတ်ကေတ် 90° CCW",
+       "exif-orientation-8": "ဗ္ဂေတ်ကေတ် 90° CW",
+       "exif-exposureprogram-1": "ဗွဲတဲ",
+       "exif-meteringmode-0": "တီကေတ်ဟွံမာန်",
+       "exif-meteringmode-3": "ပချဳဇိုၚ်တဲ",
        "exif-meteringmode-255": "တၞဟ်",
        "exif-lightsource-0": "တီကေတ်ဟွံမာန်",
+       "exif-focalplaneresolutionunit-2": "ၝောံတဲဂမၠိုၚ်",
+       "exif-scenecapturetype-1": "လ္ပာ်အနာံ",
+       "exif-scenecapturetype-2": "လ္ပာ်ပစူ",
        "exif-gaincontrol-0": "ဟွံသေၚ်",
        "exif-contrast-0": "ဓမ္မတာ",
+       "exif-contrast-1": "ဍိုန်ၜတ်",
+       "exif-contrast-2": "ကြံၚ်မ္ၚိုဟ်",
        "exif-saturation-0": "ဓမ္မတာ",
        "exif-sharpness-0": "ဓမ္မတာ",
+       "exif-sharpness-1": "ဍိုန်ၜတ်",
+       "exif-sharpness-2": "ကြံၚ်မ္ၚိုဟ်",
        "exif-subjectdistancerange-0": "တီကေတ်ဟွံမာန်",
+       "exif-gpsdop-excellent": "အိုတ်အစောန်$1",
+       "exif-gpsdop-good": "ခိုဟ် ($1)",
+       "exif-gpsdop-moderate": "တဲအဒေါဝ် ($1)",
+       "exif-gpsdop-fair": "ဓရ်ယာ($1)",
+       "exif-gpsdop-poor": "အောန်($1)",
+       "exif-objectcycle-a": "နူဂယး ဟေၚ်",
+       "exif-objectcycle-p": "သဝ်တ္ၚဲ ဟေၚ်",
+       "exif-objectcycle-b": "သီု နူဂယး ကဵု သဝ်တ္ၚဲ",
+       "exif-dc-date": "ပလီု(တအ်)",
        "exif-dc-publisher": "ညးတြးပတိတ်",
        "exif-dc-rights": "အခေါၚ်အရာဂမၠိုၚ်",
+       "exif-iimcategory-edu": "ပရေၚ်ပညာ",
+       "exif-iimcategory-evn": "ပရေၚ်ပွဳပွိုၚ်သဘာဝ",
+       "exif-iimcategory-hth": "ပရေၚ်ထတ်ယုတ်",
+       "exif-iimcategory-hum": "ဒတုဲဖိုဟ် မၞိဟ်",
+       "exif-iimcategory-lab": "သၟာကမၠောန်",
+       "exif-iimcategory-pol": "ပရေၚ်ဍုၚ်ကွာန်",
+       "exif-iimcategory-rel": "ဘာသာ ကေုာံ ဓရ်ပတှေ်",
+       "exif-iimcategory-sci": "သိပ္ပံ ကေုာံ နဲကဲပညာ",
+       "exif-iimcategory-soi": "ပရူပရာ ပရေၚ်မၞိဟ်",
+       "exif-iimcategory-spo": "ပရေၚ်ချဳဒရာၚ်ဂမၠိုၚ်",
+       "exif-iimcategory-war": "ပၞာန်, ပဋိပက္ခ ကေုာံ ကလာ်ကမဵု",
+       "exif-iimcategory-wea": "ဥတုရာသီ",
+       "exif-urgency-normal": "သာမည ($1)",
+       "exif-urgency-low": "သဝ် ($1)",
+       "exif-urgency-high": "သၠုၚ် ($1)",
        "namespacesall": "သီုဖအိုတ်",
        "monthsall": "သီုဖအိုတ်",
        "confirm_purge_button": "OK",
        "redirect-page": "မုက်လိက် အာင်ဒဳ",
        "redirect-revision": "မုက်လိက် မူမပလေဝ်ဒါန်",
        "redirect-file": "ယၟုဝှာင်",
+       "fileduplicatesearch-filename": "ယၟုဝှာင်:",
+       "fileduplicatesearch-submit": "ဂၠာဲ",
        "specialpages": "မုက်လိက် တၟေင်",
+       "specialpages-note-top": "ဒဏ္ဍာရဳ",
        "specialpages-group-users": "ညးလွပ်တအ် ကေုာံ အခေါၚ်အရာဂမၠိုၚ်",
+       "specialpages-group-pages": "စရၚ်မုက်လိက်ဂမၠိုၚ်",
+       "specialpages-group-pagetools": "ကြိယာမုက်လိက်",
+       "specialpages-group-wiki": "စၟတ်တ္ၚဲ ကေုာံ ကြိယာဂမၠိုၚ်",
+       "blankpage": "မုက်လိက် ပလး",
        "tag-filter": "[[Special:Tags|Tag]] ဝှာင်ဂမၠိုင်:",
+       "tag-filter-submit": "ဖဍိုဟ်",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-mw-replace": "ကလေၚ်ဖျေံဒၞာဲ",
+       "tag-mw-undo": "ဟွံပ",
+       "tags-source-header": "တမ်ရိုဟ်",
+       "tags-active-header": "မချဳဓရာင်",
+       "tags-actions-header": "ပွဂမၠိုၚ်",
        "tags-active-yes": "ယွံ",
        "tags-active-no": "ဟအှ်ေ",
+       "tags-edit": "ပလေဝ်ဒါန်",
+       "tags-delete": "ပလီု",
        "tags-hitcount": "$1 {{PLURAL:$1|ပြံင်လှာဲ|ပြံင်လှာဲဂမၠိုင်}}",
+       "tags-create-reason": "ဟိုတ်:",
+       "tags-create-submit": "ခၞံကၠောန်",
        "tags-delete-reason": "ဟိုတ်:",
+       "tags-activate-reason": "ဟိုတ်:",
        "tags-deactivate-reason": "ဟိုတ်:",
+       "tags-edit-reason": "ဟိုတ်:",
+       "compare-page1": "မုက်လိက် 1",
+       "compare-page2": "မုက်လိက် 2",
+       "htmlform-submit": "ဗပေင်",
+       "htmlform-selectorother-other": "တၞဟ်",
+       "htmlform-no": "ဟအှ်ေ",
+       "htmlform-yes": "ယွံ",
+       "htmlform-cloner-create": "စုတ် ပပဵု",
+       "htmlform-cloner-delete": "ပတိတ်",
+       "htmlform-date-placeholder": "YYYY-MM-DD",
+       "htmlform-time-placeholder": "HH:MM:SS",
+       "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
        "logentry-delete-delete": "$3 မုက်လိက်ဂှ် $1 {{GENDER:$2|ပလီုထောအ်လဝ်ရ}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|ကလေင်ပ္တန်}} မုက်လိက် $3 ($4)",
        "logentry-delete-revision": "ပ္ဍဲမုက်လိက် $3: $4 ဂှ် $1 {{GENDER:$2|ပြံင်လှာဲလဝ်}} ဗီုပြင် မုက်လိက် {{PLURAL:$5|မူလိက်မဒါန်လဝ် မွဲ|$5 မူလိက်မဒါန်လဝ်ဂမၠိုင်}}",
        "logentry-newusers-autocreate": "အကံက် ညးလွပ် $1 ဂှ် {{GENDER:$2|ခၞံကၠောန်လဝ်}} အလဵုအလဵုရ၊၊",
        "logentry-upload-upload": "$1  {{GENDER:$2|ပတိုန်ပၠောပ်လဝ်}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ပလံင်ပၠောပ်လဝ်}} မူလိက် $3ဏအ် တၟိမွဲ",
+       "rightsnone": "(ဟွံမဲ)",
+       "feedback-back": "ကလေင်",
+       "feedback-cancel": "တးပဲါ",
+       "feedback-close": "တုဲဒှ်",
        "feedback-message": "မေတ်သုက်:",
        "feedback-subject": "ပရူပရာ:",
        "feedback-submit": "ဗပေင်",
        "feedback-thanks-title": "တင်ဂုန်ရအဴ!",
        "searchsuggest-search": "ဂၠာဲ {{SITENAME}}",
+       "duration-seconds": "$1{{PLURAL:$1|စက္က|စက္ကဂမၠိုၚ်}}",
+       "duration-minutes": "$1{{PLURAL:$1|ဗဳဇနာ|ဗဳဇနာဂမၠိုၚ်}}",
+       "duration-hours": "$1{{PLURAL:$1|နာဍဳ|နာဍဳဂမၠိုၚ်}}",
        "duration-days": "$1 {{PLURAL:$1|တ္ၚဲ|တ္ၚဲဂမၠိုင်}}",
        "limitreport-cputime-value": "$1{{PLURAL:$1|စက္က|စက္ကဂမၠိုၚ်}}",
        "expand_templates_output": "လဂွံ",
        "expand_templates_ok": "OK",
        "expand_templates_preview": "ကလေၚ်ရံၚ်",
+       "pagelanguage": "သၠာဲ အရေဝ်ဘာသာ မုက်လိက်",
+       "pagelang-name": "မုက်လိက်",
+       "pagelang-language": "အရေဝ်ဘာသာ",
+       "pagelang-select-lang": "ရုဲဘာသာဇကုညိ",
+       "pagelang-reason": "ဟိုတ်",
+       "pagelang-submit": "ဗပေင်",
+       "pagelang-nonexistent-page": "မုက်လိက်ဏအ် $1 ဟွံပြာကတ်",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (enabled)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>disabled</strong>)",
+       "mediastatistics-table-mimetype": "ဂကူ MIME",
+       "mediastatistics-table-count": "လၟိုဟ် ဝှာၚ်တအ်",
+       "mediastatistics-header-unknown": "တီကေတ်ဟွံမာန်",
+       "mediastatistics-header-audio": "ရမျှာၚ်",
+       "mediastatistics-header-office": "ရုၚ်",
+       "mediastatistics-header-total": "ဝှာၚ် သီုဖအိုတ်",
        "special-characters-group-ipa": "IPA",
+       "special-characters-group-thai": "ထာဲ",
+       "special-characters-group-lao": "လော",
        "special-characters-group-khmer": "ခမာ",
+       "mw-widgets-categoryselector-add-category-placeholder": "ထပ် ကဏ္ဍ...",
+       "date-range-from": "နူ စၟတ်တ္ၚဲ:",
+       "date-range-to": "စိုပ် စၟတ်တ္ၚဲ:",
        "randomrootpage": "တမ် မုက်လိက် ဇဟောမ်",
        "log-action-filter-all": " သီုဖအိုတ်",
+       "log-action-filter-block-block": "ကၟာတ်လဒဵု",
+       "log-action-filter-block-unblock": "ဟွံကၟာတ်",
        "pagedata-title": "တၚ်နၚ် မုက်လိက်",
        "passwordpolicies-group": "ဂကောံ",
        "passwordpolicies-policies": "မူဝါဒဂမၠိုၚ်",
index 9712ebf..01de69f 100644 (file)
        "newpages": "စာမျက်နှာအသစ်",
        "newpages-submit": "ပြသရန်",
        "newpages-username": "မှတ်​ပုံ​တင်​အ​မည်:",
-       "ancientpages": "အဟောင်းဆုံးစာမျက်နှာ",
+       "ancientpages": "အဟောင်းဆုံး စာမျက်နှာများ",
        "move": "ရွှေ့ရန်",
        "movethispage": "ဤစာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "unusedimagestext": "အောက်ပါဖိုင်များသည် မည်သည့်စာမျက်နှာတွင်မှ သုံးစွဲထားခြင်း မရှိပါ။\nအခြားသော ဝက်ဘ်ဆိုဒ်များမှနေ၍ ဖိုင်တစ်ခုခုသို့ တိုက်ရိုက် URL ဖြင့် တိုက်ရိုက်ချိတ်ဆက်ထားခြင်း ရှိနေနိုင်ပြီး သုံးစွဲနေခြင်းမရှိသော်လည်း ဤနေရာတွင် ဖော်ပြထားနိုင်ကြောင်း ကျေးဇူးပြု၍ မှတ်သားပါ။",
index f0a46cd..c238105 100644 (file)
        "confirm-unwatch-top": "Deze pagina verwijderen uit uw volglijst?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Bewerkingen op deze pagina ongedaan maken?",
+       "confirm-mcrrestore-title": "Een versie terugplaatsen",
        "confirm-mcrundo-title": "Een wijziging ongedaan maken",
        "mcrundofailed": "Ongedaan maken mislukt",
        "mcrundo-missingparam": "Er ontbreken nodige parameters in het verzoek.",
index 82617d8..bf8fcde 100644 (file)
        "spam_blanking": "Wszystkie wersje zawierały odnośniki do $1. Czyszczenie strony.",
        "spam_deleting": "Wszystkie wersje zawierały linki do $1, usuwam.",
        "simpleantispam-label": "Filtr antyspamowy.\n<strong>Nie</strong> wpisuj tu nic!",
-       "pageinfo-title": "Informacje o „$1”",
+       "pageinfo-title": "Informacje o stronie „$1”",
        "pageinfo-not-current": "Niestety, te informacje nie są dostępne dla starych wersji stron.",
        "pageinfo-header-basic": "Podstawowe informacje",
        "pageinfo-header-edits": "Historia edycji",
        "confirm-unwatch-top": "Usunąć tę stronę z listy obserwowanych?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Wycofać edycje tej strony?",
+       "confirm-mcrrestore-title": "Odtwórz wersję",
        "confirm-mcrundo-title": "Cofnij zmianę",
        "mcrundofailed": "Cofnięcie nie powiodło się",
        "mcrundo-missingparam": "W żądaniu nie podano wymaganych parametrów.",
        "mcrundo-changed": "Strona została zmodyfikowana w czasie w którym {{GRAMMAR:|przeglądałeś|przeglądałaś}} różnicę. Sprawdź nową zmianę.",
+       "mcrundo-parse-failed": "Parsowanie nowej nie powiodło się: $1",
        "percent": "$1%",
        "quotation-marks": "„$1”",
        "imgmultipageprev": "← poprzednia strona",
index 5e2ebc4..6fc3143 100644 (file)
        "confirm-unwatch-top": "Remover esta página das páginas vigiadas?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Reverter edições nesta página?",
+       "confirm-mcrrestore-title": "Restaurar uma revisão",
        "confirm-mcrundo-title": "Desfazer uma mudança",
        "mcrundofailed": "A reversão falhou",
        "mcrundo-missingparam": "Faltam parâmetros obrigatórios no pedido.",
        "mcrundo-changed": "Esta página foi alterada desde que começou a ver as diferenças. Reveja a nova mudança, por favor.",
+       "mcrundo-parse-failed": "Falha ao analisar a nova revisão: $1",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
index 4d72d13..9b8fa98 100644 (file)
        "confirm-unwatch-top": "Remover esta página da lista de páginas vigiadas?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Reverter as edições desta página?",
+       "confirm-mcrrestore-title": "Restaurar uma revisão",
        "confirm-mcrundo-title": "Desfazer uma mudança",
        "mcrundofailed": "A reversão falhou",
        "mcrundo-missingparam": "Faltam parâmetros obrigatórios no pedido.",
        "mcrundo-changed": "Esta página foi alterada desde que começou a ver as diferenças. Reveja a nova mudança, por favor.",
+       "mcrundo-parse-failed": "Falha na análise sintática da nova revisão: $1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← página anterior",
        "imgmultipagenext": "página seguinte →",
index d9b300f..803e37a 100644 (file)
        "right-editcontentmodel": "Cange 'u modelle de condenute de 'na pàgene",
        "right-editinterface": "Cange l'inderfacce utende",
        "right-editusercss": "Cange 'u CSS de l'otre utinde",
+       "right-edituserjson": "Cange 'u JSON de l'otre utinde",
        "right-edituserjs": "Cange 'u JS de l'otre utinde",
        "right-editmyusercss": "Cange le file tune de CSS",
+       "right-editmyuserjson": "Cange le file tune de JSON",
        "right-editmyuserjs": "Cange le file tune de JavaScript",
        "right-viewmywatchlist": "'Ndruche le pàggene condrollate tune",
        "right-editmywatchlist": "Cange le pàggene condrollate tune. Vide bbuene ca certe aziune vonne a aggiungere pàggene pure ca non ge stonne le deritte.",
index 3f8abdf..77524a4 100644 (file)
@@ -16,7 +16,8 @@
                        "Pippinu",
                        "Macofe",
                        "S4b1nuz E.656",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Vlad5250"
                ]
        },
        "tog-underline": "Suttalìnia li lijami:",
        "right-editcontentmodel": "Canciari lu mudellu di cuntinutu di na pàggina",
        "right-editinterface": "Canciari la ntirfaccia utenti",
        "right-editusercss": "Canciari li file CSS di l'àutri utenti",
+       "right-edituserjson": "Canciari li file JSON di l'àutri utenti",
        "right-edituserjs": "Canciari li file JavaScript di l'àutri utenti",
        "right-editmyusercss": "Canciari li file CSS dû propiu utenti",
+       "right-editmyuserjson": "Canciari li file JSON dû propiu utenti",
        "right-editmyuserjs": "Canciari li file JavaScript dû propiu utenti",
        "right-viewmywatchlist": "Taliari la propia lista taliata",
        "right-editmywatchlist": "Canciari la propia lista taliata. Nota chi certi azzioni ci ponnu agghiùnciri pàggini macari senza di stu drittu.",
index 3a3bd27..c560bee 100644 (file)
        "botpasswords-invalid-name": "Navedeno uporabniško ime ne vsebuje ločila za geslo bota (»$1«).",
        "botpasswords-not-exist": "Uporabnik »$1« nima gesla bota z imenom »$2«.",
        "botpasswords-needs-reset": "Geslo bota »$2« {{GENDER:$1|uporabnika|uporabnice}} »$1« mora biti ponastavljeno.",
+       "botpasswords-locked": "Ne morete se prijaviti z geslom bota, ker je vaš račun zaklenjen.",
        "resetpass_forbidden": "Gesla ne morete spremeniti",
        "resetpass_forbidden-reason": "Gesel nismo mogli spremeniti: $1",
        "resetpass-no-info": "Za neposreden dostop do te strani morate biti prijavljeni.",
        "right-editsemiprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-autoconfirmed}}«",
        "right-editcontentmodel": "Urejanje vsebinskega modela strani",
        "right-editinterface": "Urejanje uporabniškega vmesnika",
-       "right-editusercss": "Uredi CSS datotek drugih uporabnikov",
+       "right-editusercss": "Urejanje CSS datotek drugih uporabnikov",
        "right-edituserjson": "Urejanje JSON-datotek drugih uporabnikov",
-       "right-edituserjs": "Uredi JavaScript datotek drugih uporabnikov",
+       "right-edituserjs": "Urejanje JavaScript datotek drugih uporabnikov",
        "right-editsitecss": "Urejanje CSS spletišča",
        "right-editsitejson": "Urejanje JSON spletišča",
        "right-editsitejs": "Urejanje JavaScripta spletišča",
        "confirm-unwatch-top": "Odstranim stran z vašega spiska nadzorov?",
        "confirm-rollback-button": "V redu",
        "confirm-rollback-top": "Povrnemo urejanja te strani?",
+       "confirm-mcrrestore-title": "Obnovi redakcijo",
        "confirm-mcrundo-title": "Razveljavi spremembo",
        "mcrundofailed": "Razveljavitev ni uspela",
        "mcrundo-missingparam": "Pri zahtevi manjkajo zahtevani parametri.",
        "mcrundo-changed": "Stran je bila spremenjena, odkar ste si ogledali primerjavo. Prosimo, preglejte nove spremembe.",
+       "mcrundo-parse-failed": "Razčlenjevanje nove redakcije je spodletelo: $1",
        "percent": "$1&#160;%",
        "quotation-marks": "»$1«",
        "imgmultipageprev": "← prejšnja stran",
index 922a2d5..5a618f5 100644 (file)
        "scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
        "scarytranscludetoolong": "[URL адреса је предугачка]",
        "deletedwhileediting": "<strong>Упозорење</strong>: Ова страница је избрисана након што сте почели са уређивањем!",
-       "confirmrecreate": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник|Ð\9aоÑ\80иÑ\81ниÑ\86а}} [[User:$1|$1]] ([[User talk:$1|Ñ\80азговоÑ\80]]) Ñ\98е {{GENDER:$1|обÑ\80иÑ\81ао|обрисала}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: <em>$2</em>\nПотврдите да стварно желите да направите страницу.",
-       "confirmrecreate-noreason": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник|Ð\9aоÑ\80иÑ\81ниÑ\86а}} [[User:$1|$1]] ([[User talk:$1|Ñ\80азговоÑ\80]]) Ñ\98е {{GENDER:$1|обÑ\80иÑ\81ао|обрисала}} ову страницу након што сте почели да је уређујете. Потврдите да стварно желите да поново направите ову страницу.",
+       "confirmrecreate": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник|Ð\9aоÑ\80иÑ\81ниÑ\86а}} [[User:$1|$1]] ([[User talk:$1|Ñ\80азговоÑ\80]]) Ñ\98е {{GENDER:$1|избÑ\80иÑ\81ао|избрисала}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: <em>$2</em>\nПотврдите да стварно желите да направите страницу.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Ð\9aоÑ\80иÑ\81ник|Ð\9aоÑ\80иÑ\81ниÑ\86а}} [[User:$1|$1]] ([[User talk:$1|Ñ\80азговоÑ\80]]) Ñ\98е {{GENDER:$1|избÑ\80иÑ\81ао|избрисала}} ову страницу након што сте почели да је уређујете. Потврдите да стварно желите да поново направите ову страницу.",
        "recreate": "Поново направи",
        "unit-pixel": "п",
        "confirm-purge-title": "Освежи ову страницу",
        "confirm-unwatch-top": "Уклонити ову страницу са списка надгледања?",
        "confirm-rollback-button": "У реду",
        "confirm-rollback-top": "Врати измене на овој страници?",
+       "confirm-mcrrestore-title": "Враћање измене",
        "confirm-mcrundo-title": "Поништавање промене",
        "mcrundofailed": "Поништавање није успело",
        "mcrundo-missingparam": "Недостаје потребан параметар на захтеву.",
        "mcrundo-changed": "Страница је промењена док сте гледали разлику. Прегледајте нову промену.",
+       "mcrundo-parse-failed": "Рашчлањивање нових измена није успело: $1",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "htmlform-title-not-exists": "$1 не постоји.",
        "htmlform-user-not-exists": "<strong>$1</strong> не постоји.",
        "htmlform-user-not-valid": "<strong>$1</strong> није валидно корисничко име.",
-       "logentry-delete-delete": "$1 Ñ\98е {{GENDER:$2|обÑ\80иÑ\81ао|обрисала}} страницу $3",
-       "logentry-delete-delete_redir": "$1 Ñ\98е {{GENDER:$2|обÑ\80иÑ\81ао|обрисала}} преусмерење $3 преписивањем",
+       "logentry-delete-delete": "$1 Ñ\98е {{GENDER:$2|избÑ\80иÑ\81ао|избрисала}} страницу $3",
+       "logentry-delete-delete_redir": "$1 Ñ\98е {{GENDER:$2|избÑ\80иÑ\81ао|избрисала}} преусмерење $3 преписивањем",
        "logentry-delete-restore": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3 ($4)",
        "logentry-delete-restore-nocount": "$1 је {{GENDER:$2|вратио|вратила}} страницу $3",
        "restore-count-revisions": "{{PLURAL:$1|1 измена|$1 измене|$1 измена}}",
index d8139a7..38c7c23 100644 (file)
        "botpasswords-invalid-name": "Det angivna användarnamnet innehåller inte separatorn för botlösenord (\"$1\").",
        "botpasswords-not-exist": "Användaren \"$1\" har inte ett botlösenord som är \"$2\".",
        "botpasswords-needs-reset": "Botlösenordet för botnamnet \"$2\" till {{GENDER:$1|användaren}} \"$1\" måste återställas.",
+       "botpasswords-locked": "Du kan inte logga in med ett botlösenord eftersom ditt konto är låst.",
        "resetpass_forbidden": "Lösenord kan inte ändras",
        "resetpass_forbidden-reason": "Lösenorden kan inte ändras: $1",
        "resetpass-no-info": "Du måste vara inloggad för att komma åt den här sidan direkt.",
        "confirm-unwatch-top": "Ta bort denna sida från din bevakningslista?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Återställ redigeringar på denna sida?",
+       "confirm-mcrrestore-title": "Återställ en sidversion",
        "confirm-mcrundo-title": "Ångra en ändring",
        "mcrundofailed": "Misslyckades att ångra",
        "mcrundo-missingparam": "Nödvändiga parametrar saknas i begäran.",
        "mcrundo-changed": "Sidan har ändrats sedan du visade skillnaden. Granska den nya ändringen.",
+       "mcrundo-parse-failed": "Misslyckades att tolka den nya sidversionen: $1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← föregående sida",
        "imgmultipagenext": "nästa sida →",
index 18fab7c..5b1af67 100644 (file)
        "botpasswords-invalid-name": "Вказане ім'я користувача не містить роздільник для пароля бота («$1»).",
        "botpasswords-not-exist": "У користувача «$1» нема пароля для бота «$2».",
        "botpasswords-needs-reset": "Пароль бота з ім'ям «$2» {{GENDER:$1|користувача|користувачки}} «$1» необхідно скинути.",
+       "botpasswords-locked": "Ви не можете увійти за допомогою пароля бота, оскільки Ваш обліковий запис заблоковано.",
        "resetpass_forbidden": "Пароль не можна змінити",
        "resetpass_forbidden-reason": "Пароль не можна змінити: $1",
        "resetpass-no-info": "Щоб звертатися безпосередньо до цієї сторінки, вам слід увійти до системи.",
        "redirect-file": "Назва файлу",
        "redirect-logid": "ID журналу",
        "redirect-not-exists": "Значення не знайдено",
+       "redirect-not-numeric": "Значення не числове",
        "fileduplicatesearch": "Пошук файлів-дублікатів",
        "fileduplicatesearch-summary": "Пошук дублікатів файлів на основі хеш-значень.",
        "fileduplicatesearch-filename": "Назва файлу:",
        "edit-error-long": "Помилки:\n\n$1",
        "revid": "версія $1",
        "pageid": "ID сторінки $1",
-       "interfaceadmin-info": "$1\n\nÐ\9fÑ\80ава Ð½Ð° Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ð³Ð°Ð»Ñ\8cниÑ\85 CSS/JS/JSON-Ñ\84айлÑ\96в Ð±Ñ\83ли Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ Ð²Ð¸Ð½ÐµÑ\81енÑ\96 Ð· Ð¿Ñ\80ава <code>editinterface.</code> Ð¯ÐºÑ\89о Ð²Ð¸ Ð½Ðµ Ñ\80озÑ\83мÑ\96Ñ\94Ñ\82е, Ñ\87омÑ\83 Ð²и наткнулись на цю помилку, див. [[mw:MediaWiki_1.32/interface-admin]].",
+       "interfaceadmin-info": "$1\n\nÐ\9fÑ\80ава Ð½Ð° Ñ\80едагÑ\83ваннÑ\8f Ð·Ð°Ð³Ð°Ð»Ñ\8cниÑ\85 CSS/JS/JSON-Ñ\84айлÑ\96в Ð½ÐµÐ´Ð°Ð²Ð½Ð¾ Ð²Ð¸Ð½ÐµÑ\81ено Ð· Ð¿Ñ\80ава <code>editinterface.</code> Ð¯ÐºÑ\89о Ð\92и Ð½Ðµ Ñ\80озÑ\83мÑ\96Ñ\94Ñ\82е, Ñ\87омÑ\83 Ð\92и наткнулись на цю помилку, див. [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Теги &lt;html&gt; не можна використовувати за межами звичайних сторінок.",
        "gotointerwiki": "Ви покидаєте сайт {{SITENAME}}",
        "gotointerwiki-invalid": "Вказана назва неприпустима.",
index 3fc931f..05eabfa 100644 (file)
        "cascadeprotected": "Cisse pådje ci a stî protedjeye siconte des candjmints, pask' ele est eploye ådvins {{PLURAL:$1|del pådje shuvante k' est protedjeye|des pådjes shuvantes ki sont protedjeyes}} avou l' tchuze «e cascåde» en alaedje:\n$2",
        "logouttext": "<strong>Vos vs avoz dislodjî.</strong>\n\nNotez ki des pådjes k' i gn a si pôrént continouwer a vey come si vos estîz elodjî, disk' a tant ki vos vudrîz l' muchete di vosse betchteu waibe.",
        "welcomeuser": "Bénvnowe, $1!",
-       "yourname": "Vosse no d' elodjaedje:",
+       "yourname": "No d' uzeu :",
        "userlogin-yourname": "No d' uzeu",
        "userlogin-yourname-ph": "Tapez vosse no d' uzeu",
        "yourpassword": "Vosse sicret",
        "yourpasswordagain": "Ritapez vosse sicret",
        "createacct-yourpasswordagain": "Ritapez l' sicret",
        "createacct-yourpasswordagain-ph": "Ritapez l' sicret",
+       "userlogin-remembermypassword": "Wårdez mi elodjaedje a tchaeke côp",
        "yourdomainname": "Vosse dominne",
        "login": "S' elodjî",
        "nav-login-createaccount": "Ahiver on conte, udon-bén s' elodjî",
        "resetpass-temp-password": "Sicret timporaire:",
        "passwordreset": "Rifé l' sicret",
        "passwordreset-disabled": "Li rfijhaedje di screts a stî dismetou so ç' wiki ci.",
-       "passwordreset-username": "No d' elodjaedje:",
+       "passwordreset-username": "No d' uzeu :",
        "passwordreset-domain": "Dominne:",
        "passwordreset-email": "Adresse emile:",
        "passwordreset-emailtitle": "Detays do contre so {{SITENAME}}",
        "prefs-reset-intro": "Vos ploz eployî ç' boton chal po rmete totes vos preferinces åzès prémetowès valixhances del waibe.\nÇoul n' pôrè nén esse disfwait.",
        "prefs-emailconfirm-label": "Acertinaedje di l' emile:",
        "youremail": "Vost emile:",
-       "username": "No d' elodjaedje:",
+       "username": "{{GENDER:$1|No d' uzeu|No d' uzeuse}} :",
        "prefs-memberingroups": "Mimbe {{PLURAL:$1|do groupe|des groupes}}:",
        "prefs-registration": "Date d' edjîstraedje:",
        "yourrealname": "Li vraiy no da vosse:",
        "defemailsubject": "Emile da l' uzeu «$1» so {{SITENAME}}",
        "noemailtitle": "Pont d' adresse emile",
        "noemailtext": "Cist uzeu chal n' a nén dné d' adresse emile valide.",
+       "emailusername": "No d' uzeu :",
        "emailfrom": "Di:",
        "emailto": "Po:",
        "emailsubject": "Sudjet:",
        "markaspatrolleddiff": "Marké come ricoridjî",
        "markaspatrolledtext": "Marker cisse pådje ci come dedja patrouyeye",
        "markedaspatrolled": "Markêye come ricoridjeye",
-       "markedaspatrolledtext": "Li relîte modêye di [[:$1]] a stî markêye come ricoridjeye",
+       "markedaspatrolledtext": "Li relîte modêye di [[:$1]] a stî markêye come ricoridjeye.",
        "markedaspatrollednotify": "Ci candjmint cial di $1 a stî marké come ricoridjî",
        "patrol-log-page": "Djournå des patrouyaedjes",
        "patrol-log-header": "Çouchal c' est on djournå des modêyes k' ont stî patrouyeyes.",
index ce14f64..337abd4 100644 (file)
        "default": "預設",
        "prefs-files": "檔案",
        "prefs-custom-css": "自定 CSS",
+       "prefs-custom-json": "自訂JSON",
        "prefs-custom-js": "自定 JavaScript",
        "prefs-common-config": "共有嘅CSS、JSON同埋JavaScript畀所有畫面用:",
        "prefs-reset-intro": "你可以用呢版去重設你嘅喜好設定到網站預設值。呢個動作無得番轉頭。",
        "authmanager-realname-label": "真名",
        "authmanager-realname-help": "用戶嘅真名",
        "authprovider-resetpass-skip-label": "跳過",
-       "interfaceadmin-info": "$1\n\n改全站通用 CSS/JS/JSON 檔嘅權限由 <code>editinterface</code> 權限拆咗出嚟。如果你唔明點解會出呢個錯誤訊息,請睇[[mw:MediaWiki_1.32/interface-admin]]。",
+       "interfaceadmin-info": "$1\n\n改全站通用 CSS/JS/JSON 檔嘅權限最近由 <code>editinterface</code> 權限拆咗出嚟。如果你唔明點解會出呢個錯誤訊息,請睇[[mw:MediaWiki_1.32/interface-admin]]。",
        "passwordpolicies": "密碼政策",
        "passwordpolicies-summary": "爾度係對爾個wiki定義咗嘅用戶組來講有效嘅密碼政策一覽。",
        "passwordpolicies-group": "組",
index a47816c..ccb3509 100644 (file)
                        "RyRubyy",
                        "Wxyveronica",
                        "夢蝶葬花",
-                       "Dcljr"
+                       "Dcljr",
+                       "Phenolla"
                ]
        },
        "tog-underline": "链接下划线:",
        "botpasswords-invalid-name": "指定的用户名不包含机器人密码分隔符(“$1”)。",
        "botpasswords-not-exist": "用户“$1”没有名叫“$2”的机器人密码。",
        "botpasswords-needs-reset": "用于{{GENDER:$1|用户}}“$1”的机器人名称“$2”的机器人密码必须重置。",
+       "botpasswords-locked": "由于您的账户已被锁定,您不可以使用机器人密码进行登录。",
        "resetpass_forbidden": "无法更改密码",
        "resetpass_forbidden-reason": "密码不能更改:$1",
        "resetpass-no-info": "您必须登录后直接进入这个页面。",
        "confirm-unwatch-top": "从监视列表中删除此页吗?",
        "confirm-rollback-button": "确定",
        "confirm-rollback-top": "回退此页面的编辑么?",
+       "confirm-mcrrestore-title": "还原版本",
        "confirm-mcrundo-title": "撤销一次更改",
        "mcrundofailed": "撤销失败",
        "mcrundo-missingparam": "请求中缺少必需参数。",
index 46f76c1..ad0fffe 100644 (file)
        "botpasswords-invalid-name": "指定的使用者名稱未包含機器人密碼分隔字元 (\"$1\")。",
        "botpasswords-not-exist": "使用者 \"$1\" 並沒有名稱為 \"$2\" 的機器人密碼。",
        "botpasswords-needs-reset": "給{{GENDER:$1|使用者}}「$1」的機器人名稱「$2」該機器人密碼已重新設定。",
+       "botpasswords-locked": "因您的帳號被鎖定,您不能以機器人的密碼登入。",
        "resetpass_forbidden": "無法變更密碼",
        "resetpass_forbidden-reason": "無法變更密碼:$1",
        "resetpass-no-info": "您必須直接登入存取這個頁面。",
        "confirm-unwatch-top": "從您的監視清單中移除此頁面?",
        "confirm-rollback-button": "確定",
        "confirm-rollback-top": "還原編輯到此頁面?",
+       "confirm-mcrrestore-title": "還原修訂",
        "confirm-mcrundo-title": "還原變更",
        "mcrundofailed": "還原失敗",
        "mcrundo-missingparam": "請求缺少必要參數。",
        "mcrundo-changed": "自您檢視差異之後,頁面有被變更過。請檢閱新的變更。",
+       "mcrundo-parse-failed": "解析新修訂失敗:$1",
        "semicolon-separator": ";",
        "comma-separator": "、",
        "colon-separator": ":",
index a279cda..eb03b38 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use MediaWiki\Storage\SlotRecord;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -55,7 +57,7 @@ class EditCLI extends Maintenance {
                $bot = $this->hasOption( 'bot' );
                $autoSummary = $this->hasOption( 'autosummary' );
                $noRC = $this->hasOption( 'no-rc' );
-               $slot = $this->getOption( 'slot', 'main' );
+               $slot = $this->getOption( 'slot', SlotRecord::MAIN );
 
                if ( $userName === false ) {
                        $wgUser = User::newSystemUser( 'Maintenance script', [ 'steal' => true ] );
@@ -83,7 +85,7 @@ class EditCLI extends Maintenance {
                $page = WikiPage::factory( $title );
 
                if ( $remove ) {
-                       if ( $slot === 'main' ) {
+                       if ( $slot === SlotRecord::MAIN ) {
                                $this->fatalError( "Cannot remove main slot! Use --slot to specify." );
                        }
 
index 49db4fb..93d5baf 100644 (file)
@@ -21,6 +21,7 @@
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\NameTableStore;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\Storage\SqlBlobStore;
 use Wikimedia\Assert\Assert;
 use Wikimedia\Rdbms\IDatabase;
@@ -66,7 +67,8 @@ class PopulateContentTables extends Maintenance {
        private function initServices() {
                $this->dbw = $this->getDB( DB_MASTER );
                $this->contentModelStore = MediaWikiServices::getInstance()->getContentModelStore();
-               $this->mainRoleId = MediaWikiServices::getInstance()->getSlotRoleStore()->acquireId( 'main' );
+               $this->mainRoleId = MediaWikiServices::getInstance()->getSlotRoleStore()
+                       ->acquireId( SlotRecord::MAIN );
        }
 
        public function execute() {
index 91a5f3b..0f0073c 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\SlotRecord;
 
 require_once __DIR__ . '/../Maintenance.php';
 
@@ -46,13 +47,13 @@ class DumpRev extends Maintenance {
                        $this->fatalError( "Row not found" );
                }
 
-               $content = $rev->getContent( 'main' );
+               $content = $rev->getContent( SlotRecord::MAIN );
                if ( !$content ) {
                        $this->fatalError( "Text not found" );
                }
 
                $blobStore = MediaWikiServices::getInstance()->getBlobStore();
-               $slot = $rev->getSlot( 'main' );
+               $slot = $rev->getSlot( SlotRecord::MAIN );
                $text = $blobStore->getBlob( $slot->getAddress() );
 
                $this->output( "Text length: " . strlen( $text ) . "\n" );
index 7fa88fc..9d6122d 100644 (file)
@@ -1389,6 +1389,8 @@ class OutputPageTest extends MediaWikiTestCase {
         * @covers OutputPage::addWikiText
         * @covers OutputPage::addWikiTextWithTitle
         * @covers OutputPage::addWikiTextTitle
+        * @covers OutputPage::addWikiTextTidy
+        * @covers OutputPage::addWikiTextTitleTidy
         * @covers OutputPage::getHTML
         */
        public function testAddWikiText( $method, array $args, $expected ) {
@@ -1421,7 +1423,7 @@ class OutputPageTest extends MediaWikiTestCase {
                                        '* Not a list',
                                ], 'Non-interface' => [
                                        [ "'''Bold'''", true, false ],
-                                       "<div class=\"mw-parser-output\"><p><b>Bold</b>\n</p></div>",
+                                       "<p><b>Bold</b>\n</p>",
                                ], 'No section edit links' => [
                                        [ '== Title ==' ],
                                        "<h2><span class=\"mw-headline\" id=\"Title\">Title</span></h2>\n",
@@ -1430,10 +1432,34 @@ class OutputPageTest extends MediaWikiTestCase {
                        'addWikiTextWithTitle' => [
                                'With title at start' => [
                                        [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ) ],
-                                       "<div class=\"mw-parser-output\"><ul><li>Some page</li></ul>\n</div>",
+                                       "<ul><li>Some page</li></ul>\n",
+                               ], 'With title at start' => [
+                                       [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ), false ],
+                                       "* Some page",
+                               ],
+                       ],
+                       'addWikiTextTidy' => [
+                               'SpecialNewimages' => [
+                                       [ "<p lang='en' dir='ltr'>\nMy message" ],
+                                       '<p lang="en" dir="ltr">' . "\nMy message\n</p>"
+                               ], 'List at start' => [
+                                       [ '* List' ],
+                                       "<ul><li>List</li></ul>\n",
+                               ], 'List not at start' => [
+                                       [ '* <b>Not a list', false ],
+                                       '<p>* <b>Not a list</b></p>',
+                               ],
+                       ],
+                       'addWikiTextTitleTidy' => [
+                               'With title at start' => [
+                                       [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ) ],
+                                       "<ul><li>Some page</li></ul>\n",
                                ], 'With title at start' => [
                                        [ '* {{PAGENAME}}', Title::newFromText( 'Talk:Some page' ), false ],
-                                       "<div class=\"mw-parser-output\">* Some page</div>",
+                                       "<p>* Some page</p>",
+                               ], 'EditPage' => [
+                                       [ "<div class='mw-editintro'>{{PAGENAME}}", Title::newFromText( 'Talk:Some page' ) ],
+                                       '<div class="mw-editintro">' . "Some page\n</div>"
                                ],
                        ],
                ];
@@ -1449,6 +1475,16 @@ class OutputPageTest extends MediaWikiTestCase {
                        $tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
                                array_merge( [ $args ], array_slice( $val, 1 ) );
                }
+               foreach ( $tests['addWikiTextTidy'] as $key => $val ) {
+                       $args = [ $val[0][0], null, $val[0][1] ?? true, true, false ];
+                       $tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
+                               array_merge( [ $args ], array_slice( $val, 1 ) );
+               }
+               foreach ( $tests['addWikiTextTitleTidy'] as $key => $val ) {
+                       $args = [ $val[0][0], $val[0][1], $val[0][2] ?? true, true, false ];
+                       $tests['addWikiTextTitle']["$key (addWikiTextTitle)"] =
+                               array_merge( [ $args ], array_slice( $val, 1 ) );
+               }
 
                // We have to reformat our array to match what PHPUnit wants
                $ret = [];
@@ -1472,8 +1508,6 @@ class OutputPageTest extends MediaWikiTestCase {
                $op->addWikiText( 'a' );
        }
 
-       // @todo How should we cover the Tidy variants?
-
        /**
         * @covers OutputPage::addParserOutputMetadata
         */
index bea0b49..2ee1ab4 100644 (file)
@@ -11,6 +11,7 @@ use MediaWiki\Storage\RevisionArchiveRecord;
 use MediaWiki\Storage\RevisionRecord;
 use MediaWiki\Storage\RevisionStore;
 use MediaWiki\Storage\RevisionStoreRecord;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\Storage\SuppressedDataException;
 use MediaWiki\User\UserIdentityValue;
 use MediaWikiTestCase;
@@ -241,7 +242,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank!', $html );
                $this->assertContains( 'time:20180101000003!', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRevisionParserOutput_old() {
@@ -263,7 +264,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank!', $html );
                $this->assertContains( 'time:20180101000003!', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRevisionParserOutput_archive() {
@@ -285,7 +286,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank!', $html );
                $this->assertContains( 'time:20180101000003!', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRevisionParserOutput_suppressed() {
@@ -337,7 +338,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank!', $html );
                $this->assertContains( 'time:20180101000003!', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRevisionParserOutput_raw() {
@@ -371,7 +372,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank!', $html );
                $this->assertContains( 'time:20180101000003!', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRevisionParserOutput_multi() {
@@ -387,7 +388,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $rr = new RenderedRevision( $title, $rev, $options, $this->combinerCallback );
 
                $combinedOutput = $rr->getRevisionParserOutput();
-               $mainOutput = $rr->getSlotParserOutput( 'main' );
+               $mainOutput = $rr->getSlotParserOutput( SlotRecord::MAIN );
                $auxOutput = $rr->getSlotParserOutput( 'aux' );
 
                $combinedHtml = $combinedOutput->getText();
@@ -422,7 +423,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}!\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}!\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = new RenderedRevision( $title, $rev, $options, $this->combinerCallback );
@@ -449,7 +450,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}!\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}!\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $actualRevision = $this->getMockRevision(
                        RevisionStoreRecord::class,
@@ -503,13 +504,13 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $title = $this->getMockTitle( 7, 21 );
 
                $rev = new MutableRevisionRecord( $title );
-               $rev->setContent( 'main', $mockContent );
+               $rev->setContent( SlotRecord::MAIN, $mockContent );
                $rev->setContent( 'aux', $mockContent );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = new RenderedRevision( $title, $rev, $options, $this->combinerCallback );
 
-               $output = $rr->getSlotParserOutput( 'main', [ 'generate-html' => false ] );
+               $output = $rr->getSlotParserOutput( SlotRecord::MAIN, [ 'generate-html' => false ] );
                $this->assertFalse( $output->hasText(), 'hasText' );
 
                $output = $rr->getRevisionParserOutput( [ 'generate-html' => false ] );
@@ -527,19 +528,19 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}!\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}!\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
                $rev->setContent( 'aux', new WikitextContent( '[[Goats]]' ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = new RenderedRevision( $title, $rev, $options, $this->combinerCallback );
 
                $firstOutput = $rr->getRevisionParserOutput();
-               $mainOutput = $rr->getSlotParserOutput( 'main' );
+               $mainOutput = $rr->getSlotParserOutput( SlotRecord::MAIN );
                $auxOutput = $rr->getSlotParserOutput( 'aux' );
 
                // emulate a saved revision
                $savedRev = new MutableRevisionRecord( $title );
-               $savedRev->setContent( 'main', new WikitextContent( $text ) );
+               $savedRev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
                $savedRev->setContent( 'aux', new WikitextContent( '[[Goats]]' ) );
                $savedRev->setId( 23 ); // saved, new
                $savedRev->setUser( new UserIdentityValue( 9, 'Frank', 0 ) );
@@ -547,7 +548,7 @@ class RenderedRevisionTest extends MediaWikiTestCase {
 
                $rr->updateRevision( $savedRev );
 
-               $this->assertNotSame( $mainOutput, $rr->getSlotParserOutput( 'main' ), 'Reset main' );
+               $this->assertNotSame( $mainOutput, $rr->getSlotParserOutput( SlotRecord::MAIN ), 'Reset main' );
                $this->assertSame( $auxOutput, $rr->getSlotParserOutput( 'aux' ), 'Keep aux' );
 
                $updatedOutput = $rr->getRevisionParserOutput();
index 28052ff..ca13899 100644 (file)
@@ -9,6 +9,7 @@ use LogicException;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\User\UserIdentityValue;
 use MediaWikiTestCase;
 use ParserOptions;
@@ -153,7 +154,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
                $text .= "* [[Link It]]\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision( $rev, $options );
@@ -170,7 +171,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank', $html );
                $this->assertContains( 'time:20180101000003', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRenderedRevision_current() {
@@ -189,7 +190,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision( $rev, $options );
@@ -206,7 +207,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $this->assertContains( 'user:Frank', $html );
                $this->assertContains( 'time:20180101000003', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRenderedRevision_master() {
@@ -225,7 +226,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision( $rev, $options, null, [ 'use-master' => true ] );
@@ -236,7 +237,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
 
                $this->assertContains( 'rev:21', $html );
 
-               $this->assertSame( $html, $rr->getSlotParserOutput( 'main' )->getText() );
+               $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
        public function testGetRenderedRevision_old() {
@@ -255,7 +256,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision( $rev, $options );
@@ -292,7 +293,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision( $rev, $options );
@@ -317,7 +318,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $sysop = $this->getTestUser( [ 'sysop' ] )->getUser(); // privileged!
@@ -356,7 +357,7 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $text .= "* user:{{REVISIONUSER}}\n";
                $text .= "* time:{{REVISIONTIMESTAMP}}\n";
 
-               $rev->setContent( 'main', new WikitextContent( $text ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $options = ParserOptions::newCanonical( 'canonical' );
                $rr = $renderer->getRenderedRevision(
@@ -391,13 +392,13 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $rev->setTimestamp( '20180101000003' );
                $rev->setComment( CommentStoreComment::newUnsavedComment( '' ) );
 
-               $rev->setContent( 'main', new WikitextContent( '[[Kittens]]' ) );
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( '[[Kittens]]' ) );
                $rev->setContent( 'aux', new WikitextContent( '[[Goats]]' ) );
 
                $rr = $renderer->getRenderedRevision( $rev );
 
                $combinedOutput = $rr->getRevisionParserOutput();
-               $mainOutput = $rr->getSlotParserOutput( 'main' );
+               $mainOutput = $rr->getSlotParserOutput( SlotRecord::MAIN );
                $auxOutput = $rr->getSlotParserOutput( 'aux' );
 
                $combinedHtml = $combinedOutput->getText();
@@ -453,13 +454,13 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $title = $this->getMockTitle( 7, 21 );
 
                $rev = new MutableRevisionRecord( $title );
-               $rev->setContent( 'main', $mockContent );
+               $rev->setContent( SlotRecord::MAIN, $mockContent );
                $rev->setContent( 'aux', $mockContent );
 
                // NOTE: we are testing the private combineSlotOutput() callback here.
                $rr = $renderer->getRenderedRevision( $rev );
 
-               $output = $rr->getSlotParserOutput( 'main', [ 'generate-html' => false ] );
+               $output = $rr->getSlotParserOutput( SlotRecord::MAIN, [ 'generate-html' => false ] );
                $this->assertFalse( $output->hasText(), 'hasText' );
 
                $output = $rr->getRevisionParserOutput( [ 'generate-html' => false ] );
index 8bf87a2..28e6e12 100644 (file)
@@ -259,7 +259,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                // getTextId() must be an int!
                $this->assertInternalType( 'integer', $rev->getTextId() );
 
-               $mainSlot = $rev->getRevisionRecord()->getSlot( 'main', RevisionRecord::RAW );
+               $mainSlot = $rev->getRevisionRecord()->getSlot( SlotRecord::MAIN, RevisionRecord::RAW );
 
                // we currently only support storage in the text table
                $textId = MediaWikiServices::getInstance()
@@ -1581,7 +1581,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                        'slot_content_id' => 1,
                        'content_address' => 'tt:789',
                        'model_name' => CONTENT_MODEL_WIKITEXT,
-                       'role_name' => 'main',
+                       'role_name' => SlotRecord::MAIN,
                        'slot_origin' => 1,
                ], new WikitextContent( 'Test' ) );
 
index 3e4746a..f5bc4fa 100644 (file)
@@ -35,7 +35,7 @@ class RevisionMcrDbTest extends RevisionDbTestBase {
                        'slot_content_id' => 1,
                        'content_address' => 'tt:789',
                        'model_name' => CONTENT_MODEL_WIKITEXT,
-                       'role_name' => 'main',
+                       'role_name' => SlotRecord::MAIN,
                        'slot_origin' => 1,
                ], new WikitextContent( 'Test' ) );
 
index b446a8c..7218466 100644 (file)
@@ -31,7 +31,7 @@ class RevisionMcrReadNewDbTest extends RevisionDbTestBase {
                        'slot_content_id' => 1,
                        'content_address' => 'tt:789',
                        'model_name' => CONTENT_MODEL_WIKITEXT,
-                       'role_name' => 'main',
+                       'role_name' => SlotRecord::MAIN,
                        'slot_origin' => 1,
                ], new WikitextContent( 'Test' ) );
 
index 6359995..c470787 100644 (file)
@@ -931,7 +931,7 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertNull( $rev->getContent(), 'Content of no slots is null' );
 
                $content = new TextContent( 'Hello Kittens!' );
-               $rec->setContent( 'main', $content );
+               $rec->setContent( SlotRecord::MAIN, $content );
                $this->assertSame( $content, $rev->getContent() );
        }
 
index 8b472d4..7931236 100644 (file)
@@ -115,7 +115,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $mainContent = new WikitextContent( 'Lorem ipsum' );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent );
                $updater = $this->getDerivedPageDataUpdater( $page );
                $updater->prepareContent( $user, $update, false );
 
@@ -194,7 +194,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent );
                $update->modifySlot( SlotRecord::newInherited( $auxSlot ) );
                // TODO: MCR: test removing slots!
 
@@ -220,7 +220,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $this->assertEquals( [ 'main', 'aux' ], $updater->getModifiedSlotRoles() );
                $this->assertEquals( [ 'main', 'aux' ], $updater->getTouchedSlotRoles() );
 
-               $mainSlot = $updater->getRawSlot( 'main' );
+               $mainSlot = $updater->getRawSlot( SlotRecord::MAIN );
                $this->assertInstanceOf( SlotRecord::class, $mainSlot );
                $this->assertNotContains( '~~~', $mainSlot->getContent()->serialize(), 'PST should apply.' );
                $this->assertContains( $sysop->getName(), $mainSlot->getContent()->serialize() );
@@ -255,12 +255,12 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $mainContent2 = new WikitextContent( 'second ({{subst:REVISIONUSER}}) #~~~#' );
 
                $rev = $this->createRevision( $page, 'first', $mainContent1 );
-               $mainContent1 = $rev->getContent( 'main' ); // get post-pst content
+               $mainContent1 = $rev->getContent( SlotRecord::MAIN ); // get post-pst content
                $userName = $rev->getUser()->getName();
                $sysopName = $sysop->getName();
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent1 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent1 );
                $updater1 = $this->getDerivedPageDataUpdater( $page );
                $updater1->prepareContent( $sysop, $update, false );
 
@@ -283,12 +283,12 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
 
                // TODO: MCR: test inheritance from parent
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent2 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent2 );
                $updater2 = $this->getDerivedPageDataUpdater( $page );
                $updater2->prepareContent( $sysop, $update, false );
 
                // non-null edit use the new user name in PST
-               $pstText = $updater2->getSlots()->getContent( 'main' )->serialize();
+               $pstText = $updater2->getSlots()->getContent( SlotRecord::MAIN )->serialize();
                $this->assertNotContains( '{{subst:REVISIONUSER}}', $pstText, '{{subst:REVISIONUSER}}' );
                $this->assertNotContains( '~~~', $pstText, 'signature ~~~' );
                $this->assertContains( '(' . $sysopName . ')', $pstText, '{{subst:REVISIONUSER}}' );
@@ -342,8 +342,8 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
 
                // TODO: MCR: test multiple slots, test slot removal!
 
-               $this->assertInstanceOf( SlotRecord::class, $updater1->getRawSlot( 'main' ) );
-               $this->assertNotContains( '~~~~', $updater1->getRawContent( 'main' )->serialize() );
+               $this->assertInstanceOf( SlotRecord::class, $updater1->getRawSlot( SlotRecord::MAIN ) );
+               $this->assertNotContains( '~~~~', $updater1->getRawContent( SlotRecord::MAIN )->serialize() );
 
                $mainOutput = $updater1->getCanonicalParserOutput();
                $this->assertContains( 'first', $mainOutput->getText() );
@@ -379,11 +379,11 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $mainContent1 = new WikitextContent( 'first [[main]] ~~~' );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent1 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent1 );
                $updater = $this->getDerivedPageDataUpdater( $page );
                $updater->prepareContent( $user, $update, false );
 
-               $mainOutput = $updater->getSlotParserOutput( 'main' );
+               $mainOutput = $updater->getSlotParserOutput( SlotRecord::MAIN );
                $canonicalOutput = $updater->getCanonicalParserOutput();
 
                $rev = $this->createRevision( $page, 'first', $mainContent1 );
@@ -394,7 +394,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $this->assertTrue( $updater->isUpdatePrepared() );
                $this->assertTrue( $updater->isContentPrepared() );
 
-               $this->assertSame( $mainOutput, $updater->getSlotParserOutput( 'main' ) );
+               $this->assertSame( $mainOutput, $updater->getSlotParserOutput( SlotRecord::MAIN ) );
                $this->assertSame( $canonicalOutput, $updater->getCanonicalParserOutput() );
        }
 
@@ -409,11 +409,11 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $mainContent1 = new WikitextContent( 'first --{{REVISIONID}}--' );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent1 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent1 );
                $updater = $this->getDerivedPageDataUpdater( $page );
                $updater->prepareContent( $user, $update, false );
 
-               $mainOutput = $updater->getSlotParserOutput( 'main' );
+               $mainOutput = $updater->getSlotParserOutput( SlotRecord::MAIN );
                $canonicalOutput = $updater->getCanonicalParserOutput();
 
                // prevent optimization on matching speculative ID
@@ -429,7 +429,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $this->assertTrue( $updater->isContentPrepared() );
 
                // ParserOutput objects should have been flushed.
-               $this->assertNotSame( $mainOutput, $updater->getSlotParserOutput( 'main' ) );
+               $this->assertNotSame( $mainOutput, $updater->getSlotParserOutput( SlotRecord::MAIN ) );
                $this->assertNotSame( $canonicalOutput, $updater->getCanonicalParserOutput() );
 
                $html = $updater->getCanonicalParserOutput()->getText();
@@ -450,7 +450,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
 
                $mainContent = new WikitextContent( 'first [[main]] ~~~' );
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent );
 
                $updater = $this->getDerivedPageDataUpdater( __METHOD__ );
                $updater->prepareContent( $user, $update, false );
@@ -461,7 +461,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $this->assertSame( $canonicalOutput->getCacheTime(), $preparedEdit->timestamp );
                $this->assertSame( $canonicalOutput, $preparedEdit->output );
                $this->assertSame( $mainContent, $preparedEdit->newContent );
-               $this->assertSame( $updater->getRawContent( 'main' ), $preparedEdit->pstContent );
+               $this->assertSame( $updater->getRawContent( SlotRecord::MAIN ), $preparedEdit->pstContent );
                $this->assertSame( $updater->getCanonicalParserOptions(), $preparedEdit->popts );
                $this->assertSame( null, $preparedEdit->revid );
        }
@@ -474,7 +474,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
 
                $mainContent = new WikitextContent( 'first [[main]] ~~~' );
                $update = new MutableRevisionSlots();
-               $update->setContent( 'main', $mainContent );
+               $update->setContent( SlotRecord::MAIN, $mainContent );
 
                $rev = $this->createRevision( $page, __METHOD__ );
 
@@ -486,7 +486,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $preparedEdit = $updater->getPreparedEdit();
                $this->assertSame( $canonicalOutput->getCacheTime(), $preparedEdit->timestamp );
                $this->assertSame( $canonicalOutput, $preparedEdit->output );
-               $this->assertSame( $updater->getRawContent( 'main' ), $preparedEdit->pstContent );
+               $this->assertSame( $updater->getRawContent( SlotRecord::MAIN ), $preparedEdit->pstContent );
                $this->assertSame( $updater->getCanonicalParserOptions(), $preparedEdit->popts );
                $this->assertSame( $rev->getId(), $preparedEdit->revid );
        }
@@ -499,7 +499,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $mainContent1 = new WikitextContent( 'first' );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent1 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent1 );
                $updater = $this->getDerivedPageDataUpdater( $page );
                $updater->prepareContent( $user, $update, false );
 
@@ -595,7 +595,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                );
 
                $update = new RevisionSlotsUpdate();
-               $update->modifyContent( 'main', $mainContent2 );
+               $update->modifyContent( SlotRecord::MAIN, $mainContent2 );
                $update->removeSlot( 'aux' );
 
                $page = $this->getPage( __METHOD__ );
@@ -676,13 +676,13 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $content2 = new WikitextContent( 'two' );
 
                $update1 = new RevisionSlotsUpdate();
-               $update1->modifyContent( 'main', $content1 );
+               $update1->modifyContent( SlotRecord::MAIN, $content1 );
 
                $update1b = new RevisionSlotsUpdate();
                $update1b->modifyContent( 'xyz', $content1 );
 
                $update2 = new RevisionSlotsUpdate();
-               $update2->modifyContent( 'main', $content2 );
+               $update2->modifyContent( SlotRecord::MAIN, $content2 );
 
                $rev1 = $this->makeRevision( $title, $update1, $user1, 'rev1', 11 );
                $rev1b = $this->makeRevision( $title, $update1b, $user1, 'rev1', 11 );
index 48bf4aa..3e91df4 100644 (file)
@@ -51,7 +51,7 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
                        $record->setPageId( $rowOverrides['rev_page'] );
                }
 
-               $record->setContent( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $record->setContent( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $record->setComment( $comment );
                $record->setUser( $user );
                $record->setTimestamp( '20101010000000' );
@@ -141,33 +141,33 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
        public function testGetMainContentWhenEmpty() {
                $record = new MutableRevisionRecord( Title::newFromText( 'Foo' ) );
                $this->setExpectedException( RevisionAccessException::class );
-               $this->assertNull( $record->getContent( 'main' ) );
+               $this->assertNull( $record->getContent( SlotRecord::MAIN ) );
        }
 
        public function testSetGetMainContent() {
                $record = new MutableRevisionRecord( Title::newFromText( 'Foo' ) );
                $content = new WikitextContent( 'Badger' );
-               $record->setContent( 'main', $content );
-               $this->assertSame( $content, $record->getContent( 'main' ) );
+               $record->setContent( SlotRecord::MAIN, $content );
+               $this->assertSame( $content, $record->getContent( SlotRecord::MAIN ) );
        }
 
        public function testGetSlotWhenEmpty() {
                $record = new MutableRevisionRecord( Title::newFromText( 'Foo' ) );
-               $this->assertFalse( $record->hasSlot( 'main' ) );
+               $this->assertFalse( $record->hasSlot( SlotRecord::MAIN ) );
 
                $this->setExpectedException( RevisionAccessException::class );
-               $record->getSlot( 'main' );
+               $record->getSlot( SlotRecord::MAIN );
        }
 
        public function testSetGetSlot() {
                $record = new MutableRevisionRecord( Title::newFromText( 'Foo' ) );
                $slot = SlotRecord::newUnsaved(
-                       'main',
+                       SlotRecord::MAIN,
                        new WikitextContent( 'x' )
                );
                $record->setSlot( $slot );
-               $this->assertTrue( $record->hasSlot( 'main' ) );
-               $this->assertSame( $slot, $record->getSlot( 'main' ) );
+               $this->assertTrue( $record->hasSlot( SlotRecord::MAIN ) );
+               $this->assertSame( $slot, $record->getSlot( SlotRecord::MAIN ) );
        }
 
        public function testSetGetMinor() {
@@ -249,7 +249,7 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
                $record->setSlot( $auxSlot );
 
                $this->assertSame( [ 'main' ], $record->getOriginalSlots()->getSlotRoles() );
-               $this->assertSame( $mainSlot, $record->getOriginalSlots()->getSlot( 'main' ) );
+               $this->assertSame( $mainSlot, $record->getOriginalSlots()->getSlot( SlotRecord::MAIN ) );
 
                $this->assertSame( [ 'aux' ], $record->getInheritedSlots()->getSlotRoles() );
                $this->assertSame( $auxSlot, $record->getInheritedSlots()->getSlot( 'aux' ) );
@@ -314,7 +314,7 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
                yield 'empty' => [ $rev ];
 
                $rev = new MutableRevisionRecord( $title );
-               $rev->setContent( 'main', $content );
+               $rev->setContent( SlotRecord::MAIN, $content );
                $rev->setUser( $user );
                $rev->setComment( $comment );
                yield 'no timestamp' => [ $rev ];
@@ -326,14 +326,14 @@ class MutableRevisionRecordTest extends MediaWikiTestCase {
                yield 'no content' => [ $rev ];
 
                $rev = new MutableRevisionRecord( $title );
-               $rev->setContent( 'main', $content );
+               $rev->setContent( SlotRecord::MAIN, $content );
                $rev->setComment( $comment );
                $rev->setTimestamp( '20101010000000' );
                yield 'no user' => [ $rev ];
 
                $rev = new MutableRevisionRecord( $title );
                $rev->setUser( $user );
-               $rev->setContent( 'main', $content );
+               $rev->setContent( SlotRecord::MAIN, $content );
                $rev->setTimestamp( '20101010000000' );
                yield 'no comment' => [ $rev ];
        }
index 5a83143..1ef0121 100644 (file)
@@ -65,14 +65,14 @@ class MutableRevisionSlotsTest extends RevisionSlotsTest {
 
                $this->assertSame( [], $slots->getSlots() );
 
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->setSlot( $slotA );
-               $this->assertSame( $slotA, $slots->getSlot( 'main' ) );
+               $this->assertSame( $slotA, $slots->getSlot( SlotRecord::MAIN ) );
                $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
 
-               $slotB = SlotRecord::newUnsaved( 'main', new WikitextContent( 'B' ) );
+               $slotB = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'B' ) );
                $slots->setSlot( $slotB );
-               $this->assertSame( $slotB, $slots->getSlot( 'main' ) );
+               $this->assertSame( $slotB, $slots->getSlot( SlotRecord::MAIN ) );
                $this->assertSame( [ 'main' => $slotB ], $slots->getSlots() );
        }
 
@@ -87,18 +87,18 @@ class MutableRevisionSlotsTest extends RevisionSlotsTest {
 
        public function testInheritSlotOverwritesSlot() {
                $slots = new MutableRevisionSlots();
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->setSlot( $slotA );
-               $slotB = $this->newSavedSlot( 'main', new WikitextContent( 'B' ) );
+               $slotB = $this->newSavedSlot( SlotRecord::MAIN, new WikitextContent( 'B' ) );
                $slotC = $this->newSavedSlot( 'foo', new WikitextContent( 'C' ) );
                $slots->inheritSlot( $slotB );
                $slots->inheritSlot( $slotC );
                $this->assertSame( [ 'main', 'foo' ], $slots->getSlotRoles() );
-               $this->assertNotSame( $slotB, $slots->getSlot( 'main' ) );
+               $this->assertNotSame( $slotB, $slots->getSlot( SlotRecord::MAIN ) );
                $this->assertNotSame( $slotC, $slots->getSlot( 'foo' ) );
-               $this->assertTrue( $slots->getSlot( 'main' )->isInherited() );
+               $this->assertTrue( $slots->getSlot( SlotRecord::MAIN )->isInherited() );
                $this->assertTrue( $slots->getSlot( 'foo' )->isInherited() );
-               $this->assertSame( $slotB->getContent(), $slots->getSlot( 'main' )->getContent() );
+               $this->assertSame( $slotB->getContent(), $slots->getSlot( SlotRecord::MAIN )->getContent() );
                $this->assertSame( $slotC->getContent(), $slots->getSlot( 'foo' )->getContent() );
        }
 
@@ -107,26 +107,26 @@ class MutableRevisionSlotsTest extends RevisionSlotsTest {
 
                $this->assertSame( [], $slots->getSlots() );
 
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->setSlot( $slotA );
-               $this->assertSame( $slotA, $slots->getSlot( 'main' ) );
+               $this->assertSame( $slotA, $slots->getSlot( SlotRecord::MAIN ) );
                $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
 
                $newContent = new WikitextContent( 'B' );
-               $slots->setContent( 'main', $newContent );
-               $this->assertSame( $newContent, $slots->getContent( 'main' ) );
+               $slots->setContent( SlotRecord::MAIN, $newContent );
+               $this->assertSame( $newContent, $slots->getContent( SlotRecord::MAIN ) );
        }
 
        public function testRemoveExistingSlot() {
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots = new MutableRevisionSlots( [ $slotA ] );
 
                $this->assertSame( [ 'main' => $slotA ], $slots->getSlots() );
 
-               $slots->removeSlot( 'main' );
+               $slots->removeSlot( SlotRecord::MAIN );
                $this->assertSame( [], $slots->getSlots() );
                $this->setExpectedException( RevisionAccessException::class );
-               $slots->getSlot( 'main' );
+               $slots->getSlot( SlotRecord::MAIN );
        }
 
        public function testNewFromParentRevisionSlots() {
index 1d504de..7e1e1ee 100644 (file)
@@ -135,7 +135,7 @@ class NoContentModelRevisionStoreDbTest extends RevisionStoreDbTestBase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                        ]
                                ),
                                'joins' => [],
@@ -152,7 +152,7 @@ class NoContentModelRevisionStoreDbTest extends RevisionStoreDbTestBase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                                'content_size' => 'slots.rev_len',
                                                'content_sha1' => 'slots.rev_sha1',
                                                'content_address' =>
index 81f726c..3933986 100644 (file)
@@ -6,6 +6,7 @@ use CommentStoreComment;
 use Content;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 use MediaWikiTestCase;
 use ParserOptions;
 use RecentChange;
@@ -72,7 +73,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // TODO: MCR: test additional slots
                $content = new TextContent( 'Lorem Ipsum' );
-               $updater->setContent( 'main', $content );
+               $updater->setContent( SlotRecord::MAIN, $content );
 
                $parent = $updater->grabParentRevision();
 
@@ -102,7 +103,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $this->assertInstanceOf( Revision::class, $updater->getStatus()->value['revision'] );
 
                $rev = $updater->getNewRevision();
-               $revContent = $rev->getContent( 'main' );
+               $revContent = $rev->getContent( SlotRecord::MAIN );
                $this->assertSame( 'Lorem Ipsum', $revContent->serialize(), 'revision content' );
 
                // were the WikiPage and Title objects updated?
@@ -128,7 +129,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // re-edit with same content - should be a "null-edit"
                $updater = $page->newPageUpdater( $user );
-               $updater->setContent( 'main', $content );
+               $updater->setContent( SlotRecord::MAIN, $content );
 
                $summary = CommentStoreComment::newUnsavedComment( 'to to re-edit' );
                $rev = $updater->saveRevision( $summary );
@@ -167,7 +168,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $this->assertTrue( $updater->hasEditConflict( 0 ), 'hasEditConflict' );
 
                // TODO: MCR: test additional slots
-               $updater->setContent( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
 
                // TODO: test all flags for saveRevision()!
                $summary = CommentStoreComment::newUnsavedComment( 'Just a test' );
@@ -189,7 +190,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                // TODO: Test null revision (with different user): new revision!
 
                $rev = $updater->getNewRevision();
-               $revContent = $rev->getContent( 'main' );
+               $revContent = $rev->getContent( SlotRecord::MAIN );
                $this->assertSame( 'Lorem Ipsum', $revContent->serialize(), 'revision content' );
 
                // were the WikiPage and Title objects updated?
@@ -210,7 +211,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // re-edit
                $updater = $page->newPageUpdater( $user );
-               $updater->setContent( 'main', new TextContent( 'dolor sit amet' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'dolor sit amet' ) );
 
                $summary = CommentStoreComment::newUnsavedComment( 're-edit' );
                $updater->saveRevision( $summary );
@@ -242,7 +243,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                }
 
                $updater = $page->newPageUpdater( $user );
-               $updater->setContent( 'main', $content );
+               $updater->setContent( SlotRecord::MAIN, $content );
                $rev = $updater->saveRevision( $comment );
                return $rev;
        }
@@ -267,7 +268,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // try creating the page - should trigger CAS failure.
                $summary = CommentStoreComment::newUnsavedComment( 'create?!' );
-               $updater->setContent( 'main', new TextContent( 'Lorem ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) );
                $updater->saveRevision( $summary );
                $status = $updater->getStatus();
 
@@ -287,7 +288,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // try creating the page - should trigger CAS failure.
                $summary = CommentStoreComment::newUnsavedComment( 'edit?!' );
-               $updater->setContent( 'main', new TextContent( 'dolor sit amet' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'dolor sit amet' ) );
                $updater->saveRevision( $summary );
                $status = $updater->getStatus();
 
@@ -311,7 +312,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                // update with EDIT_UPDATE flag should fail
                $summary = CommentStoreComment::newUnsavedComment( 'udpate?!' );
-               $updater->setContent( 'main', new TextContent( 'Lorem ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) );
                $updater->saveRevision( $summary, EDIT_UPDATE );
                $status = $updater->getStatus();
 
@@ -326,7 +327,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                // update with EDIT_NEW flag should fail
                $summary = CommentStoreComment::newUnsavedComment( 'create?!' );
                $updater = $page->newPageUpdater( $user );
-               $updater->setContent( 'main', new TextContent( 'dolor sit amet' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'dolor sit amet' ) );
                $updater->saveRevision( $summary, EDIT_NEW );
                $status = $updater->getStatus();
 
@@ -356,7 +357,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $updater = $page->newPageUpdater( $user );
 
                $summary = CommentStoreComment::newUnsavedComment( 'Lorem ipsum ' . $patrolled );
-               $updater->setContent( 'main', new TextContent( 'Lorem ipsum ' . $patrolled ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum ' . $patrolled ) );
                $updater->setRcPatrolStatus( $patrolled );
                $rev = $updater->saveRevision( $summary );
 
@@ -375,24 +376,24 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                $updater = $page->newPageUpdater( $user );
                $summary = CommentStoreComment::newUnsavedComment( 'one' );
-               $updater->setContent( 'main', new TextContent( 'Lorem ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) );
                $rev1 = $updater->saveRevision( $summary, EDIT_NEW );
 
                $updater = $page->newPageUpdater( $user );
                $summary = CommentStoreComment::newUnsavedComment( 'two' );
-               $updater->setContent( 'main', new TextContent( 'Foo Bar' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Foo Bar' ) );
                $rev2 = $updater->saveRevision( $summary, EDIT_UPDATE );
 
                $updater = $page->newPageUpdater( $user );
                $summary = CommentStoreComment::newUnsavedComment( 'three' );
-               $updater->inheritSlot( $rev1->getSlot( 'main' ) );
+               $updater->inheritSlot( $rev1->getSlot( SlotRecord::MAIN ) );
                $rev3 = $updater->saveRevision( $summary, EDIT_UPDATE );
 
                $this->assertNotSame( $rev1->getId(), $rev3->getId() );
                $this->assertNotSame( $rev2->getId(), $rev3->getId() );
 
-               $main1 = $rev1->getSlot( 'main' );
-               $main3 = $rev3->getSlot( 'main' );
+               $main1 = $rev1->getSlot( SlotRecord::MAIN );
+               $main3 = $rev3->getSlot( SlotRecord::MAIN );
 
                $this->assertNotSame( $main1->getRevision(), $main3->getRevision() );
                $this->assertSame( $main1->getAddress(), $main3->getAddress() );
@@ -410,7 +411,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                $updater = $page->newPageUpdater( $user );
                $updater->setUseAutomaticEditSummaries( true );
-               $updater->setContent( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
 
                // empty comment triggers auto-summary
                $summary = CommentStoreComment::newUnsavedComment( '' );
@@ -423,7 +424,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                // check that this also works when blanking the page
                $updater = $page->newPageUpdater( $user );
                $updater->setUseAutomaticEditSummaries( true );
-               $updater->setContent( 'main', new TextContent( '' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( '' ) );
 
                $summary = CommentStoreComment::newUnsavedComment( '' );
                $updater->saveRevision( $summary, EDIT_AUTOSUMMARY );
@@ -438,7 +439,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                $updater = $page2->newPageUpdater( $user );
                $updater->setUseAutomaticEditSummaries( false );
-               $updater->setContent( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
 
                $summary = CommentStoreComment::newUnsavedComment( '' );
                $updater->saveRevision( $summary, EDIT_AUTOSUMMARY );
@@ -450,7 +451,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                // check that we don't do auto.summaries without the EDIT_AUTOSUMMARY flag
                $updater = $page2->newPageUpdater( $user );
                $updater->setUseAutomaticEditSummaries( true );
-               $updater->setContent( 'main', new TextContent( '' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( '' ) );
 
                $summary = CommentStoreComment::newUnsavedComment( '' );
                $updater->saveRevision( $summary, 0 );
@@ -477,7 +478,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $updater = $page->newPageUpdater( $user );
                $updater->setUsePageCreationLog( $use );
                $summary = CommentStoreComment::newUnsavedComment( 'cmt' );
-               $updater->setContent( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $updater->saveRevision( $summary, EDIT_NEW );
 
                $rev = $updater->getNewRevision();
@@ -555,7 +556,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $page = WikiPage::factory( $title );
                $updater = $page->newPageUpdater( $user );
 
-               $updater->setContent( 'main', new \WikitextContent( $wikitext ) );
+               $updater->setContent( SlotRecord::MAIN, new \WikitextContent( $wikitext ) );
 
                $summary = CommentStoreComment::newUnsavedComment( 'Just a test' );
                $rev = $updater->saveRevision( $summary, EDIT_UPDATE );
@@ -568,7 +569,7 @@ class PageUpdaterTest extends MediaWikiTestCase {
 
                $output = $page->getParserOutput( ParserOptions::newCanonical( 'canonical' ) );
                $html = $output->getText();
-               $text = $rev->getContent( 'main' )->serialize();
+               $text = $rev->getContent( SlotRecord::MAIN )->serialize();
 
                if ( $subst ) {
                        $this->assertContains( $expected, $text, 'In Wikitext' );
index f959d68..fad6228 100644 (file)
@@ -34,7 +34,7 @@ class RevisionArchiveRecordTest extends MediaWikiTestCase {
                $user = new UserIdentityValue( 11, 'Tester', 0 );
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
@@ -65,7 +65,7 @@ class RevisionArchiveRecordTest extends MediaWikiTestCase {
                $user = new UserIdentityValue( 11, 'Tester', 0 );
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
@@ -197,7 +197,7 @@ class RevisionArchiveRecordTest extends MediaWikiTestCase {
 
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
index 7f56c3a..165c27b 100644 (file)
@@ -2,6 +2,7 @@
 namespace MediaWiki\Tests\Storage;
 
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\SlotRecord;
 use MediaWikiTestCase;
 use Revision;
 
@@ -737,7 +738,7 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                        ]
                                ),
                                'joins' => [],
@@ -758,7 +759,7 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                                'content_size' => 'slots.rev_len',
                                                'content_sha1' => 'slots.rev_sha1',
                                                'content_address' => $db->buildConcat( [
@@ -784,7 +785,7 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                                'content_size' => 'slots.rev_len',
                                                'content_sha1' => 'slots.rev_sha1',
                                                'content_address' => $db->buildConcat( [
@@ -810,7 +811,7 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                        ]
                                ),
                                'joins' => [],
@@ -831,7 +832,7 @@ class RevisionQueryInfoTest extends MediaWikiTestCase {
                                                'slot_revision_id' => 'slots.rev_id',
                                                'slot_content_id' => 'NULL',
                                                'slot_origin' => 'slots.rev_id',
-                                               'role_name' => $db->addQuotes( 'main' ),
+                                               'role_name' => $db->addQuotes( SlotRecord::MAIN ),
                                                'content_size' => 'slots.rev_len',
                                                'content_sha1' => 'slots.rev_sha1',
                                                'content_address' =>
index 20270d0..901b800 100644 (file)
@@ -189,17 +189,18 @@ trait RevisionRecordTests {
                $rev = $this->newRevision( [ 'rev_deleted' => $visibility ] );
 
                // NOTE: slot meta-data is never suppressed, just the content is!
-               $this->assertTrue( $rev->hasSlot( 'main' ), 'hasSlot is never suppressed' );
-               $this->assertNotNull( $rev->getSlot( 'main', RevisionRecord::RAW ), 'raw meta' );
-               $this->assertNotNull( $rev->getSlot( 'main', RevisionRecord::FOR_PUBLIC ), 'public meta' );
+               $this->assertTrue( $rev->hasSlot( SlotRecord::MAIN ), 'hasSlot is never suppressed' );
+               $this->assertNotNull( $rev->getSlot( SlotRecord::MAIN, RevisionRecord::RAW ), 'raw meta' );
+               $this->assertNotNull( $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC ),
+                       'public meta' );
 
                $this->assertNotNull(
-                       $rev->getSlot( 'main', RevisionRecord::FOR_THIS_USER, $user ),
+                       $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER, $user ),
                        'user can'
                );
 
                try {
-                       $rev->getSlot( 'main', RevisionRecord::FOR_PUBLIC )->getContent();
+                       $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC )->getContent();
                        $exception = null;
                } catch ( SuppressedDataException $ex ) {
                        $exception = $ex;
@@ -212,7 +213,7 @@ trait RevisionRecordTests {
                );
 
                try {
-                       $rev->getSlot( 'main', RevisionRecord::FOR_THIS_USER, $user )->getContent();
+                       $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER, $user )->getContent();
                        $exception = null;
                } catch ( SuppressedDataException $ex ) {
                        $exception = $ex;
@@ -234,16 +235,16 @@ trait RevisionRecordTests {
                $user = $this->getTestUser( $groups )->getUser();
                $rev = $this->newRevision( [ 'rev_deleted' => $visibility ] );
 
-               $this->assertNotNull( $rev->getContent( 'main', RevisionRecord::RAW ), 'raw can' );
+               $this->assertNotNull( $rev->getContent( SlotRecord::MAIN, RevisionRecord::RAW ), 'raw can' );
 
                $this->assertSame(
                        $publicCan,
-                       $rev->getContent( 'main', RevisionRecord::FOR_PUBLIC ) !== null,
+                       $rev->getContent( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC ) !== null,
                        'public can'
                );
                $this->assertSame(
                        $userCan,
-                       $rev->getContent( 'main', RevisionRecord::FOR_THIS_USER, $user ) !== null,
+                       $rev->getContent( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER, $user ) !== null,
                        'user can'
                );
        }
@@ -251,7 +252,7 @@ trait RevisionRecordTests {
        public function testGetSlot() {
                $rev = $this->newRevision();
 
-               $slot = $rev->getSlot( 'main' );
+               $slot = $rev->getSlot( SlotRecord::MAIN );
                $this->assertNotNull( $slot, 'getSlot()' );
                $this->assertSame( 'main', $slot->getRole(), 'getRole()' );
        }
@@ -259,14 +260,14 @@ trait RevisionRecordTests {
        public function testHasSlot() {
                $rev = $this->newRevision();
 
-               $this->assertTrue( $rev->hasSlot( 'main' ) );
+               $this->assertTrue( $rev->hasSlot( SlotRecord::MAIN ) );
                $this->assertFalse( $rev->hasSlot( 'xyz' ) );
        }
 
        public function testGetContent() {
                $rev = $this->newRevision();
 
-               $content = $rev->getSlot( 'main' );
+               $content = $rev->getSlot( SlotRecord::MAIN );
                $this->assertNotNull( $content, 'getContent()' );
                $this->assertSame( CONTENT_MODEL_TEXT, $content->getModel(), 'getModel()' );
        }
@@ -379,8 +380,8 @@ trait RevisionRecordTests {
 
        public function provideHasSameContent() {
                // Create some slots with content
-               $mainA = SlotRecord::newUnsaved( 'main', new TextContent( 'A' ) );
-               $mainB = SlotRecord::newUnsaved( 'main', new TextContent( 'B' ) );
+               $mainA = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'A' ) );
+               $mainB = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'B' ) );
                $auxA = SlotRecord::newUnsaved( 'aux', new TextContent( 'A' ) );
                $auxB = SlotRecord::newUnsaved( 'aux', new TextContent( 'A' ) );
 
index 52647c2..409e002 100644 (file)
@@ -46,11 +46,11 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::getSlot
         */
        public function testGetSlot() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newUnsaved( 'aux', new WikitextContent( 'B' ) );
                $slots = $this->newRevisionSlots( [ $mainSlot, $auxSlot ] );
 
-               $this->assertSame( $mainSlot, $slots->getSlot( 'main' ) );
+               $this->assertSame( $mainSlot, $slots->getSlot( SlotRecord::MAIN ) );
                $this->assertSame( $auxSlot, $slots->getSlot( 'aux' ) );
                $this->setExpectedException( RevisionAccessException::class );
                $slots->getSlot( 'nothere' );
@@ -60,11 +60,11 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::hasSlot
         */
        public function testHasSlot() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newUnsaved( 'aux', new WikitextContent( 'B' ) );
                $slots = $this->newRevisionSlots( [ $mainSlot, $auxSlot ] );
 
-               $this->assertTrue( $slots->hasSlot( 'main' ) );
+               $this->assertTrue( $slots->hasSlot( SlotRecord::MAIN ) );
                $this->assertTrue( $slots->hasSlot( 'aux' ) );
                $this->assertFalse( $slots->hasSlot( 'AUX' ) );
                $this->assertFalse( $slots->hasSlot( 'xyz' ) );
@@ -76,11 +76,11 @@ class RevisionSlotsTest extends MediaWikiTestCase {
        public function testGetContent() {
                $mainContent = new WikitextContent( 'A' );
                $auxContent = new WikitextContent( 'B' );
-               $mainSlot = SlotRecord::newUnsaved( 'main', $mainContent );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, $mainContent );
                $auxSlot = SlotRecord::newUnsaved( 'aux', $auxContent );
                $slots = $this->newRevisionSlots( [ $mainSlot, $auxSlot ] );
 
-               $this->assertSame( $mainContent, $slots->getContent( 'main' ) );
+               $this->assertSame( $mainContent, $slots->getContent( SlotRecord::MAIN ) );
                $this->assertSame( $auxContent, $slots->getContent( 'aux' ) );
                $this->setExpectedException( RevisionAccessException::class );
                $slots->getContent( 'nothere' );
@@ -90,7 +90,7 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::getSlotRoles
         */
        public function testGetSlotRoles_someSlots() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newUnsaved( 'aux', new WikitextContent( 'B' ) );
                $slots = $this->newRevisionSlots( [ $mainSlot, $auxSlot ] );
 
@@ -110,7 +110,7 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::getSlots
         */
        public function testGetSlots() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newUnsaved( 'aux', new WikitextContent( 'B' ) );
                $slotsArray = [ $mainSlot, $auxSlot ];
                $slots = $this->newRevisionSlots( $slotsArray );
@@ -122,7 +122,7 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::getInheritedSlots
         */
        public function testGetInheritedSlots() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newInherited(
                        SlotRecord::newSaved(
                                7, 7, 'foo',
@@ -139,7 +139,7 @@ class RevisionSlotsTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\RevisionSlots::getOriginalSlots
         */
        public function testGetOriginalSlots() {
-               $mainSlot = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $mainSlot = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $auxSlot = SlotRecord::newInherited(
                        SlotRecord::newSaved(
                                7, 7, 'foo',
index 07a6971..75a4718 100644 (file)
@@ -158,25 +158,25 @@ class RevisionSlotsUpdateTest extends MediaWikiTestCase {
        public function testRemoveSlot() {
                $slots = new RevisionSlotsUpdate();
 
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->modifySlot( $slotA );
 
                $this->assertSame( [ 'main' ], $slots->getModifiedRoles() );
 
-               $slots->removeSlot( 'main' );
+               $slots->removeSlot( SlotRecord::MAIN );
                $slots->removeSlot( 'other' );
                $this->assertSame( [], $slots->getModifiedRoles() );
                $this->assertSame( [ 'main', 'other' ], $slots->getRemovedRoles() );
-               $this->assertTrue( $slots->isRemovedSlot( 'main' ) );
+               $this->assertTrue( $slots->isRemovedSlot( SlotRecord::MAIN ) );
                $this->assertTrue( $slots->isRemovedSlot( 'other' ) );
-               $this->assertFalse( $slots->isModifiedSlot( 'main' ) );
+               $this->assertFalse( $slots->isModifiedSlot( SlotRecord::MAIN ) );
 
                // removing the same slot again should not trigger an error
-               $slots->removeSlot( 'main' );
+               $slots->removeSlot( SlotRecord::MAIN );
 
                // getting a slot after removing it should fail
                $this->setExpectedException( RevisionAccessException::class );
-               $slots->getModifiedSlot( 'main' );
+               $slots->getModifiedSlot( SlotRecord::MAIN );
        }
 
        public function testGetModifiedRoles() {
@@ -184,26 +184,26 @@ class RevisionSlotsUpdateTest extends MediaWikiTestCase {
 
                $this->assertSame( [], $slots->getModifiedRoles() );
 
-               $slots->modifyContent( 'main', new WikitextContent( 'A' ) );
+               $slots->modifyContent( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->modifyContent( 'foo', new WikitextContent( 'Foo' ) );
                $this->assertSame( [ 'main', 'foo' ], $slots->getModifiedRoles() );
 
-               $slots->removeSlot( 'main' );
+               $slots->removeSlot( SlotRecord::MAIN );
                $this->assertSame( [ 'foo' ], $slots->getModifiedRoles() );
        }
 
        public function testGetRemovedRoles() {
-               $slotA = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $slotA = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots = new RevisionSlotsUpdate( [ $slotA ] );
 
                $this->assertSame( [], $slots->getRemovedRoles() );
 
-               $slots->removeSlot( 'main', new WikitextContent( 'A' ) );
+               $slots->removeSlot( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $slots->removeSlot( 'foo', new WikitextContent( 'Foo' ) );
 
                $this->assertSame( [ 'main', 'foo' ], $slots->getRemovedRoles() );
 
-               $slots->modifyContent( 'main', new WikitextContent( 'A' ) );
+               $slots->modifyContent( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $this->assertSame( [ 'foo' ], $slots->getRemovedRoles() );
        }
 
index 5497d98..04b6aa8 100644 (file)
@@ -298,9 +298,9 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
        }
 
        protected function assertRevisionCompleteness( RevisionRecord $r ) {
-               $this->assertTrue( $r->hasSlot( 'main' ) );
-               $this->assertInstanceOf( SlotRecord::class, $r->getSlot( 'main' ) );
-               $this->assertInstanceOf( Content::class, $r->getContent( 'main' ) );
+               $this->assertTrue( $r->hasSlot( SlotRecord::MAIN ) );
+               $this->assertInstanceOf( SlotRecord::class, $r->getSlot( SlotRecord::MAIN ) );
+               $this->assertInstanceOf( Content::class, $r->getContent( SlotRecord::MAIN ) );
 
                foreach ( $r->getSlotRoles() as $role ) {
                        $this->assertSlotCompleteness( $r, $r->getSlot( $role ) );
@@ -357,7 +357,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
        public function provideInsertRevisionOn_successes() {
                yield 'Bare minimum revision insertion' => [
                        [
-                               'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                               'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                                'page' => true,
                                'comment' => $this->getRandomCommentStoreComment(),
                                'timestamp' => '20171117010101',
@@ -366,7 +366,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                ];
                yield 'Detailed revision insertion' => [
                        [
-                               'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                               'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                                'parent' => true,
                                'page' => true,
                                'comment' => $this->getRandomCommentStoreComment(),
@@ -454,7 +454,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
        public function testInsertRevisionOn_blobAddressExists() {
                $title = $this->getTestPageTitle();
                $revDetails = [
-                       'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                       'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                        'parent' => true,
                        'comment' => $this->getRandomCommentStoreComment(),
                        'timestamp' => '20171117010101',
@@ -471,14 +471,14 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $this->assertRevisionRecordsEqual( $revOne, $firstReturn );
 
                // Insert a second revision inheriting the same blob address
-               $revDetails['slot'] = SlotRecord::newInherited( $firstReturn->getSlot( 'main' ) );
+               $revDetails['slot'] = SlotRecord::newInherited( $firstReturn->getSlot( SlotRecord::MAIN ) );
                $revTwo = $this->getRevisionRecordFromDetailsArray( $revDetails );
                $secondReturn = $store->insertRevisionOn( $revTwo, wfGetDB( DB_MASTER ) );
                $this->assertLinkTargetsEqual( $title, $secondReturn->getPageAsLinkTarget() );
                $this->assertRevisionRecordsEqual( $revTwo, $secondReturn );
 
-               $firstMainSlot = $firstReturn->getSlot( 'main' );
-               $secondMainSlot = $secondReturn->getSlot( 'main' );
+               $firstMainSlot = $firstReturn->getSlot( SlotRecord::MAIN );
+               $secondMainSlot = $secondReturn->getSlot( SlotRecord::MAIN );
 
                $this->assertSameSlotContent( $firstMainSlot, $secondMainSlot );
 
@@ -510,7 +510,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                ];
                yield 'no timestamp' => [
                        [
-                               'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                               'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                                'comment' => $this->getRandomCommentStoreComment(),
                                'user' => true,
                        ],
@@ -518,7 +518,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                ];
                yield 'no comment' => [
                        [
-                               'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                               'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                                'timestamp' => '20171117010101',
                                'user' => true,
                        ],
@@ -526,7 +526,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                ];
                yield 'no user' => [
                        [
-                               'slot' => SlotRecord::newUnsaved( 'main', new WikitextContent( 'Chicken' ) ),
+                               'slot' => SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'Chicken' ) ),
                                'comment' => $this->getRandomCommentStoreComment(),
                                'timestamp' => '20171117010101',
                        ],
@@ -717,7 +717,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $revRecord = $store->getRevisionById( $rev->getId() );
 
                $this->assertSame( $rev->getId(), $revRecord->getId() );
-               $this->assertTrue( $revRecord->getSlot( 'main' )->getContent()->equals( $content ) );
+               $this->assertTrue( $revRecord->getSlot( SlotRecord::MAIN )->getContent()->equals( $content ) );
                $this->assertSame( __METHOD__, $revRecord->getComment()->text );
        }
 
@@ -735,7 +735,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $revRecord = $store->getRevisionByTitle( $page->getTitle() );
 
                $this->assertSame( $rev->getId(), $revRecord->getId() );
-               $this->assertTrue( $revRecord->getSlot( 'main' )->getContent()->equals( $content ) );
+               $this->assertTrue( $revRecord->getSlot( SlotRecord::MAIN )->getContent()->equals( $content ) );
                $this->assertSame( __METHOD__, $revRecord->getComment()->text );
        }
 
@@ -753,7 +753,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $revRecord = $store->getRevisionByPageId( $page->getId() );
 
                $this->assertSame( $rev->getId(), $revRecord->getId() );
-               $this->assertTrue( $revRecord->getSlot( 'main' )->getContent()->equals( $content ) );
+               $this->assertTrue( $revRecord->getSlot( SlotRecord::MAIN )->getContent()->equals( $content ) );
                $this->assertSame( __METHOD__, $revRecord->getComment()->text );
        }
 
@@ -778,7 +778,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                );
 
                $this->assertSame( $rev->getId(), $revRecord->getId() );
-               $this->assertTrue( $revRecord->getSlot( 'main' )->getContent()->equals( $content ) );
+               $this->assertTrue( $revRecord->getSlot( SlotRecord::MAIN )->getContent()->equals( $content ) );
                $this->assertSame( __METHOD__, $revRecord->getComment()->text );
        }
 
@@ -856,13 +856,14 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $this->assertSame( $expectedParent, $record->getParentId() );
                $this->assertSame( $rev->getSha1(), $record->getSha1() );
                $this->assertSame( $rev->getComment(), $record->getComment()->text );
-               $this->assertSame( $rev->getContentFormat(), $record->getContent( 'main' )->getDefaultFormat() );
-               $this->assertSame( $rev->getContentModel(), $record->getContent( 'main' )->getModel() );
+               $this->assertSame( $rev->getContentFormat(),
+                       $record->getContent( SlotRecord::MAIN )->getDefaultFormat() );
+               $this->assertSame( $rev->getContentModel(), $record->getContent( SlotRecord::MAIN )->getModel() );
                $this->assertLinkTargetsEqual( $rev->getTitle(), $record->getPageAsLinkTarget() );
 
                $revRec = $rev->getRevisionRecord();
-               $revMain = $revRec->getSlot( 'main' );
-               $recMain = $record->getSlot( 'main' );
+               $revMain = $revRec->getSlot( SlotRecord::MAIN );
+               $recMain = $record->getSlot( SlotRecord::MAIN );
 
                $this->assertSame( $revMain->hasOrigin(), $recMain->hasOrigin(), 'hasOrigin' );
                $this->assertSame( $revMain->hasAddress(), $recMain->hasAddress(), 'hasAddress' );
@@ -1011,7 +1012,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $record = $store->newRevisionFromArchiveRow( $row );
 
                $this->assertRevisionRecordMatchesRevision( $orig, $record );
-               $this->assertSame( $text, $record->getContent( 'main' )->serialize() );
+               $this->assertSame( $text, $record->getContent( SlotRecord::MAIN )->serialize() );
        }
 
        /**
@@ -1042,7 +1043,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $record = $store->newRevisionFromArchiveRow( $row );
 
                $this->assertRevisionRecordMatchesRevision( $orig, $record );
-               $this->assertSame( $text, $record->getContent( 'main' )->serialize() );
+               $this->assertSame( $text, $record->getContent( SlotRecord::MAIN )->serialize() );
        }
 
        /**
@@ -1165,8 +1166,8 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $this->assertRevisionRecordsEqual( $record, $restored );
 
                // does the new revision use the original slot?
-               $recMain = $record->getSlot( 'main' );
-               $restMain = $restored->getSlot( 'main' );
+               $recMain = $record->getSlot( SlotRecord::MAIN );
+               $restMain = $restored->getSlot( SlotRecord::MAIN );
                $this->assertSame( $recMain->getAddress(), $restMain->getAddress() );
                $this->assertSame( $recMain->getContentId(), $restMain->getContentId() );
                $this->assertSame( $recMain->getOrigin(), $restMain->getOrigin() );
@@ -1621,13 +1622,14 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                                );
                        }
                } elseif ( isset( $array['text'] ) ) {
-                       $this->assertSame( $array['text'], $result->getSlot( 'main' )->getContent()->serialize() );
+                       $this->assertSame( $array['text'],
+                               $result->getSlot( SlotRecord::MAIN )->getContent()->serialize() );
                } elseif ( isset( $array['content_format'] ) ) {
                        $this->assertSame(
                                $array['content_format'],
-                               $result->getSlot( 'main' )->getContent()->getDefaultFormat()
+                               $result->getSlot( SlotRecord::MAIN )->getContent()->getDefaultFormat()
                        );
-                       $this->assertSame( $array['content_model'], $result->getSlot( 'main' )->getModel() );
+                       $this->assertSame( $array['content_model'], $result->getSlot( SlotRecord::MAIN )->getModel() );
                }
        }
 
index 1d6a9a0..12d950c 100644 (file)
@@ -34,7 +34,7 @@ class RevisionStoreRecordTest extends MediaWikiTestCase {
                $user = new UserIdentityValue( 11, 'Tester', 0 );
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
@@ -62,7 +62,7 @@ class RevisionStoreRecordTest extends MediaWikiTestCase {
                $user = new UserIdentityValue( 11, 'Tester', 0 );
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
@@ -220,7 +220,7 @@ class RevisionStoreRecordTest extends MediaWikiTestCase {
 
                $comment = CommentStoreComment::newUnsavedComment( 'Hello World' );
 
-               $main = SlotRecord::newUnsaved( 'main', new TextContent( 'Lorem Ipsum' ) );
+               $main = SlotRecord::newUnsaved( SlotRecord::MAIN, new TextContent( 'Lorem Ipsum' ) );
                $aux = SlotRecord::newUnsaved( 'aux', new TextContent( 'Frumious Bandersnatch' ) );
                $slots = new RevisionSlots( [ $main, $aux ] );
 
@@ -347,19 +347,20 @@ class RevisionStoreRecordTest extends MediaWikiTestCase {
                );
 
                // NOTE: slot meta-data is never suppressed, just the content is!
-               $this->assertNotNull( $rev->getSlot( 'main', RevisionRecord::RAW ), 'raw can' );
-               $this->assertNotNull( $rev->getSlot( 'main', RevisionRecord::FOR_PUBLIC ), 'public can' );
+               $this->assertNotNull( $rev->getSlot( SlotRecord::MAIN, RevisionRecord::RAW ), 'raw can' );
+               $this->assertNotNull( $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC ),
+                       'public can' );
 
                $this->assertNotNull(
-                       $rev->getSlot( 'main', RevisionRecord::FOR_THIS_USER, $user ),
+                       $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER, $user ),
                        'user can'
                );
 
-               $rev->getSlot( 'main', RevisionRecord::RAW )->getContent();
+               $rev->getSlot( SlotRecord::MAIN, RevisionRecord::RAW )->getContent();
                // NOTE: the content of the current revision is never suppressed!
                // Check that getContent() doesn't throw SuppressedDataException
-               $rev->getSlot( 'main', RevisionRecord::FOR_PUBLIC )->getContent();
-               $rev->getSlot( 'main', RevisionRecord::FOR_THIS_USER, $user )->getContent();
+               $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_PUBLIC )->getContent();
+               $rev->getSlot( SlotRecord::MAIN, RevisionRecord::FOR_THIS_USER, $user )->getContent();
        }
 
 }
index aac94b8..2ed6f28 100644 (file)
@@ -9,6 +9,7 @@ use Language;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\RevisionAccessException;
 use MediaWiki\Storage\RevisionStore;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\Storage\SqlBlobStore;
 use MediaWikiTestCase;
 use MWException;
@@ -436,7 +437,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        Title::newFromText( __METHOD__ . '-UTPage' )
                );
 
-               $this->assertSame( $text, $record->getContent( 'main' )->serialize() );
+               $this->assertSame( $text, $record->getContent( SlotRecord::MAIN )->serialize() );
        }
 
        /**
@@ -465,7 +466,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        0,
                        Title::newFromText( __METHOD__ . '-UTPage' )
                );
-               $this->assertSame( 'Söme Content', $record->getContent( 'main' )->serialize() );
+               $this->assertSame( 'Söme Content', $record->getContent( SlotRecord::MAIN )->serialize() );
        }
 
        private function makeRow( array $array ) {
index 1aae16d..0db294e 100644 (file)
@@ -118,21 +118,21 @@ class SlotRecordTest extends MediaWikiTestCase {
        }
 
        public function testGetContentId_fails() {
-               $record = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $record = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $this->setExpectedException( IncompleteRevisionException::class );
 
                $record->getContentId();
        }
 
        public function testGetAddress_fails() {
-               $record = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $record = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $this->setExpectedException( IncompleteRevisionException::class );
 
                $record->getAddress();
        }
 
        public function provideIncomplete() {
-               $unsaved = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $unsaved = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                yield 'unsaved' => [ $unsaved ];
 
                $parent = new SlotRecord( $this->makeRow(), new WikitextContent( 'A' ) );
@@ -144,7 +144,7 @@ class SlotRecordTest extends MediaWikiTestCase {
         * @dataProvider provideIncomplete
         */
        public function testGetRevision_fails( SlotRecord $record ) {
-               $record = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $record = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $this->setExpectedException( IncompleteRevisionException::class );
 
                $record->getRevision();
@@ -154,7 +154,7 @@ class SlotRecordTest extends MediaWikiTestCase {
         * @dataProvider provideIncomplete
         */
        public function testGetOrigin_fails( SlotRecord $record ) {
-               $record = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $record = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
                $this->setExpectedException( IncompleteRevisionException::class );
 
                $record->getOrigin();
@@ -173,7 +173,7 @@ class SlotRecordTest extends MediaWikiTestCase {
 
                $this->assertSame( $hash, SlotRecord::base36Sha1( $text ) );
 
-               $record = SlotRecord::newUnsaved( 'main', new WikitextContent( $text ) );
+               $record = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( $text ) );
                $this->assertSame( $hash, $record->getSha1() );
        }
 
@@ -225,7 +225,7 @@ class SlotRecordTest extends MediaWikiTestCase {
 
        public function testNewSaved() {
                // This would happen while doing an edit, before saving revision meta-data.
-               $unsaved = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $unsaved = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
 
                // This would happen while doing an edit, after saving the revision meta-data
                // and content meta-data.
@@ -285,7 +285,7 @@ class SlotRecordTest extends MediaWikiTestCase {
        }
 
        public function provideNewSaved_InvalidArgumentException() {
-               $unsaved = SlotRecord::newUnsaved( 'main', new WikitextContent( 'A' ) );
+               $unsaved = SlotRecord::newUnsaved( SlotRecord::MAIN, new WikitextContent( 'A' ) );
 
                yield 'bad revision id' => [ 'xyzzy', 5, 'address', $unsaved ];
                yield 'bad content id' => [ 7, 'xyzzy', 'address', $unsaved ];
index 6532635..8e2c6d9 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * @group medium
@@ -93,7 +94,7 @@ class ApiQueryWatchlistIntegrationTest extends ApiTestCase {
                $page = WikiPage::factory( $title );
 
                $updater = $page->newPageUpdater( $user );
-               $updater->setContent( 'main', ContentHandler::makeContent( $content, $title ) );
+               $updater->setContent( SlotRecord::MAIN, ContentHandler::makeContent( $content, $title ) );
                $rev = $updater->saveRevision( $summary );
 
                $rc = MediaWikiServices::getInstance()->getRevisionStore()->getRecentChange( $rev );
index 806038a..e469f12 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\SlotRenderingProvider;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * @group ContentHandler
@@ -373,7 +374,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
                $srp = $this->getMock( SlotRenderingProvider::class );
 
                $handler = new WikitextContentHandler();
-               $updates = $handler->getSecondaryDataUpdates( $title, $content, 'main', $srp );
+               $updates = $handler->getSecondaryDataUpdates( $title, $content, SlotRecord::MAIN, $srp );
 
                $this->assertEquals( [], $updates );
        }
@@ -385,7 +386,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
                $srp = $this->getMock( SlotRenderingProvider::class );
 
                $handler = new WikitextContentHandler();
-               $updates = $handler->getDeletionUpdates( $title, 'main' );
+               $updates = $handler->getDeletionUpdates( $title, SlotRecord::MAIN );
 
                $this->assertEquals( [], $updates );
        }
index 07d02dd..e21ac3b 100644 (file)
@@ -216,9 +216,9 @@ class DifferenceEngineTest extends MediaWikiTestCase {
        }
 
        public function testSetRevisions() {
-               $main1 = SlotRecord::newUnsaved( 'main',
+               $main1 = SlotRecord::newUnsaved( SlotRecord::MAIN,
                        ContentHandler::makeContent( 'xxx', null, CONTENT_MODEL_TEXT ) );
-               $main2 = SlotRecord::newUnsaved( 'main',
+               $main2 = SlotRecord::newUnsaved( SlotRecord::MAIN,
                        ContentHandler::makeContent( 'yyy', null, CONTENT_MODEL_TEXT ) );
                $rev1 = $this->getRevisionRecord( $main1 );
                $rev2 = $this->getRevisionRecord( $main2 );
@@ -260,9 +260,9 @@ class DifferenceEngineTest extends MediaWikiTestCase {
        }
 
        public function provideGetDiffBody() {
-               $main1 = SlotRecord::newUnsaved( 'main',
+               $main1 = SlotRecord::newUnsaved( SlotRecord::MAIN,
                        ContentHandler::makeContent( 'xxx', null, CONTENT_MODEL_TEXT ) );
-               $main2 = SlotRecord::newUnsaved( 'main',
+               $main2 = SlotRecord::newUnsaved( SlotRecord::MAIN,
                        ContentHandler::makeContent( 'yyy', null, CONTENT_MODEL_TEXT ) );
                $slot1 = SlotRecord::newUnsaved( 'slot',
                        ContentHandler::makeContent( 'aaa', null, CONTENT_MODEL_TEXT ) );
index 68cddd6..d07a9e1 100644 (file)
@@ -2,6 +2,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 use PHPUnit\Framework\MockObject\MockObject;
 
 /**
@@ -43,7 +44,7 @@ class ArticleViewTest extends MediaWikiTestCase {
                        }
 
                        $u = $page->newPageUpdater( $user );
-                       $u->setContent( 'main', $cont );
+                       $u->setContent( SlotRecord::MAIN, $cont );
                        $rev = $u->saveRevision( CommentStoreComment::newUnsavedComment( 'Rev ' . $key ) );
 
                        $revisions[ $key ] = $rev;
@@ -201,7 +202,7 @@ class ArticleViewTest extends MediaWikiTestCase {
                $rev->setComment( $dummyRev->getComment() );
                $rev->setTimestamp( $dummyRev->getTimestamp() );
 
-               $rev->setContent( 'main', $content );
+               $rev->setContent( SlotRecord::MAIN, $content );
 
                $rev = new Revision( $rev );
 
@@ -453,7 +454,7 @@ class ArticleViewTest extends MediaWikiTestCase {
                $this->setTemporaryHook(
                        'ArticleRevisionViewCustom',
                        function ( RevisionRecord $rev, Title $title, $oldid, OutputPage $output ) use ( $page ) {
-                               $content = $rev->getContent( 'main' );
+                               $content = $rev->getContent( SlotRecord::MAIN );
 
                                $this->assertSame( $page->getTitle(), $title, '$title' );
                                $this->assertSame( 'Test A', $content->getNativeData(), '$content' );
index 6757e78..476d5c2 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\Storage\SqlBlobStore;
 use MediaWiki\Tests\Storage\PreMcrSchemaOverride;
 
@@ -27,7 +28,7 @@ class PageArchivePreMcrTest extends PageArchiveTestBase {
                $blobStore = MediaWikiServices::getInstance()->getBlobStore();
 
                $textId = $blobStore->getTextIdFromAddress(
-                       $this->firstRev->getSlot( 'main' )->getAddress()
+                       $this->firstRev->getSlot( SlotRecord::MAIN )->getAddress()
                );
 
                $row = (object)[ 'ar_text_id' => $textId ];
@@ -61,7 +62,7 @@ class PageArchivePreMcrTest extends PageArchiveTestBase {
                                'ar_namespace' => '0',
                                'ar_title' => 'PageArchiveTest_thePage',
                                'ar_text_id' => (string)$blobStore->getTextIdFromAddress(
-                                       $this->ipRev->getSlot( 'main' )->getAddress()
+                                       $this->ipRev->getSlot( SlotRecord::MAIN )->getAddress()
                                ),
                                'ar_parent_id' => strval( $this->ipRev->getParentId() ),
                        ],
@@ -86,7 +87,7 @@ class PageArchivePreMcrTest extends PageArchiveTestBase {
                                'ar_namespace' => '0',
                                'ar_title' => 'PageArchiveTest_thePage',
                                'ar_text_id' => (string)$blobStore->getTextIdFromAddress(
-                                       $this->firstRev->getSlot( 'main' )->getAddress()
+                                       $this->firstRev->getSlot( SlotRecord::MAIN )->getAddress()
                                ),
                                'ar_parent_id' => '0',
                        ],
index 4cb2b47..67cbf58 100644 (file)
@@ -3,6 +3,7 @@
 use MediaWiki\Edit\PreparedEdit;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\RevisionSlotsUpdate;
+use MediaWiki\Storage\SlotRecord;
 use PHPUnit\Framework\MockObject\MockObject;
 use Wikimedia\TestingAccessWrapper;
 
@@ -1232,7 +1233,7 @@ more stuff
                );
 
                // TODO: MCR: assert origin once we write slot data
-               // $mainSlot = $page->getRevision()->getRevisionRecord()->getSlot( 'main' );
+               // $mainSlot = $page->getRevision()->getRevisionRecord()->getSlot( SlotRecord::MAIN );
                // $this->assertTrue( $mainSlot->isInherited(), 'isInherited' );
                // $this->assertSame( $rev2->getId(), $mainSlot->getOrigin(), 'getOrigin' );
        }
@@ -2416,10 +2417,10 @@ more stuff
 
                // provide context, so the cache can be kept in place
                $slotsUpdate = new revisionSlotsUpdate();
-               $slotsUpdate->modifyContent( 'main', $content );
+               $slotsUpdate->modifyContent( SlotRecord::MAIN, $content );
 
                $updater = $page->newPageUpdater( $user, $slotsUpdate );
-               $updater->setContent( 'main', $content );
+               $updater->setContent( SlotRecord::MAIN, $content );
                $revision = $updater->saveRevision(
                        CommentStoreComment::newUnsavedComment( 'test' ),
                        EDIT_NEW
@@ -2448,7 +2449,7 @@ more stuff
                $user = $revision->getUser();
 
                $slotsUpdate = new RevisionSlotsUpdate();
-               $slotsUpdate->modifyContent( 'main', new WikitextContent( 'Hello World' ) );
+               $slotsUpdate->modifyContent( SlotRecord::MAIN, new WikitextContent( 'Hello World' ) );
 
                // get a virgin updater
                $updater1 = $page->getDerivedDataUpdater( $user );
@@ -2460,7 +2461,7 @@ more stuff
                $this->assertSame( $updater1, $page->getDerivedDataUpdater( $user, $revision ) );
 
                $slotsUpdate = RevisionSlotsUpdate::newFromContent(
-                       [ 'main' => $revision->getContent( 'main' ) ]
+                       [ SlotRecord::MAIN => $revision->getContent( SlotRecord::MAIN ) ]
                );
                $this->assertSame( $updater1, $page->getDerivedDataUpdater( $user, null, $slotsUpdate ) );
 
index 1427f01..3e857f0 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionStore;
+use MediaWiki\Storage\SlotRecord;
 use MediaWiki\User\UserIdentityValue;
 
 /**
@@ -235,7 +236,7 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $oldRevision->setId( 100 );
                $oldRevision->setUser( new UserIdentityValue( 7, 'FauxAuthor', 0 ) );
                $oldRevision->setTimestamp( '20141111111111' );
-               $oldRevision->setContent( 'main', new WikitextContent( 'FAUX' ) );
+               $oldRevision->setContent( SlotRecord::MAIN, new WikitextContent( 'FAUX' ) );
 
                $po = new ParserOptions( $frank );
                $po->setCurrentRevisionCallback( function () use ( $oldRevision ) {
@@ -263,7 +264,7 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $newRevision = new MutableRevisionRecord( $title );
                $newRevision->setUser( new UserIdentityValue( 9, 'NewAuthor', 0 ) );
                $newRevision->setTimestamp( '20180808000000' );
-               $newRevision->setContent( 'main', new WikitextContent( 'NEW' ) );
+               $newRevision->setContent( SlotRecord::MAIN, new WikitextContent( 'NEW' ) );
 
                $po = new ParserOptions( $frank );
                $po->setIsPreview( true );
@@ -298,7 +299,7 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $newRevision = new MutableRevisionRecord( $title );
                $newRevision->setUser( new UserIdentityValue( 9, 'NewAuthor', 0 ) );
                $newRevision->setTimestamp( '20180808000000' );
-               $newRevision->setContent( 'main', new WikitextContent( $text ) );
+               $newRevision->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
 
                $po = new ParserOptions( $frank );
                $po->setIsPreview( true );
@@ -329,13 +330,13 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                $oldRevision->setId( 100 );
                $oldRevision->setUser( new UserIdentityValue( 7, 'OldAuthor', 0 ) );
                $oldRevision->setTimestamp( '20140404000000' );
-               $oldRevision->setContent( 'main', new WikitextContent( 'OLD' ) );
+               $oldRevision->setContent( SlotRecord::MAIN, new WikitextContent( 'OLD' ) );
 
                $currentRevision = new MutableRevisionRecord( $title );
                $currentRevision->setId( 200 );
                $currentRevision->setUser( new UserIdentityValue( 9, 'CurrentAuthor', 0 ) );
                $currentRevision->setTimestamp( '20160606000000' );
-               $currentRevision->setContent( 'main', new WikitextContent( 'CURRENT' ) );
+               $currentRevision->setContent( SlotRecord::MAIN, new WikitextContent( 'CURRENT' ) );
 
                $revisionStore = $this->getMockBuilder( RevisionStore::class )
                        ->disableOriginalConstructor()
index c6b9dee..a0beb45 100644 (file)
@@ -2,6 +2,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\MutableRevisionRecord;
 use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Storage\SlotRecord;
 
 /**
  * @covers PoolWorkArticleView
@@ -13,7 +14,7 @@ class PoolWorkArticleViewTest extends MediaWikiTestCase {
                $user = $this->getTestUser()->getUser();
                $updater = $page->newPageUpdater( $user );
 
-               $updater->setContent( 'main', new WikitextContent( $text ) );
+               $updater->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
                return $updater->saveRevision( CommentStoreComment::newUnsavedComment( 'testing' ) );
        }
 
@@ -57,7 +58,7 @@ class PoolWorkArticleViewTest extends MediaWikiTestCase {
                $fakeRev = new MutableRevisionRecord( $page->getTitle() );
                $fakeRev->setId( $rev->getId() );
                $fakeRev->setPageId( $page->getId() );
-               $fakeRev->setContent( 'main', new WikitextContent( 'YES!' ) );
+               $fakeRev->setContent( SlotRecord::MAIN, new WikitextContent( 'YES!' ) );
 
                $work = new PoolWorkArticleView( $page, $options, $rev->getId(), false, $fakeRev );
                $work->execute();
@@ -157,7 +158,7 @@ class PoolWorkArticleViewTest extends MediaWikiTestCase {
                $fakeRev = new MutableRevisionRecord( $page->getTitle() );
                $fakeRev->setId( $rev1->getId() );
                $fakeRev->setPageId( $page->getId() );
-               $fakeRev->setContent( 'main', new WikitextContent( 'SECRET' ) );
+               $fakeRev->setContent( SlotRecord::MAIN, new WikitextContent( 'SECRET' ) );
                $fakeRev->setVisibility( RevisionRecord::DELETED_TEXT );
 
                $work = new PoolWorkArticleView( $page, $options, $rev1->getId(), false, $fakeRev );