Merge "Allow logging arbitrary extra data in MWExceptionHandler::logException"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 17 Sep 2019 12:54:18 +0000 (12:54 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 17 Sep 2019 12:54:18 +0000 (12:54 +0000)
258 files changed:
.phan/config.php
.travis.yml
CODE_OF_CONDUCT.md
INSTALL
RELEASE-NOTES-1.34
autoload.php
docs/hooks.txt
includes/DefaultSettings.php
includes/EditPage.php
includes/FeedUtils.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MergeHistory.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/ProtectionForm.php
includes/Revision/RevisionStoreFactory.php
includes/ServiceWiring.php
includes/Setup.php
includes/Status.php
includes/Storage/SqlBlobStore.php
includes/StreamFile.php
includes/Title.php
includes/WebRequest.php
includes/actions/Action.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/McrUndoAction.php
includes/actions/RawAction.php
includes/actions/RollbackAction.php
includes/actions/SpecialPageAction.php
includes/api/ApiComparePages.php
includes/api/ApiEditPage.php
includes/api/ApiFormatXmlRsd.php
includes/api/ApiHelpParamValueMessage.php
includes/api/ApiImageRotate.php
includes/api/ApiParse.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/ko.json
includes/api/i18n/mk.json
includes/api/i18n/pl.json
includes/api/i18n/qqq.json
includes/block/BlockManager.php
includes/changes/CategoryMembershipChange.php
includes/changes/ChangesFeed.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/RCCacheEntryFactory.php
includes/changetags/ChangeTagsLogItem.php
includes/clientpool/SquidPurgeClient.php
includes/collation/CustomUppercaseCollation.php
includes/content/ContentHandler.php
includes/debug/logger/ConsoleLogger.php
includes/deferred/CdnCacheUpdate.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/export/DumpMultiWriter.php
includes/export/WikiExporter.php
includes/filerepo/FileRepo.php
includes/filerepo/file/ArchivedFile.php
includes/filerepo/file/LocalFileDeleteBatch.php
includes/filerepo/file/LocalFileMoveBatch.php
includes/gallery/ImageGalleryBase.php
includes/historyblob/ConcatenatedGzipHistoryBlob.php
includes/historyblob/HistoryBlobCurStub.php
includes/historyblob/HistoryBlobStub.php
includes/htmlform/HTMLFormField.php
includes/htmlform/fields/HTMLSelectAndOtherField.php
includes/http/MWCallbackStream.php
includes/import/ImportStreamSource.php
includes/import/ImportStringSource.php
includes/import/WikiImporter.php
includes/installer/InstallDocFormatter.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/i18n/be-tarask.json
includes/installer/i18n/io.json
includes/libs/MemoizedCallable.php
includes/libs/composer/ComposerInstalled.php
includes/libs/composer/ComposerJson.php
includes/libs/composer/ComposerLock.php
includes/libs/filebackend/FSFileBackend.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/filebackend/fileophandle/SwiftFileOpHandle.php
includes/libs/lockmanager/QuorumLockManager.php
includes/libs/mime/XmlTypeCheck.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/objectcache/ReplicatedBagOStuff.php
includes/libs/rdbms/lbfactory/LBFactoryMulti.php
includes/logging/DeleteLogFormatter.php
includes/logging/LogPager.php
includes/mail/UserMailer.php
includes/media/DjVuHandler.php
includes/media/DjVuImage.php
includes/objectcache/ObjectCache.php
includes/page/Article.php
includes/page/PageArchive.php
includes/page/WikiFilePage.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/preferences/DefaultPreferencesFactory.php
includes/profiler/SectionProfiler.php
includes/resourceloader/DerivativeResourceLoaderContext.php
includes/resourceloader/MessageBlobStore.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderCircularDependencyError.php
includes/resourceloader/ResourceLoaderClientHtml.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderFilePath.php
includes/resourceloader/ResourceLoaderForeignApiModule.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderLessVarFileModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderOOUIFileModule.php
includes/resourceloader/ResourceLoaderOOUIIconPackModule.php
includes/resourceloader/ResourceLoaderOOUIModule.php
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderSiteStylesModule.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserDefaultsModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserStylesModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevDelArchivedFileItem.php
includes/revisiondelete/RevDelFileItem.php
includes/revisiondelete/RevDelList.php
includes/revisiondelete/RevDelLogItem.php
includes/revisiondelete/RevDelLogList.php
includes/revisiondelete/RevDelRevisionItem.php
includes/revisiondelete/RevDelRevisionList.php
includes/revisiondelete/RevisionDeleteUser.php
includes/revisiondelete/RevisionDeleter.php
includes/revisionlist/RevisionItem.php
includes/site/MediaWikiSite.php
includes/site/Site.php
includes/skins/BaseTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialRevisionDelete.php
includes/specials/SpecialTags.php
includes/specials/forms/PreferencesFormOOUI.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/DeletedContribsPager.php
includes/title/MediaWikiTitleCodec.php
includes/user/User.php
includes/utils/AvroValidator.php
includes/watcheditem/WatchedItemQueryService.php
languages/LanguageConverter.php
languages/data/Names.php
languages/data/ZhConversion.php
languages/i18n/ar.json
languages/i18n/awa.json
languages/i18n/ban.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dty.json
languages/i18n/en.json
languages/i18n/exif/nds-nl.json
languages/i18n/exif/sr-ec.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gv.json
languages/i18n/he.json
languages/i18n/hu.json
languages/i18n/io.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kiu.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lzh.json
languages/i18n/min.json
languages/i18n/my.json
languages/i18n/nap.json
languages/i18n/nds-nl.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nqo.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sl.json
languages/i18n/sv.json
languages/i18n/szl.json
languages/i18n/tt-cyrl.json
languages/i18n/zh-hant.json
languages/i18n/zh-hk.json
maintenance/Doxyfile
maintenance/archives/upgradeLogging.php
maintenance/cleanupRevActorPage.php [new file with mode: 0644]
maintenance/cleanupSpam.php
maintenance/findDeprecated.php
maintenance/getText.php
maintenance/language/zhtable/simp2trad.manual
maintenance/language/zhtable/simp2trad_noconvert.manual
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/mwdocgen.php
maintenance/populateRevisionLength.php
maintenance/preprocessDump.php
maintenance/refreshLinks.php
maintenance/userDupes.inc
resources/Resources.php
resources/src/jquery/jquery.checkboxShiftClick.js [deleted file]
resources/src/mediawiki.ForeignApi.core.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.page.ready.js [deleted file]
resources/src/mediawiki.page.ready/.eslintrc.json [new file with mode: 0644]
resources/src/mediawiki.page.ready/checkboxShift.js [new file with mode: 0644]
resources/src/mediawiki.page.ready/ready.js [new file with mode: 0644]
tests/phpunit/MediaWikiIntegrationTestCase.php
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/Revision/RevisionStoreFactoryTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiQuerySiteinfoTest.php
tests/phpunit/includes/block/BlockManagerTest.php
tests/phpunit/includes/deferred/LinksUpdateTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php
tests/phpunit/includes/watcheditem/WatchedItemQueryServiceUnitTest.php
tests/phpunit/maintenance/MWDoxygenFilterTest.php
tests/phpunit/maintenance/fetchTextTest.php
tests/qunit/suites/resources/mediawiki.api/mediawiki.ForeignApi.test.js
tests/selenium/wdio-mediawiki/Api.js
thumb.php

index fc775fe..56a8ccb 100644 (file)
@@ -104,8 +104,6 @@ $cfg['suppress_issue_types'] = array_merge( $cfg['suppress_issue_types'], [
 
        // approximate error count: 45
        "PhanTypeMismatchArgument",
-       // approximate error count: 693
-       "PhanUndeclaredProperty",
 ] );
 
 // This helps a lot in discovering bad code, but unfortunately it will always fail for
@@ -113,6 +111,10 @@ $cfg['suppress_issue_types'] = array_merge( $cfg['suppress_issue_types'], [
 // @todo Enable when the issue above is resolved and we update our config!
 $cfg['redundant_condition_detection'] = false;
 
+// Do not use aliases in core.
+// Use the correct name, because we don't need backward compatibility
+$cfg['enable_class_alias_support'] = false;
+
 $cfg['ignore_undeclared_variables_in_global_scope'] = true;
 // @todo It'd be great if we could just make phan read these from DefaultSettings, to avoid
 // duplicating the types.
index d5607f1..8dbc5f2 100644 (file)
@@ -26,8 +26,6 @@ matrix:
   include:
     - php: 7.3
     - php: 7.2
-    - php: 7.1
-    - php: 7
 
 services:
   - mysql
index 498acf7..3d9f26a 100644 (file)
@@ -1 +1,4 @@
+Code of Conduct
+===============
+
 The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct).
diff --git a/INSTALL b/INSTALL
index 07dd9c3..0359166 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -7,7 +7,7 @@ Starting with MediaWiki 1.2.0, it's possible to install and configure the wiki
 
 Required software as of MediaWiki 1.34.0:
 
-* Web server with PHP 7.0.13 or higher, plus the following extesnsions:
+* Web server with PHP 7.2.0 or higher, plus the following extesnsions:
 ** ctype
 ** dom
 ** fileinfo
index 07f52d0..09f5346 100644 (file)
@@ -303,6 +303,8 @@ because of Phabricator reports.
 * mw.language.specialCharacters, deprecated in 1.33, has been removed.
   Use require( 'mediawiki.language.specialCharacters' ) instead.
 * The jquery.colorUtil module was removed. Use jquery.color instead.
+* The jquery.checkboxShiftClick module was removed. The functionality
+  is provided by mediawiki.page.ready instead (T232688).
 * EditPage::submit(), deprecated in 1.29, has been removed. Use $this->edit()
   directly.
 * HTMLForm::getErrors(), deprecated in 1.28, has been removed. Use
@@ -429,6 +431,9 @@ because of Phabricator reports.
   * Revision::selectTextFields()
   * Revision::selectPageFields()
   * Revision::selectUserFields()
+* User::setNewpassword(), deprecated in 1.27 has been removed.
+* The ObjectCache::getMainWANInstance and ObjectCache::getMainStashInstance
+  functions, deprecated since 1.28, have been removed.
 
 === Deprecations in 1.34 ===
 * The MWNamespace class is deprecated. Use NamespaceInfo.
@@ -564,13 +569,19 @@ because of Phabricator reports.
 * The GetBlockedStatus hook is deprecated. Use GetUserBlock instead, to add or
   remove a block.
 * $wgContentHandlerUseDB is deprecated and should always be true.
+* StreamFile::send404Message() and StreamFile::parseRange() are now deprecated.
+  Use HTTPFileStreamer::send404Message() and HTTPFileStreamer::parseRange()
+  respectively instead.
+* Global variable $wgSysopEmailBans is deprecated; to allow sysops to ban
+  users from sending emails, use
+  $wgGroupPermissions['sysop']['blockemail'] = true;
 
 === Other changes in 1.34 ===
 * …
 
 == Compatibility ==
-MediaWiki 1.34 requires PHP 7.0.13 or later. Although HHVM 3.18.5 or later is
-supported, it is generally advised to use PHP 7.0.13 or later for long term
+MediaWiki 1.34 requires PHP 7.2.0 or later. Although HHVM 3.18.5 or later is
+supported, it is generally advised to use PHP 7.2.0 or later for long term
 support. It also requires the following PHP extensions:
 
 * ctype
index f95e001..48d5b30 100644 (file)
@@ -272,6 +272,7 @@ $wgAutoloadLocalClasses = [
        'CleanupInvalidDbKeys' => __DIR__ . '/maintenance/cleanupInvalidDbKeys.php',
        'CleanupPreferences' => __DIR__ . '/maintenance/cleanupPreferences.php',
        'CleanupRemovedModules' => __DIR__ . '/maintenance/cleanupRemovedModules.php',
+       'CleanupRevActorPage' => __DIR__ . '/maintenance/cleanupRevActorPage.php',
        'CleanupSpam' => __DIR__ . '/maintenance/cleanupSpam.php',
        'CleanupUploadStash' => __DIR__ . '/maintenance/cleanupUploadStash.php',
        'CleanupUsersWithNoId' => __DIR__ . '/maintenance/cleanupUsersWithNoId.php',
index 43bfd8d..55ba06e 100644 (file)
@@ -2921,7 +2921,7 @@ result augmentors.
 Note that lists should be in the format name => object and the names in both
   lists should be distinct.
 
-'SecondaryDataUpdates': DEPRECATED! Use RevisionDataUpdates or override
+'SecondaryDataUpdates': DEPRECATED since 1.32! Use RevisionDataUpdates or override
 ContentHandler::getSecondaryDataUpdates instead.
 Allows modification of the list of DataUpdates to perform when page content is modified.
 $title: Title of the page that is being edited.
@@ -3969,7 +3969,7 @@ dumps. One, and only one hook should set this, and return false.
 &$opts: Options to use for the query
 &$join: Join conditions
 
-'WikiPageDeletionUpdates': DEPRECATED! Use PageDeletionDataUpdates or
+'WikiPageDeletionUpdates': DEPRECATED since 1.32! Use PageDeletionDataUpdates or
 override ContentHandler::getDeletionDataUpdates instead.
 Manipulates the list of DeferrableUpdates to be applied when a page is deleted.
 $page: the WikiPage
index 47fd073..c3a37f3 100644 (file)
@@ -2733,16 +2733,17 @@ $wgExtensionInfoMTime = false;
  * although they are sometimes still referred to as Squid settings for
  * historical reasons.
  *
- * Achieving a high hit ratio with an HTTP proxy requires special
- * configuration. See https://www.mediawiki.org/wiki/Manual:Squid_caching for
- * more details.
+ * Achieving a high hit ratio with an HTTP proxy requires special configuration.
+ * See https://www.mediawiki.org/wiki/Manual:Performance_tuning#Page_view_caching
+ * for more details.
  *
  * @{
  */
 
 /**
  * Enable/disable CDN.
- * See https://www.mediawiki.org/wiki/Manual:Squid_caching
+ *
+ * See https://www.mediawiki.org/wiki/Manual:Performance_tuning#Page_view_caching
  *
  * @since 1.34 Renamed from $wgUseSquid.
  */
@@ -4990,6 +4991,8 @@ $wgBlockAllowsUTEdit = true;
 
 /**
  * Allow sysops to ban users from accessing Emailuser
+ * @deprecated since 1.34; `$wgGroupPermissions['sysop']['blockemail'] = true;`
+ * should be used instead
  */
 $wgSysopEmailBans = true;
 
index c346b75..d047f6e 100644 (file)
@@ -25,7 +25,7 @@ use MediaWiki\EditPage\TextboxBuilder;
 use MediaWiki\EditPage\TextConflictHelper;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\ScopedCallback;
 
 /**
@@ -2742,7 +2742,7 @@ ERROR;
         * content.
         *
         * @param Content|null|bool|string $content
-        * @return string The editable text form of the content.
+        * @return string|false|null The editable text form of the content.
         *
         * @throws MWException If $content is not an instance of TextContent and
         *   $this->allowNonTextContent is not true.
@@ -4045,11 +4045,11 @@ ERROR;
 
                if ( $this->isConflict ) {
                        $conflict = Html::rawElement(
-                               'h2', [ 'id' => 'mw-previewconflict' ],
+                               'div', [ 'id' => 'mw-previewconflict', 'class' => 'warningbox' ],
                                $this->context->msg( 'previewconflict' )->escaped()
                        );
                } else {
-                       $conflict = '<hr />';
+                       $conflict = '';
                }
 
                $previewhead = Html::rawElement(
@@ -4058,7 +4058,9 @@ ERROR;
                                'h2', [ 'id' => 'mw-previewheader' ],
                                $this->context->msg( 'preview' )->escaped()
                        ) .
-                       $out->parseAsInterface( $note ) . $conflict
+                       Html::rawElement( 'div', [ 'class' => 'warningbox' ],
+                               $out->parseAsInterface( $note )
+                       ) . $conflict
                );
 
                $pageViewLang = $this->mTitle->getPageViewLanguage();
index 8efae4f..bfd1e2a 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Feed
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Helper functions for feeds
index 38daab5..3b4e657 100644 (file)
@@ -1816,10 +1816,11 @@ function mimeTypeMatch( $type, $avail ) {
  *
  * @param array $cprefs Client's acceptable type list
  * @param array $sprefs Server's offered types
- * @return string
+ * @return string|null
  *
  * @todo FIXME: Doesn't handle params like 'text/plain; charset=UTF-8'
  * XXX: generalize to negotiate other stuff
+ * @todo The function appears unused. Is it worth to keep?
  */
 function wfNegotiateType( $cprefs, $sprefs ) {
        $combine = [];
index 1a5058d..324b1f5 100644 (file)
@@ -21,7 +21,7 @@
  */
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Some internal bits split of from Skin.php. These functions are used
index 4045a54..1a950c5 100644 (file)
@@ -273,6 +273,18 @@ class MergeHistory {
                        return $status;
                }
 
+               // Update denormalized revactor_page too
+               $this->dbw->update(
+                       'revision_actor_temp',
+                       [ 'revactor_page' => $this->dest->getArticleID() ],
+                       [
+                               'revactor_page' => $this->source->getArticleID(),
+                               // Slightly hacky, but should work given the values assigned in this class
+                               str_replace( 'rev_timestamp', 'revactor_timestamp', $this->timeWhere )
+                       ],
+                       __METHOD__
+               );
+
                // Make the source page a redirect if no revisions are left
                $haveRevisions = $this->dbw->lockForUpdate(
                        'revision',
index 7f005fb..c9b4193 100644 (file)
@@ -332,7 +332,7 @@ class OutputPage extends ContextSource {
         * a OutputPage tied to that context.
         * @param IContextSource $context
         */
-       function __construct( IContextSource $context ) {
+       public function __construct( IContextSource $context ) {
                $this->setContext( $context );
        }
 
@@ -385,8 +385,8 @@ class OutputPage extends ContextSource {
         * @param string $name Name of the meta tag
         * @param string $val Value of the meta tag
         */
-       function addMeta( $name, $val ) {
-               array_push( $this->mMetatags, [ $name, $val ] );
+       public function addMeta( $name, $val ) {
+               $this->mMetatags[] = [ $name, $val ];
        }
 
        /**
@@ -406,8 +406,8 @@ class OutputPage extends ContextSource {
         *
         * @param array $linkarr Associative array of attributes.
         */
-       function addLink( array $linkarr ) {
-               array_push( $this->mLinktags, $linkarr );
+       public function addLink( array $linkarr ) {
+               $this->mLinktags[] = $linkarr;
        }
 
        /**
@@ -425,7 +425,7 @@ class OutputPage extends ContextSource {
         * in preference to addLink(), to avoid duplicate link tags.
         * @param string $url
         */
-       function setCanonicalUrl( $url ) {
+       public function setCanonicalUrl( $url ) {
                $this->mCanonicalUrl = $url;
        }
 
@@ -447,7 +447,7 @@ class OutputPage extends ContextSource {
         *
         * @param string $script Raw HTML
         */
-       function addScript( $script ) {
+       public function addScript( $script ) {
                $this->mScripts .= $script;
        }
 
@@ -621,7 +621,7 @@ class OutputPage extends ContextSource {
         *
         * @return array
         */
-       function getHeadItemsArray() {
+       public function getHeadItemsArray() {
                return $this->mHeadItems;
        }
 
@@ -1598,6 +1598,7 @@ class OutputPage extends ContextSource {
         * @param ParserOptions|null $options Either the ParserOption to use or null to only get the
         *   current ParserOption object. This parameter is deprecated since 1.31.
         * @return ParserOptions
+        * @suppress PhanUndeclaredProperty For isBogus
         */
        public function parserOptions( $options = null ) {
                if ( $options !== null ) {
@@ -1954,7 +1955,7 @@ class OutputPage extends ContextSource {
         * @param ParserOutput $parserOutput
         * @param array $poOptions Options to ParserOutput::getText()
         */
-       function addParserOutput( ParserOutput $parserOutput, $poOptions = [] ) {
+       public function addParserOutput( ParserOutput $parserOutput, $poOptions = [] ) {
                $this->addParserOutputMetadata( $parserOutput );
                $this->addParserOutputText( $parserOutput, $poOptions );
        }
@@ -2188,7 +2189,7 @@ class OutputPage extends ContextSource {
         *
         * @return array
         */
-       function getCacheVaryCookies() {
+       public function getCacheVaryCookies() {
                if ( self::$cacheVaryCookies === null ) {
                        $config = $this->getConfig();
                        self::$cacheVaryCookies = array_values( array_unique( array_merge(
@@ -2209,7 +2210,7 @@ class OutputPage extends ContextSource {
         *
         * @return bool
         */
-       function haveCacheVaryCookies() {
+       public function haveCacheVaryCookies() {
                $request = $this->getRequest();
                foreach ( $this->getCacheVaryCookies() as $cookieName ) {
                        if ( $request->getCookie( $cookieName, '', '' ) !== '' ) {
@@ -2822,7 +2823,7 @@ class OutputPage extends ContextSource {
        /**
         * Add a "return to" link pointing to a specified title
         *
-        * @param Title $title Title to link
+        * @param LinkTarget $title Title to link
         * @param array $query Query string parameters
         * @param string|null $text Text of the link (input is not escaped)
         * @param array $options Options array to pass to Linker
index bf138c4..e726729 100644 (file)
@@ -108,8 +108,8 @@ class PHPVersionCheck {
                        'implementation' => 'PHP',
                        'version' => PHP_VERSION,
                        'vendor' => 'the PHP Group',
-                       'upstreamSupported' => '5.6.0',
-                       'minSupported' => '7.0.13',
+                       'upstreamSupported' => '7.1.0',
+                       'minSupported' => '7.2.0',
                        'upgradeURL' => 'https://www.php.net/downloads.php',
                );
        }
index 8b5d995..a1be271 100644 (file)
@@ -58,6 +58,18 @@ class ProtectionForm {
        /** @var array Map of action to the expiry time of the existing protection */
        protected $mExistingExpiry = [];
 
+       /** @var Article */
+       protected $mArticle;
+
+       /** @var Title */
+       protected $mTitle;
+
+       /** @var bool */
+       protected $disabled;
+
+       /** @var array */
+       protected $disabledAttrib;
+
        /** @var IContextSource */
        private $mContext;
 
@@ -78,7 +90,7 @@ class ProtectionForm {
                if ( wfReadOnly() ) {
                        $this->mPermErrors[] = [ 'readonlytext', wfReadOnlyReason() ];
                }
-               $this->disabled = $this->mPermErrors != [];
+               $this->disabled = $this->mPermErrors !== [];
                $this->disabledAttrib = $this->disabled
                        ? [ 'disabled' => 'disabled' ]
                        : [];
index acecee1..1de4d7f 100644 (file)
@@ -27,7 +27,7 @@ namespace MediaWiki\Revision;
 
 use ActorMigration;
 use CommentStore;
-use MediaWiki\Logger\Spi as LoggerSpi;
+use Psr\Log\LoggerInterface;
 use MediaWiki\Storage\BlobStoreFactory;
 use MediaWiki\Storage\NameTableStoreFactory;
 use WANObjectCache;
@@ -54,8 +54,8 @@ class RevisionStoreFactory {
        private $dbLoadBalancerFactory;
        /** @var WANObjectCache */
        private $cache;
-       /** @var LoggerSpi */
-       private $loggerProvider;
+       /** @var LoggerInterface */
+       private $logger;
 
        /** @var CommentStore */
        private $commentStore;
@@ -84,7 +84,7 @@ class RevisionStoreFactory {
         * @param CommentStore $commentStore
         * @param ActorMigration $actorMigration
         * @param int $migrationStage
-        * @param LoggerSpi $loggerProvider
+        * @param LoggerInterface $logger
         * @param bool $contentHandlerUseDB see {@link $wgContentHandlerUseDB}. Must be the same
         *        for all wikis in the cluster. Will go away after MCR migration.
         */
@@ -97,7 +97,7 @@ class RevisionStoreFactory {
                CommentStore $commentStore,
                ActorMigration $actorMigration,
                $migrationStage,
-               LoggerSpi $loggerProvider,
+               LoggerInterface $logger,
                $contentHandlerUseDB
        ) {
                Assert::parameterType( 'integer', $migrationStage, '$migrationStage' );
@@ -109,7 +109,7 @@ class RevisionStoreFactory {
                $this->commentStore = $commentStore;
                $this->actorMigration = $actorMigration;
                $this->mcrMigrationStage = $migrationStage;
-               $this->loggerProvider = $loggerProvider;
+               $this->logger = $logger;
                $this->contentHandlerUseDB = $contentHandlerUseDB;
        }
 
@@ -118,7 +118,7 @@ class RevisionStoreFactory {
         *
         * @param bool|string $dbDomain DB domain of the relevant wiki or false for the current one
         *
-        * @return RevisionStore for the given wikiId with all necessary services and a logger
+        * @return RevisionStore for the given wikiId with all necessary services
         */
        public function getRevisionStore( $dbDomain = false ) {
                Assert::parameterType( 'string|boolean', $dbDomain, '$dbDomain' );
@@ -137,7 +137,7 @@ class RevisionStoreFactory {
                        $dbDomain
                );
 
-               $store->setLogger( $this->loggerProvider->getLogger( 'RevisionStore' ) );
+               $store->setLogger( $this->logger );
                $store->setContentHandlerUseDB( $this->contentHandlerUseDB );
 
                return $store;
index c7ad75c..8807d04 100644 (file)
@@ -111,7 +111,8 @@ return [
                        new ServiceOptions(
                                BlockManager::$constructorOptions, $services->getMainConfig()
                        ),
-                       $services->getPermissionManager()
+                       $services->getPermissionManager(),
+                       LoggerFactory::getInstance( 'BlockManager' )
                );
        },
 
@@ -542,7 +543,8 @@ return [
                        $services->getContentLanguage(),
                        AuthManager::singleton(),
                        $services->getLinkRendererFactory()->create(),
-                       $services->getNamespaceInfo()
+                       $services->getNamespaceInfo(),
+                       $services->getPermissionManager()
                );
                $factory->setLogger( LoggerFactory::getInstance( 'preferences' ) );
 
@@ -631,7 +633,7 @@ return [
                        $services->getCommentStore(),
                        $services->getActorMigration(),
                        $config->get( 'MultiContentRevisionSchemaMigrationStage' ),
-                       LoggerFactory::getProvider(),
+                       LoggerFactory::getInstance( 'RevisionStore' ),
                        $config->get( 'ContentHandlerUseDB' )
                );
 
@@ -782,7 +784,8 @@ return [
                        $services->getDBLoadBalancer(),
                        $services->getCommentStore(),
                        $services->getActorMigration(),
-                       $services->getWatchedItemStore()
+                       $services->getWatchedItemStore(),
+                       $services->getPermissionManager()
                );
        },
 
index 518531a..6838c37 100644 (file)
@@ -440,6 +440,13 @@ if ( $wgEnableEmail ) {
        $wgUsersNotifiedOnAllChanges = [];
 }
 
+// $wgSysopEmailBans deprecated in 1.34
+if ( isset( $wgSysopEmailBans ) && $wgSysopEmailBans === false ) {
+       foreach ( $wgGroupPermissions as $group => $_ ) {
+               unset( $wgGroupPermissions[$group]['blockemail'] );
+       }
+}
+
 if ( $wgMetaNamespace === false ) {
        $wgMetaNamespace = str_replace( ' ', '_', $wgSitename );
 }
index 76b905e..932fd2a 100644 (file)
@@ -115,6 +115,7 @@ class Status extends StatusValue {
         * ]
         *
         * @return Status[]
+        * @suppress PhanUndeclaredProperty Status vs StatusValue
         */
        public function splitByErrorType() {
                list( $errorsOnlyStatus, $warningsOnlyStatus ) = parent::splitByErrorType();
index 8c011df..bcbc9e8 100644 (file)
@@ -103,10 +103,10 @@ class SqlBlobStore implements IDBAccessObject, BlobStore {
         * @param ExternalStoreAccess $extStoreAccess Access layer for external storage
         * @param WANObjectCache $cache A cache manager for caching blobs. This can be the local
         *        wiki's default instance even if $dbDomain refers to a different wiki, since
-        *        makeGlobalKey() is used to constructed a key that allows cached blobs from the
-        *        same database to be re-used between wikis. For example, enwiki and frwiki will
-        *        use the same cache keys for blobs from the wikidatawiki database, regardless of
-        *        the cache's default key space.
+        *        makeGlobalKey() is used to construct a key that allows cached blobs from the
+        *        same database to be re-used between wikis. For example, wiki A and wiki B will
+        *        use the same cache keys for blobs fetched from wiki C, regardless of the
+        *        wiki-specific default key space.
         * @param bool|string $dbDomain The ID of the target wiki database. Use false for the local wiki.
         */
        public function __construct(
@@ -449,16 +449,15 @@ class SqlBlobStore implements IDBAccessObject, BlobStore {
         * Get a cache key for a given Blob address.
         *
         * The cache key is constructed in a way that allows cached blobs from the same database
-        * to be re-used between wikis. For example, enwiki and frwiki will use the same cache keys
-        * for blobs from the wikidatawiki database.
+        * to be re-used between wikis. For example, wiki A and wiki B will use the same cache keys
+        * for blobs fetched from wiki C.
         *
         * @param string $blobAddress
         * @return string
         */
        private function getCacheKey( $blobAddress ) {
                return $this->cache->makeGlobalKey(
-                       'BlobStore',
-                       'address',
+                       'SqlBlobStore-blob',
                        $this->dbLoadBalancer->resolveDomainID( $this->dbDomain ),
                        $blobAddress
                );
index 2ad42e5..c9b2c33 100644 (file)
  */
 class StreamFile {
        // Do not send any HTTP headers unless requested by caller (e.g. body only)
+       /** @deprecated since 1.34 */
        const STREAM_HEADLESS = HTTPFileStreamer::STREAM_HEADLESS;
        // Do not try to tear down any PHP output buffers
+       /** @deprecated since 1.34 */
        const STREAM_ALLOW_OB = HTTPFileStreamer::STREAM_ALLOW_OB;
 
        /**
@@ -66,8 +68,10 @@ class StreamFile {
         * @param string $fname Full name and path of the file to stream
         * @param int $flags Bitfield of STREAM_* constants
         * @since 1.24
+        * @deprecated since 1.34, use HTTPFileStreamer::send404Message() instead
         */
        public static function send404Message( $fname, $flags = 0 ) {
+               wfDeprecated( __METHOD__, '1.34' );
                HTTPFileStreamer::send404Message( $fname, $flags );
        }
 
@@ -78,8 +82,10 @@ class StreamFile {
         * @param int $size File size
         * @return array|string Returns error string on failure (start, end, length)
         * @since 1.24
+        * @deprecated since 1.34, use HTTPFileStreamer::parseRange() instead
         */
        public static function parseRange( $range, $size ) {
+               wfDeprecated( __METHOD__, '1.34' );
                return HTTPFileStreamer::parseRange( $range, $size );
        }
 
@@ -105,7 +111,6 @@ class StreamFile {
                                case 'png':
                                        return 'image/png';
                                case 'jpg':
-                                       return 'image/jpeg';
                                case 'jpeg':
                                        return 'image/jpeg';
                        }
index bdff7a7..0f5c384 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 use MediaWiki\Permissions\PermissionManager;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Assert\Assert;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
@@ -1561,14 +1561,32 @@ class Title implements LinkTarget, IDBAccessObject {
         * Get a Title object associated with the talk page of this article
         *
         * @deprecated since 1.34, use getTalkPageIfDefined() or NamespaceInfo::getTalkPage()
-        *             with NamespaceInfo::canHaveTalkPage().
+        *             with NamespaceInfo::canHaveTalkPage(). Note that the new method will
+        *             throw if asked for the talk page of a section-only link, or of an interwiki
+        *             link.
         * @return Title The object for the talk page
         * @throws MWException if $target doesn't have talk pages, e.g. because it's in NS_SPECIAL
         *         or because it's a relative link, or an interwiki link.
         */
        public function getTalkPage() {
-               return self::castFromLinkTarget(
-                       MediaWikiServices::getInstance()->getNamespaceInfo()->getTalkPage( $this ) );
+               // NOTE: The equivalent code in NamespaceInfo is less lenient about producing invalid titles.
+               //       Instead of failing on invalid titles, let's just log the issue for now.
+               //       See the discussion on T227817.
+
+               // Is this the same title?
+               $talkNS = MediaWikiServices::getInstance()->getNamespaceInfo()->getTalk( $this->mNamespace );
+               if ( $this->mNamespace == $talkNS ) {
+                       return $this;
+               }
+
+               $title = self::makeTitle( $talkNS, $this->mDbkeyform );
+
+               $this->warnIfPageCannotExist( $title, __METHOD__ );
+
+               return $title;
+               // TODO: replace the above with the code below:
+               // return self::castFromLinkTarget(
+               // MediaWikiServices::getInstance()->getNamespaceInfo()->getTalkPage( $this ) );
        }
 
        /**
@@ -1596,8 +1614,51 @@ class Title implements LinkTarget, IDBAccessObject {
         * @return Title The object for the subject page
         */
        public function getSubjectPage() {
-               return self::castFromLinkTarget(
-                       MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectPage( $this ) );
+               // Is this the same title?
+               $subjectNS = MediaWikiServices::getInstance()->getNamespaceInfo()
+                       ->getSubject( $this->mNamespace );
+               if ( $this->mNamespace == $subjectNS ) {
+                       return $this;
+               }
+               // NOTE: The equivalent code in NamespaceInfo is less lenient about producing invalid titles.
+               //       Instead of failing on invalid titles, let's just log the issue for now.
+               //       See the discussion on T227817.
+               $title = self::makeTitle( $subjectNS, $this->mDbkeyform );
+
+               $this->warnIfPageCannotExist( $title, __METHOD__ );
+
+               return $title;
+               // TODO: replace the above with the code below:
+               // return self::castFromLinkTarget(
+               // MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectPage( $this ) );
+       }
+
+       /**
+        * @param Title $title
+        * @param string $method
+        *
+        * @return bool whether a warning was issued
+        */
+       private function warnIfPageCannotExist( Title $title, $method ) {
+               if ( $this->getText() == '' ) {
+                       wfLogWarning(
+                               $method . ': called on empty title ' . $this->getFullText() . ', returning '
+                               . $title->getFullText()
+                       );
+
+                       return true;
+               }
+
+               if ( $this->getInterwiki() !== '' ) {
+                       wfLogWarning(
+                               $method . ': called on interwiki title ' . $this->getFullText() . ', returning '
+                               . $title->getFullText()
+                       );
+
+                       return true;
+               }
+
+               return false;
        }
 
        /**
@@ -1610,8 +1671,23 @@ class Title implements LinkTarget, IDBAccessObject {
         * @return Title
         */
        public function getOtherPage() {
-               return self::castFromLinkTarget(
-                       MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociatedPage( $this ) );
+               // NOTE: Depend on the methods in this class instead of their equivalent in NamespaceInfo,
+               //       until their semantics has become exactly the same.
+               //       See the discussion on T227817.
+               if ( $this->isSpecialPage() ) {
+                       throw new MWException( 'Special pages cannot have other pages' );
+               }
+               if ( $this->isTalkPage() ) {
+                       return $this->getSubjectPage();
+               } else {
+                       if ( !$this->canHaveTalkPage() ) {
+                               throw new MWException( "{$this->getPrefixedText()} does not have an other page" );
+                       }
+                       return $this->getTalkPage();
+               }
+               // TODO: replace the above with the code below:
+               // return self::castFromLinkTarget(
+               // MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociatedPage( $this ) );
        }
 
        /**
index a48d032..c94e8d4 100644 (file)
@@ -547,7 +547,7 @@ class WebRequest {
         *
         * @param string $name
         * @param array|null $default Option default (or null)
-        * @return array Array of ints
+        * @return int[]|null
         */
        public function getIntArray( $name, $default = null ) {
                $val = $this->getArray( $name, $default );
index f892c5e..4be2f7d 100644 (file)
@@ -22,7 +22,7 @@
 use MediaWiki\MediaWikiServices;
 
 /**
- * @defgroup Actions Action done on pages
+ * @defgroup Actions Actions
  */
 
 /**
index db874f2..6a61045 100644 (file)
@@ -433,27 +433,30 @@ class HistoryAction extends FormlessAction {
         * @return FeedItem
         */
        function feedItem( $row ) {
-               $rev = new Revision( $row, 0, $this->getTitle() );
-
+               $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $rev = $revisionStore->newRevisionFromRow( $row, 0, $this->getTitle() );
+               $prevRev = $revisionStore->getPreviousRevision( $rev );
+               $revComment = $rev->getComment() === null ? null : $rev->getComment()->text;
                $text = FeedUtils::formatDiffRow(
                        $this->getTitle(),
-                       $this->getTitle()->getPreviousRevisionID( $rev->getId() ),
+                       $prevRev ? $prevRev->getId() : false,
                        $rev->getId(),
                        $rev->getTimestamp(),
-                       $rev->getComment()
+                       $revComment
                );
-               if ( $rev->getComment() == '' ) {
+               $revUserText = $rev->getUser() ? $rev->getUser()->getName() : '';
+               if ( $revComment == '' ) {
                        $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                        $title = $this->msg( 'history-feed-item-nocomment',
-                               $rev->getUserText(),
+                               $revUserText,
                                $contLang->timeanddate( $rev->getTimestamp() ),
                                $contLang->date( $rev->getTimestamp() ),
                                $contLang->time( $rev->getTimestamp() )
                        )->inContentLanguage()->text();
                } else {
-                       $title = $rev->getUserText() .
+                       $title = $revUserText .
                                $this->msg( 'colon-separator' )->inContentLanguage()->text() .
-                               FeedItem::stripComment( $rev->getComment() );
+                               FeedItem::stripComment( $revComment );
                }
 
                return new FeedItem(
@@ -461,7 +464,7 @@ class HistoryAction extends FormlessAction {
                        $text,
                        $this->getTitle()->getFullURL( 'diff=' . $rev->getId() . '&oldid=prev' ),
                        $rev->getTimestamp(),
-                       $rev->getUserText(),
+                       $revUserText,
                        $this->getTitle()->getTalkPage()->getFullURL()
                );
        }
index 9a8949f..0360fe4 100644 (file)
@@ -23,7 +23,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\Database;
 
 /**
index 41cd24e..68c0ea1 100644 (file)
@@ -289,8 +289,9 @@ class McrUndoAction extends FormAction {
                                'h2', [ 'id' => 'mw-previewheader' ],
                                $this->context->msg( 'preview' )->text()
                        ) .
-                       $out->parseAsInterface( $note ) .
-                       "<hr />"
+                       Html::rawElement( 'div', [ 'class' => 'warningbox' ],
+                               $out->parseAsInterface( $note )
+                       )
                );
 
                $pageViewLang = $this->getTitle()->getPageViewLanguage();
index 8fd4e0a..0586e09 100644 (file)
@@ -238,23 +238,31 @@ class RawAction extends FormlessAction {
         */
        public function getOldId() {
                $oldid = $this->getRequest()->getInt( 'oldid' );
+               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
                switch ( $this->getRequest()->getText( 'direction' ) ) {
                        case 'next':
                                # output next revision, or nothing if there isn't one
-                               $nextid = 0;
+                               $nextRev = null;
                                if ( $oldid ) {
-                                       $nextid = $this->getTitle()->getNextRevisionID( $oldid );
+                                       $oldRev = $rl->getRevisionById( $oldid );
+                                       if ( $oldRev ) {
+                                               $nextRev = $rl->getNextRevision( $oldRev );
+                                       }
                                }
-                               $oldid = $nextid ?: -1;
+                               $oldid = $nextRev ? $nextRev->getId() : -1;
                                break;
                        case 'prev':
                                # output previous revision, or nothing if there isn't one
+                               $prevRev = null;
                                if ( !$oldid ) {
                                        # get the current revision so we can get the penultimate one
                                        $oldid = $this->page->getLatest();
                                }
-                               $previd = $this->getTitle()->getPreviousRevisionID( $oldid );
-                               $oldid = $previd ?: -1;
+                               $oldRev = $rl->getRevisionById( $oldid );
+                               if ( $oldRev ) {
+                                       $prevRev = $rl->getPreviousRevision( $oldRev );
+                               }
+                               $oldid = $prevRev ? $prevRev->getId() : -1;
                                break;
                        case 'cur':
                                $oldid = 0;
index 519da61..1c9e63b 100644 (file)
@@ -20,7 +20,7 @@
  * @ingroup Actions
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * User interface for the rollback action
index 8a231cb..56be456 100644 (file)
@@ -35,6 +35,9 @@ class SpecialPageAction extends FormlessAction {
                'editchangetags' => 'EditTags',
        ];
 
+       /**
+        * @inheritDoc
+        */
        public function getName() {
                $request = $this->getRequest();
                $actionName = $request->getVal( 'action', 'view' );
index 05eb438..6e788d5 100644 (file)
@@ -26,6 +26,9 @@ use MediaWiki\Revision\RevisionArchiveRecord;
 use MediaWiki\Revision\RevisionStore;
 use MediaWiki\Revision\SlotRecord;
 
+/**
+ * @ingroup API
+ */
 class ApiComparePages extends ApiBase {
 
        /** @var RevisionStore */
@@ -249,6 +252,7 @@ class ApiComparePages extends ApiBase {
                        );
                        if ( $row ) {
                                $rev = $this->revisionStore->newRevisionFromArchiveRow( $row );
+                               // @phan-suppress-next-line PhanUndeclaredProperty
                                $rev->isArchive = true;
                        }
                }
@@ -617,6 +621,7 @@ class ApiComparePages extends ApiBase {
                                }
                        }
 
+                       // @phan-suppress-next-line PhanUndeclaredProperty
                        if ( !empty( $rev->isArchive ) ) {
                                $this->getMain()->setCacheMode( 'private' );
                                $vals["{$prefix}archive"] = true;
index fdf9cf1..1936407 100644 (file)
@@ -20,7 +20,8 @@
  * @file
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * A module that allows for editing and creating pages.
@@ -239,11 +240,15 @@ class ApiEditPage extends ApiBase {
                        $params['text'] = $newContent->serialize( $contentFormat );
                        // If no summary was given and we only undid one rev,
                        // use an autosummary
-                       if ( is_null( $params['summary'] ) &&
-                               $titleObj->getNextRevisionID( $undoafterRev->getId() ) == $params['undo']
-                       ) {
-                               $params['summary'] = wfMessage( 'undo-summary' )
-                                       ->params( $params['undo'], $undoRev->getUserText() )->inContentLanguage()->text();
+
+                       if ( is_null( $params['summary'] ) ) {
+                               $nextRev = MediaWikiServices::getInstance()->getRevisionLookup()
+                                       ->getNextRevision( $undoafterRev->getRevisionRecord() );
+                               if ( $nextRev && $nextRev->getId() == $params['undo'] ) {
+                                       $params['summary'] = wfMessage( 'undo-summary' )
+                                               ->params( $params['undo'], $undoRev->getUserText() )
+                                               ->inContentLanguage()->text();
+                               }
                        }
                }
 
index 6b892fa..3052b89 100644 (file)
@@ -21,6 +21,9 @@
  * @file
  */
 
+/**
+ * @ingroup API
+ */
 class ApiFormatXmlRsd extends ApiFormatXml {
        public function __construct( ApiMain $main, $format ) {
                parent::__construct( $main, $format );
index 7aebf90..0272dcd 100644 (file)
@@ -28,6 +28,7 @@
  * 'APIGetParamDescriptionMessages' hook simple.
  *
  * @since 1.25
+ * @ingroup API
  */
 class ApiHelpParamValueMessage extends Message {
 
index 1f8b012..8a0e8c9 100644 (file)
@@ -1,7 +1,4 @@
 <?php
-
-use MediaWiki\MediaWikiServices;
-
 /**
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -21,6 +18,11 @@ use MediaWiki\MediaWikiServices;
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @ingroup API
+ */
 class ApiImageRotate extends ApiBase {
        private $mPageSet = null;
 
index 40edafa..2e7db78 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * @ingroup API
index d21f111..a6b15e9 100644 (file)
@@ -41,6 +41,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        private $redirect;
        private $bl_ns, $bl_from, $bl_from_ns, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
 
+       /** @var string */
+       private $helpUrl;
+
        /**
         * Maps ns and title to pageid
         *
index eb787d1..b8caeb9 100644 (file)
@@ -22,7 +22,7 @@
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\NameTableAccessException;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Query module to enumerate all deleted revisions.
index 26c17c5..12e908f 100644 (file)
@@ -61,7 +61,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
         * @param string $name
         * @return QueryPage
         */
-       private function getSpecialPage( $name ) {
+       private function getSpecialPage( $name ) : QueryPage {
                $qp = $this->specialPageFactory->getPage( $name );
                if ( !$qp ) {
                        self::dieDebug(
index 7e4a891..47212b3 100644 (file)
@@ -279,6 +279,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        protected function appendNamespaces( $property ) {
+               $nsProtection = $this->getConfig()->get( 'NamespaceProtection' );
+
                $data = [
                        ApiResult::META_TYPE => 'assoc',
                ];
@@ -303,6 +305,17 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data[$ns]['content'] = $nsInfo->isContent( $ns );
                        $data[$ns]['nonincludable'] = $nsInfo->isNonincludable( $ns );
 
+                       if ( isset( $nsProtection[$ns] ) ) {
+                               if ( is_array( $nsProtection[$ns] ) ) {
+                                       $specificNs = implode( "|", array_filter( $nsProtection[$ns] ) );
+                               } elseif ( $nsProtection[$ns] !== '' ) {
+                                       $specificNs = $nsProtection[$ns];
+                               }
+                               if ( isset( $specificNs ) && $specificNs !== '' ) {
+                                       $data[$ns]['namespaceprotection'] = $specificNs;
+                               }
+                       }
+
                        $contentmodel = $nsInfo->getNamespaceContentModel( $ns );
                        if ( $contentmodel ) {
                                $data[$ns]['defaultcontentmodel'] = $contentmodel;
index 7e9f56d..3f6f14c 100644 (file)
@@ -93,13 +93,14 @@ class ApiSetNotificationTimestamp extends ApiBase {
                        $titles = $pageSet->getGoodTitles();
                        $title = reset( $titles );
                        if ( $title ) {
-                               $revid = $title->getNextRevisionID( $params['newerthanrevid'], Title::READ_LATEST );
-                               if ( $revid ) {
-                                       $timestamp = $dbw->timestamp(
-                                               MediaWikiServices::getInstance()->getRevisionStore()->getTimestampFromId( $title, $revid )
-                                       );
-                               } else {
-                                       $timestamp = null;
+                               $timestamp = null;
+                               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
+                               $currRev = $rl->getRevisionById( $params['newerthanrevid'], Title::READ_LATEST );
+                               if ( $currRev ) {
+                                       $nextRev = $rl->getNextRevision( $currRev, Title::READ_LATEST );
+                                       if ( $nextRev ) {
+                                               $timestamp = $dbw->timestamp( $nextRev->getTimestamp() );
+                                       }
                                }
                        }
                }
index 5ce00f5..12ece4c 100644 (file)
@@ -37,7 +37,7 @@
                        "Lucas Werkmeister (WMDE)"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> l’API de MediaWiki est une interface stable et mature qui est supportée et améliorée de façon active. Bien que nous essayions de l’éviter, nous pouvons avoir parfois besoin de faire des modifications impactantes ; inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion ''mediawiki-api-announce''] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Test :</strong> Pour faciliter le test des requêtes à l’API, voyez [[Special:ApiSandbox]].</p>",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> l’API de MediaWiki est une interface stable et mature qui est supportée et améliorée de façon active. Bien que nous essayions de l’éviter, nous pouvons avoir parfois besoin de faire des modifications impactantes ; inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion ''mediawiki-api-announce''] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errors and warnings]].\n\n<p class=\"mw-apisandbox-link\"><strong>Test :</strong> Pour faciliter le test des requêtes à l’API, voyez [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Quelle action effectuer.",
        "apihelp-main-param-format": "Le format de sortie.",
        "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MediaWiki est installé sur une grappe de réplication de base de données. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel : paramètre Maxlag]] pour plus d’informations.",
index e2c5fe7..e7cf3d4 100644 (file)
        "apihelp-query-param-indexpageids": "לכלול פסקת pageids נוספת עם רשימת כל מזהי הדף שהוחזרו.",
        "apihelp-query-param-export": "יצוא הגרסאות הנוכחיות של כל הדפים הנתונים המחוללים.",
        "apihelp-query-param-exportnowrap": "להחזיר את ה־XML של היצוא בלי לעטוף אותו בתוצאת XML (אותו תסדיר כמו [[Special:Export]]). אפשר להשתמש בזה רק עם $1export.",
+       "apihelp-query-param-exportschema": "להשתמש בגרסה הנתונה של תסדיר היטל XML בעת היצוא. יכול לשמש רק עם <var>$1export</var>.",
        "apihelp-query-param-iwurl": "האם לקבל את ה־URL המלא אם הכותרת היא קישור בינוויקי.",
        "apihelp-query-param-rawcontinue": "להחזיר נתוני <samp>query-continue</samp> גולמיים להמשך.",
        "apihelp-query-example-revisions": "אחזור [[Special:ApiHelp/query+siteinfo|site info]] ו־[[Special:ApiHelp/query+revisions|revisions]] של <kbd>Main Page</kbd>.",
        "apihelp-query+langlinks-param-inlanguagecode": "קוד שפה בשביל שמות שפות מתורגמות.",
        "apihelp-query+langlinks-example-simple": "קבלת קישורים בין־לשוניים מהדף <kbd>Main Page</kbd>.",
        "apihelp-query+languageinfo-summary": "מחזירה מידע על שפות זמינות.",
+       "apihelp-query+languageinfo-extended-description": "אפשר להחיל [[mw:API:Query#Continuing queries|המשך]] אם אחזור המידע לוקח יותר מדי זמן בשביל בקשה אחת.",
        "apihelp-query+languageinfo-param-prop": "איזה מידע לקבל עבור כל שפה.",
+       "apihelp-query+languageinfo-paramvalue-prop-code": "קוד השפה. (הקוד הזה ייחודי למדיה־ויקי, אם כי יש חפיפה עם תקנים אחרים.)",
+       "apihelp-query+languageinfo-paramvalue-prop-bcp47": "קוד שפת לפי BCP-47.",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "כיוון הכתיבה של השפה (<code>ltr</code> או <code>rtl</code>).",
+       "apihelp-query+languageinfo-paramvalue-prop-autonym": "השם העצמי של השפה, כלומר השם באותה השפה.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "השם בשפה בשפה שצוינה בפרמטר <var>uselang</var>, עם שפת גיבוי כשזה נחוץ.",
+       "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "קודי השפה של שפות הגיבוי שמוגדרים עבור השפה הזאת. הגיבוי המשתמע הסופי ל־\"en\" אינו כלול (אבל שפות אחדות יכולות להיות מגובות ב־\"en\" במפורש).",
+       "apihelp-query+languageinfo-paramvalue-prop-variants": "קודי השפה של ההגוונים שהשפה הזאת תומכת בהם.",
+       "apihelp-query+languageinfo-param-code": "קודי השפה של השפות שאמורות להיות מוחזרות, או <code>*</code> כדי לקבל את כל השפות.",
        "apihelp-query+languageinfo-example-simple": "קבלת קודי שפה של כל השפות הנתמכות.",
+       "apihelp-query+languageinfo-example-autonym-name-de": "קבלת השמות העצמיים והשמות הגרמניים של כל השפות הנתמכות.",
+       "apihelp-query+languageinfo-example-fallbacks-variants-oc": "קבלת שפות הגיבוי וההגוונים של אוקסיטנית.",
+       "apihelp-query+languageinfo-example-bcp47-dir": "קבלת קודי שפה ב־BCP-47 וכיוון עבור כל השפות הנתמכות.",
        "apihelp-query+links-summary": "החזרת כל הקישורים מהדפים שצוינו.",
        "apihelp-query+links-param-namespace": "להציג קישורים רק במרחבי השם האלה.",
        "apihelp-query+links-param-limit": "כמה קישורים להחזיר.",
        "api-help-param-templated-var-first": "יש להחליף את הטקסט <var>&#x7B;$1&#x7D;</var> (בשם הפרמטר) עם הערכים של הפרמטר <var>$2</var>",
        "api-help-param-templated-var": "<var>&#x7B;$1&#x7D;</var> עם הערכים של הפרמטר <var>$2</var>",
        "api-help-datatypes-header": "סוגי נתונים",
-       "api-help-datatypes": "קלט למדיה־ויקי צריך להיות בקידוד UTF-8 מנורמל ב־NFC. מדיה־ויקי יכולה לנסות להמיר קלט אחר, אבל זה עלול לגרום לפעולות מסוימות (כגון [[Special:ApiHelp/edit|עריכות]] עם בדיקות MD5) להיכשל.\n\nחלק מסוגי הפרמטרים בבקשות API דורשים הסבר נוסף:\n;בוליאני (boolean)\n:פרמטרים בוליאניים עובדים כמו תיבות סימון של HTML: אם הפרמטר צוין, בלי קשר לערך שלו, הוא אמת (true). בשביל ערך שקר (false), יש להשמיט את הפרמטר לגמרי.\n;חותם־זמן (timestamp)\n:אפשר לכתוב חותמי־זמן במספר תסדירים. תאריך ושעה לפי ISO 8601 הוא הדבר המומלת. כל הזמנים מצוינים ב־ UTC, לא תהיה השפעה לשום אזור זמן שיצוין.\n:* תאריך ושעה לפי ISO 8601‏, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (לא חובה לכתוב פיסוק ו־<kbd>Z</kbd>)\n:* תאריך ושעה לפי ISO 8601 עם חלקי שנייה (שלא תהיה להם שום השפעה), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (לא חובה לכתוב קווים מפרידים, נקודתיים ו־<kbd>Z</kbd>)\n:* תסדיר MediaWiki‏, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* תסדיר מספרי כללי, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (לאזור זמן אופציונלי של <kbd>GMT</kbd>‏, <kbd dir=\"ltr\">+<var>##</var></kbd>, או <kbd dir=\"ltr\">-<var>##</var></kbd> אין השפעה)\n:* תסדיר EXIF‏, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 2822 (אפשר להשמיט את אזור הזמן), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר RFC 850 (אפשר להשמיט את אזור הזמן), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* תסדיר C ctime‏, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* שניות מאז 1970-01-01T00:00:00Z בתור מספר שלך בין 1 ל־13 (לא כולל <kbd>0</kbd>)\n:* המחרוזת <kbd>now</kbd>\n;מפריד ערכים מרובים חלופי\n:פרמטרים שלוקחים ערכים מרובים בדרך־כלל נשלחים עם הערכים מופרדים באמצעות תו מקל, למשל <kbd>param=value1|value2</kbd> או <kbd>param=value1%7Cvalue2</kbd>. אם הערך צריך להכיל את תו המקל, יש להשתמש ב־U+001F (מפריד יחידות) בתור המפריד ''וגם'' להוסיף לתחילת הערך U+001F, למשל <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+       "api-help-datatypes": "קלט למדיה־ויקי צריך להיות בקידוד UTF-8 מנורמל ב־NFC. מדיה־ויקי יכולה לנסות להמיר קלט אחר, אבל זה עלול לגרום לפעולות מסוימות (כגון [[Special:ApiHelp/edit|עריכות]] עם בדיקות MD5) להיכשל.\n\nחלק מסוגי הפרמטרים בבקשות API דורשים הסבר נוסף:\n;בוליאני (boolean)\n:פרמטרים בוליאניים עובדים כמו תיבות סימון של HTML: אם הפרמטר צוין, בלי קשר לערך שלו, הוא אמת (true). בשביל ערך שקר (false), יש להשמיט את הפרמטר לגמרי.\n;חותם־זמן (timestamp)\n:אפשר לכתוב חותמי־זמן במספר תסדירים, ר' את [[mw:Special:MyLanguage/Timestamp|תיעוד תסדירי הקלט של ספריית Timestamp באתר mediawiki.org]] לפרטים. תאריך ושעה לפי ISO 8601 הוא הדבר המומלץ: <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>. בנוסף, המחרוזת <kbd>now</kbd> יכולה לשמש לציון חום־הזמן הנוכחי.\n;מפריד ערכים מרובים חלופי\n:פרמטרים שלוקחים ערכים מרובים בדרך־כלל נשלחים עם הערכים מופרדים באמצעות תו מקל, למשל <kbd>param=value1|value2</kbd> או <kbd>param=value1%7Cvalue2</kbd>. אם הערך צריך להכיל את תו המקל, יש להשתמש ב־U+001F (מפריד יחידות) בתור המפריד ''וגם'' להוסיף לתחילת הערך U+001F, למשל <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
        "api-help-templatedparams-header": "פרמטרים בתבניות",
        "api-help-templatedparams": "התכונה \"פרמטרים בתבניות\" תומכת במקרים שבהם מודול של API זקוק לערך כלשהו עבור ערכים של פרמטרים אחרים. למשל, אם היה מודול API לבקשת פרי, ייתכן שהוא היה זקוק לפרמטר בשם <var>פירות</var> על־מנת לציין מהם הפירות המבוקשים, ולפרמטר בתבנית בשם <var>{פרי}-כמות</var> על־מנת לציין את הכמות של כל פרי עבור הבקשה. לשם כך, לקוח API שמעוניין לקבל תפוח אחד, 5 בננות ו־20 תותים יכול היה ליצור בקשה בסגנון <kbd>פירות=תפוחים|בננות|תותים&תפוחים-כמות=1&בננות-כמות=5&תותים-כמות=20</kbd>.",
        "api-help-param-type-limit": "סוג: מספר שלם או <kbd>max</kbd>",
        "apierror-cantoverwrite-sharedfile": "קובץ היעד קיים במאגר משותף ואין לך הרשאה לעקוף אותו.",
        "apierror-cantsend": "לא נכנסת לחשבון, אין לך חשבון דואר אלקטרוני מאושר, או שאסור לך לשלוח דואר אלקטרוני למשתמשים אחרים, ולכן אין לך אפשרות לשלוח דואר אלקטרוני.",
        "apierror-cantundelete": "לא היה אפשר לשחזר ממחיקה: אולי הגרסאות המבוקשות אינן קיימות, ואולי הן כבר נמחקו.",
+       "apierror-cantview-deleted-comment": "אין לך הרשאה לצפות בהערות מחוקות.",
+       "apierror-cantview-deleted-description": "אין לך הרשאה לצפות בתיאורים של קבצים מחוקים.",
+       "apierror-cantview-deleted-metadata": "אין לך הרשאה לצפות במטא־נתונים של קבצים מחוקים.",
+       "apierror-cantview-deleted-revision-content": "אין לך הרשאה לצפות בתוכן של גרסאות מחוקות.",
        "apierror-changeauth-norequest": "יצירת בקשת השינוי נכשלה.",
        "apierror-chunk-too-small": "גודל הפלח המזערי הוא {{PLURAL:$1|בית אחד|$1 בתים}} בשביל פלחים לא סופיים.",
        "apierror-cidrtoobroad": "טווחי CIDR של $1 שרחבים יותר מ־/$2 אינם קבילים.",
        "apiwarn-deprecation-missingparam": "מכיוון שלא צוין <var>$1</var>, ישמש תסדיר ישן לפלט. התסדיר הזה מוכרז בתור מיושן, ובעתיד ישמש רק התסדיר החדש.",
        "apiwarn-deprecation-parameter": "הפרמטר <var>$1</var> מיושן.",
        "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> מיושן מאז מדיה־ויקי 1.28. יש להשתמש ב־<kbd>prop=headhtml</kbd> בעת יצירת מסמכי HTML חדשים, או ב־<kbd>prop=modules|jsconfigvars</kbd> בעת עדכון מסמך בצד הלקוח.",
+       "apiwarn-deprecation-post-without-content-type": "בקשת POST נעשתה ללא כותר <code>Content-Type</code>. זה לא עובד באופן מהימן.",
        "apiwarn-deprecation-purge-get": "שימוש ב־<kbd>action=purge</kbd> דרך GET מיושן. יש להשתמש ב־POST במקום זה.",
        "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> מיושן. יש להשתמש ב־<kbd>$2</kbd> במקום זה.",
        "apiwarn-difftohidden": "לא היה אפשר לעשות השוואה עם גרסה $1: התוכן מוסתר.",
index 6124066..6f390f9 100644 (file)
@@ -16,7 +16,8 @@
                        "Jonghaya",
                        "Jerrykim306",
                        "코코아",
-                       "Macofe"
+                       "Macofe",
+                       "렌즈"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|설명문서]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 알림 사항]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청]\n</div>\n<strong>상태:</strong> 이 페이지에 보이는 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 공지를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 \"MediaWiki-API-Error\" 키가 포함된 HTTP 헤더가 전송되며 반환되는 헤더와 오류 코드의 값은 모두 동일한 값으로 설정됩니다. 자세한 정보에 대해서는 [[mw:Special:MyLanguage/API:Errors and warnings/ko|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청 테스트를 용이하게 하려면, [[Special:ApiSandbox]]를 보십시오.",
        "apihelp-compare-paramvalue-prop-title": "'from'과 'to' 판의 문서 제목입니다.",
        "apihelp-compare-paramvalue-prop-user": "'from'과 'to' 판의 사용자 이름과 ID입니다.",
        "apihelp-compare-paramvalue-prop-comment": "'from'과 'to' 판의 설명입니다.",
-       "apihelp-compare-paramvalue-prop-parsedcomment": "'from'과 to' 판의 구문 분석된 설명입니다.",
+       "apihelp-compare-paramvalue-prop-parsedcomment": "'from'과 to' 판의 변환된 설명입니다.",
        "apihelp-compare-paramvalue-prop-size": "'from'과 'to' 판의 크기입니다.",
        "apihelp-compare-example-1": "판 1과 2의 차이를 생성합니다.",
        "apihelp-createaccount-summary": "새 사용자 계정을 만듭니다.",
        "apihelp-options-example-complex": "모든 환경 설정을 초기화하고 <kbd>skin</kbd>과 <kbd>nickname</kbd>을 설정합니다.",
        "apihelp-paraminfo-summary": "API 모듈의 정보를 가져옵니다.",
        "apihelp-paraminfo-param-helpformat": "도움말 문자열 포맷.",
-       "apihelp-parse-summary": "ë\82´ì\9a©ì\9d\98 êµ¬ë¬¸ì\9d\84 ë¶\84ì\84\9dí\95\98ê³  í\8c\8cì\84\9c 출력을 반환합니다.",
-       "apihelp-parse-param-summary": "구문 분석할 요약입니다.",
-       "apihelp-parse-paramvalue-prop-text": "위키텍스트의 구문 분석된 텍스트를 제공합니다.",
-       "apihelp-parse-paramvalue-prop-langlinks": "구문 분석된 위키텍스트의 언어 링크를 제공합니다.",
-       "apihelp-parse-paramvalue-prop-categories": "구문 분석된 위키텍스트의 분류를 제공합니다.",
+       "apihelp-parse-summary": "ë\82´ì\9a©ì\9d\84 ë³\80í\99\98í\95\98ê³  출력을 반환합니다.",
+       "apihelp-parse-param-summary": "변환할 요약입니다.",
+       "apihelp-parse-paramvalue-prop-text": "위키텍스트로 변환된 텍스트를 제공합니다.",
+       "apihelp-parse-paramvalue-prop-langlinks": "언어 링크를 위키텍스트로 변환하여 제공합니다.",
+       "apihelp-parse-paramvalue-prop-categories": "분류를 변환된 위키텍스트로 제공합니다.",
        "apihelp-parse-paramvalue-prop-categorieshtml": "분류의 HTML 버전을 제공합니다.",
-       "apihelp-parse-paramvalue-prop-links": "구문 분석된 위키텍스트의 내부 링크를 제공합니다.",
-       "apihelp-parse-paramvalue-prop-templates": "구문 분석된 위키텍스트의 틀을 제공합니다.",
-       "apihelp-parse-paramvalue-prop-images": "구문 ë¶\84ì\84\9dë\90\9c ì\9c\84í\82¤í\85\8dì\8a¤í\8a¸ì\9d\98 ê·¸ë¦¼ì\9d\84 제공합니다.",
-       "apihelp-parse-paramvalue-prop-externallinks": "구문 분석된 위키텍스트의 외부 링크를 제공합니다.",
-       "apihelp-parse-paramvalue-prop-sections": "구문 분석된 위키텍스트의 문단을 제공합니다.",
-       "apihelp-parse-paramvalue-prop-revid": "구문 분석된 페이지의 판 ID를 추가합니다.",
-       "apihelp-parse-paramvalue-prop-displaytitle": "구문 분석된 위키텍스트의 제목을 추가합니다.",
+       "apihelp-parse-paramvalue-prop-links": "내부 링크를 위키텍스트로 변환하여 제공합니다.",
+       "apihelp-parse-paramvalue-prop-templates": "틀을 변환된 위키텍스트로 제공합니다.",
+       "apihelp-parse-paramvalue-prop-images": "그림ì\9d\84 ì\9c\84í\82¤í\85\8dì\8a¤í\8a¸ë¡\9c ë³\80í\99\98í\95\98ì\97¬ 제공합니다.",
+       "apihelp-parse-paramvalue-prop-externallinks": "외부 링크를 위키텍스트로 변환하여 제공합니다.",
+       "apihelp-parse-paramvalue-prop-sections": "문단을 변환된 위키텍스트로 제공합니다.",
+       "apihelp-parse-paramvalue-prop-revid": "변환할 페이지의 판 ID를 추가합니다.",
+       "apihelp-parse-paramvalue-prop-displaytitle": "제목을 변환된 위키텍스트로 추가합니다.",
        "apihelp-parse-paramvalue-prop-headitems": "문서의 <code>&lt;head&gt;</code> 안에 넣을 항목을 제공합니다.",
-       "apihelp-parse-paramvalue-prop-headhtml": "문서의 구문 분석된 <code>&lt;head&gt;</code>를 제공합니다.",
+       "apihelp-parse-paramvalue-prop-headhtml": "문서의 파싱된 doctype, 여는 <code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, <code>&lt;body&gt;</code>를 제공합니다.",
        "apihelp-parse-paramvalue-prop-modules": "문서에 사용되는 ResourceLoader 모듈을 제공합니다. 불러오려면, <code>mw.loader.using()</code>을 사용하세요. <kbd>jsconfigvars</kbd> 또는 <kbd>encodedjsconfigvars</kbd>는 <kbd>modules</kbd>와 함께 요청해야 합니다.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "문서에 특화된 자바스크립트 구성 변수를 제공합니다. 적용하려면 <code>mw.config.set()</code>을 사용하세요.",
-       "apihelp-parse-paramvalue-prop-iwlinks": "구문 분석된 위키텍스트의 인터위키 링크를 제공합니다.",
-       "apihelp-parse-paramvalue-prop-wikitext": "구문 분석된 위키텍스트 원문을 제공합니다.",
-       "apihelp-parse-paramvalue-prop-properties": "구문 분석된 위키텍스트에 정의된 다양한 속성을 제공합니다.",
-       "apihelp-parse-param-pst": "구문 분석 이전에 입력에 대한 사전 저장 변환을 수행합니다. 텍스트로 사용할 때에만 유효합니다.",
+       "apihelp-parse-paramvalue-prop-iwlinks": "인터위키 링크를 위키텍스트로 변환하여 제공합니다.",
+       "apihelp-parse-paramvalue-prop-wikitext": "변환한 원문 위키텍스트를 제공합니다.",
+       "apihelp-parse-paramvalue-prop-properties": "정의된 다양한 속성을 변환된 위키텍스트로 제공합니다.",
+       "apihelp-parse-param-pst": "파싱에 앞서 입력에 대한 저장 직전의 변환을 수행합니다. 텍스트로 사용할 때에만 유효합니다.",
        "apihelp-parse-param-disablelimitreport": "파서 출력에서 제한 보고서(\"NewPP limit report\")를 제외합니다.",
        "apihelp-parse-param-disablepp": "<var>$1disablelimitreport</var>를 대신 사용합니다.",
        "apihelp-parse-param-disableeditsection": "파서 출력에서 문단 편집 링크를 제외합니다.",
        "apihelp-parse-param-disabletidy": "파서 출력에서 HTML 정리(예: tidy)를 수행하지 않습니다.",
-       "apihelp-parse-param-preview": "미리 보기 모드에서 구문 분석을 합니다.",
-       "apihelp-parse-param-sectionpreview": "문단 미리 보기 모드에서 구문 분석을 합니다. (미리 보기 모드도 활성화함)",
+       "apihelp-parse-param-preview": "미리 보기 모드에서 파싱합니다.",
+       "apihelp-parse-param-sectionpreview": "문단 미리 보기 모드에서 파싱합니다. (미리 보기 모드도 활성화함)",
        "apihelp-parse-param-disabletoc": "출력에서 목차를 제외합니다.",
        "apihelp-parse-param-useskin": "선택한 스킨을 파서 출력에 적용합니다. 다음의 속성에 영향을 줄 수 있습니다: <kbd>langlinks</kbd>, <kbd>headitems</kbd>, <kbd>modules</kbd>, <kbd>jsconfigvars</kbd>, <kbd>indicators</kbd>.",
        "apihelp-parse-param-contentformat": "입력 텍스트에 사용할 내용 직렬화 포맷입니다. $1text와 함께 사용할 때에만 유효합니다.",
-       "apihelp-parse-example-page": "페이지의 구문을 분석합니다.",
+       "apihelp-parse-example-page": "페이지를 파싱합니다.",
        "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.",
-       "apihelp-parse-example-summary": "요약을 구문 분석합니다.",
+       "apihelp-parse-example-summary": "요약을 변환합니다.",
        "apihelp-patrol-summary": "문서나 판을 점검하기.",
        "apihelp-patrol-param-rcid": "점검할 최근 바뀜 ID입니다.",
        "apihelp-patrol-param-revid": "점검할 판 ID입니다.",
        "apihelp-query+imageinfo-summary": "파일 정보와 업로드 역사를 반환합니다.",
        "apihelp-query+imageinfo-param-prop": "가져올 파일 정보입니다:",
        "apihelp-query+imageinfo-paramvalue-prop-timestamp": "업로드된 판에 대한 타임스탬프를 추가합니다.",
-       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "판의 설명을 구문 분석합니다.",
+       "apihelp-query+imageinfo-paramvalue-prop-parsedcomment": "판의 설명을 변환합니다.",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "파일에 대한 SHA-1 해시를 추가합니다.",
        "apihelp-query+imageinfo-paramvalue-prop-mediatype": "파일의 미디어 유형을 추가합니다.",
        "apihelp-query+imageinfo-param-urlheight": "$1urlwidth와 유사합니다.",
        "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "판의 콘텐츠 모델 ID.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "판의 텍스트.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "판의 태그.",
-       "apihelp-query+revisions+base-param-parse": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>를 ë\8c\80ì\8b  ì\82¬ì\9a©í\95©ë\8b\88ë\8b¤. í\8c\90 ë\82´ì\9a©ì\9d\98 êµ¬ë¬¸ì\9d\84 ë¶\84ì\84\9d합니다. ($1prop=content 필요) 성능 상의 이유로 이 옵션을 사용할 경우 $1limit은 1로 강제됩니다.",
+       "apihelp-query+revisions+base-param-parse": "<kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>를 ë\8c\80ì\8b  ì\82¬ì\9a©í\95\98ì\84¸ì\9a\94. í\8c\90 ë\82´ì\9a©ì\9d\84 í\8c\8cì\8b±합니다. ($1prop=content 필요) 성능 상의 이유로 이 옵션을 사용할 경우 $1limit은 1로 강제됩니다.",
        "apihelp-query+search-summary": "전문 검색을 수행합니다.",
        "apihelp-query+search-param-qiprofile": "쿼리 독립적인 프로파일 사용(순위 알고리즘에 영향있음)",
        "apihelp-query+search-paramvalue-prop-size": "바이트 단위로 문서의 크기를 추가합니다.",
        "apierror-cantsend": "로그인하지 않았거나 인증된 이메일 주소가 없거나 다른 사용자로 이메일을 보낼 권한이 없기 때문에 이메일을 보낼 수 없습니다.",
        "apierror-cantview-deleted-description": "삭제된 파일의 설명을 볼 권한이 없습니다.",
        "apierror-cantview-deleted-metadata": "삭제된 파일의 메타데이터를 볼 권한이 없습니다.",
+       "apierror-cantview-deleted-revision-content": "삭제된 판의 내용을 볼 권한이 없습니다.",
        "apierror-compare-maintextrequired": "<var>$1slots</var>에 <kbd>main</kbd>이 포함되어 있다면 <var>$1text-main</var> 변수는 필수입니다. (메인 슬롯을 삭제할 수 없습니다)",
        "apierror-compare-notext": "<var>$1</var> 변수는 <var>$2</var> 없이 사용할 수 없습니다.",
        "apierror-emptynewsection": "비어있는 새 문단을 만들 수 없습니다.",
index cb4d121..59eb62c 100644 (file)
        "apierror-cantchangecontentmodel": "Немате дозвола за менување содржинскиот модел на страница.",
        "apierror-cantimport-upload": "Немате дозвола да увезувате подигнати страници.",
        "apierror-cantimport": "Немате дозвола за увезуваање страници.",
+       "apierror-cantview-deleted-comment": "Немате дозвола за прегледување на избришаните коментари.",
        "apierror-cantview-deleted-description": "Немате дозвола за прегледување описи на избришаните податотеки.",
        "apierror-cantview-deleted-metadata": "Немате дозвола за прегледување метаподатоци на избришаните податотеки.",
+       "apierror-cantview-deleted-revision-content": "Немате дозвола за прегледување содржина на избришаните преработки.",
        "apierror-copyuploadbaddomain": "Подигањето преку URL не е дозволено од овој домен.",
        "apierror-copyuploadbadurl": "Подигањето не е дозволено од оваа URL-адреса.",
        "apierror-emptynewsection": "Создавањето на нови празни поднаслови не е дозволено.",
index d8ff539..65a0913 100644 (file)
        "apierror-cantimport": "Nie masz uprawnień do importowania stron.",
        "apierror-cantsend": "Nie jesteś zalogowany, nie masz potwierdzonego adresu e-mail, albo nie masz prawa wysyłać e-maili do innych użytkowników, więc nie możesz wysłać wiadomości e-mail.",
        "apierror-cantundelete": "Nie można przywrócić: dana wersja nie istnieje albo została już przywrócona.",
+       "apierror-cantview-deleted-comment": "Nie masz uprawnień do podglądu usuniętych komentarzy.",
        "apierror-cantview-deleted-description": "Nie masz uprawnień do podglądu opisów usuniętych plików.",
        "apierror-cantview-deleted-metadata": "Nie masz uprawnień do podglądu metadanych usuniętych plików.",
+       "apierror-cantview-deleted-revision-content": "Nie masz uprawnień do podglądu treści usuniętych wersji.",
        "apierror-exceptioncaught": "[$1] Stwierdzono wyjątek: $2",
        "apierror-filedoesnotexist": "Plik nie istnieje.",
        "apierror-import-unknownerror": "Nieznany błąd podczas importowania: $1.",
index b648443..25e7522 100644 (file)
        "apihelp-block-param-userid": "{{doc-apihelp-param|block|userid}}",
        "apihelp-block-param-expiry": "{{doc-apihelp-param|block|expiry}}\n{{doc-important|Do not translate \"5 months\", \"2 weeks\", \"infinite\", \"indefinite\" or \"never\"!}}",
        "apihelp-block-param-reason": "{{doc-apihelp-param|block|reason}}",
-       "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}\n* See also {{msg-mw|ipb-hardblock}}",
+       "apihelp-block-param-anononly": "{{doc-apihelp-param|block|anononly}}\n\n* See also {{msg-mw|ipb-hardblock}}",
        "apihelp-block-param-nocreate": "{{doc-apihelp-param|block|nocreate}}\n* See also {{msg-mw|ipbcreateaccount}}",
        "apihelp-block-param-autoblock": "{{doc-singularthey}}\n{{doc-apihelp-param|block|autoblock}}\n* See also {{msg-mw|ipbenableautoblock}}",
-       "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}\n* See also {{msg-mw|ipbemailban}}",
+       "apihelp-block-param-noemail": "{{doc-apihelp-param|block|noemail}}\n\n* See also {{msg-mw|ipbemailban}}",
        "apihelp-block-param-hidename": "{{doc-apihelp-param|block|hidename}}",
        "apihelp-block-param-allowusertalk": "{{doc-apihelp-param|block|allowusertalk}}\n* See also {{msg-mw|ipb-disableusertalk}}",
        "apihelp-block-param-reblock": "{{doc-apihelp-param|block|reblock}}",
index 2e20529..4c2f27e 100644 (file)
@@ -29,6 +29,7 @@ use MediaWiki\Config\ServiceOptions;
 use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\User\UserIdentity;
 use MWCryptHash;
+use Psr\Log\LoggerInterface;
 use User;
 use WebRequest;
 use WebResponse;
@@ -41,6 +42,12 @@ use Wikimedia\IPSet;
  * @since 1.34 Refactored from User and Block.
  */
 class BlockManager {
+       /** @var PermissionManager */
+       private $permissionManager;
+
+       /** @var ServiceOptions */
+       private $options;
+
        /**
         * TODO Make this a const when HHVM support is dropped (T192166)
         *
@@ -59,17 +66,23 @@ class BlockManager {
                'SoftBlockRanges',
        ];
 
+       /** @var LoggerInterface */
+       private $logger;
+
        /**
         * @param ServiceOptions $options
         * @param PermissionManager $permissionManager
+        * @param LoggerInterface $logger
         */
        public function __construct(
                ServiceOptions $options,
-               PermissionManager $permissionManager
+               PermissionManager $permissionManager,
+               LoggerInterface $logger
        ) {
                $options->assertRequiredOptions( self::$constructorOptions );
                $this->options = $options;
                $this->permissionManager = $permissionManager;
+               $this->logger = $logger;
        }
 
        /**
@@ -392,15 +405,14 @@ class BlockManager {
                                $ipList = $this->checkHost( $hostname );
 
                                if ( $ipList ) {
-                                       wfDebugLog(
-                                               'dnsblacklist',
+                                       $this->logger->info(
                                                "Hostname $hostname is {$ipList[0]}, it's a proxy says $basename!"
                                        );
                                        $found = true;
                                        break;
                                }
 
-                               wfDebugLog( 'dnsblacklist', "Requested $hostname, not found in $basename." );
+                               $this->logger->debug( "Requested $hostname, not found in $basename." );
                        }
                }
 
index 2ef9c9f..5a7f45e 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Helper class for category membership changes
@@ -273,11 +274,15 @@ class CategoryMembershipChange {
         * @return null|string
         */
        private function getPreviousRevisionTimestamp() {
-               $previousRev = Revision::newFromId(
-                               $this->pageTitle->getPreviousRevisionID( $this->pageTitle->getLatestRevID() )
-                       );
-
-               return $previousRev ? $previousRev->getTimestamp() : null;
+               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
+               $latestRev = $rl->getRevisionByTitle( $this->pageTitle );
+               if ( $latestRev ) {
+                       $previousRev = $rl->getPreviousRevision( $latestRev );
+                       if ( $previousRev ) {
+                               return $previousRev->getTimestamp();
+                       }
+               }
+               return null;
        }
 
 }
index 79092ee..e60cc09 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Feed to Special:RecentChanges and Special:RecentChangesLinked.
index a48e191..fbcbc35 100644 (file)
@@ -23,7 +23,7 @@
  */
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IResultWrapper;
 
 class ChangesList extends ContextSource {
index e461762..d2c4dd4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Generates a list of changes using an Enhanced system (uses javascript).
index d448eae..83720d3 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 use MediaWiki\Linker\LinkRenderer;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 class RCCacheEntryFactory {
 
@@ -56,7 +56,6 @@ class RCCacheEntryFactory {
         */
        public function newFromRecentChange( RecentChange $baseRC, $watched ) {
                $user = $this->context->getUser();
-               $counter = $baseRC->counter;
 
                $cacheEntry = RCCacheEntry::newFromParent( $baseRC );
 
@@ -73,8 +72,8 @@ class RCCacheEntryFactory {
                // called too many times (50% of CPU time on RecentChanges!).
                $showDiffLinks = $this->showDiffLinks( $cacheEntry, $user );
 
-               $cacheEntry->difflink = $this->buildDiffLink( $cacheEntry, $showDiffLinks, $counter );
-               $cacheEntry->curlink = $this->buildCurLink( $cacheEntry, $showDiffLinks, $counter );
+               $cacheEntry->difflink = $this->buildDiffLink( $cacheEntry, $showDiffLinks );
+               $cacheEntry->curlink = $this->buildCurLink( $cacheEntry, $showDiffLinks );
                $cacheEntry->lastlink = $this->buildLastLink( $cacheEntry, $showDiffLinks );
 
                // Make user links
@@ -109,11 +108,11 @@ class RCCacheEntryFactory {
        }
 
        /**
-        * @param RecentChange $cacheEntry
+        * @param RCCacheEntry $cacheEntry
         *
         * @return string
         */
-       private function buildCLink( RecentChange $cacheEntry ) {
+       private function buildCLink( RCCacheEntry $cacheEntry ) {
                $type = $cacheEntry->mAttribs['rc_type'];
 
                // New unpatrolled pages
@@ -182,11 +181,10 @@ class RCCacheEntryFactory {
        /**
         * @param RecentChange $cacheEntry
         * @param bool $showDiffLinks
-        * @param int $counter
         *
         * @return string
         */
-       private function buildCurLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
+       private function buildCurLink( RecentChange $cacheEntry, $showDiffLinks ) {
                $queryParams = $this->buildCurQueryParams( $cacheEntry );
                $curMessage = $this->getMessage( 'cur' );
                $logTypes = [ RC_LOG ];
@@ -217,11 +215,10 @@ class RCCacheEntryFactory {
        /**
         * @param RecentChange $cacheEntry
         * @param bool $showDiffLinks
-        * @param int $counter
         *
         * @return string
         */
-       private function buildDiffLink( RecentChange $cacheEntry, $showDiffLinks, $counter ) {
+       private function buildDiffLink( RecentChange $cacheEntry, $showDiffLinks ) {
                $queryParams = $this->buildDiffQueryParams( $cacheEntry );
                $diffMessage = $this->getMessage( 'diff' );
                $logTypes = [ RC_NEW, RC_LOG ];
index 1827aab..ce82b71 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for a logging table row with its associated change tags.
index 6b5482c..dffe6e1 100644 (file)
@@ -191,11 +191,11 @@ class SquidPurgeClient {
        /**
         * Queue a purge operation
         *
-        * @param string $url
+        * @param string $url Fully expanded URL (with host and protocol)
         */
        public function queuePurge( $url ) {
                global $wgSquidPurgeUseHostHeader;
-               $url = CdnCacheUpdate::expand( str_replace( "\n", '', $url ) );
+               $url = str_replace( "\n", '', $url ); // sanity
                $request = [];
                if ( $wgSquidPurgeUseHostHeader ) {
                        $url = wfParseUrl( $url );
index 170d5c2..8f4f058 100644 (file)
@@ -45,6 +45,9 @@ class CustomUppercaseCollation extends NumericUppercaseCollation {
        /** @var array $puaSubset List of private use area codes */
        private $puaSubset;
 
+       /** @var array */
+       private $firstLetters;
+
        /**
         * @note This assumes $alphabet does not contain U+F3000-U+F3FFF
         *
index 9fbb72c..533f639 100644 (file)
@@ -26,7 +26,7 @@
  * @author Daniel Kinzler
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Assert\Assert;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
index a48faf1..56fc0b3 100644 (file)
@@ -10,6 +10,9 @@ use Psr\Log\AbstractLogger;
  * goal.
  */
 class ConsoleLogger extends AbstractLogger {
+       /** @var string */
+       private $channel;
+
        /**
         * @param string $channel
         */
index 7044748..b983e97 100644 (file)
@@ -137,7 +137,7 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate {
                                foreach ( $chunks as $chunk ) {
                                        $client = new SquidPurgeClient( $server );
                                        foreach ( $chunk as $url ) {
-                                               $client->queuePurge( $url );
+                                               $client->queuePurge( self::expand( $url ) );
                                        }
                                        $pool->addClient( $client );
                                }
@@ -254,7 +254,7 @@ class CdnCacheUpdate implements DeferrableUpdate, MergeableUpdate {
         * @param string $url
         * @return string
         */
-       public static function expand( $url ) {
+       private static function expand( $url ) {
                return wfExpandUrl( $url, PROTO_INTERNAL );
        }
 
index c4e8341..2bfdc0e 100644 (file)
@@ -1197,4 +1197,14 @@ class LinksUpdate extends DataUpdate {
 
                return $this->db;
        }
+
+       /**
+        * Whether or not this LinksUpdate will also update pages which transclude the
+        * current page or otherwise depend on it.
+        *
+        * @return bool
+        */
+       public function isRecursive() {
+               return $this->mRecursive;
+       }
 }
index 8a5caa2..7e4e53e 100644 (file)
@@ -1713,14 +1713,29 @@ class DifferenceEngine extends ContextSource {
         *     false signifies that there is no previous/next revision ($old is the oldest/newest one).
         */
        public function mapDiffPrevNext( $old, $new ) {
+               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
                if ( $new === 'prev' ) {
                        // Show diff between revision $old and the previous one. Get previous one from DB.
                        $newid = intval( $old );
-                       $oldid = $this->getTitle()->getPreviousRevisionID( $newid );
+                       $oldid = false;
+                       $newRev = $rl->getRevisionById( $newid );
+                       if ( $newRev ) {
+                               $oldRev = $rl->getPreviousRevision( $newRev );
+                               if ( $oldRev ) {
+                                       $oldid = $oldRev->getId();
+                               }
+                       }
                } elseif ( $new === 'next' ) {
                        // Show diff between revision $old and the next one. Get next one from DB.
                        $oldid = intval( $old );
-                       $newid = $this->getTitle()->getNextRevisionID( $oldid );
+                       $newid = false;
+                       $oldRev = $rl->getRevisionById( $oldid );
+                       if ( $oldRev ) {
+                               $newRev = $rl->getNextRevision( $oldRev );
+                               if ( $newRev ) {
+                                       $newid = $newRev->getId();
+                               }
+                       }
                } else {
                        $oldid = intval( $old );
                        $newid = intval( $new );
index 92118fe..2f5b3dc 100644 (file)
  * @ingroup Dump
  */
 class DumpMultiWriter {
+       /** @var array */
+       private $sinks;
+       /** @var int */
+       private $count;
 
        /**
         * @param array $sinks
index ec0b344..fd200d1 100644 (file)
@@ -28,8 +28,9 @@
  */
 
 use MediaWiki\MediaWikiServices as MediaWikiServicesAlias;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup SpecialPage Dump
@@ -67,7 +68,7 @@ class WikiExporter {
        /** @var XmlDumpWriter */
        private $writer;
 
-       /** @var Database */
+       /** @var IDatabase */
        protected $db;
 
        /** @var array|int */
@@ -86,7 +87,7 @@ class WikiExporter {
        }
 
        /**
-        * @param Database $db
+        * @param IDatabase $db
         * @param int|array $history One of WikiExporter::FULL, WikiExporter::CURRENT,
         *   WikiExporter::RANGE or WikiExporter::STABLE, or an associative array:
         *   - offset: non-inclusive offset at which to start the query
@@ -303,29 +304,36 @@ class WikiExporter {
                if ( $cond ) {
                        $where[] = $cond;
                }
-               # Get logging table name for logging.* clause
-               $logging = $this->db->tableName( 'logging' );
-
                $result = null; // Assuring $result is not undefined, if exception occurs early
 
                $commentQuery = CommentStore::getStore()->getJoin( 'log_comment' );
                $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
 
+               $tables = array_merge(
+                       [ 'logging' ], $commentQuery['tables'], $actorQuery['tables'], [ 'user' ]
+               );
+               $fields = [
+                       'log_id', 'log_type', 'log_action', 'log_timestamp', 'log_namespace',
+                       'log_title', 'log_params', 'log_deleted', 'user_name'
+               ] + $commentQuery['fields'] + $actorQuery['fields'];
+               $options = [
+                       'ORDER BY' => 'log_id',
+                       'USE INDEX' => [ 'logging' => 'PRIMARY' ],
+                       'LIMIT' => self::BATCH_SIZE,
+               ];
+               $joins = [
+                       'user' => [ 'JOIN', 'user_id = ' . $actorQuery['fields']['log_user'] ]
+               ] + $commentQuery['joins'] + $actorQuery['joins'];
+
                $lastLogId = 0;
                while ( true ) {
                        $result = $this->db->select(
-                               array_merge( [ 'logging' ], $commentQuery['tables'], $actorQuery['tables'], [ 'user' ] ),
-                               [ "{$logging}.*", 'user_name' ] + $commentQuery['fields'] + $actorQuery['fields'],
+                               $tables,
+                               $fields,
                                array_merge( $where, [ 'log_id > ' . intval( $lastLogId ) ] ),
                                __METHOD__,
-                               [
-                                       'ORDER BY' => 'log_id',
-                                       'USE INDEX' => [ 'logging' => 'PRIMARY' ],
-                                       'LIMIT' => self::BATCH_SIZE,
-                               ],
-                               [
-                                       'user' => [ 'JOIN', 'user_id = ' . $actorQuery['fields']['log_user'] ]
-                               ] + $commentQuery['joins'] + $actorQuery['joins']
+                               $options,
+                               $joins
                        );
 
                        if ( !$result->numRows() ) {
index 42e78ff..ff8f056 100644 (file)
@@ -142,6 +142,12 @@ class FileRepo {
        /** @var WANObjectCache */
        protected $wanCache;
 
+       /**
+        * @var string
+        * @protected Use $this->getName(). Public for back-compat only
+        */
+       public $name;
+
        /**
         * @param array|null $info
         * @throws MWException
index 17fa146..b4fd176 100644 (file)
@@ -94,6 +94,9 @@ class ArchivedFile {
        /** @var Title */
        protected $title; # image title
 
+       /** @var bool */
+       private $exists;
+
        /**
         * @throws MWException
         * @param Title $title
index 85988f6..f363beb 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Helper class for file deletion
index 21980b9..0cdc2d5 100644 (file)
@@ -46,6 +46,24 @@ class LocalFileMoveBatch {
        /** @var IDatabase */
        protected $db;
 
+       /** @var string */
+       protected $oldHash;
+
+       /** @var string */
+       protected $newHash;
+
+       /** @var string */
+       protected $oldName;
+
+       /** @var string */
+       protected $newName;
+
+       /** @var string */
+       protected $oldRel;
+
+       /** @var string */
+       protected $newRel;
+
        /**
         * @param File $file
         * @param Title $target
index c6d8ddf..4781a48 100644 (file)
@@ -88,6 +88,15 @@ abstract class ImageGalleryBase extends ContextSource {
        /** @var array */
        protected $mAttribs = [];
 
+       /** @var int */
+       protected $mPerRow;
+
+       /** @var int */
+       protected $mWidths;
+
+       /** @var int */
+       protected $mHeights;
+
        /** @var array */
        private static $modeMapping;
 
index 6e760fa..a5d7145 100644 (file)
@@ -149,6 +149,5 @@ if ( false ) {
        // autoload entries for the lowercase variants of these classes (T166759).
        // The code below is never executed, but it is picked up by the AutoloadGenerator
        // parser, which scans for class_alias() calls.
-       // @phan-suppress-next-line PhanRedefineClassAlias
        class_alias( ConcatenatedGzipHistoryBlob::class, 'concatenatedgziphistoryblob' );
 }
index cd2a935..8858c8d 100644 (file)
@@ -69,6 +69,5 @@ if ( false ) {
        // autoload entries for the lowercase variants of these classes (T166759).
        // The code below is never executed, but it is picked up by the AutoloadGenerator
        // parser, which scans for class_alias() calls.
-       // @phan-suppress-next-line PhanRedefineClassAlias
        class_alias( HistoryBlobCurStub::class, 'historyblobcurstub' );
 }
index c92e1b5..9a4df1f 100644 (file)
@@ -149,6 +149,5 @@ if ( false ) {
        // autoload entries for the lowercase variants of these classes (T166759).
        // The code below is never executed, but it is picked up by the AutoloadGenerator
        // parser, which scans for class_alias() calls.
-       // @phan-suppress-next-line PhanRedefineClassAlias
        class_alias( HistoryBlobStub::class, 'historyblobstub' );
 }
index 048abbb..b55b652 100644 (file)
@@ -657,6 +657,7 @@ abstract class HTMLFormField {
         * @param OOUI\Widget $inputField
         * @param array $config
         * @return OOUI\FieldLayout|OOUI\ActionFieldLayout
+        * @suppress PhanUndeclaredProperty Only some subclasses declare mClassWithButton
         */
        protected function getFieldLayoutOOUI( $inputField, $config ) {
                if ( isset( $this->mClassWithButton ) ) {
index 354432b..05ab0bb 100644 (file)
@@ -11,6 +11,9 @@
  * @todo FIXME: If made 'required', only the text field should be compulsory.
  */
 class HTMLSelectAndOtherField extends HTMLSelectField {
+       /** @var string[] */
+       private $mFlatOptions;
+
        public function __construct( $params ) {
                if ( array_key_exists( 'other', $params ) ) {
                        // Do nothing
index a4120a3..13ab9b7 100644 (file)
@@ -29,6 +29,7 @@ use GuzzleHttp\Psr7\StreamDecoratorTrait;
  *
  * @private for use by GuzzleHttpRequest only
  * @since 1.33
+ * @property StreamInterface $stream Defined in StreamDecoratorTrait via @property, not read by phan
  */
 class MWCallbackStream implements StreamInterface {
        use StreamDecoratorTrait;
index 2f8f5dd..81e414e 100644 (file)
@@ -30,6 +30,9 @@ use MediaWiki\MediaWikiServices;
  * @ingroup SpecialPage
  */
 class ImportStreamSource implements ImportSource {
+       /** @var resource */
+       private $mHandle;
+
        /**
         * @param resource $handle
         */
index fdd1f77..b75ea1a 100644 (file)
  * @ingroup SpecialPage
  */
 class ImportStringSource implements ImportSource {
+       /** @var string */
+       private $mString;
+
+       /** @var bool */
+       private $mRead;
+
        /**
         * @param string $string
         */
index 0d1cc68..6eba4f3 100644 (file)
@@ -33,7 +33,8 @@ use MediaWiki\MediaWikiServices;
  * @ingroup SpecialPage
  */
 class WikiImporter {
-       private $reader = null;
+       /** @var XMLReader */
+       private $reader;
        private $foreignNamespaces = null;
        private $mLogItemCallback, $mUploadCallback, $mRevisionCallback, $mPageCallback;
        private $mSiteInfoCallback, $mPageOutCallback;
index 08cfd86..eb96e05 100644 (file)
@@ -21,6 +21,9 @@
  */
 
 class InstallDocFormatter {
+       /** @var string */
+       private $text;
+
        public static function format( $text ) {
                $obj = new self( $text );
 
index a2179c6..6921361 100644 (file)
@@ -30,6 +30,7 @@
 class LocalSettingsGenerator {
 
        protected $extensions = [];
+       protected $skins = [];
        protected $values = [];
        protected $groupPermissions = [];
        protected $dbSettings = '';
index 64c017b..ea88411 100644 (file)
@@ -29,7 +29,7 @@ use MediaWiki\MediaWikiServices;
  *
  * @ingroup Deployment
  * @since 1.17
- * @property DatabaseMysqlBase $db
+ * @property Wikimedia\Rdbms\DatabaseMysqlBase $db
  */
 class MysqlUpdater extends DatabaseUpdater {
        protected function getCoreUpdateList() {
index 9a3d4a3..e9b0c56 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DatabasePostgres;
 use Wikimedia\Rdbms\DBQueryError;
 use Wikimedia\Rdbms\DBConnectionError;
 
index 168c937..dfea0a5 100644 (file)
@@ -7,7 +7,8 @@
                        "Zedlik",
                        "아라",
                        "Red Winged Duck",
-                       "Macofe"
+                       "Macofe",
+                       "Renessaince"
                ]
        },
        "config-desc": "Праграма ўсталяваньня MediaWiki",
@@ -85,7 +86,7 @@
        "config-uploads-not-safe": "'''Папярэджаньне:''' дырэкторыя для загрузак па змоўчваньні <code>$1</code> уразьлівая да выкананьня адвольнага коду.\nХоць MediaWiki і правярае ўсе файлы перад захаваньнем, вельмі рэкамэндуецца [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security закрыць гэтую ўразьлівасьць] перад уключэньнем магчымасьці загрузкі файлаў.",
        "config-no-cli-uploads-check": "'''Папярэджаньне:''' Вашая дырэкторыя для загрузак па змоўчваньні (<code>$1</code>), не правераная на ўразьлівасьць да выкананьня адвольных скрыптоў падчас усталяваньня CLI.\n.",
        "config-brokenlibxml": "У Вашай сыстэме ўсталяваныя PHP і libxml2 зь несумяшчальнымі вэрсіямі, што можа прывесьці да пашкоджаньня зьвестак MediaWiki і іншых вэб-дастасаваньняў.\nАбнавіце libxml2 да вэрсіі 2.7.3 ці больш позьняй ([https://bugs.php.net/bug.php?id=45996 паведамленьне пра памылку на сайце PHP]).\nУсталяваньне перарванае.",
-       "config-suhosin-max-value-length": "Suhosin усталяваны і абмяжоўвае <code>даўжыню</code> парамэтру GET да $1 {{PLURAL:$1|1=байта|байтаў}}.\nResourceLoader, складнік MediaWiki, будзе абходзіць гэтае абмежаваньне, што адаб’ецца на прадукцыйнасьці.\nКалі магчыма, варта ўсталяваць у <code>php.ini</code> значэньне <code>suhosin.get.max_value_length</code> роўным 1024 ці больш, а таксама вызначыць тое ж значэньне для <code>$wgResourceLoaderMaxQueryLength</code> у <code>LocalSettings.php</code>.",
+       "config-suhosin-max-value-length": "Suhosin усталяваны і абмяжоўвае <code>даўжыню</code> парамэтру GET да $1 {{PLURAL:$1|1=байта|байтаў}}.\nMediaWiki патрабуе, каб <code>suhosin.get.max_value_length</code> складаў прынамсі $2. Адключыце гэтую наладу ці павялічце гэтае значэньня да $3 ў <code>php.ini</code>.",
        "config-using-32bit": "<strong>Папярэджаньне:</strong> падобна, што вашая сыстэма выкарыстоўвае 32-бітавыя цэлыя лікі. Гэта [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не рэкамэндуецца].",
        "config-db-type": "Тып базы зьвестак:",
        "config-db-host": "Хост базы зьвестак:",
index 74d8895..3ce3fe2 100644 (file)
@@ -12,6 +12,7 @@
        "config-localsettings-upgrade": "L'arkivo <code>LocalSettings.php</code> trovesis.\nPor plubonigar l'instaluro, voluntez informar la valoro dil  <code>$wgUpgradeKey</code> en l'infra buxo.\nVu trovos ol en <code>LocalSettings.php</code>.",
        "config-session-error": "Eroro dum komenco di seciono: $1",
        "config-session-expired": "Vua sesiono probable finis.\nSesioni programesis por durar $1\nVu povas augmentar to per modifiko di <code>session.gc_maxlifetime</code> en php.ini.\nRikomencez l'instalo-procedo.",
+       "config-no-session": "La dati pri vua sesiono desaparis!\nVerifikez vua arkivo php.ini e certigez su pri <code>session.save_path</code> indikas la korekta libro di adresaro.",
        "config-your-language": "Vua idiomo:",
        "config-your-language-help": "Selektez l'idiomo por uzar dum l'instalo-procedo.",
        "config-wiki-language": "Wiki linguo:",
        "config-help-restart": "Ka vu deziras efacar omna dati qui vu sparis, e rikomencar la procedi pri instalo?",
        "config-restart": "Yes, rikomencez ol",
        "config-welcome-section-copyright": "=== Autoroyuro e termini ===\n\n$1\n\nCa informatikoprogramo esas libera; vu povas ridistributar ol e/o modifikar ol segun la termini de la Generala Licenco Publika GNU, quale stipulata da Free Software Foundation; segun lua versiono 2 o sequanta.\n\nNi expektas ke ca programo esas utila, kande ni distributas ol. <strong>Tamen, ni ne povas grantar ke ol fakte esos utila</strong>. Ni anke ne povas afirmar ke ol esos <strong>vendebla</strong> o <strong>ke ol esos utila por specifika intenco</strong>.\nLektez la Generala Licenco Publika GNU por plusa detali.\n\nKune ica programo vu certe recevis [$2  kopiuro di la Generala Licenco Publika GNU]. Se vu ne recevis ol, voluntez skribar a la fonduro Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [https://www.gnu.org/copyleft/gpl.html lektez ol che l'interreto].",
+       "config-sidebar-readme": "Lektez me",
+       "config-sidebar-relnotes": "Informi pri la versiono",
+       "config-sidebar-license": "Kopiuro",
+       "config-sidebar-upgrade": "Nova versiono",
        "config-env-good": "Omno verifikesis.\nVu povas intalar MediaWiki.",
        "config-env-bad": "Omno verifikesis.\nVu NE POVAS intalar MediaWiki.",
        "config-env-php": "PHP $1 instalesis.",
        "config-env-hhvm": "HHVM $1 instalesis.",
+       "config-unicode-using-intl": "Uzanta [https://php.net/manual/en/book.intl.php PHP intl extension] por normaligo Unicode.",
        "config-unicode-pure-php-warning": "<strong>Atencez:</strong> La [https://php.net/manual/en/book.intl.php prolonguro PHP intl] ne esas disponebla por traktar skribo-normaligo \"Unicode\". Vice, uzesas la plu lenta laborado en pura PHP.\nSe vu administras pagini multe vizitata, vu mustas lektar la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations skribo-normaligo Unicode].",
+       "config-unicode-update-warning": "<strong>Atencez:</strong> La versiono di ''Unicode normalization wrapper'' instalata en vua komputero uzas obsoleta versiono di la biblioteko del [http://site.icu-project.org/ projeto ICU].\nVu mustas instalar [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations la nova versiono] se vu deziras uzar Unicode.",
        "config-memory-raised": "Parametro <code>memory_limit</code> esas $1, modifikata a $2.",
        "config-memory-bad": "<strong>Atences:</strong> la limito por PHP <code>memory_limit</code> esas $1.\nTo probable esas nesuficanta.\nL'instalo-procedo povas faliar!",
        "config-apc": "[https://www.php.net/apc APC] instalesis",
        "config-apcu": "[https://www.php.net/apcu APCu] instalesis",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] instalesis",
+       "config-no-uri": "<strong>Eroro:</strong> Ne esis posibla identifikar l'existanta URI.\nInstalo interruptata.",
+       "config-no-cli-uri": "<strong>Avizo:</strong> Nula <code>--scriptpath</code> informata. Uzanta la preexistanta: <code>$1</code>.",
+       "config-using-server": "Uzanta ret-adreso (URL) dil servero \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Ret-adreso (URL) dil servero \"<nowiki>$1$2</nowiki>\".",
+       "config-db-type": "Tipo di datumaro:",
+       "config-db-host": "Loko dil datumaro:",
        "config-db-wiki-settings": "Identifikez ca wiki",
        "config-db-name": "Nomo dil datumaro (sen strekteti):",
        "config-db-install-account": "Konto dil uzero por instalo",
        "config-db-username": "Uzero-nomo dil datumaro:",
        "config-db-password": "Pasovorto dil datumaro:",
        "config-invalid-db-type": "Nevalida tipo di datumaro.",
+       "config-missing-db-name": "Vu mustas informar valoro por \"{{int:config-db-name}}\".",
+       "config-missing-db-host": "Vu mustas informar valoro por \"{{int:config-db-host}}\".",
+       "config-sqlite-readonly": "L'arkivo <code>$1</code> esas nur lektebla.",
+       "config-sqlite-cant-create-db": "Ne povis krear l'arkivo di datumaro <code>$1</code>.",
        "config-ns-generic": "Projeto",
        "config-ns-site-name": "Sama kam la wiki-nomo: $1",
        "config-ns-other": "Altra (definez precise)",
index 5e7485c..f511229 100644 (file)
@@ -48,6 +48,9 @@ class MemoizedCallable {
        /** @var string Unique name of callable; used for cache keys. */
        private $callableName;
 
+       /** @var int */
+       private $ttl;
+
        /**
         * @throws InvalidArgumentException if $callable is not a callable.
         * @param callable $callable Function or method to memoize.
index 54d43d3..b036f05 100644 (file)
@@ -7,6 +7,10 @@
  * @since 1.27
  */
 class ComposerInstalled {
+       /**
+        * @var array[]
+        */
+       private $contents;
 
        /**
         * @param string $location
@@ -18,7 +22,7 @@ class ComposerInstalled {
        /**
         * Dependencies currently installed according to installed.json
         *
-        * @return array
+        * @return array[]
         */
        public function getInstalledDependencies() {
                $deps = [];
index 62231a8..f92759b 100644 (file)
@@ -7,6 +7,10 @@
  * @since 1.25
  */
 class ComposerJson {
+       /**
+        * @var array[]
+        */
+       private $contents;
 
        /**
         * @param string $location
@@ -18,7 +22,7 @@ class ComposerJson {
        /**
         * Dependencies as specified by composer.json
         *
-        * @return array
+        * @return string[]
         */
        public function getRequiredDependencies() {
                $deps = [];
index c5b5f00..7f6b875 100644 (file)
@@ -7,6 +7,10 @@
  * @since 1.25
  */
 class ComposerLock {
+       /**
+        * @var array[]
+        */
+       private $contents;
 
        /**
         * @param string $location
@@ -18,7 +22,7 @@ class ComposerLock {
        /**
         * Dependencies currently installed according to composer.lock
         *
-        * @return array
+        * @return array[]
         */
        public function getInstalledDependencies() {
                $deps = [];
index 9ed7ae3..26f3d3a 100644 (file)
@@ -73,7 +73,7 @@ class FSFileBackend extends FileBackendStore {
        /** @var string Required OS username to own files */
        protected $fileOwner;
 
-       /** @var bool Whether the OS is Windows (otherwise assumed Unix-like)*/
+       /** @var bool Whether the OS is Windows (otherwise assumed Unix-like) */
        protected $isWindows;
        /** @var string OS username running this script */
        protected $currentUser;
index 5caf250..d7d428e 100644 (file)
@@ -1396,12 +1396,12 @@ abstract class FileBackendStore extends FileBackend {
                        }
                }
 
-               $res = $this->doExecuteOpHandlesInternal( $fileOpHandles );
+               $statuses = $this->doExecuteOpHandlesInternal( $fileOpHandles );
                foreach ( $fileOpHandles as $fileOpHandle ) {
                        $fileOpHandle->closeResources();
                }
 
-               return $res;
+               return $statuses;
        }
 
        /**
index edea75f..820634c 100644 (file)
@@ -172,64 +172,33 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * Sanitize and filter the custom headers from a $params array.
-        * Only allows certain "standard" Content- and X-Content- headers.
+        * Filter/normalize a header map to only include mutable "content-"/"x-content-" headers
         *
-        * @param array $params
-        * @return array Sanitized value of 'headers' field in $params
-        */
-       protected function sanitizeHdrsStrict( array $params ) {
-               if ( !isset( $params['headers'] ) ) {
-                       return [];
-               }
-
-               $headers = $this->getCustomHeaders( $params['headers'] );
-               unset( $headers[ 'content-type' ] );
-
-               return $headers;
-       }
-
-       /**
-        * Sanitize and filter the custom headers from a $params array.
-        * Only allows certain "standard" Content- and X-Content- headers.
+        * Mutable headers can be changed via HTTP POST even if the file content is the same
         *
-        * When POSTing data, libcurl adds Content-Type: application/x-www-form-urlencoded
-        * if Content-Type is not set, which overwrites the stored Content-Type header
-        * in Swift - therefore for POSTing data do not strip the Content-Type header (the
-        * previously-stored header that has been already read back from swift is sent)
-        *
-        * @param array $params
-        * @return array Sanitized value of 'headers' field in $params
+        * @see https://docs.openstack.org/api-ref/object-store
+        * @param string[] $headers Map of (header => value) for a swift object
+        * @return string[] Map of (header => value) for Content-* headers mutable via POST
         */
-       protected function sanitizeHdrs( array $params ) {
-               return isset( $params['headers'] )
-                       ? $this->getCustomHeaders( $params['headers'] )
-                       : [];
-       }
-
-       /**
-        * @param array $rawHeaders
-        * @return array Custom non-metadata HTTP headers
-        */
-       protected function getCustomHeaders( array $rawHeaders ) {
-               $headers = [];
-
+       protected function extractMutableContentHeaders( array $headers ) {
+               $contentHeaders = [];
                // Normalize casing, and strip out illegal headers
-               foreach ( $rawHeaders as $name => $value ) {
+               foreach ( $headers as $name => $value ) {
                        $name = strtolower( $name );
-                       if ( preg_match( '/^content-length$/', $name ) ) {
-                               continue; // blacklisted
-                       } elseif ( preg_match( '/^(x-)?content-/', $name ) ) {
-                               $headers[$name] = $value; // allowed
-                       } elseif ( preg_match( '/^content-(disposition)/', $name ) ) {
-                               $headers[$name] = $value; // allowed
+                       if ( !preg_match( '/^(x-)?content-(?!length$)/', $name ) ) {
+                               // Only allow content-* and x-content-* headers (but not content-length)
+                               continue;
+                       } elseif ( $name === 'content-type' && !strlen( $value ) ) {
+                               // This header can be set to a value but not unset for sanity
+                               continue;
                        }
+                       $contentHeaders[$name] = $value;
                }
                // By default, Swift has annoyingly low maximum header value limits
-               if ( isset( $headers['content-disposition'] ) ) {
+               if ( isset( $contentHeaders['content-disposition'] ) ) {
                        $disposition = '';
                        // @note: assume FileBackend::makeContentDisposition() already used
-                       foreach ( explode( ';', $headers['content-disposition'] ) as $part ) {
+                       foreach ( explode( ';', $contentHeaders['content-disposition'] ) as $part ) {
                                $part = trim( $part );
                                $new = ( $disposition === '' ) ? $part : "{$disposition};{$part}";
                                if ( strlen( $new ) <= 255 ) {
@@ -238,36 +207,40 @@ class SwiftFileBackend extends FileBackendStore {
                                        break; // too long; sigh
                                }
                        }
-                       $headers['content-disposition'] = $disposition;
+                       $contentHeaders['content-disposition'] = $disposition;
                }
 
-               return $headers;
+               return $contentHeaders;
        }
 
        /**
-        * @param array $rawHeaders
-        * @return array Custom metadata headers
+        * @see https://docs.openstack.org/api-ref/object-store
+        * @param string[] $headers Map of (header => value) for a swift object
+        * @return string[] Map of (metadata header name => metadata value)
         */
-       protected function getMetadataHeaders( array $rawHeaders ) {
-               $headers = [];
-               foreach ( $rawHeaders as $name => $value ) {
+       protected function extractMetadataHeaders( array $headers ) {
+               $metadataHeaders = [];
+               foreach ( $headers as $name => $value ) {
                        $name = strtolower( $name );
                        if ( strpos( $name, 'x-object-meta-' ) === 0 ) {
-                               $headers[$name] = $value;
+                               $metadataHeaders[$name] = $value;
                        }
                }
 
-               return $headers;
+               return $metadataHeaders;
        }
 
        /**
-        * @param array $rawHeaders
-        * @return array Custom metadata headers with prefix removed
+        * @see https://docs.openstack.org/api-ref/object-store
+        * @param string[] $headers Map of (header => value) for a swift object
+        * @return string[] Map of (metadata key name => metadata value)
         */
-       protected function getMetadata( array $rawHeaders ) {
+       protected function getMetadataFromHeaders( array $headers ) {
+               $prefixLen = strlen( 'x-object-meta-' );
+
                $metadata = [];
-               foreach ( $this->getMetadataHeaders( $rawHeaders ) as $name => $value ) {
-                       $metadata[substr( $name, strlen( 'x-object-meta-' ) )] = $value;
+               foreach ( $this->extractMetadataHeaders( $headers ) as $name => $value ) {
+                       $metadata[substr( $name, $prefixLen )] = $value;
                }
 
                return $metadata;
@@ -283,19 +256,24 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               $sha1Hash = Wikimedia\base_convert( sha1( $params['content'] ), 16, 36, 31 );
-               $contentType = $params['headers']['content-type']
+               // Headers that are not strictly a function of the file content
+               $mutableHeaders = $this->extractMutableContentHeaders( $params['headers'] ?? [] );
+               // Make sure that the "content-type" header is set to something sensible
+               $mutableHeaders['content-type'] = $mutableHeaders['content-type']
                        ?? $this->getContentType( $params['dst'], $params['content'], null );
 
                $reqs = [ [
                        'method' => 'PUT',
                        'url' => [ $dstCont, $dstRel ],
-                       'headers' => [
-                               'content-length' => strlen( $params['content'] ),
-                               'etag' => md5( $params['content'] ),
-                               'content-type' => $contentType,
-                               'x-object-meta-sha1base36' => $sha1Hash
-                       ] + $this->sanitizeHdrsStrict( $params ),
+                       'headers' => array_merge(
+                               $mutableHeaders,
+                               [
+                                       'content-length' => strlen( $params['content'] ),
+                                       'etag' => md5( $params['content'] ),
+                                       'x-object-meta-sha1base36' =>
+                                               Wikimedia\base_convert( sha1( $params['content'] ), 16, 36, 31 )
+                               ]
+                       ),
                        'body' => $params['content']
                ] ];
 
@@ -309,6 +287,8 @@ class SwiftFileBackend extends FileBackendStore {
                        } else {
                                $this->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
+
+                       return SwiftFileOpHandle::CONTINUE_IF_OK;
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
@@ -332,16 +312,13 @@ class SwiftFileBackend extends FileBackendStore {
                }
 
                AtEase::suppressWarnings();
-               $sha1Hash = sha1_file( $params['src'] );
+               $sha1Base16 = sha1_file( $params['src'] );
                AtEase::restoreWarnings();
-               if ( $sha1Hash === false ) { // source doesn't exist?
+               if ( $sha1Base16 === false ) { // source doesn't exist?
                        $status->fatal( 'backend-fail-store', $params['src'], $params['dst'] );
 
                        return $status;
                }
-               $sha1Hash = Wikimedia\base_convert( $sha1Hash, 16, 36, 31 );
-               $contentType = $params['headers']['content-type']
-                       ?? $this->getContentType( $params['dst'], null, $params['src'] );
 
                $handle = fopen( $params['src'], 'rb' );
                if ( $handle === false ) { // source doesn't exist?
@@ -350,15 +327,23 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
+               // Headers that are not strictly a function of the file content
+               $mutableHeaders = $this->extractMutableContentHeaders( $params['headers'] ?? [] );
+               // Make sure that the "content-type" header is set to something sensible
+               $mutableHeaders['content-type'] = $mutableHeaders['content-type']
+                       ?? $this->getContentType( $params['dst'], null, $params['src'] );
+
                $reqs = [ [
                        'method' => 'PUT',
                        'url' => [ $dstCont, $dstRel ],
-                       'headers' => [
-                               'content-length' => filesize( $params['src'] ),
-                               'etag' => md5_file( $params['src'] ),
-                               'content-type' => $contentType,
-                               'x-object-meta-sha1base36' => $sha1Hash
-                       ] + $this->sanitizeHdrsStrict( $params ),
+                       'headers' => array_merge(
+                               $mutableHeaders,
+                               [
+                                       'content-length' => fstat( $handle )['size'],
+                                       'etag' => md5_file( $params['src'] ),
+                                       'x-object-meta-sha1base36' => Wikimedia\base_convert( $sha1Base16, 16, 36, 31 )
+                               ]
+                       ),
                        'body' => $handle // resource
                ] ];
 
@@ -372,6 +357,8 @@ class SwiftFileBackend extends FileBackendStore {
                        } else {
                                $this->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
+
+                       return SwiftFileOpHandle::CONTINUE_IF_OK;
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
@@ -406,10 +393,13 @@ class SwiftFileBackend extends FileBackendStore {
                $reqs = [ [
                        'method' => 'PUT',
                        'url' => [ $dstCont, $dstRel ],
-                       'headers' => [
-                               'x-copy-from' => '/' . rawurlencode( $srcCont ) .
-                                       '/' . str_replace( "%2F", "/", rawurlencode( $srcRel ) )
-                       ] + $this->sanitizeHdrsStrict( $params ), // extra headers merged into object
+                       'headers' => array_merge(
+                               $this->extractMutableContentHeaders( $params['headers'] ?? [] ),
+                               [
+                                       'x-copy-from' => '/' . rawurlencode( $srcCont ) . '/' .
+                                               str_replace( "%2F", "/", rawurlencode( $srcRel ) )
+                               ]
+                       )
                ] ];
 
                $method = __METHOD__;
@@ -418,10 +408,14 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( $rcode === 201 ) {
                                // good
                        } elseif ( $rcode === 404 ) {
-                               $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                               if ( empty( $params['ignoreMissingSource'] ) ) {
+                                       $status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
+                               }
                        } else {
                                $this->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
+
+                       return SwiftFileOpHandle::CONTINUE_IF_OK;
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
@@ -451,16 +445,17 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               $reqs = [
-                       [
-                               'method' => 'PUT',
-                               'url' => [ $dstCont, $dstRel ],
-                               'headers' => [
-                                       'x-copy-from' => '/' . rawurlencode( $srcCont ) .
-                                               '/' . str_replace( "%2F", "/", rawurlencode( $srcRel ) )
-                               ] + $this->sanitizeHdrsStrict( $params ) // extra headers merged into object
-                       ]
-               ];
+               $reqs = [ [
+                       'method' => 'PUT',
+                       'url' => [ $dstCont, $dstRel ],
+                       'headers' => array_merge(
+                               $this->extractMutableContentHeaders( $params['headers'] ?? [] ),
+                               [
+                                       'x-copy-from' => '/' . rawurlencode( $srcCont ) . '/' .
+                                               str_replace( "%2F", "/", rawurlencode( $srcRel ) )
+                               ]
+                       )
+               ] ];
                if ( "{$srcCont}/{$srcRel}" !== "{$dstCont}/{$dstRel}" ) {
                        $reqs[] = [
                                'method' => 'DELETE',
@@ -477,10 +472,17 @@ class SwiftFileBackend extends FileBackendStore {
                        } elseif ( $request['method'] === 'DELETE' && $rcode === 204 ) {
                                // good
                        } elseif ( $rcode === 404 ) {
-                               $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                               if ( empty( $params['ignoreMissingSource'] ) ) {
+                                       $status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
+                               } else {
+                                       // Leave Status as OK but skip the DELETE request
+                                       return SwiftFileOpHandle::CONTINUE_NO;
+                               }
                        } else {
                                $this->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
+
+                       return SwiftFileOpHandle::CONTINUE_IF_OK;
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
@@ -521,6 +523,8 @@ class SwiftFileBackend extends FileBackendStore {
                        } else {
                                $this->onError( $status, $method, $params, $rerr, $rcode, $rdesc );
                        }
+
+                       return SwiftFileOpHandle::CONTINUE_IF_OK;
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
@@ -554,17 +558,20 @@ class SwiftFileBackend extends FileBackendStore {
                        return $status;
                }
 
-               // POST clears prior headers, so we need to merge the changes in to the old ones
-               $metaHdrs = [];
+               // Swift object POST clears any prior headers, so merge the new and old headers here.
+               // Also, during, POST, libcurl adds "Content-Type: application/x-www-form-urlencoded"
+               // if "Content-Type" is not set, which would clobber the header value for the object.
+               $oldMetadataHeaders = [];
                foreach ( $stat['xattr']['metadata'] as $name => $value ) {
-                       $metaHdrs["x-object-meta-$name"] = $value;
+                       $oldMetadataHeaders["x-object-meta-$name"] = $value;
                }
-               $customHdrs = $this->sanitizeHdrs( $params ) + $stat['xattr']['headers'];
+               $newContentHeaders = $this->extractMutableContentHeaders( $params['headers'] ?? [] );
+               $oldContentHeaders = $stat['xattr']['headers'];
 
                $reqs = [ [
                        'method' => 'POST',
                        'url' => [ $srcCont, $srcRel ],
-                       'headers' => $metaHdrs + $customHdrs
+                       'headers' => $oldMetadataHeaders + $newContentHeaders + $oldContentHeaders
                ] ];
 
                $method = __METHOD__;
@@ -743,9 +750,9 @@ class SwiftFileBackend extends FileBackendStore {
                }
 
                // Find prior custom HTTP headers
-               $postHeaders = $this->getCustomHeaders( $objHdrs );
+               $postHeaders = $this->extractMutableContentHeaders( $objHdrs );
                // Find prior metadata headers
-               $postHeaders += $this->getMetadataHeaders( $objHdrs );
+               $postHeaders += $this->extractMetadataHeaders( $objHdrs );
 
                $status = $this->newStatus();
                /** @noinspection PhpUnusedLocalVariableInspection */
@@ -1083,11 +1090,11 @@ class SwiftFileBackend extends FileBackendStore {
        protected function doStreamFile( array $params ) {
                $status = $this->newStatus();
 
-               $flags = !empty( $params['headless'] ) ? StreamFile::STREAM_HEADLESS : 0;
+               $flags = !empty( $params['headless'] ) ? HTTPFileStreamer::STREAM_HEADLESS : 0;
 
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
                if ( $srcRel === null ) {
-                       StreamFile::send404Message( $params['src'], $flags );
+                       HTTPFileStreamer::send404Message( $params['src'], $flags );
                        $status->fatal( 'backend-fail-invalidpath', $params['src'] );
 
                        return $status;
@@ -1095,7 +1102,7 @@ class SwiftFileBackend extends FileBackendStore {
 
                $auth = $this->getAuthentication();
                if ( !$auth || !is_array( $this->getContainerStat( $srcCont ) ) ) {
-                       StreamFile::send404Message( $params['src'], $flags );
+                       HTTPFileStreamer::send404Message( $params['src'], $flags );
                        $status->fatal( 'backend-fail-stream', $params['src'] );
 
                        return $status;
@@ -1104,7 +1111,7 @@ class SwiftFileBackend extends FileBackendStore {
                // If "headers" is set, we only want to send them if the file is there.
                // Do not bother checking if the file exists if headers are not set though.
                if ( $params['headers'] && !$this->fileExists( $params ) ) {
-                       StreamFile::send404Message( $params['src'], $flags );
+                       HTTPFileStreamer::send404Message( $params['src'], $flags );
                        $status->fatal( 'backend-fail-stream', $params['src'] );
 
                        return $status;
@@ -1293,11 +1300,6 @@ class SwiftFileBackend extends FileBackendStore {
                return $hdrs;
        }
 
-       /**
-        * @param FileBackendStoreOpHandle[] $fileOpHandles
-        *
-        * @return StatusValue[]
-        */
        protected function doExecuteOpHandlesInternal( array $fileOpHandles ) {
                /** @var SwiftFileOpHandle[] $fileOpHandles */
                '@phan-var SwiftFileOpHandle[] $fileOpHandles';
@@ -1334,13 +1336,18 @@ class SwiftFileBackend extends FileBackendStore {
                for ( $stage = 0; $stage < $reqCount; ++$stage ) {
                        $httpReqs = $this->http->runMulti( $httpReqsByStage[$stage] );
                        foreach ( $httpReqs as $index => $httpReq ) {
+                               /** @var SwiftFileOpHandle $fileOpHandle */
+                               $fileOpHandle = $fileOpHandles[$index];
                                // Run the callback for each request of this operation
-                               $callback = $fileOpHandles[$index]->callback;
-                               $callback( $httpReq, $statuses[$index] );
-                               // On failure, abort all remaining requests for this operation
-                               // (e.g. abort the DELETE request if the COPY request fails for a move)
-                               if ( !$statuses[$index]->isOK() ) {
-                                       $stages = count( $fileOpHandles[$index]->httpOp );
+                               $status = $statuses[$index];
+                               ( $fileOpHandle->callback )( $httpReq, $status );
+                               // On failure, abort all remaining requests for this operation. This is used
+                               // in "move" operations to abort the DELETE request if the PUT request fails.
+                               if (
+                                       !$status->isOK() ||
+                                       $fileOpHandle->state === $fileOpHandle::CONTINUE_NO
+                               ) {
+                                       $stages = count( $fileOpHandle->httpOp );
                                        for ( $s = ( $stage + 1 ); $s < $stages; ++$s ) {
                                                unset( $httpReqsByStage[$s][$index] );
                                        }
@@ -1670,9 +1677,9 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function getStatFromHeaders( array $rhdrs ) {
                // Fetch all of the custom metadata headers
-               $metadata = $this->getMetadata( $rhdrs );
+               $metadata = $this->getMetadataFromHeaders( $rhdrs );
                // Fetch all of the custom raw HTTP headers
-               $headers = $this->sanitizeHdrs( [ 'headers' => $rhdrs ] );
+               $headers = $this->extractMutableContentHeaders( $rhdrs );
 
                return [
                        // Convert various random Swift dates to TS_MW
index 1119867..70ed46a 100644 (file)
  * @see FileBackendStoreOpHandle
  */
 class SwiftFileOpHandle extends FileBackendStoreOpHandle {
-       /** @var array List of Requests for MultiHttpClient */
+       /** @var array[] List of HTTP request maps for MultiHttpClient */
        public $httpOp;
-       /** @var Closure */
+       /** @var Closure Function to run after each HTTP request finishes */
        public $callback;
 
+       /** @var int Class CONTINUE_* constant */
+       public $state = self::CONTINUE_IF_OK;
+
+       /** @var int Continue with the next requests stages if no errors occured */
+       const CONTINUE_IF_OK = 0;
+       /** @var int Cancel the next requests stages */
+       const CONTINUE_NO = 1;
+
        /**
+        * Construct a handle to be use with SwiftFileOpHandle::doExecuteOpHandlesInternal()
+        *
+        * The callback returns a class CONTINUE_* constant and takes the following parameters:
+        *   - An HTTP request map array with 'response' filled
+        *   - A StatusValue instance to be updated as needed
+        *
         * @param SwiftFileBackend $backend
-        * @param Closure $callback Function that takes (HTTP request array, status)
+        * @param Closure $callback
         * @param array $httpOp MultiHttpClient op
         */
        public function __construct( SwiftFileBackend $backend, Closure $callback, array $httpOp ) {
index 6478a61..83dcc6b 100644 (file)
@@ -152,7 +152,7 @@ abstract class QuorumLockManager extends LockManager {
         * This is all or nothing; if any key is already pledged then this totally fails.
         *
         * @param int $bucket
-        * @param callable $callback Pledge method taking a server name and yeilding a StatusValue
+        * @param callable $callback Pledge method taking a server name and yielding a StatusValue
         * @return StatusValue
         */
        final protected function collectPledgeQuorum( $bucket, callable $callback ) {
@@ -194,7 +194,7 @@ abstract class QuorumLockManager extends LockManager {
         * Attempt to release pledges with the peers for a bucket
         *
         * @param int $bucket
-        * @param callable $callback Pledge method taking a server name and yeilding a StatusValue
+        * @param callable $callback Pledge method taking a server name and yielding a StatusValue
         * @return StatusValue
         */
        final protected function releasePledges( $bucket, callable $callback ) {
index 9d66326..16cd5ca 100644 (file)
@@ -68,6 +68,9 @@ class XmlTypeCheck {
         */
        protected $stackDepth = 0;
 
+       /** @var callable|null */
+       protected $filterCallback;
+
        /**
         * @var array Additional parsing options
         */
index 51f7316..77a7883 100644 (file)
@@ -46,7 +46,7 @@ class MultiWriteBagOStuff extends BagOStuff {
        /**
         * $params include:
         *   - caches: A numbered array of either ObjectFactory::getObjectFromSpec
-        *      arrays yeilding BagOStuff objects or direct BagOStuff objects.
+        *      arrays yielding BagOStuff objects or direct BagOStuff objects.
         *      If using the former, the 'args' field *must* be set.
         *      The first cache is the primary one, being the first to
         *      be read in the fallback chain. Writes happen to all stores
index ff87829..9f953e1 100644 (file)
@@ -47,9 +47,9 @@ class ReplicatedBagOStuff extends BagOStuff {
 
        /**
         * Constructor. Parameters are:
-        *   - writeFactory: ObjectFactory::getObjectFromSpec array yeilding BagOStuff.
+        *   - writeFactory: ObjectFactory::getObjectFromSpec array yielding BagOStuff.
         *      This object will be used for writes (e.g. the master DB).
-        *   - readFactory: ObjectFactory::getObjectFromSpec array yeilding BagOStuff.
+        *   - readFactory: ObjectFactory::getObjectFromSpec array yielding BagOStuff.
         *      This object will be used for reads (e.g. a replica DB).
         *   - sessionConsistencyWindow: Seconds to read from the master source for a key
         *      after writing to it. [Default: ReplicatedBagOStuff::MAX_WRITE_DELAY]
index 77b029f..5d33e69 100644 (file)
@@ -60,7 +60,7 @@ class LBFactoryMulti extends LBFactory {
        private $masterTemplateOverrides = [];
        /** @var array[] Map of (host => server config map overrides) for main and external servers */
        private $templateOverridesByServer = [];
-       /**  @var string[]|bool[] A map of section name to read-only message */
+       /** @var string[]|bool[] A map of section name to read-only message */
        private $readOnlyBySection = [];
 
        /** @var string An ILoadMonitor class */
@@ -85,7 +85,7 @@ class LBFactoryMulti extends LBFactory {
         * data can be before the load balancer tries to avoid using it. The map can have 'is static'
         * set to disable blocking  replication sync checks (intended for archive servers with
         * unchanging data).
-
+        *
         * @see LBFactory::__construct()
         * @param array $conf Additional parameters include:
         *   - hostsByName                 Optional (hostname => IP address) map.
index 0abb6f6..565a65f 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * This class formats delete log entries.
@@ -32,6 +32,12 @@ use MediaWiki\Storage\RevisionRecord;
  * @since 1.19
  */
 class DeleteLogFormatter extends LogFormatter {
+       /** @var array|null */
+       private $parsedParametersDeleteLog;
+
+       /**
+        * @inheritDoc
+        */
        protected function getMessageKey() {
                $key = parent::getMessageKey();
                if ( in_array( $this->entry->getSubtype(), [ 'event', 'revision' ] ) ) {
@@ -51,8 +57,11 @@ class DeleteLogFormatter extends LogFormatter {
                return $key;
        }
 
+       /**
+        * @inheritDoc
+        */
        protected function getMessageParameters() {
-               if ( isset( $this->parsedParametersDeleteLog ) ) {
+               if ( $this->parsedParametersDeleteLog !== null ) {
                        return $this->parsedParametersDeleteLog;
                }
 
index 47aed56..5e9fdb8 100644 (file)
@@ -53,6 +53,12 @@ class LogPager extends ReverseChronologicalPager {
        /** @var bool */
        private $actionRestrictionsEnforced = false;
 
+       /** @var array */
+       private $mConds;
+
+       /** @var string */
+       private $mTagFilter;
+
        /** @var LogEventsList */
        public $mLogEventsList;
 
index 47fa16f..0783068 100644 (file)
@@ -34,8 +34,8 @@ class UserMailer {
         * Send mail using a PEAR mailer
         *
         * @param Mail_smtp $mailer
-        * @param string $dest
-        * @param string $headers
+        * @param string[]|string $dest
+        * @param array $headers
         * @param string $body
         *
         * @return Status
@@ -382,6 +382,8 @@ class UserMailer {
                                throw new MWException( 'PEAR mail package is not installed' );
                        }
 
+                       $recips = array_map( 'strval', $to );
+
                        Wikimedia\suppressWarnings();
 
                        // Create the mail object using the Mail::factory method
@@ -397,13 +399,13 @@ class UserMailer {
                        $headers['Subject'] = self::quotedPrintable( $subject );
 
                        // When sending only to one recipient, shows it its email using To:
-                       if ( count( $to ) == 1 ) {
-                               $headers['To'] = $to[0]->toString();
+                       if ( count( $recips ) == 1 ) {
+                               $headers['To'] = $recips[0];
                        }
 
                        // Split jobs since SMTP servers tends to limit the maximum
                        // number of possible recipients.
-                       $chunks = array_chunk( $to, $wgEnotifMaxRecips );
+                       $chunks = array_chunk( $recips, $wgEnotifMaxRecips );
                        foreach ( $chunks as $chunk ) {
                                $status = self::sendWithPear( $mail_object, $chunk, $headers, $body );
                                // FIXME : some chunks might be sent while others are not!
index 3b904e8..d54dd6b 100644 (file)
@@ -240,6 +240,7 @@ class DjVuHandler extends ImageHandler {
         * @param File|FSFile $image
         * @param string $path
         * @return DjVuImage
+        * @suppress PhanUndeclaredProperty Custom property
         */
        function getDjVuImage( $image, $path ) {
                if ( !$image ) {
@@ -290,6 +291,7 @@ class DjVuHandler extends ImageHandler {
         * @param File $image
         * @param bool $gettext DOCUMENT (Default: false)
         * @return bool|SimpleXMLElement
+        * @suppress PhanUndeclaredProperty Custom property
         */
        public function getMetaTree( $image, $gettext = false ) {
                if ( $gettext && isset( $image->djvuTextTree ) ) {
index 92fad52..50b13a4 100644 (file)
@@ -42,6 +42,9 @@ class DjVuImage {
         */
        const DJVUTXT_MEMORY_LIMIT = 300000;
 
+       /** @var string */
+       private $mFilename;
+
        /**
         * @param string $filename The DjVu file name.
         */
index 5e99ac9..e49feae 100644 (file)
@@ -43,11 +43,6 @@ use MediaWiki\MediaWikiServices;
  *
  * Primary entry points:
  *
- * - ObjectCache::getMainWANInstance()
- *   Purpose: Memory cache.
- *   Stored in the local data-center's main cache (keyspace different from local-cluster cache).
- *   Delete events are broadcasted to other DCs main cache. See WANObjectCache for details.
- *
  * - ObjectCache::getLocalServerInstance( $fallbackType )
  *   Purpose: Memory cache for very hot keys.
  *   Stored only on the individual web server (typically APC or APCu for web requests,
@@ -60,13 +55,6 @@ use MediaWiki\MediaWikiServices;
  *   Stored centrally within the local data-center. Not replicated to other DCs.
  *   Configured by $wgMainCacheType.
  *
- * - ObjectCache::getMainStashInstance()
- *   Purpose: Ephemeral global storage.
- *   Stored centrally within the primary data-center.
- *   Changes are applied there first and replicated to other DCs (best-effort).
- *   To retrieve the latest value (e.g. not from a replica DB), use BagOStuff::READ_LATEST.
- *   This store may be subject to LRU style evictions.
- *
  * - ObjectCache::getInstance( $cacheType )
  *   Purpose: Special cases (like tiered memory/disk caches).
  *   Get a specific cache type by key in $wgObjectCaches.
@@ -351,30 +339,6 @@ class ObjectCache {
                return self::getInstance( $wgMainCacheType );
        }
 
-       /**
-        * Get the main WAN cache object.
-        *
-        * @since 1.26
-        * @return WANObjectCache
-        * @deprecated Since 1.28 Use MediaWikiServices::getInstance()->getMainWANObjectCache()
-        */
-       public static function getMainWANInstance() {
-               wfDeprecated( __METHOD__, '1.28' );
-               return MediaWikiServices::getInstance()->getMainWANObjectCache();
-       }
-
-       /**
-        * Get the cache object for the main stash.
-        *
-        * @return BagOStuff
-        * @since 1.26
-        * @deprecated Since 1.28 Use MediaWikiServices::getInstance()->getMainObjectStash()
-        */
-       public static function getMainStashInstance() {
-               wfDeprecated( __METHOD__, '1.28' );
-               return MediaWikiServices::getInstance()->getMainObjectStash();
-       }
-
        /**
         * Clear all the cached instances.
         */
index 4bede96..6aeb038 100644 (file)
@@ -363,8 +363,16 @@ class Article implements Page {
                        }
                }
 
+               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
+               $oldRev = $this->mRevision ? $this->mRevision->getRevisionRecord() : null;
                if ( $request->getVal( 'direction' ) == 'next' ) {
-                       $nextid = $this->getTitle()->getNextRevisionID( $oldid );
+                       $nextid = 0;
+                       if ( $oldRev ) {
+                               $nextRev = $rl->getNextRevision( $oldRev );
+                               if ( $nextRev ) {
+                                       $nextid = $nextRev->getId();
+                               }
+                       }
                        if ( $nextid ) {
                                $oldid = $nextid;
                                $this->mRevision = null;
@@ -372,7 +380,13 @@ class Article implements Page {
                                $this->mRedirectUrl = $this->getTitle()->getFullURL( 'redirect=no' );
                        }
                } elseif ( $request->getVal( 'direction' ) == 'prev' ) {
-                       $previd = $this->getTitle()->getPreviousRevisionID( $oldid );
+                       $previd = 0;
+                       if ( $oldRev ) {
+                               $prevRev = $rl->getPreviousRevision( $oldRev );
+                               if ( $prevRev ) {
+                                       $previd = $prevRev->getId();
+                               }
+                       }
                        if ( $previd ) {
                                $oldid = $previd;
                                $this->mRevision = null;
@@ -1599,8 +1613,9 @@ class Article implements Page {
                                        'oldid' => $oldid
                                ] + $extraParams
                        );
-               $prev = $this->getTitle()->getPreviousRevisionID( $oldid );
-               $prevlink = $prev
+               $rl = MediaWikiServices::getInstance()->getRevisionLookup();
+               $prevExist = (bool)$rl->getPreviousRevision( $revision->getRevisionRecord() );
+               $prevlink = $prevExist
                        ? Linker::linkKnown(
                                $this->getTitle(),
                                $context->msg( 'previousrevision' )->escaped(),
@@ -1611,7 +1626,7 @@ class Article implements Page {
                                ] + $extraParams
                        )
                        : $context->msg( 'previousrevision' )->escaped();
-               $prevdiff = $prev
+               $prevdiff = $prevExist
                        ? Linker::linkKnown(
                                $this->getTitle(),
                                $context->msg( 'diff' )->escaped(),
index 40c63d2..8b2ff6b 100644 (file)
@@ -756,10 +756,14 @@ class PageArchive {
 
                        Hooks::run( 'ArticleUndelete',
                                [ &$this->title, $created, $comment, $oldPageId, $restoredPages ] );
+
                        if ( $this->title->getNamespace() == NS_FILE ) {
-                               DeferredUpdates::addUpdate(
-                                       new HTMLCacheUpdate( $this->title, 'imagelinks', 'file-restore' )
+                               $job = HTMLCacheUpdateJob::newForBacklinks(
+                                       $this->title,
+                                       'imagelinks',
+                                       [ 'causeAction' => 'file-restore' ]
                                );
+                               JobQueueGroup::singleton()->lazyPush( $job );
                        }
                }
 
index acd506b..fd9f7b2 100644 (file)
@@ -176,9 +176,12 @@ class WikiFilePage extends WikiPage {
 
                if ( $this->mFile->exists() ) {
                        wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
-                       DeferredUpdates::addUpdate(
-                               new HTMLCacheUpdate( $this->mTitle, 'imagelinks', 'file-purge' )
+                       $job = HTMLCacheUpdateJob::newForBacklinks(
+                               $this->mTitle,
+                               'imagelinks',
+                               [ 'causeAction' => 'file-purge' ]
                        );
+                       JobQueueGroup::singleton()->lazyPush( $job );
                } else {
                        wfDebug( 'ImagePage::doPurge no image for '
                                . $this->mFile->getName() . "; limiting purge to cache only\n" );
index f0a656d..c8566ac 100644 (file)
@@ -3404,9 +3404,12 @@ class WikiPage implements Page, IDBAccessObject {
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
                // Invalidate caches of articles which include this page
-               DeferredUpdates::addUpdate(
-                       new HTMLCacheUpdate( $title, 'templatelinks', 'page-create' )
+               $job = HTMLCacheUpdateJob::newForBacklinks(
+                       $title,
+                       'templatelinks',
+                       [ 'causeAction' => 'page-create' ]
                );
+               JobQueueGroup::singleton()->lazyPush( $job );
 
                if ( $title->getNamespace() == NS_CATEGORY ) {
                        // Load the Category object, which will schedule a job to create
@@ -3448,9 +3451,12 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Images
                if ( $title->getNamespace() == NS_FILE ) {
-                       DeferredUpdates::addUpdate(
-                               new HTMLCacheUpdate( $title, 'imagelinks', 'page-delete' )
+                       $job = HTMLCacheUpdateJob::newForBacklinks(
+                               $title,
+                               'imagelinks',
+                               [ 'causeAction' => 'page-delete' ]
                        );
+                       JobQueueGroup::singleton()->lazyPush( $job );
                }
 
                // User talk pages
@@ -3482,20 +3488,24 @@ class WikiPage implements Page, IDBAccessObject {
                $slotsChanged = null
        ) {
                // TODO: move this into a PageEventEmitter service
-
-               if ( $slotsChanged === null || in_array( SlotRecord::MAIN,  $slotsChanged ) ) {
+               $jobs = [];
+               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]
-                       DeferredUpdates::addUpdate(
-                               new HTMLCacheUpdate( $title, 'templatelinks', 'page-edit' )
+                       $jobs[] = HTMLCacheUpdateJob::newForBacklinks(
+                               $title,
+                               'templatelinks',
+                               [ 'causeAction' => 'page-edit' ]
                        );
                }
-
                // Invalidate the caches of all pages which redirect here
-               DeferredUpdates::addUpdate(
-                       new HTMLCacheUpdate( $title, 'redirect', 'page-edit' )
+               $jobs[] = HTMLCacheUpdateJob::newForBacklinks(
+                       $title,
+                       'redirect',
+                       [ 'causeAction' => 'page-edit' ]
                );
+               JobQueueGroup::singleton()->lazyPush( $jobs );
 
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
index e1f4f38..b803241 100644 (file)
@@ -1121,7 +1121,7 @@ class CoreParserFunctions {
         * @param Parser $parser
         * @param Title $title
         * @param string $vary ParserOuput vary-* flag
-        * @return Revision
+        * @return Revision|null
         * @since 1.23
         */
        private static function getCachedRevisionObject( $parser, $title, $vary ) {
index 66c2bc3..56db812 100644 (file)
@@ -20,7 +20,6 @@
 
 namespace MediaWiki\Preferences;
 
-use Config;
 use DateTime;
 use DateTimeZone;
 use Exception;
@@ -37,6 +36,7 @@ use MediaWiki\Auth\PasswordAuthenticationRequest;
 use MediaWiki\Config\ServiceOptions;
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Permissions\PermissionManager;
 use MessageLocalizer;
 use MWException;
 use MWTimestamp;
@@ -77,6 +77,9 @@ class DefaultPreferencesFactory implements PreferencesFactory {
        /** @var NamespaceInfo */
        protected $nsInfo;
 
+       /** @var PermissionManager */
+       protected $permissionManager;
+
        /**
         * TODO Make this a const when we drop HHVM support (T192166)
         *
@@ -114,35 +117,34 @@ class DefaultPreferencesFactory implements PreferencesFactory {
        /**
         * Do not call this directly.  Get it from MediaWikiServices.
         *
-        * @param ServiceOptions|Config $options Config accepted for backwards compatibility
+        * @param ServiceOptions $options
         * @param Language $contLang
         * @param AuthManager $authManager
         * @param LinkRenderer $linkRenderer
-        * @param NamespaceInfo|null $nsInfo
+        * @param NamespaceInfo $nsInfo
+        * @param PermissionManager|null $permissionManager
         */
        public function __construct(
-               $options,
+               ServiceOptions $options,
                Language $contLang,
                AuthManager $authManager,
                LinkRenderer $linkRenderer,
-               NamespaceInfo $nsInfo = null
+               NamespaceInfo $nsInfo,
+               PermissionManager $permissionManager = null
        ) {
-               if ( $options instanceof Config ) {
-                       wfDeprecated( __METHOD__ . ' with Config parameter', '1.34' );
-                       $options = new ServiceOptions( self::$constructorOptions, $options );
-               }
-
                $options->assertRequiredOptions( self::$constructorOptions );
 
-               if ( !$nsInfo ) {
-                       wfDeprecated( __METHOD__ . ' with no NamespaceInfo argument', '1.34' );
-                       $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+               if ( !$permissionManager ) {
+                       // TODO: this is actually hard-deprecated, left for jenkins to pass
+                       // together with GlobalPreferences extension. Will be removed in a followup.
+                       $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
                }
                $this->options = $options;
                $this->contLang = $contLang;
                $this->authManager = $authManager;
                $this->linkRenderer = $linkRenderer;
                $this->nsInfo = $nsInfo;
+               $this->permissionManager = $permissionManager;
                $this->logger = new NullLogger();
        }
 
@@ -209,7 +211,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                # # Make sure that form fields have their parent set. See T43337.
                $dummyForm = new HTMLForm( [], $context );
 
-               $disable = !$user->isAllowed( 'editmyoptions' );
+               $disable = !$this->permissionManager->userHasRight( $user, 'editmyoptions' );
 
                $defaultOptions = User::getDefaultOptions();
                $userOptions = $user->getOptions();
@@ -390,8 +392,8 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        ];
                }
 
-               $canViewPrivateInfo = $user->isAllowed( 'viewmyprivateinfo' );
-               $canEditPrivateInfo = $user->isAllowed( 'editmyprivateinfo' );
+               $canViewPrivateInfo = $this->permissionManager->userHasRight( $user, 'viewmyprivateinfo' );
+               $canEditPrivateInfo = $this->permissionManager->userHasRight( $user, 'editmyprivateinfo' );
 
                // Actually changeable stuff
                $defaultPreferences['realname'] = [
@@ -631,7 +633,9 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                                ];
                        }
 
-                       if ( $this->options->get( 'EnableUserEmail' ) && $user->isAllowed( 'sendemail' ) ) {
+                       if ( $this->options->get( 'EnableUserEmail' ) &&
+                               $this->permissionManager->userHasRight( $user, 'sendemail' )
+                       ) {
                                $defaultPreferences['disablemail'] = [
                                        'id' => 'wpAllowEmail',
                                        'type' => 'toggle',
@@ -921,7 +925,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        'label-message' => 'tog-numberheadings',
                ];
 
-               if ( $user->isAllowed( 'rollback' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'rollback' ) ) {
                        $defaultPreferences['showrollbackconfirmation'] = [
                                'type' => 'toggle',
                                'section' => 'rendering/advancedrendering',
@@ -961,7 +965,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        ];
                }
 
-               if ( $user->isAllowed( 'minoredit' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'minoredit' ) ) {
                        $defaultPreferences['minordefault'] = [
                                'type' => 'toggle',
                                'section' => 'editing/editor',
@@ -1107,7 +1111,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                $watchlistdaysMax = ceil( $this->options->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
 
                # # Watchlist #####################################
-               if ( $user->isAllowed( 'editmywatchlist' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'editmywatchlist' ) ) {
                        $editWatchlistLinks = '';
                        $editWatchlistModes = [
                                'edit' => [ 'subpage' => false, 'flags' => [] ],
@@ -1221,20 +1225,20 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                ];
 
                // Kinda hacky
-               if ( $user->isAllowed( 'createpage' ) || $user->isAllowed( 'createtalk' ) ) {
+               if ( $this->permissionManager->userHasAnyRight( $user, 'createpage', 'createtalk' ) ) {
                        $watchTypes['read'] = 'watchcreations';
                }
 
-               if ( $user->isAllowed( 'rollback' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'rollback' ) ) {
                        $watchTypes['rollback'] = 'watchrollback';
                }
 
-               if ( $user->isAllowed( 'upload' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'upload' ) ) {
                        $watchTypes['upload'] = 'watchuploads';
                }
 
                foreach ( $watchTypes as $action => $pref ) {
-                       if ( $user->isAllowed( $action ) ) {
+                       if ( $this->permissionManager->userHasRight( $user, $action ) ) {
                                // Messages:
                                // tog-watchdefault, tog-watchmoves, tog-watchdeletion, tog-watchcreations, tog-watchuploads
                                // tog-watchrollback
@@ -1606,7 +1610,9 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                $hiddenPrefs = $this->options->get( 'HiddenPrefs' );
                $result = true;
 
-               if ( !$user->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
+               if ( !$this->permissionManager
+                               ->userHasAnyRight( $user, 'editmyprivateinfo', 'editmyoptions' )
+               ) {
                        return Status::newFatal( 'mypreferencesprotected' );
                }
 
@@ -1617,14 +1623,14 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                // (not really "private", but still shouldn't be edited without permission)
 
                if ( !in_array( 'realname', $hiddenPrefs )
-                       && $user->isAllowed( 'editmyprivateinfo' )
+                       && $this->permissionManager->userHasRight( $user, 'editmyprivateinfo' )
                        && array_key_exists( 'realname', $formData )
                ) {
                        $realName = $formData['realname'];
                        $user->setRealName( $realName );
                }
 
-               if ( $user->isAllowed( 'editmyoptions' ) ) {
+               if ( $this->permissionManager->userHasRight( $user, 'editmyoptions' ) ) {
                        $oldUserOptions = $user->getOptions();
 
                        foreach ( $this->getSaveBlacklist() as $b ) {
index c27ab4f..92e276d 100644 (file)
@@ -96,9 +96,15 @@ class SectionProfiler {
        public function getFunctionStats() {
                $this->collateData();
 
-               $totalCpu = max( $this->end['cpu'] - $this->start['cpu'], 0 );
-               $totalReal = max( $this->end['real'] - $this->start['real'], 0 );
-               $totalMem = max( $this->end['memory'] - $this->start['memory'], 0 );
+               if ( is_array( $this->start ) ) {
+                       $totalCpu = max( $this->end['cpu'] - $this->start['cpu'], 0 );
+                       $totalReal = max( $this->end['real'] - $this->start['real'], 0 );
+                       $totalMem = max( $this->end['memory'] - $this->start['memory'], 0 );
+               } else {
+                       $totalCpu = 0;
+                       $totalReal = 0;
+                       $totalMem = 0;
+               }
 
                $profile = [];
                foreach ( $this->collated as $fname => $data ) {
index d84a92a..0a1d5f7 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Derivative context for ResourceLoader modules.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
+ * A mutable version of ResourceLoaderContext.
+ *
  * Allows changing specific properties of a context object,
- * without changing the main one. Inspired by DerivativeContext.
+ * without changing the main one. Inspired by MediaWiki's DerivativeContext.
  *
+ * @ingroup ResourceLoader
  * @since 1.24
  */
 class DerivativeResourceLoaderContext extends ResourceLoaderContext {
index d0f6729..b4f0b7c 100644 (file)
@@ -27,10 +27,13 @@ use Psr\Log\NullLogger;
 use Wikimedia\Rdbms\Database;
 
 /**
- * This class generates message blobs for use by ResourceLoader modules.
+ * This class generates message blobs for use by ResourceLoader.
  *
- * A message blob is a JSON object containing the interface messages for a certain module in
- * a certain language.
+ * A message blob is a JSON object containing the interface messages for a
+ * certain module in a certain language.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class MessageBlobStore implements LoggerAwareInterface {
 
index 6121bbf..d959ff6 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Base class for resource loading system.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -30,13 +28,21 @@ use Wikimedia\Rdbms\DBConnectionError;
 use Wikimedia\WrappedString;
 
 /**
- * Dynamic JavaScript and CSS resource loading system.
+ * @defgroup ResourceLoader ResourceLoader
+ *
+ * For higher level documentation, see <https://www.mediawiki.org/wiki/ResourceLoader/Architecture>.
+ */
+
+/**
+ * ResourceLoader is a loading system for JavaScript and CSS resources.
+ *
+ * For higher level documentation, see <https://www.mediawiki.org/wiki/ResourceLoader/Architecture>.
  *
- * Most of the documentation is on the MediaWiki documentation wiki starting at:
- *    https://www.mediawiki.org/wiki/ResourceLoader
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class ResourceLoader implements LoggerAwareInterface {
-       /** @var Config $config */
+       /** @var Config */
        protected $config;
        /** @var MessageBlobStore */
        protected $blobStore;
index 7cd53fe..5a62861 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 /**
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -20,6 +19,7 @@
  */
 
 /**
+ * @ingroup ResourceLoader
  * @internal For use by ResourceLoaderStartUpModule only
  */
 class ResourceLoaderCircularDependencyError extends Exception {
index ea35de6..bf03e49 100644 (file)
@@ -24,6 +24,7 @@ use Wikimedia\WrappedStringList;
 /**
  * Load and configure a ResourceLoader client on an HTML page.
  *
+ * @ingroup ResourceLoader
  * @since 1.28
  */
 class ResourceLoaderClientHtml {
index 95b8ff0..3db0c01 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Context for ResourceLoader modules.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -26,8 +24,11 @@ use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 
 /**
- * Object passed around to modules which contains information about the state
- * of a specific loader request.
+ * Context object that contains information about the state of a specific
+ * ResourceLoader web request. Passed around to ResourceLoaderModule methods.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class ResourceLoaderContext implements MessageLocalizer {
        const DEFAULT_LANG = 'qqx';
index f2d0856..23a9a14 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module based on local JavaScript/CSS files.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * ResourceLoader module based on local JavaScript/CSS files.
+ * Module based on local JavaScript/CSS files.
  *
  * The following public methods can query the database:
  *
  * - getDefinitionSummary / … / ResourceLoaderModule::getFileDependencies.
  * - getVersionHash / getDefinitionSummary / … / ResourceLoaderModule::getFileDependencies.
  * - getStyles / ResourceLoaderModule::saveFileDependencies.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class ResourceLoaderFileModule extends ResourceLoaderModule {
 
index dff9a39..c70081b 100644 (file)
@@ -1,8 +1,5 @@
 <?php
 /**
- * An object to represent a path to a JavaScript/CSS file, along with a remote
- * and local base path, for use with ResourceLoaderFileModule.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -24,6 +21,9 @@
 /**
  * An object to represent a path to a JavaScript/CSS file, along with a remote
  * and local base path, for use with ResourceLoaderFileModule.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class ResourceLoaderFilePath {
 
index 4d215d6..152a1f7 100644 (file)
@@ -1,8 +1,5 @@
 <?php
 /**
- * ResourceLoader module for mediawiki.ForeignApi that has dynamically
- * generated dependencies, via a hook usable by extensions.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * ResourceLoader module for mediawiki.ForeignApi and its generated data
+ * Module for mediawiki.ForeignApi that has dynamically
+ * generated dependencies, via a hook usable by extensions.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderForeignApiModule extends ResourceLoaderFileModule {
        public function getDependencies( ResourceLoaderContext $context = null ) {
index 6497543..2b0f5ed 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Class encapsulating an image used in a ResourceLoaderImageModule.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -25,6 +23,7 @@ use MediaWiki\Shell\Shell;
 /**
  * Class encapsulating an image used in a ResourceLoaderImageModule.
  *
+ * @ingroup ResourceLoader
  * @since 1.25
  */
 class ResourceLoaderImage {
@@ -337,6 +336,7 @@ class ResourceLoaderImage {
                // Reattach all direct children of the `<svg>` root node to the `<g>` wrapper
                while ( $root->firstChild ) {
                        $node = $root->firstChild;
+                       // @phan-suppress-next-line PhanUndeclaredProperty False positive
                        if ( !$titleNode && $node->nodeType === XML_ELEMENT_NODE && $node->tagName === 'title' ) {
                                // Remember the first encountered `<title>` node
                                $titleNode = $node;
index 902fa91..0585cfd 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for generated and embedded images.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -22,8 +20,9 @@
  */
 
 /**
- * ResourceLoader module for generated and embedded images.
+ * Module for generated and embedded images.
  *
+ * @ingroup ResourceLoader
  * @since 1.25
  */
 class ResourceLoaderImageModule extends ResourceLoaderModule {
index c0a0921..ffc9b3d 100644 (file)
  */
 
 /**
- * ResourceLoader module for populating language specific data, such as grammar forms.
+ * Module for populating language specific data, such as grammar forms.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderLanguageDataModule extends ResourceLoaderFileModule {
 
index 0269ec3..49501ff 100644 (file)
@@ -1,7 +1,28 @@
 <?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
- * Subclass with context specific LESS variables
+ * Module augmented with context-specific LESS variables.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.32
  */
 class ResourceLoaderLessVarFileModule extends ResourceLoaderFileModule {
        protected $lessVariables = [];
index ed2d09c..c9fd267 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Abstraction for ResourceLoader modules.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -32,6 +30,9 @@ use Wikimedia\ScopedCallback;
 
 /**
  * Abstraction for ResourceLoader modules, with name registration and maxage functionality.
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 abstract class ResourceLoaderModule implements LoggerAwareInterface {
        /** @var Config */
index 7d39a58..e1a2711 100644 (file)
  */
 
 /**
- * ResourceLoaderFileModule which magically loads the right skinScripts and skinStyles for every
+ * Module which magically loads the right skinScripts and skinStyles for every
  * skin, using the specified OOUI theme for each.
  *
- * @since 1.30
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderOOUIFileModule extends ResourceLoaderFileModule {
        use ResourceLoaderOOUIModule;
index c860362..11c59a0 100644 (file)
@@ -21,6 +21,7 @@
 /**
  * Allows loading arbitrary sets of OOUI icons.
  *
+ * @ingroup ResourceLoader
  * @since 1.34
  */
 class ResourceLoaderOOUIIconPackModule extends ResourceLoaderOOUIImageModule {
index fdcc213..007bbd1 100644 (file)
@@ -21,7 +21,8 @@
 /**
  * Convenience methods for dealing with OOUI themes and their relations to MW skins.
  *
- * @since 1.30
+ * @ingroup ResourceLoader
+ * @internal
  */
 trait ResourceLoaderOOUIModule {
        protected static $knownScriptsModules = [ 'core' ];
index 236112e..0ae8371 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for site customizations.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * Module for site customizations
+ * Module for site customizations.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
 
index 79922bf..be4e31d 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for site style customizations.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * Module for site style customizations
+ * Module for site style customizations.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderSiteStylesModule extends ResourceLoaderWikiModule {
 
index 0f33666..e7ab951 100644 (file)
  */
 
 /**
- * ResourceLoader module for skin stylesheets.
+ * Module for skin stylesheets.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
        /**
index 9f583a5..78775fb 100644 (file)
@@ -38,6 +38,9 @@ use MediaWiki\MediaWikiServices;
  * - safemode: Only register modules that have ORIGIN_CORE as their origin.
  *   This effectively disables ORIGIN_USER modules. (T185303)
  *   See also: OutputPage::disallowUserJs()
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderStartUpModule extends ResourceLoaderModule {
        protected $targets = [ 'desktop', 'mobile' ];
index 61cff82..9610cce 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for default user preferences.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -23,6 +21,9 @@
 
 /**
  * Module for default user preferences.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
 
index 026cea1..4794231 100644 (file)
  */
 
 /**
- * Module for user customizations scripts
+ * Module for user customizations scripts.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
 
index ecbb501..866d98b 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for user preference customizations.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  */
 
 /**
- * Module for user preference customizations
+ * Module for user preferences.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
 
index 69e8a97..fe949aa 100644 (file)
  */
 
 /**
- * Module for user customizations styles
+ * Module for user customizations styles.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderUserStylesModule extends ResourceLoaderWikiModule {
 
index 85c14cb..45edd6e 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * ResourceLoader module for user tokens.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @author Krinkle
  */
 
 /**
- * Module for user tokens
+ * Module for user authorization tokens.
+ *
+ * @ingroup ResourceLoader
+ * @internal
  */
 class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
 
index a2501c4..37501d4 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Abstraction for ResourceLoader modules that pull from wiki pages.
- *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -23,7 +21,7 @@
  */
 
 use MediaWiki\Linker\LinkTarget;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Assert\Assert;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
@@ -48,6 +46,9 @@ use MediaWiki\MediaWikiServices;
  *   - getDB()
  *   - isKnownEmpty()
  *   - getTitleInfo()
+ *
+ * @ingroup ResourceLoader
+ * @since 1.17
  */
 class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
index 5b03ad0..ab5d954 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for a filearchive table row
index 8c080ba..33ce11b 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for an oldimage table row
index f4ea54f..746ca27 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Abstract base class for a list of deletable items. The list class
index edb86da..829eefa 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for a logging table row
index fcdcb9a..adb3974 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index f61d378..604ab2c 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for a live revision table row
index 0705503..011386e 100644 (file)
@@ -19,7 +19,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
index 9a9ab19..00e77e1 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index 3ab96cb..6361a7a 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup RevisionDelete
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * General controller for RevDel, used by both SpecialRevisiondelete and
index bf90c06..85c01c8 100644 (file)
@@ -20,7 +20,7 @@
  * @file
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Item class for a live revision table row
index 14c9a73..3e2a9a2 100644 (file)
@@ -176,7 +176,7 @@ class MediaWikiSite extends Site {
         *
         * @param string|bool $pageName Page name or false (default: false)
         *
-        * @return string
+        * @return string|bool|null
         */
        public function getPageUrl( $pageName = false ) {
                $url = $this->getLinkPath();
index bcf8b32..10711a6 100644 (file)
@@ -365,7 +365,7 @@ class Site implements Serializable {
         *
         * @param bool|string $pageName
         *
-        * @return string|bool
+        * @return string|bool|null
         */
        public function getPageUrl( $pageName = false ) {
                $url = $this->getLinkPath();
index cd63796..403f5b2 100644 (file)
@@ -48,7 +48,7 @@ abstract class BaseTemplate extends QuickTemplate {
         * @deprecated since 1.33 Use ->msg() or ->getMsg() instead.
         */
        function msgWiki( $str ) {
-               // TODO: Add wfDeprecated( __METHOD__, '1.33' ) after 1.33 got released
+               wfDeprecated( __METHOD__, '1.33' ); // Hard-deprecated in 1.34
                echo $this->getMsg( $str )->parseAsBlock();
        }
 
index 0954c45..bf5734a 100644 (file)
@@ -884,87 +884,85 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        }
 
        /**
-        * Get (cheap to compute) information about change tags.
+        * Get information about change tags, without parsing messages, for getRcFiltersConfigSummary().
+        *
+        * Message contents are the raw values (->plain()), because parsing messages is expensive.
+        * Even though we're not parsing messages, building a data structure with the contents of
+        * hundreds of i18n messages is still not cheap (see T223260#5370610), so the result of this
+        * function is cached in WANCache for 24 hours.
         *
         * Returns an array of associative arrays with information about each tag:
         * - name: Tag name (string)
         * - labelMsg: Short description message (Message object)
+        * - label: Short description message (raw message contents)
         * - descriptionMsg: Long description message (Message object)
+        * - description: Long description message (raw message contents)
         * - cssClass: CSS class to use for RC entries with this tag
         * - hits: Number of RC entries that have this tag
         *
         * @param ResourceLoaderContext $context
         * @return array[] Information about each tag
         */
-       protected static function getChangeTagInfo( ResourceLoaderContext $context ) {
-               $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
-               $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
-
-               $tagStats = ChangeTags::tagUsageStatistics();
-               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags, $tagStats );
-
-               $result = [];
-               foreach ( $tagHitCounts as $tagName => $hits ) {
-                       if (
-                               (
-                                       // Only get active tags
-                                       isset( $explicitlyDefinedTags[ $tagName ] ) ||
-                                       isset( $softwareActivatedTags[ $tagName ] )
-                               ) &&
-                               // Only get tags with more than 0 hits
-                               $hits > 0
-                       ) {
-                               $labelMsg = ChangeTags::tagShortDescriptionMessage( $tagName, $context );
-                               if ( $labelMsg === false ) {
-                                       // Tag is hidden, skip it
-                                       continue;
-                               }
-                               $result[] = [
-                                       'name' => $tagName,
-                                       // 'label' and 'description' filled in by getChangeTagList()
-                                       'labelMsg' => $labelMsg,
-                                       'descriptionMsg' => ChangeTags::tagLongDescriptionMessage( $tagName, $context ),
-                                       'cssClass' => Sanitizer::escapeClass( 'mw-tag-' . $tagName ),
-                                       'hits' => $hits,
-                               ];
-                       }
-               }
-               return $result;
-       }
-
-       /**
-        * Get information about change tags for use in getRcFiltersConfigSummary().
-        *
-        * This expands labelMsg and descriptionMsg to the raw values of each message, which captures
-        * changes in the messages but avoids the expensive step of parsing them.
-        *
-        * @param ResourceLoaderContext $context
-        * @return array[] Result of getChangeTagInfo(), with messages expanded to raw contents
-        */
        protected static function getChangeTagListSummary( ResourceLoaderContext $context ) {
-               $tags = self::getChangeTagInfo( $context );
-               foreach ( $tags as &$tagInfo ) {
-                       $tagInfo['labelMsg'] = $tagInfo['labelMsg']->plain();
-                       if ( $tagInfo['descriptionMsg'] ) {
-                               $tagInfo['descriptionMsg'] = $tagInfo['descriptionMsg']->plain();
+               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'ChangesListSpecialPage-changeTagListSummary', $context->getLanguage() ),
+                       WANObjectCache::TTL_DAY,
+                       function ( $oldValue, &$ttl, array &$setOpts ) use ( $context ) {
+                               $explicitlyDefinedTags = array_fill_keys( ChangeTags::listExplicitlyDefinedTags(), 0 );
+                               $softwareActivatedTags = array_fill_keys( ChangeTags::listSoftwareActivatedTags(), 0 );
+
+                               $tagStats = ChangeTags::tagUsageStatistics();
+                               $tagHitCounts = array_merge( $explicitlyDefinedTags, $softwareActivatedTags, $tagStats );
+
+                               $result = [];
+                               foreach ( $tagHitCounts as $tagName => $hits ) {
+                                       if (
+                                               (
+                                                       // Only get active tags
+                                                       isset( $explicitlyDefinedTags[ $tagName ] ) ||
+                                                       isset( $softwareActivatedTags[ $tagName ] )
+                                               ) &&
+                                               // Only get tags with more than 0 hits
+                                               $hits > 0
+                                       ) {
+                                               $labelMsg = ChangeTags::tagShortDescriptionMessage( $tagName, $context );
+                                               if ( $labelMsg === false ) {
+                                                       // Tag is hidden, skip it
+                                                       continue;
+                                               }
+                                               $descriptionMsg = ChangeTags::tagLongDescriptionMessage( $tagName, $context );
+                                               $result[] = [
+                                                       'name' => $tagName,
+                                                       'labelMsg' => $labelMsg,
+                                                       'label' => $labelMsg->plain(),
+                                                       'descriptionMsg' => $descriptionMsg,
+                                                       'description' => $descriptionMsg ? $descriptionMsg->plain() : '',
+                                                       'cssClass' => Sanitizer::escapeClass( 'mw-tag-' . $tagName ),
+                                                       'hits' => $hits,
+                                               ];
+                                       }
+                               }
+                               return $result;
                        }
-               }
-               return $tags;
+               );
        }
 
        /**
         * Get information about change tags to export to JS via getRcFiltersConfigVars().
         *
-        * This removes labelMsg and descriptionMsg, and adds label and description, which are parsed,
-        * stripped and (in the case of description) truncated versions of these messages. Message
+        * This manipulates the label and description of each tag, which are parsed, stripped
+        * and (in the case of description) truncated versions of these messages. Message
         * parsing is expensive, so to detect whether the tag list has changed, use
         * getChangeTagListSummary() instead.
         *
+        * The result of this function is cached in WANCache for 24 hours.
+        *
         * @param ResourceLoaderContext $context
-        * @return array[] Result of getChangeTagInfo(), with messages parsed, stripped and truncated
+        * @return array[] Same as getChangeTagListSummary(), with messages parsed, stripped and truncated
         */
        protected static function getChangeTagList( ResourceLoaderContext $context ) {
-               $tags = self::getChangeTagInfo( $context );
+               $tags = self::getChangeTagListSummary( $context );
                $language = Language::factory( $context->getLanguage() );
                foreach ( $tags as &$tagInfo ) {
                        $tagInfo['label'] = Sanitizer::stripAllTags( $tagInfo['labelMsg']->parse() );
index 1b0db73..a03455b 100644 (file)
@@ -1124,9 +1124,9 @@ class SpecialBlock extends FormSpecialPage {
         * @return bool
         */
        public static function canBlockEmail( UserIdentity $user ) {
-               global $wgEnableUserEmail, $wgSysopEmailBans;
+               global $wgEnableUserEmail;
 
-               return ( $wgEnableUserEmail && $wgSysopEmailBans && MediaWikiServices::getInstance()
+               return ( $wgEnableUserEmail && MediaWikiServices::getInstance()
                                ->getPermissionManager()
                                ->userHasRight( $user, 'blockemail' ) );
        }
index 2dd682f..4ba9b65 100644 (file)
@@ -23,6 +23,7 @@
 
 use MediaWiki\Block\DatabaseBlock;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page that lists existing blocks
index 5b77d5a..1babf8c 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup SpecialPage
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Special page allowing users with the appropriate permissions to
index 698e590..67177b7 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Permissions\PermissionManager;
 
 /**
index 2c8d432..34665dd 100644 (file)
@@ -381,6 +381,7 @@ class SpecialTags extends SpecialPage {
 
                $form = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
                $form->setAction( $this->getPageTitle( 'delete' )->getLocalURL() );
+               // @phan-suppress-next-line PhanUndeclaredProperty
                $form->tagAction = 'delete'; // custom property on HTMLForm object
                $form->setSubmitCallback( [ $this, 'processTagForm' ] );
                $form->setSubmitTextMsg( 'tags-delete-submit' );
@@ -433,6 +434,7 @@ class SpecialTags extends SpecialPage {
 
                $form = HTMLForm::factory( 'ooui', $fields, $this->getContext() );
                $form->setAction( $this->getPageTitle( $actionStr )->getLocalURL() );
+               // @phan-suppress-next-line PhanUndeclaredProperty
                $form->tagAction = $actionStr;
                $form->setSubmitCallback( [ $this, 'processTagForm' ] );
                // tags-activate-submit, tags-deactivate-submit
@@ -441,6 +443,12 @@ class SpecialTags extends SpecialPage {
                $form->show();
        }
 
+       /**
+        * @param array $data
+        * @param HTMLForm $form
+        * @return bool
+        * @suppress PhanUndeclaredProperty $form->tagAction
+        */
        public function processTagForm( array $data, HTMLForm $form ) {
                $context = $form->getContext();
                $out = $context->getOutput();
index b1bfd0b..445f0c3 100644 (file)
@@ -111,6 +111,8 @@ class PreferencesFormOOUI extends OOUIHTMLForm {
        function filterDataForSubmit( $data ) {
                foreach ( $this->mFlatFields as $fieldname => $field ) {
                        if ( $field instanceof HTMLNestedFilterable ) {
+                               // @phan-suppress-next-next-line PhanUndeclaredProperty All HTMLForm fields have mParams,
+                               // but the instanceof confuses phan, which doesn't support intersections
                                $info = $field->mParams;
                                $prefix = $info['prefix'] ?? $fieldname;
                                foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
index 3a56a87..95749ba 100644 (file)
@@ -25,7 +25,7 @@
  */
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Linker\LinkRenderer;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
index 2893759..0ff54fd 100644 (file)
@@ -24,7 +24,7 @@
  */
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
index 3bd66d4..3ebb443 100644 (file)
@@ -237,6 +237,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
         * @param LinkTarget $title
         *
         * @return string
+        * @suppress PhanUndeclaredProperty
         */
        public function getPrefixedText( LinkTarget $title ) {
                if ( !isset( $title->prefixedText ) ) {
index d71750b..fc96fe1 100644 (file)
@@ -2794,18 +2794,6 @@ class User implements IDBAccessObject, UserIdentity {
                }
        }
 
-       /**
-        * Set the password for a password reminder or new account email
-        *
-        * @deprecated Removed in 1.27. Use PasswordReset instead.
-        * @param string $str New password to set or null to set an invalid
-        *  password hash meaning that the user will not be able to use it
-        * @param bool $throttle If true, reset the throttle timestamp to the present
-        */
-       public function setNewpassword( $str, $throttle = true ) {
-               throw new BadMethodCallException( __METHOD__ . ' has been removed in 1.27' );
-       }
-
        /**
         * Get the user's e-mail address
         * @return string User's email address
@@ -3738,11 +3726,17 @@ class User implements IDBAccessObject, UserIdentity {
                                $this->setNewtalk( false );
 
                                // If there is a new, unseen, revision, use its timestamp
-                               $nextid = $oldid
-                                       ? $title->getNextRevisionID( $oldid, Title::READ_LATEST )
-                                       : null;
-                               if ( $nextid ) {
-                                       $this->setNewtalk( true, Revision::newFromId( $nextid ) );
+                               if ( $oldid ) {
+                                       $rl = MediaWikiServices::getInstance()->getRevisionLookup();
+                                       $oldRev = $rl->getRevisionById( $oldid, Title::READ_LATEST );
+                                       if ( $oldRev ) {
+                                               $newRev = $rl->getNextRevision( $oldRev );
+                                               if ( $newRev ) {
+                                                       // TODO: actually no need to wrap in a revision,
+                                                       // setNewtalk really only needs a RevRecord
+                                                       $this->setNewtalk( true, new Revision( $newRev ) );
+                                               }
+                                       }
                                }
                        } );
                }
@@ -4320,13 +4314,13 @@ class User implements IDBAccessObject, UserIdentity {
                                'password' => $password,
                        ]
                );
-               $res = AuthManager::singleton()->beginAuthentication( $reqs, 'null:' );
+               $res = $manager->beginAuthentication( $reqs, 'null:' );
                switch ( $res->status ) {
                        case AuthenticationResponse::PASS:
                                return true;
                        case AuthenticationResponse::FAIL:
                                // Hope it's not a PreAuthenticationProvider that failed...
-                               \MediaWiki\Logger\LoggerFactory::getInstance( 'authentication' )
+                               LoggerFactory::getInstance( 'authentication' )
                                        ->info( __METHOD__ . ': Authentication failed: ' . $res->message->plain() );
                                return false;
                        default:
index f3a8810..77ea3d9 100644 (file)
@@ -34,7 +34,7 @@ class AvroValidator {
         * @return string|string[] An error or list of errors in the
         *  provided $datum. When no errors exist the empty array is
         *  returned.
-        * @suppress PhanUndeclaredMethod
+        * @suppress PhanUndeclaredMethod,PhanUndeclaredProperty
         */
        public static function getErrors( AvroSchema $schema, $datum ) {
                switch ( $schema->type ) {
index df5ea70..d8e4985 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
 use MediaWiki\Linker\LinkTarget;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Permissions\PermissionManager;
+use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\User\UserIdentity;
 use Wikimedia\Assert\Assert;
 use Wikimedia\Rdbms\IDatabase;
@@ -70,16 +71,21 @@ class WatchedItemQueryService {
        /** @var WatchedItemStoreInterface */
        private $watchedItemStore;
 
+       /** @var PermissionManager */
+       private $permissionManager;
+
        public function __construct(
                ILoadBalancer $loadBalancer,
                CommentStore $commentStore,
                ActorMigration $actorMigration,
-               WatchedItemStoreInterface $watchedItemStore
+               WatchedItemStoreInterface $watchedItemStore,
+               PermissionManager $permissionManager
        ) {
                $this->loadBalancer = $loadBalancer;
                $this->commentStore = $commentStore;
                $this->actorMigration = $actorMigration;
                $this->watchedItemStore = $watchedItemStore;
+               $this->permissionManager = $permissionManager;
        }
 
        /**
@@ -549,7 +555,7 @@ class WatchedItemQueryService {
                return $conds;
        }
 
-       private function getUserRelatedConds( IDatabase $db, User $user, array $options ) {
+       private function getUserRelatedConds( IDatabase $db, UserIdentity $user, array $options ) {
                if ( !array_key_exists( 'onlyByUser', $options ) && !array_key_exists( 'notByUser', $options ) ) {
                        return [];
                }
@@ -566,9 +572,11 @@ class WatchedItemQueryService {
 
                // Avoid brute force searches (T19342)
                $bitmask = 0;
-               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+               if ( !$this->permissionManager->userHasRight( $user, 'deletedhistory' ) ) {
                        $bitmask = RevisionRecord::DELETED_USER;
-               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+               } elseif ( !$this->permissionManager
+                       ->userHasAnyRight( $user, 'suppressrevision', 'viewsuppressed' )
+               ) {
                        $bitmask = RevisionRecord::DELETED_USER | RevisionRecord::DELETED_RESTRICTED;
                }
                if ( $bitmask ) {
@@ -578,13 +586,15 @@ class WatchedItemQueryService {
                return $conds;
        }
 
-       private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, User $user ) {
+       private function getExtraDeletedPageLogEntryRelatedCond( IDatabase $db, UserIdentity $user ) {
                // LogPage::DELETED_ACTION hides the affected page, too. So hide those
                // entirely from the watchlist, or someone could guess the title.
                $bitmask = 0;
-               if ( !$user->isAllowed( 'deletedhistory' ) ) {
+               if ( !$this->permissionManager->userHasRight( $user, 'deletedhistory' ) ) {
                        $bitmask = LogPage::DELETED_ACTION;
-               } elseif ( !$user->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) {
+               } elseif ( !$this->permissionManager
+                       ->userHasAnyRight( $user, 'suppressrevision', 'viewsuppressed' )
+               ) {
                        $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED;
                }
                if ( $bitmask ) {
index 9886425..f42bb88 100644 (file)
@@ -21,7 +21,7 @@
 use MediaWiki\MediaWikiServices;
 
 use MediaWiki\Logger\LoggerFactory;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 /**
  * Base class for language conversion.
index 353127d..783a211 100644 (file)
@@ -80,7 +80,7 @@ class Names {
                'az' => 'azərbaycanca', # Azerbaijani
                'azb' => 'تۆرکجه', # South Azerbaijani
                'ba' => 'башҡортса', # Bashkir
-               'ban' => 'Basa Bali', # Balinese
+               'ban' => 'Bali', # Balinese
                'bar' => 'Boarisch', # Bavarian (Austro-Bavarian and South Tyrolean)
                'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 639-3 since 2010-06-30 )
                'bbc' => 'Batak Toba', # Batak Toba (falls back to bbc-latn)
index 0a15530..8fe3be3 100644 (file)
@@ -2982,7 +2982,7 @@ public static $zh2Hant = [
 '𫄨' => '絺',
 '𫄷' => '繶',
 '𫄸' => '纁',
-'ð«\87­' => 'è\94¿',
+'ð«\87­' => 'è\92\8d',
 '𫌀' => '襀',
 '𫌨' => '覼',
 '𫍙' => '訑',
@@ -3707,6 +3707,8 @@ public static $zh2Hant = [
 '于少保' => '于少保',
 '于山国' => '于山國',
 '于山國' => '于山國',
+'于山岛' => '于山島',
+'于山島' => '于山島',
 '于帅' => '于帥',
 '于帥' => '于帥',
 '于幼军' => '于幼軍',
@@ -3724,7 +3726,6 @@ public static $zh2Hant = [
 '于志寧' => '于志寧',
 '于忠肃集' => '于忠肅集',
 '于忠肅集' => '于忠肅集',
-'于思' => '于思',
 '于慎行' => '于慎行',
 '于慧' => '于慧',
 '于成龍' => '于成龍',
@@ -3817,6 +3818,7 @@ public static $zh2Hant = [
 '于都县' => '于都縣',
 '于都縣' => '于都縣',
 '于里察' => '于里察',
+'于闐' => '于闐',
 '于阗' => '于闐',
 '于双戈' => '于雙戈',
 '于雙戈' => '于雙戈',
@@ -4114,6 +4116,7 @@ public static $zh2Hant = [
 '党進' => '党進',
 '党項' => '党項',
 '党项' => '党項',
+'入侵并' => '入侵並',
 '内脏' => '內臟',
 '内制' => '內製',
 '内面包' => '內面包',
@@ -4470,6 +4473,8 @@ public static $zh2Hant = [
 '叮叮当当' => '叮叮噹噹',
 '叮当' => '叮噹',
 '可紧可松' => '可緊可鬆',
+'可能干預' => '可能干預',
+'可能干预' => '可能干預',
 '可自制' => '可自制',
 '可鉴' => '可鑑',
 '台子女' => '台子女',
@@ -4802,7 +4807,7 @@ public static $zh2Hant = [
 '大型钟面' => '大型鐘面',
 '大多只' => '大多只',
 '大伙' => '大夥',
-'大干' => '大幹',
+'大干一' => '大幹一',
 '大批涌到' => '大批湧到',
 '大折儿' => '大摺兒',
 '大明历' => '大明曆',
@@ -5527,6 +5532,8 @@ public static $zh2Hant = [
 '恶直丑正' => '惡直醜正',
 '恶斗' => '惡鬥',
 '惴栗' => '惴慄',
+'意大利面临' => '意大利面臨',
+'意大利面臨' => '意大利面臨',
 '意大利面' => '意大利麵',
 '愛河里花子' => '愛河里花子',
 '爱河里花子' => '愛河里花子',
@@ -5991,6 +5998,8 @@ public static $zh2Hant = [
 '方向' => '方向',
 '方法里' => '方法裡',
 '于吉林' => '於吉林',
+'于格林' => '於格林',
+'于越南' => '於越南',
 '于震中' => '於震中',
 '于震前' => '於震前',
 '于震后' => '於震後',
@@ -6474,6 +6483,8 @@ public static $zh2Hant = [
 '浅淀' => '淺澱',
 '清心寡欲' => '清心寡欲',
 '渠冲' => '渠衝',
+'温岚' => '温嵐',
+'温嵐' => '温嵐',
 '测不准' => '測不準',
 '港制' => '港製',
 '游离' => '游離',
@@ -6699,6 +6710,7 @@ public static $zh2Hant = [
 '版本里' => '版本裡',
 '牙签' => '牙籤',
 '牛只' => '牛隻',
+'牢里' => '牢裡',
 '物欲' => '物慾',
 '抵牾' => '牴牾',
 '抵触' => '牴觸',
@@ -7028,7 +7040,6 @@ public static $zh2Hant = [
 '称赞' => '稱讚',
 '稻谷' => '稻穀',
 '稽征' => '稽徵',
-'谷人' => '穀人',
 '谷保家商' => '穀保家商',
 '谷仓' => '穀倉',
 '谷圭' => '穀圭',
@@ -7656,6 +7667,7 @@ public static $zh2Hant = [
 '药签' => '藥籤',
 '药面儿' => '藥麵兒',
 '苏昆' => '蘇崑',
+'𬞟' => '蘋',
 '苹婆' => '蘋婆',
 '苹果' => '蘋果',
 '苹果干' => '蘋果乾',
@@ -7751,6 +7763,7 @@ public static $zh2Hant = [
 '袋表' => '袋錶',
 '袖里' => '袖裡',
 '被废后' => '被廢後',
+'被卷回' => '被捲回',
 '被系上' => '被繫上',
 '被里' => '被裡',
 '被夸' => '被誇',
@@ -9319,6 +9332,7 @@ public static $zh2Hant = [
 '鹰雕' => '鹰鵰',
 '鹰鵰' => '鹰鵰',
 '咸、甜' => '鹹、甜',
+'咸吃' => '鹹吃',
 '咸味' => '鹹味',
 '咸嘴淡舌' => '鹹嘴淡舌',
 '咸土' => '鹹土',
@@ -11458,6 +11472,7 @@ public static $zh2Hans = [
 '葦' => '苇',
 '葯' => '药',
 '葷' => '荤',
+'蒍' => '𫇭',
 '蒓' => '莼',
 '蒔' => '莳',
 '蒞' => '莅',
@@ -13699,6 +13714,7 @@ public static $zh2Hans = [
 '孫乾' => '孙乾',
 '宏碁' => '宏碁',
 '官陞' => '官升',
+'尋陞' => '寻升',
 '將軍抽俥' => '将军抽俥',
 '將軍抽車' => '将军抽車',
 '爾冬陞' => '尔冬升',
@@ -14152,7 +14168,10 @@ public static $zh2TW = [
 '克罗地亚' => '克羅埃西亞',
 '克羅地亞' => '克羅埃西亞',
 '克里斯托弗' => '克里斯多福',
+'全角' => '全形',
 '万维网' => '全球資訊網',
+'全角度' => '全角度',
+'全角色' => '全角色',
 '八杆' => '八桿',
 '公共交通' => '公共運輸',
 '六杆' => '六桿',
@@ -14259,6 +14278,7 @@ public static $zh2TW = [
 '塞维利亚' => '塞維亞',
 '西維爾' => '塞維亞',
 '塞黑' => '塞蒙',
+'多美和普林西比' => '多美普林西比',
 '塔希提' => '大溪地',
 '共和联邦' => '大英國協',
 '英联邦' => '大英國協',
@@ -14330,6 +14350,7 @@ public static $zh2TW = [
 '希拉里' => '希拉蕊',
 '希特拉' => '希特勒',
 '残疾人奥林匹克' => '帕拉林匹克',
+'殘疾人奧林匹克' => '帕拉林匹克',
 '残奥会' => '帕運會',
 '殘奧會' => '帕運會',
 '巴尔米拉环礁' => '帕邁拉環礁',
@@ -14413,6 +14434,7 @@ public static $zh2TW = [
 '施罗德' => '施洛德',
 '旱烟' => '旱菸',
 '旱煙' => '旱菸',
+'比勒陀利' => '普利托利',
 '普利策' => '普利茲',
 '普利策奖' => '普立茲獎',
 '芯片' => '晶片',
@@ -14429,6 +14451,8 @@ public static $zh2TW = [
 '马恩岛' => '曼島',
 '木杆' => '木桿',
 '尾班車' => '末班車',
+'萨格勒布' => '札格瑞布',
+'薩格勒布' => '札格瑞布',
 '列奥纳多' => '李奧納多',
 '杜塞尔多夫' => '杜塞道夫',
 '杜塞爾多夫' => '杜塞道夫',
@@ -14496,6 +14520,8 @@ public static $zh2TW = [
 '海洛英' => '海洛因',
 '侯賽因' => '海珊',
 '侯赛因' => '海珊',
+'温得和克' => '溫荷克',
+'溫得和克' => '溫荷克',
 '鼠标' => '滑鼠',
 '汉诺威' => '漢諾瓦',
 '漢诺威' => '漢諾瓦',
@@ -14607,13 +14633,12 @@ public static $zh2TW = [
 '卢浮宫' => '羅浮宮',
 '樂行童軍' => '羅浮童軍',
 '意大利' => '義大利',
+'意大利面' => '義大利麵',
 '昂山素姬' => '翁山蘇姬',
 '昂山素季' => '翁山蘇姬',
 '圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
 '聖吉斯納域斯' => '聖克里斯多福及尼維斯',
 '聖佐治' => '聖喬治',
-'圣多美和普林西比' => '聖多美普林西比',
-'聖多美和普林西比' => '聖多美普林西比',
 '圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
 '聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
 '圣赫勒拿' => '聖赫倫那',
@@ -14836,6 +14861,8 @@ public static $zh2TW = [
 '亚拉巴马' => '阿拉巴馬',
 '阿联酋' => '阿聯',
 '阿聯酋' => '阿聯',
+'亚的斯亚贝巴' => '阿迪斯阿貝巴',
+'亞的斯亞貝巴' => '阿迪斯阿貝巴',
 '罗纳德·里根' => '隆納·雷根',
 '私隱' => '隱私',
 '耶加達' => '雅加達',
@@ -14958,6 +14985,7 @@ public static $zh2HK = [
 '因特网' => '互聯網',
 '網際網路' => '互聯網',
 '井里' => '井裏',
+'阿迪斯阿貝巴' => '亞的斯亞貝巴',
 '亮著' => '亮着',
 '亮著《' => '亮著《',
 '亮著作' => '亮著作',
@@ -15340,6 +15368,9 @@ public static $zh2HK = [
 '柯林頓' => '克林頓',
 '克羅埃西亞' => '克羅地亞',
 '奈洛比' => '內羅畢',
+'全角' => '全形',
+'全角度' => '全角度',
+'全角色' => '全角色',
 '公布' => '公佈',
 '公寓里' => '公寓裏',
 '冒著' => '冒着',
@@ -16406,7 +16437,7 @@ public static $zh2HK = [
 '格瑞那達' => '格林納達',
 '格莱美奖' => '格林美獎',
 '葛萊美獎' => '格林美獎',
-'格鲁吉亚' => '格魯吉亞',
+'喬治亞字母' => '格魯吉亞字母',
 '框里' => '框裏',
 '台式电脑' => '桌上型電腦',
 '台球' => '桌球',
@@ -16462,6 +16493,7 @@ public static $zh2HK = [
 '殺著錄' => '殺著錄',
 '壳里' => '殼裏',
 '殿里' => '殿裏',
+'普利托利亞' => '比勒陀利亞',
 '茅利塔尼亞' => '毛里塔尼亞',
 '模里西斯' => '毛里裘斯',
 '毛里求斯' => '毛里裘斯',
@@ -16587,6 +16619,7 @@ public static $zh2HK = [
 '溢著者' => '溢著者',
 '溢著述' => '溢著述',
 '溢著錄' => '溢著錄',
+'溫荷克' => '溫得和克',
 '演著' => '演着',
 '演著作' => '演著作',
 '演著名' => '演著名',
@@ -16657,6 +16690,7 @@ public static $zh2HK = [
 '版图里' => '版圖裏',
 '版本里' => '版本裏',
 '版权信息' => '版權資訊',
+'牢里' => '牢裏',
 '千里達及托巴哥' => '特立尼達和多巴哥',
 '牽著' => '牽着',
 '牽著作' => '牽著作',
@@ -17123,6 +17157,7 @@ public static $zh2HK = [
 '聖克里斯多福及尼維斯' => '聖吉斯納域斯',
 '聖多美普林西比' => '聖多美和普林西比',
 '聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
+'聖文森國' => '聖文森特和格林納丁斯',
 '聖露西亞' => '聖盧西亞',
 '聖馬利諾' => '聖馬力諾',
 '聽不著' => '聽不着',
@@ -17243,6 +17278,7 @@ public static $zh2HK = [
 '肖邦' => '蕭邦',
 '薛丁格' => '薛定諤',
 '塞拉耶佛' => '薩拉熱窩',
+'札格瑞布' => '薩格勒布',
 '萨达姆' => '薩達姆',
 '藉著' => '藉着',
 '藏著' => '藏着',
@@ -18106,6 +18142,7 @@ public static $zh2CN = [
 '網際網絡' => '互联网',
 '網際網路' => '互联网',
 '亞歷山卓' => '亚历山大',
+'阿迪斯阿貝巴' => '亚的斯亚贝巴',
 '雅穆索戈' => '亚穆苏克罗',
 '交帳' => '交账',
 '亮著' => '亮着',
@@ -18636,6 +18673,7 @@ public static $zh2CN = [
 '聖吉斯納域斯' => '圣基茨和尼维斯',
 '聖多美普林西比' => '圣多美和普林西比',
 '聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
+'聖文森國' => '圣文森特和格林纳丁斯',
 '聖馬利諾' => '圣马力诺',
 '蓋亞那' => '圭亚那',
 '坐著' => '坐着',
@@ -19413,6 +19451,7 @@ public static $zh2CN = [
 '格瑞那達' => '格林纳达',
 '格林美獎' => '格莱美奖',
 '葛萊美獎' => '格莱美奖',
+'喬治亞字母' => '格鲁吉亚字母',
 '森巴舞' => '桑巴舞',
 '梅赫西迪' => '梅赛德斯',
 '夢著' => '梦着',
@@ -19437,6 +19476,7 @@ public static $zh2CN = [
 '帕運會' => '残奥会',
 '帕拉林匹克' => '残疾人奥林匹克',
 '庇里牛斯' => '比利牛斯',
+'普利托利亞' => '比勒陀利亚',
 '披索' => '比索',
 '畢卡索' => '毕加索',
 '茅利塔尼亞' => '毛里塔尼亚',
@@ -19524,6 +19564,7 @@ public static $zh2CN = [
 '混帳' => '混账',
 '清澈' => '清澈',
 '清帳' => '清账',
+'溫荷克' => '温得和克',
 '渴著' => '渴着',
 '渴著書' => '渴著书',
 '渴著作' => '渴著作',
@@ -20108,6 +20149,7 @@ public static $zh2CN = [
 '獲著述' => '获著述',
 '菁寮' => '菁寮',
 '塞拉耶佛' => '萨拉热窝',
+'札格瑞布' => '萨格勒布',
 '落著' => '落着',
 '落著書' => '落著书',
 '落著作' => '落著作',
index 7d93d5b..6d48938 100644 (file)
        "createaccountmail": "استخدم كلمة سر عشوائية مؤقتة وارسلها إلى عنوان البريد الإلكتروني المحدد أدناه",
        "createaccountmail-help": "يمكن استخدامه لإنشاء حساب لشخص آخر من دون معرفة كلمة المرور.",
        "createacct-realname": "الاسم الحقيقي (اختياري)",
-       "createacct-reason": "السبب",
+       "createacct-reason": "السبب (مسجل بشكل عام)",
        "createacct-reason-ph": "لماذا تقوم بإنشاء حساب آخر",
        "createacct-reason-help": "رسالة تظهر في سجل إنشاء الحسابات",
        "createacct-submit": "افتح الحساب",
index bdbe4b0..fd973af 100644 (file)
        "nocreate-loggedin": "आप कय नँवा पन्ना बनावे कय अनुमति नाई है ।",
        "sectioneditnotsupported-title": "अनुभाग सम्पादन समर्थित नाई है",
        "sectioneditnotsupported-text": "इ पन्ना पे अनुभाग सम्पादन समर्थित नाई है",
+       "modeleditnotsupported-title": "संपादन सपोर्ट नही करत",
+       "modeleditnotsupported-text": "सामग्री मॉडल $1 के बरे संपादन सपोर्ट नही अहै",
        "permissionserrors": "अनुमति त्रुटि",
        "permissionserrorstext": "निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते आप कय ऐसन करे कय अनुमति नाइ है:",
        "permissionserrorstext-withaction": "आप कय $2 कय अनुमति नाई है,निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते से:",
        "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
        "changecontentmodel": "पन्ने का सामग्री प्रारूप बदलें",
        "changecontentmodel-legend": "पृष्ठ सामग्री का नमूना",
-       "changecontentmodel-title-label": "पृष्ठ शीर्षक",
+       "changecontentmodel-title-label": "पृष्ठ शीर्षक:",
        "changecontentmodel-current-label": "Current content model:",
-       "changecontentmodel-model-label": "नयि à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤\95ा à¤¨à¤®à¥\82ना",
+       "changecontentmodel-model-label": "नयि à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤\95य à¤¨à¤®à¥\82ना:",
        "changecontentmodel-reason-label": "कारण:",
        "changecontentmodel-submit": "बदला",
        "changecontentmodel-success-title": "सामगरि का नामुने मे बदलाव हुुुाा हेेे",
index 5bc3724..60fa0a1 100644 (file)
@@ -13,7 +13,8 @@
                        "Joseagush",
                        "Wandering ant",
                        "Kadek Ayu Sulastri",
-                       "Luh Gede Krismayanti"
+                       "Luh Gede Krismayanti",
+                       "Amire80"
                ]
        },
        "tog-underline": "Garis ring beten pranala:",
@@ -30,6 +31,8 @@
        "tog-watchdefault": "imbuhin lembar panyuntingansane sunting titiang ring kepahan pangiwasan",
        "tog-watchmoves": "imbuhang lembar sane kakisidang titiang ring kepahan pangiwasan",
        "tog-watchdeletion": "imbuhin lembar sane kaapus ring kepahan pangiwasan",
+       "tog-watchuploads": "Tambehin berkas anyar sané unggah tiang ka pupulan pantaun\nTambahkan berkas baru yang saya unggah ke daftar pantauan",
+       "tog-watchrollback": "Tambehin kaca sané sampun uliang tiang ka tengah pupulan pantauan tiangé",
        "tog-minordefault": "pingetin samian suntingan dados suntingan alit sane ajeg",
        "tog-previewontop": "tampilang pratayang sadurung kotak sunting lan nenten sadurungnyane",
        "tog-previewonfirst": "tampilang pratayang ring suntingan kapertama",
@@ -46,6 +49,8 @@
        "tog-watchlisthidebots": "engkebang panguwahan bot ring kepahan pangiwasan",
        "tog-watchlisthideminor": "engkebang panguwahan alit ring kepahan pangiwasan",
        "tog-watchlisthideliu": "engkebang suntingan penganggen malebu log ring kepahan pangiwasan",
+       "tog-watchlistreloadautomatically": "Ulangin pupulan pantauan manut otomatis ritatkala silih tunggil penyaringan kauah (JavaScript kaperluang)",
+       "tog-watchlistunwatchlinks": "Tambehin pacihna pantau/usap pantauan ka kaca sané kapantau tur kauah (JavaScript kaperluang anggén nganti tetujon puniki)",
        "tog-watchlisthideanons": "engkebangsuntingan penganggen tan maadan ring kepahan pangiwasan",
        "tog-watchlisthidepatrolled": "engkebang panguwahan mapatrol kepahan pangiwasan",
        "tog-watchlisthidecategorization": "Engkebang katégorisasi kacané",
@@ -55,6 +60,8 @@
        "tog-norollbackdiff": "Sampunang tampilang binanne sesampun ngewaliang",
        "tog-useeditwarning": "elingang titiang yening ngalahin lembar panyuntingan sadurung nyimpen pagentosan",
        "tog-prefershttps": "Setata nganggen sambungan sane aman rikala malebu log",
+       "tog-showrollbackconfirmation": "Sinahang konfirmasi ritatkala ngklik pranala sané kauliang\nTampilkan konfirmasi ketika mengeklik pranala pengembalian",
+       "tog-requireemail": "Kaperluang sewala anggén ngawé malih kruna sandi",
        "underline-always": "Setata",
        "underline-never": "Nénten naénin",
        "underline-default": "kulit utawi penjelajah paaban",
        "category-empty": "<em>Kategori puniki mangkin nénten madaging kaca utawi média.</em>",
        "hidden-categories": "{{plural:$1|Kategori sané kaengkebang}}",
        "hidden-category-category": "Kategori sané kaengkebang",
-       "category-subcat-count": "{{PLURAL:$2| golongan puniki madue {{PLURAL:$1|$1 subkategori}} puniki, saking genepan $2.}}",
-       "category-article-count": "{{PLURAL:$2|golongan puniki madue{{PLURAL:$1|$1 lembar}}, saking total $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Kategori iki wantah madué subkategori ring sor puniki|Kategori iki madué {{PLURAL:$1|subkategori|$1 subkategori}} ring sor puniki, saking $2 akéhnyané.}}",
+       "category-subcat-count-limited": "Kelompok puniki madué {{PLURAL:$1|$1 kategori alit}} sakadi punika.",
+       "category-article-count": "{{PLURAL:$2|Kategori puniki wantah madué kaca ring sor puniki.|{{PLURAL:$1|Kaca|$1 kaca}} ring sor puniki wénten ring kategori puniki, saking $2 akéhnyané.}}",
+       "category-article-count-limited": "Kelompok puniki madué {{PLURAL:$1|$1 kaca}} sakadi punika.",
        "category-file-count": "{{PLURAL:$2|golongan puniki madue{{PLURAL:$1|$1 lembar}}, saking total $2.}}",
+       "category-file-count-limited": "Kelompok puniki madué {{PLURAL:$1|$1 berkas}} sakadi punika.",
        "listingcontinuesabbrev": "lant.",
        "index-category": "Lembar sane maindeks",
        "noindex-category": "Lembar sane nenten maindeks",
        "broken-file-category": "Suratan sane ngelah pranala usak",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "Indik",
        "article": "Kaca daging",
-       "newwindow": "(bukak ring jendela anyar)",
+       "newwindow": "(métbét ring jendéla anyar)",
        "cancel": "Wangdé",
        "moredotdotdot": "Lianan...",
+       "morenotlisted": "Bacakan puniki asané nénten lengkap.",
        "mypage": "Kaca",
        "mytalk": "Pabligbagan",
        "anontalk": "Pabligbagan",
        "and": "&#32;miwah",
        "faq": "FAQ (pitaken sane jagi katakonang)",
        "actions": "Parilaksana",
-       "namespaces": "Genah wastan",
+       "namespaces": "Genah aran",
        "variants": "Varian",
        "navigation-heading": "Menu navigasi",
        "errorpagetitle": "Kaiwangan",
        "help": "Wantuan",
        "help-mediawiki": "Pitulung MediaWiki",
        "search": "Rereh",
+       "search-ignored-headings": "# <pre>\n# Murda sané jagi nénten karunguang olih pangrereh.\n# Suratan puniki jagi kalaksanayang sasampun kaca taler murda puniki kaindeks.\n# Ragané prasida ngmaksayang pangindeksan mawali kaca puniki antuk nglaksanayang suratan kosong (''null edit'')\n# Sintaksisnyané sakadi puniki:\n#   * Makasami saking watek \"#\" ka bait untat inggih punika silih tunggil pabligbagan.\n#   * Tiap bait ten-kosong inggih punika murda sané patut sané jagi nénten karunguang.\nReferensi\nPranala luar\nCingak taler\n #</pre>",
        "searchbutton": "Rereh",
        "go": "Lanturang",
        "searcharticle": "Rereh",
        "history": "Babad kaca",
        "history_short": "Babad",
        "history_small": "babad",
+       "updatedmarker": "kamutakhiran sekat pengunjung tiang sané kaping untat",
        "printableversion": "Vérsi cétak",
        "permalink": "Pranala ajeg",
        "print": "Citak",
        "view": "Cingak",
        "view-foreign": "Cingak ring $1",
        "edit": "Uah",
-       "create": "Karyanin",
-       "create-local": "Icénin daging sané marupa paparan lokal",
+       "edit-local": "Tambeh déskripsi lokal",
+       "create": "Kardi",
+       "create-local": "Tambeh déskripsi lokal",
        "delete": "Usap",
+       "undelete_short": "Wangdeang usap {{PLURAL:$1|$1 suratan}}",
        "viewdeleted_short": "Cingak {{PLURAL:$1|siki uahan sané kausapin|$1 uahan sané kausapin}}",
        "protect": "Saib",
        "protect_change": "uah",
        "personaltools": "Pekakas praragan",
        "talk": "Pabligbagan",
        "views": "Pakantenan",
-       "toolbox": "Pekakas",
+       "toolbox": "Piranti",
+       "tool-link-userrights": "Uah{{GENDER:$1|pangangge}}",
+       "tool-link-userrights-readonly": "Cingak kelompok {{GENDER:$1|pangangge}}",
        "tool-link-emailuser": "Kirim surel ring {{GENDER:$1|pengguna}} puniki",
        "imagepage": "Cingak kaca berkas",
-       "mediawikipage": "Cingak kaca séwalapatra",
+       "mediawikipage": "Cingak kaca séwala",
        "templatepage": "Cingak kaca cétakan",
        "viewhelppage": "Cingak kaca wantuan",
        "categorypage": "Cingak kaca kategori",
        "redirectedfrom": "(Kagingsirang saking $1)",
        "redirectpagesub": "Kaca gingsiran",
        "redirectto": "Magingsir ring:",
-       "lastmodifiedat": "Kaca puniki kaping untat kauah rikala  $2, $1",
+       "lastmodifiedat": "Kaca puniki kaping untat kauah ri tatkala  $2, $1",
+       "viewcount": "Kaca puniki sampun diaksés ping {{PLURAL:$1|$1 kali}}.<br />",
        "protectedpage": "Kaca sané kasaibin",
        "jumpto": "Lanturang ka:",
        "jumptonavigation": "navigasi",
        "jumptosearch": "rereh",
+       "view-pool-error": "Ampura, server kari sibuk mangkin.\nAkéh pisan panganggé sané mautsaha nyingakin kaca puniki.\nAntosang jebos sadurung ragané jagi ngeaksés kaca puniki. \nMaaf, server sedang sibuk pada saat ini.\nTerlalu banyak pengguna berusaha melihat halaman ini.\nTunggu sebentar sebelum Anda mencoba lagi mengakses halaman ini.\n\n$1",
+       "generic-pool-error": "Ampura, server kari sibuk mangkin.\nKaliwat akéh panganggé sané mautsaha nyingakin sumber puniki.\nAntosang jebos sadurung ragané jagi ngaksés kaca puniki malih.",
+       "pool-timeout": "Liwat galah ngantosang kunci",
+       "pool-queuefull": "Pupulan antrian sampun penuh",
        "pool-errorunknown": "Iwang sané durung kauningin",
+       "pool-servererror": "Layanan pangitung pool punika nénten kasayagayang ($1).",
+       "poolcounter-usage-error": "Pikobet panganggean: $1",
        "aboutsite": "Indik {{SITENAME}}",
        "aboutpage": "Project:Indik",
+       "copyright": "Daging kasayagayang ring sor $1 ri tatkala nénten wénten uahan.",
        "copyrightpage": "{{ns:project}}:Hak cipta",
        "currentevents": "Kawéntenané mangkin",
        "currentevents-url": "Project:Kawéntenané mangkin",
        "helppage-top-gethelp": "Wantuan",
        "mainpage": "Kaca Utama",
        "mainpage-description": "Kaca utama",
+       "policy-url": "Project:Kapatutan",
        "portal": "Kori sekaa",
        "portal-url": "Project:Kori sekaa",
        "privacy": "Awig-awig indik data praragan",
        "privacypage": "Project:Awig-awig indik data praragan",
+       "badaccess": "Pikobet lugra",
+       "badaccess-group0": "Ragané nénten kadurusang antuk nglaksanayang parilaksana sakadi sané kapinta.\nAnda tidak diizinkan untuk melakukan tindakan yang Anda minta.",
+       "badaccess-groups": "Parilaksana sané kapinta kawatesin antuk pangangge ring tengah {{PLURAL:$2|kelompok}}: $1.",
+       "versionrequired": "Kaperluang MediaWiki manut $1",
+       "versionrequiredtext": "MediaWiki versi $1 kaperluang antuk nglaksanayang kaca puniki. Cingak [[Special:Version|kaca versi]]",
        "ok": "OK",
        "retrievedfrom": "Kapolihang saking \"$1\"",
-       "youhavenewmessages": "{{PLURAL:$3|Jero madué}} $1 ($2)",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Ida dané madué}} $1 saking {{PLURAL:$3|$3 sang anganggé lianan}} ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Ragané madué}} $1 ($2)",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Ragané madué}} $1 saking {{PLURAL:$3|$3 sang anganggé lianan}} ($2).",
        "youhavenewmessagesmanyusers": "Jero madué $1 saking akéh sang anganggé ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|séwalapatra anyar abesik|999=séwalapatra anyar}}",
+       "newmessageslinkplural": "{{PLURAL:$1|séwala anyar abesik|999=séwala anyar}}",
        "newmessagesdifflinkplural": "$1 {{PLURAL:$1|uahan}}",
-       "youhavenewmessagesmulti": "Ida dané madué séwalapatra anyar ring $1",
+       "youhavenewmessagesmulti": "Ragané madué séwala anyar ring $1",
        "editsection": "uah",
        "editold": "uah",
        "viewsourceold": "cingak wit",
        "toc": "Daging",
        "showtoc": "sinahang",
        "hidetoc": "engkebang",
+       "collapsible-collapse": "Alitin malih",
        "collapsible-expand": "buka",
        "confirmable-confirm": "{{GENDER:$1|Jero}} yakin?",
        "confirmable-yes": "Inggih",
        "confirmable-no": "Nénten",
+       "thisisdeleted": "Cingak utawi uliang $1?",
        "viewdeleted": "Cingak $1?",
        "restorelink": "{{PLURAL:$1|siki uahan sané kausapin|$1 uahan sané kausapin}}",
        "feedlinks": "Asupan:",
        "feed-invalid": "Tipe permintaan asupan tusing beneh.",
+       "feed-unavailable": "Umpan sindikasi nénten kasayagayang",
+       "site-rss-feed": "Umpan RSS $1",
        "site-atom-feed": "$1 \"atom feed\"",
+       "page-rss-feed": "Umpan RSS \"$1\"",
        "page-atom-feed": "$1 \"atom feed\"",
        "red-link-title": "$1 (kaca nénten wénten)",
+       "sort-descending": "Urutang ka betén",
+       "sort-ascending": "Urutang menék",
        "nstab-main": "Kaca",
        "nstab-user": "Kaca sang anganggé",
+       "nstab-media": "Kaca media",
        "nstab-special": "Kaca kusus",
        "nstab-project": "Kaca proyék",
        "nstab-image": "Depukan",
-       "nstab-mediawiki": "Séwalapatra",
+       "nstab-mediawiki": "Séwala",
        "nstab-template": "Cétakan",
        "nstab-help": "Kaca wantuan",
        "nstab-category": "Kategori",
        "mainpage-nstab": "Kaca utama",
+       "nosuchaction": "Nénten wénten parilaksana sakadi punika",
+       "nosuchactiontext": "Parilaksana sané kapinta olih URL punika nénten valid. Ragané asané iwang ngetik URL, utawi ngikutin silih tunggil pranala sané ten patut. Unduk puniki taler asané kaindikasian silih tunggil bug ring perangkat lunak sané kaanggén olih {{SITENAME}}.",
        "nosuchspecialpage": "Nénten wénten kaca kusus sakadi punika",
        "nospecialpagetext": "<strong>Ida nagih kaca pinih luwih sane nenten patut.</strong>\n\nWacakan kaca pinih luwih dados kacingak ring [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Kaiwangan",
        "databaseerror": "Database kaluputan",
+       "databaseerror-text": "Silih tunggil galat kueri basis data sampun kalaksanayang.\nIndik puniki asané kaindikasian wénten pikobet ring perangkat lunaknyané.",
+       "databaseerror-textcl": "Silih tunggil galat kueri basis data sampun kajadian.",
        "databaseerror-query": "Kuéri: $1",
        "databaseerror-function": "Pungsi: $1",
        "databaseerror-error": "Pelih: $1",
+       "transaction-duration-limit-exceeded": "Mangde nénten katunda saduran sané tegeh, kiriman puniki kawangdeang mawanin galah nyurat ($1) ngliwatin wates $2 ring limit dauh.\nYéning ragané jagi nguah akéh ring galah sané masikian, ngiring laksanayang ring karya sané alitan.",
+       "laggedslavemode": "Pangeling: Kaca asané nénten kadagingin uahan pinih anyar.",
+       "readonly": "Basis data kakunci",
+       "enterlockreason": "Asukan napi sané ngawinan penguncian, rumasuk kirang langkung ring galah napu kunci jagi kabuka",
+       "readonlytext": "Basis data kantun kakunci ring masukan miwah uahan sané anyar, asané pamecikan basis data, sasampun keadaan jagi normal sakadi sadurungnyané. \n\nPrajuru sané nglaksanayang panguncian ngemaang daging sakadi punika: $1",
        "missing-article": "data utama nenten prasida nemu tulisan saking lembar sane sepatutne wenten, inggih punika  $1, $2\n\nindike puniki biasane keranayang olih pranala kaon nuju pabenahan sane dumun lembar sane sampun kaicalang\n\nyening nenten puniki sane ngranayang, ida dane minab sampun manggihin kaiwangang ring sajeroning piranti lunak.\nDurus sadokang indik puniki rin silih sinunggil anak \n\n[[Special:ListUsers/sysop|Pengurus]], antuk ngetik alamat URL sane katuju",
        "missingarticle-rev": "(pabenahan#:$1)",
+       "missingarticle-diff": "(Malianan: $1, $2)",
+       "readonly_lag": "Basis data sampun kakunci otomatis sakantun basis data sekunder nglaksanayang sinkronisasi antuk basis data sané utama",
+       "nonwrite-api-promise-error": "Manggala HTTP 'Promise-Non-Write-API-Action' sampun kakirim nanging paminta kabuat mantuké modul manyurat API.",
+       "internalerror": "Pikobet saking tengah",
+       "internalerror_info": "Pikobet saking tengah: $1",
+       "internalerror-fatal-exception": "Sajabaning fatal ngetik \"$1\"",
+       "filecopyerror": "Nénten mrasidayang nyadur berkas \"$1\" ka \"$2\".",
+       "filerenameerror": "Nénten prasida nguah wastan berkas \"$1\" manados \"$2\".",
+       "filedeleteerror": "Nénten prasida ngusap berkas \"$1\".",
+       "directorycreateerror": "Nénten prasida ngaé direktori \"$1\".",
+       "directoryreadonlyerror": "Direktori \"$1\" wantah-baca.",
+       "directorynotreadableerror": "Direktori \"$1\" nénten prasida kabaca.",
+       "filenotfound": "Nénten prasida ngusap berkas \"$1\".",
+       "unexpected": "Nilai di sisin jangkauan: \"$1\"=\"$2\".",
+       "formerror": "Pikobet: Nénten prasida ngirim blanko.",
+       "badarticleerror": "Parilaksana puniki nénten prasida ring kaca puniki.",
+       "cannotdelete": "Kaca utawi berkas \"$1\" nénten prasida kausap.\nAsané sampun kausap olih jadma lianan.",
+       "cannotdelete-title": "Nénten prasida ngusap kaca \"$1\"",
+       "delete-scheduled": "Kaca $1 karencanayang mangda kausap. Mangda trepti.",
+       "delete-hook-aborted": "Pangusapan kawangdeang olih kait parser.\nNénten wénten panlatarang.",
+       "no-null-revision": "Nénten prasida makarya revisi null anyar anggén kaca \"$1\"",
        "badtitle": "murda sane nenten manut",
        "badtitletext": "Judul halaman sane katagih nenten patut, kosong, atau judul antarbahasa atau antarwiki yang salah sambung.\n\nmurda lembar sane kaarsa nenten sida kaedengang, kosong, utawi murda murda antarbasa utawi antarwiki sane iwang",
+       "title-invalid-empty": "Murda kaca sané kapinta nénten madaging napi-napi utawi madaging wantah wasta saking silih tunggil genah aran\nJudul halaman yang diminta kosong atau berisi hanya nama sebuah ruang nama.",
+       "title-invalid-utf8": "Murda kaca sané kapinta madué paiketan UTF-8 sané nénten resmi.",
+       "title-invalid-interwiki": "Murda madué pranala pantaraningwiki sané nénten prasida kaanggén ring murda.",
+       "title-invalid-talk-namespace": "Murda situs sané kapinta nuju ka kaca pablibagan sané nénten prasida kasayagayang.",
+       "title-invalid-characters": "Murda kaca sané kapinta madué watek sané ten resmi:\"$1\".",
+       "title-invalid-relative": "Murda madué alamat relatif. Murda kaca relatif (./, ../) nénten resmi, mawinan prasida ngawinan wangde ritatkala kapindatangan olih prajuru panganggé.",
+       "title-invalid-magic-tilde": "Murda kaca madué paiketan tilda sané nénten resmi (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Murda kaca sané kapinta kalintang dawa. Punika patut kasimbolang sareng $1 {{PLURAL:$1|byte|bytes}} ring simbol UTF-8.",
+       "title-invalid-leading-colon": "Murda kaca sané kapinta kakawitin antuk tanda petik kalih sané nénten resmi.",
+       "perfcached": "Data sakadi puniki kaambil saking pasinggahan miwah asané nénten data sané mutakhir. {{PLURAL:$1|Hasil}} sakwéhnyané wénten ring pasinggahan.",
+       "perfcachedts": "Data sakadi puniki kaambil saking pasinggahan miwah pinih untat kaanyarin ring $1. {{PLURAL:$4|Hasil}} sakwéhnyané wénten ring pasinggahan.",
+       "querypage-no-updates": "Pamutakhiran saking kaca puniki kantun kamatiang. Data sané wénten driki mangkin nénten jagi kamuat malih.",
        "viewsource": "Cingak wit",
        "viewsource-title": "Cingak wit saking $1",
-       "viewsourcetext": "Jero dados nyingakin miwah nurun wit kaca puniki.",
+       "actionthrottled": "Parilaksana kawatesin",
+       "actionthrottledtext": "Ragané kawatesin antuk nglaksanayang parilaksana puniki kalintang akéh ring galah sané nampek, miwah ragané sampun ngliwatin wates sané kadurusang. Ngiring ulang malih ring akudang menit malih.",
+       "protectedpagetext": "Kaca puniki sampun kakunci antuk ngahalangin pauahan utawi parilaksana lianan.",
+       "viewsourcetext": "Ragané dados nyingakin miwah nurun wit saking kaca puniki.",
+       "viewyourtext": "Ragané prasida nyingakin utawi nyadur sumber saking '''uahan Ragané''' ka kaca puniki.",
+       "protectedinterface": "Kaca puniki ngamuat teks pantaraningrai antuk perangkat lunak ring wiki puniki, miwah kalindungin ring parilaksana sané nénten patut. Antuk nambehin utawi nguah terjemahan ring makasami wiki, mangda nganggé [https://translatewiki.net/ translatewiki.net], pakarya pelokalan MediaWiki.",
+       "editinginterface": "<strong>Panginget:</strong> Ragané nguah silih tunggil kaca sané kaangén nyayagayang teks pantaraningrai antuk perangkat lunak.\nUahan ring kaca puniki jagi ngawinang mal ring pantaraningrai panganggé majeng panganggé lianan ring wiki puniki.",
+       "translateinterface": "Antuk nambehin utawi nguah terjemahan makasami wiki, mangda anggén   [https://translatewiki.net/ translatewiki.net], pakarya pelokalan MediaWiki.",
+       "cascadeprotected": "Kaca puniki sampun kajaga saking uwahan mawinan kasarengi ring {{PLURAL:$1|kaca|kaca-kaca}} sakadi punika sané sampun kajaga malarapan opsi \"madérét\":\n$2",
+       "namespaceprotected": "Ragané ten madué kawenangan ngakses antuk nguah kaca ring genah aran '''$1'''.",
+       "customcssprotected": "Ragané nénten madué izin antuk nguah kaca CSS puniki, mawinan madaging tatacara praragan panganggé.",
+       "customjsonprotected": "Ragané nénten madué izin antuk nguah kaca JSON puniki mawinan madaging tatacara praragan panganggé.",
+       "customjsprotected": "Ragané nénten madué izin antuk nguah kaca JavaScrip puniki, mawinan madaging tatacara praragan panganggé lianan.",
+       "sitecssprotected": "Ragané nénten madué izin antuk nguah kaca CSS puniki mawinan parilaksana sakadi punika asané prasida mabuat ring makasami pamiarsa.",
+       "sitejsonprotected": "Ragané nénten madué izin antuk nguah kaca JSON puniki mawinan parilaksana sakadi punika prasida mabuat ring makasami pamiarsa.",
+       "sitejsprotected": "Ragané nénten madué izin antuk nguah kaca JavaScript puniki mawinan parilaksana sakadi punika asané prasida mabuat ring makasami pamiarsa.",
+       "mycustomcssprotected": "Ragané nénten madué izin antuk nguah kaca CSS puniki.",
+       "mycustomjsonprotected": "Ragané nénten madué izin antuk nguah kaca JSON puniki.",
+       "mycustomjsprotected": "Ragané nénten madué izin antuk nguah kaca JavaScript puniki.",
+       "myprivateinfoprotected": "Ragané nénten madué izin antuk nguah informasi praragan ragané.",
+       "mypreferencesprotected": "Ragané nénten madué izin antuk nguah kaca JavaScript puniki.",
+       "ns-specialprotected": "Kaca ring genah aran {{ns:special}} nénten prasida kauah.",
+       "titleprotected": "Murda puniki kajaga saking pabuat saking [[User:$1|$1]].\nNapi ngawinan asapunika wantah kaicénin sakadi <em>$2</em>.",
+       "filereadonlyerror": "Nénten prasida memodifikasi berkas \"$1\" mawinan berkas repositori \"$2\" inggih punika mode baca-manten.\n\nPrajuru sané ngunci madué napi sané ngawinan asapunika: \"$3\".",
+       "invalidtitle": "Murda nénten resmi",
+       "invalidtitle-knownnamespace": "Murda sané nénten resmi antuk genah aran \"$2\" miwah teks \"$3\"",
+       "invalidtitle-unknownnamespace": "Judul sané nénten resmi antuk nomor genah aran nénten kauningin $1 miwah teks \"$2\"",
+       "exception-nologin": "Durung manjing log",
        "yourname": "Peséngan sang anganggé:",
        "userlogin-yourname": "Peséngan sang anganggé",
-       "userlogin-yourname-ph": "Dagingin peséngan sang anganggé jero",
+       "userlogin-yourname-ph": "Dagingin peséngan sang anganggé ragané",
        "yourpassword": "Kruna sandi:",
        "userlogin-yourpassword": "Kruna sandi",
-       "userlogin-yourpassword-ph": "Dagingin kruna sandi jero",
+       "userlogin-yourpassword-ph": "Dagingin kruna sandi ragané",
        "createacct-yourpassword-ph": "Dagingin kruna sandi",
        "yourpasswordagain": "jumunin kruna sandi",
        "createacct-yourpasswordagain": "Mastiang kruna kunci",
        "notloggedin": "Durung manjing log",
        "userlogin-noaccount": "Durung madué akun?",
        "userlogin-joinproject": "Nyarengin {{SITENAME}}",
-       "createaccount": "Karyanin akun",
+       "createaccount": "Kardi akun",
        "userlogin-resetpassword-link": "Engsap ring kruna kunci?",
        "userlogin-helplink2": "Wantuan indik manjing log",
-       "createacct-emailoptional": "Alamat email (becikang kadagingin)",
-       "createacct-email-ph": "Dagingin alamat email jero",
-       "createacct-submit": "Karyanin akun jero",
-       "createacct-benefit-heading": "{{SITENAME}} kakaryanin olih anak sakadi jero.",
+       "createacct-emailoptional": "Alamat séwala éléktronik (opsional)",
+       "createacct-email-ph": "Dagingin alamat séwala éléktronik ragané",
+       "createacct-submit": "Kardi akun ragané",
+       "createacct-benefit-heading": "{{SITENAME}} kakaryanin antuk anak sakadi ragané.",
        "createacct-benefit-body1": "{{PLURAL:$1|uahan}}",
        "createacct-benefit-body2": "{{PLURAL:$1|kaca}}",
        "createacct-benefit-body3": "{{PLURAL:$1|sang anuut}} sané mangkin",
        "loginlanguagelabel": "Basa: $1",
        "pt-login": "Manjing log",
        "pt-login-button": "Manjing log",
-       "pt-createaccount": "Ngaryanin akun",
+       "pt-createaccount": "Kardi akun",
        "pt-userlogout": "Medal log",
        "botpasswords-label-create": "Ngae",
        "botpasswords-label-cancel": "Wangdé",
        "botpasswords-label-resetpassword": "Nyumu kruna sandi",
        "resetpass-submit-cancel": "Wangdé",
        "passwordreset": "Nyumu kruna sandi",
-       "bold_sample": "téks puniki masurat tebel",
+       "bold_sample": "Suratan tebel",
        "bold_tip": "téks puniki mesurat tebel",
        "italic_sample": "teks puniki masurat sendeh",
        "italic_tip": "teks puniki masurat sendeh",
        "hr_tip": "garis horizontal",
        "summary": "Ringkesan:",
        "minoredit": "Puniki uahan alit",
-       "watchthis": "tinjo lembar puniki",
+       "watchthis": "Awasin kaca puniki",
        "savearticle": "Raksa kaca",
-       "publishpage": "Terbitang kaca",
+       "publishpage": "Wedar kaca",
+       "publishchanges": "Wedar uahan",
        "savearticle-start": "Raksa kaca...",
-       "publishpage-start": "Terbitang kaca…",
-       "preview": "tayangan sadurungnyane",
-       "showpreview": "Sinahang preview",
+       "publishpage-start": "Wedar kaca…",
+       "publishchanges-start": "Wedar uahan...",
+       "preview": "Pracingak",
+       "showpreview": "Édéngang pracingak",
        "showdiff": "Cingak uahan",
        "anoneditwarning": "<strong>Pingetan:</strong> Ida dané nénten kacatet ngranjing. Alamat IP ida dané jagi kacatet ring sejarah (indik sané dumunan) ring lembar puniki. Yening ida dane <strong>[$1 log in]</strong> utawi <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
+       "blockedtext": "<strong>Peséngan penganggé utawi genah IP ragané kablokir .</strong>\n\nBlokir puniki kalaksanayang olih $1.\nKablokir krana <em>$2</em>.\n\n* Kablokir saking: $8\n* Blokir kadaluwarsa ring: $6\n* Tetujon ngablokir: $7\n\nRagané dados ngubungin $1 utawi [[{{MediaWiki:Grouppage-sysop}}|prajuru]] antuk mabligbagin.\nRagané nénten dados nganggén fitur puniki \"{{int:emailuser}}\" sajabaning ragané sampun ngranjingang email sané patut ring [[Special:Preferences|pustaka]] tur ragané nénten kablokir antuk nganggén\nGenah IP ragané sané pinih anyar inggih punika $3, tur ID pamblokiran inggih punika #$5.\nTulung genahang silih sinunggil utawi kalih pidarta ring pitakén sané kakaryanin.",
        "loginreqlink": "manjing log",
        "newarticle": "(Anyar)",
        "newarticletext": "ida dane ngiring pranala nuju lembar sane durung wenten. yening jagi ngaryanang lembar punika, ketik daging lembar ring kotak sane wenten ring beten puniki. (cingak [$1 lembar wantuan] anggen wacana salanturnyane). yening ida dane nenten nyelapang neked ring lembar puniki, klik tombol \"back\" ring \"penjelajah web\" ida dane.",
        "anontalkpagetext": "<em>Niki inggih punika kaca pabligbagan sang penganggé sané nénten nguningayang wasta utawi nénten nganggén wasta.</em> Nika mawinan penganggé punika patut nganggén genah IP sané mawentuk angka antuk manyihnayang.\nGenah IP punika prasida kaanggén sareng-sareng olih makudang-kudang panganggé sané lianan. \nYéning Ragané sang penganggé sané nénten mawasta tur marasa ngamolihang pidarta sané nénten patut, ngiring \n[[Special:CreateAccount|ngaryanin akun]] utawi [[Special:UserLogin|sang penganggé ngranjing log]] antuk ngelidin kabingungan saking sang penganggé sané lianan ring galah sané lianan.",
-       "noarticletext": "mangkin nenten wenten teks ring lembar puniki. ida dane prasida [[Special:Search/{{PAGENAME}}|ngrereh murda nganggen lembar puniki]] ring lembar-lembar sane lianan, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ngrereh log sane mapaiketan], utawi [{{fullurl:{{FULLPAGENAME}}|action=edit}} nguwah lembar puniki]</span>.",
-       "noarticletext-nopermission": "mangkin nenten wenten teks ring lembar puniki. ida dane prasida [[Special:Search/{{PAGENAME}}|ngarereh murda anggen lembar puniki]] ring lembar-lembar sane lianan, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ngarereh log sane mapaiketan], utawi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ngubah lembar puniki]</span>.",
+       "noarticletext": "Mangkin nénten wénten suratan ring kaca puniki.\nRagané prasida [[Special:Search/{{PAGENAME}}|ngrereh murda kaca puniki]] ring kaca lianan,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ngrereh log sané mapaiketan],\nutawi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ngardi kaca puniki]</span>.",
+       "noarticletext-nopermission": "Mangkin nénten wénten suratan ring kaca puniki.\nRagané prasida [[Special:Search/{{PAGENAME}}|ngrereh murda kaca puniki]] ring kaca lianan,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ngrereh log sané mapaiketan]</span>, nanging ragané tan kalugra ngardi kaca puniki.",
        "userpage-userdoesnotexist-view": "Akun sang anganggé \"$1\" nénten madaptar.",
-       "previewnote": "\"elingang yening puniki wantah sane lintang.\" Panguwahan ida dane durung kasimpen!",
-       "continue-editing": "Magingsir ka genah ngauwah",
+       "clearyourcache": "<strong>Catetan:</strong>Sesampun karaksayang, Ragané patut ngentasin tembolok peramban wéb antuk nyingakin uahan.\n* <strong>Firefox/Safari:</strong> Tahan <em>Shift</em> ritatkala ngaklik <em>Reload</em>, utawi teken <em>Ctrl-F5</em> utawi <em>Ctrl-R</em> (<em>⌘-R</em> ring Mac)\n* <strong>Google Chrome:</strong> Teken <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> ring Mac)\n* <strong>Internet Explorer:</strong> Teken <em>Ctrl</em> ritatkala ngaklik <em>Refresh</em>, utawi teken <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Ngranjing ka <em>Ménu → Pengaturan </em> (<em>Opera → Pustaka</em> ring Mac) Salanturnyané ka <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
+       "previewnote": "<strong>Éling yéning puniki wantah pracingak.</strong>\nUahan ragané durung karaksa!",
+       "continue-editing": "Magingsir ka genah panguah",
        "editing": "Nguahin $1",
        "creating": "Makarya $1",
        "editingsection": "Nguahin $1 (pahan)",
        "editingcomment": "Nguahin $1 (pahan anyar)",
        "templatesused": "{{PLURAL:$1|Citakan}} sané kaanggén ring kaca puniki:",
-       "templatesusedpreview": "{{PLURAL:$1|Citakan}} sané kaanggén ring kaca puniki:",
+       "templatesusedpreview": "{{PLURAL:$1|Citakan}} sané kaanggén ring pracingak puniki:",
        "template-protected": "(kasaibin)",
        "template-semiprotected": "(semi-kasaibin)",
        "hiddencategories": "lembar niki inggih punika krama saking {{PLURAL:$1|1 golongan sane mengkeb|$1 golongan sane mengkeb}}",
-       "permissionserrors": "Kaiwangan ritatkala ngranjing",
-       "permissionserrorstext-withaction": "ida dané nénten madué kuasa ngranjing anggén $2, riantukan {{PLURAL:$1|alasan}} ring sor puniki:",
+       "permissionserrors": "Pikobet lugra",
+       "permissionserrorstext-withaction": "Ragané tan kalugra $2, antukan {{PLURAL:$1|larapan}} ring sor puniki:",
        "recreate-moveddeleted-warn": "\"pingetan\" ida dane ngawe malih lembar sane naenin maapus.'''\n\nmangda kayunin malih napike pantes lanturang suntingan ida dane. puniki log pengapusan lan pangisidan saking lembar puniki:",
        "moveddeleted-notice": "Kaca puniki sampun kausapin.\nAnggen pewarah, proteksi, lan pengisidan log saking lembar puniki cingakin pustaka beten.",
        "postedit-confirmation-created": "Kacanyané sampun kakaryanin.",
        "postedit-confirmation-saved": "Uahan jero sampun maraksa.",
+       "postedit-confirmation-published": "Uahan ragané sampun kawedar.",
        "content-model-wikitext": "sesuratan wiki",
        "post-expand-template-inclusion-warning": "pinget: ukuran templat sane keanggen kalangkung ageng. wenten templat sane kacampahang",
        "post-expand-template-inclusion-category": "lembar sane maukuran templat sane nglangkungin wates",
        "post-expand-template-argument-category": "lembar sane medaging argumen templat sane kacampahang",
        "undo-failure": "Uwahan puniki nénten prasida kabalikang krana wénten konflik panguwahan antara.",
        "viewpagelogs": "Cingak log saking kaca puniki",
-       "currentrev-asof": "pabecikan sane anyar ring pinanggal$1",
+       "currentrev-asof": "Révisi sané pinih anyar ring $1",
        "revisionasof": "Uahan ri tatkala $1",
-       "revision-info": "Panguwahan per $1 olih {{GENDER:$6|$2}}$7",
+       "revision-info": "Révisi ri tatkala $1 antuk {{GENDER:$6|$2}}$7",
        "previousrevision": "← Uahan sadurungnyané",
        "nextrevision": "Uahan salanturnyané →",
        "currentrevisionlink": "Uahan sané mangkin",
        "cur": "mgkn",
        "last": "sdrg",
        "histlegend": "pilih kalih tombol radio lantur pecik tombol \"bandingang\" anggen ngebandingang indik lianan. klik siki tanggal anggen nyingak indik lianan lembar ring pinanggal punika.<br />(skr)= binanne saking indik lianan sane mangkin, (untat) = binanne saking indik lianan sane dumunan, '''k''' = panguwahan alit, '''b''' = panguwahan bot, → = panguwahan kepahan, ← = reringkesan otomatis",
-       "history-fieldset-title": "Nyaringin révisi",
+       "history-fieldset-title": "Saring révisi",
        "history-show-deleted": "wantah sane kaapus",
-       "histfirst": "pinih suwe",
+       "histfirst": "pinih sué",
        "histlast": "pinih anyar",
        "history-feed-title": "Babad uahan",
        "history-feed-description": "Babad uahan kaca puniki ring wiki",
        "mergelog": "Gabung log",
        "revertmerge": "tansida nyarengin",
        "history-title": "Babad uahan saking \"$1\"",
-       "difference-title": "$1: sane malianan ring revisi",
+       "difference-title": "Bina pantaraning révisi \"$1\"",
        "lineno": "Carik $1:",
        "compareselectedversions": "bandingang penguwahan sane kapilih",
-       "editundo": "nguliang",
-       "diff-empty": "(Nénten wénten sané malianan)",
+       "editundo": "ulihang",
+       "diff-empty": "(Nénten mabina)",
        "diff-multi-sameuser": "({{PLURAL:$1|$1 revisi pantaraning}} olih pangawi sane pateh nenten kacumawisang)",
        "diff-multi-otherusers": "({{PLURAL:$1|Siki pamecikan pantaraning|$1 pamecikan pantaraning}} olih {{PLURAL:$2|siki pangangge lianan|$2 panggange}} nenten katampilan)",
-       "searchresults": "asil pangrereh",
-       "searchresults-title": "Asil pangrereh anggén \"$1\"",
+       "searchresults": "Asil pangrereh",
+       "searchresults-title": "Asil pangrereh indik \"$1\"",
        "prevn": "{{PLURAL:$1|$1}} sadurungnyané",
        "nextn": "{{PLURAL:$1|$1}} salanturnyané",
        "prev-page": "kaca sadurungnyané",
-       "prevn-title": "$1 {{PLURAL:$1|asil}} sadurunge",
-       "nextn-title": "$1 {{PLURAL:$1|asil}} selanturnyane",
+       "prevn-title": "$1 {{PLURAL:$1|asil}} sadurungnyané",
+       "nextn-title": "$1 {{PLURAL:$1|asil}} salanturnyané",
        "shown-title": "Sinahang $1 {{PLURAL:$1|asil}} per kaca",
        "viewprevnext": "Cingak ($1 {{int:pipe-separator}}$2)($3)",
        "searchmenu-exists": "wenten lembar sane mamurda \"[[:$1]]\" ring wiki puniki. {{PLURAL:$2|0=| cingakin taler asil rerehan lianan sane kapolihang}}",
-       "searchmenu-new": "<strong> ngawi lembar \"[[:$1]] ring wiki puniki </ strong>! {{{{PLURAL:$2|}}| 0 = | cingak teler lembar sane kapolihang ring pangreregan | cingak taler asil pangrerehan sane kapolihang}}",
+       "searchmenu-new": "<strong>Kardi kaca \"[[:$1]]\" ring wiki puniki!</strong> {{PLURAL:$2|0=|Taler cingak kaca sané temunin ragané.|Taler cingak asil pangrereh.}}",
        "searchprofile-articles": "Kaca daging",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Samian",
-       "searchprofile-advanced": "lanturane",
+       "searchprofile-advanced": "Lanturan",
        "searchprofile-articles-tooltip": "Rereh ring $1",
        "searchprofile-images-tooltip": "Rereh depukan",
        "searchprofile-everything-tooltip": "Rereh ring samian daging (rumasuk kaca pabligbagan)",
-       "searchprofile-advanced-tooltip": "Rereh ring genah wastan sané kapilih",
+       "searchprofile-advanced-tooltip": "Rereh ring genah aran sané kapilih",
        "search-result-size": "$1 ({{PLURAL:$2|1 kruna|$2 kruna}})",
        "search-result-category-size": "{{PLURAL:$1|1 krama|$1 krama}}({{PLURAL:$2|1  subgolongan|$2 subgolongan}}, {{PLURAL:$3|1 pupulan|$3 pupulan}})",
        "search-redirect": "(gingsiran saking $1)",
        "search-section": "(pahan $1)",
        "search-file-match": "(anut ring daging depukan)",
-       "search-suggest": "minab sane kearsaang $1",
+       "search-suggest": "Minab sané aptiang ragané: $1",
        "searchrelated": "paiketan",
        "searchall": "samian",
-       "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> of <strong>$3</strong>|Asil-asil <strong>$1 – $2</strong> saking <strong>$3</strong>}}",
-       "search-nonefound": "nénten wénten asil sané caklek ring arsa",
+       "search-showingresults": "{{PLURAL:$4|Asil <strong>$1</strong> saking <strong>$3</strong>|Asil <strong>$1 – $2</strong> saking <strong>$3</strong>}}",
+       "search-nonefound": "Nénten wénten asil sané cocok sareng kuéri.",
        "powersearch-ns": "Rereh ring genah wastan:",
-       "mypreferences": "Preferensi",
+       "mypreferences": "Préferénsi",
        "prefs-user-pages": "Kaca sang anganggé",
        "saveprefs": "Raksa",
        "prefs-editing": "Nguahin",
        "grouppage-bot": "{{ns:project}}:Bot",
        "grouppage-sysop": "{{ns:project}}:Prajuru",
        "right-edit": "Uah kaca",
-       "right-writeapi": "nganggén API sasuratan",
+       "right-writeapi": "Anggé API sasuratan",
        "right-delete": "Usap kaca",
        "right-editprotected": "Uah kaca sané kasaibin \"{{int:protect-level-sysop}}\"",
        "grant-createeditmovepage": "Karyanin, uah, miwah gingsirang kaca",
        "newuserlogpage": "Log makarya sang anganggé",
        "rightslog": "Log panguwahan hak ngaksés",
        "action-read": "wacén kaca puniki",
-       "action-edit": "uah kaca puniki",
-       "action-createpage": "karyanin kaca puniki",
-       "action-createaccount": "karyanin akun sang anganggé puniki",
+       "action-edit": "nguah kaca puniki",
+       "action-createpage": "ngardi kaca puniki",
+       "action-createaccount": "kardi akun sang anganggé puniki",
+       "action-move": "ngingsirang kaca puniki",
        "action-delete": "usap kaca puniki",
        "action-deletedhistory": "cingak babad kaca sané kausapin",
        "action-browsearchive": "rereh kaca sané kausapin",
-       "action-editprotected": "uah kaca sané kasaibin \"{{int:protect-level-sysop}}\"",
+       "action-rollback": "ngwaliang kanti gelis uahan saking sang anganggé pinih untat sané nguah sinalih tunggil kaca",
+       "action-autopatrol": "nyihnain uahan ragané yéning sampun kapratroli",
+       "action-sendemail": "ngirim séwala éléktronik",
+       "action-editprotected": "nguah kaca sané kasaibin \"{{int:protect-level-sysop}}\"",
        "action-editsemiprotected": "uah kaca sané kasaibin \"{{int:protect-level-autoconfirmed}}\"",
        "nchanges": "$1 {{PLURAL:$1|uahan}}",
        "enhancedrc-history": "babad",
        "recentchanges-summary": "Track uahan sané mangkin ring wikiné indik kaca puniki.",
        "recentchanges-noresult": "Nénten wénten uahan ring galahnyané puniki sané anut sareng praciri puniki.",
        "recentchanges-feed-description": "molihang pagentosan anyar ring wiki ring \"umpan\" puniki",
-       "recentchanges-label-newpage": "Uahan puniki makarya kaca anyar",
+       "recentchanges-label-newpage": "Uahan puniki ngardi kaca anyar",
        "recentchanges-label-minor": "Punika uahan alit",
        "recentchanges-label-bot": "Uahan puniki kalaksanayang antuk bot",
        "recentchanges-label-unpatrolled": "Uahan puniki durung kapatroli",
        "recentchanges-label-plusminus": "Agengnyané kacané kauahin antuk akéhnyané bita puniki",
-       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
+       "recentchanges-legend-heading": "<strong>Legénda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (taler cingak [[Special:NewPages|bacakan kaca anyar]])",
        "recentchanges-submit": "Sinahang",
        "rcfilters-activefilters-show": "Sinahang",
        "rcfilters-filter-major-label": "Uahan tan alit",
        "rcfilters-filter-pageedits-label": "Uahan kaca",
        "rcnotefrom": "Ring beten puniki inggih punika {{PLURAL:$5|panguwahan}} saking <strong>$3, $4</strong> (kaedengang ngantos <strong>$1</strong> panguwahan).",
-       "rclistfrom": "edengang  penguwahan sane anyar wit saking $3 $2",
+       "rclistfrom": "Édéngang uahan anyar saking $2, $3",
        "rcshowhideminor": "$1 uahan alit",
        "rcshowhideminor-show": "Sinahang",
        "rcshowhideminor-hide": "Engkebang",
        "rc-change-size-new": "$1 {{PLURAL:$1|bita}} sasampun kauah",
        "rc-enhanced-expand": "Sinahang rerincian",
        "rc-enhanced-hide": "Engkebang rerincian",
-       "rc-old-title": "witnyané kakaryanin pinaka \"$1\"",
+       "rc-old-title": "witnyané kakardi pinaka \"$1\"",
        "recentchangeslinked": "Uahan mapaiketan",
        "recentchangeslinked-toolbox": "Uahan mapaiketan",
        "recentchangeslinked-title": "Uahan sané mapaiketan $1",
-       "recentchangeslinked-summary": "lembar kautamayang puniki ngicenin kepahan penguwahan kaping untat ring lembar-lembar sana mapaiket. Lembar sane [[Special:Watchlist|ida dane iwasin]] mapinget antuk sesuratan tebel",
+       "recentchangeslinked-summary": "Dagingin aran kaca antuk nyingakin uahan ring kaca-kaca sané kasambung kaca punika. (Antuk nyingakin kapahan kategori, dagingin {{ns:category}}:Aran kategori). Uahan kaca-kaca ring [[Special:Watchlist|Pangawasan ragané]] kasurat <strong>tebel</strong>.",
        "recentchangeslinked-page": "Peséngan kaca:",
        "recentchangeslinked-to": "Sinahang uahan saking kaca-kaca sané linked kaca puniki",
        "upload": "Unggahang depukan",
        "upload-dialog-button-cancel": "Wangdé",
        "upload-dialog-button-save": "Raksa",
        "backend-fail-delete": "Tan prasida ngusapin berkas \"$1\".",
+       "uploadstash-summary": "Kaca puniki nyayagayang aksés ring berkas sané sampun kaunggah utawi sané jagi kaunggah, nanging durung kawedar ring wikiné. Berkas-berkas punika nénten sinah ring samian anak sajabaning anak sané ngunggahang.",
        "license": "kepahan lugra",
        "license-header": "Lisénsi",
        "listfiles-delete": "usap",
        "listfiles": "Bacakan depukan",
        "file-anchor-link": "Depukan",
        "filehist": "Babad berkas",
-       "filehist-help": "klik ring pinanggal/galah anggen nyingakin pupulan niki rikala punika",
+       "filehist-help": "Klik ring tanggal/galah anggén nyingakin berkas puniki ri tatkala galah punika.",
        "filehist-deleteall": "usap samian",
        "filehist-revert": "wangdéang",
        "filehist-current": "mangkin",
        "filehist-thumbtext": "miniatur anggen versi ring $1",
        "filehist-nothumb": "Tusing ade miniatur",
        "filehist-user": "Sang anganggé",
-       "filehist-dimensions": "ukuran",
-       "filehist-comment": "tureksa",
+       "filehist-dimensions": "Diménsi",
+       "filehist-comment": "Pasaur",
        "imagelinks": "Panganggén depukan",
        "linkstoimage": "{{PLURAL:$1|Kaca|$1 kaca}} ring sor puniki nganggén depukan puniki:",
+       "linkstoimage-more": "Langkungan saking $1 {{PLURAL:$1|kaca|kaca-kaca}} nganggén berkas puniki.\nPupulan puniki nyinahang {{PLURAL:$1|kaca kapertama nganggén pranala langsung|$1 kaca sané nganggén pranala langsung}} ka berkasé puniki\nA [[Special:WhatLinksHere/$2|pupulan sané jangkep]] taler kasayagayang.",
        "nolinkstoimage": "Nénten wénten kaca sané nganggén berkas puniki.",
        "linkstoimage-redirect": "$1 (gingsiran berkas) $2",
        "sharedupload-desc-here": "Depukan puniki mawit saking $1 lan minab kaanggén olih proyék-proyék sané lianan. Déskripsinnyané ring [$2 kaca déskripsi depukannyané] kaarahin ring ungkur puniki.",
-       "filepage-nofile": "Nentén wénten berkas sané mamurda sakadi punika",
+       "filepage-nofile": "Nentén wénten berkas sané maaran sakadi punika.",
        "shared-repo-name-wikimediacommons": "Wikimedia Commons",
-       "upload-disallowed-here": "Jero nénten dados numpuk depukan puniki.",
+       "upload-disallowed-here": "Ragané nénten dados numpuk depukan puniki.",
        "filedelete": "Usap $1",
        "filedelete-submit": "Usap",
        "filedelete-success": "<strong>$1</strong> sampun kausapin.",
        "log": "Log",
        "logeventslist-submit": "Sinahang",
        "all-logs-page": "Makasami log publik",
+       "alllogstext": "Pupulan tampilan log makasami sané kasayagayang ring {{SITENAME}}.\nRagané dados ngalaksanayang watesan tampilan nganggén ngamilih soroh log, sang anganggé (sénsitif kapitalisasi), utawi murdan kaca (taler sénsitif kapitalisasi).",
        "logempty": "Nenten katemonin entri log sane patut",
        "allpages": "Makasami kaca",
        "allarticles": "Makasami kaca",
        "allpagessubmit": "Lanturang",
        "allpages-bad-ns": "{{SITENAME}} nénten madué genah wastan \"$1\".",
        "allpages-hide-redirects": "Engkebang kaca gingsirian",
-       "categories": "Golongan",
+       "categories": "Kategori",
        "categories-submit": "Sinahang",
        "deletedcontributions": "Pituut sang anganggé sané kausapin",
        "linksearch-ns": "Genah wastan:",
        "linksearch-line": "$1 masambung saking $2",
        "listusers-submit": "Sinahang",
-       "listgrouprights-members": "kepahan krama",
-       "emailuser": "email sane nganggo niki",
-       "emailmessage": "Séwalapatra:",
-       "usermessage-editor": "Séwalapatra sistem",
-       "watchlist": "kepahan peninjoan",
-       "mywatchlist": "kepahan peninjoan",
+       "listgrouprights-members": "(bacakan krama)",
+       "emailuser": "Kirim séwala éléktronik ring sang anganggé puniki",
+       "emailmessage": "Séwala:",
+       "usermessage-editor": "Séwala sistem",
+       "watchlist": "Pangawasan",
+       "mywatchlist": "Pangawasan",
        "watchlistfor2": "Anggén $1 $2",
-       "watch": "cingak",
+       "watch": "Awasin",
        "unwatch": "tan sida maninjo",
-       "watchlist-details": "{{PLURAL:$1|$1 kaca}} wénten ring bacakan pantauan ida dané (rumasuk kaca pabligbagan).",
+       "watchlist-details": "{{PLURAL:$1|$1 kaca}} wénten ring Pangawasan ragané (rumasuk kaca pabligbagan).",
+       "wlheader-showupdated": "Kaca-kaca puniki sampun kauwah saking kunjungan ragané sané pinih untat, kasinahang sareng <strong>tebel</strong>.",
+       "wlnote": "Ring sor puniki {{PLURAL:$1|uahan sané pinih untat| <strong>$1</strong> uahan}} pinih untat {{PLURAL:$2|jam|<strong>$2</strong> jam}},ngantos $3, $4.",
        "watchlist-submit": "Sinahang",
        "wlshowhideminor": "uahan alit",
-       "watchlist-options": "milih kepahan peninjo",
+       "watchlist-options": "Opsi pangawasan",
        "enotif_reset": "Cihnayang makasami kaca sané sampun karauhin",
        "enotif_subject_deleted": "Kaca {{SITENAME}} $1 sampun {{GENDER:$2|kausap}} $2",
        "enotif_body_intro_deleted": "Kaca{{SITENAME}} $1 sampun {{GENDER:$2|kausapin}} ring $PAGEEDITDATE olih $2, cingak $3.",
        "historyaction-submit": "Sinahang uahan",
        "actioncomplete": "pelaksanan sampun wusan",
        "actionfailed": "pelaksana luput",
-       "dellogpage": "log pangapus",
+       "dellogpage": "Log pangusap",
        "rollback-confirmation-yes": "Waliang",
        "rollback-confirmation-no": "Wangdé",
        "rollbacklink": "waliang",
        "protectedarticle": "nyaib \"[[$1]]\"",
        "modifiedarticleprotection": "nguwah tingkatan panyambi antuk  \"[[$1]]\"",
        "protect-default": "Lugra makasami sang anganggé",
+       "protect-level-sysop": "Wantah prajuru sané kalugra",
        "restriction-edit": "Uah",
        "restriction-move": "Gingsirang",
        "undelete": "Cingak kaca sané kausapin",
        "undeletelink": "cingak/waliang",
        "undeleteviewlink": "cingak",
        "undelete-search-title": "Rereh kaca sané kausapin",
-       "namespace": "Genah wastan:",
-       "invert": "uliang pilihan",
-       "tooltip-invert": "Centang kotak puniki mangdané ngengkebang lembar sané kauwah ring genah wastan sané kapilih (miwah genah wastan sané mapaiketan yéning kacentang)",
-       "namespace_association": "Genah wasta sané mapaiketan",
-       "tooltip-namespace_association": "Céntang kotak puniki anggén nagingin genah wasta pabligbagan utawi subjék sané mapaiketan sareng genah wasta sané kapilih",
+       "namespace": "Genah aran:",
+       "invert": "Waliang pilihan",
+       "tooltip-invert": "Céntang kotak puniki mangda ngengkebang uahan kaca ring genah aran sané kapilih (miwah genah aran sané mapaiketan yéning kacéntang)",
+       "namespace_association": "Genah aran sané mapaiketan",
+       "tooltip-namespace_association": "Céntang kotak puniki mangda marengang genah aran pabligbagan utawi subyék sané mapaiketan genah aran sané kapilih",
        "blanknamespace": "(Utama)",
        "contributions": "Pituut {{GENDER:$1|sang anganggé}}",
        "contributions-title": "Pituut sang anganggé $1",
        "mycontris": "Pituut",
        "anoncontribs": "Pituut",
-       "contribsub2": "antuk {{GENDER:$3|$1}} ($2)",
+       "contribsub2": "Antuk {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nénten wénten uwahan sané patut sareng cihna punika.",
        "uctop": "sane mangkin",
        "month": "Saking sasih (miwah sadurungnyané)",
        "sp-contributions-talk": "pabligbagan",
        "sp-contributions-search": "Rereh pituut",
        "sp-contributions-username": "Alamat IP wiadin peséngan sang anganggé:",
-       "sp-contributions-toponly": "tampilang wantah panguwahan sane anyar",
-       "sp-contributions-newonly": "Tampilang wantah panguwahan sane anyar",
+       "sp-contributions-toponly": "Wantah édéngang uahan sané pinih anyar",
+       "sp-contributions-newonly": "Wantah édéngang uahan sané ngardi kaca",
        "sp-contributions-submit": "Rereh",
        "whatlinkshere": "Pranala iriki",
-       "whatlinkshere-title": "lembar-lembar sane maduwe pranala kaping \"$1\"",
+       "whatlinkshere-title": "Kaca sané kasambung ring \"$1\"",
        "whatlinkshere-page": "Kaca:",
-       "linkshere": "lembar puniki maduwe pranala ke '''$2'''",
+       "linkshere": "Kaca-kaca ring sor puniki kasambung ring <strong>$2</strong>:",
        "nolinkshere": "Nénten wénten kaca sané madué pranala ring <strong>$2</strong>.",
        "isredirect": "Kaca gingsiran",
        "istemplate": "sareng kasurat",
-       "isimage": "pranala pupulan-pupulan",
+       "isimage": "pranala berkas",
        "whatlinkshere-prev": "{{PLURAL:$1|sadurungnyané|$1 sadurungnyané}}",
        "whatlinkshere-next": "{{PLURAL:$1|salanturnyané|$1 salanturnyané}}",
        "whatlinkshere-links": "← pranala",
        "whatlinkshere-hidetrans": "$1 transklusi",
        "whatlinkshere-hidelinks": "$1 pranala",
        "whatlinkshere-hideimages": "$1 pranala berkas",
-       "whatlinkshere-filters": "Panyaring",
+       "whatlinkshere-filters": "Panyaringan",
        "ipboptions": "2 jam:2 hours,1 dina:1 day,3 dina:3 days,1 minggu:1 week,2 minggu:2 weeks,1 sasih:1 month,3 sasih:3 months,6 sasih:6 months,1 taun:1 year,tanpa wates:infinite",
        "ipb-pages-label": "Kaca",
        "ipb-namespaces-label": "Genah wastan",
        "revertmove": "wangdéang",
        "export": "ekspor lembar",
        "export-download": "Raksa pinaka berkas",
-       "allmessages": "Séwalapatra sistem",
+       "allmessages": "Séwala sistem",
        "allmessagesname": "pesengan",
        "allmessagesdefault": "teks lingga",
        "thumbnail-more": "Ngedénang",
        "thumbnail_error": "luput ngaryanin bentuk cenik $1",
        "import-interwiki-sourcepage": "Kaca wit:",
        "importlogpage": "Log impor",
-       "tooltip-pt-userpage": "Kaca {{GENDER:|sang anganggé jero}}",
-       "tooltip-pt-mytalk": "Kaca pabligbagan {{GENDER:|jero}}",
-       "tooltip-pt-preferences": "Preferensi {{GENDER:|jero}}",
-       "tooltip-pt-watchlist": "kepahan-kepahan lembar sane katinjo titiang",
-       "tooltip-pt-mycontris": "Bacakan pituut {{GENDER:|jero}}",
-       "tooltip-pt-login": "Jero kaaptiang mangda manjing log; yadiastun nénten wajib",
+       "tooltip-pt-userpage": "Kaca {{GENDER:|sang anganggé ragané}}",
+       "tooltip-pt-mytalk": "Kaca pabligbagan {{GENDER:|ragané}}",
+       "tooltip-pt-preferences": "Préferénsi {{GENDER:|ragané}}",
+       "tooltip-pt-watchlist": "Bacakan kaca sané uahannyané awasin ragané",
+       "tooltip-pt-mycontris": "Bacakan pituut {{GENDER:|ragané}}",
+       "tooltip-pt-login": "Ragané kaaptiang mangda manjing log; yadiastun nénten wajib",
        "tooltip-pt-logout": "Medal log",
-       "tooltip-pt-createaccount": "Jero kaaptiang mangda makarya akun miwah manjing log; yadiastun nénten wajib",
+       "tooltip-pt-createaccount": "Ragané kaaptiang mangda ngardi akun miwah manjing log; yadiastun nénten wajib",
        "tooltip-ca-talk": "Pabligbagan indik kaca daging",
        "tooltip-ca-edit": "Uah kaca puniki",
-       "tooltip-ca-addsection": "nyumunin kepahan anyar",
-       "tooltip-ca-viewsource": "Kaca puniki kasaibin.\nJero wantah prasida nyingakin witnyané",
+       "tooltip-ca-addsection": "Wiwit bagian anyar",
+       "tooltip-ca-viewsource": "Kaca puniki kasaibin.\nRagané wantah prasida nyingakin witnyané",
        "tooltip-ca-history": "Uahan sadurungnyané saking kaca puniki",
        "tooltip-ca-protect": "Saib kaca puniki",
        "tooltip-ca-unprotect": "Uah saiban kaca puniki",
        "tooltip-ca-delete": "Usap kaca puniki",
        "tooltip-ca-move": "Gingsirang kaca puniki",
-       "tooltip-ca-watch": "Imbuhin kaca puniki ring bacakan pantauan ida dané",
-       "tooltip-ca-unwatch": "apus lembar niki ring daftar paninjoan ida dane",
+       "tooltip-ca-watch": "Tambeh kaca puniki ring pangawasan ragané",
+       "tooltip-ca-unwatch": "Usap kaca puniki saking pangawasan ragané",
        "tooltip-search": "Rereh ring {{SITENAME}}",
        "tooltip-search-go": "Rereh kaca sané mapeséngan pateh sakadi puniki yéning wénten",
        "tooltip-search-fulltext": "Rereh kaca sané madaging sesuratan puniki",
        "tooltip-n-randompage": "Cihnayang kaca ulah-aluh",
        "tooltip-n-help": "Genah ngrereh wantuan",
        "tooltip-t-whatlinkshere": "Bacakan makasami kaca ring wiki sané nuju iriki",
-       "tooltip-t-recentchangeslinked": "Uahan sané mangkin saking kaca-kaca sané linked ring kaca puniki",
+       "tooltip-t-recentchangeslinked": "Uahan sané mangkin saking kaca-kaca sané kasambung ring kaca puniki",
        "tooltip-feed-atom": "\"atom feed\" anggen lembar puniki",
        "tooltip-t-contributions": "Bacakan pituut olih {{GENDER:$1|sang anganggé puniki}}",
        "tooltip-t-emailuser": "Ngirim surel majeng ring {{GENDER:$1|penganggo puniki}}",
        "tooltip-t-upload": "Unggahang depukan",
        "tooltip-t-specialpages": "Bacakan makasami kaca kusus",
        "tooltip-t-print": "Vérsi cétak kaca puniki",
-       "tooltip-t-permalink": "Pranala ajeg anggén révisinnyané kacané puniki",
+       "tooltip-t-permalink": "Pranala ajeg anggén révisin kacané puniki",
        "tooltip-ca-nstab-main": "Cingak kaca daging",
        "tooltip-ca-nstab-user": "Cingak kaca sang anganggé",
-       "tooltip-ca-nstab-special": "Puniki kaca kusus tur nénten prasida kauwah",
+       "tooltip-ca-nstab-special": "Puniki kaca kusus tur nénten prasida kauah",
        "tooltip-ca-nstab-project": "Cingak kaca proyek",
        "tooltip-ca-nstab-image": "Cingak kaca depukannyané",
-       "tooltip-ca-nstab-mediawiki": "Cingak séwalapatra sistem",
+       "tooltip-ca-nstab-mediawiki": "Cingak séwala sistem",
        "tooltip-ca-nstab-template": "Cingak citakan",
        "tooltip-ca-nstab-help": "Cingak kaca wantuan",
        "tooltip-ca-nstab-category": "Cingak kaca kategori",
        "tooltip-minoredit": "pingetin puniki dados panguwahan kidik",
-       "tooltip-save": "Raksa uahan jero",
-       "tooltip-preview": "Pagentosan sane dumun duwen ida dane, mangda anggen niki sadurung jagi nyimpen!",
-       "tooltip-diff": "Sinahang uahan sané karyanin jero ring sesuratannyané",
-       "tooltip-compareselectedversions": "cingak binane makekalih kepahan lembar sane kasudi",
-       "tooltip-watch": "imbuhin lembar niki ring daftar paninjoan ida dane",
+       "tooltip-save": "Raksa uahan ragané",
+       "tooltip-publish": "Wedar uahan ragané",
+       "tooltip-preview": "Pracingak uahan ragané. Rarisang nganggén pracingak puniki sadurung ngraksa.",
+       "tooltip-diff": "Édéngang uahan sané karyanin ragané ring suratannyané",
+       "tooltip-compareselectedversions": "Cingak bina pantaraning kalih révisi kaca puniki sané kapilih",
+       "tooltip-watch": "Tambeh kaca puniki ring pangawasan ragané",
        "tooltip-rollback": "\"Waliang\" wantah ngwangdéang uahan kontributor sané pinih untat ring kaca puniki antuk klik apisan",
-       "tooltip-undo": "\"nguliang\" ngabuwungin jagi ngabecikang niki lan ngagah kotak mecikang ngangge mode pratayang. dasar ipun prasida kaimbuhin ring kotak pamicutet",
+       "tooltip-undo": "\"Ulihang\" wantah ngwangdéang uahan puniki miwah membuka formulir uahannyané ring mode pracingak. Larapan prasida katambehin ring ringkesannyané.",
        "tooltip-summary": "Dagingin ringkesan",
-       "simpleantispam-label": "Pamariksa anti-spam.\nPuniki <strong>wenten</strong> kaisi!",
+       "simpleantispam-label": "Panuréksa anti-spam.\n<strong>Sampunang</strong> nagingin puniki!",
        "pageinfo-title": "Pidarta indik \"$1\"",
        "pageinfo-header-basic": "Pidarta kaca",
        "pageinfo-header-edits": "Babad uahan",
        "pageinfo-robot-policy": "Kaindéksang antuk robot",
        "pageinfo-robot-index": "Kalugra",
        "pageinfo-robot-noindex": "Tan kalugra",
-       "pageinfo-watchers": "Akéh nomér sané negdeg kaca",
-       "pageinfo-few-watchers": "Kirang saking $1 {{PLURAL:$1|tamiu}}",
+       "pageinfo-watchers": "Akéh sané ngawasin kaca",
+       "pageinfo-few-watchers": "Kirang saking $1 {{PLURAL:$1|sané ngawasin}}",
        "pageinfo-redirects-name": "Akéh nomer sané magingsir ka kaca puniki",
        "pageinfo-subpages-name": "Kapahan kaca saking kaca puniki",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|kaalihang}}; $3 {{PLURAL:$3|nénten-kaalihang}})",
        "pageinfo-firstuser": "Sang makarya kaca",
-       "pageinfo-firsttime": "Galah ritatkala ngripta kaca",
-       "pageinfo-lastuser": "Panguwah sané pinih anyar",
+       "pageinfo-firsttime": "Tanggal ngardi kaca",
+       "pageinfo-lastuser": "Sang nguah pinih untat",
        "pageinfo-lasttime": "Galah antuk uahan sané pinih anyar",
-       "pageinfo-edits": "Akéh nomer sané kauwah",
+       "pageinfo-edits": "Akéh uahan",
        "pageinfo-authors": "Akéh nomer makasami antuk panyurat sané lianan",
        "pageinfo-recent-edits": "Akéh nomer sané kauwah (ring $1 sané sampun lintang)",
        "pageinfo-recent-authors": "Akéh nomer antuk panyurat sané lianan",
        "svg-long-desc": "Berkas SVG, jimbarnyané $1 × $2 piksel, agengnyané berkas: $3",
        "show-big-image": "Depukan sujati",
        "show-big-image-preview": "Agengnyané pratuduh puniki: $1.",
-       "show-big-image-other": "{{PLURAL:$2|Resolusi}} iianan: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Résolusi}} lianan: $1.",
        "show-big-image-size": "$1 × $2 piksel",
        "sunday-at": "Redite jam $1",
        "bad_image_list": "bentukne sekadi puniki:\n\nwantah kepahan daftar ( baris sane kakawitin anggen tanda *) sane kaitung pranala kapertama ring baris mangda pranala ring berkas sane kaon.\nPranala-Pranala sane selanturnyane ring baris sane pateh kamanahang antuk pinangging, inggih punika lembar sane prasida ngedengang berkas punika.",
        "metadata": "Métadata",
-       "metadata-help": "pupulan puniki madaging wacana imbuhan minab sane kaimbuhin olih kamera digital utawi scanner sane kaanggen antuk ngawi atawi \"mendigitalisasi\" pupulan. Yening pupulan niki sampun taen kautak-atik, rerincine sane wenten minab nenten samian nyiriang wacan saking gambar sane sampun kautak-atik niki.",
-       "metadata-fields": "Widang métadata gambar sané kacantumang ring séwalapatra puniki jagi kalebuang ring tampilan kaca gambar ri tatkala tabél métadata kacenikang.\nSané lianan jagi kasenetang.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-help": "Berkas puniki madaging pidarta tambehan, minab katambehin saking kaméra digital utawi pemindai sané kaanggén ngardi utawi nigitalisasi.\nYéning berkasnyané sampun kamodifikasi saking kawéntenan witnyané, rincian saking witnyané minab nénten samian pateh malih saking berkas sané kamodifikasi.",
+       "metadata-fields": "Widang métadata gambar ring séwala puniki jagi kalebuang ring tampilan kaca gambar ri tatkala tabél métadata kacenikang.\nSané lianan jagi kasenetang.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "namespacesall": "samian",
        "monthsall": "samian",
        "confirmemail_invalidated": "Konfirmasi alamat email kawangdéang",
        "table_pager_prev": "Kaca sadurungnyané",
        "watchlisttools-clear": "Ngicalang pupulan sané sampun karauhin",
        "watchlisttools-view": "Cingak uahan sane relevan",
-       "watchlisttools-edit": "Cingak miwah uah bacakan pantauan",
-       "watchlisttools-raw": "Uah kepahan paninjo mentah",
+       "watchlisttools-edit": "Cingak miwah uah pangawasan",
+       "watchlisttools-raw": "Uah pangawasan matah",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pabligbagan]])",
        "duplicate-defaultsort": "pingetan: sereg pangurutan lingga \"$2\" nyampahang sereg pangurutan lingga sadurunge \"$1\"",
        "version-specialpages": "Kaca kusus",
        "redirect-user": "ID sang anganggé",
        "redirect-page": "ID kaca",
        "redirect-revision": "Uahan kaca",
-       "redirect-file": "Wastan berkas",
+       "redirect-file": "Aran berkas",
        "specialpages": "Kaca kusus",
        "external_image_whitelist": "#banggiang baris niki sapunapi kawentenanne<pre>\n#anggen fragmen akspresi reguler (wantah kepahan ring kekelaih//) ring sor puniki\n#fragmen-fragmen puniki jagi kaadungang sareng URL saking gambar-gambar eksternal (sane kasambungang langsung)\n#fragmen sane adung jagi katampilang dados gambar, sisanne wantah dados pranala kewanten\n#baris sane kakawitin antuk # jagi kadadosang baris komentar\n#niki nenten ngabinayang aksara ageng lan alit\n#genahang samian fragmen ekspresi reguler ring sor baris puniki. banggiang baris niki sapunapi kawentennane</pre>",
-       "tag-filter": "filter [[Special:Tags|tag]]:",
-       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
+       "tag-filter": "Panyaring [[Special:Tags|cihna]]:",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Cihna}}]]: $2",
        "tag-mw-rollback": "Waliang",
        "tag-mw-rollback-description": "Uahan sané ngwaliang uahan sadurungnyané nganggén pranala waliang",
        "tags-active-yes": "Inggih",
        "tags-delete-title": "Usap tag",
        "compare-page2": "Kaca 2",
        "logentry-delete-delete": "$1 {{GENDER:$2|ngusapin}} kaca $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|ngwalikan}} kaca $3 ($4)",
+       "logentry-delete-restore": "$1 {{GENDER:$2|ngwaliang}} kaca $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|mauah}} kaca utama {{PLURAL:$5|$5  pamecikan}} ring kaca $3: $4",
        "revdelete-content-hid": "daging kaengkebang",
-       "logentry-move-move": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ring $4",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|maglisiran}} kaca $3 ka $4 tur nenten ngawe pengalihan",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|maglisiran}} kaca $3 ka $4 tur nenten ngawe pengalihan",
+       "logentry-move-move": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ka $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ka $4 tur nenten ngawe pengalihan",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ngingsirang}} kaca $3 ka $4 tur nenten ngawe pengalihan",
        "logentry-patrol-patrol-auto": "$1 otomatis {{GENDER:$2|kacihnayang}} sampun kabecikang $4 saking kaca $3 kaawasin",
-       "logentry-newusers-create": "Akun sang anganggé $1 {{GENDER:$2|kakaryanin}}",
-       "logentry-newusers-autocreate": "Akun sang anganggé $1 {{GENDER:$2|kakaryanin}} otomatis",
+       "logentry-newusers-create": "Akun sang anganggé $1 {{GENDER:$2|kakardi}}",
+       "logentry-newusers-autocreate": "Akun sang anganggé $1 {{GENDER:$2|kakardi}} otomatis",
        "logentry-protect-protect": "$1 {{GENDER:$2|nyaibin}} $3 $4",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngunggahang}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ngunggahang}} vèrsi anyar saking $3",
        "feedback-cancel": "Wangdé",
-       "feedback-message": "Séwalapatra:",
+       "feedback-message": "Séwala:",
        "searchsuggest-search": "Rereh ring {{SITENAME}}",
        "duration-days": "$1 {{PLURAL:$1|rahina}}",
        "pagelanguage": "Uah basa ring kaca",
index 19585c8..dcb06ae 100644 (file)
        "specialmute-success": "Вашыя налады заглушэньня былі абноўленыя. Глядзіце ўсіх заглушаных удзельнікаў на старонцы [[Special:Preferences|вашых наладаў]].",
        "specialmute-submit": "Пацьвердзіць",
        "specialmute-label-mute-email": "Заглушыць лісты электроннай пошты ад гэтага ўдзельніка",
-       "specialmute-header": "Калі ласка, абярыце вашыя налады заглушэньня для <b>{{BIDI:[[User:$1]]}}</b>.",
+       "specialmute-header": "Калі ласка, абярыце вашыя налады заглушэньня для {{GENDER:$1|ўдзельніка|ўдзельніцы}} <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "Запытанае імя ўдзельніка ня можа быць знойдзенае.",
-       "specialmute-email-footer": "Для кіраваньня наладамі электроннай пошты для {{BIDI:$2}}, калі ласка, наведайце <$1>.",
+       "specialmute-email-footer": "Для кіраваньня наладамі электроннай пошты {{GENDER:$1|ўдзельніка|ўдзельніцы}} {{BIDI:$2}}, калі ласка, наведайце <$1>.",
        "specialmute-login-required": "Калі ласка, увайдзіце, каб зьмяніць вашыя налады заглушэньня.",
        "mute-preferences": "Налады заглушэньня",
        "revid": "вэрсія $1",
index c356041..3132c1b 100644 (file)
        "search-interwiki-more": "(яшчэ)",
        "search-interwiki-more-results": "больш вынікаў",
        "search-relatedarticle": "Дачыняюцца*",
+       "search-invalid-sort-order": "Парадак сартавання ў $1 не распазнаны, будзе ўжыта сартаванне па змоўчанні. Правільныя запыты на сартаванне: $2",
        "searchrelated": "маюць дачыненне",
        "searchall": "усе",
        "showingresults": "Ніжэй паказаны да {{PLURAL:$1|'''$1''' выніку|'''$1''' вынікаў}}, пачынаючы з нумару '''$2'''.",
        "exbeforeblank": "змесціва перад ачысткаю было: '$1'",
        "delete-confirm": "Выдаліць \"$1\"",
        "delete-legend": "Выдаліць",
-       "historywarning": "<strong>Увага:</strong> Ð¡Ñ\82аÑ\80онка, Ñ\8fкÑ\83Ñ\8e Ð²Ñ\8b Ñ\85оÑ\87аÑ\86е Ð²Ñ\8bдалÑ\96Ñ\86Ñ\8c, Ð¼Ð°Ðµ Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e Ð· Ð¿Ñ\80Ñ\8bблÑ\96зна $1 {{PLURAL:$1|пÑ\80аÑ\9eкÑ\83|пÑ\80аÑ\9eкÑ\96|пÑ\80авак}}:",
+       "historywarning": "<strong>Увага:</strong> Ð¡Ñ\82аÑ\80онка, Ñ\8fкÑ\83Ñ\8e Ð²Ñ\8b Ñ\85оÑ\87аÑ\86е Ð²Ñ\8bдалÑ\96Ñ\86Ñ\8c, Ð¼Ð°Ðµ Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\8e Ð¿Ñ\80авак Ð· $1 {{PLURAL:$1|веÑ\80Ñ\81Ñ\96Ñ\8fй|веÑ\80Ñ\81Ñ\96Ñ\8fмÑ\96|веÑ\80Ñ\81Ñ\96Ñ\8fмÑ\96}}:",
        "historyaction-submit": "Паказаць",
        "confirmdeletetext": "Вы збіраецеся выдаліць старонку разам з усёй яе гісторыяй правак.\nПацвердзіце свой намер зрабіць гэта, сваё разуменне наступстваў, і што Вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|асноўнымі правіламі праекта]].",
        "actioncomplete": "Завершана аперацыя",
        "newimages-hidepatrolled": "Без паказу ўхваленых ўкладанняў",
        "newimages-mediatype": "Тып медиафайла:",
        "noimages": "Тут нічога няма.",
-       "gallery-slideshow-toggle": "Ð\9fеÑ\80еклÑ\8eÑ\87иÑ\82ь мініяцюры",
+       "gallery-slideshow-toggle": "Ð\9fеÑ\80аклÑ\8eÑ\87Ñ\8bÑ\86ь мініяцюры",
        "ilsubmit": "Знайсці",
        "bydate": "п. датаў",
        "sp-newimages-showfrom": "Паказаць новыя файлы, пачынаючы з $2, $1",
index 1a0775b..ed8ae16 100644 (file)
        "nocreate-loggedin": "Нямате необходимите права да създавате нови страници.",
        "sectioneditnotsupported-title": "Не се поддържа редактиране на раздели",
        "sectioneditnotsupported-text": "Не се поддържа редактиране на раздели на тази страница.",
+       "modeleditnotsupported-title": "Редактирането не се поддържа",
+       "modeleditnotsupported-text": "Редактирането не се поддържа за модел на съдържанието $1.",
        "permissionserrors": "Грешка при правата на достъп",
        "permissionserrorstext": "Нямате правата да извършите това действие по {{PLURAL:$1|следната причина|следните причини}}:",
        "permissionserrorstext-withaction": "Нямате разрешение за $2 поради {{PLURAL:$1|следната причина|следните причини}}:",
        "rcfilters-clear-all-filters": "Изчистване на всички филтри",
        "rcfilters-show-new-changes": "Преглед на промените направени след $1",
        "rcfilters-search-placeholder": "Филтриране на промените (използвайте менюто или търсете по име на филтър)",
+       "rcfilters-search-placeholder-mobile": "Филтри",
        "rcfilters-invalid-filter": "Невалиден филтър",
        "rcfilters-empty-filter": "Няма активни филтри. Показани са всички редакции.",
        "rcfilters-filterlist-title": "Филтри",
        "changecontentmodel": "Промяна на модела на съдържанието на страница",
        "changecontentmodel-legend": "Промяна на модела на съдържанието",
        "changecontentmodel-title-label": "Заглавие на страницата:",
+       "changecontentmodel-current-label": "Текущ модел на съдържанието:",
        "changecontentmodel-model-label": "Нов модел на съдържанието:",
        "changecontentmodel-reason-label": "Причина:",
        "changecontentmodel-submit": "Променяне",
        "mycontris": "Приноси",
        "anoncontribs": "Приноси",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
+       "contributions-subtitle": "За {{GENDER:$3|$1}}",
        "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "negative-namespace-not-supported": "Именни пространства с негативни стойности не се поддържат.",
        "nocontribs": "Не са намерени промени, отговарящи на критерия.",
        "permanentlink": "Постоянна препратка",
        "permanentlink-revid": "ID на редакцията",
        "permanentlink-submit": "Към редакцията",
+       "newsection": "Нов раздел",
+       "newsection-page": "Целева страница",
        "dberr-problems": "Съжаляваме! Сайтът изпитва технически затруднения.",
        "dberr-again": "Изчакайте няколко минути и опитайте да презаредите.",
        "dberr-info": "(Няма достъп до базата от данни: $1)",
index 224e4ae..c5274a3 100644 (file)
@@ -87,6 +87,7 @@
        "tog-useeditwarning": "কোনো সম্পাদনা পাতা ত্যাগের সময় পরিবর্তনগুলি সংরক্ষিত না হয়ে থাকলে আমাকে সাবধান করা হোক",
        "tog-prefershttps": "অ্যাকাউন্টে প্রবেশ করার সময় সবসময় নিরাপদ সংযোগ ব্যবহার করুন",
        "tog-showrollbackconfirmation": "একটি রোলব্যাক লিঙ্ক ক্লিক করার সময় একটি নিশ্চিতকরণ বার্তা দেখান",
+       "tog-requireemail": "পাসওয়ার্ড পুনঃস্থাপন করার জন্য ইমেল প্রয়োজন",
        "underline-always": "সব সময়",
        "underline-never": "কখনো নয়",
        "underline-default": "আবরণ বা ব্রাউজারে যেমনভাবে নির্দিষ্ট করা আছে",
        "undo-norev": "সম্পাদনাটি বাতিল করা যাচ্ছেনা কারণ এটি আর নেই বা মুছে ফেলা হয়েছে।",
        "undo-nochange": "সম্পাদনাটি পূর্বেই বাতিল করা হয়েছে।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]])-এর সম্পাদিত $1 নম্বর সংশোধনটি বাতিল করা হয়েছে",
+       "undo-summary-anon": "[[Special:Contributions/$2|$2]]-এর সম্পাদিত $1 নম্বর সংশোধনটি বাতিল করা হয়েছে",
        "undo-summary-username-hidden": "একজন লুকানো ব্যবহারকারীর করা $1 নং সংশোধনটি বাতিল করা হয়েছে",
        "cantcreateaccount-text": "[[User:$3|$3]] এই আইপি ঠিকানা('''$1''') থেকে অ্যাকাউন্ট সৃষ্টিতে বাধা দিয়েছেন।\n\n$3-এর দেয়া কারণ হল ''$2''",
        "cantcreateaccount-range-text": "[[User:$3|$3]] কর্তৃক আইপি ঠিকানার ব্যাপ্তি <strong>$1</strong>-এর মধ্যে অ্যাকাউন্ট তৈরি করা অবরুদ্ধ করা হয়েছে। যাতে আপনার আইপি ঠিকানাও (<strong>$4</strong>) রয়েছে। \n\n$3 কর্তৃক <em>$2</em> কারণ দেখানো হয়েছে।",
index e8c22b4..7975de7 100644 (file)
@@ -92,6 +92,7 @@
        "tog-useeditwarning": "Upozornit, když budu opouštět editaci bez uložení změn",
        "tog-prefershttps": "Po přihlášení vždy používat zabezpečené připojení",
        "tog-showrollbackconfirmation": "Při kliknutí na odkaz pro vrácení editace zobrazit žádost o potvrzení",
+       "tog-requireemail": "Pro obnovu hesla vyžadovat e-mail",
        "underline-always": "Vždy",
        "underline-never": "Nikdy",
        "underline-default": "Podle nastavení prohlížeče nebo vzhledu",
        "ipblocklist-legend": "Hledat zablokovaného uživatele",
        "blocklist-userblocks": "Skrýt zablokované účty",
        "blocklist-tempblocks": "Skrýt dočasná zablokování",
+       "blocklist-indefblocks": "Skrýt zablokování do odvolání",
        "blocklist-addressblocks": "Skrýt blokování jedné IP adresy",
        "blocklist-type": "Typ:",
        "blocklist-type-opt-all": "Vše",
index 08aaa49..d82e2c7 100644 (file)
        "tog-useeditwarning": "Warnen, sofern eine zur Bearbeitung geöffnete Seite verlassen wird, die nicht gespeicherte Änderungen enthält",
        "tog-prefershttps": "Immer eine sichere Verbindung benutzen, solange ich angemeldet bin",
        "tog-showrollbackconfirmation": "Bei Klick auf „kommentarlos zurücksetzen“ eine Sicherheitsabfrage anzeigen",
+       "tog-requireemail": "E-Mail-Adresse zum Zurücksetzen des Passworts erforderlich",
        "underline-always": "immer",
        "underline-never": "nie",
        "underline-default": "abhängig von der Benutzeroberfläche oder Browsereinstellung",
        "nocreate-loggedin": "Du hast nicht die erforderliche Berechtigung, um neue Seiten erstellen zu können.",
        "sectioneditnotsupported-title": "Die Bearbeitung von Abschnitten wird nicht unterstützt",
        "sectioneditnotsupported-text": "Die Bearbeitung von Abschnitten wird auf dieser Bearbeitungsseite nicht unterstützt.",
+       "modeleditnotsupported-title": "Bearbeiten nicht möglich",
+       "modeleditnotsupported-text": "Das Bearbeiten wird für Seiten des Inhaltsmodells $1 nicht unterstützt.",
        "permissionserrors": "Berechtigungsfehler",
        "permissionserrorstext": "Du bist nicht berechtigt, die Aktion auszuführen. {{PLURAL:$1|Grund|Gründe}}:",
        "permissionserrorstext-withaction": "Du bist aus {{PLURAL:$1|dem folgenden Grund|den folgenden Gründen}} nicht berechtigt, $2:",
        "content-model-css": "CSS",
        "content-json-empty-object": "Leeres Objekt",
        "content-json-empty-array": "Leeres Array",
+       "unsupported-content-model": "<strong>Warnung:</strong> Das Inhaltsmodell $1 wird auf diesem Wiki nicht unterstützt.",
+       "unsupported-content-diff": "Versionsvergleiche werden für Seiten des Inhaltsmodells $1 nicht unterstützt.",
+       "unsupported-content-diff2": "Versionsvergleiche zwischen den Inhaltsmodellen $1 und $2 werden auf diesem Wiki nicht unterstützt.",
        "deprecated-self-close-category": "Seiten, die ungültige selbstschließende HTML-Tags verwenden",
        "deprecated-self-close-category-desc": "Die Seite enthält ungültige selbstschließende HTML-Tags wie <code>&lt;b/></code> oder <code>&lt;span/></code>. Das Verhalten dieser Tags wird bald geändert, um mit der HTML5-Spezifikation konsistent zu sein, so dass ihre Verwendung im Wikitext veraltet ist.",
        "duplicate-args-warning": "<strong>Warnung:</strong> [[:$1]] ruft [[:$2]] mit mehr als einem Wert für den Parameter „$3“ auf. Nur der letzte angegebene Wert wird verwendet.",
        "undo-norev": "Die Bearbeitung konnte nicht rückgängig gemacht werden, da sie nicht vorhanden ist oder gelöscht wurde.",
        "undo-nochange": "Anscheinend wurde diese Bearbeitung bereits rückgängig gemacht.",
        "undo-summary": "Änderung $1 von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) rückgängig gemacht.",
+       "undo-summary-anon": "Änderung $1 von [[Special:Contributions/$2|$2]] rückgängig gemacht",
        "undo-summary-username-hidden": "Änderung $1 eines versteckten Benutzers rückgängig gemacht.",
        "cantcreateaccount-text": "Die Erstellung eines Benutzerkontos von der IP-Adresse '''($1)''' aus wurde durch [[User:$3|$3]] gesperrt.\n\nGrund der Sperre: ''$2''",
        "cantcreateaccount-range-text": "Das Erstellen von Benutzerkonten von IP-Adressen im Bereich <strong>$1</strong>, der deine IP-Adresse (<strong>$4</strong>) enthält, wurde von [[User:$3|$3]] gesperrt.\n\nDer angegebene Grund von $3 lautet: <em>$2</em>",
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.",
        "prefs-help-email-others": "Mit anderen Benutzern kannst du auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass du deine Identität offenlegen musst.",
        "prefs-help-email-required": "Es wird eine gültige E-Mail-Adresse benötigt.",
+       "prefs-help-requireemail": "Wird diese Option ausgewählt, werden nur dann E-Mails zum Zurücksetzen des Passworts versandt, wenn die Person beim Zurücksetzen den Benutzernamen und die E-Mail-Adresse dieses Kontos angegeben hat.",
        "prefs-info": "Basisinformationen",
        "prefs-i18n": "Sprache",
        "prefs-signature": "Signatur",
        "rcfilters-filter-showlinkedto-label": "Änderungen auf Seiten anzeigen, die verlinken auf",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Seiten</strong>, die <strong>auf</strong> die ausgewählte Seite <strong>verlinken</strong>",
        "rcfilters-target-page-placeholder": "Einen Seitennamen (oder eine Kategorie) eingeben",
+       "rcfilters-allcontents-label": "Alle Inhaltsseiten",
+       "rcfilters-alldiscussions-label": "Alle Diskussionsseiten",
        "rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Änderung|werden die Änderungen}} seit <strong>$3, $4</strong> (max. <strong>$1</strong> Einträge).",
        "rclistfromreset": "Datumsauswahl zurücksetzen",
        "rclistfrom": "Nur Änderungen seit $3, $2 Uhr zeigen.",
        "backend-fail-contenttype": "Der Inhaltstyp, der im Pfad „$1“ zu speichernden Datei, konnte nicht bestimmt werden.",
        "backend-fail-batchsize": "Der Datenbank wurde eine Stapelverarbeitungsdatei mit {{PLURAL:$1|einem Verarbeitungsschritt|$1 Verarbeitungsschritten}} übermittelt. Die zulässige Obergrenze liegt indes bei {{PLURAL:$2|einem Verarbeitungsschritt|$2 Verarbeitungsschritten}}.",
        "backend-fail-usable": "Die Datei „$1“ konnte entweder aufgrund eines nicht vorhandenen Verzeichnisses oder wegen unzureichender Berechtigungen weder abgerufen noch gespeichert werden.",
+       "backend-fail-stat": "Konnte den Status der Datei $1 nicht auslesen.",
+       "backend-fail-hash": "Konnte den kryptographischen Hash der Datei $1 nicht ermitteln.",
        "filejournal-fail-dbconnect": "Es konnte keine Verbindung zur Journaldatenbank des Datenbanksystems „$1“ hergestellt werden.",
        "filejournal-fail-dbquery": "Die Journaldatenbank des Datenbanksystems „$1“ konnte nicht aktualisiert werden.",
        "lockmanager-notlocked": "„$1“ konnte nicht entsperrt werden, da keine Sperrung besteht.",
        "alreadyrolled": "Das Zurücksetzen der Änderungen von [[User:$2|$2]] ([[User talk:$2|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) an [[:$1]] ist gescheitert, da bereits ein anderer Benutzer die Seite geändert hat.\n\nDie letzte Änderung stammt von [[User:$3|$3]] ([[User talk:$3|Diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Die Änderungszusammenfassung lautet: <em>$1</em>.",
        "revertpage": "Änderungen von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt",
+       "revertpage-anon": "Änderungen von [[Special:Contributions/$2|$2]] wurden auf die letzte Version von [[User:$1|$1]] zurückgesetzt",
        "revertpage-nouser": "Änderungen von einem versteckten Benutzer rückgängig gemacht und letzte Version von {{GENDER:$1|[[User:$1|$1]]}} wiederhergestellt",
        "rollback-success": "Die Änderungen von {{GENDER:$3|$1}} wurden rückgängig gemacht und die letzte Version von {{GENDER:$4|$2}} wurde wiederhergestellt.",
        "sessionfailure-title": "Sitzungsfehler",
        "sessionfailure": "Es gab ein Problem bei der Übertragung deiner Benutzerdaten.\nDiese Aktion wurde daher sicherheitshalber abgebrochen, um eine falsche Zuordnung deiner Änderungen zu einem anderen Benutzer zu verhindern.\nBitte sende das Formular erneut ab.",
        "changecontentmodel": "Inhaltsmodell einer Seite ändern",
        "changecontentmodel-legend": "Inhaltsmodell ändern",
-       "changecontentmodel-title-label": "Seitentitel",
+       "changecontentmodel-title-label": "Seitentitel:",
        "changecontentmodel-current-label": "Aktuelles Inhaltsmodell:",
-       "changecontentmodel-model-label": "Neues Inhaltsmodell",
+       "changecontentmodel-model-label": "Neues Inhaltsmodell:",
        "changecontentmodel-reason-label": "Grund:",
        "changecontentmodel-submit": "Ändern",
        "changecontentmodel-success-title": "Das Inhaltsmodell wurde geändert",
        "ipblocklist-legend": "Suche nach einem gesperrten Benutzer",
        "blocklist-userblocks": "Benutzersperren ausblenden",
        "blocklist-tempblocks": "Befristete Sperren ausblenden",
+       "blocklist-indefblocks": "Unbefristete Sperren ausblenden",
        "blocklist-addressblocks": "Sperren einzelner IP-Adressen ausblenden",
        "blocklist-type": "Typ:",
        "blocklist-type-opt-all": "Alle",
        "block-log-flags-angry-autoblock": "erweiterter Autoblock aktiviert",
        "block-log-flags-hiddenname": "Benutzername versteckt",
        "range_block_disabled": "Die Möglichkeit, ganze Adressräume zu sperren, ist nicht aktiviert.",
+       "ipb-prevent-user-talk-edit": "Das Bearbeiten der eigenen Diskussionsseite muss bei einer partiellen Sperre erlaubt bleiben, es sei denn, diese enthält Beschränkungen zum Benutzerdiskussions-Namensraum.",
        "ipb_expiry_invalid": "Die eingegebene Dauer ist ungültig.",
        "ipb_expiry_old": "Der Zeitpunkt des Ablaufs liegt in der Vergangenheit.",
        "ipb_expiry_temp": "Benutzernamens-Sperren mit der Verstecken-Option müssen permanent sein.",
        "move-page-legend": "Seite verschieben",
        "movepagetext": "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst.\nDer alte Titel wird danach zum neuen weiterleiten.\nDu kannst Weiterleitungen, die auf den Originaltitel verlinken, automatisch korrigieren lassen.\nStelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.\nDu bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird <strong>nicht</strong> verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, letztere ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.\n\n<strong>Hinweis:</strong>\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nDu solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.",
        "movepagetext-noredirectfixer": "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst.\nDer alte Titel wird danach zum neuen weiterleiten.\nStelle sicher, dass du im Anschluss alle [[Special:DoubleRedirects|doppelten]] oder [[Special:BrokenRedirects|defekten Weiterleitungen]] überprüfst.\nDu bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen.\n\nDie Seite wird <strong>nicht</strong> verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt, es sei denn, diese ist eine Weiterleitung ohne Versionsgeschichte.\nDies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.\n\n<strong>Hinweis:</strong>\nDie Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben.\nDu solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.",
+       "movepagetext-noredirectsupport": "Mit untenstehendem Formular kannst du eine Seite umbenennen, indem du sie mitsamt allen Versionen auf einen neuen Titel verschiebst. Du bist dafür verantwortlich, dass Links weiterhin auf das korrekte Ziel verweisen. \n\nDie Seite wird <strong>nicht</strong> verschoben, sofern es bereits eine Seite mit dem vorgesehenen Titel gibt. Dies bedeutet, dass du die Umbenennung rückgängig machen kannst, sofern du einen Fehler gemacht hast. Du kannst hingegen keine existierende Seite überschreiben.\n\n<strong>Hinweis:</strong> Die Verschiebung kann weitreichende und unerwartete Folgen für häufig besuchte Seiten haben. Du solltest daher die Konsequenzen verstanden haben, bevor du jetzt fortfährst.",
        "movepagetalktext": "Falls du dieses Kästchen aktivierst, wird die dazugehörige Diskussionsseite automatisch auf den neuen Titel verschoben, sofern nicht bereits eine nicht-leere Diskussionsseite dort vorhanden ist.\n\nIn diesem Fall musst du die Seite manuell verschieben oder zusammenführen, falls erforderlich.",
        "moveuserpage-warning": "<strong>Warnung:</strong> Du bist dabei, eine Benutzerseite zu verschieben. Bitte bedenke, dass dadurch nur die Benutzerseite verschoben, <em>nicht</em> aber der Benutzer umbenannt wird.",
        "movecategorypage-warning": "<strong>Warnung:</strong> Du bist gerade dabei, eine Kategorieseite zu verschieben. Bitte sei dir bewusst, dass nur die Seite verschoben wird. Alle der alten Kategorie zugeordneten Seiten werden <em>nicht</em> neu kategorisiert.",
        "lastmodifiedatby": "Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 bearbeitet.",
        "othercontribs": "Basierend auf der Arbeit von $1.",
        "others": "anderen",
-       "siteusers": "{{SITENAME}}-{{PLURAL:$2|{{GENDER:$1|Benutzer|Benutzerin}}|Benutzer}} $1",
-       "anonusers": "{{PLURAL:$2|unangemeldetem|unangemeldeten}} {{SITENAME}}-{{PLURAL:$2|Benutzer|Benutzern}} $1",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|Benutzer|Benutzerin}}|Benutzer}} $1",
+       "anonusers": "{{PLURAL:$2|unangemeldetem|unangemeldeten}} {{PLURAL:$2|Benutzer|Benutzern}} $1",
        "creditspage": "Seitenzuschreibung",
        "nocredits": "Für diese Seite sind keine Zuschreibungen vorhanden.",
        "spamprotectiontitle": "Spamschutzfilter",
        "linkaccounts": "Benutzerkonten verknüpfen",
        "linkaccounts-success-text": "Das Benutzerkonto wurde verknüpft.",
        "linkaccounts-submit": "Benutzerkonten verknüpfen",
+       "cannotunlink-no-provider-title": "Es gibt keine verbundenen Konten, die getrennt werden könnten.",
+       "cannotunlink-no-provider": "Es gibt keine verbundenen Konten, die getrennt werden könnten.",
        "unlinkaccounts": "Benutzerkonten trennen",
        "unlinkaccounts-success": "Das Benutzerkonto wurde getrennt.",
        "authenticationdatachange-ignored": "Die Änderung der Authentifizierungsdaten wurde nicht bearbeitet. Vielleicht wurde kein Anbieter konfiguriert?",
        "specialmute-label-mute-email": "E-Mails von diesem Benutzer stummschalten",
        "specialmute-header": "Bitte wähle deine Stummschaltungseinstellungen für Benutzer <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "Der gesuchte Benutzername konnte nicht gefunden werden.",
+       "specialmute-error-no-options": "Stummschaltungs-Funktionen sind nicht verfügbar. Gründe dafür könnten sein: du hast deine E-Mail-Adresse nicht bestätigt oder ein Administrator hat die E-Mail-Funktionen deaktiviert oder eine E-Mail-Blacklist in diesem Wiki eingerichtet.",
        "specialmute-email-footer": "Um deine E-Mail Einstellungen für Benutzer {{BIDI:$2}} zu verwalten besuche bitte <$1>.",
        "specialmute-login-required": "Bitte melde dich an um deine Stummschaltungseinstellungen zu ändern.",
+       "mute-preferences": "Stummschaltungs-Einstellungen",
        "revid": "Version $1",
        "pageid": "Seitenkennung $1",
        "interfaceadmin-info": "$1\n\nBerechtigungen für das Bearbeiten von wikiweiten CSS/JS/JSON-Dateien wurden kürzlich vom Recht <code>editinterface</code> getrennt. Falls du nicht verstehst, warum du diesen Fehler erhältst, siehe [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "Das Passwort kann nicht in der Liste der 100.000 am häufigsten verwendeten Passwörter sein.",
        "passwordpolicies-policyflag-forcechange": "muss bei der Anmeldung geändert werden",
        "passwordpolicies-policyflag-suggestchangeonlogin": "Änderung bei der Anmeldung vorschlagen",
+       "mycustomjsredirectprotected": "Du hast keine Berechtigung, diese JavaScript-Seite zu bearbeiten, da sie eine Weiterleitung, die nicht in deinen Benutzernamensraum zeigt, enthält.",
        "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert",
        "unprotected-js": "Aus Sicherheitsgründen kann JavaScript-Code nicht mehr von ungeschützten Seiten geladen werden. Erstelle die JavaScript-Seite bitte ausschließlich im Namensraum „MediaWiki“ oder als Benutzerunterseite.",
        "userlogout-continue": "Möchtest du dich abmelden?"
index bfed435..e875f19 100644 (file)
@@ -78,6 +78,7 @@
        "tog-norollbackdiff": "Peyser ardışi ra dıme ferqi measne",
        "tog-useeditwarning": "Wexto ke mı yew pela nizami be vurnayışanê nêqeydbiyayeyan caverdê, hay be mı ser de",
        "tog-prefershttps": "Ronışten akerden de tım greyo itimadın bıkarne",
+       "tog-requireemail": "Parolapeysernayene rê email lazımo",
        "underline-always": "Tım",
        "underline-never": "Qet",
        "underline-default": "Cild ya zi cı geyrayoğo hesebiyaye",
@@ -86,8 +87,8 @@
        "editfont-sansserif": "Fontê Sans-serifi",
        "editfont-serif": "Font (çêşıdê nuştey) Serif",
        "sunday": "Bazar",
-       "monday": "Bahdêbazari",
-       "tuesday": "Telete",
+       "monday": "Dışeme",
+       "tuesday": "Sêşeme",
        "wednesday": "Çarşeme",
        "thursday": "Pancşeme",
        "friday": "Êne",
        "fri": "Yen",
        "sat": "Şem",
        "january": "Çele",
-       "february": "Gucige",
+       "february": "Sıbate",
        "march": "Adar",
        "april": "Nisan",
-       "may_long": "Gulan",
+       "may_long": "Gulane",
        "june": "Heziran",
        "july": "Temuz",
        "august": "Tebaxe",
        "september": "Keşkelun",
-       "october": "Cıtmeng",
-       "november": "Kelverdan",
-       "december": "Gağan",
+       "october": "Tışrino Verên",
+       "november": "Tışrino Peyên",
+       "december": "Kanun",
        "january-gen": "Çele",
-       "february-gen": "Şıbat",
+       "february-gen": "Sıbate",
        "march-gen": "Mert",
        "april-gen": "Nisane",
        "may-gen": "Gulane",
        "july-gen": "Temuz",
        "august-gen": "Tebaxe",
        "september-gen": "Keşkelun",
-       "october-gen": "Cıtmeng",
-       "november-gen": "Kelverdan",
-       "december-gen": "Gağan",
+       "october-gen": "Tışrino Verên",
+       "november-gen": "Tışrino Peyên",
+       "december-gen": "Kanun",
        "jan": "Çel",
-       "feb": "Şbt",
+       "feb": "Sbt",
        "mar": "Adr",
        "apr": "Nsn",
        "may": "Gul",
        "nov": "Tşp",
        "dec": "Gğn",
        "january-date": "$1 Çele",
-       "february-date": "$1 Şıbat",
+       "february-date": "$1 Sıbate",
        "march-date": "$1 Adar",
        "april-date": "$1 Nisan",
-       "may-date": "$1 Gulan",
+       "may-date": "$1 Gulane",
        "june-date": "$1 Heziran",
        "july-date": "$1 Temuze",
        "august-date": "$1 Tebaxe",
        "september-date": "$1 Keşkelun",
        "october-date": "$1 Cıtmeng",
        "november-date": "$1 Kelverdan",
-       "december-date": "$1 Gağan",
+       "december-date": "$1 Kanun",
        "period-am": "VD",
        "period-pm": "BD",
-       "pagecategories": "{{PLURAL:$1|Kategori|Kategoriy}}",
+       "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriyi}}",
        "category_header": "Perrê kategoriya \"$1\"'i",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Dosye yê ke kategoriya \"$1\" dı",
        "category-file-count": "{{PLURAL:$2|Na kategori tenya dosya ya cêri muhtewa kena.|Na kategori de $2 ra pêro piya {{PLURAL:$1|1 dosya est a|$1 dosyey est ê}}.}}",
        "category-file-count-limited": "{{PLURAL:$1|Dosye|$1 Dosyey}} na kategori de yê.",
        "listingcontinuesabbrev": "dewam...",
-       "index-category": "Perrê rêzıni",
+       "index-category": "Pelê rêzıni",
        "noindex-category": "Perrê bêrêzıni",
        "broken-file-category": "Perri be linkanê dosya çewte",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Heqa",
        "article": "Pela zerreki",
        "newwindow": "(pençerey newey de beno a)",
-       "cancel": "İbtal",
+       "cancel": "Bıtexelne",
        "moredotdotdot": "Vêşi...",
        "morenotlisted": "Na lista qay kemi ya.",
-       "mypage": "Perr",
-       "mytalk": "Vaten",
-       "anontalk": "Vaten",
+       "mypage": "Pele",
+       "mytalk": "Werênayış",
+       "anontalk": "Werênayış",
        "navigation": "Pusula",
        "and": "&#32;u",
        "faq": "PVP",
        "printableversion": "Versiyono nustenaye",
        "permalink": "Gıreyo daimi",
        "print": "Bınustenê",
-       "view": "Bıvin",
+       "view": "Bıvêne",
        "view-foreign": "$1 de bıvin",
-       "edit": "Bıvurn",
+       "edit": "Bıvurne",
        "edit-local": "Şınasnayışê lokali bıvurne",
        "create": "Vıraz",
        "create-local": "Şınasnayışê lokali cı ke",
-       "delete": "Bestern",
+       "delete": "Bestere",
        "undelete_short": "{{PLURAL:$1|nê vırnayışi|$1 vırnayışa}} peyser bıyarê",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
        "protect": "Bışevekne",
        "protect_change": "bıvırne",
        "unprotect": "Starnayışi bıvurne",
        "newpage": "Perra newi",
-       "talkpagelinktext": "vaten",
+       "talkpagelinktext": "werênayış",
        "specialpage": "Pela xısusiye",
        "personaltools": "Hacetê şexsiy",
        "talk": "Vaten",
        "edithelp": "Peştdariya vurnayışi",
        "helppage-top-gethelp": "Peşti",
        "mainpage": "Perra Seri",
-       "mainpage-description": "Pera seri",
+       "mainpage-description": "Pela seri",
        "policy-url": "Project:Terzê hereketi",
        "portal": "Portalê cemati",
        "portal-url": "Project:Portalê cemati",
        "collapsible-collapse": "Teng ke",
        "collapsible-expand": "Hera kerê",
        "confirmable-confirm": "{{GENDER:$1|Şıma}} bêgumanê?",
-       "confirmable-yes": "E",
+       "confirmable-yes": "Eya",
        "confirmable-no": "Nê",
        "thisisdeleted": "Bıvêne ya zi $1 peyser biya?",
        "viewdeleted": "$1 bıvin?",
        "restorelink": "{{PLURAL:$1|jew vurnayış besteriya|$1 vurnayışi besteriyaye}}",
-       "feedlinks": "Resnayış:",
+       "feedlinks": "Weyiyekerdış:",
        "feed-invalid": "Qeydey cıresnayışê  beğşi nêvêreno.",
        "feed-unavailable": "Cıresnayışê şebekey çıniyê",
        "site-rss-feed": "$1 Cıresnayışê RSSi",
        "red-link-title": "$1 (pele çıniya)",
        "sort-descending": "Rêzkerdışo kêmbiyaye",
        "sort-ascending": "Rêzkerdışo zêdiyaye",
-       "nstab-main": "Perr",
+       "nstab-main": "Pele",
        "nstab-user": "Pera karberi",
        "nstab-media": "Pela medya",
-       "nstab-special": "Perra bağse",
+       "nstab-special": "Pela xısusiye",
        "nstab-project": "Perra procey",
        "nstab-image": "Dosya",
        "nstab-mediawiki": "Mesac",
        "nstab-template": "Şablon",
        "nstab-help": "Perra pasti",
-       "nstab-category": "Kategori",
+       "nstab-category": "Kategoriye",
        "mainpage-nstab": "Pera seri",
        "nosuchaction": "Fealiyeto wınasi çıniyo",
        "nosuchactiontext": "URL ra kar qebul nêbı.\nŞıma belka URL şaş nuşt, ya zi gıreyi şaş ra ameyi.\nKeyepelê {{SITENAME}} eşkeno xeta aşkera bıkero.",
        "badarticleerror": "Kar  ke şıma kenê, qebul nêbi.",
        "cannotdelete": "Pel  \"$1\" o ke şıma nişane kerd hewn a neşı.\nBelka yewna ten kerdo hewn a.",
        "cannotdelete-title": "Şıma nêşenê pela \"$1\" besterê",
-       "delete-hook-aborted": "Esterıtışi terefê çengeli ra ibtal bi.\nQet tesrih beyan nêbi.",
+       "delete-hook-aborted": "Esterıtışi terefê çengeli ra nêtexeliya.\nQet tesrih beyan nêbi.",
        "no-null-revision": "Qandé \"$1\" zew rewizyono newe névıraziya.",
        "badtitle": "Sernameyo xırabın",
        "badtitletext": "Sernameyê pela ke şıma waşt, nêvêrd, vengo ya zi zıwano miyanêno ğelet gırêdaye ya zi sernameyê wiki.\nBeno ke, tede yew ya zi zêdê işareti estê ke sernameyan de nêxebetiyenê.",
        "virus-scanfailed": "cıgerayiş tamam nêbı (kod $1)",
        "virus-unknownscanner": "antiviruso ke nêzanyeno:",
        "logouttext": "'''Henda şıma hesab ra veciyay.'''\n\nDiqat kerê ke tayê perri şenê hewna zey şıma kewtê ra cı bıasê, heta şıma ver-virê şanekerê (browserê) xo besterê.",
+       "logging-out-notify": "Şımayê cı ra veciyê, kerem kerê bıpawên.",
        "logout-failed": "Enewke ronıştışo nêracneyêno:$1",
        "cannotlogoutnow-title": "Enewke ronıştışo nêracneyêno",
        "cannotlogoutnow-text": "Gurenayışê $1i de veciyayış mımkın niyo.",
        "botpasswords-label-appid": "Nameyê boti:",
        "botpasswords-label-create": "Vıraze",
        "botpasswords-label-update": "Rocane ke",
-       "botpasswords-label-cancel": "İbtal",
-       "botpasswords-label-delete": "Bestern",
+       "botpasswords-label-cancel": "Bıtexelne",
+       "botpasswords-label-delete": "Bestere",
        "botpasswords-label-resetpassword": "Parola raçarne",
        "botpasswords-label-grants": "İmtıyazê ravêrdeyi:",
        "botpasswords-label-grants-column": "Dayen",
        "resetpass_forbidden-reason": "Parola nêvuriyena: $1",
        "resetpass-no-info": "şıma gani hesab akere u hona bıeşke bırese cı",
        "resetpass-submit-loggedin": "Parola bıvurne",
-       "resetpass-submit-cancel": "İbtal",
+       "resetpass-submit-cancel": "Bıtexelne",
        "resetpass-wrong-oldpass": "parolayo parola maqbul niyo.\nşıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.",
        "resetpass-recycled": "Parolaya şımaya newiye, wa paroloya şımaya verêne ra ciya bo.",
        "resetpass-temp-emailed": "E postaya rışyayê yubkoda şıma ronıştış akerdo.  Ronıştışi xo temammkerdışi rê yu parolaya newi lazım a",
        "rcfilters-watchlist-preference-label": "Mabeynrıyê non-JavaScript'i bıkarne",
        "rcfilters-filter-showlinkedfrom-label": "Gıreyê pelan ra vurnayışan bıvêne",
        "rcfilters-target-page-placeholder": "Yew nameyê pele (ya zi kategoriye) cı kerê",
+       "rcfilters-allcontents-label": "Zerrek pêro",
+       "rcfilters-alldiscussions-label": "Werênayışi pêro",
        "rcnotefrom": "Cêr de <strong>$2</strong> ra nata {{PLURAL:$5|vurnayışiyê}} asenê (tewr vêşi <strong>$1</strong> asenê) <strong>$3, $4</strong>",
        "rclistfromreset": "Weçinayışê tarixi ragoze",
        "rclistfrom": "$3 sehat $2 ra tepiya vurnayışanê neweyan bımotne",
        "sessionfailure": "cıkewtışê hesabê şıma de yew problem aseno;\nno kar semedê dızdiyê hesabi ibtal biyo.\nkerem kerê \"tepiya\" şiyerê u pel o ke şıma tera ameyî u o pel newe ra bar kerê , newe ra tesel/cereb kerê.",
        "changecontentmodel": "Modelê zerrekê pele bıvurne",
        "changecontentmodel-legend": "Modelê zerreki bıvurne",
-       "changecontentmodel-title-label": "Sernameyê pele",
+       "changecontentmodel-title-label": "Sernameyê pele:",
        "changecontentmodel-current-label": "Mewcud zerrekê modeli:",
-       "changecontentmodel-model-label": "Modelê zerrekiyo newe",
+       "changecontentmodel-model-label": "Modelê zerrekiyo newe:",
        "changecontentmodel-reason-label": "Sebeb:",
        "changecontentmodel-submit": "Bıvırne",
        "changecontentmodel-success-title": "Modelê zerreki vurriya",
        "undelete-search-title": "Bıgeyre pelanê eserıtiyan",
        "undelete-search-box": "bıgêr pelê hewn a biyayeyani",
        "undelete-search-prefix": "pel ê ke pê ney destpêkenî, ramocın",
+       "undelete-search-full": "Zerrekê sernameyanê pele bımocne:",
        "undelete-search-submit": "Cı geyre",
        "undelete-no-results": "Zerre arşîvê esterayîşî de peleyan match nibiyê.",
        "undelete-filename-mismatch": "Vurnayîşê ke pê wextê puli ye $1î nieşkenî biyare: nameyê dosyayî match nibeno",
        "sp-contributions-deleted": "iştırakê {{GENDER:$1|karberi}} esterdi",
        "sp-contributions-uploads": "Barkerdışi",
        "sp-contributions-logs": "qeydi",
-       "sp-contributions-talk": "vaten",
+       "sp-contributions-talk": "werênayış",
        "sp-contributions-userrights": "idareyê heqanê {{GENDER:$1|karberan}}",
        "sp-contributions-blocked-notice": "Eno karber/ena karbere emanet blokekerdeyo/blokekerdiya.\nCıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:",
        "sp-contributions-blocked-notice-anon": "Eno adresê IPi bloke biyo.\nCıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:",
        "sp-contributions-newonly": "Tenya vurnayışanê pelevıraştışi bımocne",
        "sp-contributions-hideminor": "Vurriyayışanê werdiyan bınımne",
        "sp-contributions-submit": "Cı geyre",
-       "whatlinkshere": "Gırey na perer",
+       "whatlinkshere": "Çı tiyayi rê gıre beno",
        "whatlinkshere-title": "Wesiqe da \"$1\" rê gıre dayen perri",
        "whatlinkshere-page": "Pele:",
        "linkshere": "Pera <strong>$2</strong> rê gıre dayen perri",
        "ipb-confirm": "Bloke kerdışi tesdik ke",
        "ipb-sitewide": "Site hemi de",
        "ipb-partial": "Qısmi",
+       "ipb-partial-help": "Peli ya zi nameyê cayanê spesifikan.",
        "ipb-pages-label": "Peli",
        "ipb-namespaces-label": "Heruna nameyan",
        "badipaddress": "Adresê IPî raşt niyo",
        "ipb-blocklist": "Blokî ke hama estê ey bivîne",
        "ipb-blocklist-contribs": "İştirakê {{GENDER:$1|$1}}`i",
        "ipb-blocklist-duration-left": "$1 vet",
+       "block-actions": "Hereketê kıliti:",
        "block-expiry": "Qedyayış:",
+       "block-options": "Weçinıtışê vêşi:",
        "block-prevent-edit": "Vurnayış",
        "block-reason": "Sebeb:",
        "block-target": "Nameyê karberi ya zi adresa eposteyi",
        "unblocked": "[[User:$1|$1]] blok biyo",
        "unblocked-range": "Blokey $1'i wederya",
        "unblocked-id": "Blokê $1î wedariyayo",
+       "unblocked-ip": "Kılitê [[Special:Contributions/$1|$1]] dariyo we.",
        "blocklist": "Karberê kılitbiyayey",
        "autoblocklist": "Blokeyê otomatiki",
        "autoblocklist-submit": "Cı geyre",
        "autoblocklist-legend": "Lista blokanê otomatikan",
        "autoblocklist-localblocks": "{{PLURAL:$1|otoblokoyo lokal|otoblokeyê lokali}}",
+       "autoblocklist-total-autoblocks": "Amarê kılitkerdışê xoseri pêro piya: $1",
        "autoblocklist-otherblocks": "{{PLURAL:$1|otobloqeyo bin|otobloqeyê bini}}",
        "ipblocklist": "Karberê kılitbiyayey",
        "ipblocklist-legend": "Karberê kılit biyayey bıvin",
        "javascripttest-qunit-intro": "Mediawiki.org dı [dokumanê $1] bıvinê.",
        "tooltip-pt-userpage": "Pela {{GENDER:|şımaya karberi}}",
        "tooltip-pt-anonuserpage": "pelê karberê IPyi",
-       "tooltip-pt-mytalk": "Pera {{GENDER:|şıma}}ya vaten",
+       "tooltip-pt-mytalk": "Pela {{GENDER:|toya}} werênayışi",
        "tooltip-pt-anontalk": "'''Ena adresa IP ra vurnayışa sero qal bıqerê'''",
        "tooltip-pt-preferences": "Tercihê {{GENDER:|şıma}}",
        "tooltip-pt-watchlist": "Listey peranê ke to gırotê seyr kerdış",
        "watchlistedit-clear-legend": "Lista serykerdışê pak kerê",
        "watchlistedit-clear-explain": "Listeya serykerdış da şıma dı sernamey pêro besteryay",
        "watchlistedit-clear-titles": "Sernamey:",
+       "watchlistedit-clear-done": "Lista seyrkerdişê şıma biya pak.",
        "watchlisttools-clear": "Lista serykerdışê xo pak kı",
        "watchlisttools-view": "Vurnayışanê elaqedaran bıvêne",
        "watchlisttools-edit": "Lista seyrkerdışi bıvêne û bıvurne",
        "permanentlink": "Gıreyo daimi",
        "permanentlink-revid": "Revizyonê IDyi",
        "permanentlink-submit": "Şo revizyoni",
+       "newsection": "Leteyo newe",
+       "newsection-page": "Etiketê pele",
+       "newsection-submit": "Şo be pele",
        "dberr-problems": "Mayê muxulêm! Ena sita dı newke xırabiya teknik esta.",
        "dberr-again": "Dı-rê deqiqeyi vınde û heni bar ke.",
        "dberr-info": "(Erzmelumati ra xızmetkari nêreseno: $1)",
index 9ea6ec5..28fee08 100644 (file)
@@ -37,7 +37,7 @@
        "tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरूको संख्या धेखाउन्या",
        "tog-oldsig": "तमरो अहिलको हस्ताक्षर:",
        "tog-fancysig": "मेरा दस्तखतलाई विकि पाठको रुपमी लिने (स्वत लिङ्क बिना)",
-       "tog-uselivepreview": "पà¥\8dरतà¥\8dयà¤\95à¥\8dष à¤ªà¥\88लà¥\8dलà¥\80à¤\95à¥\8bरà¥\81प à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97र",
+       "tog-uselivepreview": "पà¥\83षà¥\8dठ à¤ªà¥\81नरà¥\8dभरण à¤¨à¤\85रà¥\87à¤\87 à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न à¤§à¥\87à¤\95ाà¤\83",
        "tog-forceeditsummary": "खाली सम्पादन शीर्षक प्रविष्टि गरेपछा मलाई सोधन्या",
        "tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबठेई लुकाऊन्या",
        "tog-watchlisthidebots": "बोट सम्पादनहरू ध्यान सूचीबठेई लुकाउन्या",
@@ -53,6 +53,7 @@
        "tog-norollbackdiff": "पैलास्थितिमी फर्काएपछा भिन्नता हटाउन्या",
        "tog-useeditwarning": "सम्पादनहरू सङ्ग्रह नगरिएका अवस्थामी अर्को पानामी जान खोज्या चेतावनी धेखाउन्या",
        "tog-prefershttps": "प्रवेश गरन्ज्या जबलै सुरक्षित जडानको प्रयोग गर्न्या",
+       "tog-requireemail": "पासवर्ड पुनःचयन खिलाइ इमेल चायीन्छ",
        "underline-always": "जबलै",
        "underline-never": "कभैई नाई",
        "underline-default": "खोल और ब्राउजर निर्धारित",
        "index-category": "क्रमाङ्कित पानाहरू",
        "noindex-category": "अनुक्रमित नअरियाऽ पन्नाअन",
        "broken-file-category": "टुटेको फाइल लिङ्कहरूसितको पाना",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "बारेमी",
        "article": "सामाग्री पानो",
        "newwindow": "(नौलो विन्डोमी खुलन्छ)",
        "returnto": "$1 मी फर्क।",
        "tagline": "{{SITENAME}} बठेइ",
        "help": "मद्दत",
+       "help-mediawiki": "मिडियाविकि का बारेमी मद्दत",
        "search": "खोजी",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "खोज:",
        "redirectto": "पठाएको पाना:",
        "lastmodifiedat": "यै पन्नालाई छाड्डीबार $1मी $2 बजे सम्पादन गरियाऽ थ्यो।",
        "viewcount": "यो पाना हेरियाको थियो {{PLURAL:$1|एकपटक|$1 पटक}}",
-       "protectedpage": "सà¥\81रà¤\95à¥\8dषित à¤\97रà¥\8dयाà¤\95ा à¤ªà¤¾à¤¨à¤¾à¤¹à¤°à¥\82",
+       "protectedpage": "सà¥\81रà¤\95à¥\8dषित à¤\97रियाà¤\95ा à¤ªà¤¨à¥\8dनाà¤\85न",
        "jumpto": "यैमी फट्टाक:",
        "jumptonavigation": "भ्रमण गरऽ",
        "jumptosearch": "खोजऽ",
        "view-pool-error": "माफ गर्या , अहिल सर्भरहरूमी कामको भार भौत रह्या छ।\nभौत भौत प्रयोगकर्ताहरू यै पाना हेद्या प्रयास गरी रह्या छन्।\nकृपया यो पाना पुन: हेर्नु अगाडि थोक्कै पख ।\n\n$1",
        "generic-pool-error": "माफ गर्या , अहिल सर्भरहरूमी कामको भार भौत रह्या छ।\nभौत भौत प्रयोगकर्ताहरू यै पाना हेद्या प्रयास गरी रह्या छन् ।\nकृपया यो पाना पुन: हेर्नु अगाडि थोक्कै पख ।",
-       "pool-timeout": "समय à¤¸à¤\95ियà¥\8b à¤¬à¤¨à¥\8dद à¤\97रà¥\8dनà¥\87 à¤ªà¥\8dरतà¥\80à¤\95à¥\8dषामी",
-       "pool-queuefull": "पà¥\8dरतà¥\80क्षा पङ्क्ति भरियो",
+       "pool-timeout": "बनà¥\8dद à¤\97दà¥\8dदाà¤\87 à¤¸à¤®à¤¯à¤¸à¥\80मा à¤¸à¤\95à¥\80नà¥\8dया à¤ªà¥\8dरतिà¤\95à¥\8dषा मी",
+       "pool-queuefull": "पà¥\8dरतिक्षा पङ्क्ति भरियो",
        "pool-errorunknown": "अज्ञात गल्ती",
        "pool-servererror": "पुल काउन्टर सेवा उपलब्ध नाइथिन् ($1)।",
        "poolcounter-usage-error": "प्रयोग गल्ती:$1",
        "versionrequired": "MediaWiki संस्करण $1 चाईन्या",
        "versionrequiredtext": "ये पाना प्रयोग गर्नका लागि MediaWiki $1 संस्करण चाहिन्छ ।\nहेर  [[Special:Version|version page]]",
        "ok": "भयो",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": " \"$1\" बठे निकालियाऽ",
        "youhavenewmessages": "{{PLURAL:$3|तम सित छन}} $1 ($2)।",
        "youhavenewmessagesfromusers": "{{PLURAL:$3|अर्खा प्रयोगकर्ता|$3 प्रयोगकर्ताअन}} ($2) मी है {{PLURAL:$4|तम सित}} $1 छन।",
        "site-atom-feed": "$1 एटम फीड",
        "page-rss-feed": "\"$1\" आरएसएस फिड",
        "page-atom-feed": "\"$1\" एटम फिड",
+       "feed-rss": "आरएसएस",
        "red-link-title": "$1 (पन्ना उपलब्ध नाइँथिन)",
        "sort-descending": "अवरोहण क्रममी मिलाउन्या",
        "sort-ascending": "आरोहण क्रममी मिलाउन्या",
        "badarticleerror": "यो कार्य यै पनामी गर्न नाईंमिल्लो।",
        "cannotdelete": "\"$1\" पाना वा फाइल मेट्ट सकिएन।\nयो पैल्लीबठे मेटियाको हुनु पडन्छ।",
        "cannotdelete-title": "पाना  \"$1\" लाई मेट्टू सकिएन",
+       "delete-scheduled": "$1 पन्ना मेटौनाइ खिलाइ समय निर्धारित अरीरैछ।\nकृपया धीरज राखः।",
        "delete-hook-aborted": "हुकले सम्पादनकार्य बन्द गरिदियो ।\nकोइ कारण दिइएन ।",
        "no-null-revision": "$1 पाना लागि खालि पुनरावलोकन सिर्जना गर्न सकिएन",
        "badtitle": "गलत शीर्षक",
        "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन अद्दु नाइँ सकिनो।",
        "titleprotected": "[[User:$1|$1]]द्वारा ये शीर्षक निर्माणहुनबठे जोगाइया छ।\nकारण <em>$2</em> हो ।",
        "filereadonlyerror": "\"$1\" फाइललाई परिवर्तन अद्दु नाइँ सकिनो क्याईकि फाइल भण्डार \"$2\" केवल पड्ड्या स्थिति (read-only mode)मी छ।\n\nयेलाई सुरक्षित अद्द्या प्रवन्धकले यो कारण दीराइछ: ''$3''।",
+       "invalidtitle": "अमान्य शीर्षक",
        "invalidtitle-knownnamespace": "\"$2\" नाउँबार रे \"$3\" पाठ भया: अमान्य शीर्षक",
        "invalidtitle-unknownnamespace": "अपछ्याणो नाउँबार अङ्क $1 रे पाठ \"$2\" भया: अमान्य शीर्षक",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
        "virus-scanfailed": "जँचाई असफल(कोड $1)",
        "virus-unknownscanner": "थानभया एन्टीभाइरस:",
        "logouttext": "<strong>तमी अहिल बाहिर निस्क्याका  छौ।</strong>\n\nयाद राख्या तमीले ब्राउजरको क्याच खालि नगर्यासम्म कुनै पानाहरूमी तमी अझैं प्रवेश गरिरख्याको धेकाउन सक्छ।",
+       "logging-out-notify": "तम लगआउट हुन्नाछः, पख्याः हाँ।",
+       "logout-failed": "अइल लगआउट नाइहोइसकियो: $1",
        "cannotlogoutnow-title": "अईल भाईर निकल्ल नाइँ पाईनो",
        "cannotlogoutnow-text": "भाईर निकल्ल असंभव छ जब प्रयोग $1",
        "welcomeuser": "$1स्वागत छ!",
        "mailmypassword": "पासवर्ड पूर्वनिर्धारित गर",
        "passwordremindertitle": "{{SITENAME}}का लागि नयाँ अस्थायी पासवर्ड",
        "passwordremindertext": "कसैले (सायद तमी, IP ठेगाना $1 बाट), {{SITENAME}}($4) को लागि नौलो पासवर्ड अनुरोध गर्या छ । प्रयोगकर्ता \"$2\" को लागि नौलो अस्थायी पासवर्ड \"$3\"तयार पारिया छ । यदि यो तमरो इच्छामी भयाको भया अहिले तमीले लगइन गरीबर नौलो पासवर्ड छान्नु पड्ड्या हुन्छ ।\nतमरो अस्थायी पासवर्ड  {{PLURAL:$5|एक दिन|$5 दिनहरू पछि}} अमान्य हुन्याछ ।\n\nयदि कोही अरुले नै अनुरोध गर्याको हो भण्या , या तमीले आफ्नो पासवर्ड सम्झ्यौ भण्या, अथवा\nत्यैलाई परिवर्तन गर्न चाहन्नौ भण्या, तमीले यो सन्देसको वेवास्ता गद्दसक्द्याहौ र पुरानै पासवर्ड प्रयोग गरिरहन सक्द्याहौ ।",
+       "noemailcreate": "तम ले मान्य इमेल ठिगाना दिन आवश्यक छ।",
        "blocked-mailpassword": "तमरा IP ठेगानालाई सम्पादन गद्द बठे रोक लाइराइछ। दुरुपयोग रोक्दाइ, तमरा IP ठेगाना बठेइ प्रवेसशब्द पुनर्लाभ प्रक्रिया प्रयोग अद्द्या अनुमति आथिन।",
        "mailerror": " चिठी :$1 पठाउँदा गल्ती भयो",
        "noemailprefs": "निम्न सुविधाहरू राम्डरी काम गद्दको लागि तमरो रोजाईमी आफ्नो ई-मेल ठेगाना खुलाओ ।",
        "anoneditwarning": "<strong>चेतावनी:</strong> तमले प्रवेश अरेको नाइथिन । तमरो आइपि ठेगाना पाना सम्पादन इतिहासमि दर्ता गरिन्या छ र यो सब्बैले हेद्द सक्कान । यदि तमलाईँ <strong>[$1 लगईन]</strong> वा <strong>[$2 नयाँ खाता बनाउन्या] गर्याभण्या तमबठे गरियाको सम्पादन तमरो प्रयोगकर्तानाममि जोडिन्याछ ।",
        "missingsummary": "'''यादगर्या :''' तमीले सम्पादन सारांश दियाका छैनौ ।\nयदि तमीले \"$1\"  थिच्यौ भण्या , सारांश बिना नै सङ्ग्रहित गरिन्या छ ।",
        "selfredirect": "<strong>चेतावनी:</strong> तम यै पानालाई आफुमी पुनः निर्देशित गद्द लाग्याछौ ।\nहुनसक्छ तम अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गद्द लाग्याछौ, वा गलत पानाको सम्पादन गद्द लाग्याछौ ।\nतम पुनः एकपल्ट \"$1\" क्लिक गद्दाछौ, पुनः निर्देशित तसै लै बनाइन्याछ।",
-       "missingcommenttext": "à¤\95à¥\83पया à¤¤à¤²à¤¤à¤¿à¤° à¤\9fिपà¥\8dपणà¥\80 à¤°à¤¾à¤\96 ।",
+       "missingcommenttext": "à¤\95à¥\83पया à¤\9fिपà¥\8dपणà¥\80 à¤°à¤¾à¤\96à¤\83।",
        "missingcommentheader": "'''याद गर :''' तमले टिप्पणीमी विषय /शीर्ष पंक्ति  दियाका छैनौ ।\nतमले फेरि \"$1\"  थिच्यौ भण्या , तमरो सम्पादन यसै रुपमी संग्रहित हुन्याछ ।",
        "summary-preview": "सम्पादन सारांशोः पूर्वालोकन:",
        "subject-preview": "विषयोः पूर्वरुप:",
        "page_first": "पैल्लो",
        "page_last": "छाड्डीबारको",
        "histlegend": "अन्तर चयन:संशोधनहरूको तुलनाको लागि रेडियो बाकसमी क्लिक गरिबर इण्टर गर अथवा तल दियाको बटनमी थिच <br />\nलिजेंड: (चालू): '''({{int:cur}})''' = अवतरणको बीचमी अन्तर, '''({{int:last}})''' = पैल्लीका अवतरणको बीचमी अन्तर, '''{{int:minoreditletter}}''' = नानो परिवर्तन।",
-       "history-fieldset-title": "सà¤\82शà¥\8bधनà¤\85न à¤\96िलाà¤\87 à¤\96à¥\8bà¤\9cऽ",
+       "history-fieldset-title": "सà¤\82शà¥\8bधनà¤\85न à¤\9bानà¤\83",
        "history-show-deleted": "संशोधन मेटियाको मात्तरै",
        "histfirst": "सबहै पुरानो",
        "histlast": "नयाँ",
        "historysize": "({{PLURAL:$1|१ अक्षर|$1 अक्षरहरू}})",
-       "historyempty": "(खाली)",
+       "historyempty": "खालि",
        "history-feed-title": "पुनरावलोकन इतिहास",
        "history-feed-description": "विकीमा यो पानको पुनरावलोकन इतिहास",
        "history-feed-item-nocomment": "$1  $2मी",
        "rev-deleted-user": "(प्रयोगकर्ता नाम हटाइयो)",
        "rev-deleted-event": "(लग विवरण हटाइयो)",
        "rev-suppressed-text-unhide": "यै पानाको पुनरावलोकन '''दमन''' गरियाको छ ।\nविस्तृत जानकारी [{{fullurl:{{#Special:Log}}/delete|पानो={{FULLPAGENAMEE}}}} दमन लग] पाउन सकिन्छ ।\nयदि तम अगाडि बढ्ड चाहन्छौ भण्या पनि तमीले  [$1 यि संशोधनहरू हेद्द] पाउन्या हौ ।",
-       "rev-delundel": "दधà¥\87à¤\96ाà¤\89नà¥\87/लà¥\81à¤\95ाà¤\89नà¥\8dया",
+       "rev-delundel": "दà¥\83शà¥\8dयता à¤¬à¤¦à¥\87लà¤\83",
        "rev-showdeleted": "धेकाउन्या",
        "revisiondelete": "पुनरावलोकनअन मेट्याऽ/मेट्याऽ रद्द अद्द्या",
        "revdelete-nooldid-title": "अमान्य पुनरावलोकन लक्ष",
        "prefs-editwatchlist-clear": "तमरो अवलोकनसूची मेटा",
        "prefs-watchlist-days": "ध्यान सूचीमी धेकाउने दिनहरू:",
        "prefs-watchlist-days-max": "बर्ती है बर्ती $1 {{PLURAL:$1|दिन|दिनअन}}",
-       "prefs-watchlist-edits": "à¤\89à¤\9aà¥\8dà¤\9aतम à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¸à¤\82à¤\96à¥\8dया à¤¬à¤¢à¤¾à¤\87à¤\8fà¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80मà¥\80  à¤§à¤\95ाà¤\89नà¤\95ा à¤²à¤¾à¤\97ि :",
+       "prefs-watchlist-edits": "à¤\85वलà¥\8bà¤\95नसà¥\82à¤\9aà¥\80 à¤®à¥\80 à¤§à¥\87à¤\95à¥\8cना à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¤\85न à¤\95à¥\8b à¤\89à¤\9aà¥\8dà¤\9aतम à¤¸à¤\82à¤\96à¥\8dया:",
        "prefs-watchlist-edits-max": "सबै है ज्यादा संख्या : १०००",
        "prefs-watchlist-token": "अवलोकन सूची टोकन:",
        "prefs-misc": "साधारण",
        "timezoneregion-europe": "युरोप",
        "timezoneregion-indian": "हिन्द महासागर",
        "timezoneregion-pacific": "प्राशान्त महासागर",
-       "allowemail": "à¤\94र à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताबठà¥\87 à¤ªà¥\8cनà¥\8dया à¤\88मà¥\87ल à¤¸à¤\95à¥\8dषम à¤\97र।",
+       "allowemail": "à¤\94र à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\85न à¤²à¤¾à¤\87 à¤®à¥\81à¤\87 à¤²à¤¾à¤\87 à¤\88मà¥\87ल à¤ªà¤ à¥\8cनà¥\87à¤\87 à¤\85नà¥\81मति à¤¦à¤¿à¤¯",
        "prefs-searchoptions": "खोज",
        "prefs-namespaces": "नामठौर:",
        "default": "पूर्वनिर्धारित",
        "prefs-files": "फाइलहरू",
        "prefs-custom-css": "अनुकुलित CSS",
        "prefs-custom-js": "अनुकुल जाभास्क्रिप्ट",
-       "prefs-common-config": "साà¤\9dा CSS/à¤\9cाभा à¤¸à¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤¸à¤¬à¥\88 à¤\95ि à¤²à¥\87à¤\96ा:",
+       "prefs-common-config": "सबà¥\88 à¤\96à¥\8bलà¤\85न à¤\96िलाà¤\87 à¤¸à¤¾à¤\9dा à¤¸à¥\80à¤\8fसà¤\8fस/à¤\9cà¥\87सन/à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f:",
        "prefs-reset-intro": "तम ये पृष्ठलाई आफनो अभिरुचीहरू साइट पूर्वावस्थामी फर्काउनत फर्काउन प्रयोग गद्दु सकन्छौ । तै पाछा ये लाई रद्द गद्दु सकन्छौ ।",
        "prefs-emailconfirm-label": "इ-मेल एकिन प्रक्रिया:",
        "youremail": "ईमेल",
        "grouppage-bureaucrat": "{{ns:project}}:प्रशासकअन",
        "grouppage-suppress": "{{ns:project}}:लुकौन्या",
        "right-read": "पृष्ठहरू पढ",
-       "right-edit": "पà¥\83षà¥\8dठहरà¥\82 à¤¸à¤®à¥\8dपादन à¤\97र",
+       "right-edit": "पनà¥\8dनाà¤\85न à¤¸à¤®à¥\8dपादन à¤\97रà¤\83",
        "right-createpage": "पृष्ठ निर्माण गर(छलफल पृष्ठहरू बाहेक)",
        "right-createtalk": "छलफल पृष्ठ सृजना गर",
        "right-createaccount": "नयाँ प्रयोगकर्ता खाता सृजना गर।",
        "right-reupload-own": "आफैले अपलोड  गरया रई आया फाइल अधिलेखन गर्न्या",
        "right-reupload-shared": "साझा मिडिया भण्डारमी स्थानियरुपमी फाइलहरू अधिक्रमण गर्न्या",
        "right-upload_by_url": "URL बठे फाइल उर्ध्वभरण गर्ने",
-       "right-purge": "साà¤\87à¤\9fà¤\95à¥\8b à¤\95à¥\8dयाश( cache) à¤¨à¤¿à¤¶à¥\8dà¤\9aित à¤¨à¤\97रिà¤\95नà¥\88 à¤ªà¤°à¥\8dà¤\9c(Purge) à¤\97रà¥\8dनà¥\87",
+       "right-purge": "यà¥\87à¤\87 à¤ªà¤¨à¥\8dना à¤\95à¥\8b à¤¸à¤¾à¤\87à¤\9f à¤\95à¥\8dयाश(cache) à¤ªà¤°à¥\8dà¤\9c(Purge) à¤\97रà¤\83",
        "right-writeapi": "लेखन API प्रयोग गद्य्या",
        "right-delete": "पृष्ठहरू मेट्ने",
        "right-bigdelete": "लामो इतिहास भयाका पानाहरू मेट्ट्या",
        "right-userrights-interwiki": "अन्य विकिहरूमी प्रयोगकर्ताहरूको अधिकार सम्पादन गद्या",
        "right-override-export-depth": "गहिराइ ५ सम्म लिंक गरियाका पानाहरू सहित निर्यात गद्या",
        "right-sendemail": "अन्य प्रयोगकर्तानलाई इमेल पठाउन्या",
-       "grant-editmycssjs": "तमरो प्रयोगकर्ता CSS/JavaScript सम्पादन गरऽ",
-       "grant-editmyoptions": "तमरा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤\85भिरà¥\81à¤\9aà¥\80à¤\87नलाà¤\88 à¤¸à¤®à¥\8dपादन à¤\97रऽ",
+       "grant-editmycssjs": "तमरो प्रयोगकर्ता CSS/JSON/JavaScript सम्पादन गरः",
+       "grant-editmyoptions": "तमरा à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤\85भिरà¥\81à¤\9aिà¤\87न à¤°à¥\87 à¤\9cà¥\87सन(JSON) à¤®à¤¿à¤²à¤¾à¤¨ à¤¸à¤®à¥\8dपादन à¤\97रà¤\83",
        "grant-editmywatchlist": "तमरो अवलोकनसूची सम्पादन गर",
        "grant-editpage": "भैरया पृष्ठहरू सम्पादन गर",
        "grant-editprotected": "सुरक्षित पृष्ठ सम्पादन",
        "recentchanges-legend-heading": "<strong>आदर्श वाक्य:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नौला पानाको सूची]] यैलाई लै हेरिदिय)",
        "rcfilters-savedqueries-rename": "पुनर्नामकरण",
-       "rcfilters-savedqueries-remove": "हà¤\9fाऽ",
+       "rcfilters-savedqueries-remove": "मà¥\87à¤\9fà¤\83",
        "rcfilters-savedqueries-new-name-label": "नाउँ",
        "rcfilters-savedqueries-cancel-label": "रद्द",
        "rcfilters-filter-editsbyself-label": "तम हताँ अरियाऽ फेरबदेलाअन",
        "rcfilters-filter-editsbyother-label": "अउर हताँ अरियाऽ फेरबदेलाअन",
        "rcfilters-filter-editsbyother-description": "तमरा आफ्फुनाइ बाहेक अउर सप्पै फेरबदेलाअन।",
        "rcfilters-filtergroup-lastrevision": "छाड्डीबारोः संशोधन",
-       "rcfilters-filter-lastrevision-label": "à¤\9bाडà¥\8dडà¥\80बारà¥\8bà¤\83 संशोधन",
+       "rcfilters-filter-lastrevision-label": "सबहà¥\88 à¤¨à¥\8cलà¥\8b संशोधन",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउन्या",
        "rcshowhideminor": "$1 सानतिनो सम्पादन",
        "rcshowhideminor-show": "धेकाइदिय",
        "filehist-comment": "टिप्पणी",
        "imagelinks": "फाइल उपयोग",
        "linkstoimage": "यै चित्रमी निम्न{{PLURAL:$1|पाना जोडिनान{{PLURAL:$1|}}|$1 पानाहरू जोडिनान्}}:",
-       "nolinkstoimage": "यà¥\8b à¤\9aितà¥\8dरसित à¤²à¤¿à¤\82à¤\95भयाà¤\95ि à¤\95à¥\8bà¤\87 à¤ªà¤¾à¤¨à¤¾ à¤¨à¤¾à¤\87थà¥\80",
+       "nolinkstoimage": "यà¥\87à¤\87 à¤«à¤¾à¤\87ल à¤ªà¥\8dरयà¥\8bà¤\97 à¤­à¤¯à¤¾à¤\83 à¤\95à¥\8bà¤\87 à¤²à¥\88 à¤ªà¤¨à¥\8dना à¤¨à¤¾à¤\87थिन।",
        "morelinkstoimage": "यै फाइलको [[Special:WhatLinksHere/$1|थप लिंकहरू]] हेर ।",
        "sharedupload-desc-here": "यो फाइल $1 बठे हो र और  परियोजनाहरू बठे पन प्रयोग गद्द सकिन्याछ । \nताखाइ यैको [$2 फ़ाइल विवरण पानो]मि रयाका विवरण तल्तिर दियाको छ।",
        "filepage-nofile": "येइ नाउँ को कोइ लै फाइल नाइथिन।",
        "tooltip-rollback": "\"पूर्वरुप\" ले यो पानाक्क सम्पादन(हरू) खारेज अरिबरे पानालाई एक क्लिकमि पाछाडीको सम्पादनमि पुगाइदिन्छ ।",
        "tooltip-undo": "\"रद्द\"ले पछिल्लो सम्पादन खारेज गरिबरे पूर्वावलोकनमा धेकाउछ ।\nयैले सारांशमा कारण राख्ख दिन्याछ।",
        "tooltip-summary": "नानो सारांश हालिदिय",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|प्रयोगकर्ता}}|प्रयोगकर्ताअन}} $1",
        "anonusers": "{{SITENAME}} का नाम नभयाका {{PLURAL:$2| प्रयोगकर्ता|प्रयोगकर्ताहरू}} $1",
        "simpleantispam-label": "ऐन्टी-स्प्याम जाँच।\nयैलाई <strong>नाइँ</strong> भद्य्या!",
        "pageinfo-title": "\"$1\" खिलाइ जानकारी",
        "imgmultipagenext": "अर्खो पन्ना →",
        "imgmultigo": "जाऽ!",
        "imgmultigoto": "$1 पन्ना मैं जाऽ",
-       "size-bytes": "$1 अक्षरहरू",
+       "size-bytes": "$1 {{PLURAL:$1|बाइट|बाइटअन}}",
        "size-kilobytes": "$1 किलोबाइट",
        "size-megabytes": "$1 मेगाबाइट",
        "size-gigabytes": "$1 गिगाबाइट",
index 82826c5..f5af2c5 100644 (file)
        "createaccountmail": "Use a temporary random password and send it to the specified email address",
        "createaccountmail-help": "Can be used to create account for another person without learning the password.",
        "createacct-realname": "Real name (optional)",
-       "createacct-reason": "Reason",
+       "createacct-reason": "Reason (publicly logged)",
        "createacct-reason-ph": "Why you are creating another account",
        "createacct-reason-help": "Message shown in the account creation log",
        "createacct-imgcaptcha-help": "",
index 3eea40f..73b2b7b 100644 (file)
                        "Servien"
                ]
        },
-       "exif-imagewidth": "Wiedte",
-       "exif-imagelength": "Heugte",
+       "exif-imagewidth": "Wydde",
+       "exif-imagelength": "Höygde",
        "exif-bitspersample": "Bits per komponent",
-       "exif-compression": "Kompressiemethode",
-       "exif-photometricinterpretation": "Beeldpuntsamenstelling",
-       "exif-orientation": "Oriëntasie",
-       "exif-samplesperpixel": "Antal compenenten",
-       "exif-planarconfiguration": "Gegevensstructuur",
+       "exif-compression": "Kompressymetode",
+       "exif-photometricinterpretation": "Bealdpuntsamenstelling",
+       "exif-orientation": "Orientaty",
+       "exif-samplesperpixel": "Antal kompenenten",
+       "exif-planarconfiguration": "Gegeavensstruktuur",
        "exif-ycbcrsubsampling": "Subsamplingsverhouwige van Y tot C",
-       "exif-ycbcrpositioning": "Y- en C-posisionering",
-       "exif-xresolution": "Horizontale resolusie",
-       "exif-yresolution": "Verticale resolusie",
-       "exif-stripoffsets": "Lokasie aofbeeldingsgegevens",
-       "exif-rowsperstrip": "Riejen per strip",
-       "exif-stripbytecounts": "Bytes per ekomprimeerden strip",
-       "exif-jpeginterchangeformat": "Aofstaand tot JPEG SOI",
-       "exif-jpeginterchangeformatlength": "Bytes van JPEG-gegevens",
+       "exif-ycbcrpositioning": "Y- en C-positionering",
+       "exif-xresolution": "Horizontale resoluty",
+       "exif-yresolution": "Vertikale resoluty",
+       "exif-stripoffsets": "Lokaty afbealdingsgegeavens",
+       "exif-rowsperstrip": "Rygen per strip",
+       "exif-stripbytecounts": "Bytes per komprimeerde strip",
+       "exif-jpeginterchangeformat": "Afstand tot JPEG SOI",
+       "exif-jpeginterchangeformatlength": "Bytes van JPEG-gegeavens",
        "exif-whitepoint": "Witpuntchromaticiteit",
-       "exif-primarychromaticities": "Chromasiteit van primaere kleuren",
-       "exif-ycbcrcoefficients": "Transformasiematrixkoëfficiënten veur de kleurruumte",
-       "exif-referenceblackwhite": "Referensieweerden veur zwart/wit",
-       "exif-datetime": "Tiedstip van digitalisasie",
-       "exif-imagedescription": "Aofbeeldingnaam",
+       "exif-primarychromaticities": "Chromaciteit van primäre klören",
+       "exif-ycbcrcoefficients": "Transformatymatrixkoefficienten vöär de klöörruumde",
+       "exif-referenceblackwhite": "Referensywaerden vöär swart/wit",
+       "exif-datetime": "Tydstip van digitalisaty",
+       "exif-imagedescription": "Afbealdingname",
        "exif-make": "Kameramark",
        "exif-model": "Kameramodel",
-       "exif-software": "Programmatuur die gebruukt wörden",
-       "exif-artist": "Eschreven deur",
-       "exif-copyright": "Auteursrechtenhouwer",
-       "exif-exifversion": "Exif-versie",
-       "exif-flashpixversion": "Ondersteunden Flashpix-versie",
-       "exif-colorspace": "Kleurruumte",
-       "exif-componentsconfiguration": "Betekenisse van elk compenent",
-       "exif-compressedbitsperpixel": "Beeldkompressiemethode",
-       "exif-pixelxdimension": "Aofbeeldingsbreedte",
-       "exif-pixelydimension": "Aofbeeldingsheugte",
-       "exif-usercomment": "Opmarkingen",
-       "exif-relatedsoundfile": "Biebeheurend geluudsbestaand",
-       "exif-datetimeoriginal": "Tiedstip van datagenerasie",
-       "exif-datetimedigitized": "Tiedstip van digitalisasie",
-       "exif-subsectime": "Subseconden tiedstip bestaandswieziging",
-       "exif-subsectimeoriginal": "Subseconden tiedstip datagenerasie",
-       "exif-subsectimedigitized": "Subseconden tiedstip digitalisasie",
-       "exif-exposuretime": "Belochtingstied",
+       "exif-software": "Programmatuur dee bruked wördt",
+       "exif-artist": "Autöör",
+       "exif-copyright": "Autöörsrechtenholder",
+       "exif-exifversion": "Exif-versy",
+       "exif-flashpixversion": "Understöände Flashpix-versy",
+       "exif-colorspace": "Klöörruumde",
+       "exif-componentsconfiguration": "Beteykenisse van elk kompenent",
+       "exif-compressedbitsperpixel": "Bealdkompressymetode",
+       "exif-pixelxdimension": "Afbealdingsbreydde",
+       "exif-pixelydimension": "Afbealdingshöygde",
+       "exif-usercomment": "Upmarkingen",
+       "exif-relatedsoundfile": "Bybehöyrend gelüüdsbestand",
+       "exif-datetimeoriginal": "Tydstip van datageneraty",
+       "exif-datetimedigitized": "Tydstip van digitalisaty",
+       "exif-subsectime": "Subsekonden tydstip bestandswysiging",
+       "exif-subsectimeoriginal": "Subsekonden tydstip datageneraty",
+       "exif-subsectimedigitized": "Subsekonden tydstip digitalisaty",
+       "exif-exposuretime": "Belichtingstyd",
        "exif-exposuretime-format": "$1 sek ($2)",
        "exif-fnumber": "F-getal",
-       "exif-exposureprogram": "Belochtingsprogramma",
-       "exif-spectralsensitivity": "Spektrale geveuligheid",
-       "exif-isospeedratings": "ISO-weerde.",
+       "exif-exposureprogram": "Belichtingsprogramma",
+       "exif-spectralsensitivity": "Spektrale gevöligheid",
+       "exif-isospeedratings": "ISO-waerde",
        "exif-shutterspeedvalue": "Slutersnelheid in APEX",
        "exif-aperturevalue": "Diafragma in APEX",
        "exif-brightnessvalue": "Helderheid in APEX",
-       "exif-exposurebiasvalue": "Belochtingscompensasie",
-       "exif-maxaperturevalue": "Maximale diafragmaweerde van de lenze",
-       "exif-subjectdistance": "Aofstaand tot onderwarp",
-       "exif-meteringmode": "Methode lochmeting",
-       "exif-lightsource": "Lochbron",
+       "exif-exposurebiasvalue": "Belichtingskompensaty",
+       "exif-maxaperturevalue": "Maksimale diafragma-oapening",
+       "exif-subjectdistance": "Afstand tot underwarp",
+       "exif-meteringmode": "Metode lichtmeating",
+       "exif-lightsource": "Lichtbron",
        "exif-flash": "Flitser",
-       "exif-focallength": "Braandpuntofstand",
-       "exif-subjectarea": "Objektruumte",
-       "exif-flashenergy": "Flitserstarkte",
-       "exif-focalplanexresolution": "X-resolusie van CDD",
-       "exif-focalplaneyresolution": "Y-resolusie van CCD",
-       "exif-focalplaneresolutionunit": "Eenheid CCD-resolusie",
-       "exif-subjectlocation": "Objeklokasie",
-       "exif-exposureindex": "Belochtingsindex",
-       "exif-sensingmethod": "Meetmethode",
-       "exif-filesource": "Bestaandsnaam op de hardeschieve",
-       "exif-scenetype": "Scènetype",
-       "exif-customrendered": "An-epassen beeldbewarking",
-       "exif-exposuremode": "Belochtingsinstelling",
+       "exif-focallength": "Brandpuntafstand",
+       "exif-subjectarea": "Objektruumde",
+       "exif-flashenergy": "Flitserstarkde",
+       "exif-focalplanexresolution": "Sensorresoluty horizontaal",
+       "exif-focalplaneyresolution": "Sensorresoluty vertikaal",
+       "exif-focalplaneresolutionunit": "Eynheid CCD-resoluty",
+       "exif-subjectlocation": "Objektlokaty",
+       "exif-exposureindex": "Belichtingsindeks",
+       "exif-sensingmethod": "Meatmetode",
+       "exif-filesource": "Bestandsbron",
+       "exif-scenetype": "Scenetype",
+       "exif-customrendered": "Anpasde bealdverwarking",
+       "exif-exposuremode": "Belichtingsinstelling",
        "exif-whitebalance": "Witbalans",
-       "exif-digitalzoomratio": "Digitale zoomfactor",
-       "exif-focallengthin35mmfilm": "Braandpuntaofstaand (35mm-equivalent)",
-       "exif-scenecapturetype": "Soort opname",
-       "exif-gaincontrol": "Piekbeheersing",
+       "exif-digitalzoomratio": "Digitale zoomfaktor",
+       "exif-focallengthin35mmfilm": "Brandpuntafstand (35mm-ekwivalent)",
+       "exif-scenecapturetype": "Soort upnåme",
+       "exif-gaincontrol": "Pykbeheyrsing",
        "exif-contrast": "Kontrast",
-       "exif-saturation": "Verzaojiging",
-       "exif-sharpness": "Scharpte",
-       "exif-devicesettingdescription": "Umschrieving apperaotinstellingen",
-       "exif-subjectdistancerange": "Aofstaandskategorie",
-       "exif-imageuniqueid": "Unieke ID-aofbeelding",
-       "exif-gpsversionid": "GPS-versienummer",
-       "exif-gpslatituderef": "Noorder- of zujerbreedte",
-       "exif-gpslatitude": "Breedte",
-       "exif-gpslongituderef": "Ooster- of westerlengte",
-       "exif-gpslongitude": "Lengtegraod",
-       "exif-gpsaltituderef": "Heugtereferensie",
-       "exif-gpsaltitude": "Heugte",
-       "exif-gpstimestamp": "GPS-tied (atoomklokke)",
-       "exif-gpssatellites": "Satellieten die gebruuk bin veur de meting",
-       "exif-gpsstatus": "Ontvangerstaotus",
-       "exif-gpsmeasuremode": "Meetmodus",
-       "exif-gpsdop": "Meetpresisie",
-       "exif-gpsspeedref": "Snelheidseenheid",
-       "exif-gpsspeed": "Snelheid van GPS-ontvanger",
-       "exif-gpstrackref": "Referensie veur bewegingsrichting",
-       "exif-gpstrack": "Bewegingsrichting",
-       "exif-gpsimgdirectionref": "Referensie veur aofbeeldingsrichting",
-       "exif-gpsimgdirection": "Aofbeeldingsrichtige",
-       "exif-gpsmapdatum": "Geodetiese onderzeuksgegevens die gebruukt bin",
-       "exif-gpsdestlatituderef": "Referensie veur breedtegraod tot bestemming",
-       "exif-gpsdestlatitude": "Breedtegraod bestemming",
-       "exif-gpsdestlongituderef": "Referensie veur lengtegraod bestemming",
-       "exif-gpsdestlongitude": "Lengtegraod bestemming",
-       "exif-gpsdestbearingref": "Referensie veur richting naor bestemming",
-       "exif-gpsdestbearing": "Richting naor bestemming",
-       "exif-gpsdestdistanceref": "Referensie veur aofstaand tot bestemming",
-       "exif-gpsdestdistance": "Aofstaand tot bestemming",
-       "exif-gpsprocessingmethod": "Naam van de GPS-verwarkingsmethode",
-       "exif-gpsareainformation": "Naam van t GPS-gebied",
-       "exif-gpsdatestamp": "GPS-daotum",
-       "exif-gpsdifferential": "Differensiële GPS-korreksie",
-       "exif-jpegfilecomment": "Opmarking bie JPEG-bestaand",
+       "exif-saturation": "Versådiging",
+       "exif-sharpness": "Skarpde",
+       "exif-devicesettingdescription": "Ümskryving apparaatinstellingen",
+       "exif-subjectdistancerange": "Bereik objektafstand",
+       "exif-imageuniqueid": "Unike ID-afbealding",
+       "exif-gpsversionid": "GPS-versynummer",
+       "exif-gpslatituderef": "Noorder- of süderbreydde",
+       "exif-gpslatitude": "Breydde",
+       "exif-gpslongituderef": "Ouster- of westerlängde",
+       "exif-gpslongitude": "Längdegråd",
+       "exif-gpsaltituderef": "Höygdereferensy",
+       "exif-gpsaltitude": "Höygde",
+       "exif-gpstimestamp": "GPS-tyd (atoomklokke)",
+       "exif-gpssatellites": "Satelliten dee bruked binnet vöär de meating",
+       "exif-gpsstatus": "Untvangerståtus",
+       "exif-gpsmeasuremode": "Meatmodus",
+       "exif-gpsdop": "Meatprecisy",
+       "exif-gpsspeedref": "Snelheid eynheid",
+       "exif-gpsspeed": "Snelheid van GPS-untvanger",
+       "exif-gpstrackref": "Referensy vöär beweagingsrichting",
+       "exif-gpstrack": "Beweagingsrichting",
+       "exif-gpsimgdirectionref": "Referensy vöär afbealdingsrichting",
+       "exif-gpsimgdirection": "Afbealdingsrichting",
+       "exif-gpsmapdatum": "Geodetiske undersööksgegeavens dee bruked binnet",
+       "exif-gpsdestlatituderef": "Referensy vöär breyddegråd tot bestemming",
+       "exif-gpsdestlatitude": "Breyddegråd bestemming",
+       "exif-gpsdestlongituderef": "Referensy vöär längdegråd bestemming",
+       "exif-gpsdestlongitude": "Längdegråd bestemming",
+       "exif-gpsdestbearingref": "Referensy vöär richting nå bestemming",
+       "exif-gpsdestbearing": "Richting nå bestemming",
+       "exif-gpsdestdistanceref": "Referensy vöär afstand tot bestemming",
+       "exif-gpsdestdistance": "Afstand tot bestemming",
+       "exif-gpsprocessingmethod": "Name van de GPS-verwarkingsmetode",
+       "exif-gpsareainformation": "Name van et GPS-gebeed",
+       "exif-gpsdatestamp": "GPS-dåtum",
+       "exif-gpsdifferential": "Differentiele GPS-korrekty",
+       "exif-jpegfilecomment": "Upmarking by JPEG-bestand",
        "exif-keywords": "Trefwoorden",
-       "exif-worldregioncreated": "Regio in de wereld waor de aofbeelding emaakt is",
-       "exif-countrycreated": "Laand waor de aofbeelding emaakt is",
-       "exif-countrycodecreated": "Kode veur t laand waor de aofbeelding emaakt is",
-       "exif-provinceorstatecreated": "Provinsie of staot waor de aofbeelding emaakt is",
-       "exif-citycreated": "Plaotse waor de aofbeelding emaakt is",
-       "exif-sublocationcreated": "Wiek van de plaotse waor de aofbeelding emaakt is",
-       "exif-worldregiondest": "Weeregeven wereldregio",
-       "exif-countrydest": "Weeregeven laand",
-       "exif-countrycodedest": "Kode veur t weeregeven laand",
-       "exif-provinceorstatedest": "Weeregeven provinsie of staot",
-       "exif-citydest": "Weeregeven plaotse",
-       "exif-sublocationdest": "Weeregeven wiek in plaotse",
-       "exif-objectname": "Korte naam",
-       "exif-specialinstructions": "Spesiale instruksies",
-       "exif-headline": "Kopjen",
-       "exif-credit": "Krediet/leverancier",
+       "exif-worldregioncreated": "Regio in de wearld wår de afbealding maked is",
+       "exif-countrycreated": "Land wår de afbealding maked is",
+       "exif-countrycodecreated": "Kode vöär et land wår de afbealding maked is",
+       "exif-provinceorstatecreated": "Provinsy of ståt wår de afbealding maked is",
+       "exif-citycreated": "Plaatse wår de afbealding maked is",
+       "exif-sublocationcreated": "Wyk van de plaatse wår de afbealding maked is",
+       "exif-worldregiondest": "Weadergeaven wearldregio",
+       "exif-countrydest": "Weadergeaven land",
+       "exif-countrycodedest": "Kode vöär et weadergeaven land",
+       "exif-provinceorstatedest": "Weadergeaven provinsy of ståt",
+       "exif-citydest": "Weadergeaven plaatse",
+       "exif-sublocationdest": "Weadergeaven wyk in plaatse",
+       "exif-objectname": "Korte name",
+       "exif-specialinstructions": "Speciale instruktys",
+       "exif-headline": "Upskrivt",
+       "exif-credit": "Kredit/leaveransyr",
        "exif-source": "Bron",
-       "exif-editstatus": "Bewarkingsstaotus van de aofbeelding",
-       "exif-urgency": "Urgensie",
-       "exif-fixtureidentifier": "Groepsnaam",
-       "exif-locationdest": "Weeregeven lokasie",
-       "exif-locationdestcode": "Kode veur de weeregeven lokasie",
-       "exif-objectcycle": "Tied van de dag waor de media veur bedoeld is",
-       "exif-contact": "Kontaktgegevens",
-       "exif-writer": "Schriever",
-       "exif-languagecode": "Taal",
-       "exif-iimversion": "IIM-versie",
-       "exif-iimcategory": "Kategorie",
-       "exif-iimsupplementalcategory": "Anvullende kategorieën",
-       "exif-datetimeexpires": "Niet te gebruken nao",
-       "exif-datetimereleased": "Uutebröcht op",
-       "exif-originaltransmissionref": "Oorspronkelike taaklokasiekode",
+       "exif-editstatus": "Bewarkingsståtus van de afbealding",
+       "exif-urgency": "Urgensy",
+       "exif-fixtureidentifier": "Grupsname",
+       "exif-locationdest": "Weadergeaven lokaty",
+       "exif-locationdestcode": "Kode vöär de weadergeaven lokaty",
+       "exif-objectcycle": "Tyd van de dag wår de media vöär bedoold is",
+       "exif-contact": "Kontaktgegeavens",
+       "exif-writer": "Skryver",
+       "exif-languagecode": "Språke",
+       "exif-iimversion": "IIM-versy",
+       "exif-iimcategory": "Kategory",
+       "exif-iimsupplementalcategory": "Anvüllende kategoryen",
+       "exif-datetimeexpires": "Neet te bruken nå",
+       "exif-datetimereleased": "Uutbröcht up",
+       "exif-originaltransmissionref": "Oorsprungelike språklokatykode",
        "exif-identifier": "ID",
-       "exif-lens": "Lenze die gebruukt wörden",
-       "exif-serialnumber": "Serienummer van de camera",
-       "exif-cameraownername": "Eigenaar van camera",
+       "exif-lens": "Brukede lense",
+       "exif-serialnumber": "Serynummer van de kamera",
+       "exif-cameraownername": "Eigenaar van kamera",
        "exif-label": "Etiket",
-       "exif-datetimemetadata": "Daotum waorop de metadata veur t lest bie-ewörken bin",
-       "exif-nickname": "Informele naam van de aofbeelding",
-       "exif-rating": "Werdering (op n schaole van 5)",
-       "exif-rightscertificate": "Rechtenbeheercertificaot",
-       "exif-copyrighted": "Auteursrechtstaotus",
-       "exif-copyrightowner": "Auteursrechtenhouwer",
-       "exif-usageterms": "Gebruuksveurweerden",
-       "exif-webstatement": "Internetauteursrechverklaoring",
-       "exif-originaldocumentid": "Uniek ID van t originele dokument",
-       "exif-licenseurl": "Webadres veur auteursrechlisensie",
-       "exif-morepermissionsurl": "Alternatieve lisensiegegevens",
-       "exif-attributionurl": "Gebruuk de volgende verwiezing bie hergebruuk van dit wark",
-       "exif-preferredattributionname": "Gebruuk de volgende makersvermelding bie hergebruuk van dit wark",
+       "exif-datetimemetadata": "Dåtum wårup de metadata vöär et lätst bywarked is",
+       "exif-nickname": "Informele name van de afbealding",
+       "exif-rating": "Wardering (up en skale van 5)",
+       "exif-rightscertificate": "Rechtenbeheyrcertifikaat",
+       "exif-copyrighted": "Autöörsrechtenståtus",
+       "exif-copyrightowner": "Autöörsrechtenholder",
+       "exif-usageterms": "Bruuksbeding",
+       "exif-webstatement": "Binnennetse autöörsrechtenverklåring",
+       "exif-originaldocumentid": "Unik ID van et originele dokument",
+       "exif-licenseurl": "Webadres vöär autöörsrechtenlicensy",
+       "exif-morepermissionsurl": "Alternative licensygegeavens",
+       "exif-attributionurl": "Bruuk de volgende verwysing as dit wark herbruked wördt",
+       "exif-preferredattributionname": "Bruuk de volgende makersvermelding as dit wark herbruked wördt",
        "exif-pngfilecomment": "Opmarking bie PNG-bestaand",
        "exif-disclaimer": "Vöärbehold",
        "exif-contentwarning": "Waorschuwing over inhoud",
index 44e3c94..fdc959c 100644 (file)
        "exif-scenetype-1": "Директно фотографисана слика",
        "exif-customrendered-0": "Нормалан процес",
        "exif-customrendered-1": "Нестандардан процес",
+       "exif-customrendered-2": "HDR (није оригинално сачувано)",
+       "exif-customrendered-3": "HDR (оригинал сачуван)",
+       "exif-customrendered-4": "Оригинал (за HDR)",
+       "exif-customrendered-6": "Панорама",
+       "exif-customrendered-7": "HDR портрет",
+       "exif-customrendered-8": "Портрет",
        "exif-exposuremode-0": "Аутоматска експозиција",
        "exif-exposuremode-1": "Ручна експозиција",
        "exif-exposuremode-2": "Аутоматски са задатим распоном",
index 994b1e1..2869768 100644 (file)
        "logentry-partialblock-block-page": "{{PLURAL:$1|sivua|sivuja}} $2",
        "logentry-partialblock-block-ns": "{{PLURAL:$1|nimiavaruutta|nimiavaruuksia}} $2",
        "logentry-partialblock-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} muokkaamasta $7. Eston kesto on $5 $6",
-       "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia estäen muokkausten tekemisen $7. Eston kesto on $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia niin, että hän ei voi muokata $7. Eston kesto on $5 $6",
        "logentry-non-editing-block-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} suorittamasta määrättyjä toimenpiteitä (lukuun ottamatta muokkaamista). Eston kesto on $5 $6",
        "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} toimintaeston asetuksia, jotka koskevat määrättyjä toimenpiteitä. Eston kesto on $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
index 3d0e385..6c5d8b5 100644 (file)
        "createaccountmail": "Utiliser un mot de passe aléatoire temporaire et l’envoyer à l’adresse de courriel spécifiée",
        "createaccountmail-help": "Peut être utilisé pour créer un compte pour une autre personne sans connaître le mot de passe.",
        "createacct-realname": "Nom réel (facultatif)",
-       "createacct-reason": "Motif",
+       "createacct-reason": "Motif (connecté publiquement)",
        "createacct-reason-ph": "Pourquoi créez-vous un autre compte",
        "createacct-reason-help": "Message affiché dans le journal de création de compte",
        "createacct-submit": "Créez votre compte",
        "noname": "Vous n’avez pas saisi un nom d’utilisateur valide.",
        "loginsuccesstitle": "Connecté",
        "loginsuccess": "<strong>Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».</strong>",
-       "nosuchuser": "L’utilisateur « $1 » n’existe pas.\nLes noms d’utilisateur sont sensibles à la casse.\nVérifiez l’orthographe, ou [[Special:CreateAccount|créez un nouveau compte]].",
+       "nosuchuser": "L’utilisateur « $1 » n’existe pas.\nLes noms d’utilisateur sont sensibles à la casse.\nVérifiez l’orthographe ou [[Special:CreateAccount|créez un nouveau compte]].",
        "nosuchusershort": "Il n’y a pas de contributeur avec le nom « $1 ».\nVeuillez vérifier l’orthographe.",
        "nouserspecified": "Vous devez saisir un nom d’utilisateur.",
        "login-userblocked": "{{GENDER:$1|Cet utilisateur|Cette utilisatrice}} est bloqué{{GENDER:$1||e}}. La connexion n’est pas autorisée.",
        "password-login-forbidden": "L’utilisation de ce nom d’utilisateur ou de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "passwordremindertitle": "Nouveau mot de passe temporaire pour {{SITENAME}}",
-       "passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et défini comme « $3 ». Si c’était bien votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande, ou si vous vous avez retrouvé votre mot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message\net continuer à utiliser votre ancien mot de passe.",
+       "passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de passe\npour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et défini comme « $3 ». Si c’était bien votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande ou si vous vous avez retrouvé votre\nmot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message et\ncontinuer à utiliser votre ancien mot de passe.",
        "noemail": "Aucune adresse de courriel n’a été enregistrée pour l’utilisat{{GENDER:$1|eur|rice}} « $1 ».",
        "noemailcreate": "Vous devez fournir une adresse de courriel valide",
        "passwordsent": "Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisat{{GENDER:$1|eur|rice}} « $1 ».\nVeuillez vous reconnecter après l’avoir reçu.",
        "userpage-userdoesnotexist": "Le compte utilisateur « <nowiki>$1</nowiki> » n’est pas enregistré. Veuillez vérifier que vous voulez créer cette page.",
        "userpage-userdoesnotexist-view": "Le compte utilisateur « $1 » n'est pas enregistré.",
        "blocked-notice-logextract": "Cet utilisateur est actuellement bloqué.\nLa dernière entrée du journal des blocages est affichée ci-dessous pour référence :",
-       "clearyourcache": "<strong>Note :</strong> après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.\n* <strong>Firefox / Safari :</strong> maintenez la touche <em>Maj</em> (<em>Shift</em>) en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac) \n* <strong>Google Chrome :</strong> appuyez sur <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> sur un Mac) \n* <strong>Internet Explorer :</strong> maintenez la touche <em>Ctrl</em> en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em> \n* <strong>Opera :</strong> allez dans <em>Menu → Settings</em> (<em>Opera → Préférences</em> sur un Mac) et ensuite à <em>Confidentialité & sécurité → Effacer les données d’exploration → Images et fichiers en cache</em>.",
+       "clearyourcache": "<strong>Note :</strong> après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.\n* <strong>Firefox / Safari :</strong> maintenez la touche <em>Maj</em> (<em>Shift</em>) en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac).\n* <strong>Google Chrome :</strong> appuyez sur <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> sur un Mac).\n* <strong>Internet Explorer :</strong> maintenez la touche <em>Ctrl</em> en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em>.\n* <strong>Opera :</strong> allez dans <em>Menu → Settings</em> (<em>Opera → Préférences</em> sur un Mac) et ensuite à <em>Confidentialité et sécurité → Effacer les données d’exploration → Images et fichiers en cache</em>.",
        "usercssyoucanpreview": "<strong>Astuce :</strong> utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille CSS avant de l’enregistrer.",
        "userjsonyoucanpreview": "<strong>Conseil :</strong> utilisez le bouton « {{int:showpreview}} » pour tester votre nouveau JSON avant enregistrement.",
        "userjsyoucanpreview": "<strong>Astuce :</strong> utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille JavaScript avant de l’enregistrer.",
-       "usercsspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser votre propre feuille CSS. \nElle n’a pas encore été enregistrée !</strong>",
+       "usercsspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser votre propre feuille CSS.\nElle n’a pas encore été enregistrée !</strong>",
        "userjsonpreview": "<strong>Rappelez-vous que vous êtes seulement en train de tester/voir un aperçu de votre configuration utilisateur JSON.\nElle n’a pas encore été enregistrée !</strong>",
-       "userjspreview": "<strong>Rappelez-vous que vous ne faites que visualiser ou tester votre code JavaScript.\nIl n’a pas encore été enregistré !</strong>",
-       "sitecsspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser cette feuille de style. \nElle n’a pas encore été enregistrée !</strong>",
+       "userjspreview": "<strong>Rappelez-vous que vous ne faites que visualiser ou tester votre code JavaScript.\nIl n’a pas encore été enregistré!</strong>",
+       "sitecsspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser cette feuille de style. \nElle n’a pas encore été enregistrée!</strong>",
        "sitejsonpreview": "<strong>Souvenez-vous que vous ne faites que regarder un aperçu de cette configuration JSON.\nElle n’a pas encore été enregistrée !</strong>",
-       "sitejspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser ce code JavaScript. \nIl n’a pas encore été enregistré !</strong>",
-       "userinvalidconfigtitle": "<strong>Attention :</strong> il n’existe pas d’habillage « $1 ».\nLes pages personnelles avec extensions .css, .json et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/vector.css et non {{ns:user}}:Foo/Vector.css.",
+       "sitejspreview": "<strong>Rappelez-vous que vous ne faites que prévisualiser ce code JavaScript.\nIl n’a pas encore été enregistré !</strong>",
+       "userinvalidconfigtitle": "<strong>Attention :</strong> il n’existe pas d’habillage « $1 ».\nLes pages personnelles avec extensions .css, .json et .js utilisent des titres en minuscules, par exemple <tt>{{ns:user}}:Foo/vector.css</tt> et non <tt>{{ns:user}}:Foo/Vector.css</tt>.",
        "updated": "(Mis à jour)",
        "note": "<strong>Note :</strong>",
        "previewnote": "<strong>Rappelez-vous que ce n’est qu’une prévisualisation.</strong>\nVos modifications n’ont pas encore été enregistrées !",
        "continue-editing": "Aller à la zone de modification",
        "previewconflict": "Cette prévisualisation montre le texte de la boîte supérieure de modification tel qu’il apparaîtra si vous choisissez de le publier.",
-       "session_fail_preview": "Désolé, nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.\n\nVous avez peut-être été déconnecté. <strong>Veuillez vérifier que vous êtes toujours connecté et réessayer.</strong>\nSi cela échoue de nouveau, essayez en vous [[Special:UserLogout|déconnectant]], puis en vous reconnectant, et vérifiez que votre navigateur accepte les témoins (''cookies'') de ce site.",
+       "session_fail_preview": "Désolé, nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.\n\nVous avez peut-être été déconnecté. <strong>Veuillez vérifier que vous êtes toujours connecté et réessayer.</strong>\nSi cela échoue de nouveau, essayez en vous [[Special:UserLogout|déconnectant]] puis en vous reconnectant. Vérifiez également que votre navigateur accepte les témoins (''cookies'') de ce site.",
        "session_fail_preview_html": "Désolé, nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.\n\n<em>Parce que {{SITENAME}} a activé le HTML brut, la prévisualisation est masquée afin de prévenir les attaques par JavaScript.</em>\n\n<strong>Si la tentative de modification est légitime, veuillez réessayer.</strong>\nSi cela échoue de nouveau, [[Special:UserLogout|déconnectez-vous]], puis reconnectez-vous, et vérifiez que votre navigateur accepte les témoins (''cookies'') de ce site.",
        "token_suffix_mismatch": "<strong>Votre modification n’a pas été acceptée car votre navigateur a mal codé les caractères de ponctuation dans l’identifiant de modification.</strong>\nCe rejet est nécessaire pour empêcher la corruption du texte de la page.\nCe problème se produit parfois lorsque vous utilisez un serveur mandataire anonyme problématique basé sur le web.",
        "edit_form_incomplete": "<strong>Certaines parties du formulaire de modification n’ont pas atteint le serveur, vérifiez que vos modifications sont intactes et essayez à nouveau.</strong>",
        "editingsection": "Modification de $1 (section)",
        "editingcomment": "Modification de $1 (nouvelle section)",
        "editconflict": "Conflit de modification : $1",
-       "explainconflict": "Cette page a été changée après que vous avez commencé à la modifier.\nLa zone de modification supérieure contient le texte tel qu’il est actuellement enregistré dans la base de données.\nVos modifications apparaissent dans la zone de modification inférieure.\nVous allez devoir fusionner vos modifications dans le texte existant.\n<strong>Seul</strong> le texte de la zone supérieure sera sauvegardé si vous cliquez sur « $1 ».",
+       "explainconflict": "Cette page a été changée après que vous avez commencé à la modifier.\nLa zone de modification supérieure contient le texte tel qu’il est actuellement enregistré dans la base de données.\nVos modifications apparaissent dans la zone de modification inférieure.\nVous allez devoir fusionner vos modifications dans le texte existant.\n<strong>Seul</strong> le texte de la zone supérieure sera sauvegardé si vous cliquez sur « $1 ».",
        "yourtext": "Votre texte",
        "storedversion": "La version enregistrée",
        "editingold": "<strong>Attention : vous êtes en train de modifier une ancienne version de cette page.</strong>\nSi vous la publiez, toutes les modifications effectuées depuis cette version seront perdues.",
-       "unicode-support-fail": "Votre navigateur semble ne pas rendre en charge l'Unicode. Ceci est nécessaire pour modifier les pages, aussi vos modifications n'ont pas été sauvegardées.",
+       "unicode-support-fail": "Votre navigateur semble ne pas rendre en charge lUnicode. Ceci est nécessaire pour modifier les pages, aussi vos modifications n'ont pas été sauvegardées.",
        "yourdiff": "Différences",
-       "copyrightwarning": "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). \nSi vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br /> \nVous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public ou d’une ressource libre similaire. \n<strong>N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !</strong>",
-       "copyrightwarning2": "Notez bien que toutes les contributions à {{SITENAME}} peuvent être modifiées, transformées ou supprimées par d’autres utilisateurs. \nSi vous ne désirez pas que vos écrits soient modifiés contre votre gré, merci de ne pas les soumettre ici.<br /> \nVous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public, ou d’une ressource libre. (voir $1 pour plus de détails).\n<strong>N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !</strong>",
+       "copyrightwarning": "Toutes les contributions à {{SITENAME}} sont considérées comme publiées sous les termes de la $2 (voir $1 pour plus de détails). \nSi vous ne désirez pas que vos écrits soient modifiés et distribués à volonté, merci de ne pas les soumettre ici.<br /> \nVous nous promettez aussi que vous avez écrit ceci vous-même, ou que vous l’avez copié d’une source provenant du domaine public ou d’une ressource libre similaire.\n<strong>N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !</strong>",
+       "copyrightwarning2": "Notez bien que toutes les contributions à {{SITENAME}} peuvent être modifiées, transformées ou supprimées par d’autres utilisateurs.\nSi vous ne désirez pas que vos écrits soient modifiés contre votre gré, merci de ne pas les soumettre ici.<br />\nVous nous promettez aussi que vous avez écrit ceci vous-même ou que vous l’avez copié d’une source provenant du domaine public ou d’une ressource libre (voir $1 pour plus de détails).\n<strong>N’UTILISEZ PAS DE TRAVAUX SOUS DROIT D’AUTEUR SANS AUTORISATION EXPRESSE !</strong>",
        "editpage-cannot-use-custom-model": "Le modèle de contenu de cette page ne peut pas être modifié.",
        "longpageerror": "<strong>Erreur : Le texte que vous avez soumis fait {{PLURAL:$1|un Kio|$1 Kio}}, ce qui dépasse la limite fixée à {{PLURAL:$2|un Kio|$2 Kio}}.</strong>\nIl ne peut pas être sauvegardé.",
-       "readonlywarning": "<strong>AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.</strong>\nVous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.\n\nL’administrateur système ayant verrouillé la base de données a donné l’explication suivante : $1",
-       "protectedpagewarning": "<strong>AVERTISSEMENT : cette page est protégée afin que seuls les utilisateurs ayant le statut d'administrateur puissent la modifier.</strong>\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
-       "semiprotectedpagewarning": "<strong>Note :</strong>Cette page a été protégée pour que seuls les contributeurs confirmés automatiquement puissent la modifier. \nLa dernière entrée du journal est affichée ci-dessous pour référence :",
-       "cascadeprotectedwarning": "<strong>ATTENTION :</strong> Cette page a été protégée de manière à ce que seuls les utilisateurs avec [[Special:ListGroupRights|des droits spécifiques]] puissent la modifier car elle est incluse dans {{PLURAL:$1|la page suivante, protégée en cascade|les pages suivantes, protégées en cascade}} :",
-       "titleprotectedwarning": "<strong>ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.</strong> \nLa dernière entrée du journal est affichée ci-dessous pour référence :",
+       "readonlywarning": "<strong>AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.</strong>\nVous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.\n\nL’administrateur système ayant verrouillé la base de données a donné l’explication suivante : $1",
+       "protectedpagewarning": "<strong>AVERTISSEMENT : cette page est protégée afin que seuls les utilisateurs ayant le statut d’administrateur puissent la modifier.</strong>\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
+       "semiprotectedpagewarning": "<strong>Note :</strong>Cette page a été protégée pour que seuls les contributeurs confirmés automatiquement puissent la modifier.\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
+       "cascadeprotectedwarning": "<strong>ATTENTION :</strong> cette page a été protégée de manière à ce que seuls les utilisateurs avec [[Special:ListGroupRights|des droits spécifiques]] puissent la modifier car elle est incluse dans {{PLURAL:$1|la page suivante, protégée en cascade|les pages suivantes, protégées en cascade}} :",
+       "titleprotectedwarning": "<strong>ATTENTION : cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.</strong>\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
        "templatesused": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :",
        "templatesusedpreview": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :",
        "templatesusedsection": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette section :",
        "edittools": "<!-- Tout texte entré ici sera affiché sous les boîtes de modification ou les formulaires de téléversement de fichier. -->",
        "edittools-upload": "—",
        "nocreatetext": "{{SITENAME}} a restreint la possibilité de créer de nouvelles pages.\nVous pouvez revenir en arrière et modifier une page existante, ou bien [[Special:UserLogin|vous connecter ou créer un compte]].",
-       "nocreate-loggedin": "Vous n'avez pas la permission de créer de nouvelles pages.",
+       "nocreate-loggedin": "Vous navez pas la permission de créer de nouvelles pages.",
        "sectioneditnotsupported-title": "Modification de section non prise en charge",
        "sectioneditnotsupported-text": "La modification d’une section n’est pas prise en charge pour cette page.",
        "modeleditnotsupported-title": "Modification non prise en charge",
        "modeleditnotsupported-text": "La modification n’est pas prise en charge pour le modèle de contenu $1.",
        "permissionserrors": "Erreur de permissions",
-       "permissionserrorstext": "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
-       "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+       "permissionserrorstext": "Vous n’avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+       "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}}:",
        "contentmodelediterror": "Vous ne pouvez pas modifier cette révision car son modèle de contenu est <code>$1</code>, ce qui diffère du modèle de contenu actuel de la page <code>$2</code>.",
-       "recreate-moveddeleted-warn": "<strong>Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.</strong>\n\nAssurez-vous qu'il est pertinent de poursuivre les modifications sur cette page.\nLes journaux des suppressions et déplacements pour cette page sont fournis ici pour information :",
+       "recreate-moveddeleted-warn": "<strong>Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.</strong>\n\nAssurez-vous qu’il est pertinent de poursuivre les modifications sur cette page.\nLes journaux des suppressions et déplacements pour cette page sont fournis ici pour information :",
        "moveddeleted-notice": "Cette page a été supprimée.\nLes journaux des suppressions, protections et déplacements pour la page sont fournis ci-dessous pour référence.",
        "moveddeleted-notice-recent": "Désolé, cette page a été récemment supprimée (dans les dernières 24 heures).\nLes journaux des suppressions, protections et déplacements pour la page sont fournis ci-dessous pour référence.",
        "log-fulllog": "Voir le journal complet",
        "edit-gone-missing": "N’a pas pu mettre à jour la page.\nIl semble qu’elle ait été supprimée.",
        "edit-conflict": "Conflit de modification.",
        "edit-no-change": "Votre modification a été ignorée car aucun changement n’a été apporté au texte.",
-       "edit-slots-cannot-add": "{{PLURAL:$1|L’emplacement suivant n’est pas supporté|Les emplacements suivants ne sont pas supportés}} ici : $2.",
-       "edit-slots-cannot-remove": "{{PLURAL:$1|L’emplacement suivant est obligatoire et ne peut pas être supprimé|Les emplacements suivants sont obligatoires et ne peuvent pas être supprimés}} : $2.",
-       "edit-slots-missing": "{{PLURAL:$1|L’emplacement suivant est absent|Les emplacements suivants sont absents}} : $2.",
+       "edit-slots-cannot-add": "{{PLURAL:$1|L’emplacement suivant n’est pas supporté|Les emplacements suivants ne sont pas supportés}} ici: $2.",
+       "edit-slots-cannot-remove": "{{PLURAL:$1|L’emplacement suivant est obligatoire et ne peut pas être supprimé|Les emplacements suivants sont obligatoires et ne peuvent pas être supprimés}}: $2.",
+       "edit-slots-missing": "{{PLURAL:$1|L’emplacement suivant est absent|Les emplacements suivants sont absents}}: $2.",
        "postedit-confirmation-created": "La page a été créée.",
        "postedit-confirmation-restored": "La page a été restaurée.",
        "postedit-confirmation-saved": "Votre modification a été enregistrée.",
        "content-not-allowed-here": "Le contenu « $1 » n’est pas autorisé sur la page [[:$2]] dans l’emplacement « $3 »",
        "editwarning-warning": "Quitter cette page vous fera perdre toutes les modifications que vous avez faites.\nSi vous êtes connecté{{GENDER:||e}}, vous pouvez désactiver cet avertissement dans la section « {{int:prefs-editing}} » de vos préférences.",
        "editpage-invalidcontentmodel-title": "Modèle de contenu non pris en charge",
-       "editpage-invalidcontentmodel-text": "Le modèle de contenu \"$1\" n'est pas pris en charge.",
+       "editpage-invalidcontentmodel-text": "Le modèle de contenu « $1 » n’est pas pris en charge.",
        "editpage-notsupportedcontentformat-title": "Format de contenu non pris en charge",
-       "editpage-notsupportedcontentformat-text": "Le format de contenu $1 n'est pas pris en charge par le modèle de contenu $2 .",
+       "editpage-notsupportedcontentformat-text": "Le format de contenu $1 nest pas pris en charge par le modèle de contenu $2 .",
        "slot-name-main": "Principal",
        "content-model-wikitext": "wikitexte",
        "content-model-text": "texte brut",
        "unsupported-content-diff": "Les diffs ne sont pas supportés pour le modèle de contenu $1.",
        "unsupported-content-diff2": "Les diffs entre les modèles de contenu $1 et $2 ne sont pas supportés sur ce wiki.",
        "deprecated-self-close-category": "Pages utilisant des balises HTML auto-fermantes non valides",
-       "deprecated-self-close-category-desc": "La page contient des balises HTML auto-fermantes non valides, comme <code>&lt;b/></code> ou <code>&lt;span/></code>. Le comportement de celles-ci changera prochainement pour être en accord avec la spécification HTML5, donc leur utilisation dans le wikitexte est désuète.",
-       "duplicate-args-warning": "<strong>Avertissement :</strong> [[:$1]] appelle [[:$2]] avec plus d'une valeur pour le paramètre « $3 ». Seule la dernière valeur fournie sera utilisée.",
+       "deprecated-self-close-category-desc": "La page contient des balises HTML auto-fermantes non valides, comme <code>&lt;b/></code> ou <code>&lt;span/></code>. Le comportement de celles-ci changera prochainement pour être en accord avec la spécification HTML5, donc leur utilisation dans le wikitexte est désormais désuète.",
+       "duplicate-args-warning": "<strong>Avertissement :</strong> [[:$1]] appelle [[:$2]] avec plus d'une valeur pour le paramètre « $3 ». Seule la dernière valeur fournie sera utilisée.",
        "duplicate-args-category": "Pages utilisant des arguments dupliqués dans les appels de modèle",
        "duplicate-args-category-desc": "La page contient des appels de modèle qui utilisent des arguments dupliqués, comme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ou <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>Attention :</strong> cette page contient de trop nombreux appels à des fonctions coûteuses de l’analyseur syntaxique.\n\nIl devrait y avoir moins de $2 appel{{PLURAL:$2||s}}, alors qu’il y en a maintenant $1.",
-       "expensive-parserfunction-category": "Pages avec trop d'appels dispendieux aux fonctions de l'analyseur syntaxique",
+       "expensive-parserfunction-category": "Pages avec trop d’appels dispendieux aux fonctions de l’analyseur syntaxique",
        "post-expand-template-inclusion-warning": "<strong>Attention :</strong> cette page contient trop d’inclusions de modèles. Certaines inclusions ne seront pas effectuées.",
        "post-expand-template-inclusion-category": "Pages contenant trop d'inclusions de modèles",
-       "post-expand-template-argument-warning": "<strong>Attention :</strong> cette page contient au moins un paramètre de modèle dont la taille après expansion est trop importante. \nCes arguments n’ont donc pas été inclus.",
+       "post-expand-template-argument-warning": "<strong>Attention :</strong> cette page contient au moins un paramètre de modèle dont la taille après expansion est trop importante.\nCes arguments n’ont donc pas été inclus.",
        "post-expand-template-argument-category": "Pages contenant des paramètres de modèle non évalués",
        "parser-template-loop-warning": "Modèle en boucle détecté : [[$1]]",
        "template-loop-category": "Pages avec des boucles de modèle",
-       "template-loop-category-desc": "La page contient une boucle dans le modèle, c.à.d. un modèle qui s’appelle lui-même récursivement.",
-       "template-loop-warning": "<strong>Avertissement :</strong> Cette page appelle [[:$1]] ce qui provoque une boucle de modèles (un appel récursif infini).",
+       "template-loop-category-desc": "La page contient une boucle de modèle, c.à.d. un modèle qui s’appelle lui-même récursivement.",
+       "template-loop-warning": "<strong>Avertissement :</strong> cette page appelle [[:$1]] ce qui provoque une boucle de modèles (un appel récursif potentiellement infini).",
        "parser-template-recursion-depth-warning": "Limite de profondeur des appels récursifs de modèles dépassée ($1)",
        "language-converter-depth-warning": "Limite de profondeur du convertisseur de langue dépassée ($1)",
        "node-count-exceeded-category": "Pages dépassant le nombre de nœuds maximal",
        "expansion-depth-exceeded-category": "Pages dépassant la profondeur d'expansion maximale",
        "expansion-depth-exceeded-category-desc": "La page dépasse la profondeur d’expansion maximale.",
        "expansion-depth-exceeded-warning": "Page dépassant la profondeur d’expansion maximale",
-       "parser-unstrip-loop-warning": "Boucle non dépilable détectée",
-       "unstrip-depth-warning": "Limite de récursion non dépilable dépassée ($1)",
+       "parser-unstrip-loop-warning": "Boucle de développement (<code>unstrip</code>) détectée",
+       "unstrip-depth-warning": "Limite de récursion de développement (<code>unstrip</code>) dépassée ($1)",
        "unstrip-depth-category": "Pages où la limite de profondeur de développement est dépassée",
-       "unstrip-size-warning": "Limite de taille de développement dépassée ($1)",
+       "unstrip-size-warning": "Limite de taille de développement (<code>unstrip</code>) dépassée ($1)",
        "unstrip-size-category": "Pages où la limite de taille de développement est dépassée",
        "converter-manual-rule-error": "Erreur détectée dans la règle manuelle de conversion de langue",
-       "undo-success": "Cette modification va être annulée.\nVeuillez vérifier les différences ci-dessous, puis publier l’annulation si c’est bien ce que vous voulez faire.",
+       "undo-success": "La précédente modification va être annulée.\nVeuillez vérifier les différences ci-dessous, puis publier l’annulation ci-dessous si c’est bien ce que vous voulez faire.",
        "undo-failure": "Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.",
-       "undo-main-slot-only": "La modification n'a pas pu être annulée car elle implique un contenu en dehors de la tranche principale.",
+       "undo-main-slot-only": "La modification na pas pu être annulée car elle implique un contenu en dehors de la tranche principale.",
        "undo-norev": "La modification n’a pas pu être défaite parce qu’elle est inexistante ou qu’elle a été supprimée.",
        "undo-nochange": "Il semblerait que la modification ait déjà été annulée.",
        "undo-summary": "Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]])",
        "undo-summary-anon": "Annuler la modification $1 de [[Special:Contributions/$2|$2]]",
        "undo-summary-username-hidden": "Annuler la révision $1 par un utilisateur masqué",
-       "cantcreateaccount-text": "La création de compte depuis cette adresse IP (<strong>$1</strong>) a été bloquée par [[User:$3|$3]]. \n\nLa raison donnée par $3 était : <em>$2</em>",
-       "cantcreateaccount-range-text": "La création de compte depuis les adresses IP de la plage <strong>$1</strong>, où se trouve votre adresse IP (<strong>$4</strong>), a été bloquée par [[User:$3|$3]].\n\nLe motif fourni par $3 est <em>$2</em>",
+       "cantcreateaccount-text": "La création de compte depuis cette adresse IP (<strong>$1</strong>) a été bloquée par [[User:$3|$3]]. \n\nLa raison donnée par $3 était: <em>$2</em>",
+       "cantcreateaccount-range-text": "La création de compte depuis les adresses IP de la plage <strong>$1</strong>, où se trouve votre adresse IP (<strong>$4</strong>), a été bloquée par [[User:$3|$3]].\n\nLe motif fourni par $3 est : <em>$2</em>",
        "viewpagelogs": "Voir les opérations sur cette page",
        "nohistory": "Il n’existe pas d’historique des modifications pour cette page.",
        "currentrev": "Version actuelle",
        "last": "diff",
        "page_first": "première",
        "page_last": "dernière",
-       "histlegend": "Sélection du diff : cochez les boutons radio des versions à comparer et appuyez sur entrée ou sur le bouton en bas.<br />\nLégende : <strong>({{int:cur}})</strong> = différence avec la dernière version, <strong>({{int:last}})</strong> = différence avec la version précédente, <strong>{{int:minoreditletter}}</strong> = modification mineure.",
-       "history-fieldset-title": "Filtrer les versions",
+       "histlegend": "Sélection du diff : cochez les boutons radio des versions à comparer et appuyez sur entrée ou sur le bouton en bas.<br />\nLégende : <strong>({{int:cur}})</strong> = différence avec la dernière version, <strong>({{int:last}})</strong> = différence avec la version précédente, <strong>{{int:minoreditletter}}</strong> = modification mineure.",
+       "history-fieldset-title": "Filtrer les révisions",
        "history-show-deleted": "Révision supprimée uniquement",
        "histfirst": "les plus anciennes",
        "histlast": "les plus récentes",
        "historysize": "($1 octet{{PLURAL:$1||s}})",
        "historyempty": "vide",
        "history-feed-title": "Historique des versions",
-       "history-feed-description": "Historique des versions pour cette page sur le wiki",
+       "history-feed-description": "Historique des révisions pour cette page sur le wiki",
        "history-feed-item-nocomment": "$1 le $2",
-       "history-feed-empty": "La page demandée n'existe pas.\nElle a peut-être été effacée ou renommée.\nEssayez de [[Special:Search|rechercher sur le wiki]] pour trouver de nouvelles pages en rapport avec le sujet.",
+       "history-feed-empty": "La page demandée nexiste pas.\nElle a peut-être été effacée ou renommée.\nEssayez de [[Special:Search|rechercher sur le wiki]] pour trouver de nouvelles pages en rapport avec le sujet.",
        "history-edit-tags": "Modifier les balises des versions sélectionnées",
        "rev-deleted-comment": "(résumé de modification retiré)",
        "rev-deleted-user": "(nom d'utilisateur retiré)",
        "rev-showdeleted": "afficher",
        "revisiondelete": "Supprimer ou restaurer des événements",
        "revdelete-nooldid-title": "Version cible non valide",
-       "revdelete-nooldid-text": "Vous n’avez pas précisé de révision(s) cible(s) pour cette fonction, ou bien la révision spécifiée n’existe pas, ou bien vous tentez de masquer la révision actuelle.",
+       "revdelete-nooldid-text": "Vous n’avez pas précisé de révision(s) cible(s) pour cette fonction, ou la révision spécifiée n’existe pas, ou bien vous tentez de masquer la révision actuelle.",
        "revdelete-no-file": "Le fichier spécifié n'existe pas.",
-       "revdelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e}} de vouloir voir la révision supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
+       "revdelete-show-file-confirm": "Êtes-vous sûr{{GENDER:||e}} de vouloir voir la révision supprimée du fichier « <nowiki>$1</nowiki> » datant du $2 à $3 ?",
        "revdelete-show-file-submit": "Oui",
-       "revdelete-selected-text": "{{PLURAL:$1|Révision sélectionnée|Révisions sélectionnées}} de [[:$2]] :",
-       "revdelete-selected-file": "{{PLURAL:$1|Version de fichier sélectionnée|Versions de fichier sélectionnées}} de [[:$2]] :",
-       "logdelete-selected": "{{PLURAL:$1|Événement d'historique sélectionné|Événements d'historique sélectionnés}} :",
+       "revdelete-selected-text": "{{PLURAL:$1|Révision sélectionnée|Révisions sélectionnées}} de [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Version de fichier sélectionnée|Versions de fichier sélectionnées}} de [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Événement d’historique sélectionné|Événements d’historique sélectionnés}} :",
        "revdelete-text-text": "Les révisions supprimées continueront à apparaître dans l’historique de la page, mais une partie de leur contenu sera inaccessible au public.",
        "revdelete-text-file": "Les versions de fichier supprimées continueront à apparaître dans l’historique des fichiers, mais une partie de leur contenu sera indisponible au public.",
-       "logdelete-text": "Les Ã©vènements supprimés du journal continueront à apparaître dans les journaux, mais une partie de leur contenu sera indisponible au public.",
-       "revdelete-text-others": "Les autres administrateurs seront toujours en mesure d'accéder au contenu caché et le restaurer, à moins que des restrictions supplémentaires soient fixées.",
-       "revdelete-confirm": "Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences, et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].",
-       "revdelete-suppress-text": "La suppression ne doit être utilisée <strong>que</strong> dans les cas suivants :\n* informations potentiellement diffamatoires\n* informations personnelles inappropriées\n*: <em>adresse, numéro de téléphone, numéro de sécurité sociale, …</em>",
+       "logdelete-text": "Les Ã©vénements supprimés du journal continueront à apparaître dans les journaux, mais une partie de leur contenu sera indisponible au public.",
+       "revdelete-text-others": "Les autres administrateurs seront toujours en mesure daccéder au contenu caché et le restaurer, à moins que des restrictions supplémentaires soient fixées.",
+       "revdelete-confirm": "Confirmez que vous voulez effectuer cette action, que vous en comprenez les conséquences et que vous le faites en accord avec [[{{MediaWiki:Policy-url}}|les règles]].",
+       "revdelete-suppress-text": "La suppression ne doit être utilisée <strong>que</strong> dans les cas suivants:\n* informations potentiellement diffamatoires\n* informations personnelles inappropriées\n*: <em>adresse, numéro de téléphone, numéro de sécurité sociale, …</em>",
        "revdelete-legend": "Mettre en place des restrictions de visibilité",
        "revdelete-hide-text": "Texte de la révision",
        "revdelete-hide-image": "Masquer le contenu du fichier",
        "revdelete-hide-name": "Masquer la cible et les paramètres",
        "revdelete-hide-comment": "Résumé de modification",
-       "revdelete-hide-user": "Nom d’utilisateur/Adresse IP de l’éditeur",
-       "revdelete-hide-restricted": "Supprimer ces données aux administrateurs ainsi qu'aux autres",
+       "revdelete-hide-user": "Nom d’utilisateur / adresse IP de l’auteur",
+       "revdelete-hide-restricted": "Supprimer ces données aux administrateurs ainsi quaux autres",
        "revdelete-radio-same": "(ne pas changer)",
        "revdelete-radio-set": "Masqué",
        "revdelete-radio-unset": "Visible",
        "revdelete-suppress": "Masquer également les données pour les administrateurs",
        "revdelete-unsuppress": "Enlever les restrictions sur les versions restaurées",
-       "revdelete-log": "Motif :",
+       "revdelete-log": "Motif:",
        "revdelete-submit": "Appliquer {{PLURAL:$1|à la révision sélectionnée|aux révisions sélectionnées}}",
        "revdelete-success": "Visibilité des versions mise à jour.",
-       "revdelete-failure": "'''La visibilité de la version n'a pas pu être mise à jour :'''\n$1",
+       "revdelete-failure": "'''La visibilité de la version n'a pas pu être mise à jour:'''\n$1",
        "logdelete-success": "Visibilité du journal modifiée.",
        "logdelete-failure": "'''La visibilité du journal n'a pas pu être définie :'''\n$1",
        "revdel-restore": "modifier la visibilité",
index 3cb79ca..7d6edd0 100644 (file)
        "nstab-template": "Clowan",
        "nstab-help": "Duillag choonee",
        "nstab-category": "Ronney",
+       "mainpage-nstab": "Ard-ghuillag",
        "nosuchaction": "Cha nel lheid yn obbyr ayn",
        "nosuchspecialpage": "Cha nel y duillag er lheh shoh ayn",
        "error": "Marranys",
        "virus-scanfailed": "vrish y ronsaght (coad $1)",
        "virus-unknownscanner": "ronseyder noi-veerys gyn enney",
        "yourname": "Dt'ennym ymmydeyr:",
+       "userlogin-yourname": "Ennym ymmydeyr",
+       "userlogin-yourname-ph": "Screeu ennym ymmydeyr",
        "yourpassword": "Fockle yn arrey:",
+       "userlogin-yourpassword": "Fockle yn arrey",
        "yourpasswordagain": "Aascreeu dt'ockle arrey:",
        "login": "Log stiagh",
        "nav-login-createaccount": "Log stiagh / croo coontys",
        "notloggedin": "Cha nel ou loggit stiagh",
        "createaccount": "Croo coontys",
        "createaccountmail": "Croo fockle arrey shallidagh gyn tort as cur eh da'n post-l reiht ayd",
+       "createacct-benefit-body2": "{{PLURAL:$1|duillag|duillagyn}}",
        "loginerror": "Marranys loggal stiagh",
        "createaccounterror": "Cha nod shin croo coontys: $1",
        "noname": "Cha honree uss ennym ymmydeyr fondagh.",
        "note": "'''Note:'''",
        "previewnote": "'''Cooinnee nagh vel agh roie-haishbynys eh shoh;\ncha nel dty chaghlaaghyn sauailt foast!'''",
        "editing": "Reaghey $1",
+       "creating": "Croo $1",
        "editingsection": "Reaghey $1 (rheynn)",
        "editingcomment": "Reaghey $1 (meer noa)",
        "yourtext": "Dty heks",
        "action-browsearchive": "duillagyn scrysst y ronsaghey",
        "action-undelete": "yn duillag shoh y yee-scryssey",
        "nchanges": "$1 {{PLURAL:$1|caghlaa|chaghlaa|chaghlaa|caghlaaghyn}}",
+       "enhancedrc-history": "skeeal",
        "recentchanges": "Caghlaaghyn s'noa",
        "recentchanges-legend": "Reihyssyn da ny caghlaaghyn s'noa",
        "recentchanges-summary": "Shirr ny caghlaaghyn s'noa da'n wiki er y duillag shoh.",
        "specialpages-group-other": "Duillagyn elley er lheh",
        "specialpages-group-login": "Log stiagh / croo coontys",
        "specialpages-group-users": "Ymmydeyryn as kiartyn",
+       "tags-active-yes": "Ta",
+       "tags-active-no": "Cha nel",
        "tags-edit": "reaghey",
        "rightsnone": "(veg)",
        "searchsuggest-search": "Ronsaghey",
index dd7e7e8..85c86ad 100644 (file)
@@ -87,7 +87,7 @@
        "tog-useeditwarning": "הצגת אזהרה בעת עזיבת דף עריכה עם שינויים שטרם נשמרו",
        "tog-prefershttps": "תמיד להשתמש בתקשורת מאובטחת לאחר הכניסה לחשבון",
        "tog-showrollbackconfirmation": "הצגת הודעת אישור לאחר לחיצה על קישור \"שחזור\"",
-       "tog-requireemail": "×\9c×\93ר×\95ש ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9c×\90ת×\97×\95×\9c סיסמה",
+       "tog-requireemail": "×\93ר×\99שת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\9b×\93×\99 ×\9c×\90פס סיסמה",
        "underline-always": "תמיד",
        "underline-never": "לעולם לא",
        "underline-default": "ברירת המחדל של העיצוב או של הדפדפן",
        "content-model-css": "CSS",
        "content-json-empty-object": "אובייקט ריק",
        "content-json-empty-array": "מערך ריק",
-       "unsupported-content-model": "<strong>אזהרה:</strong> מודל התוכן $1 אינו נתמך בוויקי הזה.",
-       "unsupported-content-diff": "×\94ש×\95×\95×\90×\95ת ×\90×\99× ×\9f × ×ª×\9e×\9b×\95ת במודל התוכן $1.",
-       "unsupported-content-diff2": "×\94ש×\95×\95×\90×\95ת ×\91×\99×\9f ×\9e×\95×\93×\9c ×\94ת×\95×\9b×\9f $1 ×\9c×\91×\99×\9f ×\9e×\95×\93×\9c $2 ×\90×\99× ×\9f × ×ª×\9e×\9b×\95ת ×\91וויקי הזה.",
+       "unsupported-content-model": "<strong>×\90×\96×\94ר×\94:</strong> ×\9e×\95×\93×\9c ×\94ת×\95×\9b×\9f $1 ×\90×\99× ×\95 × ×ª×\9e×\9a ×\91×\90תר ×\94×\95×\95×\99ק×\99 ×\94×\96×\94.",
+       "unsupported-content-diff": "×\94ש×\95×\95×\90×\94 ×\91×\99×\9f ×\92רס×\90×\95ת ×\90×\99× ×\94 × ×ª×\9e×\9bת במודל התוכן $1.",
+       "unsupported-content-diff2": "×\94ש×\95×\95×\90×\94 ×\91×\99×\9f ×\92רס×\90×\95ת ×\9e×\9e×\95×\93×\9c ×\94ת×\95×\9b×\9f $1 ×\9c×\92רס×\90×\95ת ×\9e×\9e×\95×\93×\9c ×\94ת×\95×\9b×\9f $2 ×\90×\99× ×\94 × ×ª×\9e×\9bת ×\91×\90תר ×\94וויקי הזה.",
        "deprecated-self-close-category": "דפים שמשתמשים בתגיות HTML עם סגירה עצמית בלתי־תקינה",
        "deprecated-self-close-category-desc": "הדף מכיל תגיות HTML עם סגירה עצמית בלתי־תקינה, כגון <code dir=\"ltr\">&lt;b/></code> או <code dir=\"ltr\">&lt;span/></code>. ההתנהגות של תגיות אלה תשתנה בקרוב לצורך תאימות עם מפרט HTML5, ולכן יש להימנע משימוש בהן בקוד ויקי.",
        "duplicate-args-warning": "<strong>אזהרה:</strong> [[:$1]] קורא לדף [[:$2]] עם יותר מערך אחד עבור הפרמטר \"$3\". ייעשה שימוש רק בערך האחרון.",
        "undo-norev": "לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.",
        "undo-nochange": "נראה שהעריכה כבר בוטלה.",
        "undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
-       "undo-summary-anon": "×\91×\99×\98×\95×\9c ×\92רס×\94 $1 ×\9e×\90ת [[Special:Contributions/$2|$2]]",
+       "undo-summary-anon": "×\91×\99×\98×\95×\9c ×\92רס×\94 $1 ×©×\9c [[Special:Contributions/$2|$2]]",
        "undo-summary-username-hidden": "ביטול גרסה $1 של משתמש מוסתר",
        "cantcreateaccount-text": "אפשרות יצירת החשבונות מכתובת ה־IP הזאת (<strong>$1</strong>) נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא: <em>$2</em>",
        "cantcreateaccount-range-text": "אפשרות יצירת החשבונות מכתובות IP בתוך הטווח <strong>$1</strong>, כולל כתובת ה־IP שלך (<strong>$4</strong>), נחסמה על־ידי [[User:$3|$3]].\n\nהסיבה שניתנה על־ידי $3 היא: <em>$2</em>",
        "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונלית, אבל היא חיונית לאיפוס הסיסמה במקרה ש{{GENDER:|תשכח|תשכחי}} אותה.",
        "prefs-help-email-others": "באפשרותך גם לאפשר למשתמשים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים יצרו איתך קשר.",
        "prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.",
-       "prefs-help-requireemail": "×\90×\9d ×\96×\94 ×\9eס×\95×\9e×\9f, ×\9cש×\9c×\95×\97 ×\9e×\9bת×\91×\99 ×\90ת×\97×\95×\9c ×¡×\99ס×\9e×\94 ×\90×\9d ×\94×\90×\93×\9d ×\94×\9e×\90ת×\97×\9c ×¡×\99פק ×\92×\9d ×©×\9d ×\9eשת×\9eש ×\95×\92×\9d ×¡×\99ס×\9e×\94 ×\9c×\97ש×\91×\95×\9f ×©×\9c×\95.",
+       "prefs-help-requireemail": "×\90×\9d ×\90פשר×\95ת ×\96×\95 ×¡×\95×\9e× ×\94, ×\94×\90תר ×\99ש×\9c×\97 ×\94×\95×\93עת ×\93×\95×\90\"×\9c ×\94×\9e×\90פשרת ×\90ת ×\90×\99פ×\95ס ×\94ס×\99ס×\9e×\94 ×¨×§ ×\9c×\90×\97ר ×©×\9e×\99 ×©×\91×\99קש ×\90×\95ת×\94 ×\99ספק ×\92×\9d ×\90ת ×©×\9d ×\94×\9eשת×\9eש ×\95×\92×\9d ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90\"×\9c ×©×\9c ×\94×\97ש×\91×\95×\9f ×\94×\96×\94.",
        "prefs-info": "מידע בסיסי",
        "prefs-i18n": "בינאום",
        "prefs-signature": "חתימה",
        "backend-fail-contenttype": "לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־\"$1\".",
        "backend-fail-batchsize": "למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.",
        "backend-fail-usable": "קריאת או כתיבת הקובץ \"$1\" לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.",
-       "backend-fail-stat": "×\9c×\90 ×\94×\99×\94 ×\90פשר ×\9cקר×\95×\90 ×\90ת ×\94×\9eצ×\91 ×©×\9c ×\94ק×\95×\91×¥ \"$1\".",
-       "backend-fail-hash": "×\9c×\90 ×\94×\99×\94 ×\90פשר ×\9c×\94×\97×\9c×\99×\98 ×\9e×\94×\95 ×\92×\99×\91×\95×\91 ×\94×\94צפנ×\94 ×©×\9c ×\94ק×\95×\91×¥ \"$1\".",
+       "backend-fail-stat": "קר×\99×\90ת ×\9eצ×\91 ×\94ק×\95×\91×¥ \"$1\" ×\9c×\90 ×\94צ×\9c×\99×\97×\94.",
+       "backend-fail-hash": "×\9eצ×\99×\90ת ×¢×¨×\9a ×\94×\92×\99×\91×\95×\91 ×\94קר×\99פ×\98×\95×\92רפ×\99 ×©×\9c ×\94ק×\95×\91×¥ \"$1\" ×\9c×\90 ×\94צ×\9c×\99×\97×\94.",
        "filejournal-fail-dbconnect": "לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי \"$1\".",
        "filejournal-fail-dbquery": "לא ניתן היה לעדכן את בסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי \"$1\".",
        "lockmanager-notlocked": "פתיחת הנעילה של \"$1\" לא הצליחה; הוא לא נעול.",
        "alreadyrolled": "לא ניתן לשחזר את העריכה של [[User:$2|$2]] ([[User talk:$2|שיחה]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) בדף [[:$1]];\nהדף כבר נערך או שוחזר.\n\nהעריכה האחרונה הייתה של [[User:$3|$3]] ([[User talk:$3|שיחה]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "תקציר העריכה היה: <em>$1</em>.",
        "revertpage": "שוחזר מעריכות של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]]) לעריכה האחרונה של [[User:$1|$1]]",
-       "revertpage-anon": "×\91×\99×\98×\9c ×\90ת ×\94ער×\99×\9b×\95ת ×©×\9c [[Special:Contributions/$2|$2]] ×\9c×\92רס×\94 ×\94×\90×\97ר×\95× ×\94 ×\9e×\90ת [[User:$1|$1]]",
+       "revertpage-anon": "ש×\95×\97×\96ר ×\9eער×\99×\9b×\95ת ×©×\9c [[Special:Contributions/$2|$2]] ×\9cער×\99×\9b×\94 ×\94×\90×\97ר×\95× ×\94 ×©×\9c [[User:$1|$1]]",
        "revertpage-nouser": "שוחזר מעריכות של משתמש מוסתר לעריכה האחרונה של {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "שוחזר מעריכות של {{GENDER:$3|$1}}\nלעריכה האחרונה של {{GENDER:$4|$2}}.",
        "sessionfailure-title": "בעיה בחיבור",
        "ipblocklist-legend": "מציאת משתמש חסום",
        "blocklist-userblocks": "הסתרת חסימות של משתמשים רשומים",
        "blocklist-tempblocks": "הסתרת חסימות זמניות",
-       "blocklist-indefblocks": "×\94סתרת ×\97ס×\99×\9e×\95ת ×\9cצ×\9e×\99ת×\95ת",
+       "blocklist-indefblocks": "×\94סתרת ×\97ס×\99×\9e×\95ת ×\91×\9cת×\99 ×\9e×\95×\92×\91×\9c×\95ת ×\91×\96×\9e×\9f",
        "blocklist-addressblocks": "הסתרת חסימות של כתובות IP בודדות",
        "blocklist-type": "סוג:",
        "blocklist-type-opt-all": "הכול",
index 37106e5..15645e3 100644 (file)
@@ -99,6 +99,7 @@
        "tog-useeditwarning": "Figyelmeztessen, ha szerkesztéskor a módosítások mentése nélkül akarom elhagyni a lapot",
        "tog-prefershttps": "Mindig biztonságos kapcsolatot használjon, amikor be vagyok jelentkezve",
        "tog-showrollbackconfirmation": "Megerősítés kérése, amikor a visszaállítás linkre kattintasz",
+       "tog-requireemail": "E-mail-cím megkövetelése jelszó-visszaállításkor",
        "underline-always": "mindig",
        "underline-never": "soha",
        "underline-default": "Felület és böngésző alapértelmezése szerint",
        "prefs-help-email": "Az e-mail-cím megadása nem kötelező, de szükséges új jelszó kéréséhez, ha elfelejtenéd a meglévőt.",
        "prefs-help-email-others": "Úgy is dönthetsz, hogy lehetővé teszed mások számára, hogy kapcsolatba lépjenek veled a felhasználói vagy vitalapodon keresztül, anélkül, hogy fel kellene fedned a személyazonosságodat.",
        "prefs-help-email-required": "Meg kell adnod az e-mail címedet.",
+       "prefs-help-requireemail": "Amennyiben bekapcsolod, csak akkor küldünk jelszó-visszaállító e-mailt, ha az ezt kérő személy helyesen megadja a fiók szerkesztői nevét és e-mail-címét.",
        "prefs-info": "Alapinformációk",
        "prefs-i18n": "Nyelvi beállítások",
        "prefs-signature": "Aláírás",
        "ipblocklist-legend": "Blokkolt felhasználó keresése",
        "blocklist-userblocks": "Fiókblokkolások elrejtése",
        "blocklist-tempblocks": "Ideiglenes blokkolások elrejtése",
+       "blocklist-indefblocks": "Végtelen blokkolások elrejtése",
        "blocklist-addressblocks": "IP-címek blokkolásainak elrejtése",
        "blocklist-type": "Típus:",
        "blocklist-type-opt-all": "Összes",
index d8070a0..8c805bf 100644 (file)
        "block-expiry": "Expiro:",
        "block-options": "Plusa agadi:",
        "block-reason": "Motivo:",
+       "block-target": "Nomo od IP-adreso dil uzero:",
        "unblockip": "Desblokusar uzero",
        "unblockiptext": "Uzez la sequanta formularo por restaurar la skribo-aceso ad IP-adreso qua blokusesis antee.",
        "ipusubmit": "Desblokusar",
        "newimages": "Galerio di nova arkivi",
        "imagelisttext": "Infre esas listo di '''$1''' {{PLURAL:$1|arkivo|arkivi}} rangizita $2.",
        "newimages-legend": "Filtrilo",
+       "newimages-user": "IP-adreso o nomo dil uzero",
        "ilsubmit": "Serchar",
        "bydate": "per dato",
        "minutes": "{{PLURAL:$1|$1 minuto|$1 minuti}}",
index 8bd7bc0..759861d 100644 (file)
        "tog-useeditwarning": "変更を保存せずに編集画面から離れようとしたら警告",
        "tog-prefershttps": "ログインする際、常に安全な接続を使用する",
        "tog-showrollbackconfirmation": "巻き戻しリンクをクリックした際に確認画面を表示する",
+       "tog-requireemail": "パスワードの変更にはメーフアドレスが必要です",
        "underline-always": "常に付ける",
        "underline-never": "常に付けない",
        "underline-default": "外装またはブラウザーの既定値を使用",
        "nocreate-loggedin": "新しいページを作成する権限がありません。",
        "sectioneditnotsupported-title": "節単位編集はサポートされていません",
        "sectioneditnotsupported-text": "このページでは節単位編集はサポートされません。",
+       "modeleditnotsupported-title": "編集はサポートしていません",
+       "modeleditnotsupported-text": "コンテンツモデル$1の編集はサポートしていません",
        "permissionserrors": "権限エラー",
        "permissionserrorstext": "あなたにはこの操作を行う権限がありません。{{PLURAL:$1|理由}}は以下の通りです:",
        "permissionserrorstext-withaction": "あなたには「$2」を行う権限がありません。{{PLURAL:$1|理由}}は以下の通りです:",
index 9a6d447..a00e5fb 100644 (file)
        "tog-numberheadings": "Wènèhi angkaning sesirah kanthi otomatis",
        "tog-editondblclick": "Besut kaca sarana ngeklik pindho",
        "tog-editsectiononrightclick": "Idinaké mbesut pérangan sarana klik tengen ing sesirahing pérangan",
-       "tog-watchcreations": "Wuwuh kaca gawéanku lan barkas unggahanku menyang pawawanganku",
-       "tog-watchdefault": "Wuwuh kaca lan barkas besutanku menyang pawawanganku",
-       "tog-watchmoves": "Wuwuh kaca lan barkas lih-lihanku menyang pawawanganku",
-       "tog-watchdeletion": "Wuwuh kaca lan barkas busakanku menyang pawawanganku",
-       "tog-watchuploads": "Wuwuh barkas anyar unggahanku menyang pawawanganku",
+       "tog-watchcreations": "Wuwuh kaca gawéanku lan berkas unggahanku menyang pawawanganku",
+       "tog-watchdefault": "Wuwuh kaca lan berkas besutanku menyang pawawanganku",
+       "tog-watchmoves": "Wuwuh kaca lan berkas lih-lihanku menyang pawawanganku",
+       "tog-watchdeletion": "Wuwuh kaca lan berkas busekanku menyang pawawanganku",
+       "tog-watchuploads": "Wuwuh berkas anyar unggahanku menyang pawawanganku",
        "tog-watchrollback": "Wuwuh kaca kang dakpulihaké menyang pawawanganku",
        "tog-minordefault": "Tengeri kabèh besutan minangka besutan cilik sacara baku",
        "tog-previewontop": "Deleng pratuduh sadurungé mbesut kothak",
        "tog-previewonfirst": "Delelng pratuduh nalika mbesut pisanan",
-       "tog-enotifwatchlistpages": "Kirimi aku layang-èl yèn ana kaca utawa barkas ing pawawanganku kang diowahi",
+       "tog-enotifwatchlistpages": "Kirimi aku layang-èl yèn ana kaca utawa berkas ing pawawanganku kang ingowahan",
        "tog-enotifusertalkpages": "Kirimi aku layang-èl yèn kaca parembuganku ana kang ngowahi",
-       "tog-enotifminoredits": "Uga kirimi aku layang-èl yèn ana besutan cilik ing kaca lan barkas",
+       "tog-enotifminoredits": "Uga kirimi aku layang-èl yèn ana besutan cilik ing kaca lan berkas",
        "tog-enotifrevealaddr": "Tuduhaké alamat layang-èlku ing layang wara-wara",
        "tog-shownumberswatching": "Tuduhaké cacah wong kang ngawasi",
        "tog-oldsig": "Tandha tanganmu kang wis cumawis:",
        "category-subcat-count-limited": "Kategori iki duwé {{PLURAL:$1|anak kategori|$1 anak kategori}} kaya ngisor iki.",
        "category-article-count": "{{PLURAL:$2|Kategori iki mung ngandhut kaca ngisor iki.|{{PLURAL:$1|Kaca|$1 kaca}} ngisor iki ana ing kategori iki saka gunggung $2 kaca.}}",
        "category-article-count-limited": "Kategori iki ngemu {{PLURAL:$1|kaca|$1 kaca}} kang kapacak ing isor iki.",
-       "category-file-count": "{{PLURAL:$2|Kategori iki mung isi barkas iki.|{{PLURAL:$1|Barkas|$1 barkas}} iki ana sajeroning kategori iki saka $2 gunggungé.}}",
-       "category-file-count-limited": "Kategori iki duwé {{PLURAL:$1|barkas|$1 barkas}} kang kapacak ing isor iki.",
+       "category-file-count": "{{PLURAL:$2|Kategori iki mung isi berkas iki.|{{PLURAL:$1|Berkas|$1 berkas}} iki ana ing jero kategori iki saka $2 gunggungé.}}",
+       "category-file-count-limited": "Kategori iki duwé {{PLURAL:$1|berkas|$1 berkas}} kang kapacak ing sor iki.",
        "listingcontinuesabbrev": "samb.",
        "index-category": "Kaca kaindhèks",
        "noindex-category": "Kaca ora kaindhèks",
-       "broken-file-category": "Kaca mawa pranala barkas rusak",
+       "broken-file-category": "Kaca mawa pranala berkas rusak",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "category-header-numerals": "$1–$2",
        "about": "Bab",
        "history_short": "Sajarah",
        "history_small": "sajarah",
        "updatedmarker": "wis dianyari kawit tekaku mréné pungkasan",
-       "printableversion": "Vèrsi céthak",
+       "printableversion": "Vèrsi cithak",
        "permalink": "Pranala permanèn",
        "print": "Cithak",
        "view": "Deleng",
        "tool-link-userrights": "Owahi golongan {{GENDER:$1|panganggo}}",
        "tool-link-userrights-readonly": "Deleng golongan {{GENDER:$1|panganggo}}",
        "tool-link-emailuser": "Kirimi {{GENDER:$1|panganggo}} iki layang-é",
-       "imagepage": "Deleng kaca barkas",
+       "imagepage": "Deleng kaca berkas",
        "mediawikipage": "Deleng kaca layang",
        "templatepage": "Deleng kaca cithakan",
        "viewhelppage": "Deleng kaca pitulung",
        "portal-url": "Project:Garupa paguyuban",
        "privacy": "Niti privasi",
        "privacypage": "Project:Niti privasi",
-       "badaccess": "Aksès ora olèh",
+       "badaccess": "Masalah idin",
        "badaccess-group0": "Kowé ora kawogan ngayahi laku kang kojaluk.",
        "badaccess-groups": "Laku kang koarepi mung winates tumrap panganggo ing {{PLURAL:$2|golongan}}: $1.",
-       "versionrequired": "Dibutuhaké MediaWiki vèrsi $1",
+       "versionrequired": "Butuh MediaWiki vèrsi $1",
        "versionrequiredtext": "MediaWiki vèrsi $1 dibutuhaké kanggo nggunakaké kaca iki. Mangga mirsani [[Special:Version|kaca iki]]",
        "ok": "Oké",
        "pagetitle": "$1 - {{SITENAME}}",
        "youhavenewmessages": "{{PLURAL:$3|Kowé duwé}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Kowé duwé}} $1 saka {{PLURAL:$3|panganggo liya|$3 panganggo}} ($2).",
        "youhavenewmessagesmanyusers": "Kowé duwé $1 saka manéka panganggo ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|layang anyar|999=layang anyar}}",
+       "newmessageslinkplural": "{{PLURAL:$1|siji layang anyar|999=layang anyar}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|owahan|999=owahan}} pungkasan",
        "youhavenewmessagesmulti": "Kowé éntuk layang anyar ing $1",
        "editsection": "besut",
        "nstab-media": "Kaca médhia",
        "nstab-special": "Kaca mirunggan",
        "nstab-project": "Kaca proyèk",
-       "nstab-image": "Barkas",
+       "nstab-image": "Berkas",
        "nstab-mediawiki": "Layang",
        "nstab-template": "Cithakan",
        "nstab-help": "Kaca pitulung",
        "readonly_lag": "Database wis dikunci mawa otomatis sawetara database sékundhèr lagi nglakoni sinkronisasi mawa database utama",
        "internalerror": "Masalah njero",
        "internalerror_info": "Masalah njero: $1",
-       "filecopyerror": "Ora bisa nurun barkas \"$1\" dadi \"$2\".",
+       "filecopyerror": "Ora bisa nurun berkas \"$1\" dadi \"$2\".",
        "filerenameerror": "Ora bisa ngowahi saka \"$1\" dadi \"$2\".",
-       "filedeleteerror": "Ora bisa mbusek barkas \"$1\".",
+       "filedeleteerror": "Ora bisa mbusek berkas \"$1\".",
        "directorycreateerror": "Ora bisa nggawé dirèktori \"$1\".",
        "directoryreadonlyerror": "Pérangan \"$1\" mung kena diwaca.",
        "directorynotreadableerror": "Pérangan \"$1\" ora kena diwaca.",
-       "filenotfound": "Ora bisa nemu barkas \"$1\".",
+       "filenotfound": "Ora bisa nemu berkas \"$1\".",
        "unexpected": "Biji (''nilai'') ing njabaning jangkauan: \"$1\"=\"$2\".",
        "formerror": "Masalah: Ora bisa ngirim formulir",
        "badarticleerror": "Laku iki ora bisa kalakokaké ing kaca iki.",
-       "cannotdelete": "Kaca utawa barkas \"$1\" ora bisa kobusek.\nBokmanawa kaca utawa barkasé wis dibusek wong liya.",
+       "cannotdelete": "Kaca utawa berkas \"$1\" ora bisa kobusek.\nBokmanawa kaca utawa berkasé wis dibusek wong liya.",
        "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\"",
        "customcssprotected": "Kowé ora kawogan mbesut kaca CSS iki amarga ngemu setèlan pribadi panganggo liya.",
        "customjsprotected": "Kowé ora kawogan mbesut kaca JavaScript iki amarga ngemu setèlan pribadi panganggo liya.",
        "mycustomcssprotected": "Sampèyan ora duwé idin kanggo ngowah kaca CSS iki.",
+       "mycustomjsonprotected": "Kowé ora kawogan mbesut kaca JSON iki.",
        "mycustomjsprotected": "Sampèyan ora duwé idin kanggo ngowah kaca JavaScript iki.",
        "myprivateinfoprotected": "Sampèyan ora duwé idin kanggo ngowah informasi privat sampèyan.",
        "mypreferencesprotected": "Sampèyan ora duwé idin kanggo ngowah preferensi sampèyan.",
        "ns-specialprotected": "Kaca mirunggan ora bisa dibesut.",
        "titleprotected": "Irah-irahan iki direksa ora olèh digawé déning [[User:$1|$1]].\nAlesané yaiku <em>$2</em>.",
-       "filereadonlyerror": "Ora bisa ndandani barkas \"$1\" amarga panyimpenan barkas \"$2\" mung bisa diwaca.\n\nPangurus sistem kang ngunci iku njlèntrèhaké: \"$3\".",
+       "filereadonlyerror": "Ora bisa ndandani berkas \"$1\" amarga panyimpenan berkas \"$2\" mung bisa kawaca.\n\nPangurus sistem kang nggembok iku wèwèh pawadan: \"$3\".",
        "invalidtitle": "Sesirah ora trep",
        "invalidtitle-knownnamespace": "Sesirah ora trep mawa mandhala aran \"$2\" lan tulisan \"$3\"",
        "invalidtitle-unknownnamespace": "Sesirah ora trep mawa angka $1 lan tulisan \"$2\" mandhala aran kang ora kaweruhan",
        "virus-scanfailed": "''Pemindaian'' utawa ''scan'' gagal (kode $1)",
        "virus-unknownscanner": "antivirus buhbuhan:",
        "logouttext": "<strong>Kowé wis metu log.</strong>\n\nTulung gatèkaké yèn sawenèh kaca bokmanawa bakal isih katon kaya déné yèn kowé isih mlebu log, kajaba kowé mbusek telihing panglurumu.",
+       "logging-out-notify": "Kowé metu log, entèni sadhéla.",
+       "logout-failed": "Saiki ora bisa metu log: $1",
        "cannotlogoutnow-title": "Ora bisa metu saiki",
        "cannotlogoutnow-text": "Mokal metu log nalika nganggo $1.",
        "welcomeuser": "Sugeng Rawuh, $1!",
        "nosuchuser": "Ora ana panganggo mawa jeneng \"$1\".\nJeneng panganggo iku sènsitif tumrap gedhé-ciliké huruf.\nJajan priksanen pangéjamu, utawa [[Special:CreateAccount|gawénen akun anyar]].",
        "nosuchusershort": "Ora ana panganggo mawa asma \"$1\". Coba dipriksa manèh pasang aksarané (éjaané).",
        "nouserspecified": "Kowé kudu ngisi jeneng panganggo.",
-       "login-userblocked": "Panganggo iki pinalangan. Ora kena mbelu.",
+       "login-userblocked": "Panganggo iki kapenggak. Ora kena mbelu.",
        "wrongpassword": "Jenang panganggo utawa tembung wadi kang koisèkaké salah.\nMangga jajal manèh.",
        "wrongpasswordempty": "Tembung wadi kosong.\nJajalen manèh.",
        "passwordtooshort": "Tembung sesinglon paling sethithik cacahé {{PLURAL:$1|1 aksara|$1 aksara}}.",
        "noemail": "Ora ana alamat layang-èl kang kacathet tumrap ing panganggo \"$1\".",
        "noemailcreate": "Kowé kudu mènèhi alamat layang-èl kang trep",
        "passwordsent": "Tembung wadi anyar wis kinirim menyang alamat layang-èl kang kadhaftar tumrap \"$1\". \nMangga mlebu log manèh sawisé kowé nampa iku.",
-       "blocked-mailpassword": "Alamat IP-mu kablokir saka mbesut. Kanggo ngéndhani laku salah-guna, ora kena nganggo pamulih tembung wadi saka alamat IP iki.",
+       "blocked-mailpassword": "Alamat IP-mu kapenggak saka mbesut. Kanggo ngéndhani laku salah-guna, ora kena nganggo pamulih tembung wadi saka alamat IP iki.",
        "eauthentsent": "Layang-èl konfirmasi wis kinirim menyang alamat layang-èl kang koisèkaké. Sadurungé ana layang-èl liyané kang kinirim menyang akun iku, kowé kudu nututi panuntun ing layang-èl iku saperlu ngonfirmasi yèn akun iku pancèn duwèmu.",
        "throttled-mailpassword": "Layang kanggo mbalèkaké tembung wadi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung wadi kang bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Masalah pangirim layang: $1",
-       "acct_creation_throttle_hit": "Para neneka menyang wiki iki kang nganggo alamat IP-né panjenengan wis gawé {{PLURAL:$1|akun cacah 1|akun cacah $1}} sajeroné $2 pungkasan, kang cacahé nyandhak cacah maksimum kang diidinaké.\nTemahané, para neneka kang nganggo alamat IP iki ora bisa gawé akun manèh sauntara iki.",
-       "emailauthenticated": "Alamat layang-èlé panjenengan wis dikonfirmasi ing tanggal $2 pukul $3.",
-       "emailnotauthenticated": "Alamat layang-èlé panjenengan durung dikonfirmasi.\nLayang-èl ora bakal dikirim yèn gegayutan karo fitur-fitur iki.",
-       "noemailprefs": "Panjenengan kudu milih alamat e-mail supaya bisa nganggo fitur iki.",
-       "emailconfirmlink": "Ndhedhes (konfirmasi) alamat e-mail panjenengan",
+       "acct_creation_throttle_hit": "Para neneka menyang wiki iki kang nganggo alamat IP-mu wis gawé {{PLURAL:$1|akun cacah 1|akun cacah $1}} ing dalem $2 pungkasan, kang cacahé nyandhak cacah maksimum kang kaolèhaké.\nTemahané, para neneka kang nganggo alamat IP iki ora bisa gawé akun manèh sawatara wektu iki.",
+       "emailauthenticated": "Alamat layang èlèktronikmu wis kakonfirmasi ing tanggal $2 pukul $3.",
+       "emailnotauthenticated": "Alamat layang-èlèktronikmu durung kakonfirmasi.\nLayang Ã¨lèktronik ora bakal kakirim amarga gegayutan fitur-fitur ing sor iki.",
+       "noemailprefs": "Isi alamat layang èlèktronikmu ing pilalanmu supaya fitur-fitur iki murub.",
+       "emailconfirmlink": "Konfirmasi alamat layang èlèktronikmu",
        "invalidemailaddress": "Alamat e-mail iki ora bisa ditampa amarga formaté ora bener. Tulung lebokna alamat mawa format kang bener utawa kosongaké waé isèn mau.",
        "cannotchangeemail": "Alamat layang-èl akun ora bisa diowah ing wiki iki.",
        "emaildisabled": "Situs iki ora bisa ngirim layang èlèktronik.",
        "accountcreated": "Akun wis kagawé",
        "accountcreatedtext": "Akun panganggo [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|rembug]]) wis digawé.",
        "createaccount-title": "Gawé 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 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.",
+       "createaccount-text": "Ana kang nggawé akun nganggo alamat layang èlèktronikmu ing {{SITENAME}} ($4) aran \"$2\", mawa tembung wadi \"$3\".\nKowé kudu mlebu log lan ngowahi tembung wadimu saiki.\n\nKowé kena nglirwakaké layang iki, manawa akun iki kagawé ora sengaja amarga luput.",
+       "login-throttled": "Kowé wis njajal mlebu log ping akèh.\nEntènana $1 sadurung njajal manèh.",
+       "login-abort-generic": "Kowé ora bisa mlebu log - Kawurungaké",
+       "login-migrated-generic": "Akunmu wis ingalihan, lan jeneng panganggomu wis ora ana manèh ing wiki iki.",
        "loginlanguagelabel": "Basa: $1",
-       "suspicious-userlogout": "Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.",
-       "createacct-another-realname-tip": "Jeneng asli ora kudu diisi.\nYèn diisi, jeneng asliné panjenengan bakal kanggo atribusi awit karyané panjenengan.",
+       "suspicious-userlogout": "Panjalukmu supaya metu log tinulak amarga panjaluké kakirim saka pangluru kang rusak utawa proksi telih.",
+       "createacct-another-realname-tip": "Jeneng asli ora kudu kaisi.\nYèn koisi, jeneng asliné bakal kaanggo ing atribusi tumrap karyané.",
        "pt-login": "Mlebu log",
        "pt-login-button": "Mlebu log",
        "pt-login-continue-button": "Banjuraké mlebu log",
        "user-mail-no-addy": "Njajal ngirim layang èlèktronik tanpa alamat layang èlèktronik.",
        "user-mail-no-body": "Nyoba ngirim layang e-mail, tapi isine kosong.",
        "changepassword": "Ganti tembung wadi",
-       "resetpass_announce": "Saperlu ngrampungaké olèhé mlebu log, panjenengan kudu nggawé tembung wadi anyar.",
+       "resetpass_announce": "Saperlu ngrampungaké olèhé mlebu log, kowé kudu nggawé tembung wadi anyar.",
        "resetpass_text": "<!-- Tambahaké teks ing kéné -->",
        "resetpass_header": "Ganti tembung wadining akun",
        "oldpassword": "Tembung wadi lawas:",
        "newpassword": "Tembung wadi anyar:",
        "retypenew": "Isi manèh tembung wadi anyaré:",
        "resetpass_submit": "Setèl tembung wadi lan mlebu log",
-       "changepassword-success": "Tembung wadiné panjenengan kasil diowah!",
-       "changepassword-throttled": "Panjenengan wis kakèhan njajal mlebu log.\nTulung nunggu dhisik $1 sadurungé njajal manèh.",
+       "changepassword-success": "Tembung wadimu bisa ingowahan!",
+       "changepassword-throttled": "Kowé wis njajal mlebu log ping akèh.\nEntènana $1 sadurung njajal manèh.",
        "botpasswords": "Tembung wadi bot",
        "botpasswords-disabled": "Tembung wadiné bot dipatèni.",
-       "botpasswords-no-central-id": "Saperlu nganggo tembung wadiné bot, panjenengan kudu mlebu log menyang akun séntral.",
+       "botpasswords-no-central-id": "Saperlu nganggo tembung wadiné bot, kowé kudu mlebu log akun séntral.",
        "botpasswords-existing": "Tembung wadiné bot kang cumepak",
        "botpasswords-createnew": "Gawé anyar tembung wadiné bot",
        "botpasswords-editexisting": "Besut tembung wadiné bot kang anyar",
-       "botpasswords-label-needsreset": "(tembung wadi kudu panjenengan ambali setèl)",
+       "botpasswords-label-needsreset": "(tembung wadi kudu kasetèl ulang)",
        "botpasswords-label-appid": "Jeneng bot:",
        "botpasswords-label-create": "Gawé",
        "botpasswords-label-update": "Anyari",
        "botpasswords-bad-appid": "Jeneng bot \"$1\" ora trep.",
        "botpasswords-insert-failed": "Wurung nambah jeneng bot \"$1\". Apa wis tinambahaké sadurungé?",
        "resetpass_forbidden": "Tembung wadi ora bisa diganti",
-       "resetpass-no-info": "Panjenengan kudu mlebu log saperlu langsung ngaksès kaca iki.",
+       "resetpass-no-info": "Kowé kudu mlebu log saperlu ngaksès kaca iki langsung.",
        "resetpass-submit-loggedin": "Ganti tembung wadi",
        "resetpass-submit-cancel": "Wurung",
-       "resetpass-wrong-oldpass": "Tembung wadi saiki utawa sauntara ora trep.\nPanjengen bokmanawa wis ngganti tembung wadiné panjenengan utawa nyuwun tembung wadi sauntara kang anyar.",
+       "resetpass-wrong-oldpass": "Tembung wadi saiki utawa sadhéla ora trep.\nKowé bokmanawa wis ngganti tembung wadimu utawa njaluk tembung wadi sadhéla kang anyar.",
        "resetpass-temp-password": "Tembung wadi sauntara:",
        "resetpass-abort-generic": "Ngowahi tembung wadi kawurungaké déning èkstènsi.",
+       "resetpass-expired": "Tembung wadimu wis kadaluwarsa. Setèl tembung wadi anyar saperlu mlebu log.",
        "passwordreset": "Balèni gawé tembung wadi",
        "passwordreset-text-one": "Isi formulir iki kanthi jangkep kanggo nampa tembung wadi sauntara lumantar layang-èl.",
        "passwordreset-text-many": "{{PLURAL:$1|Isi salah siji babagan ing ngisor iki supaya bisa nampa tembung wadi sauntara lumantar layang-èl.}}",
        "passwordreset-emailelement": "Jeneng panganggo: \n$1\n\nTembung wadi sauntara: \n$2",
        "passwordreset-emailsentemail": "Yèn layang èlèktronik iki nggayut akun panjenengan, layang kanggo salin tembung wadi bakal dikirim.",
        "passwordreset-emailsentusername": "Manawa ana alamat layang-èl kang ana gayutané karo jeneng panganggo iki, layang-èl kanggo nyetèl ulang tembung wadi bakal dikirim.",
+       "passwordreset-nocaller": "Panyeluk kudu kaisi",
+       "passwordreset-nosuchcaller": "Panyeluk ora ana: $1",
+       "passwordreset-invalidemail": "Alamat layang èlèktronik ora trep",
        "changeemail": "Owah utawa busak alamat layang-èl",
        "changeemail-header": "Isi formulir iki saperlu salin alamat layang-èl panjenengan. Manawa panjenengan péngin ngilangi gegayutané alamat layang-èl saka akuné panjenengan, kosongaké waé babagan layang-èl anyar nalika ngirim formuliré.",
        "changeemail-no-info": "Panjenengan kudu mlebu log kanggo ngaksès kaca iki langsung.",
        "nowiki_sample": "Isi nganggo tulisan tanpa format ing kéné",
        "nowiki_tip": "Aja nganggo format wiki",
        "image_sample": "Conto.jpg",
-       "image_tip": "Barkas sisipan",
+       "image_tip": "Berkas sisipan",
        "media_sample": "Conto.ogg",
-       "media_tip": "Pranala barkas",
+       "media_tip": "Pranala berkas",
        "sig_tip": "Tapak asmané panjenengan mawa tandha wektu",
        "hr_tip": "Garis horisontal",
        "summary": "Ringkesan:",
        "summary-preview": "Pratuduh ringkesan besutan:",
        "subject-preview": "Pratuduh jejer:",
        "previewerrortext": "Ana masalah nalika njajal mratuduhaké owahané panjenengan.",
-       "blockedtitle": "Panganggo kapalangan",
-       "blockedtext": "<b>Asma panganggo utawa alamat IP panjenengan diblokir.</b>\n\nBlokir iki kang nglakoni $1.\nAlesané <i>$2</i>.\n\n* Diblokir wiwit: $8\n* Kadaluwarsa pemblokiran ing: $6\n* Kang arep diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké prakara iki.\n\nPanjenengan ora bisa nggunakaké fitur 'Kirim layang é-mail panganggo iki' kejaba panjenengan wis nglebokaké alamat é-mail kang trep ing [[Special:Preferences|prèferènsi]] panjenengan.\n\nAlamat IP panjenengan iku $3, lan ID pamblokiran iku #$5.\nTulung kabèh informasi ing ndhuwur iki disertakaké ing saben pitakon panjenengan.",
+       "blockedtitle": "Panganggo kapenggak",
+       "blockedtext": "<strong>Aran panganggomu utawa alamat IP-mu kapenggak.</strong>\n\nKang menggak ya iku $1.\nDhedhasaré <i>$2</i>.\n\n* Kapenggak wiwit: $8\n* Kapenggak nganti: $6\n* Kang arep diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké prakara iki.\n\nPanjenengan ora bisa nggunakaké fitur 'Kirim layang é-mail panganggo iki' kejaba panjenengan wis nglebokaké alamat é-mail kang trep ing [[Special:Preferences|prèferènsi]] panjenengan.\n\nAlamat IP panjenengan iku $3, lan ID pamblokiran iku #$5.\nTulung kabèh informasi ing ndhuwur iki disertakaké ing saben pitakon panjenengan.",
        "autoblockedtext": "Alamat IP-né panjenangan wis otomatis diblokir amarga dienggo déning panganggo liyané, kang diblokir déning $1.\n\n:<em>$2</em>\n\n* Wiwit diblokir: $8\n* Rampung diblokir: $6\n* Kang diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus]] liyané kanggo ngrembug blokirané.\n\nPanjenengan ora bisa nganggo fitur \"kirim layang-èl panganggo iki\" kajaba panjenengan wis ndhaftaraké alamat layang-èl kang trep ing [[Special:Preferences|pilalan panganggoné]] panjenengan lan panjenengan durung tau diblokir nalika nganggo iku.\n\nAlamat IP-né panjenengan kang saiki ya iku $3, lan ID blokirané ya iku $5. \nMangga wuwuhen kabèh rerincèn ing ndhuwur sajeroné samubarang pitakoné panjenengan.",
        "blockednoreason": "ora ana alesan kang diwènèhaké",
        "whitelistedittext": "Mangga $1 dhisik yèn arep mbesut kaca.",
        "missing-revision": "Révisi #$1 saka kaca aran \"{{FULLPAGENAME}}\" ora ana.\n\nIki biyasané kasababaké awit nututi pranala sajarah kang wis lawas saka kaca kang wis binusek.\nRerincèné bisa digolèki ing [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log besakan].",
        "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:",
+       "blocked-notice-logextract": "Panganggo iki lagi kapenggak.\nÈntri log penggakan kang pungkasan cumawis ing sor iki minangka rujukan:",
        "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.",
        "copyrightwarning": "Tulung dipun-gatèkaké manawa kabèh sumbangsih utawa kontribusi kanggo {{SITENAME}} iku dianggep wis diluncuraké miturut $2 GNU (mangga priksanen $1 kanggo ditèlé).\nManawa panjenengan ora karsa manawa tulisan panjenengan bakal disunting karo disebar, aja didokok ing kéné.<br />\nPanjenengan uga janji manawa apa-apa kang katulis ing kéné, iku karyané panjenengan dhéwé, utawa disalin saka sumber bébas. '''AJA NDOKOK KARYA KANG DIREKSA DÉNING UNDHANG-UNDHANG HAK CIPTA TANPA IDIN!'''",
        "copyrightwarning2": "Mangga digatèkaké yèn kabèh kontribusi marang {{SITENAME}} bisa disunting, diowahi, utawa dibusek penyumbang liyané. Yèn panjenengan ora karsa yèn tulisan panjenengan bisa disunting wong liya, aja ngirim artikel panjenengan ing kéné.<br />Panjenengan uga janji yèn tulisan panjenengan iku kasil karya panjenengan dhéwé, utawa disalin saka sumber umum utawa sumber bébas liyané (mangga delengen $1 kanggo informasi sabanjuré). '''AJA NGIRIM KARYA KANG DIREKSA DÉNING UNDHANG-UNDHANG HAK CIPTA TANPA IDIN!'''",
        "longpageerror": "'''Masalah: Tèks kang panjenengan lebokaké dawané {{PLURAL:$1|sak kilobita|$1 kilobita}}, luwih dawa saka maksimal {{PLURAL:$2|sak kilobita|$2 kilobita}}.'''\nKang mangkono ora bisa kasimpen.",
-       "readonlywarning": "<strong>Pepéling: Basis dhatah lagi ginembok amarga lagi karukti, mula panjenengan saiki ora bisa nyimpen besutané panjenengan.</strong>\nPanjenengan bokmanawa arep nurun tulisané panjenengan ing barkas tèks lan nyimpen iku kanggo mengko.\n\nPangurus kang nggembok basis dhatahé mènèhi panjlèntrèh mengkéné: $1",
+       "readonlywarning": "<strong>Pepéling: Sasana dhatah lagi ginembok amarga lagi karukti, mula kowé saiki ora bisa nyimpen besutanmu.</strong>\nKowé bokmanawa arep nurun tulisanmu menyang berkas tulisan lan nyimpen iku kanggo mengko.\n\nPangurus sistem kang nggembok iku wèwèh pawadan: $1",
        "protectedpagewarning": "<strong>Pélik: Kaca iki wis direksa, mula mung panganggo mawa hak mirunggan pangurus kang bisa mbesut.</strong>\nÈntri log kang pungkasan ana ing ngisor iki minangka rujukan:",
        "semiprotectedpagewarning": "<strong>Cathetan:</strong> Kaca iki pinuju direksa, mula mung panganggo kang kadhaftar kang bisa mbesut.\nÈntri log pungkasan cumepak ana ing ngisor kanggo rujukan:",
        "cascadeprotectedwarning": "<strong>Pènget:</strong> Kaca iki wis direksa saéngga mung panganggo kanthi hak pangurus waé kang bisa mbesut amarga kaca iki katranklusi ing {{PLURAL:$1|kaca|kaca-kaca}} kang kareksa runut ngisor iki:",
        "edit-no-change": "Besutané panjenengan dilirwakaké amarga ora ana owahan apa-apa tumraping tèksé.",
        "postedit-confirmation-created": "Kaca wis kagawé.",
        "postedit-confirmation-restored": "Kacané wis kapulihaké.",
-       "postedit-confirmation-saved": "Besutané panjenengan wis kasimpen.",
-       "postedit-confirmation-published": "Besutané panjenengan wis kababar.",
+       "postedit-confirmation-saved": "Besutanmu wis kasimpen.",
+       "postedit-confirmation-published": "Besutanmu wis kababar.",
        "edit-already-exists": "Ora bisa nggawé kaca anyar.\nKacané wis ana.",
        "defaultmessagetext": "Tèks layang gawan",
        "content-failed-to-parse": "Gagal menjabarkan konten $2 untuk model $1: $3",
        "undo-norev": "Besutan iki ora bisa diwurungaké amarga wis ora ana utawa wis binusek.",
        "undo-summary": "Mbalèkaké owahan $1 déning [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]])",
        "undo-summary-username-hidden": "Balèkaké owahan $1 déning panganggo kang didhelikaké",
-       "cantcreateaccount-text": "Saka alamat IP iki ('''$1''') ora diparengaké nggawé akun utawa kang. Kang mblokir utawa ora marengaké iku [[User:$3|$3]].\n\nAlesané miturut $3 yaiku ''$2''",
+       "cantcreateaccount-text": "Panggawéning akun saka alamat IP iki (<strong>$1</strong>) wis dipenggak [[User:$3|$3]].\n\nDhedhasaré pamenggak miturut $3 iku ''$2''",
        "cantcreateaccount-range-text": "Nggawe akun saka alamat IP \"$1\", kang kalebu IP panjenengan (<strong>$4</strong>), wis diblokir kaliyan [[User:$3|$3]].\n\nAlesan pamblokiran yaiku \"$2\"",
        "viewpagelogs": "Deleng cathetaning kaca iki",
        "nohistory": "Babading besutan kaca iki ora ana.",
        "revisiondelete": "Busak/wurung busak révisi",
        "revdelete-nooldid-title": "Révisi tujuan ora trep",
        "revdelete-nooldid-text": "Panjenengan durung mènèhi target revisi kanggo nglakoni fungsi iki.",
-       "revdelete-no-file": "Barkas kang panjenengan karsakaké ora ana.",
-       "revdelete-show-file-confirm": "Apa panjenengan yakin arep mriksa révisi kang kabusek saka barkas \"<nowiki>$1</nowiki>\" nalika $2 jam $3?",
+       "revdelete-no-file": "Berkas kang koarepi ora ana.",
+       "revdelete-show-file-confirm": "Apa kowé yakin arep mriksa révisi kang kabusek saka berkas \"<nowiki>$1</nowiki>\" nalika $2 pukul $3?",
        "revdelete-show-file-submit": "Iya",
        "logdelete-selected": "{{PLURAL:$1|Log kapilih|Log kapilih}} kanggo:",
        "revdelete-text-others": "Administrator liya isih bisa ngaksès isian ndhelik lan mulihaké iku saka pambusakan, kajaba rereksan tambahan disetèl.",
        "revdelete-suppress-text": "Pandhelikan révisi '''mung''' bisa dipigunakaké kanggo kasus ing ngisor:\n* Informasi kang kagolong pitnah\n* Informasi pribadi kang kurang pantes\n*: ''alamat omah lan nomer telepon, nomer kartu idhèntitas, lsp..''",
        "revdelete-legend": "Atur watesan:",
        "revdelete-hide-text": "Tulisan owahan",
-       "revdelete-hide-image": "Dhelikaké isi barkas",
+       "revdelete-hide-image": "Dhelikaké isining berkas",
        "revdelete-hide-name": "Dhelikaké tujuan lan paramèter",
        "revdelete-hide-comment": "Tingkesan besutan",
        "revdelete-hide-user": "Alamat IPné/jeneng panganggoné kang mbesut",
        "searchprofile-everything": "Kabèh",
        "searchprofile-advanced": "Lungidan",
        "searchprofile-articles-tooltip": "Golèkan ing $1",
-       "searchprofile-images-tooltip": "Golèk barkas",
+       "searchprofile-images-tooltip": "Golèk berkas",
        "searchprofile-everything-tooltip": "Golèk kabèh kontèn (kalebu ing kaca parembugan)",
        "searchprofile-advanced-tooltip": "Golèk ing mandhala aran tinamtu",
        "search-result-size": "$1 ({{PLURAL:$2|1 tembung|$2 tembung}})",
-       "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 barkas|$3 barkas}})",
+       "search-result-category-size": "{{PLURAL:$1|1 warga|$1 warga}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
        "search-redirect": "(alihan saka $1)",
        "search-section": "(pérangan $1)",
        "search-category": "(kategori $1)",
-       "search-file-match": "(cocog karo isi barkas)",
+       "search-file-match": "(cocog karo isi berkas)",
        "search-suggest": "Apa kang panjenengan karsakaké iki: $1",
        "search-rewritten": "Tuduhaké kasilé $1, nanging golèkaké $2.",
        "search-interwiki-caption": "Kasil saka proyèk-proyèk sababon",
        "prefs-searchoptions": "Golèk",
        "prefs-namespaces": "Mandhala aran",
        "default": "baku",
-       "prefs-files": "Barkas",
+       "prefs-files": "Berkas",
        "prefs-custom-css": "CSS priangga",
        "prefs-custom-js": "JavaScript priangga",
        "prefs-common-config": "CSS/JS barengan kabèh ules:",
        "userrights-reason": "Alesan:",
        "userrights-no-interwiki": "Panjenengan ora ana hak kanggo ngowahi hak panganggo ing wiki liyané.",
        "userrights-nodatabase": "Basis dhatah $1 ora ana utawa ora enggonan.",
-       "userrights-changeable-col": "Grup kang bisa panjenengan owahi",
-       "userrights-unchangeable-col": "Grup kang ora bisa diowahi panjenengan",
+       "userrights-changeable-col": "Golongan kang bisa koowahi",
+       "userrights-unchangeable-col": "Golongan kang ora bisa koowahi",
        "userrights-irreversible-marker": "$1*",
        "userrights-no-shorten-expiry-marker": "$1#",
        "userrights-expiry-current": "Kadaluwarsa $1",
        "userrights-expiry-options": "1 dina:1 dina,1 minggu:1 minggu,1 wulan:1 wulan,3 wulan:3 wulan,6 wulan:6 wulan,1 taun:1 taun",
        "userrights-invalid-expiry": "Wektu kadaluwarsa golongan \"$1\" ora trep.",
        "userrights-expiry-in-past": "Wektu kadaluwarsa golongan \"$1\" ana ing kala kawuri.",
-       "userrights-conflict": "Konflik pangowahan hak-hak panganggo! Tulung ditinjau maneh lan konfirmasi owah-owahané panjenengan.",
+       "userrights-conflict": "Cengkah owahan hak panganggo! Mangga priksa lan konfirmasi owahanmu.",
        "group": "Golongan:",
        "group-user": "Para panganggo",
        "group-autoconfirmed": "Panganggo kang otomatis kakonfirmasi",
        "right-move-subpages": "Pindhahaké kaca lan kabèh anak-kacané",
        "right-move-rootuserpages": "Ngalih kaca panganggo oyod",
        "right-move-categorypages": "Lih kaca kategori",
-       "right-movefile": "Lih barkas",
+       "right-movefile": "Lih berkas",
        "right-suppressredirect": "Aja nggawé pangalihan saka kaca kang lawas yèn mindhah kaca",
-       "right-upload": "Unggah barkas",
-       "right-reupload": "Tindhihana barkas kang ana",
-       "right-reupload-own": "Nimpa barkas kang ana lan diunggah panganggo kang padha",
-       "right-reupload-shared": "Timpanana barkas ing panyimpenan médhiya barengan lokal",
-       "right-upload_by_url": "Ngunggahaké barkas saka alamat URL",
+       "right-upload": "Unggah berkas",
+       "right-reupload": "Tindhihi berkas kang ana",
+       "right-reupload-own": "Tindhihi berkas kang ana kang diunggah siji wong",
+       "right-reupload-shared": "Tindhihi berkas ing panyimpenan médhiyah barengan lokal",
+       "right-upload_by_url": "Unggah berkas saka URL",
        "right-purge": "Kosongna ''cache'' situs iki kanggo kaca tanpa konfirmasi",
        "right-autoconfirmed": "Owah kaca-kaca sémi-reksa",
        "right-bot": "Anggepen minangka prosès otomatis",
        "right-editsemiprotected": "Owah kaca kang kareksa \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Besut modhèl kontèn kaca",
        "right-editinterface": "Besut antarmuka panganggo",
-       "right-editusercss": "Besut barkas-barkas CSS panganggo liya",
-       "right-edituserjson": "Besut barkas-barkas JSON panganggo liya",
-       "right-edituserjs": "Besut barkas-barkas JavaScript panganggo liya",
-       "right-editmyusercss": "Owahi barkas CSS panganggo panjenengan",
-       "right-editmyuserjson": "Owahi barkas JSON panganggo panjenengan",
-       "right-editmyuserjs": "Owahi barkas JavaScript panganggo panjenengan",
-       "right-viewmywatchlist": "Deleng pawawangané panjenengan",
+       "right-editusercss": "Besut berkas CSS panganggo liya",
+       "right-edituserjson": "Besut berkas JSON panganggo liya",
+       "right-edituserjs": "Besut berkas JavaScript panganggo liya",
+       "right-editmyusercss": "Besut berkas CSS panganggomu",
+       "right-editmyuserjson": "Besut berkas JSON panganggomu",
+       "right-editmyuserjs": "Besut berkas JavaScript panganggomu",
+       "right-viewmywatchlist": "Deleng pawawanganmu",
        "right-editmywatchlist": "Owahi pawawangané panjenengan. Cathetan: ana cara liyane kanggo nambahi kaca menyang pratélan, sanadyan ora duwe hak iki.",
        "right-viewmyprivateinfo": "Deleng dhata prianggané panjenengan dhéwé (kaya ta alamat layang-èl, jeneng asli)",
        "right-editmyprivateinfo": "Besut dhata prianggané panjenengan dhéwé (kaya ta alamat layang-èl, jeneng asli)",
-       "right-editmyoptions": "Owahi pilalané panjenengan",
+       "right-editmyoptions": "Besut pilalanmu dhéwé",
        "right-rollback": "Balèkaké kanthi gelis besutaning panganggo pungkasan kang mbesut kaca tinamtu",
        "right-markbotedits": "Tandhani besutan kang kawurungan yèn besutan bot",
        "right-noratelimit": "Ora kadayan watesing cacah besutan.",
        "right-import": "Impor kaca-kaca saka wiki liya",
-       "right-importupload": "Impor kaca saka unggahan barkas",
+       "right-importupload": "Impor kaca saka unggahan berkas",
        "right-patrol": "Tandhani besutané wong liya yèn wis kapriksa",
        "right-autopatrol": "Gawé supaya besutan otomatis tinengeran wis kapriksa",
        "right-patrolmarks": "Ndeleng tandha-tandha patroli owah-owahan anyar",
        "right-sendemail": "Ngirim layang listrik (e-mail) menyang panganggo liya",
        "grant-group-page-interaction": "Srawungan karo kaca",
        "grant-group-file-interaction": "Srawungan karo médhia",
-       "grant-group-watchlist-interaction": "Srawungan karo pawawangané panjenengan",
+       "grant-group-watchlist-interaction": "Srawung karo pawawanganmu",
        "grant-group-email": "Kirim layang-èl",
        "grant-group-high-volume": "Ngayahi kagiyatan kang akih",
        "grant-group-customization": "Panglarasan lan pilalan",
        "grant-group-administration": "Ngayahi laku administratif",
-       "grant-group-private-information": "Ngaksès dhata pribadhi ngenani panjenengan",
+       "grant-group-private-information": "Aksès dhatah pribadi bab kowé",
        "grant-group-other": "Kagiyatan rena-rena",
        "grant-blockusers": "Blokir lan uculaké blokirané panganggo",
        "grant-createaccount": "Gawé akun",
        "grant-editinterface": "Besut jagad aran MediaWiki lan CSS/JavaScript panganggo",
        "grant-editmycssjs": "Besut CSS/JavaScript panganggomu",
        "grant-editmyoptions": "Besut préferènsi panganggomu",
-       "grant-editmywatchlist": "Besut pawawangané panjenengan",
+       "grant-editmywatchlist": "Besut pawawangmu",
        "grant-editpage": "Besut kaca kang ana",
        "grant-editprotected": "Besut kaca kang kareksa",
        "grant-highvolume": "Besutan gedhi",
        "grant-protect": "Reksa lan uculi rereksané kaca",
        "grant-rollback": "Wurungaké owahané kaca",
        "grant-sendemail": "Kirim layang-èl menyang panganggo liyané",
-       "grant-uploadeditmovefile": "Unggah, ganti, lan lih barkas",
-       "grant-uploadfile": "Unggah barkas anyar",
+       "grant-uploadeditmovefile": "Unggah, ganti, lan lih berkas",
+       "grant-uploadfile": "Unggah berkas anyar",
        "grant-basic": "Hak pokok",
-       "grant-viewdeleted": "Deleng barkas lan kaca kang kabusek",
-       "grant-viewmywatchlist": "Deleng pawawangané panjenengan",
+       "grant-viewdeleted": "Deleng berkas lan kaca kang kabusek",
+       "grant-viewmywatchlist": "Deleng pawawanganmu",
        "grant-viewrestrictedlogs": "Deleng isian log kang winates",
        "newuserlogpage": "Log panganggo anyar",
        "newuserlogpagetext": "Ing ngisor iki kapacak log pandaftaran panganggo anyar.",
        "action-move-subpages": "lih kaca iki, lan anak-kacané",
        "action-move-rootuserpages": "ngalih kaca panganggo oyod",
        "action-move-categorypages": "alih kaca kategori",
-       "action-movefile": "alih barkas iki",
-       "action-upload": "ngunggah barkas iki",
-       "action-reupload": "nindhih barkas kang wis ana",
-       "action-reupload-shared": "nindhih barkas kang wis ana ing papan panyimpanan barkas kang dianggo bebarengan",
-       "action-upload_by_url": "unggahna barkas iki saka alamat URL",
+       "action-movefile": "ngalih berkas iki",
+       "action-upload": "ngunggah berkas iki",
+       "action-reupload": "nindhihi berkas kang ana iki",
+       "action-reupload-shared": "nindhihi berkas kang ana ing panyimpanan barengan iki",
+       "action-upload_by_url": "ngunggah berkas iki saka URL",
        "action-writeapi": "migunakaké API panulisan",
        "action-delete": "busak kaca iki",
        "action-deleterevision": "busak révisi",
        "action-protect": "owahi tataran rereksané kaca iki",
        "action-rollback": "gelis mbalèkaké suntingané panganggo pungkasan ing kaca tinamtu",
        "action-import": "impor kaca saka wiki liyané",
-       "action-importupload": "impor kaca iki saka pamunggahan barkas",
+       "action-importupload": "impor kaca saka unggahan berkas",
        "action-patrol": "nandhani besutan wong liya yèn wis kapriksa",
-       "action-autopatrol": "nandhani besutané panjenengan dhéwé yèn wis kapriksa",
+       "action-autopatrol": "nandhani besutanmu yèn wis kapriksa",
        "action-unwatchedpages": "deleng pratélan kaca kang ingawasan",
        "action-mergehistory": "nggabungaké sajarah kaca iki",
        "action-userrights": "besut kabèh hak panganggo",
        "action-userrights-interwiki": "besut hak aksès panganggo ing wiki liyané",
        "action-siteadmin": "nggembok utawa mbukak gembok basis dhatah",
        "action-sendemail": "kirim layang-èl",
-       "action-editmyoptions": "besut pilalané panjenengan",
-       "action-editmywatchlist": "owahi pawawangané panjenengan",
+       "action-editmyoptions": "besut pilalanmu",
+       "action-editmywatchlist": "besut pawawanganmu",
        "action-viewmywatchlist": "deleng pawawangané panjenengan",
        "action-viewmyprivateinfo": "deleng katerangan prianggané panjenengan",
        "action-editmyprivateinfo": "besut katerangan prianggané panjenengan",
        "rcfilters-filterlist-noresults": "Saringan ora katemu",
        "rcfilters-noresults-conflict": "Ora ana kasil amarga wewatoné kanggo nggolèk ana masalah",
        "rcfilters-filtergroup-authorship": "Pangripta besutan",
-       "rcfilters-filter-editsbyself-label": "Owah-owahané panjenengan",
+       "rcfilters-filter-editsbyself-label": "Owah-owahanmu",
        "rcfilters-filter-editsbyself-description": "Pasumbangmu dhéwé.",
        "rcfilters-filter-editsbyother-label": "Owah-owahané liyan",
-       "rcfilters-filter-editsbyother-description": "Kabèh owahan kajaba duwèké panjenengan.",
+       "rcfilters-filter-editsbyother-description": "Kabèh owahan kajaba duwému.",
        "rcfilters-filtergroup-user-experience-level": "Pandhaftaran lan pangalaman pangguna",
        "rcfilters-filter-user-experience-level-registered-label": "Kadhaftar",
        "rcfilters-filter-user-experience-level-registered-description": "Pambesut kang mlebu log.",
        "rcfilters-filter-major-description": "Besutan kang ora ditandhani minangka besutan cilik.",
        "rcfilters-filtergroup-watchlist": "Kaca ing pawawangan",
        "rcfilters-filter-watchlist-watched-label": "Ana ing Pawawangan",
-       "rcfilters-filter-watchlist-watched-description": "Owahané kaca-kaca ing Pawawangané panjenengan.",
+       "rcfilters-filter-watchlist-watched-description": "Owahaning kaca-kaca ing Pawawanganmu.",
        "rcfilters-filter-watchlist-watchednew-label": "Owah-owahané Pawawangan anyar",
        "rcfilters-filter-watchlist-watchednew-description": "Owah-owahan ngenani kaca-kaca ing Pawawangané panjenengan kang durung ditiliki.",
        "rcfilters-filter-watchlist-notwatched-label": "Ora ana ing Pawawangan",
        "recentchanges-page-removed-from-category": "[[:$1]] dibusak saka kategori",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] dibusak saka kategori, [[Special:WhatLinksHere/$1|kaca iki kalebu ing njeroné kaca liyané]]",
        "autochange-username": "Salin otomatis MediaWiki",
-       "upload": "Unggah barkas",
-       "uploadbtn": "Unggah barkas",
+       "upload": "Unggah berkas",
+       "uploadbtn": "Unggah berkas",
        "reuploaddesc": "Wurung ngunggah lan bali menyang formulir unggahan",
-       "upload-tryagain": "Kirim déskripsi barkas kang wis diowah",
+       "upload-tryagain": "Kirim wedharan barkas kang wis kadandani",
        "uploadnologin": "Durung mlebu log",
-       "uploadnologintext": "Sumangga $1 saperlu ngunggah barkas.",
+       "uploadnologintext": "Mangga $1 saperlu ngunggah berkas.",
        "upload_directory_missing": "Dhirèktori unggahan ($1) ora tinemu lan ora bisa digawé déning server wèb.",
        "upload_directory_read_only": "Dhirèktori pangunggahan ($1) ora bisa ditulis déning paladèn jaringan.",
        "uploaderror": "Masalah pangunggah",
-       "upload-recreate-warning": "'''Pèngetan: Barkas mawa jeneng iku wis dibusak utawa disingkiraké.'''\n\nLog pambusakan lan panyingkiran saka kaca iki sumadhiya ing kéné:",
+       "upload-recreate-warning": "<strong>Pepéling: Siji berkas mawa aran mangkono wis binusek utawa ingalihan.</strong>\n\nLog busekan lan lih-lihan tumrap kaca iki cumawis ing kéné:",
        "uploadtext": "Anggonen formulir ngisor iki saperlu ngunggah barkas.\nKanggo ndeleng utawa nggolèki barkas kang wis diunggah sadurungé, panjenengan menyanga [[Special:FileList|pratélan barkas unggahan]]. Barkas unggahan ulang uga kacathet ing [[Special:Log/upload|log unggah]], déné barkas busakan ing [[Special:Log/delete|log busak]].\n\nKanggo muwuhi barkas ing kaca, anggonen pranala kanthi formulir ing ngisor iki, pilih salah siji:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> saperlu nganggo barkasé kanthi vèrsi kang wutuh\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong> saperlu nganggo barkasé kanthi amba 200 piksel déné ana ing njeron kothak lan kapacak ing sisih kiwané kaca mawa \"alt text\" minangka katerangané\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> saperlu nggayutaké langsung barkasé tanpa mitontonaké barkasé dhéwé",
-       "upload-permitted": "{{PLURAL:$2|Jinis}} barkas kang kaolèhaké: $1.",
-       "upload-preferred": "{{PLURAL:$2|Jinis}} barkas kang kaprayogakaké: $1.",
-       "upload-prohibited": "{{PLURAL:$2|Jinis}} barkas kang kalarang: $1.",
+       "upload-permitted": "{{PLURAL:$2|Jinis}} berkas kang kaolèhaké: $1.",
+       "upload-preferred": "{{PLURAL:$2|Jinis}} berkas kang kaprayogakaké: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Jinis}} berkas kang kalarang: $1.",
        "uploadlogpage": "Log unggah",
-       "uploadlogpagetext": "Ing ngisor iki kapacak log pangunggahan barkas kang anyar dhéwé.\nMangga mirsani [[Special:NewFiles|galeri barkas anyar]] kanggo pratélan visual.",
-       "filename": "Jeneng barkas",
+       "uploadlogpagetext": "Ing sor iki kapacak log unggahan berkas kang anyar dhéwé.\nDeleng [[Special:NewFiles|gladri berkas anyar]] kapurih luwih cethané.",
+       "filename": "Aran berkas",
        "filedesc": "Ringkesan",
        "fileuploadsummary": "Ringkesan:",
-       "filereuploadsummary": "Owah-owahan barkas:",
+       "filereuploadsummary": "Owah-owahan berkas:",
        "filestatus": "Status hak cipta",
        "filesource": "Sumber",
-       "ignorewarning": "Lirwakaké pepéling lan simpen langsung barkasé.",
+       "ignorewarning": "Lirwakaké pepéling lan simpen langsung berkasé.",
        "ignorewarnings": "Lirwakaké samubarang pepéling",
-       "minlength1": "Jeneng barkas saorané ngemu sakurup.",
-       "illegalfilename": "Jeneng barkas \"$1\" ngandhut aksara kang ora diparengaké ana sajroning irah-irahan kaca. Mangga owahana jeneng barkas iku lan cobanen  diunggahaké manèh.",
-       "filename-toolong": "Jeneng barkas ora kena munjuli 240 bèt.",
-       "badfilename": "Jeneng barkas wis diowah dadi \"$1\".",
-       "filetype-mime-mismatch": "Èkstènsi barkas \".$1\" ora cocog karo jinis MIME kang kadètèk saka barkas ($2).",
-       "filetype-badmime": "Barkas jinis MIME \"$1\" ora kena kaunggah.",
+       "minlength1": "Jeneng berkas saorané ngemu sakurup.",
+       "illegalfilename": "Aran barkas \"$1\" ngemu karakter kang ora kaolèhaké ing sesirah kaca.\nMangga ganti araning berkasé lan jajal manèh ngunggah berkasé.",
+       "filename-toolong": "Aran barkas ora kena munjuli 240 bèt.",
+       "badfilename": "Aran berkas wis ingowahan dadi \"$1\".",
+       "filetype-mime-mismatch": "Èstènsi berkas \".$1\" ora cocog karo jinis MIME kang tinemu ing berkas ($2).",
+       "filetype-badmime": "Berkas mawa jinis MIME \"$1\" ora kena kaunggah.",
        "filetype-bad-ie-mime": "Ora bisa ngunggahaké barkas iki amarga Internet Explorer ndhétèksi minangka \"$1\", kang ora diidinaké lan minangka tipe barkas kang nduwèni potènsi mbebayani.",
        "filetype-unwanted-type": "<strong>\".$1\"</strong> iku jinis barkas kang ora kapéngini.\nAluwung {{PLURAL:$3|jinis barkasé}} $2.",
        "filetype-banned-type": "<strong>\".$1\"</strong> {{PLURAL:$4|dudu jinis barkas kang diidinaké}}.\n{{PLURAL:$3|Jinis barkas}} kang diidinaké $2.",
        "filetype-missing": "Barkas ini ora duwé ekstènsi (contoné \".jpg\").",
-       "empty-file": "Barkas kang panjenengan lebokaké kosong.",
-       "file-too-large": "Barkas kang panjenengan lebokaké kagedhèn.",
+       "empty-file": "Berkas kang kolebokaké kosong.",
+       "file-too-large": "Berkas kang kolebokaké kegedhèn.",
        "filename-tooshort": "Jeneng barkas kecendhèken.",
        "filetype-banned": "Barkas jinis iki dilarang.",
        "verification-error": "Barkas iki ora lulus vèrifikasi.",
-       "hookaborted": "Owahan kang panjenengan ayahi diwurungaké déning èkstènsi.",
+       "hookaborted": "Olèhmu ndandani diwurungaké èstènsi.",
        "illegal-filename": "Jeneng barkas ora diidinaké.",
        "overwrite": "Nibani barkas kang wis ana ora dililakaké.",
        "unknown-error": "Ana masalah kang ora dingertèni.",
        "tmp-write-error": "Ora bisa nulis barkas sauntara.",
        "large-file": "Ukuran barkas disaranaké supaya ora ngluwihi $1 bita; barkas iki ukurané $2 bita.",
        "largefileserver": "Barkas iki luwih gedhé tinimbang kang diidinaké ing paladèn.",
-       "emptyfile": "Barkas kang panjenengan unggahaké katoné kosong. Bokmanawa iki amarga anané salah ketik ing jeneng barkas. Mangga dipastèkaké apa panjenengan pancèn kersa ngunggahaké barkas iki.",
+       "emptyfile": "Berkas kang kounggah katon kosong.\nBokmanawa ana salah tik ing aran berkasé.\nMangga pesthèkaké yèn kowé pancèn péngin ngunggah berkas iki.",
        "windows-nonascii-filename": "Wiki iki ora nyengkuyung jeneng berkas mawa karakter kusus.",
        "fileexists": "Barkas mawa jeneng iku wis ana, mangga dipriksa <strong>[[:$1]]</strong> yèn panjenengan ora yakin sumedya ngowahiné.\n[[$1|thumb]]",
        "filepageexists": "Kaca dhèskripsi kanggo berkas iki wis digawé ing <strong>[[:$1]]</strong>, nanging saiki iki ora tinemu berkas mawa jeneng iku. Ringkesan kang panjenengan lebokaké ora bakal metu ing kaca dhèskripsi. Kanggo ngetokaké dhèskripsi iki, panjenengan kudu mbesut kanthi manual. [[$1|thumb]]",
        "zip-bad": "Barkas rusak utawa barkas ZIP kang ora bisa diwaca.\nKang mangkono ora bisa kapriksa kanthi patut kanggo kamanan.",
        "zip-unsupported": "Barkasé iku barkas ZIP kang nganggo piranti ZIP kang ora disengkuyung MediaWiki.\nKang mangkono ora bisa kapriksa kanthi patut kanggo kamanan.",
        "uploadstash": "Unggah pandhelikan",
-       "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-summary": "Kaca iki nyawisaké aksès marang berkas-berkas kang wis kaunggah utawa kang lagi kaunggah. Berkas-berkas iki ora katon tumrap sesapaa kajaba panganggo kang ngunggah baé.",
        "uploadstash-clear": "Busek barkas kadhelikaké",
        "uploadstash-nofiles": "Panjenengan ora duwé barkas simpenan.",
        "uploadstash-badtoken": "Nglakoni iki ora dadi, bokamanawa amarga hak besut panjenengan wis kadaluwarsa. Sumangga jajal manèh.",
        "listusersfrom": "Tuduhna panganggo kang diawali karo:",
        "listusers-submit": "Tuduhna",
        "listusers-noresult": "Panganggo ora ana.",
-       "listusers-blocked": "(diblokir)",
+       "listusers-blocked": "(kapenggak)",
        "activeusers": "Pratélan panganggo aktif",
        "activeusers-intro": "Iki pratélan panganggo kang katon lakuné ing $1 {{PLURAL:$1|dina|dina}} kapungkur.",
        "activeusers-count": "$1 {{PLURAL:$1|laku|laku}} ing {{PLURAL:$3|dina|$3 dina}} pungkasan",
        "protect_expiry_old": "Wektu kadaluwarsané ana ing kala kawuri.",
        "protect-unchain-permissions": "Urubaké opsi rereksan lanjutan",
        "protect-text": "Ing kéné, panjenengan bisa ndeleng lan ngganti tataran kareksan tumrap kaca <strong>$1</strong>.",
-       "protect-locked-blocked": "Panjenengan ora bisa ngowahi tataran rereksan nalika diblokir.\nMangkéné setèlan saiki tumrap kaca <strong>$1</strong>:",
+       "protect-locked-blocked": "Kowé ora bisa ngowahi tataran rereksan nalika kapenggak.\nMangkéné setèlan saiki tumrap kaca <strong>$1</strong>:",
        "protect-locked-dblock": "Tataran rereksan ora bisa diowahi amarga sasana dhatané digembok.\nMangkéné setèlan saiki tumrap kaca <strong>$1</strong>:",
        "protect-locked-access": "Akuné panjenengan ora kawogan ngowahi tataran rereksan kaca.\nMangkéné setèlan saiki tumrap kaca <strong>$1</strong>:",
        "protect-cascadeon": "Kaca iki lagi direksa amarga disertakaké ing {{PLURAL:$1|kaca|kaca-kaca}} kang wis direksa mawa pilihan pangreksan runtun diaktifaké. Panjenengan bisa ngganti tingkat pangreksan kanggo kaca iki, nanging perkara iku ora awèh pengaruh pangreksan runtun.",
        "uctop": "saiki",
        "month": "Saka wulan (lan sadurungé):",
        "year": "Saka taun (lan sadurungé):",
-       "sp-contributions-blocklog": "log blokir",
+       "sp-contributions-blocklog": "log penggakan",
        "sp-contributions-deleted": "pasumbangé {{GENDER:$1|panganggo}} kang kabusek",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "sp-contributions-talk": "rembug",
        "sp-contributions-userrights": "panataning hak {{GENDER:$1|panganggo}}",
-       "sp-contributions-blocked-notice": "Panganggo iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya ing ngisor kanggo rujukan:",
-       "sp-contributions-blocked-notice-anon": "Alamat IP iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya ing ngisor kanggo rujukan:",
+       "sp-contributions-blocked-notice": "Panganggo iki lagi kapenggak.\nÈntri log penggakan kang pungkasan cumawis ing sor iki minangka rujukan:",
+       "sp-contributions-blocked-notice-anon": "Alamat IP iki lagi kapenggak.\nÈntri log penggakan kang pungkasan cumawis ing sor iki minangka rujukan:",
        "sp-contributions-search": "Golèk pasumbang",
        "sp-contributions-username": "Alamat IP utawa jeneng panganggo:",
        "sp-contributions-toponly": "Tuduhaké besutan mligi révisi anyaran",
        "tooltip-t-info": "Katerangan liyané ngenani kaca iki",
        "tooltip-t-upload": "Unggah barkas",
        "tooltip-t-specialpages": "Pratélaning kabèh kaca mirunggan",
-       "tooltip-t-print": "Vèrsi céthak kaca iki",
+       "tooltip-t-print": "Vèrsi cithak kaca iki",
        "tooltip-t-permalink": "Pranala permanèn saka owahan iki",
        "tooltip-ca-nstab-main": "Deleng kaca kontèn",
        "tooltip-ca-nstab-user": "Deleng kaca panganggo",
        "tooltip-ca-nstab-category": "Deleng kaca kategori",
        "tooltip-minoredit": "Tandhani iki yèn besutan cilik",
        "tooltip-save": "Simpen owah-owahaning panjenengan",
-       "tooltip-publish": "Babar owahané panjenengan",
+       "tooltip-publish": "Babar owahanmu",
        "tooltip-preview": "Pratuduhana owah-owahaning panjenengan. Tulung ayahana iku sadurungé nyimpen.",
        "tooltip-diff": "Tuduhaké owahan endi kang panjenengan gawé tumrap tulisané",
        "tooltip-compareselectedversions": "Delengen prabédan antara rong vèrsi kaca iki kang dipilih.",
        "searchsuggest-containing": "ngemu...",
        "api-error-badtoken": "Masalah njero: Token ala.",
        "api-error-emptypage": "Nggawé kaca kosong anyar ora dilikaké.",
-       "api-error-publishfailed": "Masalah njero: Paladèn wurung mbabar barkas sawetara.",
+       "api-error-publishfailed": "Masalah njero: Paladèn wurung mbabar berkas sawetara.",
        "api-error-stashfailed": "Masalah njero: Paladèn wurung ndèkèk barkas sawetara.",
        "api-error-unknown-warning": "Pélik ora dingertèni: \"$1\".",
        "api-error-unknownerror": "Masalah ora dingertèni: \"$1\".",
-       "duration-seconds": "$1 {{PLURAL:$1|detik|detik}}",
+       "duration-seconds": "$1 {{PLURAL:$1|sekon|sekon}}",
        "duration-minutes": "$1 {{PLURAL:$1|menit|menit}}",
        "duration-hours": "$1 {{PLURAL:$1|jam|jam}}",
        "duration-days": "$1 {{PLURAL:$1|dina|dina}}",
        "duration-weeks": "$1 {{PLURAL:$1|minggu|minggu}}",
        "duration-years": "$1 {{PLURAL:$1|taun|taun}}",
-       "duration-decades": "$1 {{PLURAL:$1|dékade|dékade}}",
+       "duration-decades": "$1 {{PLURAL:$1|dasawarsa|dasawarsa}}",
        "duration-centuries": "$1 {{PLURAL:$1|abad|abad}}",
-       "duration-millennia": "$1 {{PLURAL:$1|milénium|milénium}}",
+       "duration-millennia": "$1 {{PLURAL:$1|miléniyum|miléniyum}}",
        "rotate-comment": "Gambar diubengaké $1 {{PLURAL:$1|drajat|drajat}} sak arah domé jam",
        "limitreport-title": "Parser profiling data:",
        "limitreport-cputime": "CPU time usage",
        "date-range-from": "Kawit tanggal:",
        "date-range-to": "Tumeka tanggal:",
        "randomrootpage": "Kaca wod sembarang",
-       "log-action-filter-block": "Jinis blokiran:",
+       "log-action-filter-block": "Jinis penggakan:",
        "log-action-filter-contentmodel": "Jinis owahan modhèl isi:",
        "log-action-filter-delete": "Jinis busakan:",
        "log-action-filter-import": "Jinis imporan:",
        "log-action-filter-rights": "Jinis owahan hak:",
        "log-action-filter-upload": "Jinis unggahan:",
        "log-action-filter-all": "Kabèh",
-       "log-action-filter-block-block": "Blokir",
+       "log-action-filter-block-block": "Penggak",
        "log-action-filter-block-reblock": "Modhifikasi blokiran",
        "log-action-filter-block-unblock": "Copot blokiran",
        "log-action-filter-contentmodel-change": "Owahan modhèl isi",
index ffdeba8..7f0cd37 100644 (file)
        "page_first": "პირველი",
        "page_last": "ბოლო",
        "histlegend": "ვერსიების შედარება: აირჩიეთ სასურველი ვერსიები რადიო-რგოლების მონიშვნით და დააწკაპუნეთ შედარების ღილაკზე.<br />\nლეგენდა: '''({{int:cur}})''' = სხვაობა მიმდინარე ვერსიასთან, '''({{int:last}})''' = სხვაობა წინა ვერსიასთან, '''{{int:minoreditletter}}''' = მცირე შესწორება.",
-       "history-fieldset-title": "á\83\95á\83\94á\83 á\83¡á\83\98á\83\94á\83\91á\83\98á\83¡ á\83«á\83\98á\83\94á\83\91ა",
+       "history-fieldset-title": "á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83¤á\83\98á\83\9aá\83¢á\83\95á\83 ა",
        "history-show-deleted": "მხოლოდ წაშლილი ვერსიები",
        "histfirst": "უძველესი",
        "histlast": "უახლესი",
        "prefs-watchlist-edits": "კონტროლის სიაში საჩვენებელი ცვლილებების მაქსიმალური რაოდენობა:",
        "prefs-watchlist-edits-max": "მაქსიმალური რაოდენობა: 1000",
        "prefs-watchlist-token": "კონტროლის სიის ტოკენი:",
+       "prefs-watchlist-managetokens": "ტოკენების მართვა",
        "prefs-misc": "სხვადასხვა",
        "prefs-resetpass": "შეცვალეთ პაროლი",
        "prefs-changeemail": "ელ-ფოსტის მისამართის შეცვლა ან წაშლა",
        "filehist-filesize": "ფაილის ზომა",
        "filehist-comment": "კომენტარი",
        "imagelinks": "ფაილის გამოყენება",
-       "linkstoimage": "მომდევნო {{PLURAL:$1|გვერდი|გვერდები}} ებმის ამ ფაილს:",
+       "linkstoimage": "მომდევნო {{PLURAL:$1|გვერდი იყენებს|გვერდები იყენებენ}} ამ ფაილს:",
        "linkstoimage-more": "$1-ზე მეტი {{PLURAL:$1|გვერდები|გვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.\nმოცემულ სიაში {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე.\nშეგიძლიათ ნახოთ ასევე [[Special:WhatLinksHere/$2|სრული სია]].",
-       "nolinkstoimage": "á\83\90á\83  á\83\90á\83 á\83¡á\83\94á\83\91á\83\9dá\83\91á\83¡ á\83\90á\83\9b á\83¤á\83\90á\83\98á\83\9aá\83\97á\83\90á\83\9c á\83\93á\83\90á\83\99á\83\90á\83\95á\83¨á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98.",
+       "nolinkstoimage": "á\83\94á\83¡ á\83¤á\83\90á\83\98á\83\9aá\83\98 á\83\90á\83 á\83ªá\83\94á\83 á\83\97 á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 á\83\90á\83  á\83\92á\83\90á\83\9bá\83\9dá\83\98á\83§á\83\94á\83\9cá\83\94á\83\91á\83\90.",
        "morelinkstoimage": "იხილეთ [[Special:WhatLinksHere/$1|სხვა ბმულები]] ამ ფაილზე.",
        "linkstoimage-redirect": "$1 (ფაილის გადამისამართება) $2",
        "duplicatesoffile": "{{PLURAL:$1|შემდეგი $1 ფაილი არის დუბლიკატი|შემდეგი $1 ფაილები არიან დუბლიკატები|შემდეგი $1 ფაილები არიან დუბლიკატები}} ამ ფაილისა ([[Special:FileDuplicateSearch/$2|დამატებითი ინფორმაცია]]):",
index 32ed1c2..7cc116e 100644 (file)
@@ -9,7 +9,8 @@
                        "Macofe",
                        "Kumkumuk",
                        "Asmen",
-                       "Gırd"
+                       "Gırd",
+                       "1917 Ekim Devrimi"
                ]
        },
        "tog-underline": "Bınê gırey de xete bonce:",
        "thumbnail_error": "Vıraştena resımê qıckeki de xeta: $1",
        "import-upload-filename": "Namê dosya:",
        "tooltip-pt-userpage": "Pela sımawa karberi",
-       "tooltip-pt-mytalk": "Pela sımawa hurênaişi",
+       "tooltip-pt-mytalk": "Pela {{GENDER:|toya}} werênayışi",
        "tooltip-pt-preferences": "Tercihê mı",
        "tooltip-pt-watchlist": "Lista pelunê ke to guretê şêrkerdene",
        "tooltip-pt-mycontris": "Lista iştıraqunê sıma",
index 769891d..2068d7a 100644 (file)
        "tog-useeditwarning": "바꾼 내용을 저장하지 않고 편집 페이지를 벗어날 때 내게 알리기",
        "tog-prefershttps": "로그인하는 동안 항상 보안 연결 사용",
        "tog-showrollbackconfirmation": "되돌리기 링크를 클릭할 때 확인창을 표시",
+       "tog-requireemail": "비밀번호 재설정을 위한 이메일 필요",
        "underline-always": "항상",
        "underline-never": "항상 긋지 않기",
        "underline-default": "스킨 또는 브라우저 기본값",
        "createaccountmail": "임의의 임시 비밀번호를 이메일로 보내기",
        "createaccountmail-help": "비밀번호를 기억하지 않고도 다른 사용자를 위한 계정을 만들 수 있습니다.",
        "createacct-realname": "실명 (선택 사항)",
-       "createacct-reason": "이유",
+       "createacct-reason": "이유 (기록은 공개됨)",
        "createacct-reason-ph": "다른 계정을 만들어야 하는 이유가 있나요",
        "createacct-reason-help": "계정 생성 로그에 표시되는 메시지",
        "createacct-submit": "계정 만들기",
index 643e52f..a5b82ce 100644 (file)
        "createaccountmail": "En temporäert zoufällegt Passwuert benotzen an et per E-Mail un déi spezifizéiert E-Mailadress schécken",
        "createaccountmail-help": "Ka benotzt gi fir e Benotzerkont fir eng aner Persoun unzeleeën ouni d'Passwuert gewuer ze ginn.",
        "createacct-realname": "Richtegen Numm (fakultativ)",
-       "createacct-reason": "Grond",
+       "createacct-reason": "Grond (ëffentlech geloggt)",
        "createacct-reason-ph": "Fir wat Dir een anere Benotzerkonnt uleet",
        "createacct-reason-help": "Message deen am Logbuch vun den ugeluechte Benotzerkonte gewise gëtt",
        "createacct-submit": "Äre Benotzerkont uleeën",
index 5924ed2..0ef842a 100644 (file)
        "cannotchangeemail": "郵址不可更於此wiki",
        "emaildisabled": "是站不可遣函也。",
        "accountcreated": "簿增矣",
-       "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|書]])簿增矣。",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|書]])簿增矣。",
        "createaccount-title": "於{{SITENAME}}增簿",
        "createaccount-text": "有人以汝電郵於{{SITENAME}}增簿。簿名為 \"$2\" ($4)。符節為 \"$3\" 。汝應登而更符節。\n\n如簿誤增,汝可略之。",
        "login-throttled": "汝嘗登簿甚矣。\n請候 $1 而試之。",
index b56f065..9ac57a6 100644 (file)
@@ -21,7 +21,7 @@
                        "NoiX180"
                ]
        },
-       "tog-underline": "Garih bawah pautan:",
+       "tog-underline": "Garih bawahi pautan:",
        "tog-hideminor": "Suruakkan suntiangan ketek di parubahan baru",
        "tog-hidepatrolled": "Suruakkan suntiangan nan lah dipatroli di parubahan tabaru",
        "tog-newpageshidepatrolled": "Suruakkan laman nan lah dipatroli dari daftar laman baru",
        "tog-diffonly": "Jan tampilan isi laman di bawah pabedoan suntiangan",
        "tog-showhiddencats": "Tunjuakan kategori tasuruak",
        "tog-norollbackdiff": "Jan tampilan pabedoan sasudah malakukan pangambalian",
-       "tog-useeditwarning": "Ingekan denai jikok maninggakan laman suntiang sabalun manyimpan parubahan",
+       "tog-useeditwarning": "Ingekan ambo kok maninggakan laman suntiang sabalun manyimpan parubahan",
        "tog-prefershttps": "Selalu gunokan koneksi aman katiko masuak log",
        "tog-showrollbackconfirmation": "Tampilkan konfirmasi katiko mangklik pautan pangambalian",
+       "tog-requireemail": "Paralu email untuak maatua ulang kato sandi",
        "underline-always": "Taruih",
-       "underline-never": "Indak pernah",
+       "underline-never": "Indak panah",
        "underline-default": "Kulik atau pangaturan paramban web",
        "editfont-style": "Gaya tulisan komputer pado kotak panyuntiangan:",
        "editfont-monospace": "Tulisan Monospace",
        "virus-scanfailed": "Pamindaian gagal (kode $1)",
        "virus-unknownscanner": "Antivirus indak dikenal:",
        "logouttext": "<strong>Sanak alah kalua log</strong>\n\nMohon diingek kalau babarapo laman mungkin masih tampil cando Sanak alun kalua log. Silakan untuak mambarasiahan singgahan panjalajah web Sanak.",
+       "logging-out-notify": "Sanak sadang kalua log, mohon manunggu sabanta",
+       "logout-failed": "Indak bisa kalua kini:$1",
        "cannotlogoutnow-title": "Indak bisa kalua kini",
        "cannotlogoutnow-text": "Indak bisa kalua katiko manggunoan $1.",
        "welcomeuser": "Salamaik datang, $1!",
        "createacct-realname": "Namo asli (opsional)",
        "createacct-reason": "Alasan",
        "createacct-reason-ph": "Manga Sanak mambuek akun lain",
+       "createacct-reason-help": "Pasan yang ditunjuakan dalam log pambuatan akun",
        "createacct-submit": "Buek akun Sanak",
        "createacct-another-submit": "ګڼون جوړول",
        "createacct-continue-submit": "Lanjuikan mambuek akun",
        "createacct-benefit-body2": "{{PLURAL:$1|laman}}",
        "createacct-benefit-body3": "{{PLURAL:$1|panyuntiang}} tarakhia",
        "badretype": "Kato sandi nan Sanak masuakan salah.",
+       "usernameinprogress": "Pambuatan akun untuak namo pangguno ko sadang dalam proses. Mohon manunggu",
        "userexists": "Namo pangguno nan dipiliah alah tapakai.\nPiliah namo nan lain.",
        "createacct-normalization": "Namo pangguno sanak akan disasuaian manjadi \"$2\" karano batasan teknis.",
        "loginerror": "Kasalahan masuak log",
        "login-migrated-generic": "Akun sanak alah dipindahan, namo pangguno Sanak alah indak tadaftar ini wiki ko.",
        "loginlanguagelabel": "Baso: $1",
        "suspicious-userlogout": "Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.",
+       "createacct-another-realname-tip": "Namo usali basifaik opsional. Kok Sanak mamakainyo, namo tu digunoan untuak manandoan jariah pangguno Sanak.",
        "pt-login": "Masuak log",
        "pt-login-button": "Masuak log",
        "pt-login-continue-button": "Lanjuikan masuak log",
        "changepassword-success": "Kato sandi Sanak alah berhasil dituka!",
        "changepassword-throttled": "Sanak alah acok bana mancubo masuak log. Mohon tunggu $1 sabalun mancubo baliak.",
        "botpasswords": "Kato sandi bot",
+       "botpasswords-summary": "<em>Kato sandi bot</em> mamungkinkan akses ka akun pangguno manggunokan API jo indak manggunokan kredensial masuak log utamo akun tasabuik. Hak pangguno nan tasadio katiko masuak log jo kato sandi bot mungkin ka dibatasi.\n\nKok Sanak indak tau dek a Sanak ka malakukan hal ko, sarancaknyo jan lakukan. Samustinyo indak ado urang lain nan buliah mamintak Sanak untuak mambuek jo manyarahan kato sandi bot ko kapadonyo.",
        "botpasswords-disabled": "Kato sandi bot indak diaktifan.",
        "botpasswords-no-central-id": "Untuak manggunoan kato sandi bot, Sanak harus masuak log ka akun nan alah disentralisasi.",
        "botpasswords-existing": "Kato sandi bot tasadio",
        "botpasswords-label-cancel": "Batalan",
        "botpasswords-label-delete": "Hapuih",
        "botpasswords-label-resetpassword": "Setel ulang kato sandi",
+       "botpasswords-label-grants": "Akses nan dapek diagiah:",
+       "botpasswords-help-grants": "Izin ka akses tatantu alah dipunyoi akun pangguno Sanak. Maaktifkan sabuah hak di siko indak maagiah akses ka akses lain nan indak dimiliki dek akun pangguno Sanak. Caliak [[Special:ListGrants|daftar hak akses]] untuak informasi salangkoknyo.",
        "botpasswords-label-grants-column": "Izin diagiah",
        "botpasswords-bad-appid": "Namo bot \"$1\" indak sah.",
        "botpasswords-insert-failed": "Gagal manambah namo bot \"$1\". Alah ditambahan sabalun iko?",
        "autoblockedtext": "Alamaik IP Sanak alah kanai sakek sacaro otomatih dek dipakai jo pangguno lain, nan alah disakek dek $1. Alasannyo dek:\n\n:<em>$2</em>\n\n* Kanai sakek sajak: $8\n* Maso sakek habih pado: $6\n* Sasaran nan disakek: $7\n\nSanak dapek maubuangi $1 atau [[{{MediaWiki:Grouppage-sysop}}|panguruih lainnya]] untuak marundiangan pakaro ko.\n\nSanak indak dapek manggunoan pakakeh \"{{int:emailuser}}\" kacuali Sanak alah mamasuakan alamaik surel nan sah pado [[Special:Preferences|pangaturan akun]] dan Sanak indak sadang disakek untuak manggunoannyo.\n\nAlamaik IP Sanak adolah $3, dan ID panyakekan adolah $5.\nTolong saratoan informasi di ateh pado satiok patanyaan nan Sanak buek.",
        "systemblockedtext": "Namo pangguno atau alamaik IP Sanak alah disakek sacaro otomatis dek MediaWiki.\nAlasan nan diagiah adolah:\n\n:<em>$2</em>\n\n* Disakek sajak: $8\n* Sakek kadaluwarsa pado: $6\n* Sasaran panyakekan: $7\n\nAlamaik IP Sanak kini adolah $3\nMohon saratokan sadoalah parincian di ateh dalam satiok patanyoan nan Sanak ajukan.",
        "blockednoreason": "indak ado alasan nan diagiah.",
+       "blockedtext-composite": "Namo pangguno atau alamaik IP Sanak alah disakek sacaro otomatis dek MediaWiki.\nAlasan nan diagiah adolah:\n\n:<em>$2</em>\n\n* Disakek sajak: $8\n* Sakek kadaluwarsa pado: $6\n* Sasaran panyakekan: $7\n\nAlamaik IP Sanak kini adolah $3\nMohon saratokan sadoalah parincian di ateh dalam satiok patanyoan nan Sanak ajukan.",
        "blockedtext-composite-ids": "Panyakekan ID relevan: $1 (alamaik IP Sanak juo dapek dicekal)",
        "blockedtext-composite-no-ids": "Alamaik IP Sanak muncua dalam daftar itam gando",
        "blockedtext-composite-reason": "Ado panyakekan bagando ka bakeh akun Sanak dan/atau alamaik IP Sanak.",
        "unsupported-content-diff2": "Pabedaan antaro model konten $1 jo $2 indak didukuang di wiki ko.",
        "deprecated-self-close-category": "Laman nan menggunoan tag HTML tatutuik-surang indak sah",
        "deprecated-self-close-category-desc": "Laman ko manganduang tag HTML tatutuik-surang nan indak sah, sarupo <code>&lt;b/></code> atau <code>&lt;span/></code>.  Parilaku tag sarupo ko ka sagiro barubah supayo konsisten jo spesifikasi HTML5, jadi panggunoannyo dalam teks wiki indak lai disarankan.",
+       "duplicate-args-warning": "<strong>Paringatan:</strong> [[:$1]] maimbau [[:$2]] jo nilai labiah dari ciek untuak parameter \"$3\". Anyo nilai tarakhia nan tasadio nan ka digunokan.",
+       "duplicate-args-category": "Laman jo argumen gando di pamanggilan templat",
+       "duplicate-args-category-desc": "Laman ko barisi pamanggilan templat nan manggunokan argumen gando, sarupo <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> atau <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''Paringatan:''' Laman ko manganduang talalu banyak panggilan fungsi parser.\n\nSeharusnyo kurang dari $2 {{PLURAL:$2|panggilan}}, tapi {{PLURAL:$1|kini ado $1 panggilan}}.",
        "expensive-parserfunction-category": "Laman nan talalu banyak panggilan fungsi parser",
        "post-expand-template-inclusion-warning": "'''Peringatan:''' Ukuran templat talalu gadang.\nBabarapo templat akan diabaikan.",
        "post-expand-template-argument-category": "Laman nan barisi uraian templat nan diabaikan",
        "parser-template-loop-warning": "Hubungan barulang templat tadeteksi: [[$1]]",
        "template-loop-category": "Laman jo templat barulang",
+       "template-loop-category-desc": "Laman ko manganduang templat malingka, yaitu templat nan maimbau dirinyo surang sacaro bolak-balik.",
+       "template-loop-warning": "<strong>Paringatan:</strong> Laman ko maimbau [[:$1]] nan manyababkan <i>template loop</i> (panggilan rekursif tak inggo).",
        "parser-template-recursion-depth-warning": "Limit kadalaman hubungan barulang templat lah talampau ($1)",
        "language-converter-depth-warning": "Bateh kadalaman pangonversi bahaso lah talampau ($1)",
        "node-count-exceeded-category": "Laman dimano hitungan-node talampaui",
+       "node-count-exceeded-category-desc": "Laman ko malampaui jumlah node maksimum.",
        "node-count-exceeded-warning": "Laman nan labiah jumlah node",
        "expansion-depth-exceeded-category": "Laman dima kadalaman ekspansi lah talampau",
+       "expansion-depth-exceeded-category-desc": "Laman nan malabiahi kadalaman laweh maksimum.",
        "expansion-depth-exceeded-warning": "Laman kadalaman ekspansi lah talampau",
        "parser-unstrip-loop-warning": "Unstrip loop detected",
        "unstrip-depth-warning": "Unstrip recursion limit exceeded ($1)",
+       "unstrip-depth-category": "Laman-laman di mano bateh kadalaman unstrip alah malabiahi bateh",
+       "unstrip-size-warning": "Bateh ukuran unstrip alah malabiahi bateh ($1)",
+       "unstrip-size-category": "Laman-laman di mano bateh ukuran unstrip alah malabiahi bateh",
        "converter-manual-rule-error": "Kasalahan tadeteksi di aturan manual konversi bahaso",
        "undo-success": "Suntiangan ko dapek dibatalan. \nTolong cek pabedoan di bawah untuak mayakinkan bahwa bana nan tu Sanak nio buek, lalu simpan parubahan tasabuik untuak manyalasaikan pambatalan suntiangan.",
        "undo-failure": "Suntiangan ko indak dapek dibatalan dek konflik panyuntiangan antaro.",
+       "undo-main-slot-only": "Suntiangan ko indak dapek dibatalkan dek tindakan ko malibaikkan konten di lua slot utamo.",
        "undo-norev": "Suntiangan ko indak dapek dibatalan dek laman indak ditamukan atau lah dihapuih.",
+       "undo-nochange": "Suntiangan ko nampaknyo alah dibatalkan.",
        "undo-summary": "Mambatalan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|maota]])",
        "undo-summary-anon": "Baliakan revisi $1 dek [[Special:Contributions/$2|$2]]",
+       "undo-summary-username-hidden": "Batalkan revisi $1 dek surang pangguno tasuruak",
        "cantcreateaccount-text": "Mambuek akun dari alamat IP ko ('''$1''') alah diblok jo [[User:$3|$3]].\n\nAlasan nan diagiah jo $3 adolah ''$2''",
+       "cantcreateaccount-range-text": "Pambuatan akun dari alamaik IP dalam rantang <strong>$1</strong>, nan mancakuik alamaik IP Sanak (<strong>$4</strong>), alah disakek dek [[User:$3|$3]].\n\nAlasan nan diagiah dek  $3  adolah <em>$2</em>",
        "viewpagelogs": "Caliak log untuak laman ko",
        "nohistory": "Indak ado sajarah panyuntiangan untuak laman ko",
        "currentrev": "Revisi tabaru",
        "history-feed-description": "Riwayaik revisi laman ko di wiki",
        "history-feed-item-nocomment": "$1 pado $2",
        "history-feed-empty": "Laman nan dicari indak ado.\nMungkin alah dihapuih dari wiki, atau diagiah namo baru.\nCuba [[Special:Search|cari dulu]] untuak laman lain nan relevan.",
+       "history-edit-tags": "Suntiang tag dari revisi nan tapiliah",
        "rev-deleted-comment": "(ikhtisar suntiangan dihapuih)",
        "rev-deleted-user": "(namo pangguno dihapuih)",
        "rev-deleted-event": "(rincian log dihapuih)",
        "rev-deleted-user-contribs": "[namo pangguno atau alamaik IP dihapuih - suntiangan disuruakan dari daftar jariah]",
        "rev-deleted-text-permission": "Revisi laman ko alah '''dihapuih'''.\nRinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pangapuihan]",
+       "rev-suppressed-text-permission": "Laman revisi ko alah '''dihapuih'''.\nSanak dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pangapuihan].",
        "rev-deleted-text-unhide": "Revisi laman ko alah '''dihapuih'''.\nRinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pangapuihan].\nSanak masih dapek [$1 mancaliak revisi ko] ko' amuah.",
        "rev-suppressed-text-unhide": "Revisi laman ko alah '''tabanam'''.\nRinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log pambanaman].\nAngku masih dapek [$1 maliek revisi ko] ko' amuah.",
        "rev-deleted-text-view": "Laman revisi ko alah '''dihapuih'''.\nSanak dapek mancaliaknyo; rinciannyo mungkin ado di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pangapuihan].",
        "revdelete-no-file": "Berkas nan dituju indak basobok.",
        "revdelete-show-file-confirm": "Apokah Sanak yakin nio mancaliak revisi nan alah dihapuih dari berkas \"<nowiki>$1</nowiki>\" per $3, $2?",
        "revdelete-show-file-submit": "Yo",
+       "revdelete-selected-text": "{{PLURAL:$1|Revisi tapiliah|Revisi tapiliah}} dari [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Versi berkas tapilih|Versi berkas tapiliah}} dari [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Log piliahan}}:",
+       "revdelete-text-text": "Revisi nan diapuik ka tatap muncua di laman riwayaik, tapi bagian dari kontennyo ka manjadi indak dapek diakses untuak umum.",
+       "revdelete-text-file": "Versi berkas nan diapuih ka tatap muncua di riwayaik berkas, tapi bagian dari kontennyo ka manjadi indak dapek diakses untuak umum.",
+       "logdelete-text": "Acara log nan diapuih ka tatap muncua di log, tapi bagian dari kontennyo manjadi indak dapek diakses untuak umum.",
+       "revdelete-text-others": "Panguruih lain masih dapek maakses konten tasuruak dan dapek mambatalkan pangapuihannyo, salain kok ado panarapan batasan tambahan.",
        "revdelete-confirm": "Tolong konfirmasi baso Sanak samemang bamakasuik malakuan iko, mamahami konsekuensinyo, dan baso Sanak malakuannyo sasuai jo [[{{MediaWiki:Policy-url}}|kabijakan]].",
        "revdelete-suppress-text": "Panyambunyian revisi <strong>hanyo</strong> buliah digunoan untuak kasus-kasus barikuik:\n* Informasi bapotensi pancemaran namo baiak\n* Informasi paribadi nan indak patuik\n*: <em>alamaik rumah jo nomor telepon, nomor kartu identitas, dll.</em>",
        "revdelete-legend": "Pangaturan bateh",
        "suppressionlog": "Log pambanaman",
        "suppressionlogtext": "Di bawah ko adolah daftar panghapuihan jo panyakekan, tamasuak isi nan disambunyian dari panguruih.\nCaliak [[Special:BlockList|daftar sakek]] untuak daftar nan paliang baru.",
        "mergehistory": "Gabuangan sijarah laman",
+       "mergehistory-header": "Laman ko mambuliahan Sanak untuak manggabuangkan revisi-revisi dari ciek laman sumber ka laman nan labiah baru.\nPastikan baso parubahan ko tatap mampatahankan kontinuitas versi laman tadahulu.",
        "mergehistory-box": "Gabuang parubahan-parubahan dari duo laman:",
        "mergehistory-from": "Laman sumber:",
        "mergehistory-into": "Laman tujuan:",
+       "mergehistory-list": "Mergeable edit history",
+       "mergehistory-merge": "Revisi-revisi barikuik dari [[:$1]] dapek digabuangkan ka [[:$2]]. Gunokan tombol radio untuak manggabuangkan revisi-revisi nan dibuek sabalun wakatu tatantu. Paratikan, manggunokan pautan navigasi ka mangeset ulang kolom.",
        "mergehistory-go": "Tampilan suntiangan nan dapek digabuang",
        "mergehistory-submit": "Gabuang revisi",
        "mergehistory-empty": "Indak ado parubahan nan dapek digabuang.",
        "mergehistory-done": "$3 {{PLURAL:$3|revision|revisions}} dari $1 {{PLURAL:$3|was|were}} berhasil digabuangan ka [[:$2]].",
        "mergehistory-fail": "Indak dapek digabuang, mohon pareso baliak laman jo parameter wakatu.",
+       "mergehistory-fail-bad-timestamp": "Stempel wakatu indak valid.",
        "mergehistory-fail-invalid-source": "Laman asal indak sah.",
        "mergehistory-fail-invalid-dest": "Laman tujuan indak sah.",
+       "mergehistory-fail-no-change": "Panggabuangan sijarah indak barhasil manggabuangkan revisi apo pun. Mohon pareso baliak parameter laman jo waktu.",
+       "mergehistory-fail-permission": "Izin panggabuangan sijarah laman indak mancukupi.",
        "mergehistory-fail-self-merge": "Laman sumber jo tujuannyo samo.",
+       "mergehistory-fail-timestamps-overlap": "Revisi asa tumpang tindih atau labiah baru dari revisi tujuan.",
+       "mergehistory-fail-toobig": "Indak dapek malakukan panggabuangan sabagai labiah dari bateh dari $1 {{PLURAL:$1|revisi|revisi}} ka dipindahkan.",
+       "mergehistory-no-source": "Laman sumber $1 indak ado.",
+       "mergehistory-no-destination": "Halaman tujuan $1 indak ado.",
+       "mergehistory-invalid-source": "Judul laman sumber harus judul nan balaku.",
+       "mergehistory-invalid-destination": "Judul halaman tujuan harus judul yang valid.",
+       "mergehistory-autocomment": "[[:$1]] alah digabuangkan ka [[:$2]]",
+       "mergehistory-comment": "[[:$1]] alah digabuangkan ka [[:$2]]: $3",
+       "mergehistory-same-destination": "Laman sumber jo tujuannyo indak samo.",
        "mergehistory-reason": "Alasan:",
        "mergelog": "Log panggabuangan",
        "revertmerge": "Batal gabuang",
        "diff-empty": "(Indak ado pabedaan)",
        "diff-multi-sameuser": "({{PLURAL:$1|Ciek parubahan antaro|$1 parubahan antaro}} dek pangguno nan samo indak ditampilkan)",
        "diff-multi-otherusers": "({{PLURAL:$1|Ciek parubahan antaro|$1 parubahan antaro}} dek {{PLURAL:$2|ciek pangguno lain|$2 pangguno}} indak ditampilkan)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Ciek parubahan antaro|$1 parubahan antaro}} dek {{PLURAL:$2|ciek pangguno lain|$2 pangguno}} indak ditampakan)",
+       "diff-paragraph-moved-tonew": "Paragraf alah dipindahan. Klik untuak mamindahan ka lokasi baru.",
+       "diff-paragraph-moved-toold": "Paragraf dipindahkan. Klik untuak malumpek ka lokasi lamo.",
+       "difference-missing-revision": "{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} indak basuo.\n\nIko biasonyo dek karano pautan sijarah alah kadaluarsa. Rinciannyo dapek dicaliak di  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "searchresults": "Hasil pancarian",
+       "search-filter-title-prefix": "Anyo mancari laman nan judulnyo diawali dek \"$1\"",
        "search-filter-title-prefix-reset": "Cari kasado laman",
        "searchresults-title": "Hasil pancarian untuak \"$1\"",
        "titlematches": "Judul laman pas",
        "search-category": "(kategori $1)",
        "search-file-match": "(isi berkas nan sasuai)",
        "search-suggest": "Mungkin makasuiknyo: $1",
+       "search-rewritten": "Manampilan hasil untuak $1. Cari selain $2.",
        "search-interwiki-caption": "Hasil dari proyek lain",
        "search-interwiki-default": "Hasil dari $1:",
        "search-interwiki-more": "(salanjuiknyo)",
        "search-interwiki-more-results": "hasil lainnyo",
        "search-relatedarticle": "Bakaitan",
+       "search-invalid-sort-order": "Parintah manyortir $1 indak dikenali, panyortiran standar ka ditarapan. Parintah-parintah manyortir nan sah iolah: $2",
+       "search-unknown-profile": "Profil pancarian $1 tidak dikenali, profil pancarian standar ka diterapan.",
        "searchrelated": "bakaitan",
        "searchall": "sadonyo",
        "showingresults": "Di bawah ko dikaluaan sampai {{PLURAL:$1|'''$1''' hasil}}, dimulai dari #'''$2'''.",
        "showingresultsinrange": "Manampilkan {{PLURAL:$1|<strong>$1</strong> hasil}} dalam rantang #<strong>$2</strong> sampai #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Hasia <strong>$1</strong> dari <strong>$3</strong>|Hasia <strong>$1 - $2</strong> dari <strong>$3</strong>}}",
        "search-nonefound": "Indak ado hasil nan sasuai jo pamintaan",
+       "search-nonefound-thiswiki": "Indak ado hasil nan sasuai jo pamintaan",
        "powersearch-legend": "Pencarian lanjut",
        "powersearch-ns": "Mancari di ruangnamo:",
        "powersearch-togglelabel": "Piliah:",
        "powersearch-toggleall": "Sadonyo",
        "powersearch-togglenone": "Dak ado",
+       "powersearch-remember": "Ingek piliahan untuak pancarian salanjuiknyo",
        "search-external": "Pancarian lua",
        "searchdisabled": "Pancarian {{SITENAME}} dimatian.\nSanak samantaro dapek mancari lewaik Google.\nIngek indeks Google untuak {{SITENAME}} mungkin lah kadaluarsa.",
+       "search-error": "Kasalahan tajadi wakatu mancari: $1",
+       "search-warning": "Paringatan tajadi katiko mancari:$1",
        "preferences": "Pangaturan",
        "mypreferences": "Pangaturan",
        "prefs-edits": "Jumlah suntiangan:",
+       "prefsnologintext2": "Silakan masuak log untuak mangubah preferensi Sanak.",
        "prefs-skin": "Kulik",
        "skin-preview": "Caliak",
        "datedefault": "Indak usah diatua",
        "prefs-watchlist": "Daftar pantau",
        "prefs-editwatchlist": "Suntiang daftar pantauan",
        "prefs-editwatchlist-label": "Suntiang entri daftar pantauan Sanak:",
+       "prefs-editwatchlist-edit": "Caliak jo apuih judul di daftar pantauan Sanak",
+       "prefs-editwatchlist-raw": "Suntiang pantauan mantah",
+       "prefs-editwatchlist-clear": "Apuih daftar pantauan",
        "prefs-watchlist-days": "Jumlah hari dalam daftar pantau:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|hari}}",
        "prefs-watchlist-edits": "Jumlah parubahan tabanyak nan ditunjuakan pado daftar pantau:",
        "prefs-watchlist-edits-max": "Nilai maksimum: 1000",
        "prefs-watchlist-token": "Token pantauan:",
+       "prefs-watchlist-managetokens": "Kalola token",
        "prefs-misc": "Lain-lain",
        "prefs-resetpass": "Tuka kato sandi",
        "prefs-changeemail": "Tuka atau hapuih alamaik surel",
        "recentchangesdays-max": "Maksimum $1 {{PLURAL:$1|hari}}",
        "recentchangescount": "Jumlah suntiangan nan ditunjuakan dalam parubahan baru, riwayaik laman, dan dalam log, sacaro baku:",
        "prefs-help-recentchangescount": "Nilai maksimum: 1000",
+       "prefs-help-watchlist-token2": "Iko adolah kunci rasio (token) ka umpan web dari daftar pantauan sanak.\nSia se nan tau dapek mancaliak daftar pantauan Sanak, jadi jan dibagian.\nKok diparaluan [[Special:ResetTokens|you can reset it]].",
+       "prefs-help-tokenmanagement": "Sanak dapek mancaliak jo maatua ulang kunci rahasio akun Sanak nan dapek maakses umpan Web dari daftar pantauan Sanak. Sia se nan tau bisa sajo mancaliak daftar pantauan Sanak, jadi jan dibagian.",
        "savedprefs": "Pangaturan lah tasimpan",
+       "savedrights": "Kalompok hak pangguno {{GENDER:$1|$1}} alah disimpan.",
        "timezonelegend": "Zona wakatu:",
        "localtime": "Wakatu satampaik:",
        "timezoneuseserverdefault": "Gunokan nan dari wiki ($1)",
        "timezoneuseoffset": "Lainnyo (tantuan pabedoannyo)",
+       "timezone-useoffset-placeholder": "Contoh nilai: \"-07:00\" atau \"01:00\"",
        "servertime": "Wakatu server:",
        "guesstimezone": "Isian dari paramban web",
        "timezoneregion-africa": "Afrika",
        "default": "baku",
        "prefs-files": "Berkas",
        "prefs-custom-css": "CSS surang",
+       "prefs-custom-json": "JSON kustom",
        "prefs-custom-js": "JS surang",
        "prefs-common-config": "CSS/JS babagi untuak kasado kulik:",
        "prefs-reset-intro": "Angku dapek manggunokan laman ko untuak mangambalikan pangaturan ka setelan baku situs ko.\nPangambalian pangaturan indak dapek dibatalan.",
        "prefs-displayrc": "Piliahan tampilan",
        "prefs-displaywatchlist": "Piliahan tampilan",
        "prefs-changesrc": "Parubahan ditampilkan",
+       "prefs-changeswatchlist": "Parubahan ditampilan",
+       "prefs-pageswatchlist": "Halaman nan dipantau",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Pabedoan",
+       "prefs-help-prefershttps": "Preferensi ko akan diaktifkan salunjuiknyo katiko Sanak masuak log.",
+       "prefswarning-warning": "Parubahan preferensi Sanak alun tasimpan. Kok Sanak maninggaan halaman ko tanpa ma klik $1 preferensi Sanak indak akan dipabarui.",
+       "prefs-tabs-navigation-hint": "Tip: Sanak dapek manggunoan tombol panah kida jo suok untuak banavigasi antartab di dalam daftar tab.",
        "userrights": "Hak pangguno",
        "userrights-lookup-user": "Piliah pangguno",
        "userrights-user-editname": "Masuakan namo pangguno:",
        "editusergroup": "Muek kalompok pangguno",
        "editinguser": "Mangganti hak pangguno untuak {{GENDER:$1|pangguno}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Mancaliak hak pengguna dari {{GENDER:$1|pengguno}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Suntiang kalompok {{GENDER:$1|pangguno}}",
        "userrights-viewusergroup": "Caliak kalompok {{GENDER:$1|pangguno}}",
        "saveusergroups": "Simpan kalompok {{GENDER:$1|pangguno}}",
        "userrights-expiry-options": "1 hari:1 hari,1 minggu:1 minggu,1 bulan:1 bulan,3 bulan:3 bulan,6 bulan:6bulan,1 taun:1 taun",
        "userrights-invalid-expiry": "Wakatu usang untuak kalompok \"$1\" indak sah.",
        "userrights-expiry-in-past": "Wakatu usang untuak kalompok \"$1\" alah balalu.",
+       "userrights-cannot-shorten-expiry": "Sanak indak dapek mamajuan wakatu kadaluarsa dari kaanggotaan dalam kalompok $1. Hanyo pangguno yang punyo hak akses manambahan jo mancabuik kalompok ko yang dapek mamajuan wakatu kadaluarsa.",
+       "userrights-conflict": "Konflik parubahan hak pangguno! Sila tinjau ulang jo konfirmasi parubahan Sanak.",
        "group": "Kalompok:",
        "group-user": "Pangguno",
        "group-autoconfirmed": "Pangguno takonfirmasi otomatih",
        "right-createpage": "Mambuek laman baru (nan bukan laman diskusi)",
        "right-createtalk": "Mambuek laman diskusi",
        "right-createaccount": "Mambuek akun baru",
+       "right-autocreateaccount": "Masuak log otomatis jo akun pangguno lua",
        "right-minoredit": "Manandoi suntiangan ketek",
        "right-move": "Mamindahan laman",
        "right-move-subpages": "Mamindahan laman jo kasado sublaman",
        "right-move-rootuserpages": "Mamindahan laman pangguno",
+       "right-move-categorypages": "Pindahan halaman kategori",
        "right-movefile": "Mamindahan berkas",
        "right-suppressredirect": "Indak mambuek pangaliahan wakatu mamindahan laman",
        "right-upload": "Mamuek berkas",
        "right-reupload": "Manimpo berkas lamo",
        "right-reupload-own": "Manimpo berkas nan dimuek surang",
+       "right-reupload-shared": "Manolak berkas-berkas pado panyimpanan media lokal basamo",
+       "right-upload_by_url": "Masuakan berkas dari alamat URL",
        "right-purge": "Mangapuih singgahan laman untuak laman",
        "right-autoconfirmed": "Indak dipangaruahi bateh limik babasis IP",
        "right-bot": "Dipalakuan sabagai proses otomatih",
        "right-apihighlimits": "Manggunoan bateh labiah tinggi dalam kueri API",
        "right-writeapi": "Manggunoan panulisan API",
        "right-delete": "Mangapuih laman",
+       "right-bigdelete": "Apuih halaman yang banyak versi terdahulunyo",
+       "right-deletelogentry": "Maapuih jo mambatalan pangapuihan entri log tatantu",
+       "right-deleterevision": "Maapuih jo mambatalan pangapuihan parubahan tatantu suatu halaman",
+       "right-deletedhistory": "Caliak revisi entri-entri yang diapuih, tanpa teks yang bahubuangan",
+       "right-deletedtext": "Caliak teks yang diapuih jo parubahan antaro revisi yang diapuih",
+       "right-browsearchive": "Cari laman nan dihapuih",
+       "right-undelete": "Mambaliakan halaman nan diapuih",
+       "right-suppressrevision": "Manampilan, manyambunyian jo mambatalan panyambunyian revisi tatantu suatu halaman dari pangguno",
+       "right-viewsuppressed": "Caliak parubahan yang disambunyian dari sadolah pangguno",
        "right-suppressionlog": "Mancaliak log privat",
+       "right-block": "Blokir pangguno lain dari panyuntingan",
+       "right-blockemail": "Mamblokir pangiriman surel dek pangguno",
+       "right-hideuser": "Mamblokir namo pangguno jo manyambunyiannyo dari publik",
+       "right-ipblock-exempt": "Mangabaikan pamblokiran IP, pamblokiran otomatis, jo jarak pamblokiran",
        "right-unblockself": "Malapehan sakek surang",
+       "right-protect": "Ubah tingkek palinduangan jo suntiang halaman yang dilinduangi baruntun",
+       "right-editprotected": "Manyuntiang halaman yang dilinduangi sabagai \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Manyuntiang antarmuko pangguno",
        "right-editusercss": "Manyuntiang berkas CSS pangguno lain",
        "right-edituserjson": "Manyuntiang berkas JSON pangguno lain",
index cfbea54..b7e3c12 100644 (file)
        "rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်",
        "rollbacklinkcount-morethan": "$1 ထက်ပိုသော {{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}}ကို နောက်ပြန်ပြင်ရန်",
        "rollbackfailed": "နောက်ပြန်ပြင်ခြင်း မအောင်မြင်ခဲ့ပါ။",
+       "cantrollback": "နောက်ပြန်မပြင်နိုင်ပါ၊ နောက်ဆုံးပံ့ပိုးသူမှာ ဤစာမျက်နှာ၏ တစ်ဦးတည်းသော စာရေးသူဖြစ်ပါသည်။",
        "editcomment": "တည်းဖြတ်မှု အကျဉ်းချုပ်မှာ: <em>$1</em>။",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ ပြင်ဆင်မှုများကို [[User:$1|$1]] ၏ နောက်ဆုံးတည်းဖြတ်မူသို့ နောက်ပြန် ပြန်ပြင်ခဲ့သည်",
+       "rollback-success": "{{GENDER:$3|$1}} မှ နောက်ပြန်ပြင်ခဲ့သည်၊  {{GENDER:$4|$2}} ၏ နောက်ဆုံးမူသို့ ပြန်ပြောင်းခဲ့သည်။",
        "changecontentmodel": "စာမျက်နှာ၏ မာတိကာမော်ဒယ်ကို ပြောင်းလဲရန်",
        "changecontentmodel-legend": "မာတိကာမော်ဒယ်ကို ပြောင်းလဲရန်",
        "changecontentmodel-title-label": "စာမျက်နှာ ခေါင်းစဉ်",
        "tag-mw-undo": "နောက်ပြန် ပြန်ပြင်ခြင်း",
        "tags-title": "အမည်တွဲများ",
        "tags-tag": "အမည်တွဲ အမည်",
+       "tags-display-header": "ပြောင်းလဲချက် စာရင်းများပေါ်တွင် ပေါ်ထင်မှု",
        "tags-description-header": "ဆိုလိုရင်းအဓိပ္ပာယ် အပြည့်အစုံ",
        "tags-source-header": "ရင်းမြစ်",
        "tags-active-header": "သက်ဝင်?",
+       "tags-hitcount-header": "အမည်တွဲထားသော ပြောင်းလဲမှုများ",
        "tags-actions-header": "ဆောင်ရွက်ချက်များ",
        "tags-active-yes": "မှန်",
        "tags-active-no": "မလုပ်ပါ",
index 3365b11..be1c459 100644 (file)
        "tool-link-userrights": "Càgna gruppe {{GENDER:$1|utente}}",
        "tool-link-userrights-readonly": "Vire gruppe {{GENDER:$1|utente}}",
        "tool-link-emailuser": "Manna na masciata email a st'{{GENDER:$1|utente}}",
-       "imagepage": "Vere a paggena d' 'o file",
-       "mediawikipage": "Vere 'a mmasciata",
-       "templatepage": "Vere 'o template",
-       "viewhelppage": "Vere 'a paggena 'e ajùto",
-       "categorypage": "Vere 'a categurìa",
+       "imagepage": "Vire 'a paggena d' 'o file",
+       "mediawikipage": "Vire 'a mmasciata",
+       "templatepage": "Vire 'o template",
+       "viewhelppage": "Vire 'a paggena 'e ajùto",
+       "categorypage": "Vire 'a categurìa",
        "viewtalkpage": "Vere 'a paggena 'e chiàcchierate",
        "otherlanguages": "Ate lengue",
        "redirectedfrom": "(Redirect 'a $1)",
        "youhavenewmessagesmulti": "Tiene nuove mmasciate $1",
        "editsection": "càgna",
        "editold": "càgna",
-       "viewsourceold": "vere sorgente",
+       "viewsourceold": "vire sorgente",
        "editlink": "càgna",
        "viewsourcelink": "Vire sorgente",
        "editsectionhint": "Modifica a sezzione $1",
        "perfcachedts": "'E ddate ca stanno ccà songhe asciute 'a na copia \"cache\" d' 'o database, 'o cuale tene l'úrdemo agghiurnamento 'o $1. Nu massimo 'e {{PLURAL:$4|unu risultato è|$4 risultate songhe}} a disposizione dint'a \"cache\".",
        "querypage-no-updates": "Ll'agghiurnamente pe' sta paggena songo sospese mmo'. 'E ddate cuntenute ccà nun s'agghiurnarranno.",
        "viewsource": "Vere sorgente",
-       "viewsource-title": "Vere surgente 'e $1",
+       "viewsource-title": "Vire surgente 'e $1",
        "actionthrottled": "Azione ritardata",
        "actionthrottledtext": "Comme mesùra anti-abuse, site lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mo stu lèmmeto l'avite superato.\nPe piacere pruvate n'ata vota dint'a quacche minuto.",
        "protectedpagetext": "Sta paggena s'è prutetta pe ne ntuppà 'o càgno o quacche ata azione.",
        "next-page": "paggena aroppo",
        "prevn-title": "{{PLURAL:$1|Risultato precediente|$1 risultate precedenti}}",
        "nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
-       "shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
-       "viewprevnext": "Vere($1 {{int:pipe-separator}} $2) ($3).",
+       "shown-title": "Fa verè {{PLURAL:$1|nu risultato|$1 risultate}} pe paggena",
+       "viewprevnext": "Vire ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Ncopp' 'o sito esiste na paggena c' 'o nomme \"[[:$1]]\"'''\n{{PLURAL:$2|0=|Vedite pure dint'a l'ati risultate 'e cerca.}}",
        "searchmenu-new": "<strong>'''Crèa 'a paggena \"[[:$1]]\" ncopp'a stu wiki!'''</strong> {{PLURAL:$2|0=|Vedite pure 'a paggena truvata c' 'a recerca vuosta|Vedite pure 'e risultate d\"a recerca}}",
        "searchprofile-articles": "Paggene 'e contenute",
        "tooltip-ca-talk": "Vide 'e chiacchere rilative a chesta paggena",
        "tooltip-ca-edit": "Cagna sta paggena",
        "tooltip-ca-addsection": "Cummincia 'na nova sezzione",
-       "tooltip-ca-viewsource": "Chista paggena è prutetta, ma puo vere 'o codice sorgente",
+       "tooltip-ca-viewsource": "Chista paggena è prutetta, ma può verè 'o codice sorgente",
        "tooltip-ca-history": "Vversione 'e primma 'e chesta paggena",
        "tooltip-ca-protect": "Prutegge chesta paggena",
        "tooltip-ca-unprotect": "Càgna 'a prutezzione 'e chesta paggena",
        "tooltip-t-specialpages": "Lista 'e tutte e paggene speciale",
        "tooltip-t-print": "Vversione pe stampà 'a chesta paggena",
        "tooltip-t-permalink": "Jonta permanente a chesta vversione dda paggena",
-       "tooltip-ca-nstab-main": "Vere a paggena e contenuto",
-       "tooltip-ca-nstab-user": "Vere a paggena utente",
+       "tooltip-ca-nstab-main": "Vire 'a paggena 'e contenuto",
+       "tooltip-ca-nstab-user": "Vire 'a paggena utente",
        "tooltip-ca-nstab-media": "Vide 'a pàggena d' 'e media",
        "tooltip-ca-nstab-special": "Chesta è 'na paggena speciale e nun può essere càgnata",
-       "tooltip-ca-nstab-project": "Vere a paggena 'e servizio",
+       "tooltip-ca-nstab-project": "Vire 'a paggena 'e servizio",
        "tooltip-ca-nstab-image": "Vere a paggena ddo file",
        "tooltip-ca-nstab-mediawiki": "Vide 'a mmasciata d' 'o sistema",
-       "tooltip-ca-nstab-template": "Vere 'o modello",
+       "tooltip-ca-nstab-template": "Vire 'o modello",
        "tooltip-ca-nstab-help": "Vide 'a paggena d'aiuto",
-       "tooltip-ca-nstab-category": "Vere a paggena d\"a categurìa",
+       "tooltip-ca-nstab-category": "Vire 'a paggena d' 'a categurìa",
        "tooltip-minoredit": "Rénne chìsto cagnamiénto cchiù ppiccirìllo.",
        "tooltip-save": "Sàrva 'e cagnamiénte.",
        "tooltip-publish": "Pubbreca 'e cagnamiente vuoste",
index 6ac7d39..626fbc8 100644 (file)
@@ -59,7 +59,7 @@
        "tog-diffonly": "Under wysigingen neet de syde-inhold låten seen.",
        "tog-showhiddencats": "Låt verbörgen kategoryen seen",
        "tog-norollbackdiff": "Wysigingen vordlåten nå et weaderümmedraien",
-       "tog-useeditwarning": "Wårschüw my as ik een bewarkede syde afsluten wil dee noch neet upslöägen is",
+       "tog-useeditwarning": "Wårschüw my as ik een bewarkede syde afsluten wil dee noch neet seakerd is",
        "tog-prefershttps": "Altyd een beveiligde verbinding bruken as jy anmelded binnet",
        "underline-always": "Altyd",
        "underline-never": "Nooit",
        "edit-local": "Lokale beschrieving bewarken",
        "create": "Anmaken",
        "create-local": "Lokale beskryving tovogen",
-       "delete": "Vortsmyten",
+       "delete": "Vordsmyten",
        "undelete_short": "$1 {{PLURAL:$1|versy|versys}} weaderümmeplaatsen",
        "viewdeleted_short": "{{PLURAL:$1|Eyn versy dee vordsmeaten is|$1 versys dee vortsmeaten binnet}} bekyken",
        "protect": "Beveiligen",
        "nstab-category": "Kategory",
        "mainpage-nstab": "Vöärblad",
        "nosuchaction": "De upgeaven handeling besteyt neet",
-       "nosuchactiontext": "De opdrachte in t webadres in ongeldig.\nJe hebben t webadres misschien verkeerd in-etikt of de verkeerde verwiezing evolgd.\nDit kan oek dujen op n fout in de programmatuur van {{SITENAME}}.",
-       "nosuchspecialpage": "Der besteet gien spesiale zied mit disse naam",
-       "nospecialpagetext": "<strong>Disse spesiale zied wörden niet herkend deur de programmatuur.</strong>\n\nn Lieste mit bestaonde spesiale ziejen ku'j vienen op [[Special:SpecialPages|{{int:specialpages}}]].",
-       "error": "Foutmelding",
-       "databaseerror": "Fout in de databanke",
-       "databaseerror-text": "Der is wat mis egaon bie n databankzeukopdrachte.\nDit kan betekenen dat der n fout in de programmtuur zit.",
-       "databaseerror-textcl": "Der is wat mis egaon bie n databankzeukopdrachte.",
-       "databaseerror-query": "Zeukopdrachte: $1",
-       "databaseerror-function": "Funksie: $1",
-       "databaseerror-error": "Fout: $1",
-       "laggedslavemode": "<strong>Waorschuwing:</strong> t is meugelik dat leste wiezigingen in de tekste van dit artikel nog niet verwarkt bin.",
+       "nosuchactiontext": "De updracht in et webadres in ungeldig.\nJy hebbet et webadres meskeen verkeyrd intyped of de verkeyrde verwysing volgd.\nDit kan ouk düden up een faut in de programmatuur van {{SITENAME}}.",
+       "nosuchspecialpage": "Der besteyt geen speciale syde mid disse name",
+       "nospecialpagetext": "<strong>Disse speciale syde wördt neet herkend döär de programmatuur.</strong>\n\nEen lyste mid bestånde speciale syden kün jy vinden up [[Special:SpecialPages|{{int:specialpages}}]].",
+       "error": "Faut",
+       "databaseerror": "Databankfaut",
+       "databaseerror-text": "Der is wat mis gån by een databanksöökupdracht.\nDit kan beteykenen dat der een faut in de programmtuur sit.",
+       "databaseerror-textcl": "Der is wat mis gån by een databanksöökupdracht.",
+       "databaseerror-query": "Söökupdracht: $1",
+       "databaseerror-function": "Funkty: $1",
+       "databaseerror-error": "Faut: $1",
+       "laggedslavemode": "<strong>Wårschüwing:</strong> et kan weasen dat de lätste wysigingen up disse syde noch neet upnöämen binnet.",
        "readonly": "De databanke is beveiligd",
-       "enterlockreason": "Waorumme en veur hoe lange is t eblokkeerd?",
-       "readonlytext": "De databanke van {{SITENAME}} is noen esleuten veur nieje bewarkingen en wiezigingen, warschienlik veur bestaandsonderhoud. De verantwoordelike systeembeheerder gaf hierveur de volgende reden op: '''$1'''",
-       "missing-article": "In de databanke steet gien tekste veur de zied \"$1\" die der wel in zol mutten staon ($2).\n\nDit kan koemen deurda'j n ouwe verwiezing naor t verschil tussen twee versies van n zied volgen of n versie opvragen die vortedaon is.\n\nAs dat niet zo is, dan he'j misschien n fout in de programmatuur evunnen.\nMeld t dan effen bie n [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENAME}} en vermeld derbie de internetverwiezing van disse zied.",
-       "missingarticle-rev": "(versienummer: $1)",
-       "missingarticle-diff": "(Wieziging: $1, $2)",
-       "readonly_lag": "De databanke is automaties beveilig, zodat de ondergeschikten servers zich kunnen synchroniseren mit de sentrale server.",
-       "internalerror": "Interne fout",
-       "internalerror_info": "Interne fout: $1",
-       "filecopyerror": "Kon bestaand \"$1\" niet naor \"$2\" kopiëren.",
-       "filerenameerror": "Bestaandsnaamwieziging \"$1\" naor \"$2\" niet meugelik.",
-       "filedeleteerror": "Kon bestaand \"$1\" niet vortdoon.",
-       "directorycreateerror": "Map \"$1\" kon niet an-emaakt wörden.",
-       "directoryreadonlyerror": "De map \"$1\" is allinnig-lezen.",
-       "directorynotreadableerror": "De map \"$1\" kan niet elezen wörden.",
-       "filenotfound": "Kon bestaand \"$1\" niet vienen.",
-       "unexpected": "Onverwachten weerde: \"$1\"=\"$2\".",
-       "formerror": "Fout: kon formulier niet versturen",
-       "badarticleerror": "Disse haandeling kan op disse zied niet uutevoerd wörden.",
-       "cannotdelete": "De zied of t bestaand \"$1\" kon niet vortedaon wörden.\nt Kan ween dat n aander t al vortedaon hef.",
-       "cannotdelete-title": "Zied \"$1\" kan niet vortedaon wörden",
-       "delete-hook-aborted": "t Vortdoon wördt in t wiere eschopt deur n toepassige van MediaWiki.\nDer is gien veerdere informasie beschikbaor.",
-       "no-null-revision": "Kon gien lege nieje versie maken veur de zied \"$1\"",
-       "badtitle": "Ongeldige naam",
-       "badtitletext": "De naam van de op-evreugen zied is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.",
-       "perfcached": "Disse gegevens koemen uut t tussengeheugen en bin misschien niet aktueel. Der {{PLURAL:$1|is hooguut een resultaot|bin hooguut $1 resultaoten}} beschikbaor in t tussengeheugen.",
-       "perfcachedts": "Disse gegevens koemen uut t tussengeheugen die veur t lest bie-ewörken is op $2 um $3. Der {{PLURAL:$4|is hooguut een resultaot|bin hooguut $4 resultaoten}} beschikbaor in t tussengeheugen.",
-       "querypage-no-updates": "'''Disse zied wördt niet meer bie-ewörken.'''",
+       "enterlockreason": "Voor een readen in vöär de vergrendeling, en geav up wanneyr et ungeaver vrygeaven wördt.",
+       "readonlytext": "De databanke is up et moment slöäten vöär nye inbreng en andere wysigingen, wårskynlik vöär rutinemåtig underhold, wårnå et weader lös geyt. \n\nDe systeembeheyrder gav hyrvöär de volgende readen up: $1",
+       "missing-article": "In de databanke steyt geen tekst vöär de syde \"$1\" dee der wel in sol mütten stån ($2).\n\nDit geböärt meystentyds as jy een olde verwysing nå et verskil tüsken twey versys van een syde volgen of as jy een versy upvrågen dee vordsmeaten is.\n\nAs dat neet so is, dan heb jy meskeen een faut in de programmatuur evünden.\nMeld et dan by een [[Special:ListUsers/sysop|systeembeheyrder]], en vermeld et webadres derby.",
+       "missingarticle-rev": "(versynummer: $1)",
+       "missingarticle-diff": "(Wysiging: $1, $2)",
+       "readonly_lag": "De databanke is automatisk vergrendeld terwyl de undergeskikede servers sik synchroniseren künnet mid de centrale server.",
+       "internalerror": "Interne faut",
+       "internalerror_info": "Interne faut: $1",
+       "filecopyerror": "Kun bestand \"$1\" neet nå \"$2\" kopieren.",
+       "filerenameerror": "\"$1\" kun neet hernöömd wörden nå \"$2\".",
+       "filedeleteerror": "Bestand \"$1\" kun neet vordsmeaten wörden.",
+       "directorycreateerror": "De map \"$1\" kun neet anmaked wörden.",
+       "directoryreadonlyerror": "De map \"$1\" is allinnig-leasen.",
+       "directorynotreadableerror": "De map \"$1\" kan neet leasen wörden.",
+       "filenotfound": "Bestand \"$1\" kun neet vünden wörden.",
+       "unexpected": "Unverwachtede waerde: \"$1\"=\"$2\".",
+       "formerror": "Faut: kun formulier neet verstüren",
+       "badarticleerror": "Disse handeling kan up disse syde neet uutvoord wörden.",
+       "cannotdelete": "De syde of et bestand \"$1\" kun neet vordsmeaten wörden.\nEt kan weasen dat een ander et al vordsmeaten hevt.",
+       "cannotdelete-title": "Syde \"$1\" kan neet vordsmeaten wörden",
+       "delete-hook-aborted": "Et vordsmyten wördt in et wyre skopped döär een topassing van MediaWiki.\nDer is wyder geen informaty beskikbår.",
+       "no-null-revision": "Kun geen leadige nye versy maken vöär de syde \"$1\"",
+       "badtitle": "Ungeldige name",
+       "badtitletext": "De name van de upvrågde syde is neet geldig, leadig, of der stünd een verkeyrde interspråk- of interwikiverwysing in.\nMöägelik binnet der eyn of meyr teykens bruked dee neet in titels tostån binnet.",
+       "perfcached": "Disse gegeavens kummen uut et tüskengehöägen en binnet meskeen neet aktueel. Der {{PLURAL:$1|is houguut eyn resultaat|binnet houguut $1 resultaten}} beskikbår in et tüskengehöägen.",
+       "perfcachedts": "Disse gegeavens kummen uut et tüskengehöägen dee vöär et lätst bywarked is up $2 üm $3. Der {{PLURAL:$4|is houguut eyn resultaat|binnet houguut $4 resultaten}} beskikbår in et tüskengehöägen.",
+       "querypage-no-updates": "Disse syde wördt neet bywarked.\nGegeavens up disse syde wördet neet vervarsd.",
        "viewsource": "Brontekst bekyken",
-       "viewsource-title": "Bron bekieken van $1",
-       "actionthrottled": "Haandeling tegenehöllen",
+       "viewsource-title": "Bron bekyken van $1",
+       "actionthrottled": "Handeling teagenholden",
        "actionthrottledtext": "As maotregel tegen t plaotsen van alderhaande moek, is t antal keren da'j disse haandeling in n korte tied uutvoeren kunnen beteund. Je hebben de limiet overschrejen. Probeer t over n antal minuten weer.",
        "protectedpagetext": "Disse zied is beveiligd. Bewarken of aandere haandelingen bin niet meugelik.",
        "viewsourcetext": "Je kunnen de brontekste van disse zied bewarken en bekieken.",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}<br />(see ouk de [[Special:NewPages|lyste mid nye syden]])",
        "recentchanges-submit": "Bekiek",
        "rcfilters-legend-heading": "<strong>Lyste mid afkortingen:</strong>",
-       "rcfilters-group-results-by-page": "Resultaoten per zied groeperen",
+       "rcfilters-group-results-by-page": "Resultaten per syde grupperen",
        "rcfilters-activefilters": "Aktive filters",
        "rcfilters-activefilters-hide": "Verbarg",
        "rcfilters-activefilters-show": "Bekiek",
        "rcfilters-activefilters-hide-tooltip": "Verbarg aktive filters",
        "rcfilters-activefilters-show-tooltip": "Laot aktive filters seen",
-       "rcfilters-limit-title": "Resultåten üm te låten seen",
+       "rcfilters-limit-title": "Resultaten üm te låten seen",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|wysiging|wysigingen}}, $2",
        "rcfilters-date-popup-title": "Tydsperiode üm te döärsöken",
        "rcfilters-days-title": "De vöärbye dagen",
        "rcfilters-hours-title": "De lätste uren",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dag|dagen}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|uur|uren}}",
-       "rcfilters-quickfilters": "Upeslöägen filters",
+       "rcfilters-quickfilters": "Seakerde filters",
        "rcfilters-quickfilters-placeholder-title": "Noch geen filters up-eslöägen",
-       "rcfilters-quickfilters-placeholder-description": "Üm juuw filterinstellingen up te slån en et låter te gebruken, klik up et bladwyserikoon underan by \"Aktive filters\".",
+       "rcfilters-quickfilters-placeholder-description": "Üm juw filterinstellingen te seakeren en et later te herbruken, klik up et bladwyserpiktogram underan by \"Aktive filters\".",
        "rcfilters-savedqueries-apply-label": "Instellingen opslaon",
        "rcfilters-savedqueries-cancel-label": "Aofbreken",
        "rcfilters-savedqueries-add-new-title": "Filterinstellingen seakeren",
        "rcfilters-show-new-changes": "Låt nyste wysigingen seen",
        "rcfilters-search-placeholder": "Filter wysigingen (bruuk et menü of söök up filtername)",
        "rcfilters-filterlist-feedbacklink": "Låt uns weaten wat jy van disse (nye) filterhülpmiddels vinden",
-       "rcfilters-highlightbutton-title": "Resultåten markeren",
+       "rcfilters-highlightbutton-title": "Resultaten markeren",
        "rcfilters-highlightmenu-title": "Kies n kleur",
        "rcfilters-filtergroup-user-experience-level": "Gebrukersanmelding en ervåring",
        "rcfilters-filter-user-experience-level-registered-label": "An-emeld",
        "rcfilters-filter-newpages-description": "Bewarkingen wårmead jy een nye syde anmaket.",
        "rcfilters-filter-categorization-label": "Kategorywysigingen",
        "rcfilters-filter-categorization-description": "Upgave van syden dee to-evoogd of vordedån wörden uut kategoryen.",
-       "rcfilters-filter-logactions-label": "Eregistreerde aktys",
+       "rcfilters-filter-logactions-label": "Registreerde aktys",
        "rcfilters-filter-logactions-description": "Administrative handelingen, nye kontos, vordedåne syden, upladingen…",
        "rcfilters-filtergroup-lastrevision": "Lätste versys",
        "rcfilters-filter-lastrevision-label": "Lätste versy",
        "rcfilters-filter-previousrevision-label": "Neet de lätste versy",
        "rcfilters-filter-previousrevision-description": "Alle wysigingen dee neet de \"lätste versy\" binnen.",
        "rcfilters-view-tags": "Emarkeerde wysigingen",
-       "rcfilters-view-namespaces-tooltip": "Filter resultåten up naamruumte",
-       "rcfilters-view-tags-tooltip": "Filter resultåten döär gebrüük te maken van bewarkingsetiketten",
+       "rcfilters-view-namespaces-tooltip": "Filter resultaten up naamruumde",
+       "rcfilters-view-tags-tooltip": "Filter resultaten döär bewarkingsetiketten te bruken",
        "rcfilters-liveupdates-button": "Rechtstreakse aktualisering",
        "rcfilters-liveupdates-button-title-off": "Nye wysigingen voorddalik låten seen",
        "rcnotefrom": "Wysigingen sinds <strong>$3, $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wysiging|wysigingen}}).",
index 987027c..6b35dab 100644 (file)
        "history": "पृष्ठको इतिहास",
        "history_short": "पृष्ठको इतिहास",
        "history_small": "इतिहास",
-       "updatedmarker": "मà¥\87रो अन्तिम भ्रमण पछि अद्यतन गरिएको",
+       "updatedmarker": "तपाà¤\88à¤\81à¤\95ो अन्तिम भ्रमण पछि अद्यतन गरिएको",
        "printableversion": "छाप्नयोग्य संस्करण",
        "permalink": "स्थायी लिङ्क",
        "print": "छाप्नुहोस्",
        "rollback-success": "$1द्वारा उल्टाइएका सम्पादनहरू;\nपछिल्लो संशोधनमा $2द्वारा परिवर्तन गरि पुनः फर्काइएको।",
        "sessionfailure-title": "सत्र त्रुटी",
        "sessionfailure": "यस्तो लाग्दैछ कि तपाईंको लगइन सत्रसँग कुनै समस्या छ। सत्र अपहरणबाट बचाउन को लागि सावधानीको रूपमा तपाईंको यो क्रियाकलाप रद्द गरिएको छ। कृपया पछाडी जानुहोस र पृष्ठलाई पुनः लोड गर्नुहोस्, अनि फेरी प्रयास गर्नुहोला।",
-       "changecontentmodel-title-label": "पाना à¤¶à¥\80रà¥\8dषà¤\95",
+       "changecontentmodel-title-label": "पà¥\83षà¥\8dठ à¤¶à¥\80रà¥\8dषà¤\95:",
        "changecontentmodel-reason-label": "कारण:",
        "changecontentmodel-submit": "परिवर्तन गर्नुहोस्",
        "logentry-contentmodel-change-revertlink": "पहिलेको रुपमा फर्काउने",
        "undeletepagetext": "निम्नलिखित {{PLURAL:$1|पृष्ठ मेटिएकोछ तर पूरालेखभित्रै छ|$1 पृष्ठ मेटिएकाछन् तर पूरालेखभित्रै छन्}} र पुनर्स्थापित गर्न सकिन्छ।\nपूरालेखको समय-समयमा सफाई गर्न सकिन्छ।",
        "undelete-fieldset-title": "पुनरावलोकनहरू  पूर्वावस्थामा ल्याउनुहोस्",
        "undeleteextrahelp": "यस पृष्ठको पुरै इतिहास पूर्वरुपमा फर्काउनको लागि  छनोट सन्दुकहरूलाई नछानी '''''{{int:undeletebtn}}''''' मा क्लिक गर्नुहोस।\nअनुकुल पूर्वरुपमा फर्काउने कार्य गर्न छनौट चाहिएका संस्करणका सन्दुकहरूलाई छानेर '''''{{int:undeletebtn}}'''''मा क्लिक गर्नुहोस।",
-       "undeleterevisions": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\82}} à¤¸à¤\82à¤\97à¥\8dरहित",
+       "undeleterevisions": "$1 {{PLURAL:$1|सà¤\82शà¥\8bधन|सà¤\82शà¥\8bधनहरà¥\82}} à¤®à¥\87à¤\9fाà¤\87यà¥\8b",
        "undeletehistory": "यदि कुनै पृष्टलाई पुन: स्थापन गराउनु भयो भने सम्पूर्ण संस्करणहरू इतिहासमा पुन:स्थापन हुनेछन् ।\nयदि यसै नामबाट  नयाँ पृष्ठ निर्माण भैसकेको छ भने पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमा स्थापित हुनेछन् ।",
        "undeleterevdel": "यदि यो माथिल्लो पृष्ठ बन्छ  या फाइल संस्करणहरू आंशिक मेटिएका छन् भने मेट्ने काम रद्द गरिने छैन।\nत्यस अवस्थामा तपाईंले छनौटमा अन्तिम मेटिएको नयाँ संस्करण नलुकाउनेमा चिनो लगाउनु पर्छ ।",
        "undeletehistorynoadmin": "यस पृष्ठ मेटिएको छ।\nमेटिनाको कारण निम्न जानकारीहरुमा खुलाइएको छ र मेटिनु अगिका योगदानकर्ताहरुको नाम पनि \nमेटिएका पृष्ठको पूरा पाठ प्रवन्धकहरुलाई मात्र उपलब्ध हुन्छ ।",
        "year": "वर्ष देखि( र पहिले):",
        "sp-contributions-blocklog": "रोकावट लग",
        "sp-contributions-suppresslog": "प्रयोगकर्ताको योगदानहरू दबाइएको छ ।",
-       "sp-contributions-deleted": "प्रयोगकर्ताका योगदानहरू मेटाइयो",
+       "sp-contributions-deleted": " {{GENDER:$1|प्रयोगकर्ता}}का योगदानहरू मेटाइयो",
        "sp-contributions-uploads": "उर्ध्वभरणहरू",
        "sp-contributions-logs": "लगहरू",
        "sp-contributions-talk": "वार्ता",
-       "sp-contributions-userrights": "प्रयोगकर्ता अधिकार व्यवस्थापन",
+       "sp-contributions-userrights": "{{GENDER:$1|प्रयोगकर्ता}} अधिकार व्यवस्थापन",
        "sp-contributions-blocked-notice": "यो प्रयोगकर्तालाई अहिले रोक लगाइएको छ।\nनवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:",
        "sp-contributions-blocked-notice-anon": "यो IP ठेगानालाई अहिले रोक लगाइएको छ।\nनवीनतम रोकाइ गरेको लग प्रविष्टि सन्दर्भको निम्ति तल दिएकोछ:",
        "sp-contributions-search": "योगदानहरू खोज्नुहोस्",
        "cant-move-to-user-page": "तपाईंलाई पृष्ठहरू प्रयोगकर्ता पृष्ठमा सार्न अनुमती छैन (प्रयोगकर्ता सहपृष्ठहरूमा बाहेक)",
        "cant-move-category-page": "तपाईंलाई श्रेणीको पृष्ठहरू सार्ने अनुमति छैन ।",
        "cant-move-to-category-page": "कुनै श्रेणी पृष्ठमा सार्नको लागी तपाईँलाई अनुमति छैन ।",
-       "newtitle": "नयाँ शीर्षकमा :",
+       "newtitle": "नयाँ शीर्षक:",
        "move-watch": "यो पृष्ठ निगरानीमा राख्नुहोस्",
        "movepagebtn": "पृष्ठ सार्नुहोस्",
        "pagemovedsub": "सार्ने काम सफल भयो",
        "movenosubpage": "यस पृष्ठका उप पृष्ठहरू छैनन्।",
        "movereason": "कारण :",
        "revertmove": "पूर्ववत्",
-       "delete_and_move_text": "== मेटाउनु आवश्यक ==\nलक्ष्य गरिएको पृष्ठ  \"[[:$1]]\" पहिलादेखि छ\nके तपाईं यो त्यहाँ सार्न त्यसलाई मेट्न चाहनुहुन्छ?",
+       "delete_and_move_text": "लक्ष्य गरिएको पृष्ठ \"[[:$1]]\" पहिल्यै छ।\nके तपाईं यसलाई मेटाएर यस कदमको लागि बाटो खुला गर्न चाहनुहुन्छ?",
        "delete_and_move_confirm": "हो, पृष्ठ मेट्नुहोस्",
        "delete_and_move_reason": " \"[[$1]]\"बाट सार्नलाई बाटो खुलाउन मेटियो",
        "selfmove": "स्रोत तथा लक्ष्य गरिएको पृष्ठको शीर्षक एउटै भएकाले;\nयसैमाथि पृष्ठ सार्न मिल्दैन",
        "autoredircomment": "पृष्ठ[[$1]]मा पठाइएको",
        "autosumm-new": " $1 को साथमा पृष्ठ शृजना भयो",
        "autosumm-newblank": "खाली पृष्ठ तयार गर्ने",
-       "size-bytes": "$1 बाइटहरू",
+       "size-bytes": "$1 {{PLURAL:$1|बाइट|बाइटहरू}}",
        "size-kilobytes": "$1 किलोबाइटहरू",
        "size-megabytes": "$1 मेगाबाइटहरू",
        "size-gigabytes": "$1 गिगाबाइटहरू",
        "watchlistedit-raw-done": "तपाईंको निगरानी सूची अद्यावधिक गरिएको छ।",
        "watchlistedit-raw-added": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} थपियो:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|१ शिर्षक|$1 शिर्षकरु}} हटाइयो:",
-       "watchlistedit-clear-title": "अवलोकन सूची खाली गरियो",
+       "watchlistedit-clear-title": "अवलोकनसूची खाली गर्नुहोस्",
        "watchlistedit-clear-legend": "अवलोकन सूची खाली गर्ने",
        "watchlistedit-clear-explain": "तपाईंको अवलोकन सूचीबाट सम्पूर्ण शिर्षकहरू मेटाइदै",
        "watchlistedit-clear-titles": "शीर्षकहरू :",
        "tags-actions-header": "कार्यहरु",
        "tags-active-yes": "हो",
        "tags-active-no": "हैन",
-       "tags-source-extension": "à¤\8fà¤\95à¥\8dसà¤\9fà¥\87नà¥\8dसनदà¥\8dवारा à¤ªà¤°à¤¿à¤­à¤¾à¤·à¤¿à¤¤ à¤\97रà¥\8dनà¥\87",
+       "tags-source-extension": "सफà¥\8dà¤\9fवà¥\87यरदà¥\8dवारा à¤ªà¤°à¤¿à¤­à¤¾à¤·à¤¿à¤¤",
        "tags-source-manual": "प्रयोगकर्ताहरू तथा बोटहरूबाट म्यानुअल्ली लागु गरिएको",
        "tags-source-none": "प्रयोगमा नरहेको",
        "tags-edit": "सम्पादन गर्नुहोस्",
        "tags-edit-revision-legend": "ट्यागहरू {{PLURAL:$1|यस संशोधन|सबै $1 संशोधनहरू}}सँग जोड्ने वा हटाउने।",
        "tags-edit-logentry-legend": "ट्यागहरू {{PLURAL:$1|यस लग प्रविष्टि|सबै $1 लग प्रविष्टिहरू}}सँग जोड्ने वा हटाउने।",
        "tags-edit-existing-tags": "हाल भएको ट्यागहरूः",
-       "tags-edit-existing-tags-none": "''कुनै पनि होइन''",
+       "tags-edit-existing-tags-none": "<em>कुनै पनि होइन</em>",
        "tags-edit-new-tags": "नयाँ ट्यागहरूः",
        "tags-edit-add": "यी ट्यागहरू थप्नेः",
        "tags-edit-remove": "यी ट्यागहरू हटाउनेः",
        "tags-edit-reason": "कारण:",
        "tags-edit-revision-submit": "{{PLURAL:$1|यस संस्करण|$1 संस्करणहरू}} मा परिवर्तनहरूलाई लागु गर्ने",
        "tags-edit-logentry-submit": "{{PLURAL:$1|यस लग प्रविष्टी|$1 लग प्रविष्टीहरू}} मा परिवर्तनहरूलाई लागु गर्ने",
-       "tags-edit-success": "परिवरà¥\8dतनहरà¥\82 à¤¸à¤«à¤²à¤¤à¤¾ à¤ªà¥\82रà¥\8dवà¤\95 à¤²à¤¾à¤\97à¥\81 à¤­à¥\88सà¤\95à¥\8dयो",
+       "tags-edit-success": "परिवरà¥\8dतनहरà¥\82 à¤²à¤¾à¤\97à¥\81 à¤\97रियो",
        "tags-edit-failure": "यी परिवर्तनहरू लागु गर्न सकिएनः\n$1",
        "tags-edit-nooldid-title": "अवैध संशोधन लक्ष्य",
        "tags-edit-nooldid-text": "या त तपाईंले कुनै लक्षित संशोधनको विवरण दिनुभएको छैन जहाँ यस कार्यलाई सम्पन्न गर्नु पर्नेछ, या विवरण गरिएको संशोधन छंदै छैन।",
        "logentry-rights-autopromote": "$1 को प्रयोगकर्ता समूह स्वतः $4 बाट परिवर्तन गरेर $5 {{GENDER:$2|गरिएको}} थियो",
        "logentry-upload-upload": "$1 ले $3 {{GENDER:$2|अपलोड गरेका छन्}}",
        "logentry-upload-overwrite": "$1 ले $3 को नयाँ संस्करण {{GENDER:$2|अपलोड गरेका छन्}}",
-       "logentry-upload-revert": "$1 ले $3 {{GENDER:$2|अपलोड गरेका छन्}}",
+       "logentry-upload-revert": "$1ले $3लाई पुरानो संस्करणमा {{GENDER:$2|उल्टाउनुभयो}}",
        "log-name-managetags": "ट्याग व्यवस्थापन लग",
        "log-description-managetags": "यस पृष्ठमा ती प्रवन्धन कार्यहरूको सूची छ जुन [[Special:Tags|ट्यागहरू]]सँग सम्बन्धित छ। लगमा मात्रै ती क्रियाहरूको बयान गरिएको छ जुन मानवीय रूपले कुनै प्रवन्धकद्वारा पुरा गरिएको छ। ट्यागहरूलाई विकि सफ्टवेयरद्वारा बनउनु वा हटाउन सकिनेछ जसको प्रविष्टि लगमा हुनु आवश्यक छैन।",
        "logentry-managetags-create": "$1 ले ट्याग $4 {{GENDER:$2|तयार गरेको छ}}",
        "api-error-emptypage": "नयाँ तयार गर्दै, खाली पृष्ठ तयार गर्न अनुमति छैन ।",
        "api-error-publishfailed": "आन्तरिक समस्याः अस्थायी फाइल प्रकाशन गर्न सर्भर असफर भयो ।",
        "api-error-stashfailed": "आन्तरिक त्रुटि: अस्थाई फाइल राख्न सर्वर असफल भयो।",
-       "api-error-unknown-warning": "अज्ञात चेतावनी: \"$1\"",
+       "api-error-unknown-warning": "अज्ञात चेतावनी:\"$1\"।",
        "api-error-unknownerror": "अज्ञात त्रुटि: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|सेकेण्ड|सेकेण्डहरू}}",
        "duration-minutes": "$1 {{PLURAL:$1|मिनेट|मिनेटहरू}}",
        "special-characters-title-emdash": "इएम ड्यास",
        "special-characters-title-minus": "घटाउने चिन्ह",
        "mw-widgets-abandonedit": "के तपाई सम्पादन सङ्ग्रह नगरीकन सम्पादनबाट बाहिरिनेमा निश्चित हुनुहुन्छ?",
-       "mw-widgets-abandonedit-discard": "सम्पादन रद्द गर्नु",
-       "mw-widgets-abandonedit-keep": "समà¥\8dपादन à¤\9cारà¥\80 à¤°à¤¾à¤\96à¥\8dनà¥\87",
-       "mw-widgets-abandonedit-title": "निशà¥\8dà¤\9aित à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b ?",
+       "mw-widgets-abandonedit-discard": "सम्पादनहरू रद्द गर्नुहोस्",
+       "mw-widgets-abandonedit-keep": "समà¥\8dपादन à¤\9cारà¥\80 à¤°à¤¾à¤\96à¥\8dनà¥\81हà¥\8bसà¥\8d",
+       "mw-widgets-abandonedit-title": "à¤\95à¥\87 à¤¤à¤ªà¤¾à¤\88à¤\81 à¤ªà¤\95à¥\8dà¤\95ा à¤¹à¥\81नà¥\81हà¥\81नà¥\8dà¤\9b?",
        "mw-widgets-titleinput-description-new-page": "हालसम्म पृष्ठ उपलब्ध छैन्",
-       "mw-widgets-titleinput-description-redirect": "$1 à¤®à¤¾ à¤\9cानà¥\87",
+       "mw-widgets-titleinput-description-redirect": "$1 à¤®à¤¾ à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87श",
        "randomrootpage": "यादृच्छिक शीर्ष पृष्ठ",
        "log-action-filter-all": "सबै",
        "log-action-filter-block-block": "रोक्ने",
index 2ea7cdc..e2a6854 100644 (file)
                        "RadioAzureus"
                ]
        },
-       "tog-underline": "Verwijzingen onderstrepen:",
+       "tog-underline": "Links onderstrepen:",
        "tog-hideminor": "Kleine bewerkingen in recente wijzigingen verbergen",
        "tog-hidepatrolled": "Gemarkeerde bewerkingen in recente wijzigingen verbergen",
        "tog-newpageshidepatrolled": "Gemarkeerde pagina's in de lijst met nieuwe pagina's verbergen",
        "createaccountmail": "Gebruik een tijdelijk willekeurig wachtwoord en stuur het naar het opgegeven e-mailadres",
        "createaccountmail-help": "Kan worden gebruikt voor het aanmaken van een account voor een andere persoon zonder het wachtwoord te vernemen.",
        "createacct-realname": "Echte naam (optioneel)",
-       "createacct-reason": "Reden",
+       "createacct-reason": "Reden (door iedereen te zien)",
        "createacct-reason-ph": "Waarom u een ander account aanmaakt",
        "createacct-reason-help": "Weergegeven bericht in het logbestand van aangemaakte gebruikers",
        "createacct-submit": "Uw account aanmaken",
        "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door dezelfde gebruiker niet weergegeven)",
        "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
        "diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}}  worden niet weergegeven)",
-       "diff-paragraph-moved-tonew": "Deze paragraaf is verplaatst. Klik om naar de nieuwe locatie te springen.",
-       "diff-paragraph-moved-toold": "Deze paragraaf is verplaatst. Klik om naar de oude locatie te springen.",
+       "diff-paragraph-moved-tonew": "Deze alinea is verplaatst. Klik om naar de nieuwe locatie te springen.",
+       "diff-paragraph-moved-toold": "Deze alinea is verplaatst. Klik om naar de oude locatie te springen.",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "searchresults": "Zoekresultaten",
        "search-filter-title-prefix": "Alleen pagina's doorzoeken waarvan de titel begint met \"$1\"",
        "ipblocklist-legend": "Een geblokkeerde gebruiker zoeken",
        "blocklist-userblocks": "Geblokkeerde accounts verbergen",
        "blocklist-tempblocks": "Tijdelijke blokkades verbergen",
+       "blocklist-indefblocks": "Verberg blokkades met een oneindige loopduur",
        "blocklist-addressblocks": "Blokkades van één IP-adres verbergen",
        "blocklist-type": "Soort:",
        "blocklist-type-opt-all": "Alle",
index 115e0a2..0870b19 100644 (file)
        "botpasswords-updated-body": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߏߕ ߕߐ߮ ߦߋ߫ \"$1\" {{GENDER:$2|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߦߋ߫ \"$2\" ߕߎ߲߬ ߓߘߊ߫ ߟߏ߲ߘߐߦߊ߫.",
        "botpasswords-deleted-title": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߘߊ߫ ߖߏ߬ߛߌ߬",
        "botpasswords-deleted-body": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߏߕ ߕߐ߮ ߦߋ߫ \"$1\" {{GENDER:$2|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߦߋ߫ \"$2\" ߕߎ߲߬ ߓߘߊ߫ ߖߏ߬ߛߌ߬.",
+       "botpasswords-no-provider": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߥߎ߬ߛߎ ߡߊߛߐߟߊ ߕߍ߫ ߊ߬ ߟߊ߫.",
+       "botpasswords-restriction-failed": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߓߘߊ߫ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߣߌ߲߬ ߢߍߓߍ߲߬.",
+       "botpasswords-invalid-name": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߕߍߝߘߊߟߌ (\"$1\") ߕߍ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߕߐ߰ ߞߙߍߞߙߍߣߍ߲ ߠߊ߫.",
        "botpasswords-not-exist": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߕߐ߯ߟߊߣߍ߲߫ \"$2\" ߕߍ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ  \"$1\" ߓߟߏ߫",
        "botpasswords-needs-reset": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲  \"$1\" ߓߏߕ ߕߐ߯ \"$2\" ߦߋ߫ {{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}}  \"$1\" ߦߋ߫ ߡߊߦߟߍ߬ߡߊ߲߫.",
        "botpasswords-locked": "ߌ ߕߍߣߊ߬ ߛߋߟߴߌ ߜߊ߲߬ߞߎ߲߬ ߠߊ߫ ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߘߌ߫ ߓߊ ߌ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ ߛߐ߰ߣߍ߲߫ ߠߋ߫.",
        "resetpass-no-info": "ߌ ߦߴߌ ߜߊ߲߬ߞߎ߲߬ ߡߎߣߎ߲߬ ߞߣߊ߬ ߕߏ߫ ߞߐߜߍ ߣߌ߲߬ ߡߊߛߐ߬ߘߐ߲߬ ߠߊ߫.",
        "resetpass-submit-loggedin": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߬ߟߋ߲߬",
        "resetpass-submit-cancel": "ߊ߬ ߘߐߛߊ߬",
+       "resetpass-wrong-oldpass": "ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߕߊߡߌ߲ߞߊ߲ ߥߟߊ߫ ߕߋ߲߭ߕߋ߲߭ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߍ߲߬ߓߊߟߌ.\nߕߎ߬ߡߊ߬ߘߐ߫ ߌ ߣߐ߬ ߘߌ߫ ߞߍ߫ ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߬ߟߋ߲߬ ߠߊ߫ ߥߟߊ߫ ߌ ߓߘߊ߫ ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߕߊߡߌ߲ߞߊ߲߫ ߞߎߘߊ߫ ߡߊߞߟߌ߫.",
+       "resetpass-recycled": "ߖߊ߰ߣߌ߲߬ ߌ ߦߴߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߬ߟߋ߲߬ ߘߏ߫ ߜߘߍ߫ ߟߊ߫ ߡߍ߲ ߣߌ߫ ߘߐ ߣߌ߲߬ ߕߍ߫ ߞߋߟߋ߲߫ ߘߌ߫.",
+       "resetpass-temp-emailed": "ߌ ߓߘߴߌ ߜߊ߲߬ߞߎ߲߫ ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߗߋߛߓߍ ߘߏߝߙߍߕߍ ߟߊ߫.\nߖߐ߲߬ߛߊ߫ ߌ ߘߌ߫ ߓߊ߲߫ ߌ ߜߊ߲߬ߞߎ߲߬ ߠߊ߫߸ ߌ ߞߊߞߊ߲߫ ߞߊ߬ ߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߞߎߘߊ߫ ߟߊߘߏ߲߬:",
        "resetpass-temp-password": "ߕߊߡߌ߲ߞߊ߲ ߕߎ߬ߡߊ߬ߞߎ߲߬ߡߊ",
+       "resetpass-abort-generic": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߬ߟߋ߲߬ߠߌ߲ ߓߘߊ߫ ߘߐߛߊ߬ ߞߐߕߊ߲ߠߌ߲ ߘߏ߫ ߓߟߏ߫.",
+       "resetpass-expired": "ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߛߕߊ ߓߘߊ߫ ߝߊ߫. ߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߞߎߘߊ߫ ߟߊߘߏ߲߬ ߖߊ߰ߣߌ߲߫ ߞߵߌ ߜߊ߲߬ߞߎ߲߫.",
+       "resetpass-expired-soft": "ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߛߕߊ ߓߘߊ߫ ߝߊ߫ ߊ߬ ߘߏ߲߬ ߡߊ߬ߞߏ ߦߋ߫ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߠߊ߫.ߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߞߎߘߊ߫ ߛߎߥߊ߲ߘߌ߫ ߖߊ߰ߣߌ߲߬߸ ߥߟߊ߫ ߌ ߦߋ߫ ߣߌ߲߬ ߛߐ߲߬ߞߌ߲߫  \"{{int:authprovider-resetpass-skip-label}}\" ߞߵߊ߬ ߡߊߝߊ߬ߟߋ߲߬ ߞߐߝߍ߬.",
+       "resetpass-validity": "ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫: $1\n\nߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߞߎߘߊ߫ ߟߊߘߏ߲߬ ߖߊ߰ߣߌ߲߫ ߞߵߌ ߜߊ߲߬ߞߎ߲߫.",
+       "resetpass-validity-soft": "ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫: $1\n\nߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߞߎߘߊ߫ ߟߊߘߏ߲߬ ߛߌߣߍ߲߬ ߖߊ߰ߣߌ߲߫߸ ߥߟߊ߫ ߣߌ߲߬ ߛߐ߲߬ߞߌ߲߫ \"{{int:authprovider-resetpass-skip-label}}\" ߞߵߊ߬ ߡߊߝߊ߬ߟߋ߲߬ ߞߐߝߍ߬.",
        "passwordreset": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߬",
+       "passwordreset-text-one": "ߖߙߎߡߎ߲ ߣߌ߲߬ ߘߝߊ߫ ߛߴߌ ߘߌ߫ ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߕߊߡߌ߲ߞߊ߲ ߘߏ߫ ߡߊߛߐ߬ߘߐ߲߬ ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߟߊ߫.",
        "passwordreset-disabled": "ߕߊ߬ߡߌ߲߬ߞߊ߲߬ ߡߊߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߓߘߊ߫ ߛߋ߲߬ߓߐ߫ ߥߞߌ ߣߌ߲߬ ߘߐ߫.",
        "passwordreset-username": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߕߐ߮:",
        "passwordreset-domain": "ߡߊ߬ߘߎ߮:",
        "version-hook-name": "ߛߏ߲߭ߓߊ߬ߟߌ ߕߐ߮",
        "version-hook-subscribedby": "ߕߐ߮ ߛߓߍߣߍ߲߫ ߦߋ߫",
        "version-no-ext-name": "[ߕߐ߯ ߕߴߊ߬ ߟߊ߫]",
+       "version-ext-license": "ߕߌ߰ߦߊ",
+       "version-ext-colheader-name": "ߞߐߕߊ߲ߠߌ߲",
        "version-skin-colheader-name": "ߝߊ߬ߘߌ",
        "version-ext-colheader-version": "ߦߌߟߡߊ",
        "version-ext-colheader-license": "ߕߌ߰ߦߊ",
        "specialpages-group-developer": "ߟߊ߬ߥߙߌ߬ߞߌ߬ߟߌ ߖߐ߯ߙߊ߲ ߠߎ߬",
        "blankpage": "ߞߐߜߍ߫ ߘߐߞߏߟߏ߲",
        "tag-filter": "[[Special:Tags|ߞߊ߲ߠߊߛߓߍ]] ߢߡߊߘߏ߲߰ߣߍ߲",
+       "tag-filter-submit": "ߥߊ߬ߣߊߙߌ",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ߡߊ߬ߛߙߋ |ߡߊ߬ߛߙߋ ߟߎ߬ }}]]: $2",
+       "tag-mw-contentmodelchange": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߡߊߝߊ߬ߟߋ߲߬ߠߌ߲",
+       "tag-mw-contentmodelchange-description": "ߣߌ߲߬ ߡߊߦߟߍ߬ߡߊ߲߫\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ߞߣߐߘߐߛߎ߯ߦߊߡߊߝߊ߬ߟߋ߲߬ ߞߣߐߘߐ ߛߎ߯ߦߊ ߡߊߝߊ߬ߟߋ߲߬] ߞߐߜߍ ߘߐ߫",
+       "tag-mw-new-redirect": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲߬ ߞߎߘߊ",
+       "tag-mw-new-redirect-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߠߊߘߊ߲߫ ߥߟߊ߫ ߞߊ߬ ߞߐߜߍ ߦߟߍ߬ߡߊ߲߫ ߞߊ߬ ߞߍ߫ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߘߌ߫",
+       "tag-mw-removed-redirect": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߛߋ߲߬ߓߐ߫",
+       "tag-mw-removed-redirect-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߕߋ߲߭ߕߋ߲߭ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߡߊߦߟߍ߬ߡߊ߲߫ ߞߵߊ߬ ߞߍ߫ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߓߊߟߌ ߘߌ߫",
+       "tag-mw-changed-redirect-target": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߞߏ߲߭ ߓߘߊ߫ ߡߊߝߊ߬ߟߋ߲߬",
+       "tag-mw-changed-redirect-target-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߞߏ߲߭ ߡߊߝߊ߬ߟߋ߲߬",
+       "tag-mw-blank": "ߖߏ߰ߛߌ߬ߟߌ ߦߵߌ ߘߐ߫",
+       "tag-mw-blank-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߞߐߜߍ ߖߏ߰ߛߌ߬",
+       "tag-mw-replace": "ߊ߬ ߓߘߊ߫ ߓߐ߫ ߊ߬ ߣߐ߭ ߘߐ߫",
+       "tag-mw-replace-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߞߣߐߘߐ %߉߀ ߛߋ߲߬ߓߐ߫ ߞߐߜߍ ߘߐ߫",
+       "tag-mw-rollback": "ߟߊߞߐߛߊ߬ߦߌ߬",
+       "tag-mw-undo": "ߊ߬ ߘߐߛߊ߬",
+       "tag-mw-undo-description": "ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߊ߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߟߐ߯ߟߊߣߍ߲ ߠߎ߬ ߘߐߛߊ߬ ߞߊ߬ ߘߐ߬ߛߊ߬ߟߌ ߛߘߌ߬ߜߋ߲ ߠߊߓߊ߯ߙߊ߫.",
+       "tags-title": "ߘߎ߲ߛߓߍ ߟߎ߬",
+       "tags-tag": "ߘߎ߲ߛߓߍ ߕߐ߮",
+       "tags-display-header": "ߟߊ߲ߞߣߍߡߊߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߘߐ߫",
+       "tags-description-header": "ߞߘߐߝߐߟߌ ߞߊ߲߬ߛߓߍ߬ߟߌ߬ ߘߝߊߣߍ߲",
+       "tags-source-header": "ߛߎ߲",
+       "tags-active-header": "ߊ߬ ߟߊߞߎߣߎ߲߫ ߣߍ߲߫؟",
+       "tags-hitcount-header": "ߞߏ߲߭ ߓߘߊ߫ ߡߊߝߊ߬ߟߋ߲߬",
+       "tags-actions-header": "ߞߍߟߌ ߟߎ߬",
        "tags-active-yes": "ߐ߲߬ߐ߲߬ߐ߲߫",
        "tags-active-no": "ߍ߲߬ߍ߲ߍ߲߬",
+       "tags-source-extension": "ߡߊ߬ߕߍ߰ߣߍ߲ ߠߎ߬ ߛߎ߲ߝߘߍ ߓߟߏ߫",
+       "tags-source-manual": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߫ ߓߏߕ ߟߎ߬ ߟߊ߫ ߓߟߏߟߊ߫ ߞߍߟߌ",
+       "tags-source-none": "ߊ߬ ߕߍߣߊ߬ ߥߊ߯ߕߌߖߊ߲߫ ߞߍ߫ ߟߊ߫ ߓߊ߯ߙߊ ߘߐ߫ ߡߎ߬ߕߎ߲߬",
+       "tags-edit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬",
+       "tags-delete": "ߊ߬ ߖߏ߰ߛߌ߬",
+       "tags-activate": "ߊ߬ ߟߊߞߎߣߎ߲߫",
+       "tags-deactivate": "ߊ߬ ߟߊߛߎ߬ߣߐ߬",
        "tags-hitcount": "{{PLURAL:$1|ߦߟߍ߬ߡߊ߲߬ߠߌ|$1 ߦߟߍ߬ߡߊ߲߬ߠߌ ߠߎ߬}}",
+       "tags-manage-no-permission": "ߌ ߟߊߘߌ߬ߢߍ߬ߣߍ߲߬ ߕߍ߫ ߞߊ߬ ߘߎ߲ߛߓߍ ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊߞߍ߲߰.",
+       "tags-manage-blocked": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߘߎ߲ߛߓߍ ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊߞߍ߲߰ ߠߊ߫ ߞߊ߬ {{GENDER:$1|ߌ}} ߓߊ߬ߟߌ߬ߣߍ߲ ߕߏ߫.",
+       "tags-create-heading": "ߘߎ߲ߛߓߍ߫ ߞߎߘߊ߫ ߛߌ߲ߘߌ",
+       "tags-create-explanation": "ߘߊ߲ߛߎ߲ ߞߏߛߐ߲߬߸ ߘߎ߲ߛߓߍ ߟߊߘߊ߲ߣߍ߲߫ ߞߎߘߊ ߟߎ߬ ߘߌ߫ ߣߊ߬ ߛߌ߲ߘߌ߫߸ ߊ߬ ߣߌ߫ ߞߊ߬ ߞߍ߫ ߦߋ߲߬ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߫ ߓߏߕ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ ߞߊ߲ߡߊ߬.",
+       "tags-create-tag-name": "ߘߎ߲ߛߓߍ ߕߐ߮:",
+       "tags-create-reason": "ߊ߬ ߛߊߓߎ:",
+       "tags-create-submit": "ߟߊ߬ߘߊ߲߬ߠߌ߲",
+       "tags-create-no-name": "ߌ ߞߊߞߊ߲߫ ߞߊ߬ ߘߎ߲ߛߓߍ ߕߐ߮ ߘߏ߫ ߞߙߍߞߙߍ߫.",
+       "tags-delete-reason": "ߊ߬ ߛߊߓߎ:",
+       "tags-activate-reason": "ߊ߬ ߛߊߓߎ:",
+       "tags-deactivate-reason": "ߊ߬ ߛߊߓߎ:",
+       "compare-page1": "ߞߐߜߍ ߁߭",
+       "compare-page2": "ߞߐߜߍ ߂߲",
+       "compare-rev1": "ߟߢߊ߬ߟߌ ߁߭",
+       "compare-rev2": "ߟߢߊ߬ߟߌ ߂߲",
+       "compare-submit": "ߊ߬ ߟߊߢߐ߲߮ߡߊ߬",
+       "compare-invalid-title": "ߌ ߣߊ߬ ߞߎ߲߬ߕߐ߮ ߡߍ߲ ߞߙߍߞߙߍ߫ ߟߊ߫ ߏ߬ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
+       "compare-title-not-exists": "ߌ ߣߊ߬ ߞߎ߲߬ߕߐ߮ ߡߍ߲ ߞߙߍߞߙߍ߫ ߟߊ߫ ߏ߬ ߕߴߦߋ߲߬.",
+       "compare-revision-not-exists": "ߌ ߣߊ߬ ߟߢߊ߬ߟߌ ߡߍ߲ ߞߙߍߞߙߍ߫ ߟߊ߫ ߏ߬ ߕߴߦߋ߲߬.",
+       "diff-form": "ߓߐߣߍ߲ߢߐ߲߰ߡߊ ߟߎ߬",
+       "diff-form-oldid": "ߟߢߊ߬ߟߌ߬ ߞߘߐ ID (ߢߣߊߕߊߟߌ)",
+       "diff-form-revid": "ߓߐߣߍ߲ߢߐ߲߰ߡߊ ߟߎ߬ ߟߢߊ߬ߟߌ ID",
+       "diff-form-submit": "ߓߐߣߍ߲ߢߐ߲߰ߡߊ ߟߎ߬ ߦߌ߬ߘߊ߬",
+       "permanentlink": "ߛߘߌ߬ߜߋ߲߬ ߓߟߏߕߍ߰ߓߊߟߌ",
+       "permanentlink-revid": "ߟߢߊ߬ߟߌ ID",
+       "permanentlink-submit": "ߕߊ߯ ߟߢߊ߬ߟߌ ߘߐ߫",
+       "newsection": "ߕߍߕߍ߯ ߞߎߘߊ",
+       "newsection-page": "ߞߏ߲߭ ߞߐߜߍ",
+       "newsection-submit": "ߕߊ߯ ߞߐߜߍ ߞߊ߲߬",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} ߞߐߜߍ $3",
        "logentry-delete-restore": "$1 $3($4) ߞߐߜߍ {{GENDER:$2|ߓߘߊ߫ ߟߊߛߊ߬ߦߌ߬ ߞߐ߫}}",
        "logentry-delete-revision": "$1  {{GENDER:$2|ߓߘߊ߫ ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߞߍ߫}} ߣߌ߲߬ ߦߋߗߏ߮ ߟߊ߫ {{PLURAL:$5|a revision|$5 revisions}} ߞߐߜߍ ߣߌ߲߬ $3: $4 ߘߐ߫",
index 2ec2e44..048e5f1 100644 (file)
        "userlogin-resetpassword-link": "Nie pamiętasz hasła?",
        "userlogin-helplink2": "Pomoc przy logowaniu",
        "userlogin-loggedin": "Zalogowano jako {{GENDER:$1|$1}}.\nUżyj poniższego formularza, aby zalogować się jako inny użytkownik.",
-       "userlogin-reauth": "Musisz się ponownie zalogować, aby potwierdzić, że jesteś {{GENDER:$1|$1}}.",
+       "userlogin-reauth": "Musisz się ponownie zalogować, aby potwierdzić, że {{GENDER:$1|użytkownik|użytkowniczka}} $1 to Ty.",
        "userlogin-createanother": "Załóż nowe konto",
        "createacct-emailrequired": "Adres e‐mail",
        "createacct-emailoptional": "Adres e-mail (opcjonalnie)",
        "createaccountmail": "Użyj tymczasowego hasła wygenerowanego losowo i wyślij je na podany adres e-mail",
        "createaccountmail-help": "Pozwala utworzyć konto dla innej osoby, nie znając jej hasła.",
        "createacct-realname": "Prawdziwe imię i nazwisko (opcjonalnie)",
-       "createacct-reason": "Powód",
+       "createacct-reason": "Powód (podawany publicznie)",
        "createacct-reason-ph": "Dlaczego zakładasz kolejne konto",
        "createacct-reason-help": "Komunikat wyświetlany w rejestrze tworzenia kont",
        "createacct-submit": "Utwórz konto",
index 622ab51..8732554 100644 (file)
        "createaccountmail": "Usar uma senha aleatória e temporária que será enviada ao endereço de e-mail especificado a seguir",
        "createaccountmail-help": "Pode ser utilizado para criar uma conta para outra pessoa sem saber a senha.",
        "createacct-realname": "Nome real (opcional)",
-       "createacct-reason": "Motivo",
+       "createacct-reason": "Motivo (entrado publicamente)",
        "createacct-reason-ph": "Por que você está criando outra conta",
        "createacct-reason-help": "Mensagem mostrada no registro de criação de conta",
        "createacct-submit": "Crie sua conta",
index d08a6bc..24d6719 100644 (file)
@@ -39,7 +39,8 @@
                        "WebSourceContentRO",
                        "MSClaudiu",
                        "Lucdrei",
-                       "Moyogo"
+                       "Moyogo",
+                       "GabiBil"
                ]
        },
        "tog-underline": "Sublinierea legăturilor:",
        "rcfilters-filter-showlinkedto-label": "Arată schimbările din paginile ce trimit la",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Pages ce trimit la</strong> pagina selectată",
        "rcfilters-target-page-placeholder": "Introduceți numele unei pagini (sau categorii)",
+       "rcfilters-allcontents-label": "Tot conținutul",
+       "rcfilters-alldiscussions-label": "Toate discuțiile",
        "rcnotefrom": "Dedesubt {{PLURAL:$5|se află o modificare|sunt modificările}} începând cu <b>$3, $4</b> (maximum <b>$1</b> afișate).",
        "rclistfromreset": "Resetați selectarea datei",
        "rclistfrom": "Afișează modificările începând cu $3, ora $2",
        "sessionfailure": "Se pare că este o problemă cu sesiunea de autentificare; această acțiune a fost oprită ca o precauție împotriva furtului sesiunii. Vă rugăm să trimiteți formularul din nou.",
        "changecontentmodel": "Modificare model de conținut al unei pagini",
        "changecontentmodel-legend": "Modifică modelul de conținut",
-       "changecontentmodel-title-label": "Titlul paginii",
+       "changecontentmodel-title-label": "Titul paginii:",
        "changecontentmodel-current-label": "Modelul de conținut curent:",
-       "changecontentmodel-model-label": "Model de conținut nou",
+       "changecontentmodel-model-label": "Model de conținut nou:",
        "changecontentmodel-reason-label": "Motiv:",
        "changecontentmodel-submit": "Schimbă",
        "changecontentmodel-success-title": "Modelul de conținut a fost modificat",
index e2ee243..7b56d69 100644 (file)
        "createaccountmail": "Ause 'na passuord temboranèe a uecchije e mannale a l'indirizze email specificate",
        "createaccountmail-help": "Pò essere ausate pe ccrejà 'n'utende pe 'n'otre crestiane senze ca adda canoscere 'a passuord.",
        "createacct-realname": "Nome vere (opzionale)",
-       "createacct-reason": "Mutive",
+       "createacct-reason": "Mutive (archiviate pubblecamende)",
        "createacct-reason-ph": "Purcé tu ste ccreje 'n'otre cunde utende?",
        "createacct-reason-help": "Messàgge 'ndrucate jndr'à l'archivije d'a ccrejazzione de le utinde",
        "createacct-submit": "Ccreje 'u cunde utende tune",
        "nocreate-loggedin": "Non ge tine le permesse pe ccreja pàggene nuève.",
        "sectioneditnotsupported-title": "Sezione de le cangiaminde none supportate",
        "sectioneditnotsupported-text": "Sezione de le cangiaminde non g'è supportate sus a sta pàgene de cangiaminde.",
+       "modeleditnotsupported-title": "'U cangiamende non g'è supportate",
+       "modeleditnotsupported-text": "'U cangiamende non g'è supportate pu modelle de condenute $1.",
        "permissionserrors": "Errore de permesse",
        "permissionserrorstext": "Tu non ge tine 'u permesse pe fà ste cose, pe {{PLURAL:$1|stu mutive|ste mutive}}:",
        "permissionserrorstext-withaction": "Tu non ge tine 'u permesse pe $2, pe {{PLURAL:$1|stu mutive|ste mutive}}:",
        "rcfilters-exclude-button-off": "Scitte le scacchiate",
        "rcfilters-exclude-button-on": "Scettanne le scacchiate",
        "rcfilters-view-tags": "Cangiaminde taggate",
+       "rcfilters-view-namespaces-tooltip": "Filtre le resultate pe namespace",
+       "rcfilters-view-tags-tooltip": "Filtre le resultate ausanne le tag de cangiamende",
+       "rcfilters-view-return-to-default-tooltip": "Tuèrne a 'u menu de le filtre prengepàle",
        "rcfilters-liveupdates-button": "Aggiornaminde in tiembe reale",
        "rcfilters-liveupdates-button-title-on": "Stute le aggiornaminde automatece",
        "rcfilters-watchlist-markseen-button": "Signe tutte le cangiaminde cumme 'ndrucate",
        "ipblocklist-legend": "Iacchije 'n'utende blocchete",
        "blocklist-userblocks": "Scunne le blocche sus a le cunde de l'utinde",
        "blocklist-tempblocks": "Scunne le blocche temboranèe",
+       "blocklist-indefblocks": "Scunne le blocche indefinite",
        "blocklist-addressblocks": "Scunne le blocche de le IP singole",
        "blocklist-type": "Tipe:",
        "blocklist-type-opt-all": "Tutte",
index 72a7dd2..b103404 100644 (file)
        "tog-useeditwarning": "Предупреждать, когда я покидаю страницу с несохранёнными изменениями",
        "tog-prefershttps": "Всегда использовать защищённое соединение после представления системе",
        "tog-showrollbackconfirmation": "Запрашивать подтверждение при нажатии ссылки для отката",
+       "tog-requireemail": "Требовать адрес электронной почты для сброса пароля",
        "underline-always": "Всегда",
        "underline-never": "Никогда",
        "underline-default": "Использовать настройки браузера",
        "prefs-help-email": "Адрес почты не обязателен, но это единственный способ восстановить забытый пароль.",
        "prefs-help-email-others": "Он также позволит другим участникам связаться с вами по электронной почте с помощью ссылки на вашей персональной странице или на вашей странице обсуждения. При этом ваш адрес электронной почты не будет никому раскрыт.",
        "prefs-help-email-required": "Необходимо указать адрес электронной почты.",
+       "prefs-help-requireemail": "Если этот флажок установлен, электронные письма для сброса пароля будут отправляться только в том случае, если лицо, осуществляющее сброс, указало для этой учётной записи и имя пользователя, и адрес электронной почты.",
        "prefs-info": "Основные сведения",
        "prefs-i18n": "Интернационализация",
        "prefs-signature": "Подпись",
        "ipblocklist-legend": "Поиск заблокированного участника",
        "blocklist-userblocks": "Скрыть блокировки учётных записей",
        "blocklist-tempblocks": "Скрыть временные блокировки",
+       "blocklist-indefblocks": "Скрыть неопределённые блокировки",
        "blocklist-addressblocks": "Скрыть блокировки отдельных IP",
        "blocklist-type": "Тип:",
        "blocklist-type-opt-all": "Все",
index 9a40d38..4b6d57b 100644 (file)
        "ipblocklist-legend": "Poišči blokiranega uporabnika",
        "blocklist-userblocks": "skrij blokade računov",
        "blocklist-tempblocks": "skrij začasne blokade",
+       "blocklist-indefblocks": "Skrij neomejene blokade",
        "blocklist-addressblocks": "skrij blokade posameznih IP-naslovov",
        "blocklist-type": "Vrsta:",
        "blocklist-type-opt-all": "Vse",
index 7dd965f..46362ae 100644 (file)
        "ipblocklist-legend": "Sök efter en blockerad användare",
        "blocklist-userblocks": "Dölj kontoblockeringar",
        "blocklist-tempblocks": "Dölj tillfälliga blockeringar",
+       "blocklist-indefblocks": "Dölj otydliga blockeringar",
        "blocklist-addressblocks": "Dölj enskilda IP-blockeringar",
        "blocklist-type": "Typ:",
        "blocklist-type-opt-all": "Alla",
index 96eafc2..ac99d59 100644 (file)
@@ -66,9 +66,9 @@
        "underline-never": "Ńigdy",
        "underline-default": "Podug sztalowańo uoglůndarki",
        "editfont-style": "Styl czćůnki we placu sprowjyń:",
-       "editfont-monospace": "Monotypowe krojło",
-       "editfont-sansserif": "Bezszeryfowe krojło",
-       "editfont-serif": "Szeryfowe krojło",
+       "editfont-monospace": "Monotypowe pismo",
+       "editfont-sansserif": "Bezszeryfowe pismo",
+       "editfont-serif": "Szeryfowe pismo",
        "sunday": "Niydziela",
        "monday": "Pyńdziałek",
        "tuesday": "Wtorek",
        "sort-ascending": "Sortuj rosnůnco",
        "nstab-main": "Strōna",
        "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Strōna ôd używŏcza|Strōna ôd używŏczki}}",
-       "nstab-media": "Pliki",
+       "nstab-media": "Zbiōr",
        "nstab-special": "Specjalnŏ strōna",
        "nstab-project": "Strōna projektu",
        "nstab-image": "Zbiōr",
        "virus-badscanner": "Felerno konfiguracyjo – ńyznany skaner antywirusowy ''$1''",
        "virus-scanfailed": "skanowańy ńyudone (feler $1)",
        "virus-unknownscanner": "ńyznajůmy průgram antywirusowy",
-       "logouttext": "'''Terozki jeżeś wylůgowany'''.\n\nDej pozůr, co na ńykerych zajtach przeglůndarka może dali pokozywać co jeżeś zalůgowany, a bydźe tak aże uodśwjyżysz jeij cache.",
+       "logouttext": "<strong>Używŏcz je wylogowany.</strong>\n\nDej pozōr, że podwiela niy ôdświyżysz cache przeglōndarki, niykere strōny mogōm sie durch pokazować choćby trwało zalogowanie.",
        "welcomeuser": "Witej, $1",
        "welcomecreation-msg": "Uotwarli my sam lo Ćebje kůnto.\nPamjyntej coby posztalować [[Special:Preferences|preferencyji]]",
        "yourname": "Miano ôd używŏcza:",
        "login": "Wloguj sie",
        "nav-login-createaccount": "Logowańy / Tworzyńy kůnta",
        "logout": "Wyloguj",
-       "userlogout": "Uodloguj śe",
+       "userlogout": "Ôdlogowanie",
        "notloggedin": "Niy je żeś wlogowany(ŏ)",
        "userlogin-noaccount": "Niy mŏsz kōnta?",
        "userlogin-joinproject": "Dołōncz do {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "nosuchusershort": "Ńy mo sam użytkowńika uo mjańe \"$1\".",
        "nouserspecified": "Musisz podać miano ôd używŏcza.",
        "login-userblocked": "Tyn sprowjorz mo zawarte sprowjyńa. Ńy idźe śe zalogować.",
-       "wrongpassword": "Hasło kere żeś naszkryfloł je felerne. Poprůbůj naszkryflać je jeszcze roz.",
+       "wrongpassword": "Wkludzōny login abo hasło sōm felerne.\nSprōbuj zaś.",
        "wrongpasswordempty": "Hasło kere żeś podou je uostawjůne blank. Naszkryflej je jeszcze roz.",
        "passwordtooshort": "Hasło kere żeś podoł je felerne abo za krůtke.\nHasło muśi mjeć przinojmńij {{PLURAL:$1|1 buchsztaba|$1 buchsztabůw}} a być inksze uod mjana użytkowńika.",
        "password-name-match": "Hasło mo być inksze atoli mjano używocza.",
        "changeemail-newemail": "Nowŏ e-mailowŏ adresa:",
        "changeemail-none": "podstawowo",
        "changeemail-submit": "Spamjyntej nowy",
-       "resettokens": "Resetuj tokeny",
+       "resettokens": "Resetuj tokyny",
        "bold_sample": "Ruby tekst",
        "bold_tip": "Ruby tekst",
        "italic_sample": "Kursywa",
        "editingold": "'''Dej pozůr: Sprowjosz inkszo wersyjo zajty kej bjeżůnco. Jeli jům naszkryflosz, wszyjske půźńyjsze pomjyńańa bydům wyćepane.'''",
        "yourdiff": "Rōżnice",
        "copyrightwarning": "Pamjyntej uo tym, aże cołki wkłod do {{SITENAME}} udostympńůmy wedle zasad $2 (dokładńij we $1). Jak ńy chcesz, coby kożdy můg go půmjyńać a dalij rozpowszychńoć, ńy wćepuj uůnygo sam. Szkryflajůnc sam tukej pośwjadczosz tyż, co te pisańy je twoje własne, abo żeś go wźůn(a) ze materjołůw kere sům na ''public domain'', abo kůmpatybilne.<br />\n'''PROSZA ŃY WĆEPYWAĆ SAM MATYRJOŁŮW KERE SŮM CHRŮŃONE AUTORSKIM PRAWYM BEZ DOZWOLEŃO WŁAŚĆIĆELA!'''",
-       "copyrightwarning2": "Pamjyntej uo tym, aże cołki wkłod do {{GRAMMAR:MS.lp|{{SITENAME}}}} może być sprowjany, pomjyńany abo wyćepany bez inkszych użytkownikůw. Jak ńy chcysz, coby kożdy můg uůnygo zmjyńać a dalij rozpowszychńoć bez uograniczyń, ńy wćepuj go sam.<br />\nSzkryflajůnc sam tukej pośwjadczosz tyż, co te pisańy je twoje własne, abo żeś go wźůn(a) ze matyrjołůw kere sům na public domain, abo kůmpatybilne (kuknij tyż: $1).\n'''PROSZA ŃY WĆEPYWAĆ SAM MATYRJOŁŮW KERE SŮM CHRŮŃONE PRAWYM AUTORSKIM BEZ DOZWOLEŃO WŁAŚĆIĆELA!'''",
+       "copyrightwarning2": "Dej pozōr, iże cołki wkłŏd na {{SITENAME}} może być edytowany, zmiyniany abo kasowany ôd inkszych używŏczōw. Jeźli niy chcesz, żeby twōj tekst bōł niymiyłosiernie edytowany, to niy wkludzej go sam.<br />\nPrzirzekŏsz tyż nōm, iże wszyjsko je napisane ôd ciebie abo skopiowane ze dōmyny publicznyj abo podobnego wolnego zdrzōdła (po wiyncyj informacyji patrz $1).\n<strong>Niy wkludzej dzieł chrōniōnych autorskimi prawami bez przizwolyniŏ!</strong>",
        "longpageerror": "''Feler: Tekst kery żeś sam wćepywoł mo {{PLURAL:$1|jedyn kilobajt|$1 kilobajtůw}}. Maksymalno dugość tekstu ńy może być srogszo kej {{PLURAL:$2|jedyn kilobajt|$2 kilobajtůw}}. Twůj tekst ńy bydźe sam naszkryflany.'''",
        "readonlywarning": "'''Dej pozůr: Baza danych zostoua filowo zawarto skuli potřeb admińistracyjnych. Bestůž ńy do śe terozki naškryflać Twojich pomjyńań. Radzymy přećepać nowy tekst kajś do plika tekstowego (wytnij/wklej) a wćepać sam zaś po uodymkńyńću bazy.'''\n\nAdmińistrator kery zawar baza dou take wyjaśńyńe: $1",
        "protectedpagewarning": "'''Dej pozůr: Sprowjańe tyj zajty zostoło zawarte. Mogům jům sprowjać ino użytkowńicy ze uprawńyńami admińistratora.'''\nUostatńy wpis w rejerze je poniżej.",
        "cascadeprotectedwarning": "'''Dej pozůr:''' Ta zajta zostoła zawarto a ino użytkowńicy ze uprawńyńami admińistratora mogům jům sprowjać. Zajta ta je podpjynto pod {{PLURAL:$1|nastympujůnco zajta, kero zostoła zawarto|nastympujůncych zajtach, kere zostouy zawarte}} ze załůnczonům uopcjům dźedźiczyńo:",
        "titleprotectedwarning": "'''Dej pozůr: Zajta uo tym titlu zostoła zawarto a ino [[Special:ListGroupRights|ńykerzi użytkowńicy]] mogům jům wćepać.'''\nUostatńy wpis z rejera je ńyżej.",
        "templatesused": "{{PLURAL:$1|Muster użyty|Mustry użyte}} na tyj strōnie:",
-       "templatesusedpreview": "{{PLURAL:$1|Muster użyty|Mustry użyte}} na tyj podglōńdzie:",
+       "templatesusedpreview": "{{PLURAL:$1|Muster użyty|Mustry użyte}} na tym podglōńdzie:",
        "templatesusedsection": "{{PLURAL:$1|Szablon|Szablůny}} użyte we tyj tajli:",
        "template-protected": "(chrōniōny)",
        "template-semiprotected": "(pōłzawarte)",
        "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> ze <strong>$3</strong>|Rezultaty <strong>$1 – $2</strong> ze <strong>$3</strong>}}",
        "search-nonefound": "Żŏdne wyniki niy ôdpowiadajōm tymu zapytaniu.",
        "powersearch-legend": "Sznupańy zaawansowane",
-       "powersearch-ns": "Sznupej we przestrzyńach mjan:",
+       "powersearch-ns": "Szukej we przestrzyniach mian:",
        "powersearch-togglelabel": "Ôznŏcz:",
        "powersearch-toggleall": "Wszyjsko",
        "powersearch-togglenone": "Nic",
        "prefs-searchoptions": "Sznupańe",
        "prefs-namespaces": "Raumy mjan",
        "default": "důmyślńy",
-       "prefs-files": "Pliki",
+       "prefs-files": "Zbiory",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Mjano używocza}}:",
        "prefs-memberingroups": "Należy do {{PLURAL:$1|grupy|grup:}}",
        "right-bigdelete": "Wyćep zajty s dugům historyjům půmjyńań",
        "right-deleterevision": "Wyćepywańy a wćepywańy nazod wskazanych sprowjyń zajtůw",
        "right-deletedhistory": "Pokazuj historyjo usuńyntych sprowjyń, bez tekstu uopisu",
-       "right-browsearchive": "Sznupej za wyćepanymi zajtůma",
+       "right-browsearchive": "Szukej we skasowanych strōnach",
        "right-undelete": "Prziwrŏcanie skasowanych strōn",
        "right-suppressrevision": "Přyglůndańy i uodtwařańy sprowjyń schrůńůnych před admińistratorami",
        "right-suppressionlog": "Pokoż prywatne lůgi",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ôbejzdrzij tyż [[Special:NewPages|listã nowych strōn]])",
        "rcfilters-legend-heading": "<strong>Wykŏz skrōtōw:</strong>",
        "rcfilters-other-review-tools": "Inksze nŏrzyńdzia kōntrole",
+       "rcfilters-savedqueries-cancel-label": "Pociep",
+       "rcfilters-search-placeholder": "Filtruj zmiany (użyj myni abo wyszukej podle filtra)",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Edytorzi, co niy sōm zalogowani.",
        "rcfilters-filter-humans-label": "Czowiek (niy bot)",
+       "rcfilters-filter-pageedits-label": "Edycyje strōny",
+       "rcfilters-filter-newpages-label": "Tworzynie strōn",
+       "rcfilters-filter-logactions-label": "Registrowane czyności",
        "rcfilters-liveupdates-button": "Aktualizacyje na żywo",
        "rcfilters-liveupdates-button-title-on": "Zastŏw aktualizacyje na żywo",
        "rcnotefrom": "Niżyj {{PLURAL:$5|je zmiana|sōm zmiany}} ôd <strong>$3, $4</strong> ({{PLURAL:$5|je pokŏzanŏ|sōm pokŏzane}} nojwyżyj <strong>$1</strong>).",
        "hist": "hist.",
        "hide": "Skryj",
        "show": "Pokŏż",
-       "minoreditletter": "d",
+       "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajty|bajtōw}} po zmianie",
        "recentchangeslinked-to": "Pokŏż zmiany na strōnach, co linkujōm do podanyj strōny",
        "upload": "Zaladuj zbiōr",
        "uploadbtn": "Prziślij zbiōr",
-       "reuploaddesc": "Nazod do formulařa uod wćepywańo.",
+       "reuploaddesc": "Pociep przesyłanie i wrōć do formulara.",
        "uploadnologin": "Niy je żeś wlogowany(ŏ)",
        "uploadnologintext": "Muśyš śe [[Special:UserLogin|zalůgować]] ńim wćepńeš pliki.",
        "upload_directory_missing": "Katalog lo wćepywanych plikůw ($1) ńy istńeje a serwer WWW ńy poradźi go utwořić.",
        "upload_directory_read_only": "Serwer ńy može škryflać do katalůgu ($1) kery je přeznačůny na wćepywane pliki.",
        "uploaderror": "Feler při wćepywańu",
-       "uploadtext": "Ůžyj formulařa půńižej do wćepywańo plikůw.\nJak chceš přejřeć dotychčas wćepane pliki, abo w ńich šnupać, přeńdź do [[Special:FileList|listy douůnčůnych plikůw]]. Wšyjstke wćepańo uodnotowane sům we [[Special:Log/upload|rejeře přesůuanych plikůw]], a jygo wyćepańy we [[Special:Log/delete|rejeře wyćepanych]].\n\nPlik pojawi śe na zajće, jak užyješ linka wedle jydnygo s nastympujůncych wzorůw:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.jpg]]</nowiki></code>''' pokože plik we pounyj postaći\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Plik.png|200px|thumb|left|tekst uopisu]]</nowiki></code>''' pokože šyroko na 200 pikseli mińjaturka umjyščůno při lewym margineśe, uotočůno bez ramka, s podpisym „podpis grafiki”\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Plik.ogg]]</nowiki></code>''' dowo bezpostředńi link do plika ńy pokozujůnc go",
+       "uploadtext": "Użyj formulara niżyj, żeby przisłać zbiory.\nŻeby przejzdrzeć abo szukać zaladowane zbiory, idź do [[Special:FileList|listy zaladowanych zbiorōw]], przisłania sōm tyż listowane we [[Special:Log/upload|regeście przisłań]], skasowania sōm we [[Special:Log/delete|regeście skasowań]].\n\nŻeby wrazić zbiōr na strōnã, użyj linka we jednyj ze formōw niżyj:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Zbiōr.jpg]]</nowiki></code></strong>, żeby użyć połnyj wersyje zbioru\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Zbiōr.png|200px|thumb|left|alt text]]</nowiki></code></strong>, żeby użyć 200 pikselōw szyrokõ miniaturã we rōmce przi lewym marginesie ze „alt text” za ôpis\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Zbiōr.ogg]]</nowiki></code></strong>, żeby bezpostrzednio linkować zbiōr bez jego pokazowaniŏ",
        "upload-permitted": "Dopuščalne formaty plikůw: $1.",
        "upload-preferred": "Zalecane formaty plikůw: $1.",
        "upload-prohibited": "Zakozane formaty plikůw: $1.",
        "filedelete-reason-otherlist": "Inkszy powůd",
        "filedelete-reason-dropdown": "* Nojczynstsze powody wyćepańa\n** Naruszyńy praw autorskych\n** Kopja plika kery już sam jest",
        "filedelete-edit-reasonlist": "Sprowjańe powodůw wyćepańo zajty",
-       "mimesearch": "Sznupej MIME",
+       "mimesearch": "Szukanie podle typu MIME",
        "mimesearch-summary": "Ta zajta ůmožliwjo šnupańe za plikůma wedle jeich typu MIME. Užyće: typtreśći/podtyp, np. <code>image/jpeg</code>.",
        "mimetype": "Typ MIME:",
        "download": "pobier",
        "unwatchedpages": "Zajty na kere ńy je dowany pozůr",
        "listredirects": "Lista przekerowań",
+       "listduplicatedfiles": "Lista zbiorōw ze tuplikatami",
        "unusedtemplates": "Niyużywane mustry",
        "unusedtemplatestext": "Půńižej znojdowo śe lista wšyjstkich zajtůw s přestřyńi mjan {{ns:template}}, kere ńy sům užywane bez inkše zajty. Sprowdź inkše adresowańa ku šablůnům, ńim wyćepńeš ta zajta.",
        "unusedtemplateswlh": "ku adresatu",
        "statistics-articles": "Zajty",
        "statistics-pages": "Zajty",
        "statistics-pages-desc": "Wszyjstke zajty na wiki, wroz ze zajtami godki, przekerowańami a t.p.",
-       "statistics-files": "Wćepane pliki",
+       "statistics-files": "Zaladowane zbiory",
        "statistics-edits": "Sprowjyńa wykůnane uod powstańo {{grammar:D.lp|{{SITENAME}}}}",
        "statistics-edits-average": "Strzedńo liczba sprowjyń na zajta",
        "statistics-users": "Zarejerowanych użytkowńikůw",
        "wantedpages": "Potrzebne strōny",
        "wantedfiles": "Potrzebne zbiory",
        "wantedtemplates": "Potrzebne mustry",
-       "mostlinked": "Nojczyńśćij adresowane",
-       "mostlinkedcategories": "Kategoryje we kerych je nojwjyncyj artikli",
+       "mostlinked": "Nojczyńścij linkowane",
+       "mostlinkedcategories": "Nojwiyncyj używane kategoryje",
        "mostlinkedtemplates": "Nojczyńśćij adresowane mustry",
-       "mostcategories": "Zajty kere majům nojwiyncyj kategoryjůw",
-       "mostimages": "Nojczyńśćij adresowane pliki",
-       "mostrevisions": "Nojczyńśćij sprowjane artikle",
+       "mostcategories": "Strōny, co majōm nojwiyncyj kategoryji",
+       "mostimages": "Nojczyńścij używane zbiory",
+       "mostinterwikis": "Strōny, co majōm nojwiyncyj linkōw interwiki",
+       "mostrevisions": "Nojwiyncyj edytowane strōny",
        "prefixindex": "Wszyjske strōny ze prefiksym",
        "shortpages": "Nojkrōtsze strōny",
        "longpages": "Duge strōny",
        "booksources": "Zdrzōdła ksiōnżek",
        "booksources-search-legend": "Szukej informacyji ô ksiōnżkach",
        "booksources-search": "Szukej",
-       "booksources-text": "Půńiżyj je lista uodnośńikůw do inkszych witryn, kere pośredńiczům we sprzedaży nowych a używanych buchůw, a tyż můgům mjeć dolsze informacyje uo poszukiwanym bez ćebje buchu.",
+       "booksources-text": "Niżyj je wykŏz linkōw do inkszych strōn, co przedŏwajōm nowe i używane ksiōnżki, i mogōm mieć dalsze informacyje ô ksiōnżkach, co ich szukŏsz:",
        "booksources-invalid-isbn": "Podany numer ISBN zostoł rozpoznany kej felerny. Sprowdź aże podany numer je zgodny s numerym kery je we zdrzůdle.",
        "specialloguserlabel": "Fto:",
        "speciallogtitlelabel": "Cyl (nazwa abo {{ns:user}}:miano ôd używŏcza):",
        "categories": "Kategoryje",
        "categoriespagetext": "Zajta przedstowjo lista katygoryji s zajtůma a plikůma.\n[[Special:UnusedCategories|Ńyużywane kategoryj]] ńy zostoły tukej pokozane.\nKukńij tyż [[Special:WantedCategories|ńyistńyjůnce kategoryje]].",
        "categoriesfrom": "Pokož kategoryje začynajůnc uod:",
-       "deletedcontributions": "Wyćepane sprowjyńa użytkowńika",
-       "deletedcontributions-title": "Wyćepane sprowjyńa użytkowńika",
+       "deletedcontributions": "Skasowany wkłŏd ôd używŏcza",
+       "deletedcontributions-title": "Skasowany wkłŏd ôd używŏcza",
        "sp-deletedcontributions-contribs": "wkłŏd",
-       "linksearch": "Necowe uodwołańa",
+       "linksearch": "Szukanie zewnyntrznych linkōw",
        "linksearch-pat": "Wzorzec sznupańo",
        "linksearch-ns": "Przestrzyń mjan",
        "linksearch-ok": "Šnupej",
        "show-big-image-preview": "Srogość tego podglōndu: $1.",
        "show-big-image-other": "{{PLURAL:$2|Inkszŏ rozdzielczość|Inksze rozdzielczości}}: $1.",
        "show-big-image-size": "$1 x $2 pikselōw",
-       "newimages": "Galerjo nowych uobrozkůw",
+       "newimages": "Galeryjŏ nowych ôbrŏzkōw",
        "imagelisttext": "Půnižyj na {{PLURAL:$1||posortowanyj $2}} liśće {{PLURAL:$1|znojdowo|znojdujům|znojdowo}} śe '''$1''' {{PLURAL:$1|plik|pliki|plikůw}}.",
        "newimages-summary": "Na tyj ekstra zajće prezyntowane sům uostatńo wćepńynte pliki.",
        "newimages-legend": "Filtruj",
        "table_pager_limit_submit": "Pokož",
        "table_pager_empty": "Brak wynikůw",
        "autosumm-blank": "POZŮR! Usůńjyńće treśći (zajta pozostoła pusto)!",
-       "autosumm-replace": "POZŮR! Zastůmpjyńy treśći hasua bardzo krůtkym tekstym: „$1”",
+       "autosumm-replace": "Zastōmpiynie zawartości tekstym „$1”",
        "autoredircomment": "Przekerowanie do [[$1]]",
        "autosumm-new": "Stworzōnŏ nowõ strōnã: \"$1\"",
        "lag-warn-normal": "Na tyj liśće zmjany nowsze jak {{PLURAL:$1|sekůnda|sekůnd}} můgům ńy być widoczne.",
        "redirect-page": "Idyntyfikatōr strōny",
        "redirect-revision": "Wersyjŏ strōny",
        "redirect-file": "Miano zbioru",
-       "fileduplicatesearch": "Šnupej za duplikatym plika",
+       "fileduplicatesearch": "Szukej tuplikatōw zbioru",
        "fileduplicatesearch-summary": "Šnupej za duplikatůma plika na podstawje wartośći fůnkcyji skrůtu.",
        "fileduplicatesearch-filename": "Mjano pliku:",
        "fileduplicatesearch-submit": "Šnupej",
        "specialpages": "Ekstra strōny",
        "specialpages-note-restricted": "* Ekstra zajty uogůlńy dostympne.\n* <strong class=\"mw-specialpagerestricted\">Ekstra zajty do kerych dostymp je uograńiczůny.</strong>",
        "specialpages-group-maintenance": "Reporty kōnserwacyjne",
-       "specialpages-group-other": "Inkše ekstra zajty",
+       "specialpages-group-other": "Inksze ekstra strōny",
        "specialpages-group-login": "Logowanie / registracyjŏ",
-       "specialpages-group-changes": "Pomjyńane na uostatku a rejery",
-       "specialpages-group-media": "Pliki",
+       "specialpages-group-changes": "Ôstatnie zmiany i regesty",
+       "specialpages-group-media": "Zbiory",
        "specialpages-group-users": "Używŏcze i uprawniynia",
-       "specialpages-group-highuse": "Zajty čynsto užywane",
+       "specialpages-group-highuse": "Czynsto używane strōny",
        "specialpages-group-pages": "Listy strōn",
-       "specialpages-group-pagetools": "Nořyńdźa zajtůw",
-       "specialpages-group-wiki": "Informacyje a werkcojgi wiki",
-       "specialpages-group-redirects": "Ekstra zajty, kere kerujům",
+       "specialpages-group-pagetools": "Norzyńdzia strōn",
+       "specialpages-group-wiki": "Norzyńdzia i dane",
+       "specialpages-group-redirects": "Ekstra zajty przekerowaniŏ",
        "specialpages-group-spam": "Nořyńdźa do wyćepywanio spamu",
        "blankpage": "Pusto zajta",
        "intentionallyblankpage": "Ta zajta nauůmyślńy uostoua śe pusto",
        "searchsuggest-search": "Szukej we {{SITENAME}}",
        "duration-days": "$1 {{PLURAL:$1|dziyń|dni}}",
        "expand_templates_ok": "OK",
+       "mediastatistics": "Statystyki mediōw",
        "randomrootpage": "Losowŏ strōna (bez podstrōn)",
        "changecredentials": "Zmiyń poświadczynia",
-       "changecredentials-submit": "Zmiyń poświadczynia"
+       "changecredentials-submit": "Zmiyń poświadczynia",
+       "removecredentials": "Kasowanie poświadczyń"
 }
index bda0a4f..7f242bf 100644 (file)
        "rcfilters-restore-default-filters": "Гадәттәге сөзгечләрне торгызу",
        "rcfilters-clear-all-filters": "Барлык сөзгечләрне бушату",
        "rcfilters-show-new-changes": "$1 башлап яңа үзгәрешләрне карау",
-       "rcfilters-search-placeholder": "ҮзгÓ\99Ñ\80еÑ\88лÓ\99Ñ\80не Ñ\81өзү (менÑ\8e ÐºÑ\83лланÑ\8bгÑ\8bз Ñ\8fки Ñ\81өзгеÑ\87 Ð°Ñ\82Ñ\8b Ð±Ñ\83енÑ\87а Ñ\8dзлигез)",
+       "rcfilters-search-placeholder": "ҮзгÓ\99Ñ\80еÑ\88лÓ\99Ñ\80не Ñ\81өзү (менÑ\8e ÐºÑ\83лланÑ\8bгÑ\8bз Ñ\8fки Ñ\81өзгеÑ\87 Ð¸Ñ\81еме Ð±Ñ\83енÑ\87а Ñ\8dзлÓ\99гез)",
        "rcfilters-search-placeholder-mobile": "Сөзгечләр",
        "rcfilters-invalid-filter": "Яраксыз сөзгеч",
        "rcfilters-filterlist-title": "Сөзгечләр",
        "notargettitle": "Максатсыз",
        "nopagetitle": "Мондый бит юк",
        "nopagetext": "Күрсәтелгән бит юк.",
-       "pager-newer-n": "{{PLURAL:$1|$1 яңарак}}",
-       "pager-older-n": "$1 {{PLURAL:$1|искерәк}}",
+       "pager-newer-n": "{{PLURAL:$1|1 яңарак|$1 яңарак}}",
+       "pager-older-n": "{{PLURAL:$1|1 искерәк|$1 искерәк}}",
        "suppress": "Яшерү",
        "apihelp": "API ярдәм",
        "apihelp-no-such-module": "«$1» модуле табылмады.",
        "apisandbox": "API комлыгы",
-       "apisandbox-reset": "Чистарту",
+       "apisandbox-submit": "Сорату ясарга",
+       "apisandbox-reset": "Бушату",
        "apisandbox-retry": "Кабатлау",
+       "apisandbox-helpurls": "Белешмәгә сылтамалар",
        "apisandbox-examples": "Мисаллар",
        "apisandbox-dynamic-parameters": "Өстәмә параметрлар",
+       "apisandbox-dynamic-parameters-add-label": "Параметр өстәргә:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Параметр исеме",
+       "apisandbox-dynamic-error-exists": "«$1» исемле параметр бар инде.",
+       "apisandbox-templated-parameter-reason": "Бу [[Special:ApiHelp/main#main/templatedparams|калып параметры]] $2 исемлегенең {{PLURAL:$1|мәгънә}} нигезендә тәкъдим ителә.",
+       "apisandbox-deprecated-parameters": "Искергән параметрлар",
+       "apisandbox-fetch-token": "Торенны автотутыру",
+       "apisandbox-add-multi": "Өстәү",
+       "apisandbox-submit-invalid-fields-title": "Кайбер кырлар дөрес түгел",
+       "apisandbox-submit-invalid-fields-message": "Билгеләнгән кырларны төзәтегез һәм яңадан тырышып карагыз.",
        "apisandbox-results": "Нәтиҗәләр",
        "apisandbox-continue": "Дәвам итү",
-       "apisandbox-continue-clear": "ЧиÑ\81Ñ\82аÑ\80ту",
+       "apisandbox-continue-clear": "Ð\91Ñ\83Ñ\88ату",
        "apisandbox-multivalue-all-namespaces": "$1 (Барлык исемнәр киңлекләре)",
        "apisandbox-multivalue-all-values": "$1 (Барлык мәгънәләр)",
        "booksources": "Китап чыганаклары",
        "activeusers": "Актив кулланучылар исемлеге",
        "activeusers-noresult": "Кулланучылар табылмады.",
        "listgrouprights": "Кулланучы төркемнәренең хокуклары",
-       "listgrouprights-key": "Ð\9bегенда:\n* <span class=\"listgrouprights-granted\">Бирелгән хокуклар</span>\n* <span class=\"listgrouprights-revoked\">Алынган хокуклар</span>",
+       "listgrouprights-key": "Ð\90ңлаÑ\82ма:\n* <span class=\"listgrouprights-granted\">Бирелгән хокуклар</span>\n* <span class=\"listgrouprights-revoked\">Алынган хокуклар</span>",
        "listgrouprights-group": "Төркем",
        "listgrouprights-rights": "Хокуклар",
        "listgrouprights-helppage": "Help:Төркемнәрнең хокуклары",
        "confirm": "Раслау",
        "excontent": "эчтәлек: «$1»",
        "excontentauthor": "эчтәлеге: «$1», бердәнбер авторы [[Special:Contributions/$2|$2]] ([[User talk:$2|бәхәс]])",
-       "exbeforeblank": "чистартуга кадәр булган эчтәлек: «$1»",
+       "exbeforeblank": "бушатуга кадәр булган эчтәлек: «$1»",
        "delete-confirm": "«$1» бетерү",
        "delete-legend": "Бетерү",
        "historywarning": "<strong>Игътибар:</strong> Сез бетерергә теләгән биттә үзгәртү тарихы бар, ул $1 {{PLURAL:$1|юрамадан тора}}:",
        "delete_and_move_confirm": "Әйе, битне бетерү",
        "delete_and_move_reason": "Күчерүне мөмкин итәр өчен бетерелде «[[$1]]»",
        "move-leave-redirect": "Юнәлтү калдырылсын",
-       "export": "Битләрне чыгаруы",
+       "export": "Битләрне чыгару",
        "export-submit": "Экспортлау",
        "export-addcattext": "Бу төркемнән битләр өстәү:",
        "export-addcat": "Өстәү",
        "recreate": "Яңадан төзү",
        "unit-pixel": "нкт",
        "confirm_purge_button": "Ярар",
-       "confirm-purge-top": "Бу битнең кэшы чистартылсынмы?",
-       "confirm-purge-bottom": "Кэшны чистартудан соң аның соңгы юрамасы күрсәтеләчәк.",
+       "confirm-purge-top": "Бу битнең кэшын бушатыргамы?",
+       "confirm-purge-bottom": "Кэшны бушатудан соң аның соңгы юрамасы күрсәтеләчәк.",
        "confirm-watch-button": "Ярар",
        "confirm-unwatch-button": "Ярар",
        "confirm-rollback-button": "Ярар",
        "version-software": "Урнаштырылган программа белән тәэмин ителешне",
        "version-software-product": "Продукт",
        "version-software-version": "Версия",
+       "version-entrypoints-header-entrypoint": "Керү урыны",
        "version-entrypoints-header-url": "URL",
        "version-libraries-library": "Китапханә",
        "version-libraries-version": "Версия",
        "redirect-page": "Бит идентификаторы",
        "redirect-revision": "Бит юрамасы",
        "redirect-file": "Файл исеме",
-       "fileduplicatesearch": "Бер үк файлларны эзләү",
+       "redirect-logid": "Көндәлек ID",
+       "redirect-not-exists": "Мәгънәсе табылмады",
+       "redirect-not-numeric": "Мәгънәсе сан зурлыгы түгел",
+       "fileduplicatesearch": "Бердәй файлларны эзләү",
+       "fileduplicatesearch-summary": "Бердәй файлларны хэш-код буенча эзләү.",
        "fileduplicatesearch-filename": "Файл исеме:",
        "fileduplicatesearch-submit": "Эзләү",
        "fileduplicatesearch-info": "$1 × $2 нокта<br />Файл зурлыгы: $3<br />MIME төре: $4",
        "specialpages": "Махсус битләр",
+       "specialpages-note-top": "Аңлатма",
        "specialpages-note-restricted": "* Гади махсус битләр.\n* <span class=\"mw-specialpagerestricted\">Чикләнелгән махсус битләр.</span>",
        "specialpages-group-maintenance": "Техник карау хисапнамәсе",
        "specialpages-group-other": "Башка махсус битләр",
index 4ccd526..42af915 100644 (file)
        "cannotchangeemail": "此 wiki 無法變更帳號的電子郵件地址。",
        "emaildisabled": "此網站不能傳送電子郵件。",
        "accountcreated": "已建立帳號",
-       "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|討論]]) 已建立。",
+       "accountcreatedtext": "使用者帳號[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|討論]])已建立。",
        "createaccount-title": "{{SITENAME}} 的帳號建立",
        "createaccount-text": "不明人士使用您的電子郵件地址在 {{SITENAME}} ($4) 建立了一個帳號名稱為 \"$2\",密碼為 \"$3\"。\n您應該立即登入並更改密碼。\n\n如果該帳號是建立錯誤的話,您可以忽略此訊息。",
        "login-throttled": "您已經嘗試太多次的登入動作。\n請稍等 $1 後再試。",
        "datedefault": "預設值",
        "prefs-labs": "實驗中的功能",
        "prefs-user-pages": "使用者頁面",
-       "prefs-personal": "使用者基本資料",
+       "prefs-personal": "用戶資料",
        "prefs-rc": "近期變更",
        "prefs-watchlist": "監視清單",
        "prefs-editwatchlist": "編輯監視清單",
        "upload-preferred": "建議的檔案類型:$1。",
        "upload-prohibited": "禁止的檔案類型:$1。",
        "uploadlogpage": "上傳日誌",
-       "uploadlogpagetext": "以下清單為最近上傳的檔案。\n請檢視 [[Special:NewFiles|最新檔案圖庫]] 以視覺化的方式檢視。",
+       "uploadlogpagetext": "以下清單為最近上傳的檔案。以視覺化的方式檢視請見[[Special:NewFiles|最新檔案圖庫]]。",
        "filename": "檔案名稱",
        "filedesc": "摘要",
        "fileuploadsummary": "摘要:",
        "listgrouprights-group": "群組",
        "listgrouprights-rights": "權限",
        "listgrouprights-helppage": "Help:使用者群組權限",
-       "listgrouprights-members": "(成員清單)",
+       "listgrouprights-members": "(成員清單)",
        "listgrouprights-addgroup": "加入{{PLURAL:$2|群組}}:$1",
        "listgrouprights-removegroup": "移除{{PLURAL:$2|群組|群組}}:$1",
        "listgrouprights-addgroup-all": "加入所有群組",
index 68a0380..2334a83 100644 (file)
@@ -18,7 +18,8 @@
                        "Wxyveronica",
                        "和平至上",
                        "A2093064",
-                       "WQL"
+                       "WQL",
+                       "Sunny00217"
                ]
        },
        "tog-watchlisthidebots": "隱藏監視清單中機械人的編輯",
        "revdelete-suppress-text": "壓制'''只'''應用於以下的情況:\n* 不合適的個人資料\n*: ''地址、電話號碼、身份證號碼等。''",
        "editundo": "復原",
        "prefs-user-pages": "用戶頁面",
+       "prefs-personal": "用戶資料",
        "username": "{{GENDER:$1|用戶名稱}}:",
        "prefs-help-gender": "可選:用於軟件中的性別指定。此項資料將會被公開。",
        "group-user": "用戶",
index 1a5daca..6ea046e 100644 (file)
@@ -59,11 +59,6 @@ ALIASES                = "type{1}=<b> \1 </b>:" \
                          "codeCoverageIgnore=" \
                          "codingStandardsIgnoreEnd=" \
                          "codingStandardsIgnoreStart=" \
-                         "covers=" \
-                         "dataProvider=" \
-                         "expectedException=" \
-                         "expectedExceptionMessage=" \
-                         "group=" \
                          "phan=" \
                          "suppress="
 TCL_SUBST              =
@@ -112,8 +107,8 @@ SORT_GROUP_NAMES       = NO
 SORT_BY_SCOPE_NAME     = NO
 STRICT_PROTO_MATCHING  = NO
 GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
 GENERATE_DEPRECATEDLIST= YES
 ENABLED_SECTIONS       =
 MAX_INITIALIZER_LINES  = 30
index 6faeee8..98a2b59 100644 (file)
@@ -23,6 +23,8 @@
 
 require __DIR__ . '/../commandLine.inc';
 
+use Wikimedia\Rdbms\Database;
+
 /**
  * Maintenance script that upgrade for log_id/log_deleted fields in a
  * replication-safe way.
diff --git a/maintenance/cleanupRevActorPage.php b/maintenance/cleanupRevActorPage.php
new file mode 100644 (file)
index 0000000..ac655fc
--- /dev/null
@@ -0,0 +1,77 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that cleans up cases where rev_page and revactor_page
+ * became desynced, e.g. from T232464.
+ *
+ * @ingroup Maintenance
+ * @since 1.34
+ */
+class CleanupRevActorPage extends LoggedUpdateMaintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription(
+                       'Resyncs revactor_page with rev_page when they differ, e.g. from T232464.'
+               );
+               $this->setBatchSize( 1000 );
+       }
+
+       protected function getUpdateKey() {
+               return __CLASS__;
+       }
+
+       protected function doDBUpdates() {
+               $dbw = $this->getDB( DB_MASTER );
+               $max = $dbw->selectField( 'revision', 'MAX(rev_id)', '', __METHOD__ );
+               $batchSize = $this->mBatchSize;
+
+               $this->output( "Resyncing revactor_page with rev_page...\n" );
+
+               $count = 0;
+               for ( $start = 1; $start <= $max; $start += $batchSize ) {
+                       $end = $start + $batchSize - 1;
+                       $this->output( "... rev_id $start - $end, $count changed\n" );
+
+                       // Fetch the rows needing update
+                       $res = $dbw->select(
+                               [ 'revision', 'revision_actor_temp' ],
+                               [ 'rev_id', 'rev_page' ],
+                               [
+                                       'rev_page != revactor_page',
+                                       "rev_id >= $start",
+                                       "rev_id <= $end",
+                               ],
+                               __METHOD__,
+                               [],
+                               [ 'revision_actor_temp' => [ 'JOIN', 'rev_id = revactor_rev' ] ]
+                       );
+
+                       if ( !$res->numRows() ) {
+                               continue;
+                       }
+
+                       // Update the existing rows
+                       foreach ( $res as $row ) {
+                               $dbw->update(
+                                       'revision_actor_temp',
+                                       [ 'revactor_page' => $row->rev_page ],
+                                       [ 'revactor_rev' => $row->rev_id ],
+                                       __METHOD__
+                               );
+                               $count += $dbw->affectedRows();
+                       }
+
+                       wfWaitForSlaves();
+               }
+
+               $this->output( "Completed resync, $count row(s) updated\n" );
+
+               return true;
+       }
+}
+
+$maintClass = CleanupRevActorPage::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
index 4cc52a4..60f3884 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 require_once __DIR__ . '/Maintenance.php';
 
index d4f9c2d..03035f7 100644 (file)
@@ -20,6 +20,7 @@
  *
  * @file
  * @ingroup Maintenance
+ * @phan-file-suppress PhanUndeclaredProperty Lots of custom properties
  */
 
 require_once __DIR__ . '/Maintenance.php';
index ca67c83..3b7ba63 100644 (file)
@@ -23,7 +23,7 @@
  * @ingroup Maintenance
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 require_once __DIR__ . '/Maintenance.php';
 
index 7a5e93e..7576781 100644 (file)
@@ -267,7 +267,7 @@ U+2B127𫄧|U+07D96綖|
 U+2B128𫄨|U+07D7A絺|
 U+2B137𫄷|U+07E76繶|
 U+2B138𫄸|U+07E81纁|
-U+2B1ED𫇭|U+0853F蔿|
+U+2B1ED𫇭|U+0848D蒍|U+0853F蔿|
 U+2B300𫌀|U+08940襀|
 U+2B363𫍣|U+08A77詷|
 U+2B36F𫍯|U+08AF4諴|
index e1016dc..43c7e61 100644 (file)
 聖吉斯納域斯     圣基茨和尼维斯
 聖克里斯多福及尼維斯 圣基茨和尼维斯
 聖文森及格瑞那丁       圣文森特和格林纳丁斯
+聖文森國   圣文森特和格林纳丁斯
 聖馬利諾   圣马力诺
 蓋亞那      圭亚那
 坦尚尼亞   坦桑尼亚
 提比里西   第比利斯
 巴斯拉      巴士拉
 杜拜 迪拜
+喬治亞字母        格鲁吉亚字母
 坚杜拜      坚杜拜
 堅杜拜      坚杜拜
 賽普勒斯   塞浦路斯
@@ -2728,3 +2730,7 @@ A型肝炎        甲型肝炎
 普立茲獎   普利策奖
 富比士      福布斯
 聖多美普林西比  圣多美和普林西比
+札格瑞布   萨格勒布
+溫荷克      温得和克
+普利托利亞        比勒陀利亚
+阿迪斯阿貝巴     亚的斯亚贝巴
\ No newline at end of file
index 915050b..1eaa387 100644 (file)
 镇里 鎮裏
 》里 》裏
 空里 空裏
+牢里 牢裏
 版本里      版本裏
 苑裡 苑裡
 霄裡 霄裡
 軟體動物   軟體動物
 軟體家具   軟體家具
 網路 網絡
+全角 全形
+全角度      全角度
+全角色      全角色
 人工智慧   人工智能
 航天飞机   穿梭機
 太空梭      穿梭機
 圣基茨和尼维斯  聖吉斯納域斯
 聖克里斯多福及尼維斯 聖吉斯納域斯
 聖文森及格瑞那丁       聖文森特和格林納丁斯
+聖文森國   聖文森特和格林納丁斯
 聖馬利諾   聖馬力諾
 蓋亞那      圭亞那
 坦尚尼亞   坦桑尼亞
 西臺人      赫梯人
 阿联酋      阿聯酋
 迪拜 杜拜
-格鲁吉亚   格魯吉亞
+喬治亞字母        格魯吉亞字母
 提比里西   第比利斯
 諾鲁 瑙魯
 玻里尼西亞        波利尼西亞
@@ -3092,3 +3097,7 @@ IP地址  IP位址
 普利策奖   普立茲獎
 聖多美普林西比  聖多美和普林西比
 塔希提      大溪地
+札格瑞布   薩格勒布
+溫荷克      溫得和克
+普利托利亞        比勒陀利亞
+阿迪斯阿貝巴     亞的斯亞貝巴
\ No newline at end of file
index 6329133..45fef1d 100644 (file)
 高陞 高升
 晉陞 晋升
 歷陞 历升
+尋陞 寻升
 官陞 官升
 榮陞 荣升
 又陞 又升
index 6b5ecdd..39fd1f3 100644 (file)
 三極管      三極體
 软件 軟體
 軟件 軟體
+全角 全形
+全角度      全角度
+全角色      全角色
 人工智能   人工智慧
 航天飞机   太空梭
 穿梭機      太空梭
 布隆迪      蒲隆地
 帕劳 帛琉
 意大利      義大利
+意大利面   義大利麵
 所罗门群岛        索羅門群島
 所羅門群島        索羅門群島
 文莱 汶萊
@@ -808,6 +812,7 @@ IP地址    IP位址
 残奥会      帕運會
 殘奧會      帕運會
 残疾人奥林匹克  帕拉林匹克
+殘疾人奧林匹克  帕拉林匹克
 不列颠哥伦比亚省       卑詩省
 登巴萨      丹帕沙
 登巴薩      丹帕沙
@@ -824,6 +829,12 @@ IP地址   IP位址
 格林納丁斯        格瑞那丁
 空中客车   空中巴士
 普利策奖   普立茲獎
-圣多美和普林西比       聖多美普林西比
-聖多美和普林西比       聖多美普林西比
+多美和普林西比  多美普林西比 #聖多美普林西比
 塔希提      大溪地
+萨格勒布   札格瑞布
+薩格勒布   札格瑞布
+温得和克   溫荷克
+溫得和克   溫荷克
+比勒陀利   普利托利 #普利托利亚
+亚的斯亚贝巴     阿迪斯阿貝巴
+亞的斯亞貝巴     阿迪斯阿貝巴
index 78b5a73..8bd2665 100644 (file)
@@ -6,6 +6,7 @@
 ’m   ’m
 ’t   ’t
 ’re  ’re
+𬞟   蘋
 手塚治虫   手塚治虫
 寇仇 寇讎
 往日无仇   往日無讎
@@ -78,6 +79,7 @@
 乾象曆      乾象曆
 乾象历      乾象曆
 不好干預   不好干預
+可能干預   可能干預
 范文瀾      范文瀾
 機械系      機械系
 頂多 頂多
@@ -97,6 +99,7 @@
 于帥 于帥
 于濤 于濤
 于贈 于贈
+于闐 于闐
 于會泳      于會泳
 于偉國      于偉國
 于光遠      于光遠
 于學忠      于學忠
 于小偉      于小偉
 于山國      于山國
+于山島      于山島
 于幼軍      于幼軍
 于廣洲      于廣洲
 于從濂      于從濂
 更钟情      更鍾情
 更钟爱      更鍾愛
 更钟意      更鍾意
+温嵐 温嵐
index 74064bb..5c30eb8 100644 (file)
@@ -586,6 +586,7 @@ U+08432萲|U+08431萱|
 U+08457著|U+08457著|U+07740着|
 U+08460葠|U+053C2参|
 U+0846F葯|U+0836F药|
+U+0848D蒍|U+2B1ED𫇭|
 U+08493蒓|U+083BC莼|
 U+084C6蓆|U+05E2D席|
 U+084E1蓡|U+053C2参|
index 2cf35ba..522ae31 100644 (file)
 併為一家
 併吞
 並吞下
+入侵並 #分詞用
 提摩太後書
 裏海
 不採
 捲葉蛾
 捲尾猴
 捲積雲
+被捲回
 夸父
 夸克
 夸特
 伊府麵
 藥麵兒
 意大利麵
+意大利面臨
 湯下麵
 茶麵
 麵團
 鹹豬
 甜鹹
 鹹甜
+鹹吃
 甜、鹹
 鹹、甜
 錦綉花園
 幹仗
 包幹
 幹過
+大幹一
 李連杰
 周杰
 杰倫
 不占算
 不好干涉
 不好干預
+可能干預
 不斗膽
 不每只
 不采聲
 詞裡
 》裡
 空裡
+牢裡
 版本裡
 裏白 #植物常用名
 烏蘇里 #分詞用
 于衡
 于贈
 于越
+於越南
 于靖
 于勒
 于格
+於格林
 鳳凰于飛
 于仁泰
 于會泳
 于小偉
 于小彤
 于山國
+于山島
 于幼軍
 于廣洲
 于康震
 關系科
 銹病
 嚐糞
+温嵐
index f600f13..4401ea8 100644 (file)
@@ -120,10 +120,17 @@ class MWDocGen extends Maintenance {
                        'resources/lib',
                        'images',
                        'static',
+                       'tests',
+                       'includes/libs/Message/README.md',
+                       'includes/libs/objectcache/README.md',
+                       'includes/libs/ParamValidator/README.md',
+                       'maintenance/benchmarks/README.md',
+                       'resources/src/mediawiki.ui/styleguide.md',
                ];
                $this->excludePatterns = [];
                if ( $this->hasOption( 'no-extensions' ) ) {
                        $this->excludePatterns[] = 'extensions';
+                       $this->excludePatterns[] = 'skins';
                }
 
                $this->doDot = shell_exec( 'which dot' );
index e48b6ab..1e73540 100644 (file)
@@ -21,7 +21,7 @@
  * @ingroup Maintenance
  */
 
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IDatabase;
 
 require_once __DIR__ . '/Maintenance.php';
index fddac8a..ec759da 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 
 require_once __DIR__ . '/dumpIterator.php';
 
index 3f48abb..c1170fc 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use Wikimedia\Rdbms\IDatabase;
 
 require_once __DIR__ . '/Maintenance.php';
index 038ef23..5f7f9d5 100644 (file)
@@ -36,7 +36,7 @@ use Wikimedia\Rdbms\IMaintainableDatabase;
  */
 class UserDupes {
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        private $db;
        private $reassigned;
index 726a3fe..c414c7b 100644 (file)
@@ -162,10 +162,6 @@ return [
                ],
                'targets' => [ 'mobile', 'desktop' ],
        ],
-       'jquery.checkboxShiftClick' => [
-               'scripts' => 'resources/src/jquery/jquery.checkboxShiftClick.js',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
        'jquery.chosen' => [
                'scripts' => 'resources/lib/jquery.chosen/chosen.jquery.js',
                'styles' => 'resources/lib/jquery.chosen/chosen.css',
@@ -894,6 +890,7 @@ return [
                'dependencies' => [
                        'mediawiki.api',
                        'oojs',
+                       'mediawiki.Uri',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1254,8 +1251,8 @@ return [
                ]
        ],
        'mediawiki.util' => [
-               'localBasePath' => "$IP/resources/src/mediawiki.util/",
-               'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.util/",
+               'localBasePath' => "$IP/resources/src/mediawiki.util",
+               'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.util",
                'packageFiles' => [
                        'util.js',
                        'jquery.accessKeyLabel.js',
@@ -1662,9 +1659,13 @@ return [
                ]
        ],
        'mediawiki.page.ready' => [
-               'scripts' => 'resources/src/mediawiki.page.ready.js',
+               'localBasePath' => "$IP/resources/src/mediawiki.page.ready",
+               'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.page.ready",
+               'packageFiles' => [
+                       'ready.js',
+                       'checkboxShift.js',
+               ],
                'dependencies' => [
-                       'jquery.checkboxShiftClick',
                        'mediawiki.util',
                        'mediawiki.notify',
                        'mediawiki.api'
diff --git a/resources/src/jquery/jquery.checkboxShiftClick.js b/resources/src/jquery/jquery.checkboxShiftClick.js
deleted file mode 100644 (file)
index 435e23f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @class jQuery.plugin.checkboxShiftClick
- */
-( function () {
-
-       /**
-        * Enable checkboxes to be checked or unchecked in a row by clicking one,
-        * holding shift and clicking another one.
-        *
-        * @return {jQuery}
-        * @chainable
-        */
-       $.fn.checkboxShiftClick = function () {
-               var prevCheckbox = null,
-                       $box = this;
-               // When our boxes are clicked..
-               $box.on( 'click', function ( e ) {
-                       // And one has been clicked before...
-                       if ( prevCheckbox !== null && e.shiftKey ) {
-                               // Check or uncheck this one and all in-between checkboxes,
-                               // except for disabled ones
-                               $box
-                                       .slice(
-                                               Math.min( $box.index( prevCheckbox ), $box.index( e.target ) ),
-                                               Math.max( $box.index( prevCheckbox ), $box.index( e.target ) ) + 1
-                                       )
-                                       .filter( function () {
-                                               return !this.disabled;
-                                       } )
-                                       .prop( 'checked', !!e.target.checked );
-                       }
-                       // Either way, update the prevCheckbox variable to the one clicked now
-                       prevCheckbox = e.target;
-               } );
-               return $box;
-       };
-
-       /**
-        * @class jQuery
-        * @mixins jQuery.plugin.checkboxShiftClick
-        */
-
-}() );
index 4b6313b..83ea0ce 100644 (file)
@@ -59,7 +59,6 @@
                                        }
                                },
                                parameters: {
-                                       // Add 'origin' query parameter to all requests.
                                        origin: this.getOrigin()
                                }
                        },
         * any).
         *
         * @protected
-        * @return {string}
+        * @return {string|undefined}
         */
        CoreForeignApi.prototype.getOrigin = function () {
-               var origin;
+               var origin, apiUri, apiOrigin;
                if ( this.anonymous ) {
                        return '*';
                }
+
                origin = location.protocol + '//' + location.hostname;
                if ( location.port ) {
                        origin += ':' + location.port;
                }
+
+               apiUri = new mw.Uri( this.apiUrl );
+               apiOrigin = apiUri.protocol + '://' + apiUri.getAuthority();
+               if ( origin === apiOrigin ) {
+                       // requests are not cross-origin, omit parameter
+                       return undefined;
+               }
+
                return origin;
        };
 
                if ( ajaxOptions.type === 'POST' ) {
                        url = ( ajaxOptions && ajaxOptions.url ) || this.defaults.ajax.url;
                        origin = ( parameters && parameters.origin ) || this.defaults.parameters.origin;
-                       url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
-                               // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
-                               // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
-                               'origin=' + encodeURIComponent( origin ).replace( /\./g, '%2E' );
+                       if ( origin !== undefined ) {
+                               url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
+                                       // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
+                                       // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
+                                       'origin=' + encodeURIComponent( origin ).replace( /\./g, '%2E' );
+                       }
                        newAjaxOptions = $.extend( {}, ajaxOptions, { url: url } );
                } else {
                        newAjaxOptions = ajaxOptions;
index 2c88bdc..75dae92 100644 (file)
@@ -436,15 +436,9 @@ a.new {
 
 /* Note on preview page */
 .previewnote {
-       color: #d33;
        margin-bottom: 1em;
 }
 
-.previewnote p {
-       text-indent: 3em;
-       margin: 0.8em 0;
-}
-
 .visualClear {
        clear: both;
 }
diff --git a/resources/src/mediawiki.page.ready.js b/resources/src/mediawiki.page.ready.js
deleted file mode 100644 (file)
index 0e59da6..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-( function () {
-       mw.hook( 'wikipage.content' ).add( function ( $content ) {
-               var $sortable, $collapsible;
-
-               $collapsible = $content.find( '.mw-collapsible' );
-               if ( $collapsible.length ) {
-                       // Preloaded by Skin::getDefaultModules()
-                       mw.loader.using( 'jquery.makeCollapsible', function () {
-                               $collapsible.makeCollapsible();
-                       } );
-               }
-
-               $sortable = $content.find( 'table.sortable' );
-               if ( $sortable.length ) {
-                       // Preloaded by Skin::getDefaultModules()
-                       mw.loader.using( 'jquery.tablesorter', function () {
-                               $sortable.tablesorter();
-                       } );
-               }
-
-               // Run jquery.checkboxShiftClick
-               $content.find( 'input[type="checkbox"]:not(.noshiftselect)' ).checkboxShiftClick();
-       } );
-
-       // Things outside the wikipage content
-       $( function () {
-               var $nodes;
-
-               // Add accesskey hints to the tooltips
-               $( '[accesskey]' ).updateTooltipAccessKeys();
-
-               $nodes = $( '.catlinks[data-mw="interface"]' );
-               if ( $nodes.length ) {
-                       /**
-                        * Fired when categories are being added to the DOM
-                        *
-                        * It is encouraged to fire it before the main DOM is changed (when $content
-                        * is still detached).  However, this order is not defined either way, so you
-                        * should only rely on $content itself.
-                        *
-                        * This includes the ready event on a page load (including post-edit loads)
-                        * and when content has been previewed with LivePreview.
-                        *
-                        * @event wikipage_categories
-                        * @member mw.hook
-                        * @param {jQuery} $content The most appropriate element containing the content,
-                        *   such as .catlinks
-                        */
-                       mw.hook( 'wikipage.categories' ).fire( $nodes );
-               }
-
-               $( '#t-print a' ).on( 'click', function ( e ) {
-                       window.print();
-                       e.preventDefault();
-               } );
-
-               // Turn logout to a POST action
-               $( '#pt-logout a' ).on( 'click', function ( e ) {
-                       var api = new mw.Api(),
-                               returnUrl = $( '#pt-logout a' ).attr( 'href' );
-                       mw.notify(
-                               mw.message( 'logging-out-notify' ),
-                               { tag: 'logout', autoHide: false }
-                       );
-                       api.postWithToken( 'csrf', {
-                               action: 'logout'
-                       } ).then(
-                               function () {
-                                       location.href = returnUrl;
-                               },
-                               function ( e ) {
-                                       mw.notify(
-                                               mw.message( 'logout-failed', e ),
-                                               { type: 'error', tag: 'logout', autoHide: false }
-                                       );
-                               }
-                       );
-                       e.preventDefault();
-               } );
-       } );
-
-}() );
diff --git a/resources/src/mediawiki.page.ready/.eslintrc.json b/resources/src/mediawiki.page.ready/.eslintrc.json
new file mode 100644 (file)
index 0000000..ad8dbb3
--- /dev/null
@@ -0,0 +1,5 @@
+{
+       "parserOptions": {
+               "sourceType": "module"
+       }
+}
diff --git a/resources/src/mediawiki.page.ready/checkboxShift.js b/resources/src/mediawiki.page.ready/checkboxShift.js
new file mode 100644 (file)
index 0000000..86e0ec2
--- /dev/null
@@ -0,0 +1,33 @@
+/**
+ * @private
+ * @class mw.plugin.pageready
+ */
+/**
+ * Enable checkboxes to be checked or unchecked in a row by clicking one,
+ * holding shift and clicking another one.
+ *
+ * @method checkboxShift
+ * @param {jQuery} $box
+ */
+module.exports = function ( $box ) {
+       var prev;
+       // When our boxes are clicked..
+       $box.on( 'click', function ( e ) {
+               // And one has been clicked before...
+               if ( prev && e.shiftKey ) {
+                       // Check or uncheck this one and all in-between checkboxes,
+                       // except for disabled ones
+                       $box
+                               .slice(
+                                       Math.min( $box.index( prev ), $box.index( e.target ) ),
+                                       Math.max( $box.index( prev ), $box.index( e.target ) ) + 1
+                               )
+                               .filter( function () {
+                                       return !this.disabled;
+                               } )
+                               .prop( 'checked', e.target.checked );
+               }
+               // Either way, remember this as the last clicked one
+               prev = e.target;
+       } );
+};
diff --git a/resources/src/mediawiki.page.ready/ready.js b/resources/src/mediawiki.page.ready/ready.js
new file mode 100644 (file)
index 0000000..48d605d
--- /dev/null
@@ -0,0 +1,79 @@
+var checkboxShift = require( './checkboxShift.js' );
+mw.hook( 'wikipage.content' ).add( function ( $content ) {
+       var $sortable, $collapsible;
+
+       $collapsible = $content.find( '.mw-collapsible' );
+       if ( $collapsible.length ) {
+               // Preloaded by Skin::getDefaultModules()
+               mw.loader.using( 'jquery.makeCollapsible', function () {
+                       $collapsible.makeCollapsible();
+               } );
+       }
+
+       $sortable = $content.find( 'table.sortable' );
+       if ( $sortable.length ) {
+               // Preloaded by Skin::getDefaultModules()
+               mw.loader.using( 'jquery.tablesorter', function () {
+                       $sortable.tablesorter();
+               } );
+       }
+
+       checkboxShift( $content.find( 'input[type="checkbox"]:not(.noshiftselect)' ) );
+} );
+
+// Handle elements outside the wikipage content
+$( function () {
+       var $nodes;
+
+       // Add accesskey hints to the tooltips
+       $( '[accesskey]' ).updateTooltipAccessKeys();
+
+       $nodes = $( '.catlinks[data-mw="interface"]' );
+       if ( $nodes.length ) {
+               /**
+                * Fired when categories are being added to the DOM
+                *
+                * It is encouraged to fire it before the main DOM is changed (when $content
+                * is still detached).  However, this order is not defined either way, so you
+                * should only rely on $content itself.
+                *
+                * This includes the ready event on a page load (including post-edit loads)
+                * and when content has been previewed with LivePreview.
+                *
+                * @event wikipage_categories
+                * @member mw.hook
+                * @param {jQuery} $content The most appropriate element containing the content,
+                *   such as .catlinks
+                */
+               mw.hook( 'wikipage.categories' ).fire( $nodes );
+       }
+
+       $( '#t-print a' ).on( 'click', function ( e ) {
+               window.print();
+               e.preventDefault();
+       } );
+
+       // Turn logout to a POST action
+       $( '#pt-logout a' ).on( 'click', function ( e ) {
+               var api = new mw.Api(),
+                       url = this.href;
+               mw.notify(
+                       mw.message( 'logging-out-notify' ),
+                       { tag: 'logout', autoHide: false }
+               );
+               api.postWithToken( 'csrf', {
+                       action: 'logout'
+               } ).then(
+                       function () {
+                               location.href = url;
+                       },
+                       function ( err ) {
+                               mw.notify(
+                                       mw.message( 'logout-failed', err ),
+                                       { type: 'error', tag: 'logout', autoHide: false }
+                               );
+                       }
+               );
+               e.preventDefault();
+       } );
+} );
index b738312..ecd5c05 100644 (file)
@@ -1832,11 +1832,16 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                                'revision_actor_temp', 'slots', 'content', 'content_models', 'slot_roles',
                                'change_tag',
                        ];
+                       $loggingTables = [
+                               'logging', 'log_search', 'change_tag',
+                       ];
                        $coreDBDataTables = array_merge( $userTables, $pageTables );
 
-                       // If any of the user or page tables were marked as used, we should clear all of them.
+                       // some groups of tables are connected such that if any is used, all should be cleared
+                       $extraTables = [];
                        if ( array_intersect( $tablesUsed, $userTables ) ) {
-                               $tablesUsed = array_unique( array_merge( $tablesUsed, $userTables ) );
+                               $extraTables[] = $userTables;
+
                                TestUserRegistry::clear();
 
                                // Reset $wgUser, which is probably 127.0.0.1, as its loaded data is probably not valid
@@ -1846,7 +1851,13 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                                $wgUser->clearInstanceCache( $wgUser->mFrom );
                        }
                        if ( array_intersect( $tablesUsed, $pageTables ) ) {
-                               $tablesUsed = array_unique( array_merge( $tablesUsed, $pageTables ) );
+                               $extraTables[] = $pageTables;
+                       }
+                       if ( array_intersect( $tablesUsed, $loggingTables ) ) {
+                               $extraTables[] = $loggingTables;
+                       }
+                       if ( $extraTables !== [] ) {
+                               $tablesUsed = array_unique( array_merge( $tablesUsed, ...$extraTables ) );
                        }
 
                        // Postgres uses mwuser/pagecontent
index 8fa0cd6..d34ba0a 100644 (file)
@@ -308,7 +308,16 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                                throw new MWException( 'All service callbacks must have a return type defined, ' .
                                        "none found for $name" );
                        }
-                       $ret[$name] = [ $name, $fun->getReturnType()->__toString() ];
+
+                       $returnType = $fun->getReturnType();
+
+                       // ReflectionType::__toString() generates deprecation notices in PHP 7.4 and above
+                       // TODO: T228342 - remove this check after MediaWiki only supports PHP 7.1+
+                       if ( is_callable( [ $returnType, 'getName' ] ) ) {
+                               $ret[$name] = [ $name, $returnType->getName() ];
+                       } else {
+                               $ret[$name] = [ $name, $fun->getReturnType()->__toString() ];
+                       }
                }
                return $ret;
        }
index f4d324d..99332d2 100644 (file)
@@ -4,7 +4,6 @@ namespace MediaWiki\Tests\Revision;
 
 use ActorMigration;
 use CommentStore;
-use MediaWiki\Logger\Spi as LoggerSpi;
 use MediaWiki\Revision\RevisionStore;
 use MediaWiki\Revision\RevisionStoreFactory;
 use MediaWiki\Revision\SlotRoleRegistry;
@@ -35,7 +34,7 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
                        $this->getMockCommentStore(),
                        ActorMigration::newMigration(),
                        MIGRATION_OLD,
-                       $this->getMockLoggerSpi(),
+                       new NullLogger(),
                        true
                );
                $this->assertTrue( true );
@@ -65,7 +64,7 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
                $cache = $this->getHashWANObjectCache();
                $commentStore = $this->getMockCommentStore();
                $actorMigration = ActorMigration::newMigration();
-               $loggerProvider = $this->getMockLoggerSpi();
+               $logger = new NullLogger();
 
                $factory = new RevisionStoreFactory(
                        $lbFactory,
@@ -76,7 +75,7 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
                        $commentStore,
                        $actorMigration,
                        $mcrMigrationStage,
-                       $loggerProvider,
+                       $logger,
                        $contentHandlerUseDb
                );
 
@@ -178,16 +177,4 @@ class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
                return new WANObjectCache( [ 'cache' => new \HashBagOStuff() ] );
        }
 
-       /**
-        * @return \PHPUnit_Framework_MockObject_MockObject|LoggerSpi
-        */
-       private function getMockLoggerSpi() {
-               $mock = $this->getMock( LoggerSpi::class );
-
-               $mock->method( 'getLogger' )
-                       ->willReturn( new NullLogger() );
-
-               return $mock;
-       }
-
 }
index ed4a27f..249fa78 100644 (file)
@@ -850,8 +850,7 @@ class RevisionTest extends MediaWikiTestCase {
                );
 
                $cacheKey = $cache->makeGlobalKey(
-                       'BlobStore',
-                       'address',
+                       'SqlBlobStore-blob',
                        $lb->getLocalDomainID(),
                        'tt:7777'
                );
index 82ccb9a..608d590 100644 (file)
@@ -834,8 +834,23 @@ class TitleTest extends MediaWikiTestCase {
                return [
                        [ Title::makeTitle( NS_SPECIAL, 'Test' ) ],
                        [ Title::makeTitle( NS_MEDIA, 'Test' ) ],
-                       [ Title::makeTitle( NS_MAIN, '', 'Kittens' ) ],
-                       [ Title::makeTitle( NS_MAIN, 'Kittens', '', 'acme' ) ],
+               ];
+       }
+
+       public static function provideGetTalkPage_broken() {
+               // These cases *should* be bad, but are not treated as bad, for backwards compatibility.
+               // See discussion on T227817.
+               return [
+                       [
+                               Title::makeTitle( NS_MAIN, '', 'Kittens' ),
+                               Title::makeTitle( NS_TALK, '' ), // Section is lost!
+                               false,
+                       ],
+                       [
+                               Title::makeTitle( NS_MAIN, 'Kittens', '', 'acme' ),
+                               Title::makeTitle( NS_TALK, 'Kittens', '' ), // Interwiki prefix is lost!
+                               true,
+                       ],
                ];
        }
 
@@ -895,6 +910,23 @@ class TitleTest extends MediaWikiTestCase {
                $title->getTalkPage();
        }
 
+       /**
+        * @dataProvider provideGetTalkPage_broken
+        * @covers Title::getTalkPageIfDefined
+        */
+       public function testGetTalkPage_broken( Title $title, Title $expected, $valid ) {
+               $errorLevel = error_reporting( E_ERROR );
+
+               // NOTE: Eventually we want to throw in this case. But while there is still code that
+               // calls this method without checking, we want to avoid fatal errors.
+               // See discussion on T227817.
+               $result = $title->getTalkPage();
+               $this->assertTrue( $expected->equals( $result ) );
+               $this->assertSame( $valid, $result->isValid() );
+
+               error_reporting( $errorLevel );
+       }
+
        /**
         * @dataProvider provideGetTalkPage_good
         * @covers Title::getTalkPageIfDefined
index 2d19d38..fe6fcfc 100644 (file)
@@ -182,7 +182,6 @@ class ApiBlockTest extends ApiTestCase {
                $this->setMwGlobals( [
                        'wgEnableEmail' => true,
                        'wgEnableUserEmail' => true,
-                       'wgSysopEmailBans' => true,
                ] );
 
                $res = $this->doBlock( [ 'noemail' => '' ] );
@@ -200,7 +199,6 @@ class ApiBlockTest extends ApiTestCase {
                $this->setMwGlobals( [
                        'wgEnableEmail' => true,
                        'wgEnableUserEmail' => true,
-                       'wgSysopEmailBans' => true,
                ] );
 
                $this->setExpectedException( ApiUsageException::class,
index 0a2558a..dce1a5f 100644 (file)
@@ -79,15 +79,46 @@ class ApiQuerySiteinfoTest extends ApiTestCase {
                $this->assertSame( 'Need more donations', $data['readonlyreason'] );
        }
 
-       public function testNamespaces() {
-               $this->setMwGlobals( 'wgExtraNamespaces', [ '138' => 'Testing' ] );
+       public function testNamespacesBasic() {
+               $this->assertSame(
+                       array_keys( MediaWikiServices::getInstance()->getContentLanguage()->getFormattedNamespaces() ),
+                       array_keys( $this->doQuery( 'namespaces' ) )
+               );
+       }
 
+       public function testNamespacesExtraNS() {
+               $this->setMwGlobals( 'wgExtraNamespaces', [ '138' => 'Testing' ] );
                $this->assertSame(
                        array_keys( MediaWikiServices::getInstance()->getContentLanguage()->getFormattedNamespaces() ),
                        array_keys( $this->doQuery( 'namespaces' ) )
                );
        }
 
+       public function testNamespacesProtection() {
+               $this->setMwGlobals(
+                       'wgNamespaceProtection',
+                       [
+                               '0' => '',
+                               '2' => [ '' ],
+                               '4' => 'editsemiprotected',
+                               '8' => [
+                                       'editinterface',
+                                       'noratelimit'
+                               ],
+                               '14' => [
+                                       'move-categorypages',
+                                       ''
+                               ]
+                       ]
+               );
+               $data = $this->doQuery( 'namespaces' );
+               $this->assertArrayNotHasKey( 'namespaceprotection', $data['0'] );
+               $this->assertArrayNotHasKey( 'namespaceprotection', $data['2'] );
+               $this->assertSame( 'editsemiprotected', $data['4']['namespaceprotection'] );
+               $this->assertSame( 'editinterface|noratelimit', $data['8']['namespaceprotection'] );
+               $this->assertSame( 'move-categorypages', $data['14']['namespaceprotection'] );
+       }
+
        public function testNamespaceAliases() {
                global $wgNamespaceAliases;
 
index 6a00e67..230d36a 100644 (file)
@@ -6,6 +6,7 @@ use MediaWiki\Block\CompositeBlock;
 use MediaWiki\Block\SystemBlock;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\TestingAccessWrapper;
+use Psr\Log\LoggerInterface;
 
 /**
  * @group Blocking
@@ -48,13 +49,15 @@ class BlockManagerTest extends MediaWikiTestCase {
        private function getBlockManagerConstructorArgs( $overrideConfig ) {
                $blockManagerConfig = array_merge( $this->blockManagerConfig, $overrideConfig );
                $this->setMwGlobals( $blockManagerConfig );
+               $logger = $this->getMockBuilder( LoggerInterface::class )->getMock();
                return [
                        new LoggedServiceOptions(
                                self::$serviceOptionsAccessLog,
                                BlockManager::$constructorOptions,
                                MediaWikiServices::getInstance()->getMainConfig()
                        ),
-                       MediaWikiServices::getInstance()->getPermissionManager()
+                       MediaWikiServices::getInstance()->getPermissionManager(),
+                       $logger
                ];
        }
 
index cd3ddfa..1f9d29e 100644 (file)
@@ -430,4 +430,18 @@ class LinksUpdateTest extends MediaWikiLangTestCase {
                        $queueGroup->ack( $job );
                }
        }
+
+       public function testIsRecursive() {
+               list( $title, $po ) = $this->makeTitleAndParserOutput( 'Test', 1 );
+               $linksUpdate = new LinksUpdate( $title, $po );
+               $this->assertTrue( $linksUpdate->isRecursive(), 'LinksUpdate is recursive by default' );
+
+               $linksUpdate = new LinksUpdate( $title, $po, true );
+               $this->assertTrue( $linksUpdate->isRecursive(),
+                       'LinksUpdate is recursive when asked to be recursive' );
+
+               $linksUpdate = new LinksUpdate( $title, $po, false );
+               $this->assertFalse( $linksUpdate->isRecursive(),
+                       'LinksUpdate is not recursive when asked to be not recursive' );
+       }
 }
index 3b30d7e..e344d57 100644 (file)
@@ -2422,7 +2422,7 @@ class FileBackendTest extends MediaWikiTestCase {
                        "$base/subdir2/subdir/sub/120-px-file.txt",
                ];
 
-               for ( $i = 0; $i < 25; $i++ ) {
+               for ( $i = 0; $i < 2; $i++ ) {
                        $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
                        $this->assertEquals( print_r( [], true ), print_r( $status->getErrors(), true ),
                                "Locking of files succeeded ($backendName) ($i)." );
index 35eca28..13f2b17 100644 (file)
@@ -13,7 +13,7 @@ use Wikimedia\TestingAccessWrapper;
  * @covers SwiftFileBackendList
  */
 class SwiftFileBackendTest extends MediaWikiTestCase {
-       /** @var TestingAccessWrapper Proxy to SwiftFileBackend */
+       /** @var TestingAccessWrapper|SwiftFileBackend */
        private $backend;
 
        protected function setUp() {
@@ -34,26 +34,28 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provider_testSanitizeHdrsStrict
+        * @covers SwiftFileBackend::extractMutableContentHeaders
+        * @dataProvider provider_testExtractPostableContentHeaders
         */
-       public function testSanitizeHdrsStrict( $raw, $sanitized ) {
-               $hdrs = $this->backend->sanitizeHdrsStrict( [ 'headers' => $raw ] );
+       public function testExtractPostableContentHeaders( $raw, $sanitized ) {
+               $hdrs = $this->backend->extractMutableContentHeaders( $raw );
 
-               $this->assertEquals( $hdrs, $sanitized, 'sanitizeHdrsStrict() has expected result' );
+               $this->assertEquals( $hdrs, $sanitized, 'Correct extractPostableContentHeaders() result' );
        }
 
-       public static function provider_testSanitizeHdrsStrict() {
+       public static function provider_testExtractPostableContentHeaders() {
                return [
                        [
                                [
                                        'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-disposition' => 'inline',
                                        'content-duration' => 35.6363,
                                        'content-Custom' => 'hello',
                                        'x-content-custom' => 'hello'
                                ],
                                [
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-disposition' => 'inline',
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
@@ -63,13 +65,14 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
                        [
                                [
                                        'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-Disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
                                        'x-content-custom' => 'hello'
                                ],
                                [
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-disposition' => 'inline;filename=xxx',
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
@@ -79,13 +82,14 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
                        [
                                [
                                        'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-disposition' => 'filename=' . str_repeat( 'o', 1024 ) . ';inline',
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
                                        'x-content-custom' => 'hello'
                                ],
                                [
+                                       'content-type' => 'image+bitmap/jpeg',
                                        'content-disposition' => '',
                                        'content-duration' => 35.6363,
                                        'content-custom' => 'hello',
@@ -96,75 +100,11 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
        }
 
        /**
-        * @dataProvider provider_testSanitizeHdrs
-        */
-       public function testSanitizeHdrs( $raw, $sanitized ) {
-               $hdrs = $this->backend->sanitizeHdrs( [ 'headers' => $raw ] );
-
-               $this->assertEquals( $hdrs, $sanitized, 'sanitizeHdrs() has expected result' );
-       }
-
-       public static function provider_testSanitizeHdrs() {
-               return [
-                       [
-                               [
-                                       'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => 'inline',
-                                       'content-duration' => 35.6363,
-                                       'content-Custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ],
-                               [
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => 'inline',
-                                       'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ]
-                       ],
-                       [
-                               [
-                                       'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-Disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
-                                       'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ],
-                               [
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => 'inline;filename=xxx',
-                                       'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ]
-                       ],
-                       [
-                               [
-                                       'content-length' => 345,
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => 'filename=' . str_repeat( 'o', 1024 ) . ';inline',
-                                       'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ],
-                               [
-                                       'content-type'   => 'image+bitmap/jpeg',
-                                       'content-disposition' => '',
-                                       'content-duration' => 35.6363,
-                                       'content-custom' => 'hello',
-                                       'x-content-custom' => 'hello'
-                               ]
-                       ]
-               ];
-       }
-
-       /**
+        * @covers SwiftFileBackend::extractMetadataHeaders
         * @dataProvider provider_testGetMetadataHeaders
         */
        public function testGetMetadataHeaders( $raw, $sanitized ) {
-               $hdrs = $this->backend->getMetadataHeaders( $raw );
+               $hdrs = $this->backend->extractMetadataHeaders( $raw );
 
                $this->assertEquals( $hdrs, $sanitized, 'getMetadataHeaders() has expected result' );
        }
@@ -188,10 +128,11 @@ class SwiftFileBackendTest extends MediaWikiTestCase {
        }
 
        /**
+        * @covers SwiftFileBackend::getMetadataFromHeaders
         * @dataProvider provider_testGetMetadata
         */
        public function testGetMetadata( $raw, $sanitized ) {
-               $hdrs = $this->backend->getMetadata( $raw );
+               $hdrs = $this->backend->getMetadataFromHeaders( $raw );
 
                $this->assertEquals( $hdrs, $sanitized, 'getMetadata() has expected result' );
        }
index e7f7067..a459441 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
 use Wikimedia\TestingAccessWrapper;
 
@@ -49,9 +50,10 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
 
        /**
         * Get a basic PreferencesFactory for testing with.
+        * @param PermissionManager|null $manager
         * @return DefaultPreferencesFactory
         */
-       protected function getPreferencesFactory() {
+       protected function getPreferencesFactory( PermissionManager $manager = null ) {
                $mockNsInfo = $this->createMock( NamespaceInfo::class );
                $mockNsInfo->method( 'getValidNamespaces' )->willReturn( [
                        NS_MAIN, NS_TALK, NS_USER, NS_USER_TALK
@@ -59,13 +61,16 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                $mockNsInfo->expects( $this->never() )
                        ->method( $this->anythingBut( 'getValidNamespaces', '__destruct' ) );
 
+               $mockPermissionManager = $manager ?? $this->createMock( PermissionManager::class );
+
                return new DefaultPreferencesFactory(
                        new LoggedServiceOptions( self::$serviceOptionsAccessLog,
                                DefaultPreferencesFactory::$constructorOptions, $this->config ),
                        new Language(),
                        AuthManager::singleton(),
                        MediaWikiServices::getInstance()->getLinkRenderer(),
-                       $mockNsInfo
+                       $mockNsInfo,
+                       $mockPermissionManager
                );
        }
 
@@ -88,7 +93,9 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
         * @dataProvider emailAuthenticationProvider
         */
        public function testEmailAuthentication( $user, $cssClass ) {
-               $prefs = $this->getPreferencesFactory()->getFormDescriptor( $user, $this->context );
+               $pm = $this->createMock( PermissionManager::class );
+               $pm->method( 'userHasRight' )->willReturn( true );
+               $prefs = $this->getPreferencesFactory( $pm )->getFormDescriptor( $user, $this->context );
                $this->assertArrayHasKey( 'cssclass', $prefs['emailauthentication'] );
                $this->assertEquals( $cssClass, $prefs['emailauthentication']['cssclass'] );
        }
@@ -100,16 +107,18 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                $userMock = $this->getMockBuilder( User::class )
                        ->disableOriginalConstructor()
                        ->getMock();
-               $userMock->method( 'isAllowed' )
-                       ->willReturn( false );
                $userMock->method( 'getEffectiveGroups' )
                        ->willReturn( [] );
                $userMock->method( 'getGroupMemberships' )
                        ->willReturn( [] );
                $userMock->method( 'getOptions' )
                        ->willReturn( [ 'test' => 'yes' ] );
-
-               $prefs = $this->getPreferencesFactory()->getFormDescriptor( $userMock, $this->context );
+               $pm = $this->createMock( PermissionManager::class );
+               $pm->method( 'userHasRight' )
+                       ->will( $this->returnValueMap( [
+                               [ $userMock, 'editmyoptions', true ]
+                       ] ) );
+               $prefs = $this->getPreferencesFactory( $pm )->getFormDescriptor( $userMock, $this->context );
                $this->assertArrayNotHasKey( 'showrollbackconfirmation', $prefs );
        }
 
@@ -120,16 +129,19 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                $userMock = $this->getMockBuilder( User::class )
                        ->disableOriginalConstructor()
                        ->getMock();
-               $userMock->method( 'isAllowed' )
-                       ->willReturn( true );
                $userMock->method( 'getEffectiveGroups' )
                        ->willReturn( [] );
                $userMock->method( 'getGroupMemberships' )
                        ->willReturn( [] );
                $userMock->method( 'getOptions' )
                        ->willReturn( [ 'test' => 'yes' ] );
-
-               $prefs = $this->getPreferencesFactory()->getFormDescriptor( $userMock, $this->context );
+               $pm = $this->createMock( PermissionManager::class );
+               $pm->method( 'userHasRight' )
+                       ->will( $this->returnValueMap( [
+                               [ $userMock, 'editmyoptions', true ],
+                               [ $userMock, 'rollback', true ]
+                       ] ) );
+               $prefs = $this->getPreferencesFactory( $pm )->getFormDescriptor( $userMock, $this->context );
                $this->assertArrayHasKey( 'showrollbackconfirmation', $prefs );
                $this->assertEquals(
                        'rendering/advancedrendering',
@@ -181,10 +193,6 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                        ->getMock();
                $userMock->method( 'getOptions' )
                        ->willReturn( $oldOptions );
-               $userMock->method( 'isAllowedAny' )
-                       ->willReturn( true );
-               $userMock->method( 'isAllowed' )
-                       ->willReturn( true );
 
                $userMock->expects( $this->exactly( 2 ) )
                        ->method( 'setOption' )
@@ -193,18 +201,25 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                                [ $this->equalTo( 'option' ), $this->equalTo( $newOptions[ 'option' ] ) ]
                        );
 
-               $form->expects( $this->any() )
-                       ->method( 'getModifiedUser' )
+               $form->method( 'getModifiedUser' )
                        ->willReturn( $userMock );
 
-               $form->expects( $this->any() )
-                       ->method( 'getContext' )
+               $form->method( 'getContext' )
                        ->willReturn( $this->context );
 
-               $form->expects( $this->any() )
-                       ->method( 'getConfig' )
+               $form->method( 'getConfig' )
                        ->willReturn( $configMock );
 
+               $pm = $this->createMock( PermissionManager::class );
+               $pm->method( 'userHasAnyRight' )
+                       ->will( $this->returnValueMap( [
+                               [ $userMock, 'editmyprivateinfo', 'editmyoptions', true ]
+                       ] ) );
+               $pm->method( 'userHasRight' )
+                       ->will( $this->returnValueMap( [
+                               [ $userMock, 'editmyoptions', true ]
+                       ] ) );
+
                $this->setTemporaryHook( 'PreferencesFormPreSave',
                        function ( $formData, $form, $user, &$result, $oldUserOptions )
                                use ( $newOptions, $oldOptions, $userMock ) {
@@ -220,7 +235,7 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                );
 
                /** @var DefaultPreferencesFactory $factory */
-               $factory = TestingAccessWrapper::newFromObject( $this->getPreferencesFactory() );
+               $factory = TestingAccessWrapper::newFromObject( $this->getPreferencesFactory( $pm ) );
                $factory->saveFormData( $newOptions, $form, [] );
        }
 
@@ -233,7 +248,14 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                // Test a string with leading zeros (i.e. not octal) and spaces.
                $this->context->getRequest()->setVal( 'wprclimit', ' 0012 ' );
                $user = new User;
-               $form = $this->getPreferencesFactory()->getForm( $user, $this->context );
+               $pm = $this->createMock( PermissionManager::class );
+               $pm->method( 'userHasAnyRight' )
+                       ->willReturn( true );
+               $pm->method( 'userHasRight' )
+                       ->will( $this->returnValueMap( [
+                               [ $user, 'editmyoptions', true ]
+                       ] ) );
+               $form = $this->getPreferencesFactory( $pm )->getForm( $user, $this->context );
                $form->show();
                $form->trySubmit();
                $this->assertEquals( 12, $user->getOption( 'rclimit' ) );
index 0b1d013..45fa143 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\User\UserIdentityValue;
 use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\LoadBalancer;
@@ -66,14 +67,16 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
 
        /**
         * @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb
+        * @param PHPUnit_Framework_MockObject_MockObject|PermissionManager $mockPM
         * @return WatchedItemQueryService
         */
-       private function newService( $mockDb ) {
+       private function newService( $mockDb, $mockPM = null ) {
                return new WatchedItemQueryService(
                        $this->getMockLoadBalancer( $mockDb ),
                        $this->getMockCommentStore(),
                        $this->getMockActorMigration(),
-                       $this->getMockWatchedItemStore()
+                       $this->getMockWatchedItemStore(),
+                       $mockPM ?: $this->getMockPermissionManager()
                );
        }
 
@@ -153,6 +156,25 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
                return $mock;
        }
 
+       /**
+        * @param string $notAllowedAction
+        * @return PHPUnit_Framework_MockObject_MockObject|PermissionManager
+        */
+       private function getMockPermissionManager( $notAllowedAction = null ) {
+               $mock = $this->getMockBuilder( PermissionManager::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->method( 'userHasRight' )
+                       ->will( $this->returnCallback( function ( $user, $action ) use ( $notAllowedAction ) {
+                               return $action !== $notAllowedAction;
+                       } ) );
+               $mock->method( 'userHasAnyRight' )
+                       ->will( $this->returnCallback( function ( $user, ...$actions ) use ( $notAllowedAction ) {
+                               return !in_array( $notAllowedAction, $actions );
+                       } ) );
+               return $mock;
+       }
+
        /**
         * @param int $id
         * @param string[] $extraMethods Extra methods that are expected might be called
@@ -177,9 +199,7 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
         */
        private function getMockUnrestrictedNonAnonUserWithId( $id, array $extraMethods = [] ) {
                $mock = $this->getMockNonAnonUserWithId( $id,
-                       array_merge( [ 'isAllowed', 'isAllowedAny', 'useRCPatrol' ], $extraMethods ) );
-               $mock->method( 'isAllowed' )->willReturn( true );
-               $mock->method( 'isAllowedAny' )->willReturn( true );
+                       array_merge( [ 'useRCPatrol' ], $extraMethods ) );
                $mock->method( 'useRCPatrol' )->willReturn( true );
                return $mock;
        }
@@ -189,18 +209,9 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
         * @param string $notAllowedAction
         * @return PHPUnit_Framework_MockObject_MockObject|User
         */
-       private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id, $notAllowedAction ) {
+       private function getMockNonAnonUserWithIdAndRestrictedPermissions( $id ) {
                $mock = $this->getMockNonAnonUserWithId( $id,
-                       [ 'isAllowed', 'isAllowedAny', 'useRCPatrol', 'useNPPatrol' ] );
-
-               $mock->method( 'isAllowed' )
-                       ->will( $this->returnCallback( function ( $action ) use ( $notAllowedAction ) {
-                               return $action !== $notAllowedAction;
-                       } ) );
-               $mock->method( 'isAllowedAny' )
-                       ->will( $this->returnCallback( function ( ...$actions ) use ( $notAllowedAction ) {
-                               return !in_array( $notAllowedAction, $actions );
-                       } ) );
+                       [ 'useRCPatrol', 'useNPPatrol' ] );
                $mock->method( 'useRCPatrol' )->willReturn( false );
                $mock->method( 'useNPPatrol' )->willReturn( false );
 
@@ -213,15 +224,7 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
         */
        private function getMockNonAnonUserWithIdAndNoPatrolRights( $id ) {
                $mock = $this->getMockNonAnonUserWithId( $id,
-                       [ 'isAllowed', 'isAllowedAny', 'useRCPatrol', 'useNPPatrol' ] );
-
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowed' )
-                       ->will( $this->returnValue( true ) );
-               $mock->expects( $this->any() )
-                       ->method( 'isAllowedAny' )
-                       ->will( $this->returnValue( true ) );
-
+                       [ 'useRCPatrol', 'useNPPatrol' ] );
                $mock->expects( $this->any() )
                        ->method( 'useRCPatrol' )
                        ->will( $this->returnValue( false ) );
@@ -1132,9 +1135,10 @@ class WatchedItemQueryServiceUnitTest extends MediaWikiTestCase {
                        )
                        ->will( $this->returnValue( [] ) );
 
-               $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1, $notAllowedAction );
+               $permissionManager = $this->getMockPermissionManager( $notAllowedAction );
+               $user = $this->getMockNonAnonUserWithIdAndRestrictedPermissions( 1 );
 
-               $queryService = $this->newService( $mockDb );
+               $queryService = $this->newService( $mockDb, $permissionManager );
                $items = $queryService->getWatchedItemsWithRecentChangeInfo( $user, $options );
 
                $this->assertEmpty( $items );
index 22b5938..edb7618 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
-* @covers MWDoxygenFilter
+ * @covers MWDoxygenFilter
  */
 class MWDoxygenFilterTest extends \PHPUnit\Framework\TestCase {
 
index 8eadb0e..ca71d32 100644 (file)
@@ -4,7 +4,7 @@ namespace MediaWiki\Tests\Maintenance;
 
 use ContentHandler;
 use FetchText;
-use MediaWiki\Storage\RevisionRecord;
+use MediaWiki\Revision\RevisionRecord;
 use MediaWikiTestCase;
 use MWException;
 use Title;
index 541c610..22a3a4b 100644 (file)
                return api.post( {} );
        } );
 
+       QUnit.test( 'origin is not included in same-origin GET requests', function ( assert ) {
+               var apiUrl = location.protocol + '//' + location.host + '/w/api.php',
+                       api = new mw.ForeignApi( apiUrl );
+
+               this.server.respond( function ( request ) {
+                       assert.strictEqual( request.url.match( /origin=.*?(?:&|$)/ ), null, 'origin is not included in GET requests' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+
+               return api.get( {} );
+       } );
+
+       QUnit.test( 'origin is not included in same-origin POST requests', function ( assert ) {
+               var apiUrl = location.protocol + '//' + location.host + '/w/api.php',
+                       api = new mw.ForeignApi( apiUrl );
+
+               this.server.respond( function ( request ) {
+                       assert.strictEqual( request.requestBody.match( /origin=.*?(?:&|$)/ ), null, 'origin is not included in POST request body' );
+                       assert.strictEqual( request.url.match( /origin=.*?(?:&|$)/ ), null, 'origin is not included in POST request URL, either' );
+                       request.respond( 200, { 'Content-Type': 'application/json' }, '[]' );
+               } );
+
+               return api.post( {} );
+       } );
+
 }() );
index 6b674b9..45c6e62 100644 (file)
@@ -3,6 +3,32 @@ const MWBot = require( 'mwbot' );
 // TODO: Once we require Node 7 or later, we can use async-await.
 
 module.exports = {
+       /**
+        * Get a logged-in instance of `MWBot` with edit token already set up.
+        * Default username, password and base URL is used unless specified.
+        *
+        * @since 0.5.0
+        * @param {string} username - Optional
+        * @param {string} password - Optional
+        * @param {string} baseUrl - Optional
+        * @return {Promise<MWBot>}
+        */
+       bot(
+               username = browser.options.username,
+               password = browser.options.password,
+               baseUrl = browser.options.baseUrl
+       ) {
+               const bot = new MWBot();
+
+               return bot.loginGetEditToken( {
+                       apiUrl: `${baseUrl}/api.php`,
+                       username: username,
+                       password: password
+               } ).then( function () {
+                       return bot;
+               } );
+       },
+
        /**
         * Shortcut for `MWBot#edit( .. )`.
         * Default username, password and base URL is used unless specified
@@ -22,15 +48,10 @@ module.exports = {
                password = browser.options.password,
                baseUrl = browser.options.baseUrl
        ) {
-               const bot = new MWBot();
-
-               return bot.loginGetEditToken( {
-                       apiUrl: `${baseUrl}/api.php`,
-                       username: username,
-                       password: password
-               } ).then( function () {
-                       return bot.edit( title, content, `Created or updated page with "${content}"` );
-               } );
+               return this.bot( username, password, baseUrl )
+                       .then( function ( bot ) {
+                               return bot.edit( title, content, `Created or updated page with "${content}"` );
+                       } );
        },
 
        /**
@@ -43,15 +64,10 @@ module.exports = {
         * @return {Object} Promise for API action=delete response data.
         */
        delete( title, reason ) {
-               const bot = new MWBot();
-
-               return bot.loginGetEditToken( {
-                       apiUrl: `${browser.options.baseUrl}/api.php`,
-                       username: browser.options.username,
-                       password: browser.options.password
-               } ).then( function () {
-                       return bot.delete( title, reason );
-               } );
+               return this.bot()
+                       .then( function ( bot ) {
+                               return bot.delete( title, reason );
+                       } );
        },
 
        /**
@@ -94,23 +110,17 @@ module.exports = {
         * @return {Object} Promise for API action=block response data.
         */
        blockUser( username, expiry ) {
-               const bot = new MWBot();
-
-               // Log in as admin
-               return bot.loginGetEditToken( {
-                       apiUrl: `${browser.options.baseUrl}/api.php`,
-                       username: browser.options.username,
-                       password: browser.options.password
-               } ).then( () => {
-                       // block user. default = admin
-                       return bot.request( {
-                               action: 'block',
-                               user: username || browser.options.username,
-                               reason: 'browser test',
-                               token: bot.editToken,
-                               expiry
+               return this.bot()
+                       .then( function ( bot ) {
+                               // block user. default = admin
+                               return bot.request( {
+                                       action: 'block',
+                                       user: username || browser.options.username,
+                                       reason: 'browser test',
+                                       token: bot.editToken,
+                                       expiry
+                               } );
                        } );
-               } );
        },
 
        /**
@@ -122,21 +132,15 @@ module.exports = {
         * @return {Object} Promise for API action=unblock response data.
         */
        unblockUser( username ) {
-               const bot = new MWBot();
-
-               // Log in as admin
-               return bot.loginGetEditToken( {
-                       apiUrl: `${browser.options.baseUrl}/api.php`,
-                       username: browser.options.username,
-                       password: browser.options.password
-               } ).then( () => {
-                       // unblock user. default = admin
-                       return bot.request( {
-                               action: 'unblock',
-                               user: username || browser.options.username,
-                               reason: 'browser test done',
-                               token: bot.editToken
+               return this.bot()
+                       .then( function ( bot ) {
+                               // unblock user. default = admin
+                               return bot.request( {
+                                       action: 'unblock',
+                                       user: username || browser.options.username,
+                                       reason: 'browser test done',
+                                       token: bot.editToken
+                               } );
                        } );
-               } );
        }
 };
index 5be1ed0..bedf171 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -524,7 +524,7 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath
  * /w/images/thumb/a/ab/Foo.png/120px-Foo.png. The $thumbRel parameter
  * of this function would be set to "a/ab/Foo.png/120px-Foo.png".
  * This method is responsible for turning that into an array
- * with the folowing keys:
+ * with the following keys:
  *  * f => the filename (Foo.png)
  *  * rel404 => the whole thing (a/ab/Foo.png/120px-Foo.png)
  *  * archived => 1 (If the request is for an archived thumb)