Merge "RCFilters: Add marker between old and new changes in enhanced mode"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 17 Aug 2017 05:56:42 +0000 (05:56 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 17 Aug 2017 05:56:42 +0000 (05:56 +0000)
377 files changed:
.gitattributes
.gitignore
RELEASE-NOTES-1.30
autoload.php
composer.json
includes/AuthPlugin.php
includes/Block.php
includes/ConfiguredReadOnlyMode.php [new file with mode: 0644]
includes/DefaultSettings.php
includes/EditPage.php
includes/FauxRequest.php
includes/FileDeleteForm.php
includes/GlobalFunctions.php
includes/Licenses.php
includes/Linker.php
includes/MagicWord.php
includes/MagicWordArray.php
includes/Message.php
includes/MovePage.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Preferences.php
includes/ProtectionForm.php
includes/RawMessage.php [new file with mode: 0644]
includes/ReadOnlyMode.php
includes/Revision.php
includes/RevisionList.php
includes/Sanitizer.php
includes/SiteConfiguration.php
includes/StubObject.php
includes/Title.php
includes/TrackingCategories.php
includes/api/ApiAuthManagerHelper.php
includes/api/ApiBase.php
includes/api/ApiCSPReport.php
includes/api/ApiDelete.php
includes/api/ApiMain.php
includes/api/ApiParamInfo.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQuerySearch.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiUsageException.php
includes/api/SearchApi.php
includes/api/i18n/ar.json
includes/api/i18n/he.json
includes/api/i18n/ru.json
includes/auth/AbstractAuthenticationProvider.php
includes/auth/AbstractPrimaryAuthenticationProvider.php
includes/auth/AbstractSecondaryAuthenticationProvider.php
includes/auth/PrimaryAuthenticationProvider.php
includes/cache/LinkBatch.php
includes/cache/MessageCache.php
includes/cache/localisation/LocalisationCache.php
includes/changes/ChangesFeed.php
includes/changes/ChangesList.php
includes/changes/ChangesListBooleanFilter.php
includes/changes/ChangesListBooleanFilterGroup.php
includes/changes/ChangesListFilterGroup.php
includes/changes/ChangesListStringOptionsFilter.php
includes/changes/ChangesListStringOptionsFilterGroup.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/changes/RecentChange.php
includes/changetags/ChangeTags.php
includes/collation/CustomUppercaseCollation.php
includes/collation/NumericUppercaseCollation.php
includes/compat/normal/UtfNormal.php
includes/content/ContentHandler.php
includes/content/JsonContent.php
includes/content/TextContent.php
includes/content/TextContentHandler.php
includes/context/ContextSource.php
includes/context/RequestContext.php
includes/db/ORAResult.php
includes/debug/logger/LegacyLogger.php
includes/debug/logger/monolog/BufferHandler.php
includes/debug/logger/monolog/KafkaHandler.php
includes/debug/logger/monolog/LineFormatter.php
includes/deferred/SiteStatsUpdate.php
includes/diff/DiffFormatter.php
includes/diff/WordLevelDiff.php
includes/exception/MWExceptionHandler.php
includes/export/DumpFilter.php
includes/export/DumpNamespaceFilter.php
includes/export/WikiExporter.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/gallery/TraditionalImageGallery.php
includes/htmlform/HTMLForm.php
includes/import/UploadSourceAdapter.php
includes/import/WikiImporter.php
includes/installer/CliInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerOptions.php
includes/installer/i18n/ar.json
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bn.json
includes/installer/i18n/de.json
includes/installer/i18n/en.json
includes/installer/i18n/he.json
includes/installer/i18n/hi.json
includes/installer/i18n/ko.json
includes/installer/i18n/mk.json
includes/installer/i18n/nb.json
includes/installer/i18n/nl.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/ru.json
includes/installer/i18n/sv.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobRunner.php
includes/libs/ArrayUtils.php
includes/libs/IEUrlExtension.php
includes/libs/MemoizedCallable.php
includes/libs/MultiHttpClient.php
includes/libs/composer/ComposerInstalled.php
includes/libs/composer/ComposerLock.php
includes/libs/filebackend/FileBackend.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/filebackend/fileop/FileOp.php
includes/libs/lockmanager/ScopedLock.php
includes/libs/mime/IEContentAnalyzer.php
includes/libs/mime/XmlTypeCheck.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/objectcache/RESTBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/encasing/Blob.php
includes/libs/rdbms/exception/DBExpectedError.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/redis/RedisConnectionPool.php
includes/libs/stats/NullStatsdDataFactory.php
includes/libs/stats/SamplingStatsdClient.php
includes/logging/LogEventsList.php
includes/logging/LogPage.php
includes/mail/UserMailer.php
includes/media/Bitmap.php
includes/media/Bitmap_ClientOnly.php
includes/media/FormatMetadata.php
includes/media/ImageHandler.php
includes/media/Jpeg.php
includes/media/MediaHandler.php
includes/media/SVG.php
includes/media/TransformationalImageHandler.php
includes/media/WebP.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/profiler/ProfileSection.php
includes/profiler/Profiler.php
includes/profiler/SectionProfiler.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderJqueryMsgModule.php
includes/resourceloader/ResourceLoaderMediaWikiUtilModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/revisiondelete/RevDelList.php
includes/revisiondelete/RevisionDeleter.php
includes/search/NullIndexField.php
includes/search/SearchEngine.php
includes/search/SearchExactMatchRescorer.php
includes/search/SearchHighlighter.php
includes/search/SearchIndexField.php
includes/search/SearchIndexFieldDefinition.php
includes/search/SearchMySQL.php
includes/search/SearchResult.php
includes/search/SearchSqlite.php
includes/search/SearchSuggestion.php
includes/session/PHPSessionHandler.php
includes/session/SessionProvider.php
includes/session/Token.php
includes/site/Site.php
includes/site/SiteImporter.php
includes/skins/BaseTemplate.php
includes/skins/QuickTemplate.php
includes/skins/Skin.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialBlock.php
includes/specials/SpecialDiff.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialExport.php
includes/specials/SpecialFilepath.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialPageLanguage.php
includes/specials/SpecialPermanentLink.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialSearch.php
includes/specials/SpecialWatchlist.php
includes/specials/helpers/LoginHelper.php
includes/specials/pagers/ProtectedPagesPager.php
includes/specials/pagers/UsersPager.php
includes/templates/EnhancedChangesListGroup.mustache
includes/tidy/Balancer.php
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadFromFile.php
includes/upload/UploadFromStash.php
includes/upload/UploadFromUrl.php
includes/user/User.php
includes/utils/AutoloadGenerator.php
includes/utils/BatchRowUpdate.php
includes/utils/BatchRowWriter.php
includes/widget/search/InterwikiSearchResultSetWidget.php
includes/widget/search/InterwikiSearchResultWidget.php
languages/Language.php
languages/LanguageCode.php
languages/classes/LanguageEn.php
languages/classes/LanguageKk.php
languages/classes/LanguageSr.php
languages/data/Names.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en-gb.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/ha.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kab.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/my.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/rif.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sd.json
languages/i18n/shi.json
languages/i18n/shn.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tay.json [new file with mode: 0644]
languages/i18n/te.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/vi.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesKm.php
maintenance/archives/patch-ip_changes.sql [new file with mode: 0644]
maintenance/hhvm/makeRepo.php
maintenance/refreshLinks.php
maintenance/sqlite/archives/patch-ip_changes.sql [new file with mode: 0644]
maintenance/tables.sql
phpcs.xml
resources/Resources.php
resources/lib/html5shiv/html5shiv.js [new file with mode: 0644]
resources/lib/html5shiv/html5shiv.min.js [new file with mode: 0644]
resources/src/jquery/jquery.mwExtension.js
resources/src/jquery/jquery.tablesorter.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.skinning/interface.css
resources/src/mediawiki.special/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.special/mediawiki.special.watchlist.css [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.watchlist.js
resources/src/mediawiki.toolbar/toolbar.js
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki.ui/components/images/checkbox-checked.png [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/checkbox-checked.svg [new file with mode: 0644]
resources/src/mediawiki.ui/components/images/checked_disabled.png [deleted file]
resources/src/mediawiki.ui/components/images/checked_disabled.svg [deleted file]
resources/src/mediawiki.ui/components/images/radio_checked.png [deleted file]
resources/src/mediawiki.ui/components/images/radio_checked.svg [deleted file]
resources/src/mediawiki.ui/components/images/radio_disabled.png [deleted file]
resources/src/mediawiki.ui/components/images/radio_disabled.svg [deleted file]
resources/src/mediawiki.ui/components/radio.less
resources/src/mediawiki/mediawiki.toc.print.css
resources/src/mediawiki/mediawiki.util.js
resources/src/oojs-ui-local.css
tests/common/TestsAutoLoader.php
tests/parser/ParserTestRunner.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/data/media/say-test-mpeg1.mp3 [new file with mode: 0644]
tests/phpunit/data/media/say-test-mpeg2.5.mp3 [new file with mode: 0644]
tests/phpunit/data/media/say-test-mpeg2.mp3 [new file with mode: 0644]
tests/phpunit/data/media/say-test-with-id3.mp3 [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfThumbIsStandardTest.php
tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php
tests/phpunit/includes/WatchedItemStoreUnitTest.php
tests/phpunit/includes/auth/LegacyHookPreAuthenticationProviderTest.php
tests/phpunit/includes/changes/ChangesListFilterTest.php
tests/phpunit/includes/changes/EnhancedChangesListTest.php
tests/phpunit/includes/changes/OldChangesListTest.php
tests/phpunit/includes/config/EtcdConfigTest.php
tests/phpunit/includes/content/WikitextStructureTest.php
tests/phpunit/includes/interwiki/ClassicInterwikiLookupTest.php
tests/phpunit/includes/libs/mime/MimeAnalyzerTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/libs/xmp/XMPTest.php
tests/phpunit/includes/media/FakeDimensionFile.php
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/search/SearchIndexFieldTest.php
tests/phpunit/includes/specials/SpecialRecentchangesTest.php
tests/phpunit/includes/specials/SpecialShortpagesTest.php
tests/phpunit/includes/specials/SpecialWatchlistTest.php
tests/phpunit/languages/LanguageCodeTest.php
tests/phpunit/mocks/MockWebRequest.php
tests/phpunit/mocks/media/MockMediaHandlerFactory.php [deleted file]
tests/phpunit/mocks/media/MockOggHandler.php [deleted file]
tests/qunit/data/load.mock.php
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js

index 09f86a3..f230c60 100644 (file)
@@ -1,3 +1,4 @@
 *.sh eol=lf
 *.icc binary
 *.webp binary
+*.mp3 binary
\ No newline at end of file
index 3e97aab..388f354 100644 (file)
@@ -49,6 +49,7 @@ node_modules/
 /vendor
 /composer.lock
 /composer.local.json
+/composer.phar
 
 # MediaWiki UI documentation
 /docs/kss/static
index 452cb35..9474f21 100644 (file)
@@ -49,6 +49,12 @@ section).
 * Added RecentChangesPurgeRows hook to allow extensions to purge data that
   depends on the recentchanges table.
 * Added JS config values wgDiffOldId/wgDiffNewId to the output of diff pages.
+* (T2424) Added direct unwatch links to entries in Special:Watchlist (if the
+  'watchlistunwatchlinks' preference option is enabled). With JavaScript
+  enabled, these links toggle so the user can also re-watch pages that have
+  just been unwatched.
+* Added $wgParserTestMediaHandlers, where mock media handlers can be passed to
+  MediaHandlerFactory for parser tests.
 
 === Languages updated in 1.30 ===
 
@@ -158,6 +164,10 @@ changes to languages because of Phabricator reports.
   nothing and is deprecated.
 * mw.util.escapeId() was deprecated, use escapeIdForAttribute() or
   escapeIdForLink().
+* MagicWord::replaceMultiple() (deprecated in 1.25) was removed.
+* WikiImporter now requires the second parameter to be an instance of the Config,
+  class. Prior to that, the Config parameter was optional (a behavior deprecated in
+  1.25).
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index d44a305..d9e85bd 100644 (file)
@@ -291,7 +291,7 @@ $wgAutoloadLocalClasses = [
        'Config' => __DIR__ . '/includes/config/Config.php',
        'ConfigException' => __DIR__ . '/includes/config/ConfigException.php',
        'ConfigFactory' => __DIR__ . '/includes/config/ConfigFactory.php',
-       'ConfiguredReadOnlyMode' => __DIR__ . '/includes/ReadOnlyMode.php',
+       'ConfiguredReadOnlyMode' => __DIR__ . '/includes/ConfiguredReadOnlyMode.php',
        'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
        'Content' => __DIR__ . '/includes/content/Content.php',
        'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
@@ -1180,7 +1180,7 @@ $wgAutoloadLocalClasses = [
        'RangeChronologicalPager' => __DIR__ . '/includes/pager/RangeChronologicalPager.php',
        'RangeDifference' => __DIR__ . '/includes/diff/DiffEngine.php',
        'RawAction' => __DIR__ . '/includes/actions/RawAction.php',
-       'RawMessage' => __DIR__ . '/includes/Message.php',
+       'RawMessage' => __DIR__ . '/includes/RawMessage.php',
        'ReadOnlyError' => __DIR__ . '/includes/exception/ReadOnlyError.php',
        'ReadOnlyMode' => __DIR__ . '/includes/ReadOnlyMode.php',
        'ReassignEdits' => __DIR__ . '/maintenance/reassignEdits.php',
index bc48360..32933e6 100644 (file)
@@ -53,7 +53,7 @@
                "jakub-onderka/php-parallel-lint": "0.9.2",
                "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
                "justinrainbow/json-schema": "~5.2",
-               "mediawiki/mediawiki-codesniffer": "0.10.1",
+               "mediawiki/mediawiki-codesniffer": "0.11.0",
                "monolog/monolog": "~1.22.1",
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
index b85e1d6..b73ecbd 100644 (file)
@@ -73,8 +73,8 @@ class AuthPlugin {
        /**
         * Modify options in the login template.
         *
-        * @param BaseTemplate $template
-        * @param string $type 'signup' or 'login'. Added in 1.16.
+        * @param BaseTemplate &$template
+        * @param string &$type 'signup' or 'login'. Added in 1.16.
         */
        public function modifyUITemplate( &$template, &$type ) {
                # Override this!
@@ -124,7 +124,7 @@ class AuthPlugin {
         *
         * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning
         *  a different User object to $user is no longer supported.
-        * @param User $user
+        * @param User &$user
         * @return bool
         */
        public function updateUser( &$user ) {
@@ -286,7 +286,7 @@ class AuthPlugin {
         *
         * @deprecated since 1.26, use the UserLoggedIn hook instead. And assigning
         *  a different User object to $user is no longer supported.
-        * @param User $user
+        * @param User &$user
         * @param bool $autocreate True if user is being autocreated on login
         */
        public function initUser( &$user, $autocreate = false ) {
@@ -306,7 +306,7 @@ class AuthPlugin {
        /**
         * Get an instance of a User object
         *
-        * @param User $user
+        * @param User &$user
         *
         * @return AuthPluginUser
         */
@@ -359,6 +359,7 @@ class AuthPluginUser {
 
        /**
         * @deprecated since 1.28, use SessionManager::invalidateSessionForUser() instead.
+        * @return bool
         */
        public function resetAuthToken() {
                # Override this!
index 2ca56a5..843ea54 100644 (file)
@@ -44,40 +44,40 @@ class Block {
        public $mParentBlockId;
 
        /** @var int */
-       protected $mId;
+       private $mId;
 
        /** @var bool */
-       protected $mFromMaster;
+       private $mFromMaster;
 
        /** @var bool */
-       protected $mBlockEmail;
+       private $mBlockEmail;
 
        /** @var bool */
-       protected $mDisableUsertalk;
+       private $mDisableUsertalk;
 
        /** @var bool */
-       protected $mCreateAccount;
+       private $mCreateAccount;
 
        /** @var User|string */
-       protected $target;
+       private $target;
 
        /** @var int Hack for foreign blocking (CentralAuth) */
-       protected $forcedTargetID;
+       private $forcedTargetID;
 
        /** @var int Block::TYPE_ constant. Can only be USER, IP or RANGE internally */
-       protected $type;
+       private $type;
 
        /** @var User */
-       protected $blocker;
+       private $blocker;
 
        /** @var bool */
-       protected $isHardblock;
+       private $isHardblock;
 
        /** @var bool */
-       protected $isAutoblocking;
+       private $isAutoblocking;
 
        /** @var string|null */
-       protected $systemBlockType;
+       private $systemBlockType;
 
        # TYPE constants
        const TYPE_USER = 1;
@@ -1501,7 +1501,7 @@ class Block {
                        return $id;
                }
                $hmac = MWCryptHash::hmac( $id, $secretKey, false );
-               $cookieValue =  $id . '!' . $hmac;
+               $cookieValue = $id . '!' . $hmac;
                return $cookieValue;
        }
 
diff --git a/includes/ConfiguredReadOnlyMode.php b/includes/ConfiguredReadOnlyMode.php
new file mode 100644 (file)
index 0000000..af7c7cb
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * A read-only mode service which does not depend on LoadBalancer.
+ * To obtain an instance, use MediaWikiServices::getConfiguredReadOnlyMode().
+ *
+ * @since 1.29
+ */
+class ConfiguredReadOnlyMode {
+       /** @var Config */
+       private $config;
+
+       /** @var string|bool|null */
+       private $fileReason;
+
+       /** @var string|null */
+       private $overrideReason;
+
+       public function __construct( Config $config ) {
+               $this->config = $config;
+       }
+
+       /**
+        * Check whether the wiki is in read-only mode.
+        *
+        * @return bool
+        */
+       public function isReadOnly() {
+               return $this->getReason() !== false;
+       }
+
+       /**
+        * Get the value of $wgReadOnly or the contents of $wgReadOnlyFile.
+        *
+        * @return string|bool String when in read-only mode; false otherwise
+        */
+       public function getReason() {
+               if ( $this->overrideReason !== null ) {
+                       return $this->overrideReason;
+               }
+               $confReason = $this->config->get( 'ReadOnly' );
+               if ( $confReason !== null ) {
+                       return $confReason;
+               }
+               if ( $this->fileReason === null ) {
+                       // Cache for faster access next time
+                       $readOnlyFile = $this->config->get( 'ReadOnlyFile' );
+                       if ( is_file( $readOnlyFile ) && filesize( $readOnlyFile ) > 0 ) {
+                               $this->fileReason = file_get_contents( $readOnlyFile );
+                       } else {
+                               $this->fileReason = false;
+                       }
+               }
+               return $this->fileReason;
+       }
+
+       /**
+        * Set the read-only mode, which will apply for the remainder of the
+        * request or until a service reset.
+        *
+        * @param string|null $msg
+        */
+       public function setReason( $msg ) {
+               $this->overrideReason = $msg;
+       }
+
+       /**
+        * Clear the cache of the read only file
+        */
+       public function clearCache() {
+               $this->fileReason = null;
+       }
+}
index a28aa5b..4e162f6 100644 (file)
@@ -959,6 +959,23 @@ $wgTrustedMediaFormats = [
  */
 $wgMediaHandlers = [];
 
+/**
+ * Media handler overrides for parser tests (they don't need to generate actual
+ * thumbnails, so a mock will do)
+ */
+$wgParserTestMediaHandlers = [
+       'image/jpeg' => 'MockBitmapHandler',
+       'image/png' => 'MockBitmapHandler',
+       'image/gif' => 'MockBitmapHandler',
+       'image/tiff' => 'MockBitmapHandler',
+       'image/webp' => 'MockBitmapHandler',
+       'image/x-ms-bmp' => 'MockBitmapHandler',
+       'image/x-bmp' => 'MockBitmapHandler',
+       'image/x-xcf' => 'MockBitmapHandler',
+       'image/svg+xml' => 'MockSvgHandler',
+       'image/vnd.djvu' => 'MockDjVuHandler',
+];
+
 /**
  * Plugins for page content model handling.
  * Each entry in the array maps a model id to a class name or callback
@@ -4933,6 +4950,7 @@ $wgDefaultUserOptions = [
        'watchlisthidepatrolled' => 0,
        'watchlisthidecategorization' => 1,
        'watchlistreloadautomatically' => 0,
+       'watchlistunwatchlinks' => 0,
        'watchmoves' => 0,
        'watchrollback' => 0,
        'wllimit' => 250,
@@ -5797,7 +5815,7 @@ $wgPasswordAttemptThrottle = [
        // Long term limit. We need to balance the risk
        // of somebody using this as a DoS attack to lock someone
        // out of their account, and someone doing a brute force attack.
-       [ 'count' => 150, 'seconds' => 60*60*48 ],
+       [ 'count' => 150, 'seconds' => 60 * 60 * 48 ],
 ];
 
 /**
index cfb78cd..49341c5 100644 (file)
@@ -852,7 +852,7 @@ class EditPage {
 
        /**
         * This function collects the form data and uses it to populate various member variables.
-        * @param WebRequest $request
+        * @param WebRequest &$request
         * @throws ErrorPageError
         */
        public function importFormData( &$request ) {
@@ -1080,7 +1080,7 @@ class EditPage {
         * this method should be overridden and return the page text that will be used
         * for saving, preview parsing and so on...
         *
-        * @param WebRequest $request
+        * @param WebRequest &$request
         * @return string|null
         */
        protected function importContentFormData( &$request ) {
@@ -1432,7 +1432,7 @@ class EditPage {
        /**
         * Make sure the form isn't faking a user's credentials.
         *
-        * @param WebRequest $request
+        * @param WebRequest &$request
         * @return bool
         * @private
         */
@@ -1475,7 +1475,7 @@ class EditPage {
 
        /**
         * Attempt submission
-        * @param array|bool $resultDetails See docs for $result in internalAttemptSave
+        * @param array|bool &$resultDetails See docs for $result in internalAttemptSave
         * @throws UserBlockedError|ReadOnlyError|ThrottledError|PermissionsError
         * @return Status The resulting status object.
         */
@@ -1721,7 +1721,7 @@ class EditPage {
        /**
         * Attempt submission (no UI)
         *
-        * @param array $result Array to add statuses to, currently with the
+        * @param array &$result Array to add statuses to, currently with the
         *   possible keys:
         *   - spam (string): Spam string from content if any spam is detected by
         *     matchSpamRegex.
@@ -4202,7 +4202,7 @@ class EditPage {
         * Returns an array of html code of the following checkboxes old style:
         * minor and watch
         *
-        * @param int $tabindex Current tabindex
+        * @param int &$tabindex Current tabindex
         * @param array $checked See getCheckboxesDefinition()
         * @return array
         */
@@ -4260,7 +4260,7 @@ class EditPage {
         * Returns an array of html code of the following checkboxes:
         * minor and watch
         *
-        * @param int $tabindex Current tabindex
+        * @param int &$tabindex Current tabindex
         * @param array $checked Array of checkbox => bool, where bool indicates the checked
         *                 status of the checkbox
         *
@@ -4333,7 +4333,7 @@ class EditPage {
                $newPage = !$this->mTitle->exists();
 
                if ( $labelAsPublish ) {
-                       $buttonLabelKey =  $newPage ? 'publishpage' : 'publishchanges';
+                       $buttonLabelKey = $newPage ? 'publishpage' : 'publishchanges';
                } else {
                        $buttonLabelKey = $newPage ? 'savearticle' : 'savechanges';
                }
@@ -4345,7 +4345,7 @@ class EditPage {
         * Returns an array of html code of the following buttons:
         * save, diff and preview
         *
-        * @param int $tabindex Current tabindex
+        * @param int &$tabindex Current tabindex
         *
         * @return array
         */
index 3b2283b..2f7f75b 100644 (file)
@@ -126,7 +126,7 @@ class FauxRequest extends WebRequest {
 
        /**
         * @since 1.26
-        * @param string $name Unprefixed name of the cookie to set
+        * @param string $key Unprefixed name of the cookie to set
         * @param string|null $value Value of the cookie to set
         * @param string|null $prefix Cookie prefix. Defaults to $wgCookiePrefix
         */
@@ -152,6 +152,7 @@ class FauxRequest extends WebRequest {
 
        /**
         * @since 1.25
+        * @param string $url
         */
        public function setRequestURL( $url ) {
                $this->requestUrl = $url;
@@ -160,6 +161,7 @@ class FauxRequest extends WebRequest {
        /**
         * @since 1.25 MWException( "getRequestURL not implemented" )
         * no longer thrown.
+        * @return string
         */
        public function getRequestURL() {
                if ( $this->requestUrl === null ) {
index 8a1cd35..8c843c4 100644 (file)
@@ -143,9 +143,9 @@ class FileDeleteForm {
        /**
         * Really delete the file
         *
-        * @param Title $title
-        * @param File $file
-        * @param string $oldimage Archive name
+        * @param Title &$title
+        * @param File &$file
+        * @param string &$oldimage Archive name
         * @param string $reason Reason of the deletion
         * @param bool $suppress Whether to mark all deleted versions as restricted
         * @param User $user User object performing the request
@@ -398,8 +398,8 @@ class FileDeleteForm {
         * value was provided, does it correspond to an
         * existing, local, old version of this file?
         *
-        * @param File $file
-        * @param File $oldfile
+        * @param File &$file
+        * @param File &$oldfile
         * @param File $oldimage
         * @return bool
         */
index 70784ba..49159ed 100644 (file)
@@ -241,7 +241,7 @@ function wfArrayFilterByKey( array $arr, callable $callback ) {
  * @param string|int $key
  * @param mixed $value
  * @param mixed $default
- * @param array $changed Array to alter
+ * @param array &$changed Array to alter
  * @throws MWException
  */
 function wfAppendToArrayIfNotDefault( $key, $value, $default, &$changed ) {
@@ -1750,7 +1750,7 @@ function wfEscapeWikiText( $text ) {
  * If source is NULL, it just returns the value, it doesn't set the variable
  * If force is true, it will set the value even if source is NULL
  *
- * @param mixed $dest
+ * @param mixed &$dest
  * @param mixed $source
  * @param bool $force
  * @return mixed
@@ -1766,7 +1766,7 @@ function wfSetVar( &$dest, $source, $force = false ) {
 /**
  * As for wfSetVar except setting a bit
  *
- * @param int $dest
+ * @param int &$dest
  * @param int $bit
  * @param bool $state
  *
@@ -2234,7 +2234,8 @@ function wfIniGetBool( $setting ) {
  * (https://bugs.php.net/bug.php?id=26285) and the locale problems on Linux in
  * PHP 5.2.6+ (bug backported to earlier distro releases of PHP).
  *
- * @param string ... strings to escape and glue together, or a single array of strings parameter
+ * @param string $args,... strings to escape and glue together,
+ *  or a single array of strings parameter
  * @return string
  */
 function wfEscapeShellArg( /*...*/ ) {
@@ -2618,7 +2619,7 @@ function wfShellWikiCmd( $script, array $parameters = [], array $options = [] )
  * @param string $old
  * @param string $mine
  * @param string $yours
- * @param string $result
+ * @param string &$result
  * @return bool
  */
 function wfMerge( $old, $mine, $yours, &$result ) {
index da1a8da..6467777 100644 (file)
@@ -92,7 +92,7 @@ class Licenses extends HTMLFormField {
        }
 
        /**
-        * @param array $list
+        * @param array &$list
         * @param array $path
         * @param mixed $item
         */
index 2ca851c..d55f0e0 100644 (file)
@@ -154,6 +154,11 @@ class Linker {
         * @since 1.16.3
         * @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
         * @see Linker::link
+        * @param Title $target
+        * @param string $html
+        * @param array $customAttribs
+        * @param array $query
+        * @param string|array $options
         * @return string
         */
        public static function linkKnown(
@@ -1350,7 +1355,7 @@ class Linker {
        /**
         * @param Title $contextTitle
         * @param string $target
-        * @param string $text
+        * @param string &$text
         * @return string
         */
        public static function normalizeSubpageLink( $contextTitle, $target, &$text ) {
index 1703179..6e7799a 100644 (file)
@@ -518,7 +518,7 @@ class MagicWord {
         * Returns true if the text matches the word, and alters the
         * input string, removing all instances of the word
         *
-        * @param string $text
+        * @param string &$text
         *
         * @return bool
         */
@@ -534,7 +534,7 @@ class MagicWord {
        }
 
        /**
-        * @param string $text
+        * @param string &$text
         * @return bool
         */
        public function matchStartAndRemove( &$text ) {
@@ -646,38 +646,11 @@ class MagicWord {
                return $this->mModified;
        }
 
-       /**
-        * $magicarr is an associative array of (magic word ID => replacement)
-        * This method uses the php feature to do several replacements at the same time,
-        * thereby gaining some efficiency. The result is placed in the out variable
-        * $result. The return value is true if something was replaced.
-        * @deprecated since 1.25, unused
-        *
-        * @param array $magicarr
-        * @param string $subject
-        * @param string $result
-        *
-        * @return bool
-        */
-       public function replaceMultiple( $magicarr, $subject, &$result ) {
-               wfDeprecated( __METHOD__, '1.25' );
-               $search = [];
-               $replace = [];
-               foreach ( $magicarr as $id => $replacement ) {
-                       $mw = self::get( $id );
-                       $search[] = $mw->getRegex();
-                       $replace[] = $replacement;
-               }
-
-               $result = preg_replace( $search, $replace, $subject );
-               return $result !== $subject;
-       }
-
        /**
         * Adds all the synonyms of this MagicWord to an array, to allow quick
         * lookup in a list of magic words
         *
-        * @param array $array
+        * @param array &$array
         * @param string $value
         */
        public function addToArray( &$array, $value ) {
index 6a9ead5..7461191 100644 (file)
@@ -260,7 +260,7 @@ class MagicWordArray {
         * Returns an associative array, ID => param value, for all items that match
         * Removes the matched items from the input string (passed by reference)
         *
-        * @param string $text
+        * @param string &$text
         *
         * @return array
         */
@@ -304,7 +304,7 @@ class MagicWordArray {
         * Return false if no match found and $text is not modified.
         * Does not match parameters.
         *
-        * @param string $text
+        * @param string &$text
         *
         * @return int|bool False on failure
         */
index be6b0af..0240fa7 100644 (file)
@@ -488,7 +488,7 @@ class Message implements MessageSpecifier, Serializable {
         *
         * @since 1.17
         *
-        * @param mixed ... Parameters as strings or arrays from
+        * @param mixed $args,... Parameters as strings or arrays from
         *  Message::numParam() and the like, or a single array of parameters.
         *
         * @return Message $this
@@ -1344,56 +1344,3 @@ class Message implements MessageSpecifier, Serializable {
                return $this->extractParam( new RawMessage( $vars, $params ), $format );
        }
 }
-
-/**
- * Variant of the Message class.
- *
- * Rather than treating the message key as a lookup
- * value (which is passed to the MessageCache and
- * translated as necessary), a RawMessage key is
- * treated as the actual message.
- *
- * All other functionality (parsing, escaping, etc.)
- * is preserved.
- *
- * @since 1.21
- */
-class RawMessage extends Message {
-
-       /**
-        * Call the parent constructor, then store the key as
-        * the message.
-        *
-        * @see Message::__construct
-        *
-        * @param string $text Message to use.
-        * @param array $params Parameters for the message.
-        *
-        * @throws InvalidArgumentException
-        */
-       public function __construct( $text, $params = [] ) {
-               if ( !is_string( $text ) ) {
-                       throw new InvalidArgumentException( '$text must be a string' );
-               }
-
-               parent::__construct( $text, $params );
-
-               // The key is the message.
-               $this->message = $text;
-       }
-
-       /**
-        * Fetch the message (in this case, the key).
-        *
-        * @return string
-        */
-       public function fetchMessage() {
-               // Just in case the message is unset somewhere.
-               if ( $this->message === null ) {
-                       $this->message = $this->key;
-               }
-
-               return $this->message;
-       }
-
-}
index 8d0c33d..39dc642 100644 (file)
@@ -511,7 +511,7 @@ class MovePage {
                $logEntry->setComment( $reason );
                $logEntry->setParameters( [
                        '4::target' => $nt->getPrefixedText(),
-                       '5::noredir' => $redirectContent ? '0': '1',
+                       '5::noredir' => $redirectContent ? '0' : '1',
                ] );
 
                $formatter = LogFormatter::newFromEntry( $logEntry );
index 969171d..2a3a7cd 100644 (file)
@@ -571,6 +571,7 @@ class OutputPage extends ContextSource {
         * @param bool $filter Whether to filter out insufficiently trustworthy modules
         * @param string|null $position If not null, only return modules with this position
         * @param string $param
+        * @param string $type
         * @return array Array of module names
         */
        public function getModules( $filter = false, $position = null, $param = 'mModules',
@@ -688,7 +689,7 @@ class OutputPage extends ContextSource {
         * Add one or more head items to the output
         *
         * @since 1.28
-        * @param string|string[] $value Raw HTML
+        * @param string|string[] $values Raw HTML
         */
        public function addHeadItems( $values ) {
                $this->mHeadItems = array_merge( $this->mHeadItems, (array)$values );
@@ -1715,7 +1716,7 @@ class OutputPage extends ContextSource {
         * Add wikitext with a custom Title object
         *
         * @param string $text Wikitext
-        * @param Title $title
+        * @param Title &$title
         * @param bool $linestart Is this the start of a line?
         */
        public function addWikiTextWithTitle( $text, &$title, $linestart = true ) {
@@ -1726,7 +1727,7 @@ class OutputPage extends ContextSource {
         * Add wikitext with a custom Title object and tidy enabled.
         *
         * @param string $text Wikitext
-        * @param Title $title
+        * @param Title &$title
         * @param bool $linestart Is this the start of a line?
         */
        function addWikiTextTitleTidy( $text, &$title, $linestart = true ) {
@@ -1899,7 +1900,7 @@ class OutputPage extends ContextSource {
        /**
         * Add the output of a QuickTemplate to the output buffer
         *
-        * @param QuickTemplate $template
+        * @param QuickTemplate &$template
         */
        public function addTemplate( &$template ) {
                $this->addHTML( $template->getHTML() );
@@ -1963,7 +1964,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * @param $maxage
+        * @param int $maxage
         * @deprecated since 1.27 Use setCdnMaxage() instead
         */
        public function setSquidMaxage( $maxage ) {
@@ -2908,6 +2909,18 @@ class OutputPage extends ContextSource {
                $pieces[] = $this->buildExemptModules();
                $pieces = array_merge( $pieces, array_values( $this->getHeadLinksArray() ) );
                $pieces = array_merge( $pieces, array_values( $this->mHeadItems ) );
+
+               $min = ResourceLoader::inDebugMode() ? '' : '.min';
+               // Use an IE conditional comment to serve the script only to old IE
+               $pieces[] = '<!--[if lt IE 9]>' .
+                       Html::element( 'script', [
+                               'src' => self::transformResourcePath(
+                                       $this->getConfig(),
+                                       "/resources/lib/html5shiv/html5shiv{$min}.js"
+                               ),
+                       ] ) .
+                       '<![endif]-->';
+
                $pieces[] = Html::closeElement( 'head' );
 
                $bodyClasses = [];
@@ -3785,7 +3798,7 @@ class OutputPage extends ContextSource {
         * Caller is responsible for ensuring the file exists. Emits a PHP warning otherwise.
         *
         * @since 1.27
-        * @param string $remotePath URL path prefix that points to $localPath
+        * @param string $remotePathPrefix URL path prefix that points to $localPath
         * @param string $localPath File directory exposed at $remotePath
         * @param string $file Path to target file relative to $localPath
         * @return string URL
index 5a440c4..cd5bf54 100644 (file)
@@ -36,6 +36,7 @@ class PHPVersionCheck {
                'ctype_digit' => 'ctype',
                'json_decode' => 'json',
                'iconv'       => 'iconv',
+               'mime_content_type' => 'fileinfo',
        );
 
        /**
@@ -230,9 +231,9 @@ HTML;
        /**
         * Returns an error page, which is suitable for output to the end user via a web browser.
         *
-        * @param $title
-        * @param $longHtml
-        * @param $shortText
+        * @param string $title
+        * @param string $longHtml
+        * @param string $shortText
         * @return string
         */
        function getIndexErrorOutput( $title, $longHtml, $shortText ) {
index 15ed2d4..c74d6e1 100644 (file)
@@ -109,7 +109,7 @@ class Preferences {
         * @throws MWException
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences Array to load values for
+        * @param array &$defaultPreferences Array to load values for
         * @return array|null
         */
        static function loadPreferenceValues( $user, $context, &$defaultPreferences ) {
@@ -202,7 +202,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         * @return void
         */
        static function profilePreferences( $user, IContextSource $context, &$defaultPreferences ) {
@@ -599,7 +599,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         * @return void
         */
        static function skinPreferences( $user, IContextSource $context, &$defaultPreferences ) {
@@ -650,7 +650,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function filesPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                # # Files #####################################
@@ -671,7 +671,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         * @return void
         */
        static function datetimePreferences( $user, IContextSource $context, &$defaultPreferences ) {
@@ -749,7 +749,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function renderingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                # # Diffs ####################################
@@ -811,7 +811,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function editingPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                # # Editing #####################################
@@ -884,7 +884,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function rcPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                $config = $context->getConfig();
@@ -960,7 +960,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function watchlistPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                $config = $context->getConfig();
@@ -1044,6 +1044,11 @@ class Preferences {
                        'section' => 'watchlist/advancedwatchlist',
                        'label-message' => 'tog-watchlistreloadautomatically',
                ];
+               $defaultPreferences['watchlistunwatchlinks'] = [
+                       'type' => 'toggle',
+                       'section' => 'watchlist/advancedwatchlist',
+                       'label-message' => 'tog-watchlistunwatchlinks',
+               ];
 
                if ( $config->get( 'RCWatchCategoryMembership' ) ) {
                        $defaultPreferences['watchlisthidecategorization'] = [
@@ -1110,7 +1115,7 @@ class Preferences {
        /**
         * @param User $user
         * @param IContextSource $context
-        * @param array $defaultPreferences
+        * @param array &$defaultPreferences
         */
        static function searchPreferences( $user, IContextSource $context, &$defaultPreferences ) {
                foreach ( MWNamespace::getValidNamespaces() as $n ) {
@@ -1122,6 +1127,9 @@ class Preferences {
 
        /**
         * Dummy, kept for backwards-compatibility.
+        * @param User $user
+        * @param IContextSource $context
+        * @param array &$defaultPreferences
         */
        static function miscPreferences( $user, IContextSource $context, &$defaultPreferences ) {
        }
index a68c36f..53608e8 100644 (file)
@@ -616,7 +616,7 @@ class ProtectionForm {
        /**
         * Show protection long extracts for this page
         *
-        * @param OutputPage $out
+        * @param OutputPage &$out
         * @access private
         */
        function showLogExtract( &$out ) {
diff --git a/includes/RawMessage.php b/includes/RawMessage.php
new file mode 100644 (file)
index 0000000..9a0d947
--- /dev/null
@@ -0,0 +1,72 @@
+<?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
+ */
+
+/**
+ * Variant of the Message class.
+ *
+ * Rather than treating the message key as a lookup
+ * value (which is passed to the MessageCache and
+ * translated as necessary), a RawMessage key is
+ * treated as the actual message.
+ *
+ * All other functionality (parsing, escaping, etc.)
+ * is preserved.
+ *
+ * @since 1.21
+ */
+class RawMessage extends Message {
+
+       /**
+        * Call the parent constructor, then store the key as
+        * the message.
+        *
+        * @see Message::__construct
+        *
+        * @param string $text Message to use.
+        * @param array $params Parameters for the message.
+        *
+        * @throws InvalidArgumentException
+        */
+       public function __construct( $text, $params = [] ) {
+               if ( !is_string( $text ) ) {
+                       throw new InvalidArgumentException( '$text must be a string' );
+               }
+
+               parent::__construct( $text, $params );
+
+               // The key is the message.
+               $this->message = $text;
+       }
+
+       /**
+        * Fetch the message (in this case, the key).
+        *
+        * @return string
+        */
+       public function fetchMessage() {
+               // Just in case the message is unset somewhere.
+               if ( $this->message === null ) {
+                       $this->message = $this->key;
+               }
+
+               return $this->message;
+       }
+
+}
index 592d495..547c2d5 100644 (file)
@@ -66,75 +66,3 @@ class ReadOnlyMode {
                $this->configuredReadOnly->clearCache();
        }
 }
-
-/**
- * A read-only mode service which does not depend on LoadBalancer.
- * To obtain an instance, use MediaWikiServices::getConfiguredReadOnlyMode().
- *
- * @since 1.29
- */
-class ConfiguredReadOnlyMode {
-       /** @var Config */
-       private $config;
-
-       /** @var string|bool|null */
-       private $fileReason;
-
-       /** @var string|null */
-       private $overrideReason;
-
-       public function __construct( Config $config ) {
-               $this->config = $config;
-       }
-
-       /**
-        * Check whether the wiki is in read-only mode.
-        *
-        * @return bool
-        */
-       public function isReadOnly() {
-               return $this->getReason() !== false;
-       }
-
-       /**
-        * Get the value of $wgReadOnly or the contents of $wgReadOnlyFile.
-        *
-        * @return string|bool String when in read-only mode; false otherwise
-        */
-       public function getReason() {
-               if ( $this->overrideReason !== null ) {
-                       return $this->overrideReason;
-               }
-               $confReason = $this->config->get( 'ReadOnly' );
-               if ( $confReason !== null ) {
-                       return $confReason;
-               }
-               if ( $this->fileReason === null ) {
-                       // Cache for faster access next time
-                       $readOnlyFile = $this->config->get( 'ReadOnlyFile' );
-                       if ( is_file( $readOnlyFile ) && filesize( $readOnlyFile ) > 0 ) {
-                               $this->fileReason = file_get_contents( $readOnlyFile );
-                       } else {
-                               $this->fileReason = false;
-                       }
-               }
-               return $this->fileReason;
-       }
-
-       /**
-        * Set the read-only mode, which will apply for the remainder of the
-        * request or until a service reset.
-        *
-        * @param string|null $msg
-        */
-       public function setReason( $msg ) {
-               $this->overrideReason = $msg;
-       }
-
-       /**
-        * Clear the cache of the read only file
-        */
-       public function clearCache() {
-               $this->fileReason = null;
-       }
-}
index 537b7c1..3d4d161 100644 (file)
@@ -860,7 +860,7 @@ class Revision implements IDBAccessObject {
         *   Revision::FOR_PUBLIC       to be displayed to all users
         *   Revision::FOR_THIS_USER    to be displayed to the given user
         *   Revision::RAW              get the ID regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        * @param User|null $user User object to check for, only if FOR_THIS_USER is passed
         *   to the $audience parameter
         * @return int
         */
@@ -894,7 +894,7 @@ class Revision implements IDBAccessObject {
         *   Revision::FOR_PUBLIC       to be displayed to all users
         *   Revision::FOR_THIS_USER    to be displayed to the given user
         *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        * @param User|null $user User object to check for, only if FOR_THIS_USER is passed
         *   to the $audience parameter
         * @return string
         */
@@ -938,7 +938,7 @@ class Revision implements IDBAccessObject {
         *   Revision::FOR_PUBLIC       to be displayed to all users
         *   Revision::FOR_THIS_USER    to be displayed to the given user
         *   Revision::RAW              get the text regardless of permissions
-        * @param User $user User object to check for, only if FOR_THIS_USER is passed
+        * @param User|null $user User object to check for, only if FOR_THIS_USER is passed
         *   to the $audience parameter
         * @return string
         */
@@ -1307,7 +1307,7 @@ class Revision implements IDBAccessObject {
         * data is compressed, and 'utf-8' if we're saving in UTF-8
         * mode.
         *
-        * @param mixed $text Reference to a text
+        * @param mixed &$text Reference to a text
         * @return string
         */
        public static function compressRevisionText( &$text ) {
index ccdedb8..b0bc60a 100644 (file)
@@ -116,7 +116,7 @@ abstract class RevisionListBase extends ContextSource implements Iterator {
        }
 
        public function key() {
-               return $this->res ? $this->res->key(): 0;
+               return $this->res ? $this->res->key() : 0;
        }
 
        public function valid() {
index 907da16..ed09701 100644 (file)
@@ -815,7 +815,7 @@ class Sanitizer {
 
                        # Escape HTML id attributes
                        if ( $attribute === 'id' ) {
-                               $value = self::escapeIdForAttribute( $value, Sanitizer::ID_PRIMARY );
+                               $value = self::escapeIdForAttribute( $value, self::ID_PRIMARY );
                        }
 
                        # Escape HTML id reference lists
@@ -1331,7 +1331,7 @@ class Sanitizer {
         * @return string
         */
        private static function escapeIdInternal( $id, $mode ) {
-               $id = Sanitizer::decodeCharReferences( $id );
+               $id = self::decodeCharReferences( $id );
 
                switch ( $mode ) {
                        case 'html5':
@@ -1677,7 +1677,10 @@ class Sanitizer {
                $text = preg_replace_callback(
                        self::CHAR_REFS_REGEX,
                        [ 'Sanitizer', 'decodeCharReferencesCallback' ],
-                       $text, /* limit */ -1, $count );
+                       $text,
+                       -1, //limit
+                       $count
+               );
 
                if ( $count ) {
                        return $wgContLang->normalize( $text );
@@ -1914,7 +1917,7 @@ class Sanitizer {
                        # Not usually allowed, but may be used for extension-style hooks
                        # such as <math> when it is rasterized, or if $wgAllowImageTag is
                        # true
-                       'img'        => array_merge( $common, [ 'alt', 'src', 'width', 'height' ] ),
+                       'img'        => array_merge( $common, [ 'alt', 'src', 'width', 'height', 'srcset' ] ),
 
                        'video'      => array_merge( $common, [ 'poster', 'controls', 'preload', 'width', 'height' ] ),
                        'source'     => array_merge( $common, [ 'type', 'src' ] ),
@@ -1951,6 +1954,10 @@ class Sanitizer {
                        # https://www.w3.org/TR/REC-MathML/
                        'math'       => [ 'class', 'style', 'id', 'title' ],
 
+                       // HTML 5 section 4.5
+                       'figure'     => $common,
+                       'figcaption' => $common,
+
                        # HTML 5 section 4.6
                        'bdi' => $common,
 
@@ -1966,7 +1973,7 @@ class Sanitizer {
                        // (ie: validateTag rejects tags missing the attributes needed for Microdata)
                        // So we don't bother including $common attributes that have no purpose.
                        'meta' => [ 'itemprop', 'content' ],
-                       'link' => [ 'itemprop', 'href' ],
+                       'link' => [ 'itemprop', 'href', 'title' ],
                ];
 
                return $whitelist;
index 8d9256b..7a01a65 100644 (file)
@@ -345,7 +345,7 @@ class SiteConfiguration {
         * @param string $setting ID of the setting name to retrieve
         * @param string $wiki Wiki ID of the wiki in question.
         * @param string $suffix The suffix of the wiki in question.
-        * @param array $var Reference The variable to insert the value into.
+        * @param array &$var Reference The variable to insert the value into.
         * @param array $params List of parameters. $.'key' is replaced by $value in all returned data.
         * @param array $wikiTags The tags assigned to the wiki.
         */
index 5208b8f..baf5109 100644 (file)
@@ -86,7 +86,7 @@ class StubObject {
         * infinite loop when unstubbing an object or to avoid reference parameter
         * breakage.
         *
-        * @param object $obj Object to check.
+        * @param object &$obj Object to check.
         * @return void
         */
        public static function unstub( &$obj ) {
index 5decece..05f85fa 100644 (file)
@@ -1896,6 +1896,8 @@ class Title implements LinkTarget {
         * protocol-relative, the URL will be expanded to http://
         *
         * @see self::getLocalURL for the arguments.
+        * @param string $query
+        * @param string|bool $query2
         * @return string The URL
         */
        public function getInternalURL( $query = '', $query2 = false ) {
@@ -3693,7 +3695,7 @@ class Title implements LinkTarget {
         * Returns true if ok, or a getUserPermissionsErrors()-like array otherwise
         *
         * @deprecated since 1.25, use MovePage's methods instead
-        * @param Title $nt The new title
+        * @param Title &$nt The new title
         * @param bool $auth Whether to check user permissions (uses $wgUser)
         * @param string $reason Is the log summary of the move, used for spam checking
         * @return array|bool True on success, getUserPermissionsErrors()-like array on failure
@@ -3745,7 +3747,7 @@ class Title implements LinkTarget {
         * Move a title to a new location
         *
         * @deprecated since 1.25, use the MovePage class instead
-        * @param Title $nt The new title
+        * @param Title &$nt The new title
         * @param bool $auth Indicates whether $wgUser's permissions
         *  should be checked
         * @param string $reason The reason for the move
index a9ebd76..b3a49c7 100644 (file)
@@ -22,6 +22,7 @@
 /**
  * This class performs some operations related to tracking categories, such as creating
  * a list of all such categories.
+ * @since 1.29
  */
 class TrackingCategories {
        /** @var Config */
index 3a9fb73..d6b9f76 100644 (file)
@@ -229,8 +229,8 @@ class ApiAuthManagerHelper {
 
        /**
         * Logs successful or failed authentication.
-        * @param string|AuthenticationResponse $result Response or error message
         * @param string $event Event type (e.g. 'accountcreation')
+        * @param string|AuthenticationResponse $result Response or error message
         */
        public function logAuthenticationResult( $event, $result ) {
                if ( is_string( $result ) ) {
@@ -345,7 +345,7 @@ class ApiAuthManagerHelper {
        /**
         * Fetch the standard parameters this helper recognizes
         * @param string $action AuthManager action
-        * @param string $param... Parameters to use
+        * @param string $param,... Parameters to use
         * @return array
         */
        public static function getStandardParams( $action, $param /* ... */ ) {
index 500f432..2012e7d 100644 (file)
@@ -668,7 +668,7 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Set the continuation manager
-        * @param ApiContinuationManager|null
+        * @param ApiContinuationManager|null $manager
         */
        public function setContinuationManager( $manager ) {
                // Main module has setContinuationManager() method overridden
@@ -1432,7 +1432,7 @@ abstract class ApiBase extends ContextSource {
         * Validate the value against the minimum and user/bot maximum limits.
         * Prints usage info on failure.
         * @param string $paramName Parameter name
-        * @param int $value Parameter value
+        * @param int &$value Parameter value
         * @param int|null $min Minimum value
         * @param int|null $max Maximum value for users
         * @param int $botMax Maximum value for sysops/bots
@@ -1599,7 +1599,7 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Truncate an array to a certain length.
-        * @param array $arr Array to truncate
+        * @param array &$arr Array to truncate
         * @param int $limit Maximum length
         * @return bool True if the array was truncated, false otherwise
         */
index 3a78c13..a4631d6 100644 (file)
@@ -63,9 +63,9 @@ class ApiCSPReport extends ApiBase {
 
        /**
         * Log CSP report, with a different severity depending on $flags
-        * @param $flags Array Flags for this report
-        * @param $logLine String text of log entry
-        * @param $context Array logging context
+        * @param array $flags Flags for this report
+        * @param string $logLine text of log entry
+        * @param array $context logging context
         */
        private function logReport( $flags, $logLine, $context ) {
                if ( in_array( 'false-positive', $flags ) ) {
@@ -80,8 +80,8 @@ class ApiCSPReport extends ApiBase {
        /**
         * Get extra notes about the report.
         *
-        * @param $report Array The CSP report
-        * @return Array
+        * @param array $report The CSP report
+        * @return array
         */
        private function getFlags( $report ) {
                $reportOnly = $this->getParameter( 'reportonly' );
@@ -115,7 +115,7 @@ class ApiCSPReport extends ApiBase {
                $req = $this->getRequest();
                $contentType = $req->getHeader( 'content-type' );
                if ( $contentType !== 'application/json'
-                       && $contentType !=='application/csp-report'
+                       && $contentType !== 'application/csp-report'
                ) {
                        $this->error( 'wrongformat', __METHOD__ );
                }
@@ -155,9 +155,9 @@ class ApiCSPReport extends ApiBase {
        /**
         * Get text of log line.
         *
-        * @param $flags Array of additional markers for this report
-        * @param $report Array the csp report
-        * @return String Text to put in log
+        * @param array $flags of additional markers for this report
+        * @param array $report the csp report
+        * @return string Text to put in log
         */
        private function generateLogLine( $flags, $report ) {
                $flagText = '';
@@ -177,8 +177,8 @@ class ApiCSPReport extends ApiBase {
        /**
         * Stop processing the request, and output/log an error
         *
-        * @param $code String error code
-        * @param $method String method that made error
+        * @param string $code error code
+        * @param string $method method that made error
         * @throws ApiUsageException Always
         */
        private function error( $code, $method ) {
index 72bbe00..7766acd 100644 (file)
@@ -106,7 +106,7 @@ class ApiDelete extends ApiBase {
         *
         * @param Page|WikiPage $page Page or WikiPage object to work on
         * @param User $user User doing the action
-        * @param string|null $reason Reason for the deletion. Autogenerated if null
+        * @param string|null &$reason Reason for the deletion. Autogenerated if null
         * @param array $tags Tags to tag the deletion with
         * @return Status
         */
@@ -142,7 +142,7 @@ class ApiDelete extends ApiBase {
         * @param Page $page Object to work on
         * @param User $user User doing the action
         * @param string $oldimage Archive name
-        * @param string $reason Reason for the deletion. Autogenerated if null.
+        * @param string &$reason Reason for the deletion. Autogenerated if null.
         * @param bool $suppress Whether to mark all deleted versions as restricted
         * @param array $tags Tags to tag the deletion with
         * @return Status
index 6468235..e69300b 100644 (file)
@@ -370,7 +370,7 @@ class ApiMain extends ApiBase {
 
        /**
         * Set the continuation manager
-        * @param ApiContinuationManager|null
+        * @param ApiContinuationManager|null $manager
         */
        public function setContinuationManager( $manager ) {
                if ( $manager !== null ) {
@@ -1933,14 +1933,18 @@ class ApiMain extends ApiBase {
 
                        $id = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_PRIMARY );
                        $idFallback = Sanitizer::escapeIdForAttribute( 'main/datatypes', Sanitizer::ID_FALLBACK );
-
-                       $help['datatypes'] .= Linker::makeHeadline( min( 6, $level ),
+                       $headline = Linker::makeHeadline( min( 6, $level ),
                                ' class="apihelp-header"',
                                $id,
                                $header,
                                '',
                                $idFallback
                        );
+                       // Ensure we have a sane anchor
+                       if ( $id !== 'main/datatypes' && $idFallback !== 'main/datatypes' ) {
+                               $headline = '<div id="main/datatypes"></div>' . $headline;
+                       }
+                       $help['datatypes'] .= $headline;
                        $help['datatypes'] .= $this->msg( 'api-help-datatypes' )->parseAsBlock();
                        if ( !isset( $tocData['main/datatypes'] ) ) {
                                $tocnumber[$level]++;
@@ -1957,13 +1961,18 @@ class ApiMain extends ApiBase {
                        $header = $this->msg( 'api-credits-header' )->parse();
                        $id = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_PRIMARY );
                        $idFallback = Sanitizer::escapeIdForAttribute( 'main/credits', Sanitizer::ID_FALLBACK );
-                       $help['credits'] .= Linker::makeHeadline( min( 6, $level ),
+                       $headline = Linker::makeHeadline( min( 6, $level ),
                                ' class="apihelp-header"',
                                $id,
                                $header,
                                '',
                                $idFallback
                        );
+                       // Ensure we have a sane anchor
+                       if ( $id !== 'main/credits' && $idFallback !== 'main/credits' ) {
+                               $headline = '<div id="main/credits"></div>' . $headline;
+                       }
+                       $help['credits'] .= $headline;
                        $help['credits'] .= $this->msg( 'api-credits' )->useDatabase( false )->parseAsBlock();
                        if ( !isset( $tocData['main/credits'] ) ) {
                                $tocnumber[$level]++;
index 4ce0e9f..17b0093 100644 (file)
@@ -184,7 +184,7 @@ class ApiParamInfo extends ApiBase {
        }
 
        /**
-        * @param array $res Result array
+        * @param array &$res Result array
         * @param string $key Result key
         * @param Message[] $msgs
         * @param bool $joinLists
index f8eaa84..44526e8 100644 (file)
@@ -478,7 +478,7 @@ abstract class ApiQueryBase extends ApiBase {
        /**
         * Add information (title and namespace) about a Title object to a
         * result array
-        * @param array $arr Result array à la ApiResult
+        * @param array &$arr Result array à la ApiResult
         * @param Title $title
         * @param string $prefix Module prefix
         */
index bfd5b17..7b0080e 100644 (file)
@@ -767,30 +767,30 @@ class ApiQueryImageInfo extends ApiQueryBase {
         */
        private static function getProperties( $modulePrefix = '' ) {
                return [
-                       'timestamp' =>      ' timestamp     - Adds timestamp for the uploaded version',
-                       'user' =>           ' user          - Adds the user who uploaded the image version',
-                       'userid' =>         ' userid        - Add the user ID that uploaded the image version',
-                       'comment' =>        ' comment       - Comment on the version',
-                       'parsedcomment' =>  ' parsedcomment - Parse the comment on the version',
+                       'timestamp' => ' timestamp     - Adds timestamp for the uploaded version',
+                       'user' => ' user          - Adds the user who uploaded the image version',
+                       'userid' => ' userid        - Add the user ID that uploaded the image version',
+                       'comment' => ' comment       - Comment on the version',
+                       'parsedcomment' => ' parsedcomment - Parse the comment on the version',
                        'canonicaltitle' => ' canonicaltitle - Adds the canonical title of the image file',
-                       'url' =>            ' url           - Gives URL to the image and the description page',
-                       'size' =>           ' size          - Adds the size of the image in bytes, ' .
+                       'url' => ' url           - Gives URL to the image and the description page',
+                       'size' => ' size          - Adds the size of the image in bytes, ' .
                                'its height and its width. Page count and duration are added if applicable',
-                       'dimensions' =>     ' dimensions    - Alias for size', // B/C with Allimages
-                       'sha1' =>           ' sha1          - Adds SHA-1 hash for the image',
-                       'mime' =>           ' mime          - Adds MIME type of the image',
-                       'thumbmime' =>      ' thumbmime     - Adds MIME type of the image thumbnail' .
+                       'dimensions' => ' dimensions    - Alias for size', // B/C with Allimages
+                       'sha1' => ' sha1          - Adds SHA-1 hash for the image',
+                       'mime' => ' mime          - Adds MIME type of the image',
+                       'thumbmime' => ' thumbmime     - Adds MIME type of the image thumbnail' .
                                ' (requires url and param ' . $modulePrefix . 'urlwidth)',
-                       'mediatype' =>      ' mediatype     - Adds the media type of the image',
-                       'metadata' =>       ' metadata      - Lists Exif metadata for the version of the image',
+                       'mediatype' => ' mediatype     - Adds the media type of the image',
+                       'metadata' => ' metadata      - Lists Exif metadata for the version of the image',
                        'commonmetadata' => ' commonmetadata - Lists file format generic metadata ' .
                                'for the version of the image',
-                       'extmetadata' =>    ' extmetadata   - Lists formatted metadata combined ' .
+                       'extmetadata' => ' extmetadata   - Lists formatted metadata combined ' .
                                'from multiple sources. Results are HTML formatted.',
-                       'archivename' =>    ' archivename   - Adds the file name of the archive ' .
+                       'archivename' => ' archivename   - Adds the file name of the archive ' .
                                'version for non-latest versions',
-                       'bitdepth' =>       ' bitdepth      - Adds the bit depth of the version',
-                       'uploadwarning' =>  ' uploadwarning - Used by the Special:Upload page to ' .
+                       'bitdepth' => ' bitdepth      - Adds the bit depth of the version',
+                       'uploadwarning' => ' uploadwarning - Used by the Special:Upload page to ' .
                                'get information about an existing file. Not intended for use outside MediaWiki core',
                ];
        }
index df8a11e..3e8bccc 100644 (file)
@@ -242,7 +242,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        /**
         * @deprecated since 1.25 Use LogFormatter::formatParametersForApi instead
         * @param ApiResult $result
-        * @param array $vals
+        * @param array &$vals
         * @param string $params
         * @param string $type
         * @param string $action
index 0dd8922..f0c4180 100644 (file)
@@ -233,6 +233,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
                $title = $result->getTitle();
                ApiQueryBase::addTitleInfo( $vals, $title );
+               $vals['pageid'] = $title->getArticleID();
 
                if ( isset( $prop['size'] ) ) {
                        $vals['size'] = $result->getByteSize();
index f8f6e7d..9883480 100644 (file)
@@ -179,7 +179,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                $watchedItemQuery = MediaWikiServices::getInstance()->getWatchedItemQueryService();
                $items = $watchedItemQuery->getWatchedItemsWithRecentChangeInfo( $wlowner, $options, $startFrom );
 
-               foreach ( $items as list ( $watchedItem, $recentChangeInfo ) ) {
+               foreach ( $items as list( $watchedItem, $recentChangeInfo ) ) {
                        /** @var WatchedItem $watchedItem */
                        if ( is_null( $resultPageSet ) ) {
                                $vals = $this->extractOutputData( $watchedItem, $recentChangeInfo );
index fb49e2d..17655ec 100644 (file)
@@ -186,7 +186,7 @@ class ApiUsageException extends UsageException implements ILocalizedException {
        /**
         * @deprecated Do not use. This only exists here because UsageException is in
         *  the inheritance chain for backwards compatibility.
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getCodeString() {
                wfDeprecated( __METHOD__, '1.29' );
@@ -196,7 +196,7 @@ class ApiUsageException extends UsageException implements ILocalizedException {
        /**
         * @deprecated Do not use. This only exists here because UsageException is in
         *  the inheritance chain for backwards compatibility.
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getMessageArray() {
                wfDeprecated( __METHOD__, '1.29' );
@@ -210,7 +210,7 @@ class ApiUsageException extends UsageException implements ILocalizedException {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getMessageObject() {
                return $this->status->getMessage();
index fb9c4e6..f7c6471 100644 (file)
@@ -115,7 +115,7 @@ trait SearchApi {
                        $defaultProfile = null;
                        foreach ( $profiles as $profile ) {
                                $types[] = $profile['name'];
-                               if ( isset ( $profile['desc-message'] ) ) {
+                               if ( isset( $profile['desc-message'] ) ) {
                                        $helpMessages[$profile['name']] = $profile['desc-message'];
                                }
                                if ( !empty( $profile['default'] ) ) {
@@ -144,7 +144,7 @@ trait SearchApi {
         *    one ( to support the continue parameter )
         *  - namespace: mandatory
         *  - search engine profiles defined by SearchApi::getSearchProfileParams()
-        * @param string[]|null API request params (must be sanitized by
+        * @param string[]|null $params API request params (must be sanitized by
         * ApiBase::extractRequestParams() before)
         * @return SearchEngine the search engine
         */
index 67dfb47..6b2a2b7 100644 (file)
@@ -29,7 +29,7 @@
        "apihelp-block-param-autoblock": "منع آخر عنوان IP مستخدم تلقائيا، وأية عناوين IP لاحقة حاولت الدخول من خلاله.",
        "apihelp-block-param-noemail": "منع المستخدم من إرسال البريد الإلكتروني من خلال الويكي. (يتطلب صلاحية <code>blockemail</code>).",
        "apihelp-block-param-hidename": "إخفاء اسم المستخدم من سجل المنع. (يتطلب صلاحية <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "تسمح للمستخدم لتحرير صفحة النقاش الخاصة (يعتمد على <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "تسمح للمستخدم بتحرير صفحة النقاش الخاصة (يعتمد على <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-watchuser": "مشاهدة صفحة المستخدم ونقاش IP.",
        "apihelp-block-example-ip-simple": "منع عنوان IP <kbd>192.0.2.5</kbd> لمدة ثلاثة أيام بسبب >المخالفة الأولى</kbd>.",
        "apihelp-block-example-user-complex": "منع المستخدم <kbd>المخرب</kbd> لأجل غير مسمى بسبب <kbd>التخريب</kbd>، ومنع إنشاء حساب جديد وإرسال بريد إلكتروني.",
        "apihelp-opensearch-param-search": "سطر البحث",
        "apihelp-opensearch-param-limit": "الحد الأقصى للنتائج المُرجعة",
        "apihelp-opensearch-param-namespace": "النطاقات للبحث.",
-       "apihelp-opensearch-param-suggest": "لا تفعل شيئا إذا كان <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> خاطئا.",
+       "apihelp-opensearch-param-suggest": "لا تفعل شيئا إذا كان <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> خاطئا.",
        "apihelp-opensearch-param-format": "شكل الإخراج.",
        "apihelp-opensearch-param-warningsaserror": "إذا تم رفع التحذيرات ب<kbd>format=json</kbd>, أعد أخطاء API بدلا من تجاهلها.",
        "apihelp-opensearch-example-te": "العثور على صفحات تبدأ ب<kbd>Te</kbd>.",
        "apihelp-parse-paramvalue-prop-externallinks": "يعطي الوصلات الخارجية في تحليل نصوص الويكي.",
        "apihelp-parse-paramvalue-prop-sections": "يعطي الأقسام في تحليل نصوص الويكي.",
        "apihelp-parse-paramvalue-prop-displaytitle": "يضيف العنوان في تحليل نصوص الويكي.",
-       "apihelp-parse-paramvalue-prop-headitems": "<span class=\"apihelp-deprecated\">Deprecated.</span> يعطي عناصر لوضعها في <code>&lt;head&gt;</code> الصفحة.",
+       "apihelp-parse-paramvalue-prop-headitems": "يعطي عناصر لوضعها في <code>&lt;head&gt;</code> الصفحة.",
        "apihelp-parse-paramvalue-prop-headhtml": "يعطي تحليل <code>&lt;head&gt;</code> الصفحة.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة. للتطبيق; استخدم <code>mw.config.set()</code>.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "يعطي متغيرات تكوين جافا سكريبت الخاصة بهذه الصفحة كسلسلة JSON.",
        "apihelp-query+blocks-example-simple": "قائمة المنع.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها.",
-       "apierror-offline": "لم يمكن المتابعة بسبب مشاكل توصيل بالشبكة. تأكد من أنه لديك توصيل بالإنترنت وحاول مرة أخرى.",
-       "apierror-timeout": "لم يستجب الخادم في الوقت المتوقع.",
+       "apierror-offline": "لم يمكن المتابعة بسبب مشاكل في الاتصال بالشبكة; تأكد من أنه لديك اتصال بالإنترنت وحاول مرة أخرى.",
+       "apierror-timeout": "لم يستجب الخادم ضمن الوقت المتوقع.",
        "api-feed-error-title": "خطأ ($1)"
 }
index 8918620..aa06dcf 100644 (file)
        "apihelp-compare-summary": "קבלת ההבדל בין 2 דפים.",
        "apihelp-compare-extended-description": "יש להעביר מספר גרסה, כותרת דף או מזהה דף גם ל־\"from\" וגם ל־\"to\".",
        "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
-       "apihelp-compare-param-fromid": "×\9eס׳ ×\96×\99×\94×\95×\99 ×©×\9c ×\94×¢×\9e×\95×\93 הראשון להשוואה.",
+       "apihelp-compare-param-fromid": "×\9eס׳ ×\96×\99×\94×\95×\99 ×©×\9c ×\94×\93×£ הראשון להשוואה.",
        "apihelp-compare-param-fromrev": "גרסה ראשונה להשוואה.",
        "apihelp-compare-param-fromtext": "להשתמש בטקסט הזה במקום תוכן הגרסה שהוגדרה על־ידי <var dir=\"ltr\">fromtitle</var>, <var dir=\"ltr\">fromid</var> או <var dir=\"ltr\">fromrev</var>.",
        "apihelp-compare-param-frompst": "לעשות התמרה לפני שמירה ב־<var>fromtext</var>.",
        "apihelp-compare-param-fromcontentmodel": "מודל התוכן של <var>fromtext</var>. אם זה לא סופק, ייעשה ניחוש על סמך פרמטרים אחרים.",
        "apihelp-compare-param-fromcontentformat": "תסדיר הסדרת תוכן של <var>fromtext</var>.",
        "apihelp-compare-param-totitle": "כותרת שנייה להשוואה.",
-       "apihelp-compare-param-toid": "×\9eס׳ ×\9e×\96×\94×\94 ×©×\9c ×\94×¢×\9e×\95×\93 השני להשוואה.",
+       "apihelp-compare-param-toid": "×\9eס׳ ×\9e×\96×\94×\94 ×©×\9c ×\94×\93×£ השני להשוואה.",
        "apihelp-compare-param-torev": "גרסה שנייה להשוואה.",
        "apihelp-compare-param-torelative": "להשתמש בגרסה יחסית לגרסה שהוסקה מ<var dir=\"ltr\">fromtitle</var>, <var dir=\"ltr\">fromid</var> או <var dir=\"ltr\">fromrev</var>. לכל אפשריות ה־\"to\" האחרות לא תהיה השפעה.",
        "apihelp-compare-param-totext": "להשתמש בטקסט הזה במקום התוכן של הגרסה שהוגדר ב־<var dir=\"ltr\">totitle</var>, <var dir=\"ltr\">toid</var> or <var dir=\"ltr\">torev</var>.",
        "apihelp-cspreport-param-reportonly": "לסמן בתור דיווח ממדיניות מנטרת, לא מדיניות כפויה",
        "apihelp-cspreport-param-source": "מה ייצר את כותרת ה־CSP שייצרה את הדו״ח הזה",
        "apihelp-delete-summary": "מחיקת דף.",
-       "apihelp-delete-param-title": "×\9b×\95תרת ×\94×¢×\9e×\95×\93 למחיקה. לא ניתן להשתמש בשילוב עם <var>$1pageid</var>.",
-       "apihelp-delete-param-pageid": "×\9eס׳ ×\94×\96×\99×\94×\95×\99 ×©×\9c ×\94×¢×\9e×\95×\93 למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
+       "apihelp-delete-param-title": "×\9b×\95תרת ×\94×\93×£ למחיקה. לא ניתן להשתמש בשילוב עם <var>$1pageid</var>.",
+       "apihelp-delete-param-pageid": "×\9eס׳ ×\94×\96×\99×\94×\95×\99 ×©×\9c ×\94×\93×£ למחיקה. לא ניתן להשתמש בשילוב עם <var>$1title</var>.",
        "apihelp-delete-param-reason": "סיבת המחיקה. אם לא הוגדרה, תתווסף סיבה שנוצרה אוטומטית.",
        "apihelp-delete-param-tags": "תגי שינוי שיחולו על העיול ביומן המחיקה.",
-       "apihelp-delete-param-watch": "×\94×\95ספת ×\94×¢×\9e×\95×\93 לרשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-delete-param-watch": "×\94×\95ספת ×\94×\93×£ לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-delete-param-watchlist": "הוספה או הסרה של הדף ללא תנאי מרשימת המעקב של המשתמש הנוכחי, להשתמש בהעדפות או לא לשנות את המעקב.",
        "apihelp-delete-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
        "apihelp-delete-param-oldimage": "שם התמונה הישנה למחיקה כפי שסופק ל־[[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
        "apihelp-edit-param-recreate": "לעקוב את כל הטעויות על כך שהדף נמחק בינתיים.",
        "apihelp-edit-param-createonly": "לא לערוך את הדף אם הוא כבר קיים.",
        "apihelp-edit-param-nocreate": "לזרוק שגיאה אם הדף אינו קיים.",
-       "apihelp-edit-param-watch": "×\94×\95ספת ×\94×¢×\9e×\95×\93 לרשימת המעקב של המשתמש הנוכחי.",
+       "apihelp-edit-param-watch": "×\94×\95ספת ×\94×\93×£ לרשימת המעקב של המשתמש הנוכחי.",
        "apihelp-edit-param-unwatch": "הסרת הדף מרשימת המעקב של של המשתמש הנוכחי.",
        "apihelp-edit-param-watchlist": "להוסיף את הדף לרשימת המעקב של המשתמש הנוכחי או להסיר אותו משם, להשתמש בהעדפות, או לא לשנות את מצב המעקב.",
        "apihelp-edit-param-md5": "גיבוב MD5 של הפרמטר $1text או צירוף של הפטמטרים $1prependtext ו־$1appendtext. אם זה מוגדר, העריכה לא תיעשה אלא אם כן הגיבוב נכון.",
        "apihelp-edit-param-contentmodel": "מודל התוכן של התוכן החדש.",
        "apihelp-edit-param-token": "האסימון תמיד צריך להישלח בתור הפרמטר האחרון, או לפחות אחרי הפרמטר $1text parameter.",
        "apihelp-edit-example-edit": "עריכת דף",
-       "apihelp-edit-example-prepend": "×\94×\95ספת <kbd>_&#95;NOTOC_&#95;</kbd> ×\9cת×\97×\99×\9cת ×\94×¢×\9e×\95×\93.",
+       "apihelp-edit-example-prepend": "×\94×\95ספת <kbd>_&#95;NOTOC_&#95;</kbd> ×\9cת×\97×\99×\9cת ×\94×\93×£.",
        "apihelp-edit-example-undo": "ביטול גרסאות מ־13579 עד 13585 עם תקציר אוטומטי.",
        "apihelp-emailuser-summary": "שליחת דוא\"ל למשתמש.",
        "apihelp-emailuser-param-target": "לאיזה משתמש לשלוח דוא\"ל.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "קוד הוויקי המורחב.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "קטגוריות כלשהן שקיימות בקלט ואינן מיוצגות בפלט הוויקיטקסט.",
        "apihelp-expandtemplates-paramvalue-prop-properties": "מאפייני דף המוגדרים במילות קסם מורחבות בקוד ויקי.",
-       "apihelp-expandtemplates-paramvalue-prop-volatile": "×\94×\90×\9d ×\94פ×\9c×\98 ×\94×\95×\90 × ×\93×\99×£ ×\95×\90×\99×\9f ×\9c×\94שת×\9eש ×\91×\95 ×\91×\9eק×\95×\9d ×\90×\97ר ×\91×¢×\9e×\95×\93.",
+       "apihelp-expandtemplates-paramvalue-prop-volatile": "×\94×\90×\9d ×\94פ×\9c×\98 ×\94×\95×\90 × ×\93×\99×£ ×\95×\9c×\90 ×\9e×\99×\95×¢×\93 ×\9cש×\99×\9e×\95ש ×\91×\9eק×\95×\9d ×\90×\97ר ×\91×\93×£.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "הזמן המרבי שאחריו המטמונים של התוצאה צריכים לפוג.",
        "apihelp-expandtemplates-paramvalue-prop-modules": "כל יחידות ה־ResourceLoader שפונקציות מפענח ביקשו לוסיף לפלט. יש לבקש את <kbd>jsconfigvars</kbd> או את <kbd>encodedjsconfigvars</kbd> יחד עם <kbd>modules</kbd>.",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "נותן משתני הגדרות של JavaScript שייחודיים לדף הזה.",
index 95e69e6..795e81b 100644 (file)
        "apihelp-json-param-utf8": "Если задано, кодирует большинство (но не все) не-ASCII символов в UTF-8 вместо замены их на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> не равно <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Если задано, заменяет все не-ASCII-символы на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> равно <kbd>1</kbd>.",
        "apihelp-json-param-formatversion": "Формат вывода:\n;1: Обратно совместимый формат (логические значения в стиле XML, ключи <samp>*</samp> для узлов данных, и так далее).\n;2: Экспериментальный современный формат. Детали могут меняться!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
-       "apihelp-jsonfm-summary": "Выводить данные в JSON-формате (хорошо читаемом в HTML).",
+       "apihelp-jsonfm-summary": "Выводить данные в формате JSON (отформатированном в HTML).",
        "apihelp-none-summary": "Ничего не выводить.",
        "apihelp-php-summary": "Выводить данные в сериализованном формате PHP.",
        "apihelp-php-param-formatversion": "Формат вывода:\n;1: Обратно совместимый формат (логические значения в стиле XML, ключи <samp>*</samp> для узлов данных, и так далее).\n;2: Экспериментальный современный формат. Детали могут меняться!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
-       "apihelp-phpfm-summary": "Выводить данные в сериализованном формате PHP (хорошо читаемом в HTML).",
-       "apihelp-rawfm-summary": "Выводить данные, включая элементы отладки, в формате JSON (хорошо читаемом в HTML).",
+       "apihelp-phpfm-summary": "Выводить данные в сериализованном формате PHP (отформатированном в HTML).",
+       "apihelp-rawfm-summary": "Выводить данные, включая элементы отладки, в формате JSON (отформатированном в HTML).",
        "apihelp-xml-summary": "Выводить данные в формате XML.",
        "apihelp-xml-param-xslt": "Если задано, добавляет названную страницу в качестве листа XSL. Значением должно быть название в пространстве имён {{ns:MediaWiki}}, заканчивающееся на <code>.xsl</code>.",
        "apihelp-xml-param-includexmlnamespace": "Если задано, добавляет пространство имён XML.",
-       "apihelp-xmlfm-summary": "Выводить данные в формате XML (хорошо читаемом в HTML).",
+       "apihelp-xmlfm-summary": "Выводить данные в формате XML (отформатированном в HTML).",
        "api-format-title": "Результат MediaWiki API",
        "api-format-prettyprint-header": "Это HTML-представление формата $1. HTML хорош для отладки, но неудобен для практического применения.\n\nУкажите параметр <var>format</var> для изменения формата вывода. Для отображения не-HTML-представления формата $1, присвойте <kbd>format=$2</kbd>.\n\nСм. [[mw:Special:MyLanguage/API|полную документацию]] или [[Special:ApiHelp/main|справку API]] для получения дополнительной информации.",
        "api-format-prettyprint-header-only-html": "Это HTML-представление для отладки, не рассчитанное на практическое применение.\n\nСм. [[mw:Special:MyLanguage/API|полную документацию]] или [[Special:ApiHelp/main|справку API]] для получения дополнительной информации.",
index 9e38ecc..58cec11 100644 (file)
@@ -50,7 +50,7 @@ abstract class AbstractAuthenticationProvider implements AuthenticationProvider
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         * @note Override this if it makes sense to support more than one instance
         */
        public function getUniqueId() {
index ea3dfa3..ca947b6 100644 (file)
@@ -46,7 +46,7 @@ abstract class AbstractPrimaryAuthenticationProvider extends AbstractAuthenticat
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         * @note Reimplement this if you do anything other than
         *  User::getCanonicalName( $req->username ) to determine the user being
         *  authenticated.
@@ -57,7 +57,7 @@ abstract class AbstractPrimaryAuthenticationProvider extends AbstractAuthenticat
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         * @note Reimplement this if self::getAuthenticationRequests( AuthManager::ACTION_REMOVE )
         *  doesn't return requests that will revoke all access for the user.
         */
index 00493bc..4a2acca 100644 (file)
@@ -43,7 +43,7 @@ abstract class AbstractSecondaryAuthenticationProvider extends AbstractAuthentic
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         * @note Reimplement this if self::getAuthenticationRequests( AuthManager::ACTION_REMOVE )
         *  doesn't return requests that will revoke all access for the user.
         */
index 4033613..5d82f89 100644 (file)
@@ -81,7 +81,7 @@ interface PrimaryAuthenticationProvider extends AuthenticationProvider {
        const TYPE_NONE = 'none';
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         *
         * Of the requests returned by this method, exactly one should have
         * {@link AuthenticationRequest::$required} set to REQUIRED.
index d8e3c38..38cb6be 100644 (file)
@@ -131,7 +131,7 @@ class LinkBatch {
         * Do the query and add the results to a given LinkCache object
         * Return an array mapping PDBK to ID
         *
-        * @param LinkCache $cache
+        * @param LinkCache &$cache
         * @return array Remaining IDs
         */
        protected function executeInto( &$cache ) {
index f9f9a08..16c1ac5 100644 (file)
@@ -395,7 +395,7 @@ class MessageCache {
 
        /**
         * @param string $code
-        * @param array $where List of wfDebug() comments
+        * @param array &$where List of wfDebug() comments
         * @param integer $mode Use MessageCache::FOR_UPDATE to use DB_MASTER
         * @return bool|string True on success or one of ("cantacquire", "disabled")
         */
index 58a67ad..e0da22e 100644 (file)
@@ -687,7 +687,7 @@ class LocalisationCache {
         * exists, the data array is returned, otherwise false is returned.
         *
         * @param string $code
-        * @param array $deps
+        * @param array &$deps
         * @return array
         */
        protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
@@ -719,7 +719,7 @@ class LocalisationCache {
         * Merge two localisation values, a primary and a fallback, overwriting the
         * primary value in place.
         * @param string $key
-        * @param mixed $value
+        * @param mixed &$value
         * @param mixed $fallbackValue
         */
        protected function mergeItem( $key, &$value, $fallbackValue ) {
@@ -749,7 +749,7 @@ class LocalisationCache {
        }
 
        /**
-        * @param mixed $value
+        * @param mixed &$value
         * @param mixed $fallbackValue
         */
        protected function mergeMagicWords( &$value, $fallbackValue ) {
@@ -775,7 +775,7 @@ class LocalisationCache {
         * otherwise.
         * @param array $codeSequence
         * @param string $key
-        * @param mixed $value
+        * @param mixed &$value
         * @param mixed $fallbackValue
         * @return bool
         */
index 99dc899..df964e0 100644 (file)
@@ -165,7 +165,7 @@ class ChangesFeed {
        /**
         * Generate the feed items given a row from the database, printing the feed.
         * @param object $rows IDatabase resource with recentchanges rows
-        * @param ChannelFeed $feed
+        * @param ChannelFeed &$feed
         */
        public static function generateFeed( $rows, &$feed ) {
                $items = self::buildItems( $rows );
index 2182c6c..cac4769 100644 (file)
@@ -41,6 +41,9 @@ class ChangesList extends ContextSource {
        protected $rclistOpen;
        protected $rcMoveIndex;
 
+       /** @var callable */
+       protected $changeLinePrefixer;
+
        /** @var BagOStuff */
        protected $watchMsgCache;
 
@@ -102,7 +105,7 @@ class ChangesList extends ContextSource {
         *
         * @since 1.27
         *
-        * @param RecentChange $rc Passed by reference
+        * @param RecentChange &$rc Passed by reference
         * @param bool $watched (default false)
         * @param int $linenumber (default null)
         *
@@ -169,12 +172,14 @@ class ChangesList extends ContextSource {
         * @return array of classes
         */
        protected function getHTMLClasses( $rc, $watched ) {
-               $classes = [];
+               $classes = [ self::CSS_CLASS_PREFIX . 'line' ];
                $logType = $rc->mAttribs['rc_log_type'];
 
                if ( $logType ) {
+                       $classes[] = self::CSS_CLASS_PREFIX . 'log';
                        $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'log-' . $logType );
                } else {
+                       $classes[] = self::CSS_CLASS_PREFIX . 'edit';
                        $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns' .
                                $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
                        $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
@@ -362,7 +367,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param string $s HTML to update
+        * @param string &$s HTML to update
         * @param mixed $rc_timestamp
         */
        public function insertDateHeader( &$s, $rc_timestamp ) {
@@ -379,7 +384,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param string $s HTML to update
+        * @param string &$s HTML to update
         * @param Title $title
         * @param string $logtype
         */
@@ -392,8 +397,8 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param string $s HTML to update
-        * @param RecentChange $rc
+        * @param string &$s HTML to update
+        * @param RecentChange &$rc
         * @param bool|null $unpatrolled Unused variable, since 1.27.
         */
        public function insertDiffHist( &$s, &$rc, $unpatrolled = null ) {
@@ -442,7 +447,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param string $s Article link will be appended to this string, in place.
+        * @param string &$s Article link will be appended to this string, in place.
         * @param RecentChange $rc
         * @param bool $unpatrolled
         * @param bool $watched
@@ -453,7 +458,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param RecentChange $rc
+        * @param RecentChange &$rc
         * @param bool $unpatrolled
         * @param bool $watched
         * @return string HTML
@@ -508,7 +513,7 @@ class ChangesList extends ContextSource {
        /**
         * Insert time timestamp string from $rc into $s
         *
-        * @param string $s HTML to update
+        * @param string &$s HTML to update
         * @param RecentChange $rc
         */
        public function insertTimestamp( &$s, $rc ) {
@@ -620,8 +625,8 @@ class ChangesList extends ContextSource {
 
        /** Inserts a rollback link
         *
-        * @param string $s
-        * @param RecentChange $rc
+        * @param string &$s
+        * @param RecentChange &$rc
         */
        public function insertRollback( &$s, &$rc ) {
                if ( $rc->mAttribs['rc_type'] == RC_EDIT
@@ -658,9 +663,9 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * @param string $s
-        * @param RecentChange $rc
-        * @param array $classes
+        * @param string &$s
+        * @param RecentChange &$rc
+        * @param array &$classes
         */
        public function insertTags( &$s, &$rc, &$classes ) {
                if ( empty( $rc->mAttribs['ts_tags'] ) ) {
@@ -678,7 +683,7 @@ class ChangesList extends ContextSource {
 
        /**
         * @param RecentChange $rc
-        * @param array $classes
+        * @param array &$classes
         * @return string
         * @since 1.26
         */
@@ -753,11 +758,12 @@ class ChangesList extends ContextSource {
                switch ( $type ) {
                        case RecentChange::SRC_EDIT:
                        case RecentChange::SRC_NEW:
-                               $attrs[ 'data-mw-revid' ] = $rc->mAttribs['rc_this_oldid'];
+                               $attrs['data-mw-revid'] = $rc->mAttribs['rc_this_oldid'];
                                break;
                        case RecentChange::SRC_LOG:
-                               $attrs[ 'data-mw-logid' ] = $rc->mAttribs['rc_logid'];
-                               $attrs[ 'data-mw-logaction' ] = $rc->mAttribs['rc_log_type'] . '/' . $rc->mAttribs['rc_log_action'];
+                               $attrs['data-mw-logid'] = $rc->mAttribs['rc_logid'];
+                               $attrs['data-mw-logaction'] =
+                                       $rc->mAttribs['rc_log_type'] . '/' . $rc->mAttribs['rc_log_action'];
                                break;
                }
 
@@ -765,4 +771,15 @@ class ChangesList extends ContextSource {
 
                return $attrs;
        }
+
+       /**
+        * Sets the callable that generates a change line prefix added to the beginning of each line.
+        *
+        * @param callable $prefixer Callable to run that generates the change line prefix.
+        *     Takes three parameters: a RecentChange object, a ChangesList object,
+        *     and whether the current entry is a grouped entry.
+        */
+       public function setChangeLinePrefixer( callable $prefixer ) {
+               $this->changeLinePrefixer = $prefixer;
+       }
 }
index 930269c..01e67f5 100644 (file)
@@ -157,14 +157,14 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function displaysOnUnstructuredUi() {
                return !!$this->showHide;
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function isFeatureAvailableOnStructuredUi() {
                return $this->isReplacedInStructuredUi ||
@@ -206,7 +206,7 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getJsData() {
                $output = parent::getJsData();
@@ -217,7 +217,7 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function isSelected( FormOptions $opts ) {
                return !$opts[ $this->getName() ] &&
index 951c407..0622211 100644 (file)
@@ -43,7 +43,7 @@ class ChangesListBooleanFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function createFilter( array $filterDefinition ) {
                return new ChangesListBooleanFilter( $filterDefinition );
@@ -59,7 +59,7 @@ class ChangesListBooleanFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function isPerGroupRequestParameter() {
                return false;
index 0dc1145..5762752 100644 (file)
@@ -165,7 +165,7 @@ abstract class ChangesListFilterGroup {
                        $this->title = $groupDefinition['title'];
                }
 
-               if ( isset ( $groupDefinition['whatsThisHeader'] ) ) {
+               if ( isset( $groupDefinition['whatsThisHeader'] ) ) {
                        $this->whatsThisHeader = $groupDefinition['whatsThisHeader'];
                        $this->whatsThisBody = $groupDefinition['whatsThisBody'];
                        $this->whatsThisUrl = $groupDefinition['whatsThisUrl'];
@@ -352,7 +352,7 @@ abstract class ChangesListFilterGroup {
                        'messageKeys' => [ $this->title ]
                ];
 
-               if ( isset ( $this->whatsThisHeader ) ) {
+               if ( isset( $this->whatsThisHeader ) ) {
                        $output['whatsThisHeader'] = $this->whatsThisHeader;
                        $output['whatsThisBody'] = $this->whatsThisBody;
                        $output['whatsThisUrl'] = $this->whatsThisUrl;
index 76d0bef..930ba12 100644 (file)
@@ -9,14 +9,14 @@
  */
 class ChangesListStringOptionsFilter extends ChangesListFilter {
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function displaysOnUnstructuredUi() {
                return false;
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function isSelected( FormOptions $opts ) {
                $option = $opts[ $this->getGroup()->getName() ];
index 487120d..59efd82 100644 (file)
@@ -129,7 +129,7 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function isPerGroupRequestParameter() {
                return true;
@@ -154,7 +154,7 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function createFilter( array $filterDefinition ) {
                return new ChangesListStringOptionsFilter( $filterDefinition );
@@ -232,7 +232,7 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getJsData() {
                $output = parent::getJsData();
index be488fe..21a811e 100644 (file)
@@ -91,7 +91,7 @@ class EnhancedChangesList extends ChangesList {
        /**
         * Format a line for enhanced recentchange (aka with javascript and block of lines).
         *
-        * @param RecentChange $rc
+        * @param RecentChange &$rc
         * @param bool $watched
         * @param int $linenumber (default null)
         *
@@ -172,12 +172,14 @@ class EnhancedChangesList extends ChangesList {
                $recentChangesFlags = $this->getConfig()->get( 'RecentChangesFlags' );
 
                # Add the namespace and title of the block as part of the class
-               $tableClasses = [ 'mw-collapsible', 'mw-collapsed', 'mw-enhanced-rc' ];
+               $tableClasses = [ 'mw-collapsible', 'mw-collapsed', 'mw-enhanced-rc', 'mw-changeslist-line' ];
                if ( $block[0]->mAttribs['rc_log_type'] ) {
                        # Log entry
+                       $tableClasses[] = 'mw-changeslist-log';
                        $tableClasses[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
                                . $block[0]->mAttribs['rc_log_type'] );
                } else {
+                       $tableClasses[] = 'mw-changeslist-edit';
                        $tableClasses[] = Sanitizer::escapeClass( 'mw-changeslist-ns'
                                . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
                }
@@ -330,6 +332,11 @@ class EnhancedChangesList extends ChangesList {
                        implode( $this->message['semicolon-separator'], $users )
                )->escaped();
 
+               $prefix = '';
+               if ( is_callable( $this->changeLinePrefixer ) ) {
+                       $prefix = call_user_func( $this->changeLinePrefixer, $block[0], $this, true );
+               }
+
                $templateParams = [
                        'articleLink' => $articleLink,
                        'charDifference' => $charDifference,
@@ -338,6 +345,7 @@ class EnhancedChangesList extends ChangesList {
                        'lines' => $lines,
                        'logText' => $logText,
                        'numberofWatchingusers' => $numberofWatchingusers,
+                       'prefix' => $prefix,
                        'rev-deleted-event' => $revDeletedMsg,
                        'tableClasses' => $tableClasses,
                        'timestamp' => $block[0]->timestamp,
@@ -367,7 +375,7 @@ class EnhancedChangesList extends ChangesList {
 
                $type = $rcObj->mAttribs['rc_type'];
                $data = [];
-               $lineParams = [];
+               $lineParams = [ 'targetTitle' => $rcObj->getTitle() ];
 
                $classes = [ 'mw-enhanced-rc' ];
                if ( $rcObj->watched
@@ -610,8 +618,10 @@ class EnhancedChangesList extends ChangesList {
 
                if ( $logType ) {
                        # Log entry
+                       $classes[] = 'mw-changeslist-log';
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
                } else {
+                       $classes[] = 'mw-changeslist-edit';
                        $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
                                $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
                }
@@ -691,8 +701,15 @@ class EnhancedChangesList extends ChangesList {
                        return $key === 'class' || Sanitizer::isReservedDataAttribute( $key );
                } );
 
+               $prefix = '';
+               if ( is_callable( $this->changeLinePrefixer ) ) {
+                       $prefix = call_user_func( $this->changeLinePrefixer, $rcObj, $this, false );
+               }
+
                $line = Html::openElement( 'table', $attribs ) . Html::openElement( 'tr' );
-               $line .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
+               $line .= Html::rawElement( 'td', [], '<span class="mw-enhancedchanges-arrow-space"></span>' );
+               $line .= Html::rawElement( 'td', [ 'class' => 'mw-changeslist-line-prefix' ], $prefix );
+               $line .= '<td class="mw-enhanced-rc">';
 
                if ( isset( $data['recentChangesFlags'] ) ) {
                        $line .= $this->recentChangesFlags( $data['recentChangesFlags'] );
@@ -703,7 +720,12 @@ class EnhancedChangesList extends ChangesList {
                        $line .= '&#160;' . $data['timestampLink'];
                        unset( $data['timestampLink'] );
                }
-               $line .= '&#160;</td><td>';
+               $line .= '&#160;</td>';
+               $line .= Html::openElement( 'td', [
+                       'class' => 'mw-changeslist-line-inner',
+                       // Used for reliable determination of the affiliated page
+                       'data-target-page' => $rcObj->getTitle(),
+               ] );
 
                // everything else: makes it easier for extensions to add or remove data
                $line .= implode( '', $data );
index 09205bd..88c3c22 100644 (file)
@@ -25,7 +25,7 @@ class OldChangesList extends ChangesList {
        /**
         * Format a line using the old system (aka without any javascript).
         *
-        * @param RecentChange $rc Passed by reference
+        * @param RecentChange &$rc Passed by reference
         * @param bool $watched (default false)
         * @param int $linenumber (default null)
         *
@@ -82,7 +82,7 @@ class OldChangesList extends ChangesList {
                if ( $rc->mAttribs['rc_log_type'] ) {
                        $logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] );
                        $this->insertLog( $html, $logtitle, $rc->mAttribs['rc_log_type'] );
-                       $flags = $this->recentChangesFlags( [ 'unpatrolled' =>$unpatrolled,
+                       $flags = $this->recentChangesFlags( [ 'unpatrolled' => $unpatrolled,
                                'bot' => $rc->mAttribs['rc_bot'] ], '' );
                        if ( $flags !== '' ) {
                                $html .= ' ' . $flags;
@@ -142,6 +142,15 @@ class OldChangesList extends ChangesList {
                        $html .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
                }
 
+               $html = Html::rawElement( 'span', [
+                       'class' => 'mw-changeslist-line-inner',
+                       'data-target-page' => $rc->getTitle(), // Used for reliable determination of the affiliated page
+               ], $html );
+               if ( is_callable( $this->changeLinePrefixer ) ) {
+                       $prefix = call_user_func( $this->changeLinePrefixer, $rc, $this, false );
+                       $html = Html::rawElement( 'span', [ 'class' => 'mw-changeslist-line-prefix' ], $prefix ) . $html;
+               }
+
                return $html;
        }
 }
index 5fad8fd..f123363 100644 (file)
@@ -426,6 +426,7 @@ class RecentChange {
         * @since 1.22
         * @deprecated since 1.29 Use RCFeed::factory() instead
         * @param string $uri URI to get the engine object for
+        * @param array $params
         * @return RCFeedEngine The engine object
         * @throws MWException
         */
@@ -552,9 +553,9 @@ class RecentChange {
         * Makes an entry in the database corresponding to an edit
         *
         * @param string $timestamp
-        * @param Title $title
+        * @param Title &$title
         * @param bool $minor
-        * @param User $user
+        * @param User &$user
         * @param string $comment
         * @param int $oldId
         * @param string $lastTimestamp
@@ -629,9 +630,9 @@ class RecentChange {
         * Note: the title object must be loaded with the new id using resetArticleID()
         *
         * @param string $timestamp
-        * @param Title $title
+        * @param Title &$title
         * @param bool $minor
-        * @param User $user
+        * @param User &$user
         * @param string $comment
         * @param bool $bot
         * @param string $ip
@@ -699,8 +700,8 @@ class RecentChange {
 
        /**
         * @param string $timestamp
-        * @param Title $title
-        * @param User $user
+        * @param Title &$title
+        * @param User &$user
         * @param string $actionComment
         * @param string $ip
         * @param string $type
@@ -730,8 +731,8 @@ class RecentChange {
 
        /**
         * @param string $timestamp
-        * @param Title $title
-        * @param User $user
+        * @param Title &$title
+        * @param User &$user
         * @param string $actionComment
         * @param string $ip
         * @param string $type
index 2eb9b22..fa98124 100644 (file)
@@ -649,11 +649,11 @@ class ChangeTags {
         * if you had ORDER BY foo_timestamp DESC, you will now need GROUP BY foo_timestamp, foo_id
         * ORDER BY foo_timestamp DESC, foo_id DESC.
         *
-        * @param string|array $tables Table names, see Database::select
-        * @param string|array $fields Fields used in query, see Database::select
-        * @param string|array $conds Conditions used in query, see Database::select
-        * @param array $join_conds Join conditions, see Database::select
-        * @param string|array $options Options, see Database::select
+        * @param string|array &$tables Table names, see Database::select
+        * @param string|array &$fields Fields used in query, see Database::select
+        * @param string|array &$conds Conditions used in query, see Database::select
+        * @param array &$join_conds Join conditions, see Database::select
+        * @param string|array &$options Options, see Database::select
         * @param string|array $filter_tag Tag(s) to select on
         *
         * @throws MWException When unable to determine appropriate JOIN condition for tagging
@@ -1328,6 +1328,7 @@ class ChangeTags {
         *
         * @see listSoftwareDefinedTags
         * @deprecated since 1.28
+        * @return array
         */
        public static function listExtensionDefinedTags() {
                wfDeprecated( __METHOD__, '1.28' );
index 1b96bff..301972d 100644 (file)
@@ -48,7 +48,7 @@ class CustomUppercaseCollation extends NumericUppercaseCollation {
         * @note This assumes $alphabet does not contain U+F3000-U+F303F
         *
         * @param array $alphabet Sorted array of uppercase characters.
-        * @param Language $language What language for number sorting.
+        * @param Language $lang What language for number sorting.
         */
        public function __construct( array $alphabet, Language $lang ) {
                // It'd be trivial to extend this past 64, you'd just
index 8dd7a38..da78a05 100644 (file)
@@ -40,7 +40,7 @@ class NumericUppercaseCollation extends UppercaseCollation {
        private $digitTransformLang;
 
        /**
-        * @param $lang Language How to convert digits.
+        * @param Language $lang How to convert digits.
         *  For example, if given language "my" than ၇ is treated like 7.
         *
         * It is expected that usually this is given $wgContLang.
@@ -76,8 +76,8 @@ class NumericUppercaseCollation extends UppercaseCollation {
         *
         * based on Language::parseFormattedNumber but without commas.
         *
-        * @param $string String sortkey to unlocalize digits of
-        * @return String Sortkey with all localized digits replaced with ASCII digits.
+        * @param string $string sortkey to unlocalize digits of
+        * @return string Sortkey with all localized digits replaced with ASCII digits.
         */
        private function convertDigits( $string ) {
                $table = $this->digitTransformLang->digitTransformTable();
index c9c05a0..9b35cad 100644 (file)
@@ -120,7 +120,7 @@ class UtfNormal {
        /**
         * Returns true if the string is _definitely_ in NFC.
         * Returns false if not or uncertain.
-        * @param string $string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
+        * @param string &$string a UTF-8 string, altered on output to be valid UTF-8 safe for XML.
         * @return bool
         */
        static function quickIsNFCVerify( &$string ) {
index 8603360..0509e29 100644 (file)
@@ -1134,10 +1134,10 @@ abstract class ContentHandler {
 
        /**
         * Add new field definition to array.
-        * @param SearchIndexField[] $fields
-        * @param SearchEngine       $engine
-        * @param string             $name
-        * @param int                $type
+        * @param SearchIndexField[] &$fields
+        * @param SearchEngine $engine
+        * @param string $name
+        * @param int $type
         * @return SearchIndexField[] new field defs
         * @since 1.28
         */
@@ -1151,7 +1151,7 @@ abstract class ContentHandler {
         * as representation of this document.
         * Overriding class should call parent function or take care of calling
         * the SearchDataForIndex hook.
-        * @param WikiPage     $page Page to index
+        * @param WikiPage $page Page to index
         * @param ParserOutput $output
         * @param SearchEngine $engine Search engine for which we are indexing
         * @return array Map of name=>value for fields
@@ -1190,7 +1190,7 @@ abstract class ContentHandler {
         *
         * Specific content handlers may override it if they need different content handling.
         *
-        * @param WikiPage    $page
+        * @param WikiPage $page
         * @param ParserCache $cache
         * @return ParserOutput
         */
index 14c8182..2b94f3f 100644 (file)
@@ -22,6 +22,7 @@ class JsonContent extends TextContent {
 
        /**
         * @param string $text JSON
+        * @param string $modelId
         */
        public function __construct( $text, $modelId = CONTENT_MODEL_JSON ) {
                parent::__construct( $text, $modelId );
@@ -96,7 +97,7 @@ class JsonContent extends TextContent {
         * @param int $revId
         * @param ParserOptions $options
         * @param bool $generateHtml
-        * @param ParserOutput $output
+        * @param ParserOutput &$output
         */
        protected function fillParserOutput( Title $title, $revId,
                ParserOptions $options, $generateHtml, ParserOutput &$output
index 7bb4def..5f585bc 100644 (file)
@@ -157,7 +157,7 @@ class TextContent extends AbstractContent {
         * changes.
         *
         * @since 1.28
-        * @param $text
+        * @param string $text
         * @return string
         */
        public static function normalizeLineEndings( $text ) {
@@ -233,7 +233,7 @@ class TextContent extends AbstractContent {
         * @param int $revId Revision ID (for {{REVISIONID}})
         * @param ParserOptions $options Parser options
         * @param bool $generateHtml Whether or not to generate HTML
-        * @param ParserOutput $output The output object to fill (reference).
+        * @param ParserOutput &$output The output object to fill (reference).
         */
        protected function fillParserOutput( Title $title, $revId,
                ParserOptions $options, $generateHtml, ParserOutput &$output
index 698a37b..ced2a66 100644 (file)
@@ -40,7 +40,7 @@ class TextContentHandler extends ContentHandler {
         * Returns the content's text as-is.
         *
         * @param Content $content
-        * @param string  $format The serialization format to check
+        * @param string $format The serialization format to check
         *
         * @return mixed
         */
index 434201a..cea8460 100644 (file)
@@ -183,7 +183,7 @@ abstract class ContextSource implements IContextSource {
         * @since 1.18
         * @param string|string[]|MessageSpecifier $key Message key, or array of keys,
         *   or a MessageSpecifier.
-        * @param mixed ...
+        * @param mixed $args,...
         * @return Message
         */
        public function msg( $key /* $args */ ) {
index 2ac4192..4a772ee 100644 (file)
@@ -451,7 +451,7 @@ class RequestContext implements IContextSource, MutableContext {
         *
         * @param string|string[]|MessageSpecifier $key Message key, or array of keys,
         *   or a MessageSpecifier.
-        * @param mixed ...
+        * @param mixed $args,...
         * @return Message
         */
        public function msg( $key ) {
index fbbc962..aafd386 100644 (file)
@@ -31,7 +31,7 @@ class ORAResult {
        }
 
        /**
-        * @param IDatabase $db
+        * @param IDatabase &$db
         * @param resource $stmt A valid OCI statement identifier
         * @param bool $unique
         */
index 6359509..06ec574 100644 (file)
@@ -454,14 +454,14 @@ class LegacyLogger extends AbstractLogger {
        }
 
        /**
-       * Log to a file without getting "file size exceeded" signals.
-       *
-       * Can also log to UDP with the syntax udp://host:port/prefix. This will send
-       * lines to the specified port, prefixed by the specified prefix and a space.
-       *
-       * @param string $text
-       * @param string $file Filename
-       */
+        * Log to a file without getting "file size exceeded" signals.
+        *
+        * Can also log to UDP with the syntax udp://host:port/prefix. This will send
+        * lines to the specified port, prefixed by the specified prefix and a space.
+        *
+        * @param string $text
+        * @param string $file Filename
+        */
        public static function emit( $text, $file ) {
                if ( substr( $file, 0, 4 ) == 'udp:' ) {
                        $transport = UDPTransport::newFromString( $file );
index 331b718..650d012 100644 (file)
@@ -34,7 +34,7 @@ use Monolog\Handler\BufferHandler as BaseBufferHandler;
  */
 class BufferHandler extends BaseBufferHandler {
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        public function handle( array $record ) {
                if ( !$this->initialized ) {
index 6670fe9..8e71131 100644 (file)
@@ -128,7 +128,7 @@ class KafkaHandler extends AbstractProcessingHandler {
        }
 
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        protected function write( array $record ) {
                if ( $record['formatted'] !== null ) {
@@ -138,7 +138,7 @@ class KafkaHandler extends AbstractProcessingHandler {
        }
 
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        public function handleBatch( array $batch ) {
                $channels = [];
index 5a7ddb1..cdc4da3 100644 (file)
@@ -60,7 +60,7 @@ class LineFormatter extends MonologLineFormatter {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         */
        public function format( array $record ) {
                // Drop the 'private' flag from the context
index 8c38d8b..2f074ba 100644 (file)
@@ -189,7 +189,7 @@ class SiteStatsUpdate implements DeferrableUpdate, MergeableUpdate {
        }
 
        /**
-        * @param string $sql
+        * @param string &$sql
         * @param string $field
         * @param int $delta
         */
index 6231c78..07124c0 100644 (file)
@@ -125,7 +125,7 @@ abstract class DiffFormatter {
         * @param int $xlen
         * @param int $ybeg
         * @param int $ylen
-        * @param array $edits
+        * @param array &$edits
         *
         * @throws MWException If the edit type is not known.
         */
index 9c9b1c9..0b318bd 100644 (file)
@@ -33,7 +33,7 @@ use MediaWiki\Diff\WordAccumulator;
  */
 class WordLevelDiff extends \Diff {
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected $bailoutComplexity = 40000000; // Roughly 6K x 6K words changed
 
index a2867a1..bf232e9 100644 (file)
@@ -616,7 +616,7 @@ TXT;
         * @param ErrorException $e
         * @param string $channel
         * @param string $level
-       */
+        */
        protected static function logError(
                ErrorException $e, $channel, $level = LogLevel::ERROR
        ) {
index 5c27658..1349c54 100644 (file)
@@ -42,7 +42,7 @@ class DumpFilter {
        protected $sendingThisPage;
 
        /**
-        * @param DumpOutput $sink
+        * @param DumpOutput &$sink
         */
        function __construct( &$sink ) {
                $this->sink =& $sink;
index c20e299..2b71db0 100644 (file)
@@ -34,7 +34,7 @@ class DumpNamespaceFilter extends DumpFilter {
        public $namespaces = [];
 
        /**
-        * @param DumpOutput $sink
+        * @param DumpOutput &$sink
         * @param array $param
         * @throws MWException
         */
index 943aa04..e0ebaa2 100644 (file)
@@ -106,7 +106,7 @@ class WikiExporter {
         * various row objects and XML output for filtering. Filters
         * can be chained or used as callbacks.
         *
-        * @param DumpOutput $sink
+        * @param DumpOutput &$sink
         */
        public function setOutputSink( &$sink ) {
                $this->sink =& $sink;
@@ -253,6 +253,7 @@ class WikiExporter {
 
        /**
         * @param string $cond
+        * @param bool $orderRevs
         * @throws MWException
         * @throws Exception
         */
index 42b36ff..4269f91 100644 (file)
@@ -183,7 +183,7 @@ class DBFileJournal extends FileJournal {
        protected function getMasterDB() {
                if ( !$this->dbw ) {
                        // Get a separate connection in autocommit mode
-                       $lb =  MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->newMainLB();
+                       $lb = MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->newMainLB();
                        $this->dbw = $lb->getConnection( DB_MASTER, [], $this->wiki );
                        $this->dbw->clearFlag( DBO_TRX );
                }
index f89d96b..5005280 100644 (file)
@@ -1602,9 +1602,15 @@ class FileRepo {
                $path = $this->resolveToStoragePath( $virtualUrl );
                $params = [ 'src' => $path, 'headers' => $headers, 'options' => $optHeaders ];
 
+               // T172851: HHVM does not flush the output properly, causing OOM
+               ob_start( null, 1048576 );
+               ob_implicit_flush( true );
+
                $status = $this->newGood();
                $status->merge( $this->backend->streamFile( $params ) );
 
+               ob_end_flush();
+
                return $status;
        }
 
index 9aa2b18..71e1c63 100644 (file)
@@ -355,7 +355,7 @@ abstract class File implements IDBAccessObject {
                return $this->url;
        }
 
-       /*
+       /**
         * Get short description URL for a files based on the page ID
         *
         * @return string|null
index b22f8cb..cdad5fc 100644 (file)
@@ -171,8 +171,8 @@ class UnregisteredLocalFile extends File {
        }
 
        /**
-       * @return int
-       */
+        * @return int
+        */
        function getBitDepth() {
                $gis = $this->getImageSize( $this->getLocalRefPath() );
 
index a0059ce..7a520bc 100644 (file)
@@ -348,7 +348,7 @@ class TraditionalImageGallery extends ImageGalleryBase {
         *
         * Used by a subclass to insert extra high resolution images.
         * @param MediaTransformOutput $thumb The thumbnail
-        * @param array $imageParameters Array of options
+        * @param array &$imageParameters Array of options
         */
        protected function adjustImageParameters( $thumb, &$imageParameters ) {
        }
index 702c2eb..7293b99 100644 (file)
@@ -271,7 +271,7 @@ class HTMLForm extends ContextSource {
         * Construct a HTMLForm object for given display type. May return a HTMLForm subclass.
         *
         * @param string $displayFormat
-        * @param mixed $arguments... Additional arguments to pass to the constructor.
+        * @param mixed $arguments,... Additional arguments to pass to the constructor.
         * @return HTMLForm
         */
        public static function factory( $displayFormat/*, $arguments...*/ ) {
@@ -450,7 +450,7 @@ class HTMLForm extends ContextSource {
         * @since 1.23
         *
         * @param string $fieldname Name of the field
-        * @param array $descriptor Input Descriptor, as described above
+        * @param array &$descriptor Input Descriptor, as described above
         *
         * @throws MWException
         * @return string Name of a HTMLFormField subclass
index 1f49c8a..ccacbe4 100644 (file)
@@ -57,7 +57,7 @@ class UploadSourceAdapter {
         * @param string $path
         * @param string $mode
         * @param array $options
-        * @param string $opened_path
+        * @param string &$opened_path
         * @return bool
         */
        function stream_open( $path, $mode, $options, &$opened_path ) {
index 63258cb..2099709 100644 (file)
@@ -55,16 +55,12 @@ class WikiImporter {
         * @param Config $config
         * @throws Exception
         */
-       function __construct( ImportSource $source, Config $config = null ) {
+       function __construct( ImportSource $source, Config $config ) {
                if ( !class_exists( 'XMLReader' ) ) {
                        throw new Exception( 'Import requires PHP to have been compiled with libxml support' );
                }
 
                $this->reader = new XMLReader();
-               if ( !$config ) {
-                       wfDeprecated( __METHOD__ . ' without a Config instance', '1.25' );
-                       $config = MediaWikiServices::getInstance()->getMainConfig();
-               }
                $this->config = $config;
 
                if ( !in_array( 'uploadsource', stream_get_wrappers() ) ) {
@@ -428,7 +424,7 @@ class WikiImporter {
 
        /**
         * Alternate per-revision callback, for debugging.
-        * @param WikiRevision $revision
+        * @param WikiRevision &$revision
         */
        public function debugRevisionHandler( &$revision ) {
                $this->debug( "Got revision:" );
index 6ac78c4..32d2634 100644 (file)
@@ -108,7 +108,7 @@ class CliInstaller extends Installer {
                }
 
                // Set up the default skins
-               $skins = $this->findExtensions( 'skins' );
+               $skins = array_keys( $this->findExtensions( 'skins' ) );
                $this->setVar( '_Skins', $skins );
 
                if ( $skins ) {
index 8f5858b..b832d45 100644 (file)
@@ -106,7 +106,7 @@ abstract class DatabaseUpdater {
        protected $holdContentHandlerUseDB = true;
 
        /**
-        * @param Database $db To perform updates on
+        * @param Database &$db To perform updates on
         * @param bool $shared Whether to perform updates on shared tables
         * @param Maintenance $maintenance Maintenance object which created us
         */
index 168d7ed..ae80c8b 100644 (file)
@@ -134,6 +134,7 @@ abstract class Installer {
                'envCheckUploadsDirectory',
                'envCheckLibicu',
                'envCheckSuhosinMaxValueLength',
+               'envCheck64Bit',
        ];
 
        /**
@@ -446,6 +447,7 @@ abstract class Installer {
                $this->parserTitle = Title::newFromText( 'Installer' );
                $this->parserOptions = new ParserOptions( $wgUser ); // language will be wrong :(
                $this->parserOptions->setEditSection( false );
+               $this->parserOptions->setWrapOutputClass( false );
                // Don't try to access DB before user language is initialised
                $this->setParserLanguage( Language::factory( 'en' ) );
        }
@@ -1080,6 +1082,20 @@ abstract class Installer {
                return true;
        }
 
+       /**
+        * Checks if we're running on 64 bit or not. 32 bit is becoming increasingly
+        * hard to support, so let's at least warn people.
+        *
+        * @return bool
+        */
+       protected function envCheck64Bit() {
+               if ( PHP_INT_SIZE == 4 ) {
+                       $this->showMessage( 'config-using-32bit' );
+               }
+
+               return true;
+       }
+
        /**
         * Convert a hex string representing a Unicode code point to that code point.
         * @param string $c
@@ -1339,7 +1355,7 @@ abstract class Installer {
         * Reasonable values for $directory include 'extensions' (the default) and 'skins'.
         *
         * @param string $directory Directory to search in
-        * @return array
+        * @return array [ $extName => [ 'screenshots' => [ '...' ] ]
         */
        public function findExtensions( $directory = 'extensions' ) {
                if ( $this->getVar( 'IP' ) === null ) {
@@ -1352,7 +1368,7 @@ abstract class Installer {
                }
 
                // extensions -> extension.json, skins -> skin.json
-               $jsonFile = substr( $directory, 0, strlen( $directory ) -1 ) . '.json';
+               $jsonFile = substr( $directory, 0, strlen( $directory ) - 1 ) . '.json';
 
                $dh = opendir( $extDir );
                $exts = [];
@@ -1361,7 +1377,15 @@ abstract class Installer {
                                continue;
                        }
                        if ( file_exists( "$extDir/$file/$jsonFile" ) || file_exists( "$extDir/$file/$file.php" ) ) {
-                               $exts[] = $file;
+                               // Extension exists. Now see if there are screenshots
+                               $exts[$file] = [];
+                               if ( is_dir( "$extDir/$file/screenshots" ) ) {
+                                       $paths = glob( "$extDir/$file/screenshots/*.png" );
+                                       foreach ( $paths as $path ) {
+                                               $exts[$file]['screenshots'][] = str_replace( $extDir, "../$directory", $path );
+                                       }
+
+                               }
                        }
                }
                closedir( $dh );
index b4ae1dd..58728a3 100644 (file)
@@ -304,6 +304,7 @@ class MysqlUpdater extends DatabaseUpdater {
 
                        // 1.30
                        [ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
+                       [ 'addTable', 'ip_changes', 'patch-ip_changes.sql' ],
                ];
        }
 
index 0f639ba..d60d801 100644 (file)
@@ -267,8 +267,8 @@ EOT;
        }
 
        /**
-        * @param $dir
-        * @param $db
+        * @param string $dir
+        * @param string $db
         * @return Status
         */
        protected function makeStubDBFile( $dir, $db ) {
@@ -296,7 +296,7 @@ EOT;
        }
 
        /**
-        * @param Status $status
+        * @param Status &$status
         * @return Status
         */
        public function setupSearchIndex( &$status ) {
index 46e3e7e..1e43d3e 100644 (file)
@@ -168,6 +168,7 @@ class SqliteUpdater extends DatabaseUpdater {
 
                        // 1.30
                        [ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
+                       [ 'addTable', 'ip_changes', 'patch-ip_changes.sql' ],
                ];
        }
 
index 0c01b64..07378ab 100644 (file)
@@ -107,7 +107,7 @@ class WebInstallerOptions extends WebInstallerPage {
                $skins = $this->parent->findExtensions( 'skins' );
                $skinHtml = $this->getFieldsetStart( 'config-skins' );
 
-               $skinNames = array_map( 'strtolower', $skins );
+               $skinNames = array_map( 'strtolower', array_keys( $skins ) );
                $chosenSkinName = $this->getVar( 'wgDefaultSkin', $this->parent->getDefaultSkin( $skinNames ) );
 
                if ( $skins ) {
@@ -118,12 +118,17 @@ class WebInstallerOptions extends WebInstallerPage {
                                'value' => $chosenSkinName,
                        ] );
 
-                       foreach ( $skins as $skin ) {
+                       foreach ( $skins as $skin => $info ) {
+                               if ( isset( $info['screenshots'] ) ) {
+                                       $screenshotText = $this->makeScreenshotsLink( $skin, $info['screenshots'] );
+                               } else {
+                                       $screenshotText = htmlspecialchars( $skin );
+                               }
                                $skinHtml .=
                                        '<div class="config-skins-item">' .
                                        $this->parent->getCheckBox( [
                                                'var' => "skin-$skin",
-                                               'rawtext' => $skin,
+                                               'rawtext' => $screenshotText,
                                                'value' => $this->getVar( "skin-$skin", true ), // all found skins enabled by default
                                        ] ) .
                                        '<div class="config-skins-use-as-default">' . $radioButtons[strtolower( $skin )] . '</div>' .
@@ -144,7 +149,7 @@ class WebInstallerOptions extends WebInstallerPage {
                if ( $extensions ) {
                        $extHtml = $this->getFieldsetStart( 'config-extensions' );
 
-                       foreach ( $extensions as $ext ) {
+                       foreach ( $extensions as $ext => $info ) {
                                $extHtml .= $this->parent->getCheckBox( [
                                        'var' => "ext-$ext",
                                        'rawtext' => $ext,
@@ -246,6 +251,31 @@ class WebInstallerOptions extends WebInstallerPage {
                return null;
        }
 
+       private function makeScreenshotsLink( $name, $screenshots ) {
+               global $wgLang;
+               if ( count( $screenshots ) > 1 ) {
+                       $links = [];
+                       $counter = 1;
+                       foreach ( $screenshots as $shot ) {
+                               $links[] = Html::element(
+                                       'a',
+                                       [ 'href' => $shot ],
+                                       $wgLang->formatNum( $counter++ )
+                               );
+                       }
+                       return wfMessage( 'config-skins-screenshots' )
+                               ->rawParams( $name, $wgLang->commaList( $links ) )
+                               ->escaped();
+               } else {
+                       $link = Html::element(
+                               'a',
+                               [ 'href' => $screenshots[0] ],
+                               wfMessage( 'config-screenshot' )->text()
+                       );
+                       return wfMessage( 'config-skins-screenshot', $name )->rawParams( $link )->escaped();
+               }
+       }
+
        /**
         * @return string
         */
@@ -345,7 +375,7 @@ class WebInstallerOptions extends WebInstallerPage {
         * @return bool
         */
        public function submitSkins() {
-               $skins = $this->parent->findExtensions( 'skins' );
+               $skins = array_keys( $this->parent->findExtensions( 'skins' ) );
                $this->parent->setVar( '_Skins', $skins );
 
                if ( $skins ) {
@@ -398,7 +428,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        $this->setVar( 'wgRightsIcon', '' );
                }
 
-               $skinsAvailable = $this->parent->findExtensions( 'skins' );
+               $skinsAvailable = array_keys( $this->parent->findExtensions( 'skins' ) );
                $skinsToInstall = [];
                foreach ( $skinsAvailable as $skin ) {
                        $this->parent->setVarsFromRequest( [ "skin-$skin" ] );
@@ -419,7 +449,7 @@ class WebInstallerOptions extends WebInstallerPage {
                        $retVal = false;
                }
 
-               $extsAvailable = $this->parent->findExtensions();
+               $extsAvailable = array_keys( $this->parent->findExtensions() );
                $extsToInstall = [];
                foreach ( $extsAvailable as $ext ) {
                        $this->parent->setVarsFromRequest( [ "ext-$ext" ] );
index 8ba3cef..69d1fcf 100644 (file)
        "config-postgres-old": "PostgreSQL $1 أو لاحق مطلوب. لديك $2.",
        "config-mssql-old": "خادم Microsoft SQL $1 أو لاحق مطلوب. لديك $2.",
        "config-sqlite-mkdir-error": "خطأ في إنشاء دليل البيانات \"$1\". تحقق من الموقع وحاول مرة أخرى.",
-       "config-sqlite-connection-error": "1$.\nتحقق من اسم دليل البيانات وقواعد البيانات أدناه وحاول مرة أخرى.",
+       "config-sqlite-connection-error": "$1.\nتحقق من اسم دليل البيانات وقواعد البيانات أدناه وحاول مرة أخرى.",
        "config-sqlite-readonly": "الملف <code>$1</code> غير قابل للكتابة.",
        "config-sqlite-cant-create-db": "لا يمكن إنشاء ملف قاعدة البيانات <code>$1</code>.",
        "config-can-upgrade": "هناك جداول ميدياويكي في قاعدة البيانات هذه. للارتقاء بها إلى ميدياويكي $1; انقر على <strong>متابعة</strong>.",
index 1335b9c..096767f 100644 (file)
@@ -83,6 +83,7 @@
        "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-using-32bit": "<strong>Папярэджаньне:</strong> падобна, што вашая сыстэма выкарыстоўвае 32-бітавыя цэлыя лікі. Гэта [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не рэкамэндуецца].",
        "config-db-type": "Тып базы зьвестак:",
        "config-db-host": "Хост базы зьвестак:",
        "config-db-host-help": "Калі сэрвэр Вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас.\n\nКалі Вы карыстаецеся shared-хостынгам, Ваш хостынг-правайдэр мусіць даць Вам слушнае імя хоста базы зьвестак у сваёй дакумэнтацыі.\n\nКалі Вы усталёўваеце сэрвэр Windows з выкарыстаньнем MySQL, выкарыстаньне «localhost» можа не працаваць для назвы сэрвэра. У гэтым выпадку паспрабуйце пазначыць «127.0.0.1»  для лякальнага IP-адраса.\n\nКалі Вы выкарыстоўваеце PostgreSQL, пакіньце поле пустым, каб далучыцца праз Unix-сокет.",
        "config-help-tooltip": "націсьніце, каб разгарнуць",
        "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?",
        "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category пашырэньні паводле катэгорыяў] або [https://www.mediawiki.org/wiki/Extension_Matrix матрыцу пашырэньняў], каб пабачыць поўны сьпіс.",
+       "config-skins-screenshots": "$1 (здымкі экрану: $2)",
        "mainpagetext": "<strong>MediaWiki была ўсталяваная.</strong>",
        "mainpagedocfooter": "Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents дапаможнік карыстальніка] для атрыманьня інфармацыі па карыстаньні вікі-праграмамі.\n\n== З чаго пачаць ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Частыя пытаньні MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Пераклад MediaWiki на вашую мову]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Даведайцеся, як змагацца з спамам у вашай вікі]"
 }
index 34efde4..dc423a6 100644 (file)
        "config-install-mainpage-exists": "প্রধান পাতা ইতিমধ্যেই বিদ্যমান, এডিয়ে যাওয়া হচ্ছে",
        "config-help": "সাহায্য",
        "config-help-tooltip": "প্রসারিত করতে ক্লিক করুন",
+       "config-skins-screenshots": "$1 (স্ক্রিনশট: $2)",
+       "config-screenshot": "স্ক্রিনশট",
        "mainpagetext": "<strong>মিডিয়াউইকি ইনস্টল করা হয়েছে।</strong>",
        "mainpagedocfooter": "কীভাবে উইকি সফটওয়্যারটি ব্যবহারকার করবেন, তা জানতে [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents ব্যবহারকারী সহায়িকা] দেখুন।\n\n== কোথা থেকে শুরু করবেন ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings কনফিগারেশন সেটিং তালিকা]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ প্রশ্নোত্তরে মিডিয়াউইকি]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়াউইকি মুক্তির মেইলিং লিস্ট]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources আপনার ভাষার জন্য মিডিয়াউইকি স্থানীয়করণ করুন]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam আপনার উইকিতে স্প্যামের সাথে লড়াই করার উপায় সম্পর্কে জানুন]"
 }
index 3babc3f..ca649dc 100644 (file)
@@ -92,6 +92,7 @@
        "config-no-cli-uploads-check": "'''Warnung''': Das Standardverzeichnis für hochgeladene Dateien (<code>$1</code>) wird, während der Installation über die Kommandozeile, nicht auf Sicherheitsanfälligkeiten hinsichtlich willkürlicher Skriptausführungen geprüft.",
        "config-brokenlibxml": "Das System nutzt eine Kombination aus PHP- und libxml2-Versionen, die fehleranfällig ist und versteckte Datenfehler bei MediaWiki und anderen Webanwendungen verursachen kann.\nAktualisiere auf libxml2 2.7.3 oder später, um das Problem zu lösen. Installationsabbruch ([https://bugs.php.net/bug.php?id=45996 siehe hierzu die Fehlermeldung bei PHP]).",
        "config-suhosin-max-value-length": "Suhosin ist installiert und beschränkt die Länge des GET-Parameters auf $1 Bytes.\nDer ResouceLoader von MediaWiki wird zwar unter diesen Bedingungen funktionieren, allerdings nur mit verminderter Leistungsfähigkeit.\nSofern möglich, sollte der Parameter <code>suhosin.get.max_value_length</code> in der Datei <code>php.ini</code> auf 1024 oder höher festgelegt werden.\nGleichzeitig muss der Parameter <code>$wgResourceLoaderMaxQueryLength</code> in der Datei <code>LocalSettings.php</code> auf den selben Wert eingestellt werden.",
+       "config-using-32bit": "<strong>Warnung:</strong> Es scheint, als ob dein System mit 32-Bit-Ganzzahlen läuft. Dies wird [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit nicht empfohlen].",
        "config-db-type": "Datenbanksystem:",
        "config-db-host": "Datenbankserver:",
        "config-db-host-help": "Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben.\n\nSofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den zutreffenden Servernamen in seiner Dokumentation angegeben haben.\n\nSofern auf einem Windows-Server installiert und MySQL genutzt wird, funktioniert der Servername „localhost“ voraussichtlich nicht. Wenn nicht, sollte  „127.0.0.1“ oder die lokale IP-Adresse angegeben werden.\n\nSofern PostgresQL genutzt wird, muss dieses Feld leer gelassen werden, um über ein Unix-Socket zu verbinden.",
        "config-help-tooltip": "Zum Expandieren klicken",
        "config-nofile": "Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?",
        "config-extension-link": "Wusstest du, dass dein Wiki die Nutzung von [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions Erweiterungen] unterstützt?\n\nDu kannst die [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category Erweiterungen nach Kategorie] anzeigen oder die [https://www.mediawiki.org/wiki/Extension_Matrix Erweiterungs-Matrix] aufrufen, um eine vollständige Liste der Erweiterungen zu sehen.",
+       "config-skins-screenshots": "$1 (Bildschirmfotos: $2)",
+       "config-screenshot": "Bildschirmfoto",
        "mainpagetext": "<strong>MediaWiki wurde installiert.</strong>",
        "mainpagedocfooter": "Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Benutzerhandbuch].\n\n== Starthilfen ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste der Konfigurationsvariablen]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki-FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Übersetze MediaWiki für deine Sprache]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Erfahre, wie du Spam auf deinem Wiki bekämpfen kannst]"
 }
index db92652..6319b76 100644 (file)
@@ -75,6 +75,7 @@
        "config-no-cli-uploads-check": "<strong>Warning:</strong> Your default directory for uploads (<code>$1</code>) is not checked for vulnerability\nto arbitrary script execution during the CLI install.",
        "config-brokenlibxml": "Your system has a combination of PHP and libxml2 versions that is buggy and can cause hidden data corruption in MediaWiki and other web applications.\nUpgrade to libxml2 2.7.3 or later ([https://bugs.php.net/bug.php?id=45996 bug filed with PHP]).\nInstallation aborted.",
        "config-suhosin-max-value-length": "Suhosin is installed and limits the GET parameter <code>length</code> to $1 bytes.\nMediaWiki's ResourceLoader component will work around this limit, but that will degrade performance.\nIf at all possible, you should set <code>suhosin.get.max_value_length</code> to 1024 or higher in <code>php.ini</code>, and set <code>$wgResourceLoaderMaxQueryLength</code> to the same value in <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Warning:</strong> your system appears to be running with 32-bit integers. This is [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit not advised].",
        "config-db-type": "Database type:",
        "config-db-host": "Database host:",
        "config-db-host-help": "If your database server is on different server, enter the host name or IP address here.\n\nIf you are using shared web hosting, your hosting provider should give you the correct host name in their documentation.\n\nIf you are installing on a Windows server and using MySQL, using \"localhost\" may not work for the server name. If it does not, try \"127.0.0.1\" for the local IP address.\n\nIf you are using PostgreSQL, leave this field blank to connect via a Unix socket.",
        "config-help-tooltip": "click to expand",
        "config-nofile": "File \"$1\" could not be found. Has it been deleted?",
        "config-extension-link": "Did you know that your wiki supports [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] or the [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] to see the full list of extensions.",
+       "config-skins-screenshots": "$1 (screenshots: $2)",
+       "config-skins-screenshot": "$1 ($2)",
+       "config-screenshot": "screenshot",
        "mainpagetext": "<strong>MediaWiki has been installed.</strong>",
        "mainpagedocfooter": "Consult the [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents User's Guide] for information on using the wiki software.\n\n== Getting started ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]"
 }
index 161c5db..7583455 100644 (file)
@@ -86,6 +86,7 @@
        "config-no-cli-uploads-check": "'''אזהרה:''' תיקיית בררת המחדל להעלאות (<code>$1</code>) לא נבדקת לפגיעוּת להרצת תסריטים אקראיים בזמן התקנה דרך CLI.",
        "config-brokenlibxml": "במערכת שלך יש שילוב של גרסאות של PHP ושל libxml2 שחשוף לבאגים ויכול לגרום לעיוות נתונים נסתר במדיה־ויקי וביישומי רשת אחרים.\nיש לשדרג ל־libxml2 2.7.3 או גרסה חדשה יותר ([https://bugs.php.net/bug.php?id=45996 באג מתויק ב־PHP]).\nההתקנה נעצרה.",
        "config-suhosin-max-value-length": "מותקן פה Suhosin והוא מגביל את אורך פרמטר GET ל־$1 בתים. רכיב ResourceLoader של מדיה־ויקי יעקוף את המגלבה הזאת, אבל זה יפגע בביצועים. אם זה בכלל אפשרי, כדאי לתקן את הערך של <code>suhosin.get.max_value_length</code> ל־1024 או יותר בקובץ <code>php.ini</code> ולהגדיר את ‎<code>$wgResourceLoaderMaxQueryLength</code> לאותו הערך בקובץ LocalSettings.php.",
+       "config-using-32bit": "<strong>אזהרה:</strong> נראה שהמערכת שלך רצה עם מספרים שלמים של 32 סיביות. זה [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit לא מומלץ].",
        "config-db-type": "סוג מסד הנתונים:",
        "config-db-host": "שרת מסד הנתונים:",
        "config-db-host-help": "אם שרת מסד הנתונים שלך נמצא על שרת אחר, יש להקליד את שם המחשב או את כתובת ה־IP כאן.\n\nאם זה אירוח משותף, ספק האירוח שלכם אמור לתת לך את שם השרת הנכון במסמכים.\n\nאם זוהי התקנה בשרת Windows שמשתמשת ב־MySQL, השימוש ב־localhost עשוי לא לעבוד. אם הוא לא עובד, יש לנסות את \"127.0.0.1\" בתור כתובת ה־IP המקומית.\n\nאם זה PostgreSQL, תשאירו את השדה הזה ריק כדי להתחבר דרך שקע יוניקס.",
        "config-help-tooltip": "להרחיב",
        "config-nofile": "הקובץ \"$1\" לא נמצא. האם הוא נמחק?",
        "config-extension-link": "הידעת שמדיה־ויקי תומכת ב־[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions הרחבות]?\n\nבאפשרותך לעיין ב־[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category הרחבות לפי קטגוריה].",
+       "config-skins-screenshots": "$1 (צילומי מסך: $2)",
+       "config-screenshot": "צילום מסך",
        "mainpagetext": "<strong>תוכנת מדיה־ויקי הותקנה בהצלחה.</strong>",
        "mainpagedocfooter": "היעזרו ב[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents מדריך למשתמש] למידע על שימוש בתוכנת הוויקי.\n\n== קישורים שימושיים ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings רשימת ההגדרות]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ שאלות ותשובות על מדיה־ויקי]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources תרגום מדיה־ויקי לשפה שלך]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam איך להיאבק נגד ספאם באתר הוויקי שלך]"
 }
index b443950..9863beb 100644 (file)
@@ -7,7 +7,8 @@
                        "संजीव कुमार",
                        "Sahilrathod",
                        "Shyamal",
-                       "Sfic"
+                       "Sfic",
+                       "Sachinkatiyar"
                ]
        },
        "config-desc": "साँचा लिए इंस्टॉलर",
@@ -50,6 +51,7 @@
        "config-apc": "[http://www.php.net/apc एपीसी] स्थापित है।",
        "config-apcu": "[http://www.php.net/apcu एपीसीयू] स्थापित है।",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp विनकैश] स्थापित है।",
+       "config-using-32bit": "<विशेष>चेतावनी:</विशेष> आपका सिस्टम 32-बिट पूर्णांक के साथ चल रहा है यह [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit विवेचित नहीं है]।",
        "config-db-type": "डेटाबेस प्रकार:",
        "config-db-host": "डेटाबेस होस्ट:",
        "config-db-host-oracle": "डेटाबेस टीएनएस:",
index f292ab3..ee01751 100644 (file)
        "config-help-tooltip": "확장하려면 클릭",
        "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?",
        "config-extension-link": "당신의 위키가 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 분류별 확장 기능]을 찾아보실 수 있습니다.",
+       "config-screenshot": "스크린샷",
        "mainpagetext": "<strong>미디어위키가 설치되었습니다.</strong>",
        "mainpagedocfooter": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings 설정하기 목록]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 릴리스 메일링 리스트]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 내 언어로 미디어위키 지역화]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 당신의 위키에서 스팸에 대처하는 법을 배우세요]"
 }
index 728a9a8..d028a8c 100644 (file)
@@ -80,6 +80,7 @@
        "config-no-cli-uploads-check": "'''Предупредување:''' Вашата основна папка за подигања (<code>$1</code>) не е проверена дали е подложна\nпроизволно извршување на скрипти во текот на воспоставката на посредникот на повикувачко ниво (CLI).",
        "config-brokenlibxml": "Вашиот систем има комбинација од PHP и libxml2 верзии и затоа има грешки и може да предизвика скриено расипување на податоците кај МедијаВики и други мрежни програми.\nНадградете го на libxml2 2.7.3 или нивни понови верзии! ([https://bugs.php.net/bug.php?id=45996 грешката е заведена во PHP]). Воспоставката е откажана.",
        "config-suhosin-max-value-length": "Suhosin е воспоставен и ја ограничува должината на параметарот GET на $1 бајти. Делот ResourceLoader на МедијаВики ќе ја заобиколува ова граница, но со тоа ќе се влоши делотворноста. Ако е воопшто можно, на <code>suhosin.get.max_value_length</code> треба да го наместите на 1024 или повеќе во <code>php.ini</code>, и да му ја зададете истата вредност на <code>$wgResourceLoaderMaxQueryLength</code> во <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Предупредување:</strong> вашиот систем работи на 32-битни цели броеви. Ова [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-не се препорачува].",
        "config-db-type": "Тип на база:",
        "config-db-host": "Домаќин на базата:",
        "config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко воспоставувате на опслужувач на Windows и користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како месна IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
        "config-help-tooltip": "стиснете да расклопите",
        "config-nofile": "Податотеката „$1“ не е пронајдена. Да не е избришана?",
        "config-extension-link": "Дали сте знаеле дека вашето вики поддржува [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатоци]?\n\nМожете да ги прелистате [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категории]",
+       "config-skins-screenshots": "$1 (екр. снимки: $2)",
+       "config-screenshot": "екранска снимка",
        "mainpagetext": "<strong>МедијаВики е успешно воспоставен.</strong>",
        "mainpagedocfooter": "Погледнете го [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Упатството за корисници] за подетални информации како се користи вики-програмот.\n\n==Од каде да почнете==\n* [https://meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]\n* [https://meta.wikimedia.org/wiki/Manual:FAQ ЧПП (често поставувани прашања) за МедијаВики].\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Поштенски список на МедијаВики за нови верзии]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локализирајте го МедијаВики на вашиот јазик]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Дознајте како да се борите против спам на вашето вики]"
 }
index b7a7289..b43f92f 100644 (file)
        "config-help-tooltip": "klikk for å utvide",
        "config-nofile": "Filen \"$1\" ble ikke funnet. Kan den være blitt slettet?",
        "config-extension-link": "Visste du at wikien din kan brukes sammen med en mengde [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions utvidelser]?\n\nDu kan sjekke gjennom [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category utvidelser per kategori] eller [https://www.mediawiki.org/wiki/Extension_Matrix utvidelsesmatrisen] for å se den komplette listen av utvidelser.",
+       "config-skins-screenshots": "$1 (skjermbilder: $2)",
+       "config-screenshot": "skjermbilde",
        "mainpagetext": "<strong>MediaWiki har blitt installert.</strong>",
        "mainpagedocfooter": "Sjekk [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents brukerveiledningen] for å få informasjon om hvordan du bruker wiki-programvaren.\n\n==Hvordan komme igang==\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Innstillingsliste]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ofte stilte spørsmål om MediaWiki]\n*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Tilpass MediaWiki for ditt språk]\n*[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Lær deg å beskytte deg mot spam på wikien din]"
 }
index 2154e7e..4db6cfb 100644 (file)
@@ -19,7 +19,8 @@
                        "Macofe",
                        "Hex",
                        "Mainframe98",
-                       "Rcdeboer"
+                       "Rcdeboer",
+                       "Festina90"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
@@ -95,6 +96,7 @@
        "config-no-cli-uploads-check": "''Waarschuwing:'' uw standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
        "config-brokenlibxml": "Uw systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.\nUpgrade naar libxml2 2.7.3 of hoger([https://bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).\nDe installatie wordt afgebroken.",
        "config-suhosin-max-value-length": "Suhosin is geïnstalleerd en beperkt de GET-parameter <code>length</code> tot $1 bytes.\nDe ResourceLoader van MediaWiki omzeilt deze beperking, maar dat is slecht voor de prestaties.\nAls het mogelijk is, moet u de waarde \"<code>suhosin.get.max_value_length</code>\" in <code>php.ini</code> instellen op 1024 of hoger en <code>$wgResourceLoaderMaxQueryLength</code> in LocalSettings.php op dezelfde waarde instellen.",
+       "config-using-32bit": "<strong>Opgepast:</strong> uw systeem blijkt met 32-bit integers te werken. Dit is [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit niet geadviseerd].",
        "config-db-type": "Databasetype:",
        "config-db-host": "Databasehost:",
        "config-db-host-help": "Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.\n\nAls u gebruik maakt van gedeelde webhosting, hoort uw provider u de juiste hostnaam te hebben verstrekt.\n\nAls u MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt \"localhost\" mogelijk niet als servernaam.\nAls het inderdaad niet werkt, probeer dan \"127.0.0.1\" te gebruiken als lokaal IP-adres.\n\nAls u PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.",
index f892527..884f956 100644 (file)
@@ -22,7 +22,7 @@
                ]
        },
        "config-desc": "O instalador do MediaWiki",
-       "config-title": "Instalação da MediaWiki $1",
+       "config-title": "Instalação do MediaWiki $1",
        "config-information": "Informação",
        "config-localsettings-upgrade": "Foi detetado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, por favor introduza o valor de <code>$wgUpgradeKey</code> na caixa abaixo.\nEncontra este valor em <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Foi detetado um ficheiro <code>LocalSettings.php</code>.\nPara atualizar esta instalação, execute o <code>update.php</code>, por favor",
        "config-help": "ajuda",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?",
-       "config-extension-link": "Sabia que a sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode procurar [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria].",
-       "mainpagetext": "<strong>MediaWiki instalado.</strong>",
+       "config-extension-link": "Sabia que a sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nPode consultar as [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou a [https://www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa de extensões.",
+       "config-skins-screenshots": "$1 (capturas de ecrã: $2)",
+       "config-screenshot": "captura de ecrã",
+       "mainpagetext": "<strong>O MediaWiki foi instalado.</strong>",
        "mainpagedocfooter": "Consulte a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Ajuda do MediaWiki] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Regionalize o MediaWiki para a sua língua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprenda a combater <i>spam</i> na sua wiki]"
 }
index 8d10b51..a5c6790 100644 (file)
@@ -18,7 +18,8 @@
                        "Umherirrender",
                        "Waldir",
                        "Jdforrester",
-                       "Liuxinyu970226"
+                       "Liuxinyu970226",
+                       "Metalhead64"
                ]
        },
        "config-desc": "Short description of the installer.",
@@ -94,6 +95,7 @@
        "config-no-cli-uploads-check": "CLI = [[w:Command-line interface|command-line interface]] (i.e. the installer runs as a command-line script, not using HTML interface via an internet browser)",
        "config-brokenlibxml": "Status message in the MediaWiki installer environment checks.",
        "config-suhosin-max-value-length": "{{doc-important|Do not translate \"length\", \"suhosin.get.max_value_length\", \"php.ini\", \"$wgResourceLoaderMaxQueryLength\" and \"LocalSettings.php\".}}\nMessage shown when PHP parameter <code>suhosin.get.max_value_length</code> is between 0 and 1023 (that max value is hard set in MediaWiki software).",
+       "config-using-32bit": "Warning message shown when installing on a 32-bit system.",
        "config-db-type": "Field label in the MediaWiki installer followed by possible database types.",
        "config-db-host": "Used as label.\n\nAlso used in {{msg-mw|Config-missing-db-host}}.",
        "config-db-host-help": "{{doc-singularthey}}",
        "config-help-tooltip": "Tooltip for the 'help' links ({{msg-mw|config-help}}), to make it clear they'll expand in place rather than open a new page",
        "config-nofile": "Used as failure message. Parameters:\n* $1 - filename",
        "config-extension-link": "Shown on last page of installation to inform about possible extensions.\n{{Identical|Did you know}}",
+       "config-skins-screenshots": "Radio button text, $1 is the skin name, and $2 is a list of links to screenshots of that skin",
+       "config-skins-screenshot": "Radio button text, $1 is the skin name, and $2 is a link to a screenshot of that skin, where the link text is {{msg-mw|config-screenshot}}.",
+       "config-screenshot": "Link text for the link in {{msg-mw|config-skins-screenshot}}\n{{Identical|Screenshot}}",
        "mainpagetext": "Along with {{msg-mw|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.",
        "mainpagedocfooter": "Along with {{msg-mw|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.\nThis might be a good place to put information about <nowiki>{{GRAMMAR:}}</nowiki>. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/fi]] for an example. For languages having grammatical distinctions and not having an appropriate <nowiki>{{GRAMMAR:}}</nowiki> software available, a suggestion to check and possibly amend the messages having <nowiki>{{SITENAME}}</nowiki> may be valuable. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/ksh]] for an example."
 }
index cdd13c2..9045605 100644 (file)
        "config-no-cli-uploads-check": "'''Предупреждение:''' каталог для загрузки по умолчанию ( <code>$1</code> ) не проверялся на уязвимости\n на выполнение произвольного сценария во время установки CLI.",
        "config-brokenlibxml": "В вашей системе имеется сочетание версий PHP и libxml2, которое может привести к скрытым повреждениям данных в MediaWiki и других веб-приложениях.\nОбновите libxml2 до версии 2.7.3 или старше ([https://bugs.php.net/bug.php?id=45996 сведения об ошибке]).\nУстановка прервана.",
        "config-suhosin-max-value-length": "Suhosin установлен и ограничивает параметр GET <code>length</code> до $1 {{PLURAL:$1|байт|байта|байт}}. Компонент MediaWiki ResourceLoader будет обходить это ограничение, но это снизит производительность. Если это возможно, следует установить <code>suhosin.get.max_value_length</code> в значение 1024 или выше в <code>php.ini</code>, а также установить для <code>$wgResourceLoaderMaxQueryLength</code> такое же значение в LocalSettings.php.",
+       "config-using-32bit": "<strong>Внимание:</strong> похоже, ваша система работает с 32-битными целыми числами. Это [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не рекомендуется].",
        "config-db-type": "Тип базы данных:",
        "config-db-host": "Хост базы данных:",
        "config-db-host-help": "Если сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес.\n\nЕсли вы используете виртуальный хостинг, ваш провайдер должен указать правильное имя хоста в своей документации.\n\nЕсли вы устанавливаете систему на сервере под Windows и используете MySQL, имя сервера «localhost» может не работать. В этом случае попробуйте указать 127.0.0.1 локальный  IP-адрес.\n\nЕсли вы используете PostgreSQL, оставьте это поле пустым для подключения через сокет Unix.",
        "config-help-tooltip": "нажмите, чтобы развернуть",
        "config-nofile": "Файл \"$1\" не удается найти. Он был удален?",
        "config-extension-link": "Знаете ли вы, что ваш вики-проект поддерживает [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions расширения]?\n\nВы можете просмотреть [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category расширения по категориям] или [https://www.mediawiki.org/wiki/Extension_Matrix матрицу расширений], чтобы увидеть их полный список.",
+       "config-skins-screenshots": "$1 (скриншоты: $2)",
+       "config-screenshot": "скриншот",
        "mainpagetext": "<strong>MediaWiki успешно установлена.</strong>",
        "mainpagedocfooter": "Информацию по работе с этой вики можно найти в [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents справочном руководстве].\n\n== Некоторые полезные ресурсы ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];\n* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]"
 }
index 4f52403..a338387 100644 (file)
@@ -85,6 +85,7 @@
        "config-no-cli-uploads-check": "'''Varning:''' Din standardkatalog för uppladdningar (<code>$1</code>) har inte kontrollerats för sårbarhet från körning av godtyckliga skript under CLI-installationen.",
        "config-brokenlibxml": "Ditt system har en kombination av PHP och libxml2 som är buggigt och kan orsaka datakorruption i MediaWiki och andra webbprogram.\nUppgradera till libxml2 2.7.3 eller senare ([https//bugs.php.net/bug.php?id=45996 buggfil med PHP]).\nInstallationen avbröts.",
        "config-suhosin-max-value-length": "Suhosin är installerat och begränsar GET-parametern <code>length</code> till $1 bytes.\nMediaWikis ResourceLoader-komponent kommer att arbeta runt denna begränsning, men det kommer att försämra prestandan.\nOm möjligt bör du sätta <code>suhosin.get.max_value_length</code> till 1024 eller högre i <code>php.ini</code>, och sätta <code>$wgResourceLoaderMaxQueryLength</code> till samma värde som i <code>LocalSettings.php</code>.",
+       "config-using-32bit": "<strong>Varning:</strong> ditt system verkar vara en 32-bitarsversion. Detta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit rekommenderas inte].",
        "config-db-type": "Databastyp:",
        "config-db-host": "Databasvärd:",
        "config-db-host-help": "Om din databasserver är på en annan server, ange då värdnamnet eller IP-adressen här.\n\nOm du använder ett delat webbhotell, bör din leverantör ge dig rätt värdnamn i deras dokumentation.\n\nOm du installerar på en Windowsserver och använder MySQL, kanske \"localhost\" inte fungerar för servernamnet. Om det inte gör det försök med \"127.0.0.1\" som den lokala IP-adressen.\n\nOm du använder PostgreSQL, lämna detta fält blankt för att ansluta via en Unix-socket.",
        "config-help-tooltip": "klicka för att expandera",
        "config-nofile": "Filen \"$1\" kunde inte hittas. Har den raderats?",
        "config-extension-link": "Visste du att din wiki stödjer [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions tillägg]?\n\nDu kan bläddra [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category tillägg efter kategori].",
+       "config-skins-screenshots": "$1 (skärmbilder: $2)",
+       "config-screenshot": "skärmbild",
        "mainpagetext": "<strong>MediaWiki har installerats utan problem.</strong>",
        "mainpagedocfooter": "Information om hur wiki-programvaran används finns i [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents användarguiden].\n\n== Att komma igång ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista över konfigurationsinställningar]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postlista för nya versioner av MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lokalisera MediaWiki för ditt språk]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Läs om hur du bekämpar spam på din wiki]"
 }
index d0c0026..fab5eef 100644 (file)
@@ -98,6 +98,7 @@
        "config-no-cli-uploads-check": "<strong>警告:</strong>在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
        "config-brokenlibxml": "您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将libxml2升级到2.7.3或以上([https://bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。",
        "config-suhosin-max-value-length": "Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在<code>php.ini</code>中将<code>suhosin.get.max_value_length</code>设为1024或更高值,并在LocalSettings.php中将<code>$wgResourceLoaderMaxQueryLength</code>设为同一值。",
+       "config-using-32bit": "<strong>警告:</strong>您的系统似乎是32位系统。我们[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit 不建议您]使用32位系统。",
        "config-db-type": "数据库类型:",
        "config-db-host": "数据库主机:",
        "config-db-host-help": "如果您的数据库在别的服务器上,请在这里输入它的域名或IP地址。\n\n如果您在使用共享网站套餐,您的网站商应该已在他们的控制面板中给您数据库信息了。\n\n如果您在Windows中安装并且使用MySQL,“localhost”可能无效。如果确实无效,请输入“127.0.0.1”作为IP地址。\n\n如果您在使用PostgreSQL,并且要用Unix socket来连接,请留空。",
        "config-help-tooltip": "单击展开",
        "config-nofile": "找不到文件“$1”。它是否已被删除?",
        "config-extension-link": "您是否知道您的wiki支持[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions 扩展]?\n\n您可以浏览[https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category 扩展分类]或[https://www.mediawiki.org/wiki/Extension_Matrix 扩展矩阵]以查看完整的扩展列表。",
+       "config-skins-screenshots": "$1(截图:$2)",
+       "config-screenshot": "截图",
        "mainpagetext": "<strong>已安装MediaWiki。</strong>",
        "mainpagedocfooter": "请查阅[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 用户指导]以获取使用本wiki软件的信息!\n\n== 入门 ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]"
 }
index 44721d9..e743311 100644 (file)
@@ -202,7 +202,7 @@ class JobQueueFederated extends JobQueue {
 
        /**
         * @param array $jobs
-        * @param HashRing $partitionRing
+        * @param HashRing &$partitionRing
         * @param int $flags
         * @throws JobQueueError
         * @return array List of Job object that could not be inserted
index ef0ecb3..addc7fc 100644 (file)
@@ -37,6 +37,8 @@ class JobQueueGroup {
        protected $wiki;
        /** @var string|bool Read only rationale (or false if r/w) */
        protected $readOnlyReason;
+       /** @var bool Whether the wiki is not recognized in configuration */
+       protected $invalidWiki = false;
 
        /** @var array Map of (bucket => (queue => JobQueue, types => list of types) */
        protected $coalescedQueues;
@@ -68,9 +70,17 @@ class JobQueueGroup {
         * @return JobQueueGroup
         */
        public static function singleton( $wiki = false ) {
+               global $wgLocalDatabases;
+
                $wiki = ( $wiki === false ) ? wfWikiID() : $wiki;
+
                if ( !isset( self::$instances[$wiki] ) ) {
                        self::$instances[$wiki] = new self( $wiki, wfConfiguredReadOnlyReason() );
+                       // Make sure jobs are not getting pushed to bogus wikis. This can confuse
+                       // the job runner system into spawning endless RPC requests that fail (T171371).
+                       if ( $wiki !== wfWikiID() && !in_array( $wiki, $wgLocalDatabases ) ) {
+                               self::$instances[$wiki]->invalidWiki = true;
+                       }
                }
 
                return self::$instances[$wiki];
@@ -121,6 +131,13 @@ class JobQueueGroup {
        public function push( $jobs ) {
                global $wgJobTypesExcludedFromDefaultQueue;
 
+               if ( $this->invalidWiki ) {
+                       // Do not enqueue job that cannot be run (T171371)
+                       $e = new LogicException( "Domain '{$this->wiki}' is not recognized." );
+                       MWExceptionHandler::logException( $e );
+                       return;
+               }
+
                $jobs = is_array( $jobs ) ? $jobs : [ $jobs ];
                if ( !count( $jobs ) ) {
                        return;
@@ -171,6 +188,11 @@ class JobQueueGroup {
         * @since 1.26
         */
        public function lazyPush( $jobs ) {
+               if ( $this->invalidWiki ) {
+                       // Do not enqueue job that cannot be run (T171371)
+                       throw new LogicException( "Domain '{$this->wiki}' is not recognized." );
+               }
+
                if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
                        $this->push( $jobs );
                        return;
index 49b7a45..db881d5 100644 (file)
@@ -281,7 +281,9 @@ class JobRunner implements LoggerAwareInterface {
        private function executeJob( Job $job, LBFactory $lbFactory, $stats, $popTime ) {
                $jType = $job->getType();
                $msg = $job->toString() . " STARTING";
-               $this->logger->debug( $msg );
+               $this->logger->debug( $msg, [
+                       'job_type' => $job->getType(),
+               ] );
                $this->debugCallback( $msg );
 
                // Run the job...
@@ -339,12 +341,23 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                if ( $status === false ) {
+                       $msg = $job->toString() . " t={job_duration} error={job_error}";
+                       $this->logger->error( $msg, [
+                               'job_type' => $job->getType(),
+                               'job_duration' => $timeMs,
+                               'job_error' => $error,
+                       ] );
+
                        $msg = $job->toString() . " t=$timeMs error={$error}";
-                       $this->logger->error( $msg );
                        $this->debugCallback( $msg );
                } else {
+                       $msg = $job->toString() . " t={job_duration} good";
+                       $this->logger->info( $msg, [
+                               'job_type' => $job->getType(),
+                               'job_duration' => $timeMs,
+                       ] );
+
                        $msg = $job->toString() . " t=$timeMs good";
-                       $this->logger->info( $msg );
                        $this->debugCallback( $msg );
                }
 
@@ -488,9 +501,14 @@ class JobRunner implements LoggerAwareInterface {
                }
                $usedBytes = memory_get_usage();
                if ( $maxBytes && $usedBytes >= 0.95 * $maxBytes ) {
+                       $msg = "Detected excessive memory usage ({used_bytes}/{max_bytes}).";
+                       $this->logger->error( $msg, [
+                               'used_bytes' => $usedBytes,
+                               'max_bytes' => $maxBytes,
+                       ] );
+
                        $msg = "Detected excessive memory usage ($usedBytes/$maxBytes).";
                        $this->debugCallback( $msg );
-                       $this->logger->error( $msg );
 
                        return false;
                }
@@ -552,8 +570,14 @@ class JobRunner implements LoggerAwareInterface {
                }
 
                $ms = intval( 1000 * $time );
+
+               $msg = $job->toString() . " COMMIT ENQUEUED [{job_commit_write_ms}ms of writes]";
+               $this->logger->info( $msg, [
+                       'job_type' => $job->getType(),
+                       'job_commit_write_ms' => $ms,
+               ] );
+
                $msg = $job->toString() . " COMMIT ENQUEUED [{$ms}ms of writes]";
-               $this->logger->info( $msg );
                $this->debugCallback( $msg );
 
                // Wait for an exclusive lock to commit
index 2156bd7..0413ea0 100644 (file)
@@ -39,7 +39,7 @@ class ArrayUtils {
         * justification for breaking compatibility with installations
         * compiled with ./configure --disable-hash.
         *
-        * @param array $array Array to sort
+        * @param array &$array Array to sort
         * @param string $key
         * @param string $separator A separator used to delimit the array elements and the
         *     key. This can be chosen to provide backwards compatibility with
index e55bebc..2d1c58b 100644 (file)
@@ -133,8 +133,8 @@ class IEUrlExtension {
        /**
         * Returns a variant of $url which will pass isUrlExtensionBad() but has the
         * same GET parameters, or false if it can't figure one out.
-        * @param $url
-        * @param $extWhitelist array
+        * @param string $url
+        * @param array $extWhitelist
         * @return bool|string
         */
        public static function fixUrlForIE6( $url, $extWhitelist = [] ) {
@@ -251,7 +251,7 @@ class IEUrlExtension {
         * or a specification in the style of a User-Agent header, such as
         * "Apache/1.3.34 (Unix) mod_ssl/2.8.25 OpenSSL/0.9.8a PHP/4.4.2"
         *
-        * @param $serverSoftware
+        * @param string $serverSoftware
         * @return bool
         */
        public static function haveUndecodedRequestUri( $serverSoftware ) {
index 01adeab..90c7a64 100644 (file)
@@ -134,7 +134,7 @@ class MemoizedCallable {
         *
         * Like MemoizedCallable::invokeArgs(), but variadic.
         *
-        * @param mixed ...$params Parameters for memoized function or method.
+        * @param mixed $params,... Parameters for memoized function or method.
         * @return mixed The memoized callable's return value.
         */
        public function invoke() {
index 9d6b734..6c48cee 100644 (file)
@@ -275,7 +275,7 @@ class MultiHttpClient implements LoggerAwareInterface {
        }
 
        /**
-        * @param array $req HTTP request map
+        * @param array &$req HTTP request map
         * @param array $opts
         *   - connTimeout    : default connection timeout
         *   - reqTimeout     : default request timeout
@@ -435,7 +435,7 @@ class MultiHttpClient implements LoggerAwareInterface {
        /**
         * Register a logger
         *
-        * @param LoggerInterface
+        * @param LoggerInterface $logger
         */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
index 9f15078..ef2b768 100644 (file)
@@ -28,7 +28,7 @@ class ComposerInstalled {
                                'type' => $installed['type'],
                                'licenses' => isset( $installed['license'] ) ? $installed['license'] : [],
                                'authors' => isset( $installed['authors'] ) ? $installed['authors'] : [],
-                               'description' => isset( $installed['description'] ) ? $installed['description']: '',
+                               'description' => isset( $installed['description'] ) ? $installed['description'] : '',
                        ];
                }
 
index 818ccdf..dc8bc03 100644 (file)
@@ -28,7 +28,7 @@ class ComposerLock {
                                'type' => $installed['type'],
                                'licenses' => isset( $installed['license'] ) ? $installed['license'] : [],
                                'authors' => isset( $installed['authors'] ) ? $installed['authors'] : [],
-                               'description' => isset( $installed['description'] ) ? $installed['description']: '',
+                               'description' => isset( $installed['description'] ) ? $installed['description'] : '',
                        ];
                }
 
index 6f51081..51308c1 100644 (file)
@@ -1591,7 +1591,7 @@ abstract class FileBackend implements LoggerAwareInterface {
         *   - StatusValue::newGood() if this method is called without parameters
         *   - StatusValue::newFatal() with all parameters to this method if passed in
         *
-        * @param ... string
+        * @param string $args,...
         * @return StatusValue
         */
        final protected function newStatus() {
index 044e976..eb72edc 100644 (file)
@@ -69,7 +69,7 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackendStore::__construct()
-        * Additional $config params include:
+        * @param array $config Params include:
         *   - swiftAuthUrl       : Swift authentication server URL
         *   - swiftUser          : Swift user used by MediaWiki (account:username)
         *   - swiftKey           : Swift authentication key for the above user
@@ -828,7 +828,7 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
-        * @param string|null $after Resolved container relative path to list items after
+        * @param string|null &$after Resolved container relative path to list items after
         * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
         * @return array List of container relative resolved paths of directories directly under $dir
@@ -908,7 +908,7 @@ class SwiftFileBackend extends FileBackendStore {
         *
         * @param string $fullCont Resolved container name
         * @param string $dir Resolved storage directory with no trailing slash
-        * @param string|null $after Resolved container relative path of file to list items after
+        * @param string|null &$after Resolved container relative path of file to list items after
         * @param int $limit Max number of items to list
         * @param array $params Parameters for getDirectoryList()
         * @return array List of resolved container relative paths of files under $dir
@@ -1888,7 +1888,7 @@ abstract class SwiftFileBackendList implements Iterator {
         *
         * @param string $container Resolved container name
         * @param string $dir Resolved path relative to container
-        * @param string $after
+        * @param string &$after
         * @param int $limit
         * @param array $params
         * @return Traversable|array
index 30578fa..40af7ac 100644 (file)
@@ -247,7 +247,7 @@ abstract class FileOp {
         * This must update $predicates for each path that the op can change
         * except when a failing StatusValue object is returned.
         *
-        * @param array $predicates
+        * @param array &$predicates
         * @return StatusValue
         */
        final public function precheck( array &$predicates ) {
@@ -264,7 +264,7 @@ abstract class FileOp {
        }
 
        /**
-        * @param array $predicates
+        * @param array &$predicates
         * @return StatusValue
         */
        protected function doPrecheck( array &$predicates ) {
index e10606a..2ad8ac8 100644 (file)
@@ -85,7 +85,7 @@ class ScopedLock {
         * This is useful for early release of locks before function scope is destroyed.
         * This is the same as setting the lock object to null.
         *
-        * @param ScopedLock $lock
+        * @param ScopedLock &$lock
         * @since 1.21
         */
        public static function release( ScopedLock &$lock = null ) {
index badcb2b..dfc7c4b 100644 (file)
@@ -344,7 +344,7 @@ class IEContentAnalyzer {
        /**
         * Translate a MIME type from IE's idiosyncratic private types into
         * more commonly understood type strings
-        * @param $type
+        * @param string $type
         * @return string
         */
        public function translateMimeType( $type ) {
@@ -383,10 +383,10 @@ class IEContentAnalyzer {
 
        /**
         * Get the MIME type for a given named version
-        * @param $version
-        * @param $fileName
-        * @param $chunk
-        * @param $proposed
+        * @param string $version
+        * @param string $fileName
+        * @param string $chunk
+        * @param string $proposed
         * @return bool|string
         */
        protected function getMimeTypeForVersion( $version, $fileName, $chunk, $proposed ) {
@@ -553,8 +553,8 @@ class IEContentAnalyzer {
        /**
         * Check for text headers at the start of the chunk
         * Confirmed same in 5 and 7.
-        * @param $version
-        * @param $chunk
+        * @param string $version
+        * @param string $chunk
         * @return bool|string
         */
        private function checkTextHeaders( $version, $chunk ) {
@@ -579,8 +579,8 @@ class IEContentAnalyzer {
        /**
         * Check for binary headers at the start of the chunk
         * Confirmed same in 5 and 7.
-        * @param $version
-        * @param $chunk
+        * @param string $version
+        * @param string $chunk
         * @return bool|string
         */
        private function checkBinaryHeaders( $version, $chunk ) {
@@ -680,8 +680,8 @@ class IEContentAnalyzer {
        /**
         * Do heuristic checks on the bulk of the data sample.
         * Search for HTML tags.
-        * @param $version
-        * @param $chunk
+        * @param string $version
+        * @param string $chunk
         * @return array
         */
        protected function sampleData( $version, $chunk ) {
@@ -832,8 +832,8 @@ class IEContentAnalyzer {
        }
 
        /**
-        * @param $version
-        * @param $type
+        * @param string $version
+        * @param string|null $type
         * @return int|string
         */
        protected function getDataFormat( $version, $type ) {
index e48cf62..ea7f9a6 100644 (file)
@@ -275,7 +275,7 @@ class XmlTypeCheck {
 
        /**
         * Get all of the attributes for an XMLReader's current node
-        * @param $r XMLReader
+        * @param XMLReader $r
         * @return array of attributes
         */
        private function getAttributesArray( XMLReader $r ) {
@@ -293,8 +293,8 @@ class XmlTypeCheck {
        }
 
        /**
-        * @param $name element or attribute name, maybe with a full or short prefix
-        * @param $namespaceURI the namespaceURI
+        * @param string $name element or attribute name, maybe with a full or short prefix
+        * @param string $namespaceURI the namespaceURI
         * @return string the name prefixed with namespaceURI
         */
        private function expandNS( $name, $namespaceURI ) {
@@ -307,8 +307,8 @@ class XmlTypeCheck {
        }
 
        /**
-        * @param $name
-        * @param $attribs
+        * @param string $name
+        * @param string $attribs
         */
        private function elementOpen( $name, $attribs ) {
                $this->elementDataContext[] = [ $name, $attribs ];
@@ -338,7 +338,7 @@ class XmlTypeCheck {
        }
 
        /**
-        * @param $data
+        * @param string $data
         */
        private function elementData( $data ) {
                // Collect any data here, and we'll run the callback in elementClose
@@ -346,8 +346,8 @@ class XmlTypeCheck {
        }
 
        /**
-        * @param $target
-        * @param $data
+        * @param string $target
+        * @param string $data
         */
        private function processingInstructionHandler( $target, $data ) {
                $callbackReturn = false;
@@ -452,7 +452,7 @@ class XmlTypeCheck {
         *
         * If there is an error parsing the dtd, sets wellFormed to false.
         *
-        * @param $dtd string
+        * @param string $dtd
         * @return array Possibly containing keys publicid, systemid, type and internal.
         */
        private function parseDTD( $dtd ) {
index 7cd678b..a262e0e 100644 (file)
@@ -229,7 +229,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * @note: This method is only needed if merge() uses mergeViaCas()
         *
         * @param string $key
-        * @param mixed $casToken
+        * @param mixed &$casToken
         * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed Returns false on failure and if the item does not exist
         * @throws Exception
@@ -747,7 +747,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a global cache key.
         *
         * @since 1.27
-        * @param string ... Key component (variadic)
+        * @param string $keys,... Key component
         * @return string
         */
        public function makeGlobalKey() {
@@ -758,7 +758,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a cache key, scoped to this instance's keyspace.
         *
         * @since 1.27
-        * @param string ... Key component (variadic)
+        * @param string $keys,... Key component
         * @return string
         */
        public function makeKey() {
index d94578d..65f3a8a 100644 (file)
@@ -174,7 +174,7 @@ class MultiWriteBagOStuff extends BagOStuff {
         * @param integer $count
         * @param bool $asyncWrites
         * @param string $method
-        * @param mixed ...
+        * @param mixed $args,...
         * @return bool
         */
        protected function doWrite( $count, $asyncWrites, $method /*, ... */ ) {
index 730eed1..5d2577b 100644 (file)
@@ -56,7 +56,7 @@ class RESTBagOStuff extends BagOStuff {
        }
 
        /**
-        * @param string  $key
+        * @param string $key
         * @param integer $flags Bitfield of BagOStuff::READ_* constants [optional]
         * @return mixed Returns false on failure and if the item does not exist
         */
@@ -82,7 +82,7 @@ class RESTBagOStuff extends BagOStuff {
        /**
         * Handle storage error
         * @param string $msg Error message
-        * @param int    $rcode Error code from client
+        * @param int $rcode Error code from client
         * @param string $rerr Error message from client
         * @return false
         */
@@ -99,9 +99,9 @@ class RESTBagOStuff extends BagOStuff {
         * Set an item
         *
         * @param string $key
-        * @param mixed  $value
-        * @param int    $exptime Either an interval in seconds or a unix timestamp for expiry
-        * @param int    $flags Bitfield of BagOStuff::WRITE_* constants
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $flags Bitfield of BagOStuff::WRITE_* constants
         * @return bool Success
         */
        public function set( $key, $value, $exptime = 0, $flags = 0 ) {
index ff7e91a..a80ed8d 100644 (file)
@@ -240,7 +240,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * That method has cache slam avoiding features for hot/expensive keys.
         *
         * @param string $key Cache key
-        * @param mixed $curTTL Approximate TTL left on the key if present/tombstoned [returned]
+        * @param mixed &$curTTL Approximate TTL left on the key if present/tombstoned [returned]
         * @param array $checkKeys List of "check" keys
         * @param float &$asOf UNIX timestamp of cached value; null on failure [returned]
         * @return mixed Value of cache key or false on failure
@@ -261,7 +261,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @see WANObjectCache::get()
         *
         * @param array $keys List of cache keys
-        * @param array $curTTLs Map of (key => approximate TTL left) for existing keys [returned]
+        * @param array &$curTTLs Map of (key => approximate TTL left) for existing keys [returned]
         * @param array $checkKeys List of check keys to apply to all $keys. May also apply "check"
         *  keys to specific cache keys only by using cache keys as keys in the $checkKeys array.
         * @param float[] &$asOfs Map of (key =>  UNIX timestamp of cached value; null on failure)
@@ -1315,7 +1315,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @see BagOStuff::makeKey()
-        * @param string ... Key component
+        * @param string $keys,... Key component
         * @return string
         * @since 1.27
         */
@@ -1325,7 +1325,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @see BagOStuff::makeGlobalKey()
-        * @param string ... Key component
+        * @param string $keys,... Key component
         * @return string
         * @since 1.27
         */
index 43b6f88..8ac4161 100644 (file)
@@ -118,7 +118,7 @@ class TransactionProfiler implements LoggerAwareInterface {
         * With conflicting expectations, the most narrow ones will be used
         *
         * @param array $expects Map of (event => limit)
-        * @param $fname
+        * @param string $fname
         * @since 1.26
         */
        public function setExpectations( array $expects, $fname ) {
index b8b44e6..cec13b5 100644 (file)
@@ -758,7 +758,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 
                        $closed = $this->closeConnection();
                        $this->mConn = false;
-               } elseif ( $this->mTrxIdleCallbacks || $this->mTrxEndCallbacks ) { // sanity
+               } elseif (
+                       $this->mTrxIdleCallbacks ||
+                       $this->mTrxPreCommitCallbacks ||
+                       $this->mTrxEndCallbacks
+               ) { // sanity
                        throw new RuntimeException( "Transaction callbacks still pending." );
                } else {
                        $closed = true;
@@ -818,7 +822,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 
        /**
-        * @param $sql
+        * @param string $sql
         * @return string|null
         */
        protected function getQueryVerb( $sql ) {
@@ -3190,7 +3194,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * @see WANObjectCache::getWithSetCallback()
         *
         * @param IDatabase $db1
-        * @param IDatabase ...
+        * @param IDatabase $dbs,...
         * @return array Map of values:
         *   - lag: highest lag of any of the DBs or false on error (e.g. replication stopped)
         *   - since: oldest UNIX timestamp of any of the DB lag estimates
index 8d19bc1..991e0c6 100644 (file)
@@ -989,8 +989,8 @@ abstract class DatabaseMysqlBase extends Database {
        }
 
        /**
-        * @param string $sql
-        * @param string $newLine
+        * @param string &$sql
+        * @param string &$newLine
         * @return bool
         */
        public function streamStatementEnd( &$sql, &$newLine ) {
index fcd29c3..4d1b87b 100644 (file)
@@ -23,6 +23,7 @@
 namespace Wikimedia\Rdbms;
 
 use mysqli;
+use mysqli_result;
 use IP;
 
 /**
@@ -190,7 +191,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param mysqli $res
+        * @param mysqli_result $res
         * @return bool
         */
        protected function mysqlFreeResult( $res ) {
@@ -200,7 +201,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param mysqli $res
+        * @param mysqli_result $res
         * @return bool
         */
        protected function mysqlFetchObject( $res ) {
@@ -213,7 +214,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param mysqli $res
+        * @param mysqli_result $res
         * @return bool
         */
        protected function mysqlFetchArray( $res ) {
@@ -226,7 +227,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param mysqli $res
+        * @param mysqli_result $res
         * @return mixed
         */
        protected function mysqlNumRows( $res ) {
@@ -287,7 +288,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param mysqli $res
+        * @param mysqli_result $res
         * @param int $row
         * @return mixed
         */
index db5b7e5..e2d685c 100644 (file)
@@ -7,7 +7,7 @@ class Blob implements IBlob {
        protected $mData;
 
        /**
-        * @param $data string
+        * @param string $data
         */
        public function __construct( $data ) {
                $this->mData = $data;
index f6b9bd5..4f65efa 100644 (file)
@@ -50,7 +50,7 @@ class DBExpectedError extends DBError implements MessageSpecifier, ILocalizedExc
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         * @since 1.29
         */
        public function getMessageObject() {
index 6e328f4..117df68 100644 (file)
@@ -40,7 +40,7 @@ interface ILBFactory {
         *
         * Sub-classes will extend the required keys in $conf with additional parameters
         *
-        * @param $conf $params Array with keys:
+        * @param array $conf Array with keys:
         *  - localDomain: A DatabaseDomain or domain ID string.
         *  - readOnlyReason : Reason the master DB is read-only if so [optional]
         *  - srvCache : BagOStuff object for server cache [optional]
index 99c2c3c..509240f 100644 (file)
@@ -396,9 +396,14 @@ class RedisConnectionPool implements LoggerAwareInterface {
        function __destruct() {
                foreach ( $this->connections as $server => &$serverConnections ) {
                        foreach ( $serverConnections as $key => &$connection ) {
-                               /** @var Redis $conn */
-                               $conn = $connection['conn'];
-                               $conn->close();
+                               try {
+                                       /** @var Redis $conn */
+                                       $conn = $connection['conn'];
+                                       $conn->close();
+                               } catch ( RedisException $e ) {
+                                       // The destructor can be called on shutdown when random parts of the system
+                                       // have been destructed already, causing weird errors. Ignore them.
+                               }
                        }
                }
        }
index f2e35b6..75d6b9e 100644 (file)
@@ -53,7 +53,6 @@ class NullStatsdDataFactory implements IBufferingStatsdDataFactory {
         * This function creates a 'increment' StatsdData object.
         *
         * @param string|array $key The metric(s) to increment.
-        * @param float|1      $sampleRate The rate (0-1) for sampling.
         *
         * @return array
         */
@@ -66,7 +65,6 @@ class NullStatsdDataFactory implements IBufferingStatsdDataFactory {
         *
         *
         * @param string|array $key The metric(s) to decrement.
-        * @param float|1      $sampleRate The rate (0-1) for sampling.
         *
         * @return mixed
         */
index 526f120..4db2b60 100644 (file)
@@ -47,7 +47,7 @@ class SamplingStatsdClient extends StatsdClient {
         * Sets sampling rate for all items in $data.
         * The sample rate specified in a StatsdData entity overrides the sample rate specified here.
         *
-        * {@inheritDoc}
+        * @inheritDoc
         */
        public function appendSampleRate( $data, $sampleRate = 1 ) {
                $samplingRates = $this->samplingRates;
@@ -147,7 +147,7 @@ class SamplingStatsdClient extends StatsdClient {
        }
 
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        protected function throwException( Exception $exception ) {
                if ( !$this->getFailSilently() ) {
index 22e5b45..00d3bd3 100644 (file)
@@ -60,7 +60,7 @@ class LogEventsList extends ContextSource {
         *
         * @param IContextSource|Skin $context Context to use; formerly it was
         *   a Skin object. Use of Skin is deprecated.
-        * @param LinkRenderer|null $linkRenderer, previously unused
+        * @param LinkRenderer|null $linkRenderer previously unused
         * @param int $flags Can be a combination of self::NO_ACTION_LINK,
         *   self::NO_EXTRA_USER_LINKS or self::USE_CHECKBOXES.
         */
@@ -569,7 +569,7 @@ class LogEventsList extends ContextSource {
        /**
         * Show log extract. Either with text and a box (set $msgKey) or without (don't set $msgKey)
         *
-        * @param OutputPage|string $out By-reference
+        * @param OutputPage|string &$out
         * @param string|array $types Log types to show
         * @param string|Title $page The page title to show log entries for
         * @param string $user The user who made the log entries
index ec97b50..a085e3e 100644 (file)
@@ -287,7 +287,7 @@ class LogPage {
         * @param string $type
         * @param Language|null $lang
         * @param Title $title
-        * @param array $params
+        * @param array &$params
         * @return string
         */
        protected static function getTitleLink( $type, $lang, $title, &$params ) {
index 1f8489f..cb07fd5 100644 (file)
@@ -102,7 +102,7 @@ class UserMailer {
         * @param MailAddress $from Sender's email
         * @param string $subject Email's subject.
         * @param string $body Email's text or Array of two strings to be the text and html bodies
-        * @param array $options:
+        * @param array $options Keys:
         *     'replyTo' MailAddress
         *     'contentType' string default 'text/plain; charset=UTF-8'
         *     'headers' array Extra headers to set
@@ -196,7 +196,7 @@ class UserMailer {
         * @param MailAddress $from Sender's email
         * @param string $subject Email's subject.
         * @param string $body Email's text or Array of two strings to be the text and html bodies
-        * @param array $options:
+        * @param array $options Keys:
         *     'replyTo' MailAddress
         *     'contentType' string default 'text/plain; charset=UTF-8'
         *     'headers' array Extra headers to set
index 0f0b074..ac39e6f 100644 (file)
@@ -88,7 +88,7 @@ class BitmapHandler extends TransformationalImageHandler {
 
        /**
         * @param File $image
-        * @param array $params
+        * @param array &$params
         * @return bool
         */
        function normaliseParams( $image, &$params ) {
@@ -129,7 +129,7 @@ class BitmapHandler extends TransformationalImageHandler {
         * @param File $image File associated with this thumbnail
         * @param array $params Array with scaler params
         *
-        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        * @return MediaTransformError|bool Error object if error occurred, false (=no error) otherwise
         */
        protected function transformImageMagick( $image, $params ) {
                # use ImageMagick
@@ -272,7 +272,7 @@ class BitmapHandler extends TransformationalImageHandler {
         * @param File $image File associated with this thumbnail
         * @param array $params Array with scaler params
         *
-        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        * @return MediaTransformError Error|bool object if error occurred, false (=no error) otherwise
         */
        protected function transformImageMagickExt( $image, $params ) {
                global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
@@ -367,7 +367,7 @@ class BitmapHandler extends TransformationalImageHandler {
         * @param File $image File associated with this thumbnail
         * @param array $params Array with scaler params
         *
-        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        * @return MediaTransformError Error|bool object if error occurred, false (=no error) otherwise
         */
        protected function transformCustom( $image, $params ) {
                # Use a custom convert command
@@ -399,7 +399,7 @@ class BitmapHandler extends TransformationalImageHandler {
         * @param File $image File associated with this thumbnail
         * @param array $params Array with scaler params
         *
-        * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
+        * @return MediaTransformError|bool Error object if error occurred, false (=no error) otherwise
         */
        protected function transformGd( $image, $params ) {
                # Use PHP's builtin GD library functions.
index 56b20ac..3ec8772 100644 (file)
@@ -35,7 +35,7 @@ class BitmapHandler_ClientOnly extends BitmapHandler {
 
        /**
         * @param File $image
-        * @param array $params
+        * @param array &$params
         * @return bool
         */
        function normaliseParams( $image, &$params ) {
index 69982c2..6cac126 100644 (file)
@@ -1675,7 +1675,7 @@ class FormatMetadata extends ContextSource {
         *
         * @param File $file File to use
         * @param array $extendedMetadata
-        * @param int $maxCacheTime Hook handlers might use this parameter to override cache time
+        * @param int &$maxCacheTime Hook handlers might use this parameter to override cache time
         *
         * @return array [<property name> => ['value' => <value>]], or [] on error
         * @since 1.23
@@ -1772,7 +1772,7 @@ class FormatMetadata extends ContextSource {
        /**
         * Takes an array returned by the getExtendedMetadata* functions,
         * and resolves multi-language values in it.
-        * @param array $metadata
+        * @param array &$metadata
         * @since 1.23
         */
        protected function resolveMultilangMetadata( &$metadata ) {
@@ -1789,7 +1789,7 @@ class FormatMetadata extends ContextSource {
        /**
         * Takes an array returned by the getExtendedMetadata* functions,
         * and turns all fields into single-valued ones by dropping extra values.
-        * @param array $metadata
+        * @param array &$metadata
         * @since 1.25
         */
        protected function discardMultipleValues( &$metadata ) {
@@ -1810,7 +1810,7 @@ class FormatMetadata extends ContextSource {
 
        /**
         * Makes sure the given array is a valid API response fragment
-        * @param array $arr
+        * @param array &$arr
         */
        protected function sanitizeArrayForAPI( &$arr ) {
                if ( !is_array( $arr ) ) {
index 158c0dc..1eefddb 100644 (file)
@@ -80,7 +80,7 @@ abstract class ImageHandler extends MediaHandler {
 
        /**
         * @param File $image
-        * @param array $params
+        * @param array &$params
         * @return bool
         */
        function normaliseParams( $image, &$params ) {
@@ -152,8 +152,8 @@ abstract class ImageHandler extends MediaHandler {
        /**
         * Validate thumbnail parameters and fill in the correct height
         *
-        * @param int $width Specified width (input/output)
-        * @param int $height Height (output only)
+        * @param int &$width Specified width (input/output)
+        * @param int &$height Height (output only)
         * @param int $srcWidth Width of the source image
         * @param int $srcHeight Height of the source image
         * @param string $mimeType Unused
index 29f0d7c..287c198 100644 (file)
@@ -175,7 +175,7 @@ class JpegHandler extends ExifBitmapHandler {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         */
        protected function transformImageMagick( $image, $params ) {
                global $wgUseTinyRGBForJPGThumbnails;
index 76c979e..aa7c62b 100644 (file)
@@ -85,7 +85,7 @@ abstract class MediaHandler {
         * Should be idempotent.
         * Returns false if the parameters are unacceptable and the transform should fail
         * @param File $image
-        * @param array $params
+        * @param array &$params
         */
        abstract function normaliseParams( $image, &$params );
 
@@ -304,8 +304,10 @@ abstract class MediaHandler {
        }
 
        /**
-       * @deprecated since 1.30, use MediaHandler::getContentHeaders instead
-       */
+        * @deprecated since 1.30, use MediaHandler::getContentHeaders instead
+        * @param array $metadata
+        * @return array
+        */
        public function getStreamHeaders( $metadata ) {
                wfDeprecated( __METHOD__, '1.30' );
                return $this->getContentHeaders( $metadata );
@@ -712,7 +714,7 @@ abstract class MediaHandler {
         *
         * @see LocalFile::purgeThumbnails
         *
-        * @param array $files
+        * @param array &$files
         * @param array $options Purge options. Currently will always be
         *  an array with a single key 'forThumbRefresh' set to true.
         */
@@ -872,7 +874,7 @@ abstract class MediaHandler {
         * @param Array $pagesByDimensions
         * @return String
         * @since 1.30
-       */
+        */
        public static function getPageRangesByDimensions( $pagesByDimensions ) {
                $pageRangesByDimensions = [];
 
@@ -913,11 +915,11 @@ abstract class MediaHandler {
        }
 
        /**
-       * Get useful response headers for GET/HEAD requests for a file with the given metadata
-       * @param $metadata Array Contains this handler's unserialized getMetadata() for a file
-       * @return Array
-       * @since 1.30
-       */
+        * Get useful response headers for GET/HEAD requests for a file with the given metadata
+        * @param array $metadata Contains this handler's unserialized getMetadata() for a file
+        * @return array
+        * @since 1.30
+        */
        public function getContentHeaders( $metadata ) {
                return [];
        }
index 0cea6d8..bd78b49 100644 (file)
@@ -126,7 +126,7 @@ class SvgHandler extends ImageHandler {
 
        /**
         * @param File $image
-        * @param array $params
+        * @param array &$params
         * @return bool
         */
        function normaliseParams( $image, &$params ) {
@@ -205,7 +205,17 @@ class SvgHandler extends ImageHandler {
                // https://git.gnome.org/browse/librsvg/commit/?id=f01aded72c38f0e18bc7ff67dee800e380251c8e
                $tmpDir = wfTempDir() . '/svg_' . wfRandomString( 24 );
                $lnPath = "$tmpDir/" . basename( $srcPath );
-               $ok = mkdir( $tmpDir, 0771 ) && symlink( $srcPath, $lnPath );
+               $ok = mkdir( $tmpDir, 0771 );
+               if ( !$ok ) {
+                       wfDebugLog( 'thumbnail',
+                               sprintf( 'Thumbnail failed on %s: could not create temporary directory %s',
+                                       wfHostname(), $tmpDir ) );
+                       return new MediaTransformError( 'thumbnail_error',
+                               $params['width'], $params['height'],
+                               wfMessage( 'thumbnail-temp-create' )->text()
+                       );
+               }
+               $ok = symlink( $srcPath, $lnPath );
                /** @noinspection PhpUnusedLocalVariableInspection */
                $cleaner = new ScopedCallback( function () use ( $tmpDir, $lnPath ) {
                        MediaWiki\suppressWarnings();
index 742a5b7..32208cc 100644 (file)
@@ -36,7 +36,7 @@ use MediaWiki\MediaWikiServices;
 abstract class TransformationalImageHandler extends ImageHandler {
        /**
         * @param File $image
-        * @param array $params Transform parameters. Entries with the keys 'width'
+        * @param array &$params Transform parameters. Entries with the keys 'width'
         * and 'height' are the respective screen width and height, while the keys
         * 'physicalWidth' and 'physicalHeight' indicate the thumbnail dimensions.
         * @return bool
@@ -588,7 +588,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
         * Runs the 'BitmapHandlerCheckImageArea' hook.
         *
         * @param File $file
-        * @param array $params
+        * @param array &$params
         * @return bool
         * @since 1.25
         */
index e2c2d2d..3e4731a 100644 (file)
@@ -86,7 +86,7 @@ class WebPHandler extends BitmapHandler {
        /**
         * Extracts the image size and WebP type from a file
         *
-        * @param string $chunks Chunks as extracted by RiffExtractor
+        * @param string $filename
         * @return array|bool Header data array with entries 'compression', 'width' and 'height',
         * where 'compression' can be 'lossy', 'lossless', 'animated' or 'unknown'. False if
         * file is not a valid WebP file.
@@ -118,6 +118,7 @@ class WebPHandler extends BitmapHandler {
        /**
         * Extracts the image size and WebP type from a file based on the chunk list
         * @param array $chunks Chunks as extracted by RiffExtractor
+        * @param string $filename
         * @return array Header data array with entries 'compression', 'width' and 'height', where
         * 'compression' can be 'lossy', 'lossless', 'animated' or 'unknown'
         */
@@ -245,7 +246,7 @@ class WebPHandler extends BitmapHandler {
        }
 
        /**
-        * @param $file
+        * @param File $file
         * @return bool True, not all browsers support WebP
         */
        public function mustRender( $file ) {
@@ -253,7 +254,7 @@ class WebPHandler extends BitmapHandler {
        }
 
        /**
-        * @param $file
+        * @param File $file
         * @return bool False if we are unable to render this image
         */
        public function canRender( $file ) {
@@ -286,9 +287,9 @@ class WebPHandler extends BitmapHandler {
        /**
         * Render files as PNG
         *
-        * @param $ext
-        * @param $mime
-        * @param $params
+        * @param string $ext
+        * @param string $mime
+        * @param array|null $params
         * @return array
         */
        public function getThumbType( $ext, $mime, $params = null ) {
index 70795ec..3cce530 100644 (file)
@@ -672,7 +672,7 @@ class SqlBagOStuff extends BagOStuff {
         * On typical message and page data, this can provide a 3X decrease
         * in storage requirements.
         *
-        * @param mixed $data
+        * @param mixed &$data
         * @return string
         */
        protected function serialize( &$data ) {
index e2cf2cf..7311f71 100644 (file)
@@ -1180,7 +1180,7 @@ class Article implements Page {
                $key = $cache->makeKey( 'page-recent-delete', md5( $title->getPrefixedText() ) );
                $loggedIn = $this->getContext()->getUser()->isLoggedIn();
                if ( $loggedIn || $cache->get( $key ) ) {
-                       $logTypes = [ 'delete', 'move' ];
+                       $logTypes = [ 'delete', 'move', 'protect' ];
 
                        $dbr = wfGetDB( DB_REPLICA );
 
@@ -2580,7 +2580,7 @@ class Article implements Page {
        /**
         * @param array $limit
         * @param array $expiry
-        * @param bool $cascade
+        * @param bool &$cascade
         * @param string $reason
         * @param User $user
         * @return Status
@@ -2594,7 +2594,7 @@ class Article implements Page {
        /**
         * @param array $limit
         * @param string $reason
-        * @param int $cascade
+        * @param int &$cascade
         * @param array $expiry
         * @return bool
         */
@@ -2615,7 +2615,7 @@ class Article implements Page {
         * @param bool $suppress
         * @param int $u1 Unused
         * @param bool $u2 Unused
-        * @param string $error
+        * @param string &$error
         * @return bool
         */
        public function doDeleteArticle(
@@ -2629,7 +2629,7 @@ class Article implements Page {
         * @param string $summary
         * @param string $token
         * @param bool $bot
-        * @param array $resultDetails
+        * @param array &$resultDetails
         * @param User|null $user
         * @return array
         */
@@ -2642,7 +2642,7 @@ class Article implements Page {
         * @param string $fromP
         * @param string $summary
         * @param bool $bot
-        * @param array $resultDetails
+        * @param array &$resultDetails
         * @param User|null $guser
         * @return array
         */
@@ -2652,7 +2652,7 @@ class Article implements Page {
        }
 
        /**
-        * @param bool $hasHistory
+        * @param bool &$hasHistory
         * @return mixed
         */
        public function generateReason( &$hasHistory ) {
index b870831..0e3eaa5 100644 (file)
@@ -621,8 +621,8 @@ EOT
        /**
         * Make the text under the image to say what size preview
         *
-        * @param $params array parameters for thumbnail
-        * @param $sizeLinkBigImagePreview HTML for the current size
+        * @param array $params parameters for thumbnail
+        * @param string $sizeLinkBigImagePreview HTML for the current size
         * @return string HTML output
         */
        private function getThumbPrevText( $params, $sizeLinkBigImagePreview ) {
index c05ba45..e60f103 100644 (file)
@@ -383,11 +383,12 @@ class WikiPage implements Page, IDBAccessObject {
                if ( is_int( $from ) ) {
                        list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
                        $data = $this->pageDataFromTitle( wfGetDB( $index ), $this->mTitle, $opts );
+                       $loadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
 
                        if ( !$data
                                && $index == DB_REPLICA
-                               && wfGetLB()->getServerCount() > 1
-                               && wfGetLB()->hasOrMadeRecentMasterChanges()
+                               && $loadBalancer->getServerCount() > 1
+                               && $loadBalancer->hasOrMadeRecentMasterChanges()
                        ) {
                                $from = self::READ_LATEST;
                                list( $index, $opts ) = DBAccessObjectUtils::getDBOptions( $from );
@@ -1046,9 +1047,9 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @since 1.19
         * @param ParserOptions $parserOptions ParserOptions to use for the parse operation
-        * @param null|int      $oldid Revision ID to get the text from, passing null or 0 will
-        *                             get the current revision (default value)
-        * @param bool          $forceParse Force reindexing, regardless of cache settings
+        * @param null|int $oldid Revision ID to get the text from, passing null or 0 will
+        *   get the current revision (default value)
+        * @param bool $forceParse Force reindexing, regardless of cache settings
         * @return bool|ParserOutput ParserOutput or false if the revision was not found
         */
        public function getParserOutput(
@@ -3000,7 +3001,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param string $token Rollback token.
         * @param bool $bot If true, mark all reverted edits as bot.
         *
-        * @param array $resultDetails Array contains result-specific array of additional values
+        * @param array &$resultDetails Array contains result-specific array of additional values
         *    'alreadyrolled' : 'current' (rev)
         *    success        : 'summary' (str), 'current' (rev), 'target' (rev)
         *
@@ -3052,7 +3053,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param string $summary Custom summary. Set to default summary if empty.
         * @param bool $bot If true, mark all reverted edits as bot.
         *
-        * @param array $resultDetails Contains result-specific array of additional values
+        * @param array &$resultDetails Contains result-specific array of additional values
         * @param User $guser The user performing the rollback
         * @param array|null $tags Change tags to apply to the rollback
         * Callers are responsible for permission checks
@@ -3632,7 +3633,7 @@ class WikiPage implements Page, IDBAccessObject {
                return $this->getTitle()->getCanonicalURL();
        }
 
-       /*
+       /**
         * @param WANObjectCache $cache
         * @return string[]
         * @since 1.28
index d2a0a1a..bc5182c 100644 (file)
@@ -264,7 +264,7 @@ class LinkHolderArray {
        /**
         * Replace <!--LINK--> link placeholders with actual links, in the buffer
         *
-        * @param string $text
+        * @param string &$text
         */
        public function replace( &$text ) {
                $this->replaceInternal( $text );
@@ -273,7 +273,7 @@ class LinkHolderArray {
 
        /**
         * Replace internal links
-        * @param string $text
+        * @param string &$text
         */
        protected function replaceInternal( &$text ) {
                if ( !$this->internals ) {
@@ -416,7 +416,7 @@ class LinkHolderArray {
 
        /**
         * Replace interwiki links
-        * @param string $text
+        * @param string &$text
         */
        protected function replaceInterwiki( &$text ) {
                if ( empty( $this->interwikis ) ) {
@@ -444,7 +444,7 @@ class LinkHolderArray {
 
        /**
         * Modify $this->internals and $colours according to language variant linking rules
-        * @param array $colours
+        * @param array &$colours
         */
        protected function doVariants( &$colours ) {
                global $wgContLang;
index 88439db..3261002 100644 (file)
@@ -972,7 +972,7 @@ class Parser {
         *
         * @param array $elements List of element names. Comments are always extracted.
         * @param string $text Source text string.
-        * @param array $matches Out parameter, Array: extracted tags
+        * @param array &$matches Out parameter, Array: extracted tags
         * @param string|null $uniq_prefix
         * @return string Stripped text
         * @since 1.26 The uniq_prefix argument is deprecated.
@@ -2103,7 +2103,7 @@ class Parser {
 
        /**
         * Process [[ ]] wikilinks (RIL)
-        * @param string $s
+        * @param string &$s
         * @throws MWException
         * @return LinkHolderArray
         *
@@ -3411,7 +3411,7 @@ class Parser {
                # string or an array containing the string and any flags. This mungs
                # things around to match what this method should return.
                if ( !is_array( $result ) ) {
-                       $result =[
+                       $result = [
                                'found' => true,
                                'text' => $result,
                        ];
@@ -4536,7 +4536,7 @@ class Parser {
         * Do not reuse this parser instance after calling getUserSig(),
         * as it may have changed if it's the $wgParser.
         *
-        * @param User $user
+        * @param User &$user
         * @param string|bool $nickname Nickname to use or false to use user's default nickname
         * @param bool|null $fancySig whether the nicknname is the complete signature
         *    or null to use default value
@@ -4897,7 +4897,7 @@ class Parser {
         * Replace "<!--LINK-->" link placeholders with actual links, in the buffer
         * Placeholders created in Linker::link()
         *
-        * @param string $text
+        * @param string &$text
         * @param int $options
         */
        public function replaceLinkHolders( &$text, $options = 0 ) {
@@ -5406,7 +5406,7 @@ class Parser {
         * Callback from the Sanitizer for expanding items found in HTML attribute
         * values, so they can be safely tested and escaped.
         *
-        * @param string $text
+        * @param string &$text
         * @param bool|PPFrame $frame
         * @return string
         */
index 73a9927..c7146a1 100644 (file)
@@ -761,7 +761,7 @@ class ParserOptions {
         * is it allowed in the specific case of parsing this page.
         * @see self::getAllowUnsafeRawHtml()
         * @since 1.29
-        * @param bool|null Value to set or null to get current value
+        * @param bool|null $x Value to set or null to get current value
         * @return bool Current value for allowUnsafeRawHtml
         */
        public function setAllowUnsafeRawHtml( $x ) {
@@ -1062,11 +1062,13 @@ class ParserOptions {
                                'speculativeRevIdCallback' => null,
                        ];
 
+                       // @codingStandardsIgnoreStart Squiz.WhiteSpace.OperatorSpacing.NoSpaceAfterAmp
                        Hooks::run( 'ParserOptionsRegister', [
                                &self::$defaults,
                                &self::$inCacheKey,
                                &self::$lazyOptions,
                        ] );
+                       // @codingStandardsIgnoreEnd
 
                        ksort( self::$inCacheKey );
                }
index 3c750ad..2588962 100644 (file)
@@ -625,7 +625,7 @@ class Preprocessor_DOM extends Preprocessor {
                                $curLen = strlen( $curChar );
                                $count = ( $curLen > 1 ) ?
                                        # allow the final character to repeat
-                                       strspn( $text, $curChar[$curLen-1], $i+1 ) + 1 :
+                                       strspn( $text, $curChar[$curLen - 1], $i + 1 ) + 1 :
                                        strspn( $text, $curChar, $i );
 
                                # we need to add to stack only if opening brace count is enough for one of the rules
index 25d253f..9ea8fa3 100644 (file)
@@ -569,7 +569,7 @@ class Preprocessor_Hash extends Preprocessor {
                                $curLen = strlen( $curChar );
                                $count = ( $curLen > 1 ) ?
                                        # allow the final character to repeat
-                                       strspn( $text, $curChar[$curLen-1], $i+1 ) + 1 :
+                                       strspn( $text, $curChar[$curLen - 1], $i + 1 ) + 1 :
                                        strspn( $text, $curChar, $i );
 
                                # we need to add to stack only if opening brace count is enough for one of the rules
index 32daeed..d48f744 100644 (file)
@@ -40,5 +40,6 @@ class ProfileSection {
         * @param string $name Name of the function to profile
         */
        public function __construct( $name ) {
+               wfDeprecated( __CLASS__, '1.25' );
        }
 }
index 252a227..4da7976 100644 (file)
@@ -164,7 +164,7 @@ abstract class Profiler {
        abstract public function scopedProfileIn( $section );
 
        /**
-        * @param SectionProfileCallback $section
+        * @param SectionProfileCallback &$section
         */
        public function scopedProfileOut( SectionProfileCallback &$section = null ) {
                $section = null;
index fdfb24d..57bd01f 100644 (file)
@@ -66,7 +66,7 @@ class SectionProfiler {
        }
 
        /**
-        * @param ScopedCallback $section
+        * @param ScopedCallback &$section
         */
        public function scopedProfileOut( ScopedCallback &$section ) {
                $section = null;
@@ -298,7 +298,7 @@ class SectionProfiler {
                        /* Find all items under this entry */
                        $level = $stack[$max][1];
                        $working = [];
-                       for ( $i = $max -1; $i >= 0; $i-- ) {
+                       for ( $i = $max - 1; $i >= 0; $i-- ) {
                                if ( $stack[$i][1] > $level ) {
                                        $working[] = $stack[$i];
                                } else {
@@ -439,7 +439,7 @@ class SectionProfiler {
        protected function calltreeCount( $stack, $start ) {
                $level = $stack[$start][1];
                $count = 0;
-               for ( $i = $start -1; $i >= 0 && $stack[$i][1] > $level; $i-- ) {
+               for ( $i = $start - 1; $i >= 0 && $stack[$i][1] > $level; $i-- ) {
                        $count ++;
                }
                return $count;
index 2f29200..c58bb00 100644 (file)
@@ -79,6 +79,15 @@ class ResourceLoader implements LoggerAwareInterface {
         */
        protected $errors = [];
 
+       /**
+        * List of extra HTTP response headers provided by loaded modules.
+        *
+        * Populated by makeModuleResponse().
+        *
+        * @var array
+        */
+       protected $extraHeaders = [];
+
        /**
         * @var MessageBlobStore
         */
@@ -646,7 +655,7 @@ class ResourceLoader implements LoggerAwareInterface {
         *
         * @since 1.26
         * @param ResourceLoaderContext $context
-        * @param string[] $modules List of known module names
+        * @param string[] $moduleNames List of known module names
         * @return string Hash
         */
        public function getCombinedVersion( ResourceLoaderContext $context, array $moduleNames ) {
@@ -794,7 +803,7 @@ class ResourceLoader implements LoggerAwareInterface {
                        }
                }
 
-               $this->sendResponseHeaders( $context, $etag, (bool)$this->errors );
+               $this->sendResponseHeaders( $context, $etag, (bool)$this->errors, $this->extraHeaders );
 
                // Remove the output buffer and output the response
                ob_end_clean();
@@ -827,9 +836,12 @@ class ResourceLoader implements LoggerAwareInterface {
         * @param ResourceLoaderContext $context
         * @param string $etag ETag header value
         * @param bool $errors Whether there are errors in the response
+        * @param string[] $extra Array of extra HTTP response headers
         * @return void
         */
-       protected function sendResponseHeaders( ResourceLoaderContext $context, $etag, $errors ) {
+       protected function sendResponseHeaders(
+               ResourceLoaderContext $context, $etag, $errors, array $extra = []
+       ) {
                \MediaWiki\HeaderCallback::warnIfHeadersSent();
                $rlMaxage = $this->config->get( 'ResourceLoaderMaxage' );
                // Use a short cache expiry so that updates propagate to clients quickly, if:
@@ -873,6 +885,9 @@ class ResourceLoader implements LoggerAwareInterface {
                        $exp = min( $maxage, $smaxage );
                        header( 'Expires: ' . wfTimestamp( TS_RFC2822, $exp + time() ) );
                }
+               foreach ( $extra as $header ) {
+                       header( $header );
+               }
        }
 
        /**
@@ -1008,6 +1023,9 @@ class ResourceLoader implements LoggerAwareInterface {
        /**
         * Generate code for a response.
         *
+        * Calling this method also populates the `errors` and `headers` members,
+        * later used by respond().
+        *
         * @param ResourceLoaderContext $context Context in which to generate a response
         * @param ResourceLoaderModule[] $modules List of module objects keyed by module name
         * @param string[] $missing List of requested module names that are unregistered (optional)
@@ -1052,6 +1070,10 @@ MESSAGE;
                                $implementKey = $name . '@' . $module->getVersionHash( $context );
                                $strContent = '';
 
+                               if ( isset( $content['headers'] ) ) {
+                                       $this->extraHeaders = array_merge( $this->extraHeaders, $content['headers'] );
+                               }
+
                                // Append output
                                switch ( $context->getOnly() ) {
                                        case 'scripts':
index f99114e..cbb0bec 100644 (file)
@@ -224,7 +224,7 @@ class ResourceLoaderContext implements MessageLocalizer {
         * @since 1.27
         * @param string|string[]|MessageSpecifier $key Message key, or array of keys,
         *   or a MessageSpecifier.
-        * @param mixed ...
+        * @param mixed $args,...
         * @return Message
         */
        public function msg( $key ) {
index 01476ed..bef34f9 100644 (file)
@@ -65,9 +65,9 @@ class ResourceLoaderJqueryMsgModule extends ResourceLoaderFileModule {
        }
 
        /**
-       * @param ResourceLoaderContext $context
-       * @return array
-       */
+        * @param ResourceLoaderContext $context
+        * @return array
+        */
        public function getScriptURLsForDebug( ResourceLoaderContext $context ) {
                // Bypass file module urls
                return ResourceLoaderModule::getScriptURLsForDebug( $context );
index 166f1ba..d16a4ff 100644 (file)
@@ -27,7 +27,7 @@
  */
 class ResourceLoaderMediaWikiUtilModule extends ResourceLoaderFileModule {
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function getScript( ResourceLoaderContext $context ) {
                return ResourceLoader::makeConfigSetScript(
@@ -38,14 +38,14 @@ class ResourceLoaderMediaWikiUtilModule extends ResourceLoaderFileModule {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function supportsURLLoading() {
                return false;
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        public function enableModuleContentVersion() {
                return true;
index 1608901..b3c1cd1 100644 (file)
@@ -586,6 +586,81 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
                $this->msgBlobs[$lang] = $blob;
        }
 
+       /**
+        * Get headers to send as part of a module web response.
+        *
+        * It is not supported to send headers through this method that are
+        * required to be unique or otherwise sent once in an HTTP response
+        * because clients may make batch requests for multiple modules (as
+        * is the default behaviour for ResourceLoader clients).
+        *
+        * For exclusive or aggregated headers, see ResourceLoader::sendResponseHeaders().
+        *
+        * @since 1.30
+        * @param ResourceLoaderContext $context
+        * @return string[] Array of HTTP response headers
+        */
+       final public function getHeaders( ResourceLoaderContext $context ) {
+               $headers = [];
+
+               $formattedLinks = [];
+               foreach ( $this->getPreloadLinks( $context ) as $url => $attribs ) {
+                       $link = "<{$url}>;rel=preload";
+                       foreach ( $attribs as $key => $val ) {
+                               $link .= ";{$key}={$val}";
+                       }
+                       $formattedLinks[] = $link;
+               }
+               if ( $formattedLinks ) {
+                       $headers[] = 'Link: ' . implode( ',', $formattedLinks );
+               }
+
+               return $headers;
+       }
+
+       /**
+        * Get a list of resources that web browsers may preload.
+        *
+        * Behaviour of rel=preload link is specified at <https://www.w3.org/TR/preload/>.
+        *
+        * Use case for ResourceLoader originally part of T164299.
+        *
+        * @par Example
+        * @code
+        *     protected function getPreloadLinks() {
+        *         return [
+        *             'https://example.org/script.js' => [ 'as' => 'script' ],
+        *             'https://example.org/image.png' => [ 'as' => 'image' ],
+        *         ];
+        *     }
+        * @encode
+        *
+        * @par Example using HiDPI image variants
+        * @code
+        *     protected function getPreloadLinks() {
+        *         return [
+        *             'https://example.org/logo.png' => [
+        *                 'as' => 'image',
+        *                 'media' => 'not all and (min-resolution: 2dppx)',
+        *             ],
+        *             'https://example.org/logo@2x.png' => [
+        *                 'as' => 'image',
+        *                 'media' => '(min-resolution: 2dppx)',
+        *             ],
+        *         ];
+        *     }
+        * @encode
+        *
+        * @see ResourceLoaderModule::getHeaders
+        * @since 1.30
+        * @param ResourceLoaderContext $context
+        * @return array Keyed by url, values must be an array containing
+        *  at least an 'as' key. Optionally a 'media' key as well.
+        */
+       protected function getPreloadLinks( ResourceLoaderContext $context ) {
+               return [];
+       }
+
        /**
         * Get module-specific LESS variables, if any.
         *
@@ -711,6 +786,11 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
                        $content['templates'] = $templates;
                }
 
+               $headers = $this->getHeaders( $context );
+               if ( $headers ) {
+                       $content['headers'] = $headers;
+               }
+
                $statTiming = microtime( true ) - $statStart;
                $statName = strtr( $this->getName(), '.', '_' );
                $stats->timing( "resourceloader_build.all", 1000 * $statTiming );
index 64a6aec..a2c58e6 100644 (file)
@@ -402,7 +402,7 @@ abstract class RevDelList extends RevisionListBase {
        /**
         * A hook for setVisibility(): do any necessary updates post-commit.
         * STUB
-        * @param array [id => ['oldBits' => $oldBits, 'newBits' => $newBits], ... ]
+        * @param array $visibilityChangeMap [id => ['oldBits' => $oldBits, 'newBits' => $newBits], ... ]
         * @return Status
         */
        public function doPostCommitUpdates( array $visibilityChangeMap ) {
index b834c15..4a807fb 100644 (file)
@@ -98,7 +98,7 @@ class RevisionDeleter {
         * @param int $field The bitmask describing the single option.
         * @param int $diff The xor of the old and new bitfields.
         * @param int $new The new bitfield
-        * @param array $arr The array to update.
+        * @param array &$arr The array to update.
         */
        protected static function checkItem( $desc, $field, $diff, $new, &$arr ) {
                if ( $diff & $field ) {
index 852e1d5..ff1e8cb 100644 (file)
@@ -17,7 +17,7 @@ class NullIndexField implements SearchIndexField {
        /**
         * Set global flag for this field.
         *
-        * @param int  $flag Bit flag to set/unset
+        * @param int $flag Bit flag to set/unset
         * @param bool $unset True if flag should be unset, false by default
         * @return $this
         */
@@ -26,7 +26,7 @@ class NullIndexField implements SearchIndexField {
 
        /**
         * Check if flag is set.
-        * @param $flag
+        * @param int $flag
         * @return int 0 if unset, !=0 if set
         */
        public function checkFlag( $flag ) {
@@ -44,7 +44,7 @@ class NullIndexField implements SearchIndexField {
        }
 
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        public function getEngineHints( SearchEngine $engine ) {
                return [];
index 70117db..7c2f0f2 100644 (file)
@@ -138,7 +138,7 @@ abstract class SearchEngine {
         * @return mixed the feature value or null if unset
         */
        public function getFeatureData( $feature ) {
-               if ( isset ( $this->features[$feature] ) ) {
+               if ( isset( $this->features[$feature] ) ) {
                        return $this->features[$feature];
                }
                return null;
@@ -566,6 +566,7 @@ abstract class SearchEngine {
        /**
         * Process completion search results.
         * Resolves the titles and rescores.
+        * @param string $search
         * @param SearchSuggestionSet $suggestions
         * @return SearchSuggestionSet
         */
@@ -727,7 +728,7 @@ abstract class SearchEngine {
         * Create a search field definition.
         * Specific search engines should override this method to create search fields.
         * @param string $name
-        * @param int    $type One of the types in SearchIndexField::INDEX_TYPE_*
+        * @param int $type One of the types in SearchIndexField::INDEX_TYPE_*
         * @return SearchIndexField
         * @since 1.28
         */
index 40cfe39..0e99ba9 100644 (file)
@@ -35,8 +35,8 @@ class SearchExactMatchRescorer {
         * to not be in the results or be lower down the list.
         * @param string $search the query
         * @param int[] $namespaces the namespaces
-        * @param int $limit the max number of results to return
         * @param string[] $srchres results
+        * @param int $limit the max number of results to return
         * @return string[] munged results
         */
        public function rescore( $search, $namespaces, $srchres, $limit ) {
index cebdb40..20462cf 100644 (file)
@@ -32,6 +32,7 @@ class SearchHighlighter {
        /**
         * @warning If you pass false to this constructor, then
         *  the caller is responsible for HTML escaping.
+        * @param bool $cleanupWikitext
         */
        function __construct( $cleanupWikitext = true ) {
                $this->mCleanWikitext = $cleanupWikitext;
@@ -291,8 +292,8 @@ class SearchHighlighter {
        /**
         * Split text into lines and add it to extracts array
         *
-        * @param array $extracts Index -> $line
-        * @param int $count
+        * @param array &$extracts Index -> $line
+        * @param int &$count
         * @param string $text
         */
        function splitAndAdd( &$extracts, &$count, $text ) {
@@ -326,8 +327,8 @@ class SearchHighlighter {
         * @param string $text
         * @param int $start
         * @param int $end
-        * @param int $posStart (out) actual start position
-        * @param int $posEnd (out) actual end position
+        * @param int &$posStart (out) actual start position
+        * @param int &$posEnd (out) actual end position
         * @return string
         */
        function extract( $text, $start, $end, &$posStart = null, &$posEnd = null ) {
@@ -397,10 +398,10 @@ class SearchHighlighter {
         *
         * @param string $pattern Regexp for matching lines
         * @param array $extracts Extracts to search
-        * @param int $linesleft Number of extracts to make
-        * @param int $contextchars Length of snippet
-        * @param array $out Map for highlighted snippets
-        * @param array $offsets Map of starting points of snippets
+        * @param int &$linesleft Number of extracts to make
+        * @param int &$contextchars Length of snippet
+        * @param array &$out Map for highlighted snippets
+        * @param array &$offsets Map of starting points of snippets
         * @protected
         */
        function process( $pattern, $extracts, &$linesleft, &$contextchars, &$out, &$offsets ) {
index a348d6d..6f3b207 100644 (file)
@@ -30,16 +30,19 @@ interface SearchIndexField {
         * This field is case-insensitive.
         */
        const FLAG_CASEFOLD = 1;
+
        /**
         * This field contains secondary information, which is
         * already present in other fields, but can be used for
         * scoring.
         */
        const FLAG_SCORING = 2;
+
        /**
         * This field does not need highlight handling.
         */
        const FLAG_NO_HIGHLIGHT = 4;
+
        /**
         * Do not index this field, just store it.
         */
@@ -51,20 +54,23 @@ interface SearchIndexField {
         * @return array|null Null means this field does not map to anything
         */
        public function getMapping( SearchEngine $engine );
+
        /**
         * Set global flag for this field.
         *
-        * @param int  $flag Bit flag to set/unset
+        * @param int $flag Bit flag to set/unset
         * @param bool $unset True if flag should be unset, false by default
         * @return $this
         */
        public function setFlag( $flag, $unset = false );
+
        /**
         * Check if flag is set.
-        * @param $flag
+        * @param int $flag
         * @return int 0 if unset, !=0 if set
         */
        public function checkFlag( $flag );
+
        /**
         * Merge two field definitions if possible.
         *
index 87d6344..a11dff9 100644 (file)
@@ -9,24 +9,28 @@
  * @since 1.28
  */
 abstract class SearchIndexFieldDefinition implements SearchIndexField {
+
        /**
         * Name of the field
         *
         * @var string
         */
        protected $name;
+
        /**
         * Type of the field, one of the constants above
         *
         * @var int
         */
        protected $type;
+
        /**
         * Bit flags for the field.
         *
         * @var int
         */
        protected $flags = 0;
+
        /**
         * Subfields
         * @var SearchIndexFieldDefinition[]
@@ -40,7 +44,7 @@ abstract class SearchIndexFieldDefinition implements SearchIndexField {
 
        /**
         * @param string $name Field name
-        * @param int    $type Index type
+        * @param int $type Index type
         */
        public function __construct( $name, $type ) {
                $this->name = $name;
@@ -66,7 +70,7 @@ abstract class SearchIndexFieldDefinition implements SearchIndexField {
        /**
         * Set global flag for this field.
         *
-        * @param int  $flag Bit flag to set/unset
+        * @param int $flag Bit flag to set/unset
         * @param bool $unset True if flag should be unset, false by default
         * @return $this
         */
@@ -81,7 +85,7 @@ abstract class SearchIndexFieldDefinition implements SearchIndexField {
 
        /**
         * Check if flag is set.
-        * @param $flag
+        * @param int $flag
         * @return int 0 if unset, !=0 if set
         */
        public function checkFlag( $flag ) {
@@ -141,7 +145,7 @@ abstract class SearchIndexFieldDefinition implements SearchIndexField {
        }
 
        /**
-        * {@inheritDoc}
+        * @inheritDoc
         */
        public function getEngineHints( SearchEngine $engine ) {
                return [];
index 2ea9605..77dcfe9 100644 (file)
@@ -218,7 +218,7 @@ class SearchMySQL extends SearchDatabase {
 
        /**
         * Add special conditions
-        * @param array $query
+        * @param array &$query
         * @since 1.18
         */
        protected function queryFeatures( &$query ) {
@@ -231,7 +231,7 @@ class SearchMySQL extends SearchDatabase {
 
        /**
         * Add namespace conditions
-        * @param array $query
+        * @param array &$query
         * @since 1.18 (changed)
         */
        function queryNamespaces( &$query ) {
@@ -245,7 +245,7 @@ class SearchMySQL extends SearchDatabase {
 
        /**
         * Add limit options
-        * @param array $query
+        * @param array &$query
         * @since 1.18
         */
        protected function limitResult( &$query ) {
index 50db84b..dc294c3 100644 (file)
@@ -65,7 +65,7 @@ class SearchResult {
        /**
         * Return a new SearchResult and initializes it with a title.
         *
-        * @param Title           $title
+        * @param Title $title
         * @param SearchResultSet $parentSet
         * @return SearchResult
         */
index 2c82c7d..3d4da42 100644 (file)
@@ -145,7 +145,7 @@ class SearchSqlite extends SearchDatabase {
                $searchChars = parent::legalSearchChars( $type );
                if ( $type === self::CHARS_ALL ) {
                        // " for phrase, * for wildcard
-                       $searchChars =  "\"*" . $searchChars;
+                       $searchChars = "\"*" . $searchChars;
                }
                return $searchChars;
        }
index 4e7c782..7f433db 100644 (file)
@@ -53,7 +53,7 @@ class SearchSuggestion {
        /**
         * Construct a new suggestion
         * @param float $score the suggestion score
-        * @param string $text|null the suggestion text
+        * @param string|null $text the suggestion text
         * @param Title|null $suggestedTitle the suggested title
         * @param int|null $suggestedTitleID the suggested title ID
         */
index 084ac05..b76f0ff 100644 (file)
@@ -145,7 +145,7 @@ class PHPSessionHandler implements \SessionHandlerInterface {
         * @private Use self::install().
         * @param SessionManager $manager
         * @param BagOStuff $store
-        * @param LoggerInterface $store
+        * @param LoggerInterface $logger
         */
        public function setManager(
                SessionManager $manager, BagOStuff $store, LoggerInterface $logger
index 3cf69b7..ba075e0 100644 (file)
@@ -387,7 +387,7 @@ abstract class SessionProvider implements SessionProviderInterface, LoggerAwareI
         * reset whatever token it does use here.
         *
         * @protected For use by \MediaWiki\Session\SessionManager only
-        * @param User $user;
+        * @param User $user
         */
        public function invalidateSessionsForUser( User $user ) {
        }
index 523e0cc..14d239d 100644 (file)
@@ -56,7 +56,7 @@ class Token {
         * be able to extract the timestamp.
         *
         * @param string $token
-        * @param int|null
+        * @return int|null
         */
        public static function getTimestamp( $token ) {
                $suffixLen = strlen( self::SUFFIX );
index 31e1590..a6e6339 100644 (file)
@@ -333,7 +333,7 @@ class Site implements Serializable {
         */
        public function getLinkPath() {
                $type = $this->getLinkPathType();
-               return $type === null ? null: $this->getPath( $type );
+               return $type === null ? null : $this->getPath( $type );
        }
 
        /**
index 42812e1..5e13d06 100644 (file)
@@ -191,7 +191,7 @@ class SiteImporter {
 
        /**
         * @param DOMElement $element
-        * @param $name
+        * @param string $name
         * @param string|null|bool $default
         *
         * @return null|string
index aad676f..8d5ce10 100644 (file)
@@ -29,7 +29,7 @@ abstract class BaseTemplate extends QuickTemplate {
         * Get a Message object with its context set
         *
         * @param string $name Message name
-        * @param ... $params Message params
+        * @param mixed $params,... Message params
         * @return Message
         */
        public function getMsg( $name /* ... */ ) {
@@ -201,13 +201,13 @@ abstract class BaseTemplate extends QuickTemplate {
                                ];
                                break;
                        case 'LANGUAGES':
-                               if ( $this->data['language_urls'] ) {
+                               if ( $this->data['language_urls'] !== false ) {
                                        $msgObj = $this->getMsg( 'otherlanguages' );
                                        $boxes[$boxName] = [
                                                'id' => 'p-lang',
                                                'header' => $msgObj->exists() ? $msgObj->text() : 'otherlanguages',
                                                'generated' => false,
-                                               'content' => $this->data['language_urls'],
+                                               'content' => $this->data['language_urls'] ?: [],
                                        ];
                                }
                                break;
index e0ceab5..d1be4bb 100644 (file)
@@ -62,11 +62,11 @@ abstract class QuickTemplate {
        }
 
        /**
-       * extends the value of data with name $name with the value $value
-       * @since 1.25
-       * @param string $name
-       * @param mixed $value
-       */
+        * extends the value of data with name $name with the value $value
+        * @since 1.25
+        * @param string $name
+        * @param mixed $value
+        */
        public function extend( $name, $value ) {
                if ( $this->haveData( $name ) ) {
                        $this->data[$name] = $this->data[$name] . $value;
@@ -92,14 +92,14 @@ abstract class QuickTemplate {
 
        /**
         * @param string $name
-        * @param mixed $value
+        * @param mixed &$value
         */
        public function setRef( $name, &$value ) {
                $this->data[$name] =& $value;
        }
 
        /**
-        * @param MediaWikiI18N $t
+        * @param MediaWikiI18N &$t
         */
        public function setTranslator( &$t ) {
                $this->translator = &$t;
index 849362a..e1d0034 100644 (file)
@@ -449,7 +449,7 @@ abstract class Skin extends ContextSource {
         * "<body>" tag, skins can override it if they have a need to add in any
         * body attributes or classes of their own.
         * @param OutputPage $out
-        * @param array $bodyAttrs
+        * @param array &$bodyAttrs
         */
        function addToBodyAttributes( $out, &$bodyAttrs ) {
                // does nothing by default
@@ -1215,7 +1215,7 @@ abstract class Skin extends ContextSource {
        /**
         * make sure we have some title to operate on
         *
-        * @param Title $title
+        * @param Title &$title
         * @param string $name
         */
        static function checkTitle( &$title, $name ) {
@@ -1286,7 +1286,7 @@ abstract class Skin extends ContextSource {
         *
         * This is just a wrapper around addToSidebarPlain() for backwards compatibility
         *
-        * @param array $bar
+        * @param array &$bar
         * @param string $message
         */
        public function addToSidebar( &$bar, $message ) {
@@ -1296,7 +1296,7 @@ abstract class Skin extends ContextSource {
        /**
         * Add content from plain text
         * @since 1.17
-        * @param array $bar
+        * @param array &$bar
         * @param string $text
         * @return array
         */
index fbc3022..500c2e9 100644 (file)
@@ -45,7 +45,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
         * @param AuthenticationRequest[] $requests
         * @param array $fieldInfo Field information array (union of all
         *    AuthenticationRequest::getFieldInfo() responses).
-        * @param array $formDescriptor HTMLForm descriptor. The special key 'weight' can be set to
+        * @param array &$formDescriptor HTMLForm descriptor. The special key 'weight' can be set to
         *    change the order of the fields.
         * @param string $action Authentication type (one of the AuthManager::ACTION_* constants)
         * @return bool
@@ -474,7 +474,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
        /**
         * Submit handler callback for HTMLForm
         * @private
-        * @param $data array Submitted data
+        * @param array $data Submitted data
         * @return Status
         */
        public function handleFormSubmit( $data ) {
@@ -598,7 +598,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
        /**
         * Adds a sequential tabindex starting from 1 to all form elements. This way the user can
         * use the tab key to traverse the form without having to step through all links and such.
-        * @param $formDescriptor
+        * @param array &$formDescriptor
         */
        protected function addTabIndex( &$formDescriptor ) {
                $i = 1;
@@ -709,7 +709,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
         * Sort the fields of a form descriptor by their 'weight' property. (Fields with higher weight
         * are shown closer to the bottom; weight defaults to 0. Negative weight is allowed.)
         * Keep order if weights are equal.
-        * @param array $formDescriptor
+        * @param array &$formDescriptor
         * @return array
         */
        protected static function sortFormDescriptorFields( array &$formDescriptor ) {
index 9d6fd5b..04d391b 100644 (file)
@@ -98,7 +98,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
 
        /**
         * Load basic request parameters for this Special page.
-        * @param $subPage
+        * @param string $subPage
         */
        private function loadRequestParameters( $subPage ) {
                if ( $this->mLoadedRequest ) {
@@ -1156,7 +1156,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
                        // Don't show a "create account" link if the user can't.
                        if ( $this->showCreateAccountLink() ) {
                                // link to the other action
-                               $linkTitle = $this->getTitleFor( $this->isSignup() ? 'Userlogin' :'CreateAccount' );
+                               $linkTitle = $this->getTitleFor( $this->isSignup() ? 'Userlogin' : 'CreateAccount' );
                                $linkq = $this->getReturnToQueryStringFragment();
                                // Pass any language selection on to the mode switch link
                                if ( $this->mLanguage ) {
@@ -1199,7 +1199,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
 
        /**
         * Adds fields provided via the deprecated UserLoginForm / UserCreateForm hooks
-        * @param $fieldDefinitions array
+        * @param array $fieldDefinitions
         * @param FakeAuthTemplate $template
         * @return array
         */
@@ -1247,6 +1247,7 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
        /**
         * Returns a string that can be appended to the URL (without encoding) to preserve the
         * return target. Does not include leading '?'/'&'.
+        * @return string
         */
        protected function getReturnToQueryStringFragment() {
                $returnto = '';
@@ -1339,7 +1340,8 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
        }
 
        /**
-        * @param array $formDescriptor
+        * @param array &$formDescriptor
+        * @param array $requests
         */
        protected function postProcessFormDescriptor( &$formDescriptor, $requests ) {
                // Pre-fill username (if not creating an account, T46775).
@@ -1395,6 +1397,11 @@ class FakeAuthTemplate extends BaseTemplate {
        /**
         * Extensions (AntiSpoof and TitleBlacklist) call this in response to
         * UserCreateForm hook to add checkboxes to the create account form.
+        * @param string $name
+        * @param string $value
+        * @param string $type
+        * @param string $msg
+        * @param string|bool $helptext
         */
        public function addInputItem( $name, $value, $type, $msg, $helptext = false ) {
                // use the same indexes as UserCreateForm just in case someone adds an item manually
@@ -1496,6 +1503,7 @@ class LoginForm extends SpecialPage {
 
        /**
         * @deprecated since 1.27 - call LoginHelper::getValidErrorMessages instead.
+        * @return array
         */
        public static function getValidErrorMessages() {
                return LoginHelper::getValidErrorMessages();
@@ -1503,6 +1511,8 @@ class LoginForm extends SpecialPage {
 
        /**
         * @deprecated since 1.27 - don't use LoginForm, use AuthManager instead
+        * @param string $username
+        * @return array|false
         */
        public static function incrementLoginThrottle( $username ) {
                wfDeprecated( __METHOD__, "1.27" );
@@ -1514,6 +1524,8 @@ class LoginForm extends SpecialPage {
 
        /**
         * @deprecated since 1.27 - don't use LoginForm, use AuthManager instead
+        * @param string $username
+        * @return bool|int
         */
        public static function incLoginThrottle( $username ) {
                wfDeprecated( __METHOD__, "1.27" );
@@ -1523,6 +1535,8 @@ class LoginForm extends SpecialPage {
 
        /**
         * @deprecated since 1.27 - don't use LoginForm, use AuthManager instead
+        * @param string $username
+        * @return void
         */
        public static function clearLoginThrottle( $username ) {
                wfDeprecated( __METHOD__, "1.27" );
@@ -1559,6 +1573,7 @@ class LoginForm extends SpecialPage {
 
        /**
         * @deprecated since 1.27 - don't use LoginForm, use AuthManager instead
+        * @return string
         */
        public static function getCreateaccountToken() {
                wfDeprecated( __METHOD__, '1.27' );
index 9b5d5f4..d3e22a0 100644 (file)
@@ -52,8 +52,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
 
                        return $redirect;
                } else {
-                       $class = static::class;
-                       throw new MWException( "RedirectSpecialPage $class doesn't redirect!" );
+                       $this->showNoRedirectPage();
                }
        }
 
@@ -106,6 +105,11 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
        public function personallyIdentifiableTarget() {
                return false;
        }
+
+       protected function showNoRedirectPage() {
+               $class = static::class;
+               throw new MWException( "RedirectSpecialPage $class doesn't redirect!" );
+       }
 }
 
 /**
index 8dcb30c..4433ddb 100644 (file)
@@ -501,8 +501,8 @@ class SpecialPageFactory {
         * Returns a title object if the page is redirected, false if there was no such special
         * page, and true if it was successful.
         *
-        * @param Title $title
-        * @param IContextSource $context
+        * @param Title &$title
+        * @param IContextSource &$context
         * @param bool $including Bool output is being captured for use in {{special:whatever}}
         * @param LinkRenderer|null $linkRenderer (since 1.28)
         *
index 04c04b2..66e4fbe 100644 (file)
@@ -233,7 +233,7 @@ class SpecialBlock extends FormSpecialPage {
        /**
         * If the user has already been blocked with similar settings, load that block
         * and change the defaults for the form fields to match the existing settings.
-        * @param array $fields HTMLForm descriptor array
+        * @param array &$fields HTMLForm descriptor array
         * @return bool Whether fields were altered (that is, whether the target is
         *     already blocked)
         */
index 9804e77..28cd0d1 100644 (file)
@@ -56,11 +56,64 @@ class SpecialDiff extends RedirectSpecialPage {
                        $this->mAddedRedirectParams['oldid'] = $parts[0];
                        $this->mAddedRedirectParams['diff'] = $parts[1];
                } else {
-                       // Wrong number of parameters, bail out
-                       $this->addHelpLink( 'Help:Diff' );
-                       throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
+                       return false;
                }
 
                return true;
        }
+
+       protected function showNoRedirectPage() {
+               $this->addHelpLink( 'Help:Diff' );
+               $this->setHeaders();
+               $this->outputHeader();
+               $this->showForm();
+       }
+
+       private function showForm() {
+               $form = HTMLForm::factory( 'ooui', [
+                       'oldid' => [
+                               'name' => 'oldid',
+                               'type' => 'int',
+                               'label-message' => 'diff-form-oldid',
+                       ],
+                       'diff' => [
+                               'name' => 'diff',
+                               'class' => 'HTMLTextField',
+                               'label-message' => 'diff-form-revid',
+                       ],
+               ], $this->getContext(), 'diff-form' );
+               $form->setSubmitTextMsg( 'diff-form-submit' );
+               $form->setSubmitCallback( [ $this, 'onFormSubmit' ] );
+               $form->show();
+       }
+
+       public function onFormSubmit( $formData ) {
+               $params = [];
+               if ( $formData['oldid'] ) {
+                       $params[] = $formData['oldid'];
+               }
+               if ( $formData['diff'] ) {
+                       $params[] = $formData['diff'];
+               }
+               $title = $this->getPageTitle( $params ? implode( '/', $params ) : null );
+               $url = $title->getFullUrlForRedirect();
+               $this->getOutput()->redirect( $url );
+       }
+
+       public function getDescription() {
+               // 'diff' message is in lowercase, using own message
+               return $this->msg( 'diff-form' )->text();
+       }
+
+       public function getName() {
+               return 'diff-form';
+       }
+
+       public function isListed() {
+               return true;
+       }
+
+       protected function getGroupName() {
+               return 'redirects';
+       }
 }
index ba14c66..d73ac19 100644 (file)
@@ -122,28 +122,33 @@ class DoubleRedirectsPage extends QueryPage {
                // That does save the bulk of the query cost, but now we need to
                // get a little more detail about each individual entry quickly
                // using the filter of reallyGetQueryInfo.
-               if ( $result && !isset( $result->b_namespace ) ) {
-                       $dbr = wfGetDB( DB_REPLICA );
-                       $qi = $this->reallyGetQueryInfo(
-                               $result->namespace,
-                               $result->title
-                       );
-                       $res = $dbr->select(
-                               $qi['tables'],
-                               $qi['fields'],
-                               $qi['conds'],
-                               __METHOD__
-                       );
-
-                       if ( $res ) {
-                               $result = $dbr->fetchObject( $res );
+               $deep = false;
+               if ( $result ) {
+                       if ( isset( $result->b_namespace ) ) {
+                               $deep = $result;
+                       } else {
+                               $dbr = wfGetDB( DB_REPLICA );
+                               $qi = $this->reallyGetQueryInfo(
+                                       $result->namespace,
+                                       $result->title
+                               );
+                               $res = $dbr->select(
+                                       $qi['tables'],
+                                       $qi['fields'],
+                                       $qi['conds'],
+                                       __METHOD__
+                               );
+
+                               if ( $res ) {
+                                       $deep = $dbr->fetchObject( $res ) ?: false;
+                               }
                        }
                }
 
                $titleA = Title::makeTitle( $result->namespace, $result->title );
 
                $linkRenderer = $this->getLinkRenderer();
-               if ( !$result ) {
+               if ( !$deep ) {
                        return '<del>' . $linkRenderer->makeLink( $titleA, null, [], [ 'redirect' => 'no' ] ) . '</del>';
                }
 
@@ -171,7 +176,7 @@ class DoubleRedirectsPage extends QueryPage {
                        [ 'redirect' => 'no' ]
                );
 
-               $titleB = Title::makeTitle( $result->b_namespace, $result->b_title );
+               $titleB = Title::makeTitle( $deep->b_namespace, $deep->b_title );
                $linkB = $linkRenderer->makeKnownLink(
                        $titleB,
                        null,
@@ -180,10 +185,10 @@ class DoubleRedirectsPage extends QueryPage {
                );
 
                $titleC = Title::makeTitle(
-                       $result->c_namespace,
-                       $result->c_title,
-                       $result->c_fragment,
-                       $result->c_interwiki
+                       $deep->c_namespace,
+                       $deep->c_title,
+                       $deep->c_fragment,
+                       $deep->c_interwiki
                );
                $linkC = $linkRenderer->makeKnownLink( $titleC, $titleC->getFullText() );
 
index d5c5528..8e6c446 100644 (file)
@@ -288,7 +288,7 @@ class SpecialExport extends SpecialPage {
                $formDescriptor += [
                        'wpDownload' => [
                                'type' => 'check',
-                               'name' =>'wpDownload',
+                               'name' => 'wpDownload',
                                'id' => 'wpDownload',
                                'default' => $request->wasPosted() ? $request->getCheck( 'wpDownload' ) : true,
                                'label-message' => 'export-download',
index 49caaa3..c18faa1 100644 (file)
@@ -35,7 +35,7 @@ class SpecialFilepath extends RedirectSpecialPage {
        /**
         * Implement by redirecting through Special:Redirect/file.
         *
-        * @param string|null $subpage
+        * @param string|null $par
         * @return Title
         */
        public function getRedirect( $par ) {
index 44e0db8..8d77091 100644 (file)
@@ -30,13 +30,15 @@ use Wikimedia\Rdbms\IDatabase;
  */
 class MediaStatisticsPage extends QueryPage {
        protected $totalCount = 0, $totalBytes = 0;
+
        /**
-       * @var integer $totalPerType Combined file size of all files in a section
-       */
+        * @var integer $totalPerType Combined file size of all files in a section
+        */
        protected $totalPerType = 0;
+
        /**
-       * @var integer $totalSize Combined file size of all files
-       */
+        * @var integer $totalSize Combined file size of all files
+        */
        protected $totalSize = 0;
 
        function __construct( $name = 'MediaStatistics' ) {
@@ -63,6 +65,7 @@ class MediaStatisticsPage extends QueryPage {
         * come out of querycache table is the order they went in. Which is hacky.
         * However, other special pages like Special:Deadendpages and
         * Special:BrokenRedirects also rely on this.
+        * @return array
         */
        public function getQueryInfo() {
                $dbr = wfGetDB( DB_REPLICA );
@@ -169,7 +172,7 @@ class MediaStatisticsPage extends QueryPage {
         *
         * @param string $mime mime type (e.g. image/jpeg)
         * @param int $count Number of images of this type
-        * @param int $totalBytes Total space for images of this type
+        * @param int $bytes Total space for images of this type
         */
        protected function outputTableRow( $mime, $count, $bytes ) {
                $mimeSearch = SpecialPage::getTitleFor( 'MIMEsearch', $mime );
@@ -197,7 +200,7 @@ class MediaStatisticsPage extends QueryPage {
                $row .= Html::rawElement(
                        'td',
                        // Make sure js sorts it in numeric order
-                       [ 'data-sort-value' =>  $bytes ],
+                       [ 'data-sort-value' => $bytes ],
                        $this->msg( 'mediastatistics-nbytes' )
                                ->numParams( $bytes )
                                ->sizeParams( $bytes )
@@ -251,6 +254,7 @@ class MediaStatisticsPage extends QueryPage {
         * Output the start of the table
         *
         * Including opening <table>, and first <tr> with column headers.
+        * @param string $mediaType
         */
        protected function outputTableStart( $mediaType ) {
                $this->getOutput()->addHTML(
index 83482f6..6a79714 100644 (file)
@@ -293,6 +293,19 @@ class SpecialNewpages extends IncludableSpecialPage {
                );
        }
 
+       /**
+        * @param stdClass $row Result row from recent changes
+        * @return Revision|bool
+        */
+       protected function revisionFromRcResult( stdClass $result ) {
+               return new Revision( [
+                       'comment' => $result->rc_comment,
+                       'deleted' => $result->rc_deleted,
+                       'user_text' => $result->rc_user_text,
+                       'user' => $result->rc_user,
+               ] );
+       }
+
        /**
         * Format a row, providing the timestamp, links to the page/history,
         * size, user links, and a comment
@@ -303,14 +316,9 @@ class SpecialNewpages extends IncludableSpecialPage {
        public function formatRow( $result ) {
                $title = Title::newFromRow( $result );
 
-               # Revision deletion works on revisions, so we should cast one
-               $row = [
-                       'comment' => $result->rc_comment,
-                       'deleted' => $result->rc_deleted,
-                       'user_text' => $result->rc_user_text,
-                       'user' => $result->rc_user,
-               ];
-               $rev = new Revision( $row );
+               // Revision deletion works on revisions,
+               // so cast our recent change row to a revision row.
+               $rev = $this->revisionFromRcResult( $result );
                $rev->setTitle( $title );
 
                $classes = [];
@@ -382,12 +390,6 @@ class SpecialNewpages extends IncludableSpecialPage {
                # Display the old title if the namespace/title has been changed
                $oldTitleText = '';
                $oldTitle = Title::makeTitle( $result->rc_namespace, $result->rc_title );
-               $ret = "{$time} {$dm}{$plink} {$hist} {$dm}{$length} {$dm}{$ulink} {$comment} "
-                       . "{$tagDisplay} {$oldTitleText}";
-
-               // Let extensions add data
-               Hooks::run( 'NewPagesLineEnding', [ $this, &$ret, $result, &$classes, &$attribs ] );
-               $attribs = wfArrayFilterByKey( $attribs, [ Sanitizer::class, 'isReservedDataAttribute' ] );
 
                if ( count( $classes ) ) {
                        $attribs['class'] = implode( ' ', $classes );
@@ -402,6 +404,13 @@ class SpecialNewpages extends IncludableSpecialPage {
                        );
                }
 
+               $ret = "{$time} {$dm}{$plink} {$hist} {$dm}{$length} {$dm}{$ulink} {$comment} "
+                       . "{$tagDisplay} {$oldTitleText}";
+
+               // Let extensions add data
+               Hooks::run( 'NewPagesLineEnding', [ $this, &$ret, $result, &$classes, &$attribs ] );
+               $attribs = wfArrayFilterByKey( $attribs, [ Sanitizer::class, 'isReservedDataAttribute' ] );
+
                return Html::rawElement( 'li', $attribs, $ret ) . "\n";
        }
 
@@ -485,7 +494,7 @@ class SpecialNewpages extends IncludableSpecialPage {
        }
 
        protected function feedItemDesc( $row ) {
-               $revision = Revision::newFromId( $row->rev_id );
+               $revision = $this->revisionFromRcResult( $row );
                if ( $revision ) {
                        // XXX: include content model/type in feed item?
                        return '<p>' . htmlspecialchars( $revision->getUserText() ) .
index 2943fd4..78a453e 100644 (file)
@@ -135,6 +135,16 @@ class SpecialPageLanguage extends FormSpecialPage {
                        return Status::newFatal( $ex->getMessageObject() );
                }
 
+               // Check permissions and make sure the user has permission to edit the page
+               $errors = $title->getUserPermissionsErrors( 'edit', $this->getUser() );
+
+               if ( $errors ) {
+                       $out = $this->getOutput();
+                       $wikitext = $out->formatPermissionsErrorMessage( $errors );
+                       // Hack to get our wikitext parsed
+                       return Status::newFatal( new RawMessage( '$1', [ $wikitext ] ) );
+               }
+
                // Url to redirect to after the operation
                $this->goToUrl = $title->getFullUrlForRedirect(
                        $title->isRedirect() ? [ 'redirect' => 'no' ] : []
index 2bd3ab7..b1772b7 100644 (file)
@@ -39,11 +39,44 @@ class SpecialPermanentLink extends RedirectSpecialPage {
        public function getRedirect( $subpage ) {
                $subpage = intval( $subpage );
                if ( $subpage === 0 ) {
-                       # throw an error page when no subpage was given
-                       throw new ErrorPageError( 'nopagetitle', 'nopagetext' );
+                       return false;
                }
                $this->mAddedRedirectParams['oldid'] = $subpage;
 
                return true;
        }
+
+       protected function showNoRedirectPage() {
+               $this->setHeaders();
+               $this->outputHeader();
+               $this->showForm();
+       }
+
+       private function showForm() {
+               $form = HTMLForm::factory( 'ooui', [
+                       'revid' => [
+                               'type' => 'int',
+                               'name' => 'revid',
+                               'label-message' => 'permanentlink-revid',
+                       ],
+               ], $this->getContext(), 'permanentlink' );
+               $form->setSubmitTextMsg( 'permanentlink-submit' );
+               $form->setSubmitCallback( [ $this, 'onFormSubmit' ] );
+               $form->show();
+       }
+
+       public function onFormSubmit( $formData ) {
+               $revid = $formData['revid'];
+               $title = $this->getPageTitle( $revid ?: null );
+               $url = $title->getFullUrlForRedirect();
+               $this->getOutput()->redirect( $url );
+       }
+
+       public function isListed() {
+               return true;
+       }
+
+       protected function getGroupName() {
+               return 'redirects';
+       }
 }
index 40b50ea..ba5a57e 100644 (file)
@@ -81,7 +81,7 @@ class SpecialPreferences extends SpecialPage {
                        $user = $this->getUser();
                }
 
-               $htmlForm = Preferences::getFormObject( $user, $this->getContext() );
+               $htmlForm = $this->getFormObject( $user, $this->getContext() );
                $htmlForm->setSubmitCallback( [ 'Preferences', 'tryUISubmit' ] );
                $sectionTitles = $htmlForm->getPreferenceSections();
 
@@ -117,6 +117,16 @@ class SpecialPreferences extends SpecialPage {
                $htmlForm->show();
        }
 
+       /**
+        * Get the preferences form to use.
+        * @param User $user The user.
+        * @param IContextSource $context The context.
+        * @return PreferencesForm|HtmlForm
+        */
+       protected function getFormObject( $user, IContextSource $context ) {
+               return Preferences::getFormObject( $user, $context );
+       }
+
        private function showResetForm() {
                if ( !$this->getUser()->isAllowed( 'editmyoptions' ) ) {
                        throw new PermissionsError( 'editmyoptions' );
index 6ef75e0..0b48d40 100644 (file)
@@ -255,7 +255,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function transformFilterDefinition( array $filterDefinition ) {
                if ( isset( $filterDefinition['showHideSuffix'] ) ) {
@@ -266,7 +266,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function registerFilters() {
                parent::registerFilters();
@@ -380,7 +380,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function buildQuery( &$tables, &$fields, &$conds,
                &$query_options, &$join_conds, FormOptions $opts
@@ -404,7 +404,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function doMainQuery( $tables, $fields, $conds, $query_options,
                $join_conds, FormOptions $opts
@@ -868,7 +868,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        /**
         * Filter $rows by categories set in $opts
         *
-        * @param ResultWrapper $rows Database rows
+        * @param ResultWrapper &$rows Database rows
         * @param FormOptions $opts
         */
        function filterByCategories( &$rows, FormOptions $opts ) {
index fee336e..e353f0c 100644 (file)
@@ -47,7 +47,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function doMainQuery( $tables, $select, $conds, $query_options,
                $join_conds, FormOptions $opts
index 4b0fa00..e1d4dd1 100644 (file)
@@ -73,28 +73,28 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                        'success' => 'revdelete-success',
                        'failure' => 'revdelete-failure',
                        'text' => 'revdelete-text-text',
-                       'selected'=> 'revdelete-selected-text',
+                       'selected' => 'revdelete-selected-text',
                ],
                'archive' => [
                        'check-label' => 'revdelete-hide-text',
                        'success' => 'revdelete-success',
                        'failure' => 'revdelete-failure',
                        'text' => 'revdelete-text-text',
-                       'selected'=> 'revdelete-selected-text',
+                       'selected' => 'revdelete-selected-text',
                ],
                'oldimage' => [
                        'check-label' => 'revdelete-hide-image',
                        'success' => 'revdelete-success',
                        'failure' => 'revdelete-failure',
                        'text' => 'revdelete-text-file',
-                       'selected'=> 'revdelete-selected-file',
+                       'selected' => 'revdelete-selected-file',
                ],
                'filearchive' => [
                        'check-label' => 'revdelete-hide-image',
                        'success' => 'revdelete-success',
                        'failure' => 'revdelete-failure',
                        'text' => 'revdelete-text-file',
-                       'selected'=> 'revdelete-selected-file',
+                       'selected' => 'revdelete-selected-file',
                ],
                'logging' => [
                        'check-label' => 'revdelete-hide-name',
index 8afea0b..85b4572 100644 (file)
@@ -555,7 +555,7 @@ class SpecialSearch extends SpecialPage {
         * Extract "power search" namespace settings from the request object,
         * returning a list of index numbers to search.
         *
-        * @param WebRequest $request
+        * @param WebRequest &$request
         * @return array
         */
        protected function powerSearch( &$request ) {
index 9e01d2d..1d76e36 100644 (file)
@@ -58,6 +58,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        'mediawiki.special.changeslist.visitedstatus',
                        'mediawiki.special.watchlist',
                ] );
+               $output->addModuleStyles( [ 'mediawiki.special.watchlist.styles' ] );
 
                $mode = SpecialEditWatchlist::getMode( $request, $subpage );
                if ( $mode !== false ) {
@@ -109,7 +110,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function transformFilterDefinition( array $filterDefinition ) {
                if ( isset( $filterDefinition['showHideSuffix'] ) ) {
@@ -120,7 +121,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function registerFilters() {
                parent::registerFilters();
@@ -250,7 +251,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function buildQuery( &$tables, &$fields, &$conds, &$query_options,
                &$join_conds, FormOptions $opts
@@ -267,7 +268,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        /**
-        * @inheritdoc
+        * @inheritDoc
         */
        protected function doMainQuery( $tables, $fields, $conds, $query_options,
                $join_conds, FormOptions $opts
@@ -431,6 +432,23 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $list = ChangesList::newFromContext( $this->getContext(), $this->filterGroups );
                $list->setWatchlistDivs();
                $list->initChangesListRows( $rows );
+               if ( $user->getOption( 'watchlistunwatchlinks' ) ) {
+                       $list->setChangeLinePrefixer( function ( RecentChange $rc, ChangesList $cl, $grouped ) {
+                               // Don't show unwatch link if the line is a grouped log entry using EnhancedChangesList,
+                               // since EnhancedChangesList groups log entries by performer rather than by target article
+                               if ( $rc->mAttribs['rc_type'] == RC_LOG && $cl instanceof EnhancedChangesList &&
+                                       $grouped ) {
+                                       return '';
+                               } else {
+                                       return $this->getLinkRenderer()
+                                                       ->makeKnownLink( $rc->getTitle(),
+                                                               $this->msg( 'watchlist-unwatch' )->text(), [
+                                                                       'class' => 'mw-unwatch-link',
+                                                                       'title' => $this->msg( 'tooltip-ca-unwatch' )->text()
+                                                               ], [ 'action' => 'unwatch' ] ) . '&#160;';
+                               }
+                       } );
+               }
                $dbr->dataSeek( $rows, 0 );
 
                if ( $this->getConfig()->get( 'RCShowWatchingUsers' )
@@ -596,7 +614,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                // default string representation, for example, and would confuse comparisons.
 
                // Misleadingly, the 'days' option supports hours too.
-               $days = array_map( 'strval', [ 1/24, 2/24, 6/24, 12/24, 1, 3, 7 ] );
+               $days = array_map( 'strval', [ 1 / 24, 2 / 24, 6 / 24, 12 / 24, 1, 3, 7 ] );
 
                $userWatchlistOption = (string)$this->getUser()->getOption( 'watchlistdays' );
                // add the user preference, if it isn't available already
index cfcbf65..a35a420 100644 (file)
@@ -75,7 +75,7 @@ class LoginHelper extends ContextSource {
                // Allow modification of redirect behavior
                Hooks::run( 'PostLoginRedirect', [ &$returnTo, &$returnToQuery, &$type ] );
 
-               $returnToTitle = Title::newFromText( $returnTo ) ?:  Title::newMainPage();
+               $returnToTitle = Title::newFromText( $returnTo ) ?: Title::newMainPage();
 
                if ( $wgSecureLogin && !$stickHTTPS ) {
                        $options = [ 'http' ];
index 45dced8..823b5da 100644 (file)
@@ -36,9 +36,9 @@ class ProtectedPagesPager extends TablePager {
        /**
         * @param SpecialProtectedpages $form
         * @param array $conds
-        * @param $type
-        * @param $level
-        * @param $namespace
+        * @param string $type
+        * @param string $level
+        * @param int $namespace
         * @param string $sizetype
         * @param int $size
         * @param bool $indefonly
index cdb9130..a68fe66 100644 (file)
@@ -270,7 +270,7 @@ class UsersPager extends AlphabeticPager {
        function getPageHeader() {
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
 
-               $groupOptions = [ $this->msg( 'group-all' )->text() =>  '' ];
+               $groupOptions = [ $this->msg( 'group-all' )->text() => '' ];
                foreach ( $this->getAllGroups() as $group => $groupText ) {
                        $groupOptions[ $groupText ] = $group;
                }
index 931eb7a..6493df8 100644 (file)
@@ -3,8 +3,9 @@
                <td>
                        <span class="mw-collapsible-toggle mw-collapsible-arrow mw-enhancedchanges-arrow mw-enhancedchanges-arrow-space"></span>
                </td>
+               <td class="mw-changeslist-line-prefix">{{{ prefix }}}</td>
                <td class="mw-enhanced-rc">{{{ collectedRcFlags }}}&#160;{{ timestamp }}&#160;</td>
-               <td>
+               <td class="mw-changeslist-line-inner">
                        {{# rev-deleted-event }}<span class="history-deleted">{{{ . }}}</span>{{/ rev-deleted-event }}
                        {{{ articleLink }}}{{{ languageDirMark }}}{{{ logText }}}
                        <span class="mw-changeslist-separator">. .</span>
        </tr>
        {{# lines }}
        <tr class="{{# classes }}{{ . }} {{/ classes }}"{{{ attribs }}}>
+               <td></td>
                <td></td>
                <td class="mw-enhanced-rc">{{{ recentChangesFlags }}}&#160;</td>
-               <td class="mw-enhanced-rc-nested">
+               <td class="mw-enhanced-rc-nested" data-target-page="{{ targetTitle }}">
                        {{# timestampLink }}
                        <span class="mw-enhanced-rc-time">{{{ . }}}</span>
                        {{/ timestampLink }}
index 4852ce5..b29a3af 100644 (file)
@@ -1203,7 +1203,7 @@ class BalanceStack implements IteratorAggregate {
                        $furthestBlock = null;
                        $furthestBlockIndex = -1;
                        $stackLength = $this->length();
-                       for ( $i = $index+1; $i < $stackLength; $i++ ) {
+                       for ( $i = $index + 1; $i < $stackLength; $i++ ) {
                                if ( $this->node( $i )->isA( BalanceSets::$specialSet ) ) {
                                        $furthestBlock = $this->node( $i );
                                        $furthestBlockIndex = $i;
@@ -1225,7 +1225,7 @@ class BalanceStack implements IteratorAggregate {
 
                        // Let the common ancestor be the element immediately above
                        // the formatting element in the stack of open elements.
-                       $ancestor = $this->node( $index-1 );
+                       $ancestor = $this->node( $index - 1 );
 
                        // Let a bookmark note the position of the formatting
                        // element in the list of active formatting elements
@@ -2116,7 +2116,7 @@ class Balancer {
                                return $this->insertToken( $token, $value, $attribs, $selfClose );
                        }
                        // "Any other start tag"
-                       $adjusted = ( $this->fragmentContext && $this->stack->length()===1 ) ?
+                       $adjusted = ( $this->fragmentContext && $this->stack->length() === 1 ) ?
                                $this->fragmentContext : $this->stack->currentNode;
                        $this->stack->insertForeignElement(
                                $adjusted->namespaceURI, $value, $attribs
@@ -2242,7 +2242,7 @@ class Balancer {
 
        private function switchMode( $mode ) {
                Assert::parameter(
-                       substr( $mode, -4 )==='Mode', '$mode', 'should end in Mode'
+                       substr( $mode, -4 ) === 'Mode', '$mode', 'should end in Mode'
                );
                $oldMode = $this->parseMode;
                $this->parseMode = $mode;
@@ -2267,8 +2267,8 @@ class Balancer {
                                switch ( $node->localName ) {
                                case 'select':
                                        $stackLength = $this->stack->length();
-                                       for ( $j = $i + 1; $j < $stackLength-1; $j++ ) {
-                                               $ancestor = $this->stack->node( $stackLength-$j-1 );
+                                       for ( $j = $i + 1; $j < $stackLength - 1; $j++ ) {
+                                               $ancestor = $this->stack->node( $stackLength - $j - 1 );
                                                if ( $ancestor->isHtmlNamed( 'template' ) ) {
                                                        break;
                                                }
index 660c5b7..2ee40a8 100644 (file)
@@ -155,7 +155,7 @@ abstract class UploadBase {
        /**
         * Create a form of UploadBase depending on wpSourceType and initializes it
         *
-        * @param WebRequest $request
+        * @param WebRequest &$request
         * @param string|null $type
         * @return null|UploadBase
         */
@@ -241,7 +241,7 @@ abstract class UploadBase {
        /**
         * Initialize from a WebRequest. Override this in a subclass.
         *
-        * @param WebRequest $request
+        * @param WebRequest &$request
         */
        abstract public function initializeFromRequest( &$request );
 
@@ -1496,6 +1496,7 @@ abstract class UploadBase {
         * @param string $type PUBLIC or SYSTEM
         * @param string $publicId The well-known public identifier for the dtd
         * @param string $systemId The url for the external dtd
+        * @return bool|array
         */
        public static function checkSvgExternalDTD( $type, $publicId, $systemId ) {
                // This doesn't include the XHTML+MathML+SVG doctype since we don't
@@ -1521,6 +1522,7 @@ abstract class UploadBase {
         * @todo Replace this with a whitelist filter!
         * @param string $element
         * @param array $attribs
+        * @param array $data
         * @return bool
         */
        public function checkSvgScriptCallback( $element, $attribs, $data = null ) {
index c0c2cb5..68bcb9d 100644 (file)
@@ -64,7 +64,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         */
        public function tryStashFile( User $user, $isPartial = false ) {
                try {
@@ -77,7 +77,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         * @throws UploadChunkVerificationException
         * @deprecated since 1.28 Use tryStashFile() instead
         */
@@ -88,7 +88,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         * @throws UploadChunkVerificationException
         * @deprecated since 1.28
         */
@@ -99,7 +99,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * {@inheritdoc}
+        * @inheritDoc
         * @throws UploadChunkVerificationException
         * @deprecated since 1.28
         */
index acfabba..675bb8d 100644 (file)
@@ -34,7 +34,7 @@ class UploadFromFile extends UploadBase {
        protected $mUpload = null;
 
        /**
-        * @param WebRequest $request
+        * @param WebRequest &$request
         */
        function initializeFromRequest( &$request ) {
                $upload = $request->getUpload( 'wpUploadFile' );
index 1fbdb7d..a9f399b 100644 (file)
@@ -113,7 +113,7 @@ class UploadFromStash extends UploadBase {
        }
 
        /**
-        * @param WebRequest $request
+        * @param WebRequest &$request
         */
        public function initializeFromRequest( &$request ) {
                // sends wpSessionKey as a default when wpFileKey is missing
index 2b13dd8..7d697a1 100644 (file)
@@ -141,7 +141,7 @@ class UploadFromUrl extends UploadBase {
 
        /**
         * Entry point for SpecialUpload
-        * @param WebRequest $request
+        * @param WebRequest &$request
         */
        public function initializeFromRequest( &$request ) {
                $desiredDestName = $request->getText( 'wpDestFile' );
index fa84c94..71a4272 100644 (file)
@@ -3519,7 +3519,7 @@ class User implements IDBAccessObject {
        /**
         * Check if user is allowed to access a feature / make an action
         *
-        * @param string ... Permissions to test
+        * @param string $permissions,... Permissions to test
         * @return bool True if user is allowed to perform *any* of the given actions
         */
        public function isAllowedAny() {
@@ -3534,7 +3534,7 @@ class User implements IDBAccessObject {
 
        /**
         *
-        * @param string ... Permissions to test
+        * @param string $permissions,... Permissions to test
         * @return bool True if the user is allowed to perform *all* of the given actions
         */
        public function isAllowedAll() {
@@ -3661,7 +3661,7 @@ class User implements IDBAccessObject {
         * If e-notif e-mails are on, they will receive notification mails on
         * the next change of the page if it's watched etc.
         * @note If the user doesn't have 'editmywatchlist', this will do nothing.
-        * @param Title $title Title of the article to look at
+        * @param Title &$title Title of the article to look at
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
         */
        public function clearNotification( &$title, $oldid = 0 ) {
index 8931e3c..19f5100 100644 (file)
@@ -372,7 +372,7 @@ class ClassCollector {
        /**
         * Accepts the next token in an expect sequence
         *
-        * @param array
+        * @param array $token
         */
        protected function tryEndExpect( $token ) {
                switch ( $this->startToken[0] ) {
index fc8bde9..f42b5a0 100644 (file)
@@ -64,9 +64,9 @@ class BatchRowUpdate {
        protected $output;
 
        /**
-        * @param BatchRowIterator   $reader    Iterator that returns an
+        * @param BatchRowIterator $reader Iterator that returns an
         *  array of database rows
-        * @param BatchRowWriter     $writer    Writer capable of pushing
+        * @param BatchRowWriter $writer Writer capable of pushing
         *  row updates to the database
         * @param RowUpdateGenerator $generator Generates single row updates
         *  based on the rows content
index 70afb91..59dcbd6 100644 (file)
@@ -41,8 +41,8 @@ class BatchRowWriter {
 
        /**
         * @param IDatabase $db The database to write to
-        * @param string       $table       The name of the table to update
-        * @param string|bool  $clusterName A cluster name valid for use with LBFactory
+        * @param string $table The name of the table to update
+        * @param string|bool $clusterName A cluster name valid for use with LBFactory
         */
        public function __construct( IDatabase $db, $table, $clusterName = false ) {
                $this->db = $db;
index 9145bb6..81a1a43 100644 (file)
@@ -176,7 +176,7 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
                $iwIconUrl = $parsed['scheme'] .
                        $parsed['delimiter'] .
                        $parsed['host'] .
-                       ( isset ( $parsed['port'] ) ? ':' . $parsed['port'] : '' ) .
+                       ( isset( $parsed['port'] ) ? ':' . $parsed['port'] : '' ) .
                        '/favicon.ico';
 
                $iwIcon = new OOUI\IconWidget( [
index bcd1c16..4eead5e 100644 (file)
@@ -61,6 +61,6 @@ class InterwikiSearchResultWidget implements SearchResultWidget {
                }
 
                return Html::rawElement( 'div', [ 'class' => 'iw-result__title' ], $link . ' ' . $redirect ) .
-                       Html::rawElement( 'div', [ 'class'=> 'iw-result__content' ], $snippet );
+                       Html::rawElement( 'div', [ 'class' => 'iw-result__content' ], $snippet );
        }
 }
index 92dad9b..9db7dec 100644 (file)
@@ -203,7 +203,7 @@ class Language {
        /**
         * Create a language object for a given language code
         * @param string $code
-        * @param $fallback boolean Whether we're going through language fallback chain
+        * @param bool $fallback Whether we're going through language fallback chain
         * @throws MWException
         * @return Language
         */
@@ -1584,9 +1584,9 @@ class Language {
         * @return int[]
         */
        private static function tsToIranian( $ts ) {
-               $gy = substr( $ts, 0, 4 ) -1600;
-               $gm = substr( $ts, 4, 2 ) -1;
-               $gd = substr( $ts, 6, 2 ) -1;
+               $gy = substr( $ts, 0, 4 ) - 1600;
+               $gm = substr( $ts, 4, 2 ) - 1;
+               $gd = substr( $ts, 6, 2 ) - 1;
 
                # Days passed from the beginning (including leap years)
                $gDayNo = 365 * $gy
@@ -1666,7 +1666,7 @@ class Language {
                                                                (int)( ( 275 * $zm ) / 9 ) + $zd + 1729777;
                }
 
-               $zl = $zjd -1948440 + 10632;
+               $zl = $zjd - 1948440 + 10632;
                $zn = (int)( ( $zl - 1 ) / 10631 );
                $zl = $zl - 10631 * $zn + 354;
                $zj = ( (int)( ( 10985 - $zl ) / 5316 ) ) * ( (int)( ( 50 * $zl ) / 17719 ) ) +
@@ -3346,7 +3346,7 @@ class Language {
                                if ( $start < 0 ) {
                                        $start = 0;
                                }
-                               $groupedNumber = substr( $number, $start, $end -$start ) . $groupedNumber;
+                               $groupedNumber = substr( $number, $start, $end - $start ) . $groupedNumber;
                                $end = $start;
                                if ( $numMatches > 1 ) {
                                        // use the last pattern for the rest of the number
index 7c9da77..3fa3dc1 100644 (file)
  * @ingroup Language
  */
 class LanguageCode {
+       /**
+        * Mapping of deprecated language codes that were used in previous
+        * versions of MediaWiki to up-to-date, current language codes.
+        *
+        * @var array Mapping from language code to language code
+        *
+        * @since 1.30
+        */
+       private static $deprecatedLanguageCodeMapping = [
+               // Note that als is actually a valid ISO 639 code (Tosk Albanian), but it
+               // was previously used in MediaWiki for Alsatian, which comes under gsw
+               'als' => 'gsw',
+               'bat-smg' => 'sgs',
+               'be-x-old' => 'be-tarask',
+               'fiu-vro' => 'vro',
+               'roa-rup' => 'rup',
+               'zh-classical' => 'lzh',
+               'zh-min-nan' => 'nan',
+               'zh-yue' => 'yue',
+       ];
+
        /**
         * Returns a mapping of deprecated language codes that were used in previous
         * versions of MediaWiki to up-to-date, current language codes.
@@ -36,19 +57,27 @@ class LanguageCode {
         * MediaWiki's localisation system.
         *
         * @return string[]
+        *
+        * @since 1.29
         */
        public static function getDeprecatedCodeMapping() {
-               return [
-                       // Note that als is actually a valid ISO 639 code (Tosk Albanian), but it
-                       // was previously used in MediaWiki for Alsatian, which comes under gsw
-                       'als' => 'gsw',
-                       'bat-smg' => 'sgs',
-                       'be-x-old' => 'be-tarask',
-                       'fiu-vro' => 'vro',
-                       'roa-rup' => 'rup',
-                       'zh-classical' => 'lzh',
-                       'zh-min-nan' => 'nan',
-                       'zh-yue' => 'yue',
-               ];
+               return self::$deprecatedLanguageCodeMapping;
+       }
+
+       /**
+        * Replace deprecated language codes that were used in previous
+        * versions of MediaWiki to up-to-date, current language codes.
+        * Other values will returned unchanged.
+        *
+        * @param string $code Old language code
+        * @return string New language code
+        *
+        * @since 1.30
+        */
+       public static function replaceDeprecatedCodes( $code ) {
+               if ( isset( self::$deprecatedLanguageCodeMapping[$code] ) ) {
+                       return self::$deprecatedLanguageCodeMapping[$code];
+               }
+               return $code;
        }
 }
index dcb7a91..1cfcd2c 100644 (file)
@@ -36,8 +36,8 @@ class EnConverter extends LanguageConverter {
         * Translates text into Pig Latin. This allows developers to test the language variants
         * functionality and user interface without having to switch wiki language away from default.
         *
-        * @param $text string
-        * @param $toVariant string
+        * @param string $text
+        * @param string $toVariant
         * @return string
         */
        function translate( $text, $toVariant ) {
index f6f03c4..1a1438c 100644 (file)
@@ -282,7 +282,7 @@ class KkConverter extends LanguageConverter {
                $ret = '';
 
                foreach ( $matches as $m ) {
-                       $ret .= substr( $text, $mstart, $m[1] -$mstart );
+                       $ret .= substr( $text, $mstart, $m[1] - $mstart );
                        $ret .= $this->regsConverter( $m[0], $toVariant );
                        $mstart = $m[1] + strlen( $m[0] );
                }
index 6491f55..e0ff5e1 100644 (file)
@@ -131,7 +131,7 @@ class SrConverter extends LanguageConverter {
                $ret = $this->mTables[$toVariant]->replace( $m[0] );
                $mstart = $m[1] + strlen( $m[0] );
                foreach ( $matches as $m ) {
-                       $ret .= substr( $text, $mstart, $m[1] -$mstart );
+                       $ret .= substr( $text, $mstart, $m[1] - $mstart );
                        $ret .= parent::translate( $m[0], $toVariant );
                        $mstart = $m[1] + strlen( $m[0] );
                }
index 19ff2a4..8970b40 100644 (file)
@@ -314,7 +314,7 @@ class Names {
                'nl' => 'Nederlands', # Dutch
                'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E", # Dutch (informal address ("je"))
                'nn' => 'norsk nynorsk', # Norwegian (Nynorsk)
-               'no' => 'norsk bokmål', # Norwegian (falls back to nb).
+               'no' => 'norsk', # Norwegian macro language (falls back to nb).
                'nov' => 'Novial', # Novial
                'nrm' => 'Nouormand', # Norman
                'nso' => 'Sesotho sa Leboa', # Northern Sotho
index 69e204c..b1604f8 100644 (file)
        "tog-shownumberswatching": "اعرض عدد المستخدمين المراقبين",
        "tog-oldsig": "توقيعك الحالي:",
        "tog-fancysig": "جعل التوقيع  مثل نص الويكي  (دون  وصلة تلقائية)",
-       "tog-uselivepreview": "استعÙ\85اÙ\84 Ø§Ù\84Ù\85عاÙ\8aÙ\86Ø© Ø§Ù\84Ù\85باشرة",
+       "tog-uselivepreview": "عرض Ø§Ù\84Ù\85عاÙ\8aÙ\86ات Ø¨Ø¯Ù\88Ù\86 Ø¥Ø¹Ø§Ø¯Ø© ØªØ­Ù\85Ù\8aÙ\84 Ø§Ù\84صÙ\81Ø­ة",
        "tog-forceeditsummary": "نبهني عند عدم إدخال ملخص تعديل",
        "tog-watchlisthideown": "أخف تعديلاتي من قائمة المراقبة",
        "tog-watchlisthidebots": "أخف تعديلات البوتات من قائمة المراقبة",
        "tog-watchlisthideminor": "أخف التعديلات الطفيفة من قائمة المراقبة",
        "tog-watchlisthideliu": "أخف تعديلات المستخدمين المسجلين في قائمة المراقبة",
        "tog-watchlistreloadautomatically": "أعد تحميل قائمة المراقبة بصفة آلية حينما يتغير مرشح ما (يتطلب جافاسكربت)",
+       "tog-watchlistunwatchlinks": "إضافة روابط مباشرة للمراقبة/إزالة المراقبة إلى إدخالات قائمة المراقبة (جافا سكريبت مطلوبة للحصول على وظيفة التبديل)",
        "tog-watchlisthideanons": "أخف تعديلات المستخدمين المجهولين في قائمة المراقبة",
        "tog-watchlisthidepatrolled": "أخف التعديلات المراجعة في قائمة المراقبة",
        "tog-watchlisthidecategorization": "أخف تصنيف الصفحات",
        "permissionserrorstext-withaction": "لا تملك الصلاحيات ل$2، لل{{PLURAL:$1||سبب التالي|سببين التاليين|أسباب التالية}}:",
        "contentmodelediterror": "أنت لا يمكنك تعديل هذه المراجعة لأن موديل محتواها هو  <code>$1</code>، والذي يختلف عن موديل المحتوى الحالي للصفحة  <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''تحذير: أنت تعيد إنشاء صفحة سبق حذفها.'''\n\nيجب عليك التيقن من أن الاستمرار بتحرير هذه الصفحة ملائم.\nسجلا الحذف والنقل لهذه الصفحة معروضان هنا للتيسير:",
-       "moveddeleted-notice": "Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة ØªÙ\85 Ø­Ø°Ù\81Ù\87ا.\nسجÙ\84ا Ø§Ù\84حذÙ\81 Ù\88اÙ\84Ù\86Ù\82Ù\84 Ù\84لصفحة معروضان بالأسفل كمرجع.",
-       "moveddeleted-notice-recent": "عذراØ\8c Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة ØªÙ\85 Ø­Ø°Ù\81Ù\87ا Ù\85ؤخرا (Ù\81Ù\8a Ø¢Ø®Ø± 24 Ø³Ø§Ø¹Ø©).\nسجÙ\84ا Ø§Ù\84حذÙ\81 Ù\88اÙ\84Ù\86Ù\82Ù\84 Ù\84لصفحة معروضان بالأسفل كمرجع.",
+       "moveddeleted-notice": "Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة ØªÙ\85 Ø­Ø°Ù\81Ù\87ا.\nسجÙ\84ا Ø­Ø°Ù\81 Ù\88Ù\86Ù\82Ù\84 Ø§لصفحة معروضان بالأسفل كمرجع.",
+       "moveddeleted-notice-recent": "عذراØ\8c Ù\87Ø°Ù\87 Ø§Ù\84صÙ\81حة ØªÙ\85 Ø­Ø°Ù\81Ù\87ا Ù\85ؤخرا (Ù\81Ù\8a Ø¢Ø®Ø± 24 Ø³Ø§Ø¹Ø©).\nسجÙ\84ا Ø­Ø°Ù\81 Ù\88Ù\86Ù\82Ù\84 Ø§لصفحة معروضان بالأسفل كمرجع.",
        "log-fulllog": "أظهر السجل الكامل",
        "edit-hook-aborted": "التعديل تم تركه بواسطة الخطاف.\nلم يعط تفسيرا.",
        "edit-gone-missing": "لم يمكن تحديث الصفحة.\nيبدو أنه تم حذفها.",
        "prefs-editwatchlist-clear": "امسح قائمة المراقبة",
        "prefs-watchlist-days": "عدد الأيام للعرض في قائمة المراقبة:",
        "prefs-watchlist-days-max": "الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}",
-       "prefs-watchlist-edits": "عدد التعديلات التي تعرض في قائمة المراقبة الموسعة:",
+       "prefs-watchlist-edits": "عدد التعديلات التي تعرض في قائمة المراقبة:",
        "prefs-watchlist-edits-max": "العدد الأقصى: 1000",
        "prefs-watchlist-token": "مفتاح قائمة المراقبة:",
        "prefs-misc": "متفرقات",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (راجع أيضا [[Special:NewPages|قائمة الصفحات الجديدة]])",
        "recentchanges-submit": "أظهر",
        "rcfilters-legend-heading": "<strong>قائمة الاختصارات:</strong>",
+       "rcfilters-other-review-tools": "<strong>أدوات مراجعة أخرى</strong>",
+       "rcfilters-group-results-by-page": "جمع النتائج حسب الصفحة",
+       "rcfilters-grouping-title": "جمع",
        "rcfilters-activefilters": "المرشحات النشطة",
        "rcfilters-advancedfilters": "مرشحات متقدمة",
        "rcfilters-limit-title": "عدد التعديلات",
-       "rcfilters-limit-shownum": "اعرض Ø¢Ø®Ø± $1 ØªØ¹Ø¯Ù\8aÙ\84",
+       "rcfilters-limit-shownum": "إظÙ\87ار Ø¢Ø®Ø± {{PLURAL:$1|تغÙ\8aÙ\8aر|$1 ØªØºÙ\8aÙ\8aرات}}",
        "rcfilters-days-title": "عدد الأيام الأخيرة",
        "rcfilters-hours-title": "عدد الساعات الأخيرة",
        "rcfilters-days-show-days": "{{PLURAL:$1|يوما واحدا|يومان|$1 أيام|$1 يوما}}",
        "rcfilters-days-show-hours": "{{PLURAL:$1|ساعة واحدة|ساعتان|$1 ساعات|$1 ساعة}}",
        "rcfilters-quickfilters": "المرشحات المحفوظة",
        "rcfilters-quickfilters-placeholder-title": "لا وصلات تم حفظها بعد",
+       "rcfilters-quickfilters-placeholder-description": "لحفظ إعدادات الفلتر وإعادة استخدامها في وقت لاحق; انقر فوق رمز الإشارة المرجعية في منطقة الفلتر النشط أدناه.",
        "rcfilters-savedqueries-defaultlabel": "مرشحات محفوظة",
        "rcfilters-savedqueries-rename": "أعد التسمية",
        "rcfilters-savedqueries-setdefault": "حفظ كقيمة افتراضية",
        "rcfilters-savedqueries-unsetdefault": "إزالة القيمة الافتراضية",
        "rcfilters-savedqueries-remove": "أزل",
        "rcfilters-savedqueries-new-name-label": "الاسم",
+       "rcfilters-savedqueries-new-name-placeholder": "صف الغرض من المرشح",
        "rcfilters-savedqueries-apply-label": "أنشئ مرشحا",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "إنشاء مرشح افتراضي",
        "rcfilters-savedqueries-cancel-label": "ألغ",
        "rcfilters-savedqueries-add-new-title": "احفظ إعدادات المرشحات الحالية",
        "rcfilters-restore-default-filters": "استرجاع المرشحات الافتراضية",
        "rcfilters-clear-all-filters": "مسح كل المرشحات",
+       "rcfilters-show-new-changes": "عرض أحدث التغييرات",
+       "rcfilters-previous-changes-label": "تغييرات تم عرضها سابقًا",
        "rcfilters-search-placeholder": "رشح أحدث التغييرات (تصفح أو ابدأ الكتابة)",
        "rcfilters-invalid-filter": "مرشح غير صحيح",
        "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "rcfilters-filterlist-title": "مرشحات",
-       "rcfilters-filterlist-whatsthis": "Ù\85ا Ù\87ذا؟",
+       "rcfilters-filterlist-whatsthis": "Ù\83Ù\8aÙ\81 ØªØ¹Ù\85Ù\84 Ù\87Ø°Ù\87؟",
        "rcfilters-filterlist-feedbacklink": "تقديم مراجعات لمرشحات (بيتا) الجديدة",
        "rcfilters-highlightbutton-title": "التعليم على النتائج",
        "rcfilters-highlightmenu-title": "اختر لونًا",
        "rcfilters-filter-editsbyself-description": "مساهماتك الشخصية.",
        "rcfilters-filter-editsbyother-label": "التغييرات بواسطة الآخرين",
        "rcfilters-filter-editsbyother-description": "كل التغييرات باستثناء تغييراتك.",
-       "rcfilters-filtergroup-userExpLevel": "مستوى الخبرة (للمستخدمين المسجلين فقط)",
-       "rcfilters-filter-user-experience-level-registered-label": "مسجل",
-       "rcfilters-filter-user-experience-level-registered-description": "المحررون مسجلو الدخول.",
-       "rcfilters-filter-user-experience-level-unregistered-label": "غير مسجل",
-       "rcfilters-filter-user-experience-level-unregistered-description": "اÙ\84Ù\85حررÙ\88Ù\86 ØºÙ\8aر Ù\85سجÙ\84Ù\8a الدخول.",
+       "rcfilters-filtergroup-userExpLevel": "تسجيل المستخدم وخبرته",
+       "rcfilters-filter-user-experience-level-registered-label": "مسجل الدخول",
+       "rcfilters-filter-user-experience-level-registered-description": "المحررون المسجلون.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "غير المسجلين",
+       "rcfilters-filter-user-experience-level-unregistered-description": "اÙ\84Ù\85حررÙ\88Ù\86 Ø§Ù\84Ø°Ù\8aÙ\86 Ù\84Ù\85 Ù\8aسجÙ\84Ù\88ا الدخول.",
        "rcfilters-filter-user-experience-level-newcomer-label": "القادمون الجدد",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Ø£Ù\82Ù\84 Ù\85Ù\86 10 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\884 أيام من النشاط.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "اÙ\84Ù\85حررÙ\88Ù\86 Ø§Ù\84Ù\85سجÙ\84Ù\88Ù\86 Ø§Ù\84Ø°Ù\8aÙ\86 Ù\84دÙ\8aÙ\87Ù\85 Ø£Ù\82Ù\84 Ù\85Ù\86 10 ØªØ¹Ø¯Ù\8aÙ\84ات Ù\88 4 أيام من النشاط.",
        "rcfilters-filter-user-experience-level-learner-label": "المتعلمون",
-       "rcfilters-filter-user-experience-level-learner-description": "خبرة Ø£Ù\83ثر Ù\85Ù\86 \"اÙ\84Ù\82ادÙ\85Ù\8aÙ\86 Ø§Ù\84جدد\" Ù\88Ù\84Ù\83Ù\86 Ø£Ù\82Ù\84 Ù\85Ù\86 \"المستخدمين ذوي الخبرة\".",
+       "rcfilters-filter-user-experience-level-learner-description": "اÙ\84Ù\85حررÙ\88Ù\86 Ø§Ù\84Ù\85سجÙ\84Ù\88Ù\86 Ø§Ù\84Ø°Ù\8aÙ\86 ØªÙ\82ع ØªØ¬Ø±Ø¨ØªÙ\87Ù\85 Ø¨Ù\8aÙ\86 \"اÙ\84Ù\82ادÙ\85Ù\8aÙ\86 Ø§Ù\84جدد\" Ù\88 \"المستخدمين ذوي الخبرة\".",
        "rcfilters-filter-user-experience-level-experienced-label": "المستخدمون ذوو الخبرة",
-       "rcfilters-filter-user-experience-level-experienced-description": "Ø£Ù\83ثر Ù\85Ù\86 30 Ù\8aÙ\88Ù\85ا Ù\85Ù\86 Ø§Ù\84Ù\86شاط Ù\88500 ØªØ¹Ø¯Ù\8aÙ\84.",
+       "rcfilters-filter-user-experience-level-experienced-description": "اÙ\84Ù\85حررÙ\88Ù\86 Ø§Ù\84Ù\85سجÙ\84Ù\88Ù\86 Ø§Ù\84Ø°Ù\8aÙ\86 Ù\84دÙ\8aÙ\87Ù\85 Ø£Ù\83ثر Ù\85Ù\86 500 ØªØ¹Ø¯Ù\8aÙ\84 Ù\88 30 Ù\8aÙ\88Ù\85ا Ù\85Ù\86 Ø§Ù\84Ù\86شاط.",
        "rcfilters-filtergroup-automated": "المساهمات الأوتوماتيكية",
        "rcfilters-filter-bots-label": "بوت",
        "rcfilters-filter-bots-description": "التعديلات بواسطة الأدوات الأوتوماتيكية.",
        "rcfilters-hideminor-conflicts-typeofchange-global": "مرشح \"التعديلات الطفيفة\" يتعارض مع مرشح واحد أو أكثر من مرشحات نوع التغيير، وذلك لأن بعض أنواع التغيير لا يمكن التعليم عليها ك\"طفيفة.\" المرشحات المتعارضة معلم عليها في مساحة المرشحات النشطة بالأعلى.",
        "rcfilters-hideminor-conflicts-typeofchange": "بعض أنواع التغييرات لا يمكن التعليم عليها ك\"طفيفة،\" لذا فهذا المرشح يتعارض مع مرشحات نوع التغيير التالية: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "مرشح نوع التغيير هذا يتعارض مع مرشح \"التعديلات الطفيفة\". بعض أنواع التغييرات لا يمكن التعليم عليها ك\"طفيفة.\"",
-       "rcfilters-filtergroup-lastRevision": "آخر Ù\85راجعة",
+       "rcfilters-filtergroup-lastRevision": "أحدث Ø§Ù\84Ù\85راجعات",
        "rcfilters-filter-lastrevision-label": "آخر مراجعة",
-       "rcfilters-filter-lastrevision-description": "أخر تعديل للصفحة.",
-       "rcfilters-filter-previousrevision-label": "نسخ سابقة",
-       "rcfilters-filter-previousrevision-description": "كل تعديلات الصفحة ما عدا التعديل الأخير.",
+       "rcfilters-filter-lastrevision-description": "فقط أحدث التغييرات التي طرأت على الصفحة.",
+       "rcfilters-filter-previousrevision-label": "ليس آخر مراجعة",
+       "rcfilters-filter-previousrevision-description": "جميع التغييرات ما عدا \"أحدث مراجعة\".",
+       "rcfilters-filter-excluded": "مستبعد",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ليس</strong> $1",
+       "rcfilters-exclude-button-off": "استبعاد المختارة",
+       "rcfilters-exclude-button-on": "استثناء المختارة",
+       "rcfilters-view-advanced-filters-label": "مرشحات متقدمة",
        "rcfilters-view-tags": "تعديلات موسومة",
        "rcfilters-view-namespaces-tooltip": "رشح النتائج حسب النطاق",
        "rcfilters-view-tags-tooltip": "رشح النتائج حسب وسوم التعديل",
        "rcfilters-view-return-to-default-tooltip": "ارجع لقائمة المرشحات الرئيسية",
        "rcfilters-liveupdates-button": "تحديثات حية",
+       "rcfilters-liveupdates-button-title-on": "إيقاف التحديثات الحية",
+       "rcfilters-liveupdates-button-title-off": "عرض التغييرات الجديدة فور حدوثها",
        "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfromreset": "إعادة ضبط خيار التاريخ",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
        "pageswithprop-legend": "صفحات مع خاصية الصفحة",
        "pageswithprop-text": "تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.",
        "pageswithprop-prop": "اسم الخاصية:",
+       "pageswithprop-reverse": "فرز بترتيب عكسي",
+       "pageswithprop-sortbyvalue": "ترتيب حسب قيمة الخاصية",
        "pageswithprop-submit": "اذهب",
        "pageswithprop-prophidden-long": "قيمة خاصية النص الطويل المخفية ($1)",
        "pageswithprop-prophidden-binary": "قيمة الخاصية الثنائية المخفية ($1)",
        "watching": "يراقب...",
        "unwatching": "إزالة المراقبة...",
        "watcherrortext": "حدث خطأ أثناء تغيير إعدادات الرصد الخاصة بك \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "علم على كل الصفحات كمرئية",
        "enotif_impersonal_salutation": "مستخدم {{SITENAME}}",
        "enotif_subject_deleted": "الصفحة {{SITENAME}} $1 حذفها {{الجنس: $2 | $2 }}",
        "enotif_lastdiff": "لرؤية هذا التغيير، انظر $1",
        "enotif_anon_editor": "مستخدم مجهول $1",
        "enotif_body": "عزيزي $WATCHINGUSERNAME\n\n$PAGEINTRO $NEWPAGE\n\nملخص التعديل: $PAGESUMMARY $PAGEMINOREDIT\n\nاتصل بالمحرر:\nالبريد: $PAGEEDITOR_EMAIL\nويكي: $PAGEEDITOR_WIKI\n\nلن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة أثناء تواجدك. يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.\n\nنظام {{SITENAME}} للإشعار\n\n--\nلتغيير إعدادات الإشعار بالبريد الإلكتروني الخاص بك، قم بزيارة\n{{canonicalurl:{{#special:Preferences}}}}\n\nلتغيير إعدادات قائمة مراقبتك، قم بزيارة\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nلحذف الصفحة من قائمة مراقبتك، قم بزيارة\n$UNWATCHURL\n\nللمقترحات وللحصول على مساعدة إضافية:\n$HELPPAGE",
+       "enotif_minoredit": "هذا تعديل طفيف",
        "created": "أنشئت",
        "changed": "غيرت",
        "deletepage": "حذف الصفحة",
        "delete-warning-toobig": "لهذه الصفحة تاريخ تعديل طويل، أكثر من {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}.\nقد يؤدي حذفها إلى اضطراب عمليات قاعدة البيانات في {{SITENAME}}؛\nاستمر مع الحذر.",
        "deleteprotected": "لا يمكنك حذف هذه الصفحة لأنها محمية.",
        "deleting-backlinks-warning": "<strong>تحذير:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحات أخرى]] تصل إلى أو تضمن الصفحة التي أنت على وشك حذفها.",
+       "deleting-subpages-warning": "<strong>تحذير:</strong> اللصفحة التي على وشك أن تحذفها لديها [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|صفحة فرعية|$1 صفحات فرعية|51=أكثر من 50 صفحة فرعية}}]].",
        "rollback": "التراجع عن التعديلات",
        "rollbacklink": "استرجع",
        "rollbacklinkcount": "استرجع {{PLURAL:$1|لا تعديلات|تعديلا واحدا|تعديلين|$1 تعديلات|$1 تعديلاً|تعديل}}",
        "import-nonewrevisions": "لا مراجعات تم استيرادها (كل المراجعات إما أنها كانت موجودة بالفعل، وأو تم تجاوزها نتيجة أخطاء).",
        "xml-error-string": "$1 عند السطر $2، العمود $3 (بايت $4): $5",
        "import-upload": "رفع بيانات XML",
-       "import-token-mismatch": "فقد لبيانات الجلسة.\n\nأنت لابد من أنه قد تم تسجيل خروجك. <strong>من فضلك تأكد من أنك مازلت مسجل الدخول وحاول مرة أخرى</strong>.\nلو كان مازال لا يعمل، فحاول [[Special:UserLogout|تسجيل الخروج]] وتسجيل الدخول مرة أخرى، وتحقق من أن متصفحك يسمح بالكوكيز من هذا الموقع.",
+       "import-token-mismatch": "فقد لبيانات الجلسة.\nربما تم تسجيل خروجك. '''الرجاء التحقق من أنك لا تزال مسجلا الدخول وإعادة المحاولة'''.\nإذا كان لا يزال لا يعمل، حاول [[Special:UserLogout|تسجيل الخروج]] وتسجيل الدخول مرة أخرى، وتحقق من أن متصفحك يسمح بملفات تعريف الارتباط من هذا الموقع.",
        "import-invalid-interwiki": "لم يمكن الاستيراد من الويكي المحدد.",
        "import-error-edit": "الصفحة \"$1\" لم يتم استيرادها لأنه لا يمكن لك تحريرها.",
        "import-error-create": "الصفحة \"$1\" لم يتم استيرادها لأنه لا يمكن لك استحداثها أصلا.",
        "fileduplicatesearch-noresults": "لا ملف بالاسم \"$1\" تم العثور عليه.",
        "specialpages": "الصفحات الخاصة",
        "specialpages-note-top": "المفتاح",
+       "specialpages-note-restricted": "* صفحات خاصة عادية.\n* <span class=\"mw-specialpagerestricted\">صفحات خاصة مقيدة.</span>",
        "specialpages-group-maintenance": "تقارير الصيانة",
        "specialpages-group-other": "صفحات خاصة أخرى",
        "specialpages-group-login": "دخول / إنشاء حساب",
        "compare-invalid-title": "العنوان الذي حددته غير متاح.",
        "compare-title-not-exists": "العنوان الذي حددته غير موجود.",
        "compare-revision-not-exists": "المراجعة التي حددتها غير موجودة.",
+       "diff-form": "فروق",
+       "diff-form-oldid": "معرف مراجعة قديمة (اختياري)",
+       "diff-form-revid": "معرف مراجعة الفرق",
+       "diff-form-submit": "أظهر الفروق",
+       "permanentlink": "وصلة دائمة",
+       "permanentlink-revid": "معرف المراجعة",
+       "permanentlink-submit": "الذهاب إلى المراجعة",
        "dberr-problems": "عذرا! هذا الموقع يعاني من صعوبات تقنية.",
        "dberr-again": "جرب الانتظار بضع دقائق وإعادة التحميل.",
        "dberr-info": "(لا يمكن الوصول إلى خادوم قاعدة البيانات: $1)",
index bef877b..cd7a962 100644 (file)
@@ -45,7 +45,7 @@
        "tog-shownumberswatching": "Amosar el númberu d'usuarios que tán vixilando la páxina",
        "tog-oldsig": "La to firma actual:",
        "tog-fancysig": "Tratar la firma como testu wiki (ensin enllaz automáticu)",
-       "tog-uselivepreview": "Usar vista previa en tiempu real",
+       "tog-uselivepreview": "Amosar les vistes previes ensin recargar la páxina",
        "tog-forceeditsummary": "Avisame cuando grabe col resume d'edición en blanco",
        "tog-watchlisthideown": "Anubrir les mios ediciones na llista de siguimientu",
        "tog-watchlisthidebots": "Anubrir les ediciones de bots na llista de siguimientu",
        "permissionserrorstext-withaction": "Nun tien permisu pa $2 {{PLURAL:$1|pol siguiente motivu|polos siguientes motivos}}:",
        "contentmodelediterror": "Nun ye posible editar esta revisión porque'l so modelu de conteníu ye <code>$1</code>, que ye distintu del modelu de conteníu actual de la páxina, <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Avisu: Tas volviendo a crear una páxina que se desanició anteriormente.'''\n\nHabríes considerar si ye afechisco siguir editando esta páxina.\nEquí tienes el rexistru de desanicios y tresllaos d'esta páxina:",
-       "moveddeleted-notice": "Esta páxina se desanició.\nComo referencia, embaxo s'ufre'l rexistru de desanicios y tresllaos de la páxina.",
-       "moveddeleted-notice-recent": "Esta páxina desanicióse apocayá (dientro de les postreres 24 hores).\nLos rexistros de desaniciu y treslláu de la páxina amuésense de siguío como referencia.",
+       "moveddeleted-notice": "Esta páxina se desanició.\nComo referencia, embaxo s'ufre'l rexistru de desanicios, proteiciones y tresllaos de la páxina.",
+       "moveddeleted-notice-recent": "Esta páxina desanicióse apocayá (dientro de les postreres 24 hores).\nEl rexistru de desanicios, proteiciones y tresllaos de la páxina amuésense de siguío como referencia.",
        "log-fulllog": "Ver el rexistru ensembre",
        "edit-hook-aborted": "Edición albortada pol enganche.\nNun dio esplicación.",
        "edit-gone-missing": "Nun se pudo actualizar la páxina.\nPaez que se desanició.",
        "prefs-editwatchlist-clear": "Llimpiar la to llista de siguimientu",
        "prefs-watchlist-days": "Númberu de díes qu'amosar na llista de siguimientu:",
        "prefs-watchlist-days-max": "Máximo $1 {{PLURAL:$1|día|díes}}",
-       "prefs-watchlist-edits": "Númberu máximu d'ediciones qu'amosar na llista de siguimientu espandida:",
+       "prefs-watchlist-edits": "Númberu máximu de cambios qu'amosar na llista de siguimientu:",
        "prefs-watchlist-edits-max": "Númberu máximu: 1000",
        "prefs-watchlist-token": "Pase de la llista de siguimientu:",
        "prefs-misc": "Varios",
        "recentchanges-submit": "Amosar",
        "rcfilters-legend-heading": "<strong>Llista d'abreviatures:</strong>",
        "rcfilters-other-review-tools": "<strong>Otres ferramientes de revisión</strong>",
+       "rcfilters-group-results-by-page": "Agrupar resultancies per páxina",
+       "rcfilters-grouping-title": "Agrupamientu",
        "rcfilters-activefilters": "Filtros activos",
        "rcfilters-advancedfilters": "Filtros avanzaos",
        "rcfilters-limit-title": "Cambios a amosar",
-       "rcfilters-limit-shownum": "Amosar los últimos $1 cambios",
+       "rcfilters-limit-shownum": "Amosar {{PLURAL:$1|l'últimu cambiu|los últimos $1 cambios}}",
        "rcfilters-days-title": "Últimos díes",
        "rcfilters-hours-title": "Últimes hores",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|día|díes}}",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-new-name-placeholder": "Describe'l propósitu del filtru",
        "rcfilters-savedqueries-apply-label": "Crear un filtru",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Crear filtru predetermináu",
        "rcfilters-savedqueries-cancel-label": "Encaboxar",
        "rcfilters-savedqueries-add-new-title": "Guardar les preferencies de filtru actuales",
        "rcfilters-restore-default-filters": "Restaurar los filtros predeterminaos",
        "rcfilters-clear-all-filters": "Borrar tolos filtros",
+       "rcfilters-show-new-changes": "Ver los cambeos más recién",
+       "rcfilters-previous-changes-label": "Cambeos vistos anteriormente",
        "rcfilters-search-placeholder": "Filtriar los cambeos recién (restola o empieza a escribir)",
        "rcfilters-invalid-filter": "Filtru inválidu",
        "rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Torgar los seleicionaos",
        "rcfilters-exclude-button-on": "Torgando los seleicionaos",
+       "rcfilters-view-advanced-filters-label": "Filtros avanzaos",
        "rcfilters-view-tags": "Ediciones etiquetaes",
        "rcfilters-view-namespaces-tooltip": "Filtriar los resultaos por espaciu de nomes",
        "rcfilters-view-tags-tooltip": "Filtriar los resultaos usando les etiquetes d'edición",
        "rcfilters-view-return-to-default-tooltip": "Volver al menú principal de filtros",
        "rcfilters-liveupdates-button": "Anovamientos nel intre",
+       "rcfilters-liveupdates-button-title-on": "Apagar anovamientos en direuto",
+       "rcfilters-liveupdates-button-title-off": "Amosar los cambeos de la qu'asoceden",
        "rcnotefrom": "Abaxo {{PLURAL:$5|tá'l cambiu|tan los cambios}} dende'l <strong>$3</strong>, a les <strong>$4</strong> (s'amuesen un máximu de <strong>$1</strong>).",
        "rclistfromreset": "Reaniciar la seleición de data",
        "rclistfrom": "Amosar los nuevos cambios dende'l $3 a les $2",
        "pageswithprop-legend": "Páxines con una propiedá de páxina",
        "pageswithprop-text": "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
        "pageswithprop-prop": "Nome de la propiedá:",
+       "pageswithprop-reverse": "Ordenar a la inversa",
+       "pageswithprop-sortbyvalue": "Ordenar por valor de propiedá",
        "pageswithprop-submit": "Dir",
        "pageswithprop-prophidden-long": "valor de propiedá de testu llargu tapecíu ($1)",
        "pageswithprop-prophidden-binary": "valor de propiedá binaria tapecíu ($1)",
        "enotif_lastdiff": "Pa ver esti cambiu mira en $1",
        "enotif_anon_editor": "usuariu anónimu $1",
        "enotif_body": "Estimáu $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResume del editor: $PAGESUMMARY $PAGEMINOREDIT\n\nPa comunicate col editor:\ncorréu: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nEn casu de producise más actividá, nun habrá más notificaciones a nun ser que visites esta páxina teniendo sesión aniciada. Tamién podríes reaniciar na to llista de siguimientu los marcadores de notificación de toles páxines que sigues.\n\nEl to abertable sistema de notificación de {{SITENAME}}\n\n--\nPa camudar les preferencies d'avisos per corréu, visita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPa camudar la configuración de la to llista de siguimientu, visita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPa desaniciar la páxina de la to llista de siguimientu, visita\n$UNWATCHURL\n\nMás ayuda y sofitu:\n$HELPPAGE",
+       "enotif_minoredit": "Esta ye una edición menor",
        "created": "creada",
        "changed": "camudada",
        "deletepage": "Esborrar páxina",
        "import-nonewrevisions": "Nun s'importó denguna revision (o yá taben toes presentes, o se saltaron por errores).",
        "xml-error-string": "$1 na llinia $2, col $3 (byte $4): $5",
        "import-upload": "Xubir datos XML",
-       "import-token-mismatch": "Perda de datos de la sesión.\n\nSeique zarróse la sesión. <strong>Comprueba si tienes abierta la sesión y vuelve a intentalo</strong>.\nSi inda nun funcionara, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.",
+       "import-token-mismatch": "Perda de datos de la sesión.\n\nSeique zarróse la sesión. '''Comprueba si tienes abierta la sesión y tenta nuevamente'''.\nSi entá nun funciona, tenta [[Special:UserLogout|colar]] y volver a aniciar sesión y comprueba que'l restolador permite les cookies d'esti sitiu.",
        "import-invalid-interwiki": "Nun se puede importar d'esi wiki.",
        "import-error-edit": "La páxina «$1» nun s'importó porque nun tienes permisu pa editala.",
        "import-error-create": "La páxina «$1» nun s'importó porque nun tienes permisu pa creala.",
        "fileduplicatesearch-noresults": "Nun s'alcontró dengún ficheru nomáu «$1».",
        "specialpages": "Páxines especiales",
        "specialpages-note-top": "Lleenda",
+       "specialpages-note-restricted": "* Páxines especiales normales.\n* <span class=\"mw-specialpagerestricted\">Páxines especiales restrinxíes.</span>",
        "specialpages-group-maintenance": "Informes de mantenimientu",
        "specialpages-group-other": "Otres páxines especiales",
        "specialpages-group-login": "Entrar / crear cuenta",
        "compare-invalid-title": "El títulu que conseñasti nun ye válidu.",
        "compare-title-not-exists": "El títulu que conseñasti nun esiste.",
        "compare-revision-not-exists": "La revisión que conseñasti nun esiste.",
+       "diff-form": "Diferencies",
+       "diff-form-oldid": "Antiguu identificador de revisión (opcional)",
+       "diff-form-revid": "Identificador de revisión de la diferencia",
+       "diff-form-submit": "Amosar les diferencies",
+       "permanentlink": "Enllaz permanente",
+       "permanentlink-revid": "ID de la revisión",
+       "permanentlink-submit": "Dir a la revisión",
        "dberr-problems": "¡Sentímoslo! Esti sitiu ta esperimentando dificultaes téuniques.",
        "dberr-again": "Tenta esperar dellos minutos y recargar.",
        "dberr-info": "(Nun se pue entrar na base de datos: $1)",
index ebb2d17..f74f325 100644 (file)
        "searcharticle": "Күсеү",
        "history": "Бит тарихы",
        "history_short": "Тарих",
+       "history_small": "тарихы",
        "updatedmarker": "һуңғы инеүемдән һуң яңыртылған",
        "printableversion": "Баҫтырыу өлгөһө",
        "permalink": "Даими һылтанма",
        "permissionserrorstext-withaction": "«'''$2'''» ғәмәлен башҡара алмайһығыҙ. {{PLURAL:$1|1=Сәбәбе|Сәбәптәре}}:",
        "contentmodelediterror": "Был версияны мөхәррирләй алмайһығыҙ — <code>$1</code>, моделе ғәмәлдәге — <code>$2</code> моделенан айырыла.",
        "recreate-moveddeleted-warn": "'''Иғтибар: Һеҙ, элек юйылған битте яңынан яһарға теләйһегеҙ.'''\n\nҺеҙгә был битте яңынан яһау кәрәклеген яңынан уйлап ҡарағыҙ.\nТүбәндә биттең юйыу һәм исем үҙгәртеү яҙмалары килтерелә:",
-       "moveddeleted-notice": "Был бит юйылған.\nБелешмә өсөн киләһе юйыу һәм исем үҙгәртеү яҙмалары килтерелә.",
-       "moveddeleted-notice-recent": "Үкенескә ҡаршы бит бит юйылған (һуүғы 24 сәғәт эсендә). Түбәндә юйыуҙар журналы һәм был журналға күсереүҙәр бирелгән.",
+       "moveddeleted-notice": "Был бит юйылған.\nБелешмә өсөн түбәндә был биттең юйыу, һаҡлау һәм үҙгәртеү яҙмалары килтерелә.",
+       "moveddeleted-notice-recent": "Үкенескә ҡаршы был бит юйылған (һуңғы 24 сәғәт эсендә). Түбәндә, мәғлүмәт өсөн, был биткә тәғәйен юйыуҙар, һаҡлау һәм күсереп ҡуйыуҙарҙың журналы күрһәтелгән.",
        "log-fulllog": "Бар яҙмаларҙы ҡарарға",
        "edit-hook-aborted": "Үҙгәртеүҙе ҡармаҡ-процедура кире ҡаҡты.\nӨҫтәмә аңлатма килтерелмәй.",
        "edit-gone-missing": "Битте яңыртып булмай.\nБәлки ул юйылғандыр.",
        "prefs-editwatchlist-clear": "Күҙәтеүҙәр исемлеген таҙартыу",
        "prefs-watchlist-days": "Күҙәтеү исемлегендә нисә көн керетелгән үҙгәртеүҙәрҙе күрһәтергә:",
        "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
-       "prefs-watchlist-edits": "Киңәйтелгән күҙәтеү исемлегендә күрһәтелә торған үҙгәртеүҙәр һанының сиге:",
+       "prefs-watchlist-edits": "Күҙәтеүҙәр исемлегендә күрһәтеү өсөн төҙәтеүҙәр һанының сиге:",
        "prefs-watchlist-edits-max": "Иң күбе: 1000",
        "prefs-watchlist-token": "Күҙәтеү исемлеге токены:",
        "prefs-misc": "Башҡа көйләүҙәр",
        "userrights-nodatabase": "$1 базаһы юҡ йәки урындағы (локаль) база түгел.",
        "userrights-changeable-col": "Һеҙ үҙгәртә алған төркөмдәр",
        "userrights-unchangeable-col": "Һеҙ үҙгәртә алмаған төркөмдәр",
+       "userrights-expiry-current": "$1 мөҙҙәте сығып килә",
        "userrights-expiry-none": "Сикләүһеҙ",
+       "userrights-expiry": "Тамамлана:",
        "userrights-expiry-existing": "Әлеге ваҡыт сыға:$2, $3",
+       "userrights-expiry-othertime": "Башҡа ваҡыт:",
        "userrights-expiry-options": "1 көн:1 day,1 аҙна:1 week,1 ай:1 mopnth, 3 ай:3 months,6 ай:6 months,1 йыл:1 year",
+       "userrights-invalid-expiry": "«$1» төркөмө өсөн ваҡыт бөтөүе яңылыш бирелгән",
+       "userrights-expiry-in-past": "Время истечения для группы «$1» задано в прошлом.\n«$1» төркөмө өсөн ваҡыт бөтөүе үткән ваҡытта бирелгән.",
+       "userrights-cannot-shorten-expiry": "«$1» төркөмөндә ағза булыу осоро датаһын алғараҡ күсерә алмайһың. Был төркөмгә өҫтәү йәки алыуға хоҡуғы булған ҡатнашыусылар ғына уны алғараҡ күсерә ала.",
        "userrights-conflict": "Ҡатнашыусының хоҡуҡтарын үҙгәртеү яраманы! Зинһар, үҙгәрештәрҙе тикшерегеҙ һәм яңынан индерегеҙ.",
        "group": "Төркөм:",
        "group-user": "Ҡулланыусылар",
        "grant-group-high-volume": "Юғары әүҙемлекле алым эшләргә",
        "grant-group-customization": "Көйләүҙәр һәм өҫтөнлөк биргән көйләүҙәр",
        "grant-group-administration": "Административ алымдар ҡулланыу",
+       "grant-group-private-information": "Доступ к конфиденциальным данным о вас\nҺеҙҙең туралағы йәшерелгән белешмәләргә инеү",
        "grant-group-other": "Әүҙемлек төрлө",
        "grant-blockusers": "Иҫәп яҙмаларын блоклау һәм блоклауҙы асыу",
        "grant-createaccount": "Иҫәп яҙмаһын булдырырға",
        "grant-highvolume": " Юғары әүҙемлектә мөхәррирләү",
        "grant-oversight": "Башҡа ҡатнашыусылар тәҙәтеүенән бит версияһын йәшерергә",
        "grant-patrol": "Бит үҙгәрештәрен күҙәтеү",
+       "grant-privateinfo": "Шәхси белешмәләргә инеү",
        "grant-protect": "Битте һаҡлау һәм һаҡты сисеү",
        "grant-rollback": "Биттеге үҙгәрештәрҙе кире ҡайтарыу",
        "grant-sendemail": "Башҡа ҡатнашыусыларға электрон почта аша хат ебәреү",
        "grant-basic": "Төп хоҡуҡтар",
        "grant-viewdeleted": "Юйылған файлдарҙы һәм биттерҙе тейәү",
        "grant-viewmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген байҡау",
+       "grant-viewrestrictedlogs": "рөхсәте сикле журналдағы яҙманы ҡарау",
        "newuserlogpage": "Яңы ҡулланыусы яҙмалары",
        "newuserlogpagetext": "Яңы теркәлгән ҡатнашыусылар яҙмалары журналы.",
        "rightslog": "Ҡулланыусының хоҡуҡтары көндәлеге",
        "action-writeapi": "Яҙҙырыу өсөн API ҡулланыу",
        "action-delete": "Был битте юйыу",
        "action-deleterevision": "биттең өлгөләрен юйыу",
+       "action-deletelogentry": "журналдағы яҙманы юҡ итеү",
        "action-deletedhistory": "биттең юйылған тарихын ҡарау",
+       "action-deletedtext": "текстың юйылған нөсхәһен ҡарау",
        "action-browsearchive": "Юйылған биттәрҙе эҙләү",
        "action-undelete": "биттәрҙе тергеҙеү",
        "action-suppressrevision": "биттәрҙең йәшерелгән өлгөләрен ҡарау һәм тергеҙеү",
        "action-userrights-interwiki": "Ҡатнашыусыларҙың башҡа Викиларҙағы хоҡуҡтарын үҙгәртеү",
        "action-siteadmin": "Мәғлүмәттәр базаһын асыу һәм ябыу",
        "action-sendemail": "электрон хат ебәреү",
+       "action-editmyoptions": "Көйләүҙәрегеҙҙе мөхәррирләү",
        "action-editmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген мөхәррирләү",
        "action-viewmywatchlist": "һеҙҙең күҙәтеүҙәр исемлеген байҡау",
        "action-viewmyprivateinfo": "һеҙҙең шәхси мәғлүмәтте байҡау",
        "action-applychangetags": "Һеҙҙең үҙгәрештәр ТЕГын булдырырға",
        "action-changetags": "Айырым үҙгәртеүҙәрҙә һәм журнал яҙмаланыда тег өҫтәү һәм юйыу",
        "action-deletechangetags": "билдәләрҙе мәғлүмәт базаһынан юйыу",
+       "action-purge": "был биттең кешын таҙартыу",
        "nchanges": "$1 {{PLURAL:$1|үҙгәртәү|үҙгәртеүҙәр}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|һеҙҙең һуңғы визит}}",
        "enhancedrc-history": "тарих",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Яңы биттәр исемлеген]] ҡарағыҙ)",
        "recentchanges-submit": "Күрһәтергә",
+       "rcfilters-legend-heading": "<strong>Ҡыҫҡартыуҙар теҙмәһе:</strong>",
+       "rcfilters-other-review-tools": "<strong>Тикшереүҙең башҡа ҡоралдары</strong>",
+       "rcfilters-group-results-by-page": "Төркөмдөң төрлө биттәге һөҙөмтәләре",
+       "rcfilters-grouping-title": "Төркөмләштереү",
+       "rcfilters-activefilters": "Әүҙем фильтрҙар",
+       "rcfilters-advancedfilters": "Киңәйтелгән фильтрҙар",
+       "rcfilters-limit-title": "Күрһәтеү өсөн үҙгәртеүҙәр",
+       "rcfilters-limit-shownum": "{{PLURAL:$1|һуңғы үҙгәреш|$1 һуңғы үҙгәрештәр|$1 һуңғы үҙгәрештәрҙе}} күрһәтергә",
+       "rcfilters-days-title": "Аҙаҡҡы көндәр",
+       "rcfilters-hours-title": "Аҙаҡҡы сәғәттәр",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|көн|көндәр}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сәғәт|сәғәттән}}",
+       "rcfilters-quickfilters": "Һаҡланған фильтрҙар",
+       "rcfilters-quickfilters-placeholder-title": "Һаҡланған ссылкалар әлегә юҡ",
+       "rcfilters-quickfilters-placeholder-description": "Фильтрҙың көйләүҙәрен һаҡлар һәм аҙаҡтан уларҙы яңынан ҡулланыу өсөн аҫтағы \"Әүҙем фильтр\" төймәһенә сиртегеҙ.",
+       "rcfilters-savedqueries-defaultlabel": "Һаҡланған фильтрҙар",
+       "rcfilters-savedqueries-rename": "Исемен үҙгәрт",
+       "rcfilters-savedqueries-setdefault": "Һүҙһеҙ үтәлешкә ҡуйырға",
+       "rcfilters-savedqueries-unsetdefault": "һүҙһеҙ үтәлеште юйырға",
+       "rcfilters-savedqueries-remove": "Юйырға",
+       "rcfilters-savedqueries-new-name-label": "Исеме",
+       "rcfilters-savedqueries-new-name-placeholder": "Фильтрҙың маҡсатын яҙығыҙ",
+       "rcfilters-savedqueries-apply-label": "Фильтр ҡуйырға",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Һүҙһеҙ үтәлгән фильтрҙы ҡуйырға",
+       "rcfilters-savedqueries-cancel-label": "Кире алыу",
+       "rcfilters-savedqueries-add-new-title": "Фильтрҙың әлеге көйләүҙәрен һаҡларға",
+       "rcfilters-restore-default-filters": "Фильтрҙарҙың һүҙһеҙ үтәлгәнен кире ҡуйырға",
+       "rcfilters-clear-all-filters": "Бөтә фильтрҙарҙы ла таҙартырға",
+       "rcfilters-show-new-changes": "Һуңғы үҙгәртеүҙәрҙе ҡарап сығырға",
+       "rcfilters-previous-changes-label": "Элек ҡаралған үҙгәртеүҙәр",
+       "rcfilters-search-placeholder": "Фильтрҙарҙың һуңғы үҙгәрештәре (ҡарап сығығыҙ йәки индерә башлағыҙ)",
+       "rcfilters-invalid-filter": "Ярамаған фильтр",
+       "rcfilters-empty-filter": "Әүҙем фильтрҙар юҡ. Бөтә үҙгәртеүҙәр ҙә күрһәтелә.",
+       "rcfilters-filterlist-title": "Фильтрҙар",
+       "rcfilters-filterlist-whatsthis": "Был нисек эшләй?",
+       "rcfilters-filterlist-feedbacklink": "Яңы (бета) фильтрҙар тураһында фекер яҙығыҙ",
+       "rcfilters-highlightbutton-title": "Һөҙөмтәләрҙе билдәләгеҙ",
+       "rcfilters-highlightmenu-title": "Төҫөн һайлағыҙ",
+       "rcfilters-highlightmenu-help": "Был сифатты белгертеү өсөн төҫ һайлағыҙ",
+       "rcfilters-filterlist-noresults": "Фильтрҙар табылманы",
+       "rcfilters-noresults-conflict": "Эҙләү критерийҙары ҡаршылыҡлы булған өсөн яуабы табылманы",
+       "rcfilters-state-message-subset": "Фильтр һөҙөмтәһеҙ буласаҡ, сөнки уның һөҙөмтәһе {{PLURAL:$2|киләһе киңерәк фильтр}} индерелгән (айырыу өсөн төҫ биреп ҡарағыҙ):$1",
+       "rcfilters-state-message-fullcoverage": "Төркөмдәге барлыҡ фильтрҙы ла һайлау бер нимәне лә һайламау менән бер, шуға ла был фильтрҙың әһәмиәте булмаясаҡ. Бәйләнгән төркөмдәр:$1",
+       "rcfilters-filtergroup-authorship": "Авторлыҡты мөхәррирләү",
+       "rcfilters-filter-editsbyself-label": "Һин индергән үҙгәртеүҙәр",
+       "rcfilters-filter-editsbyself-description": "Һинең өлөшөң",
+       "rcfilters-filter-editsbyother-label": "Башҡа ҡатнашыусылар индергән үҙгәртеүҙәр",
+       "rcfilters-filter-editsbyother-description": "Һинән башҡа барһының да үҙгәртеүҙәре",
+       "rcfilters-filtergroup-userExpLevel": "Ҡатнашыусыны теркәү һәм уның тәжрибәһе",
+       "rcfilters-filter-user-experience-level-registered-label": "Теркәлгән",
+       "rcfilters-filter-user-experience-level-registered-description": "Теркәлгән мөхәррирҙәр",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Теркәлмәгән",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Системаға инмәгән мөхәррирҙәр",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Яңы килгәндәр",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10 төҙәтеүҙән аҙ һәм 4 көн эшләүҙән кәм булған теркәлгән мөхәррирҙәр",
+       "rcfilters-filter-user-experience-level-learner-label": "Уҡыусылар",
+       "rcfilters-filter-user-experience-level-learner-description": "Тәжрибәһе \"Яңы килеүсе\" һәм \"Оҫта ҡулланыусы\" кимәле араһында булған теркәлгән мөхәррирҙәр",
+       "rcfilters-filter-user-experience-level-experienced-label": "Тәжрибәле ҡулланыусылар",
+       "rcfilters-filter-user-experience-level-experienced-description": "Төҙәтеүҙәре 500-ҙән күберәк һәм  әүҙем эш көнө 30 көндән ашҡан теркәлгән мөхәррирҙәр",
+       "rcfilters-filtergroup-automated": "Автоматлаштырылған өлөш",
+       "rcfilters-filter-bots-label": "Бот",
+       "rcfilters-filter-bots-description": "Автоматик ҡоралдар ярҙамында эшләнгән төҙәтеүҙәр",
+       "rcfilters-filter-humans-label": "Кеше (бот түгел)",
+       "rcfilters-filter-humans-description": "Мөхәррирҙәр индерген төҙәтеүҙәр",
+       "rcfilters-filtergroup-reviewstatus": "Тикшереү статусы",
+       "rcfilters-filter-patrolled-label": "Тикшерелгән",
+       "rcfilters-filter-patrolled-description": "Тикшерелгән тип билдәләнгән төҙәтеүҙәр",
+       "rcfilters-filter-unpatrolled-label": "Тикшерелмәгәндәр",
+       "rcfilters-filter-unpatrolled-description": "Тикшерелгән тип күрһәтелмәгән төҙәтеүҙәр",
+       "rcfilters-filtergroup-significance": "Мәғәнәһе",
+       "rcfilters-filter-minor-label": "Аҙ ғына төҙәтеүҙәр",
+       "rcfilters-filter-minor-description": "Автор аҙ ғына тип күрһәткән төҙәтеүҙәр",
+       "rcfilters-filter-major-label": "Ғәҙәти төҙәтеүҙәр",
+       "rcfilters-filter-major-description": "Аҙ ғына тип күрһәтелмәгән төҙәтеүҙәр",
+       "rcfilters-filtergroup-watchlist": "Күҙәтеү теҙмәһе",
+       "rcfilters-filter-watchlist-watched-label": "Күҙәтеү теҙмәһендә",
+       "rcfilters-filter-watchlist-watched-description": "Һинең күҙәтеү теҙмәһендә биттәрҙең үҙгәрештәре",
+       "rcfilters-filter-watchlist-watchednew-label": "Күҙәтеү теҙмәһендәге яңы үҙгәрештәр",
+       "rcfilters-filter-watchlist-watchednew-description": "Һеҙ үҙгәреш индергән мәлдән алып ҡарамаған биттәрҙәге үҙгәрештәр.",
+       "rcfilters-filter-watchlist-notwatched-label": "Күҙәтеү теҙмәһендә юҡ",
+       "rcfilters-filter-watchlist-notwatched-description": "Һеҙ һылтанған биттән башҡа барлыҡ үҙгәрештәр.",
+       "rcfilters-filtergroup-changetype": "Үҙгәреш төрө",
+       "rcfilters-filter-pageedits-label": "Биттәрҙе мөхәррирләү",
+       "rcfilters-filter-pageedits-description": "Вики йөкмәткеһен, фекерләшеү, категориялар яҙмаһын мөхәррирләү...",
+       "rcfilters-filter-newpages-label": "Бит төҙөү",
+       "rcfilters-filter-newpages-description": "Яңы бит булдырыуға килтергән мөхәррирләү",
+       "rcfilters-filter-categorization-label": "Категорияларҙы үҙгәртеү",
+       "rcfilters-filter-categorization-description": "Категориларҙан алынған йәки өҫтәлгән биттәрҙәге яҙыуҙар",
+       "rcfilters-filter-logactions-label": "Теркәлгән эш-хәрәкәттәр",
+       "rcfilters-filter-logactions-description": "Административ эш-хәрәкәттәр, аккаунттар булдырыу, биттәрҙе юйыу, тейәү...",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "\"Аҙ ғына үҙгәртеүҙәр\" фильтры башҡа бер йәки бер нисә фильтр менән талаша, сөнки билдәләнгән төр үҙгәрештәр \"аҙ ғына\" була алмай. Талашҡан фильтрҙар \"Әүҙем фильтрҙар\" өлкәһендә өҫтә күрһәтелгән.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Билдәләнгән үҙгәрештәр \"аҙ ғына\" тип атала алмай, шуға был фильтр үҙгәртеүҙәрҙең $1 фильтры менән талаша.",
+       "rcfilters-typeofchange-conflicts-hideminor": "Был төҙәтеү һымаҡ фильтр \"аҙ ғына төҙәтеү\" фильтрҙары менән талаша. Билдәләнгән был төҙәтеүҙәр \"аҙ ғына\" була алмай.",
+       "rcfilters-filtergroup-lastRevision": "Һуңғы версиялар",
+       "rcfilters-filter-lastrevision-label": "Ағымдағы версия",
+       "rcfilters-filter-lastrevision-description": "Биттәге иң һуңғы үҙгәртеү генә",
+       "rcfilters-filter-previousrevision-label": "Һуңғы версия түгел",
+       "rcfilters-filter-previousrevision-description": "\"Һуңғы версия\" булмаған барлыҡ төҙәтеүҙәр",
+       "rcfilters-filter-excluded": "Рөхсәт юҡ",
+       "rcfilters-tag-prefix-namespace-inverted": "<Strong>: </strong> $1 түгел",
+       "rcfilters-exclude-button-off": "Һайланғанды алып ташларға",
+       "rcfilters-exclude-button-on": "Һайланғанды алып ташалу",
+       "rcfilters-view-advanced-filters-label": "Киңәйтелгән фильтрҙар",
+       "rcfilters-view-tags": "Тегтары булған үҙгәртеүҙәр",
+       "rcfilters-view-namespaces-tooltip": "Фильтрҙың исемдәр яланындағы һөҙөмтәһе",
+       "rcfilters-view-tags-tooltip": "Үҙгәртеү билдәләрен ҡулланған фильтрҙың һөҙөмтәһе",
+       "rcfilters-view-return-to-default-tooltip": "Фильтрҙың төп менюһына ҡайтыу",
+       "rcfilters-liveupdates-button": "Автоматик яңыртыу",
+       "rcfilters-liveupdates-button-title-on": "Автоматик яңыртыуҙы һүндереү",
+       "rcfilters-liveupdates-button-title-off": "Яңы үҙгәрештәрҙе килеп сығыу менән күрһәтергә",
        "rcnotefrom": "Аҫта <strong>$3, $4</strong> ҡарата {{PLURAL:$5|үҙгәртеүҙәр күрһәтелгән}} (<strong>$1</strong> күберәк түгел).",
+       "rclistfromreset": "Дата һайлауҙы һүндереү",
        "rclistfrom": "$3 $2 алып яңы үҙгәртеүҙәрҙе күрһәт.",
        "rcshowhideminor": "бәләкәй төҙәтеүҙәрҙе $1",
        "rcshowhideminor-show": "Күрһәтергә",
        "file-thumbnail-no": "Файлдың исеме <strong>$1</strong> менән башлана.\nБәлки, ул рәсемдең бәләкәйтелгән өлгөһөлөр ''(шартлы рәсем)''.\nӘгәр һеҙҙә был рәсемдең ҙур өлгөһө булһа, зинһар, уны керетегеҙ йәки файлдың исемен үҙгәртегеҙ.",
        "fileexists-forbidden": "Бындай исемле файл бар инде һәм ул үҙгәртелә алмай.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм уны икенсе исем аҫтында тейәгеҙ.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Бындай исемле файл дөйөм файл һаҡлағыста бар инде.\nӘгәр һеҙ шулай ҙа был файлды тейәргә теләһәгеҙ, зинһар, кире ҡайтығыҙ һәм яңы исем һайлағыҙ.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "Был тейәү файлдың ағымдағы версияһы <strong>[[:$1]]</strong> там ише",
+       "fileexists-duplicate-version": "Был тейәү <strong>[[:$1]]</strong> файлының {{PLURAL:$2|иҫкерәк версияһының|иҫкерәк версияларының}} там ише булып тора.",
        "file-exists-duplicate": "Был файл түбәндәге {{PLURAL:$1|1=файл|файлдар}} менән тап килә:",
        "file-deleted-duplicate": "Оҡшаш файл ([[:$1]]) юйылғайны инде. Уны ҡайтанан тейәр алдынан, зинһар, файлды юйыу тарихын ҡарағыҙ.",
        "file-deleted-duplicate-notitle": "Ошоға оҡшаған файл юйылған,ә исеме тыйылған булған. Яңынан тейәү алдынан администратор хоҡуғы булған кешенән тыйылған файлдарҙы ҡарап сығыуын һорарға кәрәк.",
        "php-uploaddisabledtext": "Файлдар тейәү PHP көйләүҙәрендә рөхсәт ителмәй. Зинһар, file_uploads көйләүен тикшерегеҙ.",
        "uploadscripted": "Файлда булған HTML-кодты йәки скриптты браузер дөрөҫ эшкәртмәүе мөмкин.",
        "upload-scripted-pi-callback": "XML стилендәге таблицаны эшкәртеү инструкцияһы булған файлды тейеп булмай.",
+       "upload-scripted-dtd": "Ят DTD-белдереүе булған SVG-файлдарҙы тейәп булмай.",
        "uploaded-script-svg": "Тейәлгән SVG-файлында хәүефле  «$1» элементы табылды.",
        "uploaded-hostile-svg": "Тейәлгән SVG-файлда хәүефле CSS-код табылды.",
        "uploaded-event-handler-on-svg": "SVG-файлдары өсөн  <code>$1=\"$2\"</code> атрибуты ҡуйыу рөхсәт ителмәй.",
        "upload-http-error": "HTTP хата килеп сыҡты: $1",
        "upload-copy-upload-invalid-domain": "Был доменға ҡараған сайттарҙан файл күсереү асыҡ түгел",
        "upload-foreign-cant-upload": "Вики ситтәге репозиторийға файл тейәргә көйләнмәгән.",
+       "upload-foreign-cant-load-config": "Файлдарҙы тейәү юлын тыштағы файл-һаҡлағысҡа тейәп булманы.",
+       "upload-dialog-disabled": "Был вики-сайтта файлдарҙы диалог тәҙрәһе ярҙамында тейәү мөмкинлеге һүндерелгән.",
        "upload-dialog-title": "Файлды тейәргә",
        "upload-dialog-button-cancel": "Кире алырға",
+       "upload-dialog-button-back": "Артҡа",
        "upload-dialog-button-done": "Әҙер",
        "upload-dialog-button-save": "Һаҡларға",
        "upload-dialog-button-upload": "Тейәргә",
        "uploadstash-errclear": "Файлдарҙы таҙартып булманы.",
        "uploadstash-refresh": "Файлдар исемлеген яңыртырға",
        "uploadstash-thumbnail": "һүрәттәрҙе ҡарау",
+       "uploadstash-exception": "Тейәлгәнде ваҡытлыса һаҡлауыста ($1):«$2» һаҡлап булманы.",
        "invalid-chunk-offset": "Ҡабул ителмәгән фрагмент шылыуы",
        "img-auth-accessdenied": "Керергә рөхсәт ителмәй",
        "img-auth-nopathinfo": "PATH_INFO юҡ.\nҺеҙҙең сервер был мәғлүмәтте ебәреү өсөн көйләнмәгән.\nУның CGI нигеҙендә эшләүе һәм img_auth ҡулланмауы мөмкин.\nТулыраҡ мәғлүмәт: https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "filerevert-submit": "Кире алырға",
        "filerevert-success": "'''[[Media:$1|$1]]''' [$2 $3 булдырылған $4 өлгөһөнә] ҡайтарылды.",
        "filerevert-badversion": "Файлдың күрһәтелгән ваҡыт билдәһе менән алдағы урындағы өлгөһө юҡ.",
+       "filerevert-identical": "Ағымдағы версия һайланғаны менән бер иш.",
        "filedelete": "$1 юйырға",
        "filedelete-legend": "Файлды юйырға",
        "filedelete-intro": "Һеҙ '''[[Media:$1|$1]]''' файлын бөтә тарихы менән бергә юйырға йыйынаһығыҙ.",
        "pageswithprop-legend": "Үҙенсәлектәре ҡайтанан билдәләнгән биттәр",
        "pageswithprop-text": "Бында айырым үҙенсәлектәре ҡулдан яңыртып билдәләнгән биттәр һанала.",
        "pageswithprop-prop": "Үҙенсәлектең атамаһы:",
+       "pageswithprop-reverse": "Кире тәртиптә айырыу.",
+       "pageswithprop-sortbyvalue": "Сифаты буйынса айырыу",
        "pageswithprop-submit": "Табырға",
        "pageswithprop-prophidden-long": "Текст үҙенсәлегенең оҙон мәғәнәһе йәшерелгән ($1)",
        "pageswithprop-prophidden-binary": "ике тармаҡлы үҙенсәлектең мәғәнәһе йәшерелгән ($1)",
        "uncategorizedcategories": "Категорияланмаған категориялар",
        "uncategorizedimages": "Категорияланмаған файлдар",
        "uncategorizedtemplates": "Категорияланмаған ҡалыптар",
+       "uncategorized-categories-exceptionlist": "# Бында Special:UncategorizedCategories телгә алынырға тейеш булмаған категориялар теҙмәһе бар. Берәр юллап, «*» тамғаһынан башлап. Башҡа тамға (ара ҡалдырыуҙы ла ҡушып) менән башланған юлдар кире ҡағыла. Фекерҙәрегеҙ өсөн «#» ҡулланығыҙ.",
        "unusedcategories": "Ҡулланылмаған категориялар",
        "unusedimages": "Ҡулланылмаған файлдар",
        "wantedcategories": "Кәрәкле категориялар",
        "apisandbox-sending-request": "API-ғариза ебәреү",
        "apisandbox-loading-results": "API-яуап алыу",
        "apisandbox-results-error": " API-яуап алғанда хата китте: $1.",
+       "apisandbox-results-login-suppressed": "Был һорау теркәлмәгән ҡулланыусынан килгән тип ҡаралған. Сөнки һорау браузерҙағы домен ҡағиҙәһенә тап кимәүе ихтимал. Иғтибар, API ҡомлоҡтоң токендарын автоматик эшкәртеү бындай һорауҙарҙа яңылыша; зинһар, ҡулдан яҙып тултырығыҙ.",
+       "apisandbox-request-selectformat-label": "Һорауҙың билдәләрен шулай күрһәтергә:",
+       "apisandbox-request-format-url-label": "URL-һорау юлы",
        "apisandbox-request-url-label": "Һоратыуҙың URL-адресы:",
+       "apisandbox-request-json-label": "JSON-ды һорап алырға:",
        "apisandbox-request-time": "Мөрәжәғәт ваҡыты:{{PLURAL:$1|$1 мс}}",
        "apisandbox-results-fixtoken": "Токенды төҙөтегеҙ, ебәреүҙе ҡабатлағыҙ",
        "apisandbox-results-fixtoken-fail": " «$1» токенына инеп булманы",
        "apisandbox-alert-page": "Был биттә ҡайһы бер ҡырҙар дөрөҫ түгел.",
        "apisandbox-alert-field": "Был ҡыр дәүмәле ярамай.",
+       "apisandbox-continue": "Дауам итергә",
+       "apisandbox-continue-clear": "Таҙартыу",
+       "apisandbox-multivalue-all-namespaces": "$1 (Барлыҡ исемдәр яланы)",
+       "apisandbox-multivalue-all-values": "$1 (барлыҡ мәғәнәләр)",
        "booksources": "Китап сығанаҡтары",
        "booksources-search-legend": "Китап сығанаҡтарын эҙлә",
        "booksources-search": "Эҙләү",
        "booksources-text": "Түбәндәге исемлектә — китаптар һатыу менән шөғөлләнеүсе сайттарға һәм китапханаларҙың эҙләү системаларына һылтанмалар, һәм уларҙа һеҙ эҙләгән китаптар тураһында өҫтәмә мәғлүмәт булыуы мөмкин.",
        "booksources-invalid-isbn": "Күрһәтелгән ISBN номерҙа хата булырға тейеш. Зинһар, номерҙы сығанаҡтан дөрөҫ күсереүегеҙҙе тикшерегеҙ.",
+       "magiclink-tracking-rfc": "RFC һылтанмаһы булған биттәр",
+       "magiclink-tracking-rfc-desc": "Был бит RFC һылтанмаһын ҡуллана. Ҡара [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] - нисек күсереү тураһында.",
+       "magiclink-tracking-pmid": "PMID серле һылтанмаһын ҡулланған биттәр",
+       "magiclink-tracking-pmid-desc": "Был бит PMID серле һылтанмаһын ҡуллана. Ҡара [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] нисек күсереү тураһында.",
+       "magiclink-tracking-isbn": "ISBN серле һылтанмаһын ҡулланған биттәр",
        "specialloguserlabel": "Башҡарыусы:",
        "speciallogtitlelabel": "Маҡсат (исем йәки ҡулланыусы {{ns:user}}):",
        "log": "Журналдар",
        "import-nonewrevisions": "Бөтә өлгөләр бығаса тейәлгән булған.",
        "xml-error-string": "$2 юлда, $3 урында ($4 байт) $1: $5",
        "import-upload": "XML-мәғлүмәт тейәргә",
-       "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nЗинһар, тағы ҡабатлап ҡарағыҙ. [[Special:UserLogout|системанан сығырға]]",
+       "import-token-mismatch": "Сессия мәғлүмәттәре юғалған.\nҺеҙ эш сеансын бөтөргәнһегеҙ. '''Ултырыш идентификаторығыҙҙы тикшереп, ҡабатлап ҡарағыҙ.'''\nБарыбер килеп сыҡмаһа, [[Special:UserLogout|системанан сығып]], яңынан инегеҙ, шулай уҡ браузер был сайттың cookies ҡабул итеү мөмкинлеген тикшерегеҙ.",
        "import-invalid-interwiki": "Күрһәтелгән вики проекттан тейәү мөмкин түгел.",
        "import-error-edit": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте мөхәррирләү тыйылған.",
        "import-error-create": "«$1» битен импортлап булманы, сөнки һеҙгә ул битте яһау тыйылған.",
        "compare-invalid-title": "Керетелгән исем дөрөҫ түгел.",
        "compare-title-not-exists": "Һеҙ күрһәткән исем юҡ.",
        "compare-revision-not-exists": "Һеҙ күрһәткән версия юҡ.",
+       "diff-form": "Айырмалар",
        "dberr-problems": "Ғәфү итегеҙ! Был сайтта техник ҡыйынлыҡтар тыуҙы.",
        "dberr-again": "Битте бер нисә минуттан яңыртып ҡарағыҙ.",
        "dberr-info": "(Мәғлүмәттәр базаһы серверы менән тоташтырылып булмай: $1)",
index b2493c5..7927eb9 100644 (file)
@@ -53,6 +53,7 @@
        "tog-watchlisthideminor": "Хаваць дробныя праўкі ў сьпісе назіраньня",
        "tog-watchlisthideliu": "Хаваць праўкі зарэгістраваных удзельнікаў у сьпісе назіраньня",
        "tog-watchlistreloadautomatically": "Аўтаматычна перазагружаць сьпіс назіраньня пры зьмене фільтру (патрэбны JavaScript)",
+       "tog-watchlistunwatchlinks": "Дадаць спасылкі «назіраць/не назіраць» да элемэнтаў сьпісу назіраньня (патрабуецца JavaScript для актывацыі функцыі)",
        "tog-watchlisthideanons": "Хаваць праўкі ананімаў у сьпісе назіраньня",
        "tog-watchlisthidepatrolled": "Хаваць патруляваныя праўкі ў сьпісе назіраньня",
        "tog-watchlisthidecategorization": "Хаваць катэгарызацыю старонак",
        "permissionserrorstext-withaction": "Вы ня маеце дазволу на $2 з {{PLURAL:$1|1=наступнай прычыны|наступных прычынаў}}:",
        "contentmodelediterror": "Вы ня можаце рэдагаваць гэтую вэрсію, бо яе мадэль зьместу — <code>$1</code>, якая адрозьніваецца ад цяперашняй мадэлі зьместу старонкі — <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Увага: вы ствараеце старонку, якая раней была выдаленая.</strong>\n\nУпэўніцеся, што стварэньне гэтай старонкі неабходнае.\nНіжэй пададзеныя журналы выдаленьняў і пераносаў гэтай старонкі:",
-       "moveddeleted-notice": "Гэта старонка была выдаленая. Журналы выдаленьняў і пераносаў для гэтай старонкі пададзеныя ніжэй.",
-       "moveddeleted-notice-recent": "Выбачайце, гэтая старонка была нядаўна выдаленая (цягам апошніх 24 гадзінаў).\nЖурналы выдаленьняў і пераносаў для гэтай старонкі пададзеныя ніжэй для даведкі.",
+       "moveddeleted-notice": "Гэта старонка была выдаленая. Журналы выдаленьняў, абаронаў і пераносаў для гэтай старонкі пададзеныя ніжэй для даведкі.",
+       "moveddeleted-notice-recent": "Выбачайце, гэтая старонка была нядаўна выдаленая (цягам апошніх 24 гадзінаў).\nЖурналы выдаленьняў, абаронаў і пераносаў для гэтай старонкі пададзеныя ніжэй для даведкі.",
        "log-fulllog": "Паказаць журнал цалкам",
        "edit-hook-aborted": "Рэдагаваньне скасаванае працэдурай-перахопнікам.\nТлумачэньняў не было.",
        "edit-gone-missing": "Немагчыма абнавіць старонку.\nПадобна, што яна была выдаленая.",
        "rcfilters-filter-excluded": "Выключаны",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
        "rcfilters-exclude-button-off": "Выключыць абранае",
+       "rcfilters-exclude-button-on": "За выключэньнем абранага",
+       "rcfilters-view-advanced-filters-label": "Пашыраныя фільтры",
        "rcfilters-view-tags": "Праўкі зь меткамі",
        "rcfilters-view-namespaces-tooltip": "Фільтар вынікаў паводле прасторы назваў",
        "rcfilters-view-tags-tooltip": "Фільтар вынікаў з дапамогай метак правак",
        "rcfilters-view-return-to-default-tooltip": "Вярнуцца да галоўнага мэню фільтраў",
        "rcfilters-liveupdates-button": "Імгненныя абнаўленьні",
+       "rcfilters-liveupdates-button-title-on": "Адключыць аўтаматычнае абнаўленьне",
+       "rcfilters-liveupdates-button-title-off": "Паказваць новыя зьмены як толькі яны адбываюцца",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "rclistfromreset": "Скінуць выбар даты",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "compare-invalid-title": "Пазначаная няслушная назва.",
        "compare-title-not-exists": "Пазначаная старонка не існуе.",
        "compare-revision-not-exists": "Пазначаная вэрсія не існуе.",
+       "diff-form": "Адрозьненьні",
        "dberr-problems": "Прабачце! На гэтым сайце ўзьніклі тэхнічныя цяжкасьці.",
        "dberr-again": "Паспрабуйце пачакаць некалькі хвілінаў і абнавіць.",
        "dberr-info": "(Немагчыма злучыцца з базай зьвестак: $1)",
index 6815556..d45d38e 100644 (file)
        "rcfilters-savedqueries-add-new-title": "বর্তমান ছাঁকনির সেটিং সংরক্ষণ করুন",
        "rcfilters-restore-default-filters": "পূর্বনির্ধারিত ছাঁকনি পুনরুদ্ধার করুন",
        "rcfilters-clear-all-filters": "সব ছাঁকনি পরিষ্কার করুন",
+       "rcfilters-show-new-changes": "নতুনতর পরিবর্তনসমূহ দেখুন",
        "rcfilters-search-placeholder": "সাম্প্রতিক পরিবর্তনসমূহ ছাঁকুন (ব্রাউজ বা টাইপ করা শুরু করুন)",
        "rcfilters-invalid-filter": "অকার্যকর ছাঁকনি",
        "rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।",
        "compare-invalid-title": "আপনার প্রদেয় শিরোনামটি সঠিক নয়।",
        "compare-title-not-exists": "আপনার কাঙ্ক্ষিত শিরোনামটি নেই।",
        "compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
+       "diff-form": "একটি '''ফরম'''",
+       "permanentlink-submit": "এই সংশোধনে যান",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
        "dberr-info": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি: $1)",
index 75e13f6..1bce36f 100644 (file)
        "compare-invalid-title": "Naslov koji ste unijeli je nevaljan.",
        "compare-title-not-exists": "Naslov koji ste naveli ne postoji.",
        "compare-revision-not-exists": "Izmjena koji ste naveli ne postoji.",
+       "diff-form": "'''obrazac'''",
        "dberr-problems": "Žao nam je! Ova stranica ima određene tehničke poteškoće.",
        "dberr-again": "Pokušajte pričekati par minuta i zatim osvježiti.",
        "dberr-info": "(ne može se pristupiti bazi podataka: $1)",
index dca845c..c6c91c5 100644 (file)
        "compare-invalid-title": "El títol que heu especificat no és vàlid.",
        "compare-title-not-exists": "El títol que heu especificat no existeix.",
        "compare-revision-not-exists": "La revisió que heu especificat no existeix.",
+       "diff-form": "un '''formulari'''",
        "dberr-problems": "Ho sentim. Aquest lloc web està experimentant dificultats tècniques.",
        "dberr-again": "Intenteu esperar uns minuts i tornar a carregar.",
        "dberr-info": "(No es pot accedir a la base de dades: $1)",
index 52e1e99..ac75826 100644 (file)
@@ -73,6 +73,7 @@
        "tog-watchlisthideminor": "Na seznamu sledovaných stránek skrýt malé editace",
        "tog-watchlisthideliu": "Na seznamu sledovaných stránek skrýt editace přihlášených uživatelů",
        "tog-watchlistreloadautomatically": "Při změně filtru automaticky aktualizovat seznam sledovaných stránek (vyžaduje JavaScript)",
+       "tog-watchlistunwatchlinks": "K položkám sledovaných stránek přidat odkazy pro sledování/nesledování (rychlé přepnutí vyžaduje JavaScript)",
        "tog-watchlisthideanons": "Na seznamu sledovaných stránek skrýt editace nepřihlášených uživatelů",
        "tog-watchlisthidepatrolled": "Skrýt prověřené editace ve sledovaných stránkách",
        "tog-watchlisthidecategorization": "Skrýt kategorizaci stránek",
        "permissionserrorstext-withaction": "Z {{PLURAL:$1|následujícího důvodu|následujících důvodů}} nemáte oprávnění $2:",
        "contentmodelediterror": "Tuto revizi nemůžete editovat, protože model jejího obsahu je <code>$1</code>, což se liší od aktuálního modelu obsahu této stránky, kterým je <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Upozornění: Pokoušíte se znovuzaložit stránku, která byla v minulosti smazána.'''\n\nZvažte, zda je vhodné v editaci této stránky pokračovat.\nNíže vidíte soupis přesunů a smazání této stránky:",
-       "moveddeleted-notice": "Tato stránka byla smazána.\nPodrobnosti si můžete prohlédnout v níže zobrazeném seznamu provedených přesunů a smazání této stránky.",
-       "moveddeleted-notice-recent": "Omlouváme se, ale tato stránka byla nedávno (v posledních 24 hodinách) smazána. Pro úplnost je níže zobrazen soupis přesunů a smazání této stránky.",
+       "moveddeleted-notice": "Tato stránka byla smazána.\nPodrobnosti si můžete prohlédnout v níže zobrazeném seznamu provedených smazání, zamčení a přesunů této stránky.",
+       "moveddeleted-notice-recent": "Omlouváme se, ale tato stránka byla nedávno (v posledních 24 hodinách) smazána. Pro úplnost je níže zobrazen soupis smazání, zamčení a přesunů této stránky.",
        "log-fulllog": "Zobrazit všechny záznamy",
        "edit-hook-aborted": "Editace byla bez bližšího vysvětlení zrušena přípojným bodem.",
        "edit-gone-missing": "Stránku se nepodařilo aktualizovat.\nZřejmě byla smazána.",
        "prefs-editwatchlist-clear": "Vyprázdnit seznam sledovaných stránek",
        "prefs-watchlist-days": "Počet dní zobrazených ve sledovaných stránkách:",
        "prefs-watchlist-days-max": "Maximálně $1 {{PLURAL:$1|den|dny|dní}}",
-       "prefs-watchlist-edits": "Počet editací zobrazených ve zdokonalených sledovaných stránkách:",
+       "prefs-watchlist-edits": "Maximální počet editací zobrazených ve sledovaných stránkách:",
        "prefs-watchlist-edits-max": "Maximum: 1000",
        "prefs-watchlist-token": "Klíč k seznamu sledovaných stránek:",
        "prefs-misc": "Různé",
        "recentchanges-submit": "Zobrazit",
        "rcfilters-legend-heading": "<strong>Seznam zkratek:</strong>",
        "rcfilters-group-results-by-page": "Seskupit výsledky podle stránky",
+       "rcfilters-grouping-title": "Seskupování",
        "rcfilters-activefilters": "Aktivní filtry",
        "rcfilters-advancedfilters": "Pokročilé filtry",
        "rcfilters-limit-title": "Zobrazit změny",
        "rcfilters-restore-default-filters": "Obnovit výchozí filtry",
        "rcfilters-clear-all-filters": "Zrušit všechny filtry",
        "rcfilters-show-new-changes": "Zobrazit nejnovější změny",
+       "rcfilters-previous-changes-label": "Dříve prohlédnuté změny",
        "rcfilters-search-placeholder": "Filtrovat nedávné změny (prohlížejte nebo začněte psát)",
        "rcfilters-invalid-filter": "Neplatný filtr",
        "rcfilters-empty-filter": "Žádné aktivní filtry. Zobrazeny jsou všechny příspěvky.",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ne</strong> $1",
        "rcfilters-exclude-button-off": "Vynechat vybrané",
        "rcfilters-exclude-button-on": "Vybrané vynechány",
+       "rcfilters-view-advanced-filters-label": "Pokročilé filtry",
        "rcfilters-view-tags": "Označené editace",
        "rcfilters-view-namespaces-tooltip": "Filtrovat výsledky podle jmenného prostoru",
        "rcfilters-view-tags-tooltip": "Filtrovat výsledky pomocí značek editací",
        "rcfilters-view-return-to-default-tooltip": "Vrátit se do hlavního filtrovacího menu",
        "rcfilters-liveupdates-button": "Živé aktualizace",
+       "rcfilters-liveupdates-button-title-on": "Vypnout živé aktualizace",
+       "rcfilters-liveupdates-button-title-off": "Zobrazovat nové změny, jakmile jsou zveřejněny",
        "rcnotefrom": "Níže {{PLURAL:$5|je změna|jsou změny}} od <strong>$3, $4</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
        "rclistfromreset": "Obnovit výběr data",
        "rclistfrom": "Ukázat nové změny, počínaje od $2, $3",
        "compare-invalid-title": "Zadaný název je neplatný.",
        "compare-title-not-exists": "Zadaný název neexistuje.",
        "compare-revision-not-exists": "Zadaná revize neexistuje.",
+       "diff-form": "Rozdíly",
+       "diff-form-oldid": "ID staré revize (nepovinné)",
+       "diff-form-submit": "Zobrazit rozdíly",
+       "permanentlink": "Trvalý odkaz",
+       "permanentlink-revid": "ID revize",
+       "permanentlink-submit": "Přejít na revizi",
        "dberr-problems": "Promiňte! Tento server má v tuto chvíli technické problémy.",
        "dberr-again": "Zkuste několik minut počkat a poté znovu načíst stránku.",
        "dberr-info": "(Nelze se připojit k databázi: $1)",
index 5d6cb27..7e85931 100644 (file)
        "tog-watchlisthideminor": "Kleine Bearbeitungen in der Beobachtungsliste ausblenden",
        "tog-watchlisthideliu": "Bearbeitungen angemeldeter Benutzer in der Beobachtungsliste ausblenden",
        "tog-watchlistreloadautomatically": "Sofern ein Filter geändert wurde, die Beobachtungsliste automatisch neu laden (erfordert JavaScript)",
+       "tog-watchlistunwatchlinks": "Direkte Links zum (Ent-)Beobachten bei Einträgen in der Beobachtungsliste hinzufügen (für diese Funktion ist JavaScript erforderlich)",
        "tog-watchlisthideanons": "Bearbeitungen anonymer Benutzer (IP-Adressen) in der Beobachtungsliste ausblenden",
        "tog-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
        "tog-watchlisthidecategorization": "Kategorisierungen von Seiten in der Beobachtungsliste ausblenden",
        "permissionserrorstext-withaction": "Du bist aus {{PLURAL:$1|dem folgenden Grund|den folgenden Gründen}} nicht berechtigt, $2:",
        "contentmodelediterror": "Du kannst diese Version nicht bearbeiten, da das Inhaltsmodell <code>$1</code> vom aktuellen Inhaltsmodell der Seite <code>$2</code> abweicht.",
        "recreate-moveddeleted-warn": "<strong>Achtung: Du erstellst eine Seite, die bereits früher gelöscht wurde.</strong>\n\nBitte prüfe sorgfältig, ob die erneute Seitenerstellung den Richtlinien entspricht.\nZu deiner Information folgt das Lösch- und Verschiebungs-Logbuch mit der Begründung für die vorhergehende Löschung:",
-       "moveddeleted-notice": "Diese Seite wurde gelöscht.\nZur Information folgt das Lösch- und Verschiebungs-Logbuch dieser Seite.",
-       "moveddeleted-notice-recent": "Diese Seite wurde kürzlich gelöscht (innerhalb der letzten 24 Stunden).\nZur Information folgt das Lösch- und Verschiebungs-Logbuch dieser Seite.",
+       "moveddeleted-notice": "Diese Seite wurde gelöscht.\nZur Information folgt das Lösch-, Seitenschutz- und Verschiebungs-Logbuch dieser Seite.",
+       "moveddeleted-notice-recent": "Diese Seite wurde kürzlich gelöscht (innerhalb der letzten 24 Stunden).\nZur Information folgt das Lösch-, Seitenschutz- und Verschiebungs-Logbuch dieser Seite.",
        "log-fulllog": "Alle Logbucheinträge ansehen",
        "edit-hook-aborted": "Die Bearbeitung wurde ohne Erklärung durch eine Schnittstelle abgebrochen.",
        "edit-gone-missing": "Die Seite konnte nicht aktualisiert werden.\nSie wurde anscheinend gelöscht.",
        "watching": "Beobachten …",
        "unwatching": "Nicht mehr beobachten …",
        "watcherrortext": "Beim Ändern der Beobachtungslisteneinstellungen für „$1“ ist ein Fehler aufgetreten.",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Alle Seiten als besucht markieren",
        "enotif_impersonal_salutation": "{{SITENAME}}-Benutzer",
        "enotif_subject_deleted": "{{SITENAME}}-Seite $1 wurde von {{GENDER:$2|$2}} gelöscht",
        "compare-invalid-title": "Der angegebene Seitenname ist ungültig.",
        "compare-title-not-exists": "Der angegebene Seitenname ist nicht vorhanden.",
        "compare-revision-not-exists": "Die angegebene Version ist nicht vorhanden.",
+       "diff-form": "Unterschiede",
+       "diff-form-oldid": "Alte Versionskennung (optional)",
+       "diff-form-revid": "Versionskennung des Unterschieds",
+       "diff-form-submit": "Unterschiede anzeigen",
+       "permanentlink": "Permanenter Link",
+       "permanentlink-revid": "Versionskennung",
+       "permanentlink-submit": "Gehe zu Version",
        "dberr-problems": "Entschuldigung. Diese Seite hat momentan technische Schwierigkeiten.",
        "dberr-again": "Warte einige Minuten und versuche dann neu zu laden.",
        "dberr-info": "(Auf die Datenbank konnte nicht zugegriffen werden: $1)",
index ad4e423..720a059 100644 (file)
@@ -53,7 +53,8 @@
                        "GR",
                        "Thodoris",
                        "Ftsalamp",
-                       "Kostas20142"
+                       "Kostas20142",
+                       "Nikosgranturismogt"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "prefs-labs": "Λειτουργίες των Labs",
        "prefs-user-pages": "Σελίδες του χρήστη",
        "prefs-personal": "Στοιχεία χρήστη",
-       "prefs-rc": "Πρόσφατες αλλαγές και εμφάνιση πολύ σύντομων άρθρων",
+       "prefs-rc": "Πρόσφατες αλλαγές",
        "prefs-watchlist": "Λίστα παρακολούθησης",
        "prefs-editwatchlist": "Επεξεργασία λίστας παρακολούθησης",
        "prefs-editwatchlist-label": "Επεξεργασία καταχωρίσεων στη λίστα παρακολούθησής σας:",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Προβολή",
        "rcfilters-activefilters": "Ενεργά φίλτρα",
+       "rcfilters-advancedfilters": "Σύνθετα Φίλτρα",
+       "rcfilters-limit-title": "Αλλαγές για εμφάνιση",
+       "rcfilters-days-title": "Πρόσφατες ημέρες",
+       "rcfilters-hours-title": "Πρόσφατες ώρες",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|μέρα|μέρες}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ώρα|ώρες}}",
+       "rcfilters-quickfilters": "Αποθηκευμένα φίλτρα",
        "rcfilters-savedqueries-rename": "Μετονομασία",
        "rcfilters-savedqueries-setdefault": "Ορισμός ως προεπιλογή",
+       "rcfilters-savedqueries-remove": "Αφαίρεση",
+       "rcfilters-savedqueries-new-name-label": "Όνομα",
        "rcfilters-restore-default-filters": "Επαναφορά προεπιλεγμένων φίλτρων",
        "rcfilters-clear-all-filters": "Εκκαθάριση όλων των φίλτρων",
        "rcfilters-search-placeholder": "Φιλτράρισμα πρόσφατων αλλαγών (περιηγηθείτε ή αρχίστε να πληκτρολογείτε)",
        "compare-invalid-title": "Ο τίτλος που καθορίσατε δεν είναι έγκυρος.",
        "compare-title-not-exists": "Ο τίτλος που καθορίσατε δεν υπάρχει.",
        "compare-revision-not-exists": "Η αναθεώρηση που καθορίσατε δεν υπάρχει.",
+       "diff-form": "μια '''φόρμα'''",
        "dberr-problems": "Λυπούμαστε! Αυτός ο ιστότοπος αντιμετωπίζει τεχνικές δυσκολίες.",
        "dberr-again": "Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.",
        "dberr-info": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων: $1)",
index 53f98f9..af8eda1 100644 (file)
@@ -30,7 +30,8 @@
                        "Anomie",
                        "Dr. Shikha Jaggi",
                        "Xð",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Dejavu"
                ]
        },
        "tog-underline": "Link underlining:",
        "tog-watchlisthidebots": "Hide bot edits from the watchlist",
        "tog-watchlisthideminor": "Hide minor edits from the watchlist",
        "tog-watchlisthideliu": "Hide edits by logged in users from the watchlist",
+       "tog-watchlistreloadautomatically": "Reload the watchlist automatically whenever a filter is changed (JavaScript required)",
        "tog-watchlisthideanons": "Hide edits by anonymous users from the watchlist",
        "tog-watchlisthidepatrolled": "Hide patrolled edits from the watchlist",
+       "tog-watchlisthidecategorization": "Hide categorization of pages",
        "tog-ccmeonemails": "Send me copies of emails I send to other users",
        "tog-diffonly": "Do not show page content below diffs",
        "tog-showhiddencats": "Show hidden categories",
        "october-date": "October $1",
        "november-date": "November $1",
        "december-date": "December $1",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Category|Categories}}",
        "category_header": "Pages in category ‘$1’",
        "subcategories": "Subcategories",
        "anontalk": "Talk",
        "navigation": "Navigation",
        "and": "&#32;and",
-       "qbfind": "Find",
-       "qbbrowse": "Browse",
-       "qbedit": "Edit",
-       "qbpageoptions": "This page",
-       "qbmyoptions": "My pages",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Actions",
        "namespaces": "Namespaces",
        "variants": "Variants",
        "searcharticle": "Go",
        "history": "Page history",
        "history_short": "History",
+       "history_small": "history",
        "updatedmarker": "updated since my last visit",
        "printableversion": "Printable version",
        "permalink": "Permanent link",
        "edit-local": "Edit local description",
        "create": "Create",
        "create-local": "Add local description",
-       "editthispage": "Edit this page",
-       "create-this-page": "Create this page",
        "delete": "Delete",
-       "deletethispage": "Delete this page",
-       "undeletethispage": "Undelete this page",
        "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
        "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
        "protect": "Protect",
        "protect_change": "change",
-       "protectthispage": "Protect this page",
        "unprotect": "Change protection",
-       "unprotectthispage": "Change protection of this page",
        "newpage": "New page",
-       "talkpage": "Discuss this page",
        "talkpagelinktext": "talk",
        "specialpage": "Special page",
        "personaltools": "Personal tools",
-       "articlepage": "View content page",
        "talk": "Discussion",
        "views": "Views",
        "toolbox": "Tools",
-       "userpage": "View user page",
-       "projectpage": "View project page",
+       "tool-link-userrights": "Change {{GENDER:$1|user}} groups",
+       "tool-link-userrights-readonly": "View {{GENDER:$1|user}} groups",
+       "tool-link-emailuser": "Email this {{GENDER:$1|user}}",
        "imagepage": "View file page",
        "mediawikipage": "View message page",
        "templatepage": "View template page",
        "nosuchspecialpage": "No such special page",
        "nospecialpagetext": "<strong>You have requested an invalid special page.</strong>\n\nA list of valid special pages can be found at [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Error",
+       "databaseerror": "Database error",
+       "databaseerror-text": "A database query error has occurred.\nThis may indicate a bug in the software.",
+       "databaseerror-textcl": "A database query error has occurred.",
+       "databaseerror-query": "Query: $1",
+       "databaseerror-function": "Function: $1",
+       "databaseerror-error": "Error: $1",
+       "transaction-duration-limit-exceeded": "To avoid creating high replication lag, this transaction was aborted because the write duration ($1) exceeded the $2 second limit.\nIf you are changing many items at once, try doing multiple smaller operations instead.",
+       "laggedslavemode": "<strong>Warning:</strong> Page may not contain recent updates.",
+       "readonly": "Database locked",
+       "enterlockreason": "Enter a reason for the lock, including an estimate of when the lock will be released",
+       "readonlytext": "The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.\n\nThe system administrator who locked it offered this explanation: $1",
        "missing-article": "The database did not find the text of a page that it should have found, named ‘$1’ $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
+       "missingarticle-rev": "(revision#: $1)",
+       "missingarticle-diff": "(Diff: $1, $2)",
+       "readonly_lag": "The database has been automatically locked while the slave database servers catch up to the master",
+       "nonwrite-api-promise-error": "The 'Promise-Non-Write-API-Action' HTTP header was sent but the request was to an API write module.",
+       "internalerror": "Internal error",
+       "internalerror_info": "Internal error: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
        "filecopyerror": "Could not copy file ‘$1’ to ‘$2’.",
        "filerenameerror": "Could not rename file ‘$1’ to ‘$2.’",
        "filedeleteerror": "Could not delete file ‘$1’.",
        "directorycreateerror": "Could not create directory ‘$1’.",
+       "directoryreadonlyerror": "Directory \"$1\" is read-only.",
+       "directorynotreadableerror": "Directory \"$1\" is not readable.",
        "filenotfound": "Could not find file ‘$1’.",
        "unexpected": "Unexpected value: ‘$1’=‘$2’.",
+       "formerror": "Error: Could not submit form.",
+       "badarticleerror": "This action cannot be performed on this page.",
        "cannotdelete": "The page or file ‘$1’ could not be deleted.\nIt may have already been deleted by someone else.",
+       "cannotdelete-title": "Cannot delete page \"$1\"",
+       "delete-hook-aborted": "Deletion aborted by hook.\nIt gave no explanation.",
+       "no-null-revision": "Could not create new null revision for page \"$1\"",
+       "badtitle": "Bad title",
+       "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
+       "title-invalid-empty": "The requested page title is empty or contains only the name of a namespace.",
+       "title-invalid-utf8": "The requested page title contains an invalid UTF-8 sequence.",
+       "title-invalid-interwiki": "The requested page title contains an interwiki link which cannot be used in titles.",
+       "title-invalid-talk-namespace": "The requested page title refers to a talk page that can not exist.",
+       "title-invalid-characters": "The requested page title contains invalid characters: \"$1\".",
+       "title-invalid-relative": "Title has relative path. Relative page titles (./, ../) are invalid, because they will often be unreachable when handled by user's browser.",
+       "title-invalid-magic-tilde": "The requested page title contains invalid magic tilde sequence (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "The requested page title is too long. It must be no longer than $1 {{PLURAL:$1|byte|bytes}} in UTF-8 encoding.",
+       "title-invalid-leading-colon": "The requested page title contains an invalid colon at the beginning.",
+       "perfcached": "The following data is cached and may not be up to date. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
+       "perfcachedts": "The following data is cached, and was last updated $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
+       "querypage-no-updates": "Updates for this page are currently disabled.\nData here will not presently be refreshed.",
+       "viewsource": "View source",
+       "viewsource-title": "View source for $1",
+       "actionthrottled": "Action throttled",
+       "actionthrottledtext": "As an anti-abuse measure, you are limited from performing this action too many times in a short space of time, and you have exceeded this limit.\nPlease try again in a few minutes.",
+       "protectedpagetext": "This page has been protected to prevent editing or other actions.",
+       "viewsourcetext": "You can view and copy the source of this page.",
+       "viewyourtext": "You can view and copy the source of <strong>your edits</strong> to this page.",
        "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "editinginterface": "'''Warning:''' You are editing a page which is used to provide interface text for the software.\nChanges to this page will affect the appearance of the user interface for other users on this wiki.\nTo add or change translations for all wikis, please use [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
+       "translateinterface": "To add or change translations for all wikis, please use [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
        "cascadeprotected": "This page has been protected from editing because it is transcluded in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the \"cascading\" option turned on:\n$2",
+       "namespaceprotected": "You do not have permission to edit pages in the <strong>$1</strong> namespace.",
+       "customcssprotected": "You do not have permission to edit this CSS page because it contains another user's personal settings.",
+       "customjsprotected": "You do not have permission to edit this JavaScript page because it contains another user's personal settings.",
+       "mycustomcssprotected": "You do not have permission to edit this CSS page.",
+       "mycustomjsprotected": "You do not have permission to edit this JavaScript page.",
+       "myprivateinfoprotected": "You do not have permission to edit your private information.",
+       "mypreferencesprotected": "You do not have permission to edit your preferences.",
+       "ns-specialprotected": "Special pages cannot be edited.",
+       "titleprotected": "This title has been protected from creation by [[User:$1|$1]].\nThe reason given is <em>$2</em>.",
+       "filereadonlyerror": "Unable to modify the file \"$1\" because the file repository \"$2\" is in read-only mode.\n\nThe system administrator who locked it offered this explanation: \"$3\".",
+       "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
+       "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
+       "exception-nologin": "Not logged in",
+       "exception-nologin-text": "Please log in to be able to access this page or action.",
+       "exception-nologin-text-manual": "Please $1 to be able to access this page or action.",
+       "virus-badscanner": "Bad configuration: Unknown virus scanner: <em>$1</em>",
+       "virus-scanfailed": "scan failed (code $1)",
+       "virus-unknownscanner": "unknown antivirus:",
+       "logouttext": "<strong>You are now logged out.</strong>\n\nNote that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
+       "cannotlogoutnow-title": "Cannot log out now",
+       "cannotlogoutnow-text": "Logging out is not possible when using $1.",
+       "welcomeuser": "Welcome, $1!",
+       "welcomecreation-msg": "Your account has been created.\nYou can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.",
+       "yourname": "Username:",
+       "userlogin-yourname": "Username",
+       "userlogin-yourname-ph": "Enter your username",
+       "createacct-another-username-ph": "Enter the username",
+       "yourpassword": "Password:",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Enter your password",
+       "createacct-yourpassword-ph": "Enter a password",
+       "yourpasswordagain": "Retype password:",
+       "createacct-yourpasswordagain": "Confirm password",
+       "createacct-yourpasswordagain-ph": "Enter password again",
+       "userlogin-remembermypassword": "Keep me logged in",
+       "userlogin-signwithsecure": "Use secure connection",
+       "cannotlogin-title": "Cannot log in",
+       "cannotlogin-text": "Logging in is not possible.",
+       "cannotloginnow-title": "Cannot log in now",
+       "cannotloginnow-text": "Logging in is not possible when using $1.",
+       "cannotcreateaccount-title": "Cannot create accounts",
+       "cannotcreateaccount-text": "Direct account creation is not enabled on this wiki.",
+       "yourdomainname": "Your domain:",
+       "password-change-forbidden": "You cannot change passwords on this wiki.",
+       "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
+       "login": "Log in",
+       "login-security": "Verify your identity",
+       "nav-login-createaccount": "Log in / create account",
+       "logout": "Log out",
+       "userlogout": "Log out",
+       "notloggedin": "Not logged in",
+       "userlogin-noaccount": "Don't have an account?",
+       "userlogin-joinproject": "Join {{SITENAME}}",
+       "createaccount": "Create account",
+       "userlogin-resetpassword-link": "Forgot your password?",
+       "userlogin-helplink2": "Help with logging in",
+       "userlogin-loggedin": "You are already logged in as {{GENDER:$1|$1}}.\nUse the form below to log in as another user.",
+       "userlogin-reauth": "You must log in again to verify that you are {{GENDER:$1|$1}}.",
+       "userlogin-createanother": "Create another account",
+       "createacct-emailrequired": "Email address",
+       "createacct-emailoptional": "Email address (optional)",
+       "createacct-email-ph": "Enter your email address",
+       "createacct-another-email-ph": "Enter email address",
+       "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-ph": "Why you are creating another account",
+       "createacct-reason-help": "Message shown in the account creation log",
+       "createacct-submit": "Create your account",
+       "createacct-another-submit": "Create account",
+       "createacct-continue-submit": "Continue account creation",
+       "createacct-another-continue-submit": "Continue account creation",
+       "createacct-benefit-heading": "{{SITENAME}} is made by people like you.",
+       "createacct-benefit-body1": "{{PLURAL:$1|edit|edits}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|page|pages}}",
+       "createacct-benefit-body3": "recent {{PLURAL:$1|contributor|contributors}}",
+       "badretype": "The passwords you entered do not match.",
+       "usernameinprogress": "An account creation for this user name is already in progress.\nPlease wait.",
+       "userexists": "Username entered already in use.\nPlease choose a different name.",
+       "loginerror": "Login error",
+       "createacct-error": "Account creation error",
+       "createaccounterror": "Could not create account: $1",
+       "nocookiesnew": "The user account was created, but you are not logged in.\n{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them, then log in with your new username and password.",
+       "nocookieslogin": "{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them and try again.",
+       "nocookiesfornew": "The user account was not created, as we could not confirm its source.\nEnsure you have cookies enabled, reload this page and try again.",
+       "createacct-loginerror": "The account was successfully created but you could not be logged in automatically. Please proceed to [[Special:UserLogin|manual login]].",
+       "noname": "You have not specified a valid username.",
+       "loginsuccesstitle": "Logged in",
+       "loginsuccess": "<strong>You are now logged in to {{SITENAME}} as \"$1\".</strong>",
+       "nosuchuser": "There is no user by the name \"$1\".\nUsernames are case sensitive.\nCheck your spelling, or [[Special:CreateAccount|create a new account]].",
+       "nosuchusershort": "There is no user by the name \"$1\".\nCheck your spelling.",
+       "nouserspecified": "You have to specify a username.",
+       "login-userblocked": "This user is blocked. Login not allowed.",
+       "wrongpassword": "Incorrect password entered.\nPlease try again.",
+       "wrongpasswordempty": "Password entered was blank.\nPlease try again.",
+       "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
+       "passwordtoolong": "Passwords cannot be longer than {{PLURAL:$1|1 character|$1 characters}}.",
+       "passwordtoopopular": "Commonly chosen passwords cannot be used. Please choose a more unique password.",
+       "password-name-match": "Your password must be different from your username.",
+       "password-login-forbidden": "The use of this username and password has been forbidden.",
+       "mailmypassword": "Reset password",
+       "passwordremindertitle": "New temporary password for {{SITENAME}}",
+       "passwordremindertext": "Someone (probably you, from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
+       "noemail": "There is no email address recorded for user \"$1\".",
+       "noemailcreate": "You need to provide a valid email address.",
+       "passwordsent": "A new password has been sent to the email address registered for \"$1\".\nPlease log in again after you receive it.",
+       "blocked-mailpassword": "Your IP address is blocked from editing. To prevent abuse, it is not allowed to use password recovery from this IP address.",
+       "eauthentsent": "A confirmation email has been sent to the specified email address.\nBefore any other email is sent to the account, you will have to follow the instructions in the email, to confirm that the account is actually yours.",
+       "throttled-mailpassword": "A password reset email has already been sent, within the last {{PLURAL:$1|hour|$1 hours}}.\nTo prevent abuse, only one password reset email will be sent per {{PLURAL:$1|hour|$1 hours}}.",
+       "mailerror": "Error sending mail: $1",
+       "acct_creation_throttle_hit": "Visitors to this wiki using your IP address have created {{PLURAL:$1|1 account|$1 accounts}} in the last $2, which is the maximum allowed in this time period.\nAs a result, visitors using this IP address cannot create any more accounts at the moment.",
+       "emailauthenticated": "Your email address was confirmed on $2 at $3.",
+       "emailnotauthenticated": "Your email address is not yet confirmed.\nNo email will be sent for any of the following features.",
+       "noemailprefs": "Specify an email address in your preferences for these features to work.",
+       "emailconfirmlink": "Confirm your email address",
+       "invalidemailaddress": "The email address cannot be accepted as it appears to have an invalid format.\nPlease enter a well-formatted address or empty that field.",
+       "cannotchangeemail": "Account email addresses cannot be changed on this wiki.",
+       "emaildisabled": "This site cannot send emails.",
+       "accountcreated": "Account created",
+       "accountcreatedtext": "The user account for [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) has been created.",
+       "createaccount-title": "Account creation for {{SITENAME}}",
+       "createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
+       "login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
+       "login-abort-generic": "Your login failed - Aborted",
+       "login-migrated-generic": "Your account has been migrated, and your username no longer exist on this wiki.",
+       "loginlanguagelabel": "Language: $1",
+       "suspicious-userlogout": "Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.",
+       "createacct-another-realname-tip": "Real name is optional.\nIf you choose to provide it, this will be used for giving the user attribution for their work.",
        "pt-login": "Log in",
+       "pt-login-button": "Log in",
+       "pt-login-continue-button": "Continue login",
        "pt-createaccount": "Create account",
+       "pt-userlogout": "Log out",
+       "php-mail-error-unknown": "Unknown error in PHP's mail() function.",
+       "user-mail-no-addy": "Tried to send email without an email address.",
+       "user-mail-no-body": "Tried to send email with an empty or unreasonably short body.",
+       "changepassword": "Change password",
+       "resetpass_announce": "To finish logging in, you must set a new password.",
+       "resetpass_header": "Change account password",
+       "oldpassword": "Old password:",
+       "newpassword": "New password:",
+       "retypenew": "Retype new password:",
+       "resetpass_submit": "Set password and log in",
+       "changepassword-success": "Your password has been changed!",
+       "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
+       "botpasswords": "Bot passwords",
+       "botpasswords-summary": "<em>Bot passwords</em> allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
+       "botpasswords-disabled": "Bot passwords are disabled.",
        "botpasswords-no-central-id": "To use bot passwords, you must be logged in to a centralised account.",
+       "botpasswords-existing": "Existing bot passwords",
+       "botpasswords-createnew": "Create a new bot password",
+       "botpasswords-editexisting": "Edit an existing bot password",
+       "botpasswords-label-appid": "Bot name:",
+       "botpasswords-label-create": "Create",
+       "botpasswords-label-update": "Update",
+       "botpasswords-label-delete": "Delete",
+       "botpasswords-label-grants": "Applicable grants:",
+       "botpasswords-help-grants": "Grants allow access to rights already held by your user account. Enabling a grant here does not provide access to any rights that your user account would not otherwise have. See the [[Special:ListGrants|table of grants]] for more information.",
+       "botpasswords-label-grants-column": "Granted",
+       "botpasswords-bad-appid": "The bot name \"$1\" is not valid.",
+       "botpasswords-insert-failed": "Failed to add bot name \"$1\". Was it already added?",
+       "botpasswords-update-failed": "Failed to update bot name \"$1\". Was it deleted?",
+       "botpasswords-created-title": "Bot password created",
+       "botpasswords-created-body": "The bot password for bot name \"$1\" of user \"$2\" was created.",
+       "botpasswords-updated-title": "Bot password updated",
+       "botpasswords-updated-body": "The bot password for bot name \"$1\" of user \"$2\" was updated.",
+       "botpasswords-deleted-title": "Bot password deleted",
+       "botpasswords-deleted-body": "The bot password for bot name \"$1\" of user \"$2\" was deleted.",
+       "botpasswords-newpassword": "The new password to log in with <strong>$1</strong> is <strong>$2</strong>. <em>Please record this for future reference.</em> <br> (For old bots which require the login name to be the same as the eventual username, you can also use <strong>$3</strong> as username and <strong>$4</strong> as password.)",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider is not available.",
+       "botpasswords-restriction-failed": "Bot password restrictions prevent this login.",
+       "botpasswords-invalid-name": "The username specified does not contain the bot password separator (\"$1\").",
+       "botpasswords-not-exist": "User \"$1\" does not have a bot password named \"$2\".",
        "savearticle": "Save page",
        "blockedtext": "<strong>Your username or IP address has been blocked.</strong>\n\nThe block was made by $1.\nThe reason given is <em>$2</em>.\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.\nYou cannot use the \"email this user\" feature unless a valid email address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
        "autoblockedtext": "Your IP address has been automatically blocked because it was used by another user, who was blocked by $1.\nThe reason given is:\n\n:<em>$2</em>\n\n* Start of block: $8\n* Expiry of block: $6\n* Intended blockee: $7\n\nYou may contact $1 or one of the other [[{{MediaWiki:Grouppage-sysop}}|administrators]] to discuss the block.\n\nNote that you may not use the \"email this user\" feature unless you have a valid email address registered in your [[Special:Preferences|user preferences]] and you have not been blocked from using it.\n\nYour current IP address is $3, and the block ID is #$5.\nPlease include all above details in any queries you make.",
index a14e926..d7a3aeb 100644 (file)
@@ -37,6 +37,7 @@
        "tog-watchlisthideminor": "Hide minor edits from the watchlist",
        "tog-watchlisthideliu": "Hide edits by logged in users from the watchlist",
        "tog-watchlistreloadautomatically": "Reload the watchlist automatically whenever a filter is changed (JavaScript required)",
+       "tog-watchlistunwatchlinks": "Add direct unwatch/watch links to watchlist entries (JavaScript required for toggle functionality)",
        "tog-watchlisthideanons": "Hide edits by anonymous users from the watchlist",
        "tog-watchlisthidepatrolled": "Hide patrolled edits from the watchlist",
        "tog-watchlisthidecategorization": "Hide categorization of pages",
        "permissionserrorstext-withaction": "You do not have permission to $2, for the following {{PLURAL:$1|reason|reasons}}:",
        "contentmodelediterror": "You cannot edit this revision because its content model is <code>$1</code>, which differs from the current content model of the page <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Warning: You are recreating a page that was previously deleted.</strong>\n\nYou should consider whether it is appropriate to continue editing this page.\nThe deletion and move log for this page are provided here for convenience:",
-       "moveddeleted-notice": "This page has been deleted.\nThe deletion and move log for the page are provided below for reference.",
-       "moveddeleted-notice-recent": "Sorry, this page was recently deleted (within the last 24 hours).\nThe deletion and move log for the page are provided below for reference.",
+       "moveddeleted-notice": "This page has been deleted.\nThe deletion, protection, and move log for the page are provided below for reference.",
+       "moveddeleted-notice-recent": "Sorry, this page was recently deleted (within the last 24 hours).\nThe deletion, protection, and move log for the page are provided below for reference.",
        "log-fulllog": "View full log",
        "edit-hook-aborted": "Edit aborted by hook.\nIt gave no explanation.",
        "edit-gone-missing": "Could not update the page.\nIt appears to have been deleted.",
        "watching": "Watching...",
        "unwatching": "Unwatching...",
        "watcherrortext": "An error occurred while changing your watchlist settings for \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Mark all pages visited",
        "enotif_impersonal_salutation": "{{SITENAME}} user",
        "enotif_subject_deleted": "{{SITENAME}} page $1 has been {{GENDER:$2|deleted}} by $2",
        "compare-invalid-title": "The title you specified is invalid.",
        "compare-title-not-exists": "The title you specified does not exist.",
        "compare-revision-not-exists": "The revision you specified does not exist.",
+       "diff-form": "Differences",
+       "diff-form-oldid": "Old revision ID (optional)",
+       "diff-form-revid": "Revision ID of difference",
+       "diff-form-submit": "Show differences",
+       "diff-form-summary": "",
+       "permanentlink": "Permanent link",
+       "permanentlink-revid": "Revision ID",
+       "permanentlink-submit": "Go to revision",
+       "permanentlink-summary": "",
        "dberr-problems": "Sorry! This site is experiencing technical difficulties.",
        "dberr-again": "Try waiting a few minutes and reloading.",
        "dberr-info": "(Cannot access the database: $1)",
index 1bf4916..03b3c64 100644 (file)
        "compare-invalid-title": "El título especificado es inválido.",
        "compare-title-not-exists": "El título especificado no existe.",
        "compare-revision-not-exists": "La revisión especificada no existe.",
+       "diff-form": "un '''formulario'''",
        "dberr-problems": "Lo sentimos. Este sitio está experimentando dificultades técnicas.",
        "dberr-again": "Prueba a recargar dentro de unos minutos.",
        "dberr-info": "(No se puede acceder a la base de datos: $1)",
index 30456e0..1afd0c0 100644 (file)
        "permissionserrorstext-withaction": "شما اجازهٔ $2 را به این {{PLURAL:$1|دلیل|دلایل}} ندارید:",
        "contentmodelediterror": "امکان ویرایش این نسخه برای شما نیست چون نوع محتوای آن <code>$1</code> است که متفاوت است با نوع محتوای کنونی صفحه <code>$2</code> است.",
        "recreate-moveddeleted-warn": "<strong>هشدار: شما در حال ایجاد صفحه‌ای هستید که قبلاً حذف شده‌است.</strong>\n\nدر نظر داشته باشید که آیا ادامهٔ ویرایش این صفحه کار درستی‌است یا نه.\nسیاههٔ حذف و انتقال این صفحه در زیر نشان داده شده‌است:",
-       "moveddeleted-notice": "این صفحه حذف شده‌است.\nدر زیر سیاههٔ حذف و انتقال این صفحه نمایش داده شده‌است.",
-       "moveddeleted-notice-recent": "متاسفانه صفحه قبلا حذف شده‌است (در ۲۴ ساعت اخیر) \nدلیل حذف و سیاههٔ انتقال در پائین موجود است.",
+       "moveddeleted-notice": "این صفحه حذف شده‌است.\nدر زیر سیاههٔ حذف، محافظت، و انتقال این صفحه نمایش داده شده‌است.",
+       "moveddeleted-notice-recent": "متاسفانه صفحه قبلا حذف شده‌است (در ۲۴ ساعت اخیر) \nدلیل حذف و سیاههٔ انتقال، و حفاظت در پائین موجود است.",
        "log-fulllog": "مشاهدهٔ سیاههٔ کامل",
        "edit-hook-aborted": "ویرایش توسط قلاب لغو شد.\nتوضیحی در این مورد داده نشد.",
        "edit-gone-missing": "امکان به‌روز کردن صفحه وجود ندارد.\nبه نظرمی‌رسد که صفحه حذف شده باشد.",
        "delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.",
        "deleteprotected": "شما نمی‌توانید این صفحه را پاک کنید چون که از آن محافظت شده‌است.",
        "deleting-backlinks-warning": "<strong>هشدار:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
+       "deleting-subpages-warning": "<strong>هشدار:</strong> صفحه‌ای که شما می‌خواهید حذف کنید [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|یک زیرصفحه|$1 زیرصفحه|51=بیش از پنجاه زیرصفحه}}]] دارد.",
        "rollback": "واگردانی ویرایش‌ها",
        "rollbacklink": "واگردانی",
        "rollbacklinkcount": "واگردانی $1 ویرایش",
        "compare-invalid-title": "عنوان تعیین‌شده نامعتبر است.",
        "compare-title-not-exists": "عنوان مشخص شده وجود ندارد.",
        "compare-revision-not-exists": "پالایهٔ مشخص شده وجود ندارد.",
+       "diff-form": "تفاوت‌ها",
+       "diff-form-oldid": "شماره نسخه قدیمی (اختیاری)",
+       "diff-form-revid": "شماره نسخه تفاوت",
+       "diff-form-submit": "نمایش تفاوت",
+       "permanentlink": "پیوند پایدار",
+       "permanentlink-revid": "شماره نسخه",
+       "permanentlink-submit": "برو به نسخه",
        "dberr-problems": "شرمنده! این تارنما از مشکلات فنی رنج می‌برد.",
        "dberr-again": "چند دقیقه صبر کنید و دوباره صفحه را بارگیری کنید.",
        "dberr-info": "(امکان برقراری ارتباط با پایگاه داده وجود ندارد: $1)",
index 48095af..9ae9161 100644 (file)
@@ -54,7 +54,8 @@
                        "BiscuitMan",
                        "Alluk.",
                        "Tumm1",
-                       "4shadoww"
+                       "4shadoww",
+                       "Pahkiqaz"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
@@ -84,7 +85,7 @@
        "tog-shownumberswatching": "Näytä sivua tarkkailevien käyttäjien määrä",
        "tog-oldsig": "Nykyinen allekirjoituksesi:",
        "tog-fancysig": "Muotoilematon allekirjoitus ilman automaattista linkkiä",
-       "tog-uselivepreview": "Käytä välitöntä esikatselua",
+       "tog-uselivepreview": "Näytä esikatselu lataamatta sivua uudelleen",
        "tog-forceeditsummary": "Huomauta minua, jos en ole kirjoittanut yhteenvetoa",
        "tog-watchlisthideown": "Piilota omat muokkaukset tarkkailulistalta",
        "tog-watchlisthidebots": "Piilota bottien muokkaukset tarkkailulistalta",
        "permissionserrorstext-withaction": "Sinulla ei ole oikeutta {{lcfirst:$2}} {{PLURAL:$1|seuraavasta syystä|seuraavista syistä}}:",
        "contentmodelediterror": "Et voi muokata tätä versiota, koska sen sisältömalli on <code>$1</code> ja tämä poikkeaa sivun nykyisestä sisältömallista, joka on <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Varoitus: Olet luomassa sellaista sivua, joka on aikaisemmin poistettu.'''\n\nHarkitse, kannattaako tätä sivua luoda uudelleen. \nAlla on tämän sivun poisto- ja siirtohistoria:",
-       "moveddeleted-notice": "Tämä sivu on poistettu. Alla on tämän sivun poisto- ja siirtohistoria.",
-       "moveddeleted-notice-recent": "Valitettavasti tämä sivu on poistettu aivan äskettäin (viimeisen 24 tunnin aikana).\nAlla näkyy sivun poisto- ja siirtolokin tietoja.",
+       "moveddeleted-notice": "Tämä sivu on poistettu. \nAlla on sivun poisto-, suojaus- ja siirtohistoria.",
+       "moveddeleted-notice-recent": "Valitettavasti tämä sivu on poistettu äskettäin (viimeisen 24 tunnin aikana).\nAlla on sivun poisto-, suojaus- ja siirtohistoria.",
        "log-fulllog": "Näytä loki kokonaan",
        "edit-hook-aborted": "Laajennuskoodi esti muokkauksen antamatta syytä.",
        "edit-gone-missing": "Sivun päivitys ei onnistunut.\nSe on ilmeisesti poistettu.",
        "prefs-editwatchlist-clear": "Tyhjennä tarkkailulistasi",
        "prefs-watchlist-days": "Näytettävien päivien määrä tarkkailulistalla",
        "prefs-watchlist-days-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
-       "prefs-watchlist-edits": "Tarkkailulistalla näytettävien muokkausten määrä",
+       "prefs-watchlist-edits": "Tarkkailulistalla näytettävien muokkausten enimmäismäärä:",
        "prefs-watchlist-edits-max": "Enintään 1000",
        "prefs-watchlist-token": "Tarkkailulistan avain:",
        "prefs-misc": "Muut",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Näytä",
        "rcfilters-legend-heading": "<strong>Luettelo lyhenteistä:</strong>",
+       "rcfilters-other-review-tools": "<strong>Muut arviointityökalut</strong>",
+       "rcfilters-group-results-by-page": "Ryhmitä tulokset sivujen mukaan",
+       "rcfilters-grouping-title": "Ryhmitys",
        "rcfilters-activefilters": "Aktiiviset suodattimet",
-       "rcfilters-limit-shownum": "Näytä viimeisimmät $1 muutosta",
+       "rcfilters-limit-title": "Näytettävät muutokset",
+       "rcfilters-limit-shownum": "Näytä {{PLURAL:$1|viimeisin muutos|$1 viimeisintä muutosta}}",
        "rcfilters-days-title": "Viimeisimmät päivät",
        "rcfilters-hours-title": "Viimeisimmät tunnit",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|päivä|päivää}}",
        "rcfilters-savedqueries-defaultlabel": "Tallennetut suodattimet",
        "rcfilters-savedqueries-rename": "Nimeä uudelleen",
        "rcfilters-savedqueries-setdefault": "Aseta oletukseksi",
+       "rcfilters-savedqueries-unsetdefault": "Poista oletuksena",
        "rcfilters-savedqueries-remove": "Poista",
        "rcfilters-savedqueries-new-name-label": "Nimi",
        "rcfilters-savedqueries-apply-label": "Luo suodatin",
        "rcfilters-savedqueries-add-new-title": "Tallenna nykyiset suodatinasetukset",
        "rcfilters-restore-default-filters": "Palauta oletussuodattimet",
        "rcfilters-clear-all-filters": "Tyhjennä kaikki suodattimet",
+       "rcfilters-show-new-changes": "Näytä uusimmat muutokset",
        "rcfilters-search-placeholder": "Suodata tuoreita muutoksia (selaa tai ala kirjoittaa)",
        "rcfilters-invalid-filter": "Virheellinen suodatin",
        "rcfilters-empty-filter": "Ei aktiivisia suodattimia. Kaikki muutokset näytetään.",
        "rcfilters-filter-newpages-description": "Muokkaukset, joilla on luotu uusia sivuja.",
        "rcfilters-filter-categorization-label": "Luokkamuutokset",
        "rcfilters-filter-categorization-description": "Tulokset sivuista, joita on lisätty tai poistettu luokista.",
-       "rcfilters-filter-logactions-label": "Kirjatut toimet",
-       "rcfilters-filter-logactions-description": "Hallinnolliset toimet, tunnusten luonnit, sivujen poistot, tiedostojen lähetykset…",
+       "rcfilters-filter-logactions-label": "Lokitoiminnot",
+       "rcfilters-filter-logactions-description": "Ylläpidolliset toimet, tunnusten luonnit, sivujen poistot, tiedostolataukset…",
        "rcfilters-hideminor-conflicts-typeofchange-global": "\"Pienet muutokset\" -suodatin on ristiriidassa yhden tai useamman Muutoksen tyyppi suodattimen kanssa, koska joitain muutostyyppejä ei voida pitää \"pieninä\". Ristiriidassa oleva suodatin on merkittynä Aktiivisissa suodattimissa, yläpuolella.",
        "rcfilters-hideminor-conflicts-typeofchange": "Joitain muutostyyppejä ei voida määrittää \"pieneksi\", joten tämä suodatin on ristiriidassa seuraavien Muutoksen tyyppi suodattimien kanssa: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "\"Muutoksen tyyppi\" on ristiriidassa \"Pienet muutokset\" -suodattimen kanssa. Joitain muutostyyppejä ei voida merkitä \"pieniksi\".",
-       "rcfilters-filtergroup-lastRevision": "Viimeisin versio",
+       "rcfilters-filtergroup-lastRevision": "Viimeisimmät versiot",
        "rcfilters-filter-lastrevision-label": "Viimeisin versio",
        "rcfilters-filter-lastrevision-description": "Viimeisin muutos sivulle.",
        "rcfilters-filter-previousrevision-label": "Aikaisemman versiot",
+       "rcfilters-view-namespaces-tooltip": "Suodata tuloksia nimiavaruuden mukaan",
        "rcnotefrom": "Alla ovat muutokset <strong>$3, $4</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
        "rclistfrom": "Näytä uudet muutokset $3 kello $2 alkaen",
        "rcshowhideminor": "$1 pienet muutokset",
        "enotif_lastdiff": "Nähdäksesi tämän muutoksen, katso $1",
        "enotif_anon_editor": "kirjautumaton käyttäjä $1",
        "enotif_body": "$WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nMuokkaajan yhteenveto: $PAGESUMMARY $PAGEMINOREDIT\n\nOta yhteyttä muokkaajaan:\nsähköposti: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nUusia ilmoituksia tästä sivusta ei tule kunnes vierailet sivulla sisään kirjautuneena. Voit myös nollata ilmoitukset kaikille tarkkailemillesi sivuille tarkkailulistallasi.\n\n             {{GRAMMAR:genitive|{{SITENAME}}}} ilmoitusjärjestelmä\n\n--\nVoit muuttaa sähköpostimuistutusten asetuksia osoitteessa:\n{{canonicalurl:{{#special:Preferences}}}}\n\nVoit muuttaa tarkkailulistasi asetuksia osoitteessa:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nVoit poistaa sivun tarkkailulistalta osoitteessa:\n$UNWATCHURL\n\nPalaute ja lisäapu osoitteessa:\n$HELPPAGE",
+       "enotif_minoredit": "Tämä on pieni muutos",
        "created": "luonut",
        "changed": "muuttanut",
        "deletepage": "Poista sivu",
        "import-nonewrevisions": "Ei tuotu yhtään versiota, koska kaikki versiot ovat jo täällä tai ne on ohitettu virheiden vuoksi.",
        "xml-error-string": "$1 rivillä $2, sarakkeessa $3 (tavu $4): $5",
        "import-upload": "Tallenna XML-tiedosto",
-       "import-token-mismatch": "Istuntotietojen katoaminen.\n\nSaatat olla kirjautunut ulos. <strong>Ole hyvä ja varmista, että olet edelleen kirjautunut sisään, ja yritä sitten uudestaan.</strong>\nJos ei vieläkään onnistu, yritä [[Special:UserLogout|kirjautua ulos]] ja sitten takaisin sisään, ja tarkista, että selaimesi sallii evästeet tältä sivustolta.",
+       "import-token-mismatch": "Istuntotietoja ei löydy.\n\nSaatat olla kirjautunut ulos. <strong>Varmista, että olet edelleen kirjautunut sisään, ja yritä sitten uudestaan.</strong>\nJos ongelma jatkuu, yritä [[Special:UserLogout|kirjautua ulos]] ja sitten takaisin sisään, ja tarkista selaimesi asetuksista, että evästeet ovat käytössä tällä sivustolla.",
        "import-invalid-interwiki": "Määritellystä wikistä ei voi tuoda.",
        "import-error-edit": "Sivua $1 ei tuotu, koska sinulla ei ole oikeutta muokata sitä.",
        "import-error-create": "Sivua $1 ei tuotu, koska sinulla ei ole oikeutta luoda sitä.",
        "tooltip-pt-mycontris": "Luettelo {{GENDER:|omista muokkauksistasi}}",
        "tooltip-pt-anoncontribs": "Luettelo tästä IP-osoitteesta tehdyistä muokkauksista",
        "tooltip-pt-login": "Kirjaudu sisään tai luo tunnus",
+       "tooltip-pt-login-private": "Tämän wikin käyttö edellyttää kirjautumista",
        "tooltip-pt-logout": "Kirjaudu ulos",
        "tooltip-pt-createaccount": "On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista.",
        "tooltip-ca-talk": "Keskustele sisällöstä",
        "compare-invalid-title": "Antamasi sivun nimi on virheellinen.",
        "compare-title-not-exists": "Määrittämääsi sivua ei ole.",
        "compare-revision-not-exists": "Määrittämääsi versiota ei ole.",
+       "diff-form": "Eroavaisuudet",
        "dberr-problems": "Tällä sivustolla on teknisiä ongelmia.",
        "dberr-again": "Odota hetki ja lataa sivu uudelleen.",
        "dberr-info": "(Tietokantaan ei saada yhteyttä: $1)",
index 5c0f657..0f95c8c 100644 (file)
        "tog-watchlisthideminor": "Masquer les modifications mineures dans la liste de suivi",
        "tog-watchlisthideliu": "Masquer les modifications faites par des utilisateurs inscrits dans la liste de suivi",
        "tog-watchlistreloadautomatically": "Recharger automatiquement la liste de suivi lorsque les options de filtrage sont modifiées (JavaScript requis)",
+       "tog-watchlistunwatchlinks": "Ajouter des liens directs de suivi/non suivi pour les entrées de la liste de suivi (JavaScript est nécessaire pour la fonctionnalité de bascule)",
        "tog-watchlisthideanons": "Masquer les modifications d’utilisateurs anonymes dans la liste de suivi",
        "tog-watchlisthidepatrolled": "Masquer les modifications relues dans la liste de suivi",
        "tog-watchlisthidecategorization": "Masquer la catégorisation des pages",
        "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. \nLe journal des suppressions et des déplacements pour cette page est affiché ci-dessous à titre d'information :",
-       "moveddeleted-notice": "Cette page a été supprimée. \nLe journal des suppressions et des déplacements de la page est affiché 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 et des renommages pour la page sont fournis ci-dessous pour référence.",
+       "moveddeleted-notice": "Cette page a été supprimée. \nLe journal des suppressions, des protections et des déplacements de la page est affiché 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, des protections et des renommages pour la page sont fournis ci-dessous pour référence.",
        "log-fulllog": "Voir le journal complet",
        "edit-hook-aborted": "Échec de la modification par une extension.\nAucune explication n’a été retournée.",
        "edit-gone-missing": "N’a pas pu mettre à jour la page.\nIl semble qu’elle ait été supprimée.",
        "rcfilters-view-return-to-default-tooltip": "Retour au menu principal du filtre",
        "rcfilters-liveupdates-button": "Mises à jour en direct",
        "rcfilters-liveupdates-button-title-on": "Désactiver les mises à jour à chaud",
-       "rcfilters-liveupdates-button-title-off": "Afficher les nouveaux changements quand ils se produisent",
+       "rcfilters-liveupdates-button-title-off": "Afficher les nouveaux changements dès qu'ils se produisent",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
        "rclistfromreset": "Réinitialiser la sélection de la date",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "watching": "Suivi…",
        "unwatching": "Fin du suivi…",
        "watcherrortext": "Une erreur s'est produite lors de la modification des paramètres de votre liste de suivi pour « $1 ».",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Marquer toutes les pages comme visitées",
        "enotif_impersonal_salutation": "Utilisateur de {{SITENAME}}",
        "enotif_subject_deleted": "La page $1 sur {{SITENAME}} a été {{GENDER:$2|supprimée}} par $2",
        "compare-invalid-title": "Le titre que vous avez spécifié n’est pas valide.",
        "compare-title-not-exists": "Le titre que vous avez spécifié n’existe pas.",
        "compare-revision-not-exists": "La révision que vous avez spécifiée n’existe pas.",
+       "diff-form": "Différences",
+       "diff-form-oldid": "ID de l’ancienne révision (facultatif)",
+       "diff-form-revid": "ID de la révision à comparer",
+       "diff-form-submit": "Afficher les différences",
+       "permanentlink": "Lien permanent",
+       "permanentlink-revid": "ID de la révision",
+       "permanentlink-submit": "Aller à la révision",
        "dberr-problems": "Désolé ! Ce site rencontre des difficultés techniques.",
        "dberr-again": "Essayez d'attendre quelques minutes et rechargez.",
        "dberr-info": "(Accès à la base de données impossible : $1)",
index b4cf71f..6b59319 100644 (file)
        "tog-shownumberswatching": "Nochd àireamh nan cleachdaichean a tha a' cumail sùil air",
        "tog-oldsig": "An t-earr-sgrìobhadh làithreach agad:",
        "tog-fancysig": "Làimhsich an t-earr-sgrìobhadh mar wikitext (gun cheangal leis fhèin)",
-       "tog-uselivepreview": "Cleachd an ro-shealladh beò",
+       "tog-uselivepreview": "Seall ro-sheallaidhean gun a bhith ag ath-luchdadh na duilleige",
        "tog-forceeditsummary": "Cuir ceist nuair a dh'fhàgas mi gearr-chunntas an deasachaidh bàn",
        "tog-watchlisthideown": "Falaich mo mhùthaidhean fhèin air mo chlàr-faire",
        "tog-watchlisthidebots": "Falaich mùthaidhean nam bot air mo chlàr-faire",
        "tog-watchlisthideminor": "Falaich mùthaidhean beaga air mo chlàr-faire",
        "tog-watchlisthideliu": "Falaich mùthaidhean le cleachdaichean a tha air logadh a-steach air mo chlàr-faire",
        "tog-watchlistreloadautomatically": "Ath-luchdaich an liosta-fhaire gu fèin-obrachail uair sam bith a thèid criathrag atharrachadh (feum air JavaScript)",
+       "tog-watchlistunwatchlinks": "Cuir ceanglaichean neo-fhaire/faire ri innteartan na liosta-faire (feum airson JavaScript airson a thoglachadh)",
        "tog-watchlisthideanons": "Falaich mùthaidhean le cleachdaichean gun ainm air mo chlàr-faire",
        "tog-watchlisthidepatrolled": "Falaich mùthaidhean air duilleagan fo fhreiceadan air a' chlàr-fhaire agam",
        "tog-watchlisthidecategorization": "Falaich roinnean nan duilleagan",
        "anontalk": "Deasbaireachd",
        "navigation": "Seòladh",
        "and": "&#32;agus",
-       "qbfind": "Lorg",
-       "qbbrowse": "Brabhsaich",
-       "qbedit": "Deasaich",
-       "qbpageoptions": "An duilleag seo",
-       "qbmyoptions": "Na duilleagan agam",
        "faq": "CÀBHA",
-       "faqpage": "Project:CÀBHA",
        "actions": "Gnìomhan",
        "namespaces": "Ainm-spàsan",
        "variants": "Tionndaidhean",
        "edit-local": "Deasaich an tuairisgeul ionadail",
        "create": "Cruthaich",
        "create-local": "Cuir tuairisgeul ionadail ris",
-       "editthispage": "Deasaich an duilleag seo",
-       "create-this-page": "Cruthaich an duilleag seo",
        "delete": "Sguab às",
-       "deletethispage": "Sguab às an duilleag seo",
-       "undeletethispage": "Neo-dhèan sguabadh às na duilleige seo",
        "undelete_short": "Neo-dhèan an sguabadh às air $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}}",
        "viewdeleted_short": "Seall $1 {{PLURAL:$1|deasachadh|dheasachadh|deasachaidhean|deasachadh}} a chaidh a sguabadh às",
        "protect": "Dìon",
        "protect_change": "mùth",
-       "protectthispage": "Dìon an duilleag seo",
        "unprotect": "Atharraich an dìon",
-       "unprotectthispage": "Atharraich dìon na duilleige seo",
        "newpage": "Duilleag ùr",
-       "talkpage": "Dèan deasbad mun duilleag seo",
        "talkpagelinktext": "Deasbaireachd",
        "specialpage": "Duilleag shònraichte",
        "personaltools": "Innealan pearsanta",
-       "articlepage": "Seall duilleag na susbainte",
        "talk": "Deasbaireachd",
        "views": "Tadhalan",
        "toolbox": "Innealan",
        "tool-link-userrights": "Atharraich buidhnean nan {{GENDER:$1|cleachdaichean}}",
        "tool-link-userrights-readonly": "Seall buidhnean nan {{GENDER:$1|cleachdaichean}}",
        "tool-link-emailuser": "Cuir post gun {{GENDER:$1|chleachdaiche}} seo",
-       "userpage": "Seall duilleag a' chleachdaiche",
-       "projectpage": "Seall duilleag a' phròiseict",
        "imagepage": "Seall duilleag an fhaidhle",
        "mediawikipage": "Seall duilleag na teachdaireachd",
        "templatepage": "Seall duilleag na teamplaide",
        "redirectedfrom": "(Air ath-sheòladh o $1)",
        "redirectpagesub": "Ath-sheòl an duilleag",
        "redirectto": "Dèan ath-stiùireadh gu:",
-       "lastmodifiedat": "Chaidh an duilleag seo a mhùthadh $1 aig $2 turas mu dheireadh.",
+       "lastmodifiedat": "Chaidh an duilleag seo a dheasachadh $1 aig $2 turas mu dheireadh.",
        "viewcount": "Chaidh inntrigeadh a dhèanamh dhan duilleag seo $1 {{PLURAL:$1|turas|thuras|tursan|turas}}.",
        "protectedpage": "Duilleag fo dhìon",
        "jumpto": "Gearr leum gu:",
        "databaseerror-query": "Ceist: $1",
        "databaseerror-function": "Foincsean: $1",
        "databaseerror-error": "Mearachd: $1",
+       "transaction-duration-limit-exceeded": "Airson replication lag àrd a sheachnadh, sguireadh dhen tar-chur seo nuair a chaidh faid an sgrìobhaidh ($1) seachad air a’ chrìoch dhe $2.",
        "laggedslavemode": "<strong>Rabhadh:</strong> Faodaidh nach eil ùrachaidhean a rinneadh o chionn ghoirid a' nochdadh san duilleag.",
        "readonly": "Stòr-dàta glaiste",
        "enterlockreason": "Cuir a-steach adhbhar a' ghlais, a' gabhail a-steach tuairmeas air fuasgladh a' ghlais.",
        "missingarticle-rev": "(mùthadh#: $1)",
        "missingarticle-diff": "(Diofar: $1, $2)",
        "readonly_lag": "Chaidh an stòr-dàta a ghlasadh leis fhèin fhad 's a tha frithealaichean nan stòr-dàta tràilleach air dheireadh a' mhaighstir",
+       "nonwrite-api-promise-error": "Chaidh am bann-cinn HTTP Promise-Non-Write-API-Action a chur ach is ann do mhòideal sgrìobhadh API a bha an t-iarrtas.",
        "internalerror": "Ion-mhearachd",
        "internalerror_info": "Ion-mhearachd: $1",
        "internalerror-fatal-exception": "Eisgeachd mharbhtach dhen t-seòrsa \"$1\"",
        "no-null-revision": "Cha b' urrainn dhuinn mùthadh neoinitheach ùr a chruthachadh dhan duilleag \"$1\"",
        "badtitle": "Droch thiotal",
        "badtitletext": "Bha an duilleag a dh'iarr thu mì-dhligheach, falamh no le tiotal eadar-chànanach no eadar-uicidh air a dhroch cheangal.\nFaodaidh gu bheil aon no barrachd charactairean ann nach urrainn dhut a chleachdadh ann an tiotalan.",
+       "title-invalid-empty": "Tha an duilleag a chaidh iarraidh falamh no chan eil ann ach ainm namespace.",
+       "title-invalid-utf8": "Tha sreath UTF-8 mì-dhligheach ann an tiotal na duilleige a dh’iarr thu.",
+       "title-invalid-interwiki": "Tha ceangal interwiki ann an tiotal na duilleige a dh’iarr thu nach gabh a chleachdadh ann an tiotalan.",
+       "title-invalid-talk-namespace": "Tha reifreans air duilleag deasbaireachd nach eil ann an an tiotal na duilleige a dh’iarr thu.",
+       "title-invalid-characters": "Tha caractaran mì-dhligheach ann an tiotal na duilleige a dh’iarr thu: “$1”.",
+       "title-invalid-relative": "Tha slighe dhàimheach aig an tiotal. Tha tiotalan dhuilleagan dàimheach (./, ../) mì-dhligheach a chionn ’s nach ruigear iad gu tric nuair a bhios brabhsair a’ chleachdaiche ’gan làimhseachadh.",
+       "title-invalid-magic-tilde": "Tha ceithir tuinn ann an tiotal na duilleige a dh’iarr thu agus chan eil sin dligheachd (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Tha tiotal na duilleige a dh’iarr thu ro fhada. Chan fhaod e a bhith nas fhaide na $1 {{PLURAL:$1|byte}} ann an còdachadh UTF-8.",
+       "title-invalid-leading-colon": "Tha còilean nach eil ceadaichte aig toiseach na duilleige a dh’iarr thu.",
        "perfcached": "Chaidh an dàta a leanas a thasgadh 's faodaidh gu bheil e air dheireadh. Tha {{PLURAL:$1|$1 toradh|$1 thoradh|$1 toraidhean|$1 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "perfcachedts": "Chaidh an dàta a leanas a thasgadh agus chaidh ùrachadh $1 turas mu dheireadh. Tha {{PLURAL:$4|$4 toradh|$4 thoradh|$4 toraidhean|$4 toradh}} ri fhaighinn san tasgadan air a' char as motha.",
        "querypage-no-updates": "Tha ùrachadh air a chur à comas air an duilleag seo an-dràsta.\nCha dèid an dàta an-seo ùrachadh aig an àm seo.",
        "virus-scanfailed": "dh'fhàillig an sganadh (còd $1)",
        "virus-unknownscanner": "sganair bhìorasan neo-aithnichte:",
        "logouttext": "<strong>Chaidh do logadh a-mach.</strong>\n\nThoir an aire gum bi coltas air cuid dhe na duilleagan mar gum biodh tu air logadh a-steach gus am falamhaich thu tasgadan a' bhrabhsair agad.",
+       "cannotlogoutnow-title": "Cha ghabh clàradh a-mach an-dràsta fhèin",
+       "cannotlogoutnow-text": "Chan ghabh clàradh a-mach nuair a chleachdar $1.",
        "welcomeuser": "Fàilte ort, $1",
        "welcomecreation-msg": "Chaidh an cunntas agad a chruthachadh.\nNa dìochuimhnich na [[Special:Preferences|roghainnean agad air {{SITENAME}}]] a ghleusadh dhut fhèin.",
        "yourname": "Ainm-cleachdaiche:",
        "createacct-yourpasswordagain-ph": "Cuir a-steach am facal-faire a-rithist",
        "userlogin-remembermypassword": "Cum air logadh a-steach mi",
        "userlogin-signwithsecure": "Cleachd ceangal tèarainte",
+       "cannotlogin-title": "Cha ghabh clàradh a-steach",
+       "cannotlogin-text": "Cha ghabh clàradh a-steach.",
+       "cannotloginnow-title": "Cha ghabh clàradh a-steach an-dràsta fhèin",
+       "cannotloginnow-text": "Chan ghabh clàradh a-steachnuair a chleachdar $1.",
+       "cannotcreateaccount-title": "Cha ghabh na cunntasan a chruthachadh",
+       "cannotcreateaccount-text": "Chan eil cruthachadh dìreach de chunntasan an comas air an uici seo.",
        "yourdomainname": "An àrainn-lìn agad:",
        "password-change-forbidden": "Chan urrainn dhut faclan-faire atharrachadh air an uicipeid seo.",
        "externaldberror": "Thachair mearachd le dearbhadh an stòir-dhàta air neo chan eil cead agad an cunntas agad air an taobh a-muigh ùrachadh.",
        "login": "Log a-steach",
+       "login-security": "Dearbh cò thusa",
        "nav-login-createaccount": "Log a-steach / cruthaich cunntas",
        "logout": "Log a-mach",
        "userlogout": "Log a-mach",
        "userlogin-resetpassword-link": "Na dhìochuimhnich thu am facal-faire agad?",
        "userlogin-helplink2": "Taic le logadh a-steach",
        "userlogin-loggedin": "Chaidh do logadh a-steach mar $1 mu thràth.\nCleachd am foirm gu h-ìosal airson logadh a-steach mar chleachdaiche eile.",
+       "userlogin-reauth": "Feumaidh tu clàradh a-steach às ùr a dhearbhadh gur tusa $1.",
        "userlogin-createanother": "Cruthaich cunntas eile",
        "createacct-emailrequired": "Seòladh puist-d",
        "createacct-emailoptional": "Seòladh puist-d (roghainneil)",
        "createacct-email-ph": "Cuir a-steach an seòladh puist-d agad",
        "createacct-another-email-ph": "Cuir a-steach seòladh puist-d",
        "createaccountmail": "Cleachd facal-faire sealach air thuaiream agus cuir e dhan phost-d a tha 'ga shònrachadh gu h-ìosal",
+       "createaccountmail-help": "Gabhaidh seo a chleachdadh airson cunntas a chruthachadh do neach eile gun fhiosta dè am facal-faire.",
        "createacct-realname": "Fìor-ainm (roghainneil)",
        "createacct-reason": "Adhbhar",
        "createacct-reason-ph": "Carson a tha thu a' cruthachadh cunntas eile?",
+       "createacct-reason-help": "An teachdaireachd a thèid a shealltainn ann an loga cruthachadh a’ chunntais",
        "createacct-submit": "Cruthaich an cunntas agad",
        "createacct-another-submit": "Cruthaich cunntas",
+       "createacct-continue-submit": "Lean air cruthachadh a’ chunntais",
+       "createacct-another-continue-submit": "Lean air cruthachadh a’ chunntais",
        "createacct-benefit-heading": "Tha {{SITENAME}} 'ga chruthachadh le daoine mar thu fhèin.",
        "createacct-benefit-body1": "{{PLURAL:$1|deasachadh|deasachaidhean}}",
        "createacct-benefit-body2": "{{PLURAL:$1|duilleag|duilleagan}}",
        "createacct-benefit-body3": "{{PLURAL:$1|deasaiche|deasaichean}} o chionn goirid",
        "badretype": "Chan eil an dà fhacal-faire a chuir thu a-steach a' freagairt ri chèile.",
+       "usernameinprogress": "Tha cunntas eile ’ga chruthachadh dhan ainm-chleachdaiche seo mu thràth. Fuirich ort.",
        "userexists": "Tha an t-ainm-cleachdaiche a chuir thu a-steach 'ga chleachdadh mu thràth.\nNach tagh thu ainm eile?",
        "loginerror": "Mearachd log a-steach",
        "createacct-error": "Mearachd le cruthachadh a' chunntais",
        "nocookieslogin": "Tha {{SITENAME}} a' cleachdadh briosgaidean gus daoine a logadh a-steach.\nChuir thu briosgaidean à comas.\nCuir an comas iad is feuch ris a-rithist.",
        "nocookiesfornew": "Cha deach an cunntas a chruthachadh oir cha b' urrainn dhuinn a thùs a dhearbhadh.\nDèan cinnteach gu bheil briosgaidean an comas, ath-luchdaich an duilleag seo 's feuch ris a-rithist.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "createacct-loginerror": "Chaidh an cunntas a chruthachadh ach cha b’ urrainn dhuinn do chlàradh a-steach gu fèin-obrachail. Dèan [[Special:UserLogin|clàradh a-steach de làimh]].",
        "noname": "Cha do thagh thu ainm-cleachdaiche dligheach.",
        "loginsuccesstitle": "Rinn thu logadh a-steach",
        "loginsuccess": "<strong>Rinn thu logadh a-steach air {{SITENAME}} mar \"$1\".</strong>",
        "wrongpassword": "Chuir thu a-steach facal-faire cearr.\nAm feuch thu ris a-rithist?",
        "wrongpasswordempty": "Cha do chuir thu a-steach facal-faire.\nFeuch ris a-rithist.",
        "passwordtooshort": "Feumaidh faclan-faire a bhith {{PLURAL:$1|$1 charactar|$1 charactar|$1 caractaran|$1 caractar}} a dh'fhaid air a' char as lugha.",
+       "passwordtoolong": "Chan fhaod faclan-faire a bhith nas fhaide na {{PLURAL:$1|1 charactar|$1 charactar|$1 caractaran|$1 caractar}}.",
+       "passwordtoopopular": "Chan fhaodar faclan-faire cumanta a chleachdadh. Tagh rudeigin nach eil cho cumanta.",
        "password-name-match": "Chan fhaod am facal-faire 's an t-ainm-cleachdaiche agad a bhith co-ionnann.",
        "password-login-forbidden": "Tha an t-ainm-cleachdaiche 's am facal-faire seo toirmisgte.",
        "mailmypassword": "Ath-shuidhich am facal-faire",
        "createacct-another-realname-tip": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dha na h-ùghdaran airson an cuid obrach.",
        "pt-login": "Log a-steach",
        "pt-login-button": "Log a-steach",
+       "pt-login-continue-button": "Lean air a’ chlàradh a-steach",
        "pt-createaccount": "Cruthaich cunntas",
        "pt-userlogout": "Log a-mach",
        "php-mail-error-unknown": "Mearachd neo-aithichte san fheart mail() aig PHP.",
        "resetpass_submit": "Suidhich am facal-faire 's dèan logadh a-steach",
        "changepassword-success": "Chaidh am facal-faire agad atharrachadh!",
        "changepassword-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
+       "botpasswords": "Faclan-faire bots",
+       "botpasswords-summary": "Bheir <em>faclan-faire bots</em> cothrom air cunntas cleachdaiche slighe an API gun a bhith a’ cleachdadh prìomh theisteas a’ chunntais. Dh’fhaoidte gum bi na còraichean cleachdaiche cuingichte nuair a thathar clàraichte a-staigh air facal-faire bot.\n\nMur eil fhios agad carson a dhèanadh tu seo, ’s mathaid nach bu chòir dhut sin a dhèanamh. Cha bu chòir do dhuine sam bith iarraidh ort fear dhiubh seo a chruthachadh is a thoirt dhaibh uair sam bith.",
+       "botpasswords-disabled": "Tha faclan-faire bots à comas.",
+       "botpasswords-no-central-id": "Feumaidh tu a bhith clàraichte a-staigh air cunntas meadhanaichte mus urrainn dhut faclan-faire bots a chleachdadh.",
+       "botpasswords-existing": "Faclan-faire bots làithreach",
+       "botpasswords-createnew": "Cruthaich facal-faire bot ùr",
+       "botpasswords-editexisting": "Deasaich facal-faire bot làithreach",
+       "botpasswords-label-appid": "Ainm a’ bhot:",
+       "botpasswords-label-create": "Cruthaich",
+       "botpasswords-label-update": "Ùraich",
+       "botpasswords-label-cancel": "Sguir dheth",
+       "botpasswords-label-delete": "Sguab às",
+       "botpasswords-label-resetpassword": "Ath-shuidhich am facal-faire",
+       "botpasswords-label-grants": "Buileachaidhean iomchaidh:",
+       "botpasswords-help-grants": "Ma nì thu buileachadh, is urrainn dhut còraichean a tha aig a’ chunntas agad a thoirt seachad. Ma nì thu buileachadh an-seo, cha doir seo cothrom air còraichean sam bith nach biodh aig a’ chunntas agad co-dhiù. Seall [[Special:ListGrants|clàr a’ bhuileachaidh]] airson barrachd fiosrachaidh.",
+       "botpasswords-label-grants-column": "Air a bhuileachadh",
+       "botpasswords-bad-appid": "Chan e ainm bot dligheach a tha ann an “$1”.",
+       "botpasswords-insert-failed": "Cha b’ urrainn dhuinn an t-ainm bot “$1” a chur ris. An deach a chur ris mu thràth?",
+       "botpasswords-update-failed": "Dh’fhàillig ùrachadh an ainm bot “$1”. An deach a sguabadh às?",
+       "botpasswords-created-title": "Chaidh am facal-faire bot a chruthachadh",
+       "botpasswords-created-body": "Chaidh am facal-faire bot airson a’ bhot air a bheil “$1” aig a’ chleachdaiche “$2” a chruthachadh.",
+       "botpasswords-updated-title": "Chaidh am facal-faire bot ùrachadh",
        "resetpass_forbidden": "Cha ghabh na faclan-faire atharrachadh",
        "resetpass-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
        "resetpass-submit-loggedin": "Atharraich am facal-faire",
        "permissionserrorstext": "Chan eil cead agad sin a dhèanamh air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan}} a leanas:",
        "permissionserrorstext-withaction": "Chan eil cead agad airson \"$2\" air sgàth {{PLURAL:$1|an adhbhair|nan adhbharan}} a leanas:",
        "recreate-moveddeleted-warn": "<strong>Rabhadh: Tha thu gu bhith ath-chruthachadh duilleag a chaidh a sguabadh às roimhe.</strong>\n\nSaoil am bu chòir dhut leantainn air adhart le deasachadh na duilleige?.\nSeo dhut loga an sguabaidh às agus a' ghluasaid mar fhiosrachadh dhut:",
-       "moveddeleted-notice": "Chaidh an duilleag seo a sguabadh às.\nChì thu loga an sguabaidh às agus a' ghluasaid gu h-ìosal mar fhiosrachadh dhut.",
+       "moveddeleted-notice": "Chaidh an duilleag seo a sguabadh às.\nChì thu loga an sguabaidh às, an dìon agus a’ ghluasaid gu h-ìosal mar fhiosrachadh dhut.",
        "log-fulllog": "Seall an loga slàn",
        "edit-hook-aborted": "Sguireadh dhen deasachadh ri linn dubhan.\nCha deach adhbhar a thoirt seachad.",
        "edit-gone-missing": "Cha b' urrainn dhuinn an duilleag ath-nuadhachadh.\nTha coltas gun deach a sguabadh às.",
        "page_first": "Toiseach",
        "page_last": "Deireadh",
        "histlegend": "Taghadh nan diofar: comharraich bogsaichean rèidio nam mùthaidhean gus coimeas a dhèanamh agus put Enter no am putan gu h-ìosal.<br />\nTreòir: <strong>({{int:cur}})</strong> = an diofar eadar e 's am mùthadh as ùire, <strong>({{int:last}})</strong> = an diofar eadar e 's am mùthadh roimhe, <strong>{{int:minoreditletter}}</strong> = deasachadh beag.",
-       "history-fieldset-title": "An eachdraidh brabhsaidh",
+       "history-fieldset-title": "Lorg lèirmheasan",
        "history-show-deleted": "Na chaidh sguabadh às a-mhàin",
        "histfirst": "as sine",
        "histlast": "as ùire",
        "fileduplicatesearch-noresults": "Cha deach faidhle air a bheil \"$1\" a lorg.",
        "specialpages": "Duilleagan sònraichte",
        "specialpages-note-top": "Treòir",
-       "specialpages-note": "* Duilleagan sònraichte coitcheann.\n* <span class=\"mw-specialpagerestricted\">Duilleagan sònraichte cuingichte.</span>",
        "specialpages-group-maintenance": "Aithrisean na h-obrach-glèidhidh",
        "specialpages-group-other": "Duilleagan sònraichte eile",
        "specialpages-group-login": "Log a-steach / cruthaich cunntas",
        "htmlform-cloner-delete": "Thoir air falbh",
        "htmlform-cloner-required": "Tha luach a dhìth.",
        "logentry-delete-delete": "Sguab $1 às duilleag $3",
-       "logentry-delete-restore": "Dh'aisig $1 duilleag $3",
+       "logentry-delete-restore": "Dh’aisig $1 duilleag $3 ($4)",
        "logentry-delete-event": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|tachartas|thachartas|tachartasan|tachartas}} an loga air $3: $4",
        "logentry-delete-revision": "Dh'atharraich $1 an fhaicsinneachd aig $5 {{PLURAL:$5|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} air $3: $4",
        "logentry-delete-event-legacy": "Dh'atharraich $1 an fhaicsinneachd aig tachartasan an loga air $3",
        "special-characters-group-bangla": "Bangla",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
-       "special-characters-group-gujarati": "Gujarati"
+       "special-characters-group-gujarati": "Gujarati",
+       "randomrootpage": "Duilleag root air thuaiream"
 }
index 8e1d012..de2a3c2 100644 (file)
        "contentmodelediterror": "Non pode editar esta revisión porque o seu modelo de contido é \"<code>$1</code>\", o cal difire do modelo de contido \"<code>$2</code>\", que é o actual da páxina.",
        "recreate-moveddeleted-warn": "'''Atención: Vai volver crear unha páxina que xa foi eliminada anteriormente.'''\n\nDebería considerar se é apropiado continuar a editar esta páxina.\nVelaquí están o rexistro de borrados e mais o de traslados desta páxina, por se quere consultalos:",
        "moveddeleted-notice": "Esta páxina foi borrada.\nA continuación pódese ver o rexistro de borrados e traslados desta páxina, por se quere consultalos.",
-       "moveddeleted-notice-recent": "Sentímolo, borrouse esta páxina recentemente (nas últimas 24 horas).\nVelaquí están o rexistro de borrados e traslados da páxina, por se os quere consultar.",
+       "moveddeleted-notice-recent": "Sentímolo, borrouse esta páxina recentemente (nas últimas 24 horas).\nVelaquí están o rexistro de borrados, proteccións e traslados da páxina, por se os quere consultar.",
        "log-fulllog": "Ver o rexistro completo",
        "edit-hook-aborted": "A edición foi abortada polo asociador.\nEste non deu ningunha explicación.",
        "edit-gone-missing": "Non se pode actualizar a páxina.\nSemella que foi borrada.",
        "prefs-editwatchlist-clear": "Limpar a súa lista de vixilancia",
        "prefs-watchlist-days": "Número de días que mostrar na lista de vixilancia:",
        "prefs-watchlist-days-max": "Máximo: $1 {{PLURAL:$1|día|días}}",
-       "prefs-watchlist-edits": "Número máximo de edicións que mostrar na lista de vixilancia completa:",
+       "prefs-watchlist-edits": "Número máximo de edicións que mostrar na lista de vixilancia:",
        "prefs-watchlist-edits-max": "Número máximo: 1000",
        "prefs-watchlist-token": "Pase para a lista de vixilancia:",
        "prefs-misc": "Preferencias varias",
        "rcfilters-savedqueries-add-new-title": "Gardar a configuración do filtro actual",
        "rcfilters-restore-default-filters": "Restaurar os filtros por defecto",
        "rcfilters-clear-all-filters": "Borrar todos os filtros",
-       "rcfilters-show-new-changes": "Mostrar os novos cambios",
+       "rcfilters-show-new-changes": "Mostrar os cambios máis recentes",
        "rcfilters-previous-changes-label": "Modificacións vistas anteriormente",
        "rcfilters-search-placeholder": "Filtrar os cambios recentes (ollar ou comezar a escribir)",
        "rcfilters-invalid-filter": "Filtro no válido",
        "watching": "Vixiando...",
        "unwatching": "Deixando de vixiar...",
        "watcherrortext": "Houbo un erro ao cambiar as súas opcións de vixilancia para a páxina \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Marcar todas as páxinas como visitadas",
        "enotif_impersonal_salutation": "Usuario de {{SITENAME}}",
        "enotif_subject_deleted": "{{GENDER:$2|$2}} borrou a páxina chamada \"$1\" en {{SITENAME}}",
        "import-nonewrevisions": "Non se importou ningunha revisión (xa estaban todas presentes ou saltáronse por erros).",
        "xml-error-string": "$1 na liña $2, columna $3 (byte $4): $5",
        "import-upload": "Cargar datos XML",
-       "import-token-mismatch": "Perda dos datos da sesión.\n\nPoida que se pechase a súa sesión. <strong>Por favor, comprobe que ten a sesión aberta e probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
+       "import-token-mismatch": "Perda dos datos da sesión.\n\nPoida que se pechase a súa sesión. '''Por favor, comprobe que ten a sesión aberta e probe de novo'''.\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
        "import-invalid-interwiki": "Non se pode importar desde o wiki escificado.",
        "import-error-edit": "Non foi posible importar a páxina \"$1\" porque non ten os permisos necesarios para editala.",
        "import-error-create": "Non foi posible importar a páxina \"$1\" porque non ten os permisos necesarios para creala.",
        "compare-invalid-title": "O título que especificou non é válido.",
        "compare-title-not-exists": "O título que especificou non existe.",
        "compare-revision-not-exists": "A revisión que especificou non existe.",
+       "diff-form": "Diferenzas",
+       "diff-form-oldid": "Identificador de revisión antigo (opcional)",
+       "diff-form-revid": "Identificador de revisión da diferenza",
+       "diff-form-submit": "Mostrar as diferenzas",
+       "permanentlink": "Ligazón permanente",
+       "permanentlink-revid": "ID da revisión",
+       "permanentlink-submit": "Ir á revisión",
        "dberr-problems": "Sentímolo! Este sitio está experimentando dificultades técnicas.",
        "dberr-again": "Por favor, agarde uns minutos e logo probe a cargar de novo a páxina.",
        "dberr-info": "(Non se pode acceder ao servidor da base de datos: $1)",
index e5f3045..1d9f503 100644 (file)
        "showdiff": "ફેરફારો દર્શાવો",
        "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
        "anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે  સાચવવામાં આવશે",
-       "missingsummary": "<strong>ચેતવણી:</strong> તમે ફેરફારોનો સારાંશ આપ્યો\nજો તમે \"$1\"  પર ફરી ક્લિક કરશો તો તમારા ફેરફારો સાચવવામાં આવશે.",
+       "missingsummary": "<strong>ચેતવણી:</strong> તમે ફેરફારોનો સારાંશ આપ્યો નથી.\nજો તમે \"$1\"  પર ફરી ક્લિક કરશો તો, તમારા ફેરફારો સારાંશ વગર સાચવવામાં આવશે.",
        "missingcommenttext": "કૃપા કરી નીચે ટીપ્પણી લખો.",
-       "missingcommentheader": "'''યાદ દેવડાવું:'''તમે તમારી ટિપ્પણી ને શીર્ષક/મથાળુ આપ્યું નથી. \nજો તમે  \"$1\" પર ફરીથી ક્લિક કરશો, તો તમારા ફેરરારો મથાળા વગર સચવાશે.",
+       "missingcommentheader": "<strong>ચેતવણી:</strong> તમે તમારી ટિપ્પણી ને શીર્ષક/મથાળુ આપ્યું નથી.\nજો તમે  \"$1\" પર ફરીથી ક્લિક કરશો, તો તમારા ફેરફારો મથાળા વગર સચવાશે.",
        "summary-preview": "સંપાદન સારાંશ પૂર્વાવલોકન:",
        "subject-preview": "વિષયનું પૂર્વાવલોકન:",
        "blockedtitle": "સભ્ય પ્રતિબંધિત છે",
        "note": "'''નોંધ:'''",
        "previewnote": "<strong>ધ્યાનમાં રાખો કે આ ફક્ત પૂર્વાવલોકન છે.</strong>\nતમારા ફેરફારો હજુ સાચવવામાં આવ્યા નથી!",
        "continue-editing": "ફેરફાર કરવાનું ચાલુ રાખો",
-       "previewconflict": "àª\9cà«\8b àª¤àª®à«\87 àª\86 àªªàª¾àª¨à«\81àª\82 àª¸àª¾àª\9aવશà«\8b àª¤à«\8b àª\86 àªªà«\8dરિવà«\8dયà«\81માàª\82 àª¦à«\87àª\96ાય àª\9bà«\87 àª¤à«\87વà«\81àª\82 àª¸àª\9aવાશે.",
+       "previewconflict": "àª\86 àªªà«\82રà«\8dવદરà«\8dશન àª¤àª®àª¨à«\87 àªªàª¾àª¨à«\81àª\82 àª¸àª\9aવાયા àªªàª\9bà«\80 àª\95à«\87વà«\81àª\82 àª¦à«\87àª\96ાશà«\87 àª¤à«\87 àª¬àª¤àª¾àªµà«\87 àª\9bે.",
        "session_fail_preview": "'''અફસોસ છે! સત્ર માહિતી ખોઇ દેવાને કારણે અમે તમારું કાર્ય સાચવી ન શક્યાં.'''\nકૃપયા ફરી પ્રયત્ન કરો.\nતેમ છતાં પણ સાચવી ન શકો તો [[Special:UserLogout|logging out]] કરી ફરી પ્રવેશ કરો.",
        "session_fail_preview_html": "'''અફસોસ છે! સત્ર માહિતીનો નાશ થવાથી તમે કરેલ ફેરફાર અમે સાચવી ન શક્યાં .'''\n\n''કેમકે  {{SITENAME}} માં કાચી HTML સક્રીય છે, JavaScript ના હુમલા સામેના રક્ષણ માટે ઝલક પર રોક લગાવી છે .''\n\n'''જો આ ગંભીર પ્રયત્ન હતો તો ફરી પ્રયત્ન કરો .'''\nઅનેતમા છતાં  કમા  ના કરેતો  [[Special:UserLogout|logging out]] કરી ફરી લોગ ઇન કરો.",
        "token_suffix_mismatch": "'''તમારા ફેરફારો કેમકે તમારા ગ્રાહકએ ફેરફાર નાકામાં વિરામચિન્હો અસ્ત વ્યસ્ત કરી દેતા.'''\nઆ પાનાને ખરાબ થતો અટકાવવા આ ફેરફાર રદ્દ કરાયો છે. \nજ્યારે તમે વેબ આધારિત  અજ્ઞાત પ્રોક્સી વાપરતા હોવ ત્યારે આવું બની શકે છે.",
        "permissionserrorstext": "તમને નીચેનાં {{PLURAL:$1|કારણ|કારણો}} સર  આ કાર્ય કરવાની પરવાનગીનથી.",
        "permissionserrorstext-withaction": "$2 પરવાનગી તમને નીચેનાં {{PLURAL:$1|કારણ|કારણો}} સર નથી:",
        "recreate-moveddeleted-warn": "'''ચેતવણી: તમે જે પાનું નવું બનાવવા જઇ રહ્યાં છો તે પહેલાં દૂર કરવામાં આવ્યું છે.'''\n\nઆ પાનું સંપાદિત કરતા પહેલાં ગંભીરતાપૂર્વક વિચારજો અને જો તમને લાગે કે આ પાનું ફરી વાર બનાવવું ઉચિત છે, તો જ અહીં ફેરફાર કરજો.\nપાનું હટાવ્યાં પહેલાનાં બધા ફેરફારોની સૂચિ તમારી અનુકૂળતા માટે અહીં આપી છે:",
-       "moveddeleted-notice": "àª\86 àªªàª¾àª¨à«\81àª\82 àª­à«\82àª\82સà«\80 àª¦à«\87વાયà«\81àª\82 àª\9bà«\87.\nતમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª­à«\82àª\82સà«\87લા àª\85નà«\87 àª¹àª\9fાવà«\87લા àªªàª¾àª¨àª¾ની સૂચિ આપેલી છે.",
+       "moveddeleted-notice": "àª\86 àªªàª¾àª¨à«\81àª\82 àª¦à«\82ર àª\95રવામાàª\82 àª\86વà«\8dયà«\81àª\82 àª\9bà«\87.\nતમારા àª¸àª\82દરà«\8dભ àª®àª¾àª\9fà«\87 àª¦à«\82ર àª\95રà«\87લા, àª¸à«\81રàª\95à«\8dષિત àª\95રà«\87લા àª\85નà«\87 àª\96સà«\87ડà«\87લા àªªàª¾àª¨àª¾àª\82ની સૂચિ આપેલી છે.",
        "log-fulllog": "પૂર્ણ લોગ જુઓ",
        "edit-hook-aborted": "ખૂંટા દ્વારા રદ્દ કરાયું.\nકોઇ કારણ નથી અપાયું",
        "edit-gone-missing": "આ પાને અધ્યતન ન બનાવી શકાયું \nલાગે છે કોઇએ આ પાનું હટાવી દીધું છે",
        "recentchanges-legend-heading": "<strong>કળ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|નવા પાનાઓની યાદી]] પણ જુઓ)",
        "recentchanges-submit": "બતાવો",
+       "rcfilters-other-review-tools": "<strong>અન્ય ચકાસણી સાધનો</strong>",
+       "rcfilters-savedqueries-cancel-label": "રદ કરો",
        "rcnotefrom": "નીચે <strong>$3, $4</strong> થી {{PLURAL:$5|ફેરફાર|ફેરફારો}} દર્શાવેલ છે (<strong>$1</strong> સુધી દર્શાવેલ છે).",
        "rclistfrom": "$3 $2 બાદ થયેલા નવા ફેરફારો બતાવો",
        "rcshowhideminor": "નાના ફેરફારો $1",
        "recentchangeslinked-feed": "આની સાથે જોડાયેલા ફેરફાર",
        "recentchangeslinked-toolbox": "આની સાથે જોડાયેલા ફેરફાર",
        "recentchangeslinked-title": "\"$1\" ને લગતા ફેરફારો",
-       "recentchangeslinked-summary": "આ એવા ફેરફારોની યાદી છે જે આ ચોક્કસ પાના (કે શ્રેણીનાં સભ્ય પાનાઓ) સાથે જોડાયેલા પાનાઓમાં તાજેતરમાં કરવામાં આવ્યા હોય.\n<br />[[Special:Watchlist|તમારી ધ્યાનસૂચિમાં]] હોય તેવા પાનાં '''ઘાટા અક્ષર'''માં વર્ણવ્યાં છે",
+       "recentchangeslinked-summary": "આ એવા ફેરફારોની યાદી છે જે આ ચોક્કસ પાના (કે શ્રેણીનાં સભ્ય પાનાઓ) સાથે જોડાયેલા પાનાઓમાં તાજેતરમાં કરવામાં આવ્યા હોય.\n[[Special:Watchlist|તમારી ધ્યાનસૂચિમાં]] હોય તેવા પાનાં '''ઘાટા અક્ષર'''માં વર્ણવ્યાં છે.",
        "recentchangeslinked-page": "પાનાનું નામ:",
        "recentchangeslinked-to": "આને બદલે આપેલા પાનાં સાથે જોડાયેલા લેખોમાં થયેલા ફેરફારો શોધો",
        "upload": "ફાઇલ ચડાવો",
        "apisandbox-examples": "ઉદાહરણો",
        "apisandbox-results": "પરિણામો",
        "booksources": "પુસ્તક સ્રોત",
-       "booksources-search-legend": "પુસ્તક સ્રોત શોધો",
+       "booksources-search-legend": "પà«\81સà«\8dતàª\95 àª¸à«\8dરà«\8bત àª®àª¾àª\9fà«\87 àª¶à«\8bધà«\8b",
        "booksources-isbn": "આઇએસબીએન:",
        "booksources-search": "શોધ",
        "booksources-text": "નીચે દર્શાવેલ યાદી એ કડીઓ બતાવે છે જેઓ નવા અને જૂના પુસ્તકો  વેચે છે , અને તમે માંગેલ વસ્તુ સંબંધિ વધુ મહિતી પણ ધરાવી શકે છે.",
        "protect-locked-dblock": "માહિતી સંચ બંધ હોવાથી સંરક્ષણ સ્તર બદલી નહીં શકાય્\nઆ પાનાના હાલના સુરક્ષા સ્તર : $1",
        "protect-locked-access": "તમને પાનાની સુરક્ષાનાં સ્તરમાં ફેરફાર કરવાની પરવાનગી નથી.\nપાનાં '''$1'''નું હાલનું સેટીંગ અહિં જોઈ શકો છો:",
        "protect-cascadeon": "આ પાનું હાલમાં સંરક્ષિત છે કારણકે તે {{PLURAL:$1|પાનું,|પાનાઓ,}} જેમાં ધોધાકાર સંરક્ષણ ચાલુ છે, તેમાં છે.\n\nતમે આ પાનાઓનું સંરક્ષણ સ્તર બદલી શકો છો, પરંતુ તેની અસર ધોધાકાર સંરક્ષણ પર પડવી જોઇએ નહીં.",
-       "protect-default": "બધા સભ્યોને પરવાનગી",
+       "protect-default": "બધા સભ્યોને પરવાનગી આપો",
        "protect-fallback": "માત્ર \"$1\" પરવાનગી સાથેના સભ્યોને માન્ય રાખો",
        "protect-level-autoconfirmed": "માત્ર આપમેળે ખાતરી થયેલા સભ્યોને માન્ય રાખો",
        "protect-level-sysop": "માત્ર પ્રબંધકોને માન્ય રાખો",
index 5c13100..779acf1 100644 (file)
@@ -4,7 +4,8 @@
                        "Mladanali",
                        "아라",
                        "DonCamillo",
-                       "Koavf"
+                       "Koavf",
+                       "Ammarpad"
                ]
        },
        "tog-underline": "A shaya zaruruwa",
        "sep": "Sat",
        "oct": "Okt",
        "nov": "Nuw",
-       "dec": "Dic",
+       "dec": "Dis",
        "january-date": "Janairu $1",
        "february-date": "Fabrairu $1",
        "march-date": "Maris $1",
        "disclaimerpage": "Project:Babban gargaɗi",
        "edithelp": "Taimako kan gyara",
        "helppage-top-gethelp": "Taimako",
-       "mainpage": "Marhabin",
+       "mainpage": "Babban shafi",
        "mainpage-description": "Babban shafi",
        "policy-url": "Shiri:Siyasa",
        "portal": "Kofan al'umma",
-       "portal-url": "Shiri:Kofan al'umma",
+       "portal-url": "Wikipedia:Kofan al'umma",
        "privacy": "Manufar kare sirri",
        "privacypage": "Project:Manufar kare sirri",
        "badaccess": "Tangarɗar lamuncewa",
        "rcshowhideliu-show": "Nuna",
        "rcshowhideliu-hide": "Ɓoye",
        "rcshowhideanons": "$1 ma'aikata masu ɓoyayye suna",
-       "rcshowhideanons-hide": "Ɓooye",
+       "rcshowhideanons-hide": "Ɓoye",
        "rcshowhidemine": "$1 sauye-sauyena",
        "rcshowhidemine-hide": "Ɓoye",
        "rclinks": "Nuna sauye-sauye $1 na ƙarshe a cikin kwanaki $2 na baya",
index cb8ddab..543fa69 100644 (file)
@@ -75,6 +75,7 @@
        "tog-watchlisthideminor": "הסתרת עריכות משניות ברשימת המעקב",
        "tog-watchlisthideliu": "הסתרת עריכות של משתמשים רשומים ברשימת המעקב",
        "tog-watchlistreloadautomatically": "רענון אוטומטי של רשימת המעקב בכל פעם שמסנן משתנה (דרוש JavaScript)",
+       "tog-watchlistunwatchlinks": "הוספת קישורי הפסקת/הפעלת מעקב לערכים ברשימת המעקב (דרוש JavaScript כדי שהקישור יתעדכן בעת לחיצה עליו)",
        "tog-watchlisthideanons": "הסתרת עריכות של משתמשים אנונימיים ברשימת המעקב",
        "tog-watchlisthidepatrolled": "הסתרת עריכות בדוקות ברשימת המעקב",
        "tog-watchlisthidecategorization": "הסתרת שינויים בקטגוריות",
        "changeemail-throttled": "ביצעתם ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
        "changeemail-nochange": "יש להקליד כתובת דוא\"ל חדשה שונה.",
        "resettokens": "איפוס אסימונים",
-       "resettokens-text": "×\91×¢×\9e×\95×\93 זה ניתן לאפס אסימונים שמאפשרים גישה לנתונים פרטיים של החשבון שלך.\n\nרצוי לעשות זאת אם שיתפת אותם בטעות עם אחרים או אם חשבונך נפרץ.",
+       "resettokens-text": "×\91×\93×£ ×\94זה ניתן לאפס אסימונים שמאפשרים גישה לנתונים פרטיים של החשבון שלך.\n\nרצוי לעשות זאת אם שיתפת אותם בטעות עם אחרים או אם חשבונך נפרץ.",
        "resettokens-no-tokens": "אין אסימונים לאיפוס.",
        "resettokens-tokens": "אסימונים:",
        "resettokens-token-label": "$1 (ערך נוכחי: $2)",
        "permissionserrorstext-withaction": "אין ב{{GENDER:|אפשרותך|אפשרותך|אפשרותכם}} $2, מה{{PLURAL:$1|סיבה הבאה|סיבות הבאות}}:",
        "contentmodelediterror": "לא ניתן לערוך את הגרסה הזאת כי מודל התוכן שלה הוא <code>$1</code>, השונה ממודל התוכן הנוכחי של הדף, <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''אזהרה: הנכם יוצרים דף חדש שנמחק בעבר.'''\n\nכדאי לשקול אם יהיה זה נכון להמשיך לערוך את הדף.\nיומני המחיקות וההעברות של הדף מוצגים להלן:",
-       "moveddeleted-notice": "דף זה נמחק.\nיומני המחיקות וההעברות של הדף מוצגים להלן.",
-       "moveddeleted-notice-recent": "מצטערים, הדף הזה נמחק לאחרונה (ב־24 השעות האחרונות).\nיומני המחיקות וההעברות של הדף מוצגים להלן לעיון.",
+       "moveddeleted-notice": "דף זה נמחק.\nיומני המחיקות, ההגנות וההעברות של הדף מוצגים להלן לעיון.",
+       "moveddeleted-notice-recent": "מצטערים, הדף הזה נמחק לאחרונה (ב־24 השעות האחרונות).\nיומני המחיקות, ההגנות וההעברות של הדף מוצגים להלן לעיון.",
        "log-fulllog": "הצגת היומן המלא",
        "edit-hook-aborted": "העריכה בוטלה על־ידי Hook.\nלא ניתן הסבר לביטול.",
        "edit-gone-missing": "לא ניתן לעדכן את הדף.\nנראה שהוא נמחק.",
        "watching": "בהוספה לרשימת המעקב...",
        "unwatching": "בהסרה מרשימת המעקב...",
        "watcherrortext": "אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "סימון כל הדפים כאילו נצפו",
        "enotif_impersonal_salutation": "משתמש ב{{GRAMMAR:תחילית|{{SITENAME}}}}",
        "enotif_subject_deleted": "הדף \"$1\" ב{{grammar:תחילית|{{SITENAME}}}} נמחק על־ידי $2",
        "compare-invalid-title": "שם הדף שציינת אינו תקין.",
        "compare-title-not-exists": "הדף שציינת אינו קיים.",
        "compare-revision-not-exists": "הגרסה שציינת אינה קיימת.",
+       "diff-form": "הבדלים",
+       "diff-form-oldid": "מספר הגרסה הישנה (אופציונלי)",
+       "diff-form-revid": "מספר הגרסה החדשה",
+       "diff-form-submit": "הצגת ההבדלים",
+       "permanentlink": "קישור קבוע",
+       "permanentlink-revid": "מספר הגרסה",
+       "permanentlink-submit": "מעבר לגרסה",
        "dberr-problems": "מצטערים! קיימת בעיה טכנית באתר זה.",
        "dberr-again": "נסו להמתין מספר שניות ולהעלות מחדש את הדף.",
        "dberr-info": "(לא ניתן לגשת לבסיס הנתונים: $1)",
index f741240..001cee9 100644 (file)
@@ -82,7 +82,8 @@
                        "Shyamal",
                        "SatyamMishra",
                        "चक्रपाणी",
-                       "Anamdas"
+                       "Anamdas",
+                       "Sachinkatiyar"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "tog-watchlisthideminor": "मेरी ध्यानसूची से छोटे परिवर्तन छिपाएँ",
        "tog-watchlisthideliu": "मेरी ध्यानसूची में सत्रारम्भित सदस्यों के सम्पादन न दिखाएँ",
        "tog-watchlistreloadautomatically": "जब भी छननी बदलने पर ध्यानसूची को अपने आप ही लोड करें (जावास्क्रिप्ट अनिवार्य)",
+       "tog-watchlistunwatchlinks": "देखनेवाली सूची प्रविष्टियों के लिए सीधा अनदेखा/देखा कड़ी जोड़ें (टॉगल कार्यक्षमता के लिए जावास्क्रिप्ट आवश्यक)",
        "tog-watchlisthideanons": "आई॰पी॰ सदस्यों द्वारा किए सम्पादनों को मेरी ध्यानसूची में न दिखायें",
        "tog-watchlisthidepatrolled": "परीक्षित सम्पादन मेरी ध्यानसूची में छुपाएँ",
        "tog-watchlisthidecategorization": "पृष्ठों का श्रेणीकरण छुपाएँ",
        "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नए पन्नों की सूची]] को भी देखें)",
        "recentchanges-submit": "दिखाएँ",
+       "rcfilters-legend-heading": "<strong>संकेतों की सूची:</strong>",
+       "rcfilters-other-review-tools": "<strong>दूसरे समीक्षा उपकरण</strong>",
        "rcfilters-activefilters": "सक्रिय फिल्टर",
+       "rcfilters-limit-title": "दिखाने के लिए बदलाव",
        "rcfilters-limit-shownum": "पिछले $1 बदलाव दिखायें",
        "rcfilters-days-title": "कुछ दिनों के",
        "rcfilters-hours-title": "कुछ घंटों के",
        "watching": "ध्यान दे रहे हैं...",
        "unwatching": "ध्यान हटा रहे हैं...",
        "watcherrortext": "\"$1\" के लिये आपकी ध्यानसूची सेटिंग बदलते समय त्रुटि हुई।",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "सभी पृष्ठ देखे हुए दर्शाएँ",
        "enotif_impersonal_salutation": "{{SITENAME}} सदस्य",
        "enotif_subject_deleted": "{{SITENAME}} पृष्ठ $1 को {{gender:$2|$2}} ने हटा दिया है",
        "compare-invalid-title": "आपके द्वारा निर्दिष्ट शीर्षक अमान्य है।",
        "compare-title-not-exists": "आपके द्वारा निर्दिष्ट शीर्षक मौजूद नहीं है।",
        "compare-revision-not-exists": "आपके द्वारा निर्दिष्ट संशोधन मौजूद नहीं है।",
+       "diff-form": "एक '''पर्चा'''",
+       "diff-form-oldid": "पुराना अवतरण (वैकल्पिक)",
+       "diff-form-submit": "अंतर दिखाएँ",
+       "permanentlink": "स्थायी कड़ी",
+       "permanentlink-revid": "अवतरण आईडी",
+       "permanentlink-submit": "अवतरण में जाएँ",
        "dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
        "dberr-again": "कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।",
        "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
index dd01232..e95ae11 100644 (file)
        "autosumm-replace": "Zamijenjen sadržaj stranice s »$1«",
        "autoredircomment": "Preusmjeravanje stranice na [[$1]]",
        "autosumm-new": "Stvorena nova stranica sa sadržajem: »$1«.",
-       "autosumm-newblank": "stvorena prazna stranica",
+       "autosumm-newblank": "Stvorena prazna stranica.",
        "size-bytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
        "lag-warn-normal": "Moguće je da izmjene nastale posljednjih $1 {{PLURAL:$1|sekundu|sekundi}} neće biti vidljive na ovom popisu.",
        "lag-warn-high": "Zbog kašnjenja baze podataka, moguće je da promjene napravljene u posljednjih $1 {{PLURAL:$1|sekundu|sekunde|sekundi}} nisu prikazane u popisu.",
        "compare-invalid-title": "Naslov koji ste naveli nije valjan.",
        "compare-title-not-exists": "Naslov koji ste naveli ne postoji.",
        "compare-revision-not-exists": "Navedena izmjena stranice ne postoji.",
+       "diff-form": "'''form'''",
        "dberr-problems": "Ispričavamo se! Ova stranica ima tehničkih poteškoća.",
        "dberr-again": "Pričekajte nekoliko minuta i ponovno učitajte.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
index bf9c69b..b84d174 100644 (file)
@@ -78,7 +78,7 @@
        "tog-shownumberswatching": "A lapot figyelő szerkesztők számának megjelenítése",
        "tog-oldsig": "A jelenlegi aláírásod:",
        "tog-fancysig": "Az aláírás wikiszöveg (nem lesz automatikusan hivatkozásba rakva)",
-       "tog-uselivepreview": "Élő előnézet használata",
+       "tog-uselivepreview": "Előnézetek megjelenítése az oldal újratöltése nélkül",
        "tog-forceeditsummary": "Figyelmeztessen, ha nem adok meg szerkesztési összefoglalót",
        "tog-watchlisthideown": "Saját szerkesztések elrejtése",
        "tog-watchlisthidebots": "Robotok szerkesztéseinek elrejtése",
        "contentmodelediterror": "Nem szerkesztheted ezt a változatot, mert a tartalommodellje <code>$1</code>, ami eltér a jelenlegitől (<code>$2</code>).",
        "recreate-moveddeleted-warn": "'''Figyelem! Olyan lapot készülsz létrehozni, amit már legalább egyszer töröltek.'''\n\nMielőtt létrehoznád, nézd meg, miért törölték a lap korábbi tartalmát, és győződj meg róla, hogy a törlés indoka érvényes-e még. A törlési és átnevezési naplókban az érintett lapról az alábbi bejegyzések szerepelnek:",
        "moveddeleted-notice": "Az oldal korábban törölve lett.\nA lap törlési és átnevezési naplója alább olvasható.",
-       "moveddeleted-notice-recent": "Sajnáljuk, az oldalt nemrég törölték (az elmúlt 24 órában).\nA részletekért lásd lentebb a törlési és átnevezési naplót.",
+       "moveddeleted-notice-recent": "Sajnáljuk, az oldalt nemrég törölték (az elmúlt 24 órában).\nA részletekért lásd lentebb a törlési, védelmi és átnevezési naplót.",
        "log-fulllog": "Teljes napló megtekintése",
        "edit-hook-aborted": "A szerkesztés meg lett szakítva egy hook által.\nNem lett magyarázat csatolva.",
        "edit-gone-missing": "Nem lehet frissíteni a lapot.\nÚgy tűnik, hogy törölve lett.",
        "rcfilters-advancedfilters": "Haladó szűrők",
        "rcfilters-limit-title": "Megjelenítendő változtatások",
        "rcfilters-limit-shownum": "Utolsó $1 változtatás megjelenítése",
+       "rcfilters-days-title": "Legutóbbi napok",
+       "rcfilters-hours-title": "Legutóbbi órák",
        "rcfilters-days-show-days": "$1 nap",
        "rcfilters-days-show-hours": "$1 óra",
        "rcfilters-quickfilters": "Mentett szűrők",
        "rcfilters-filter-previousrevision-description": "Minden változtatás a legutóbbiak kivételével",
        "rcfilters-filter-excluded": "Kizárva",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nem</strong> $1",
+       "rcfilters-view-advanced-filters-label": "Haladó szűrők",
        "rcfilters-view-tags": "Megjelölt szerkesztések",
        "rcfilters-view-namespaces-tooltip": "Találatok szűrése névtér szerint",
        "rcfilters-view-tags-tooltip": "Találatok szűrése címkék használatával",
        "enotif_lastdiff": "Ezen változtatás megtekintéséhez lásd: $1",
        "enotif_anon_editor": "$1 névtelen felhasználó",
        "enotif_body": "Kedves $WATCHINGUSERNAME!\n\n$PAGEINTRO $NEWPAGE\n\nA szerkesztési összefoglaló a következő volt: $PAGESUMMARY $PAGEMINOREDIT\n\nA szerkesztő elérhetősége:\ne-mail küldése: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nAmíg nem keresed fel az oldalt bejelentkezve, addig nem érkeznek újabb értesítések az oldal változásaival kapcsolatban. A figyelőlistádon is beállíthatod, hogy újból kapj értesítéseket, az összes lap után.\n\nBaráti üdvözlettel: a(z) {{SITENAME}} értesítő rendszere\n\n--\nAz e-mail értesítéseid módosításához keresd fel a \n{{canonicalurl:{{#special:Preferences}}}} címet\n\nA figyelőlistád módosításához keresd fel a\n{{canonicalurl:{{#special:EditWatchlist}}}} címet\n\nA lap figyelőlistádról való törléséhez keresd fel a\n$UNWATCHURL címet\n\nVisszajelzés és további segítség:\n$HELPPAGE",
+       "enotif_minoredit": "Ez egy apró szerkesztés",
        "created": "létrehozta",
        "changed": "megváltoztatta",
        "deletepage": "Lap törlése",
        "compare-invalid-title": "A megadott cím érvénytelen.",
        "compare-title-not-exists": "A megadott cím nem létezik.",
        "compare-revision-not-exists": "A megadott lapváltozat nem létezik.",
+       "diff-form": "egy '''űrlap'''",
        "dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
        "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
        "logentry-import-upload-details": "$1 {{GENDER:$2|importálta}} a(z) $3 lapot fájlfeltöltéssel ($4 lapváltozat).",
        "logentry-import-interwiki": "$1 {{GENDER:$2|importálta}} $3 lapot egy másik wikiből",
        "logentry-import-interwiki-details": "$1 {{GENDER:$2|importálta}} a(z) $3 lapot a(z) $5 wikiről ($4 lapváltozat).",
-       "logentry-merge-merge": "$1 {{GENDER:$2|összevonta}} $3 lapot $4 lappal ($5 változtig)",
+       "logentry-merge-merge": "$1 {{GENDER:$2|összevonta}} $3 lapot $4 lappal ($5 változatig)",
        "logentry-move-move": "$1 átnevezte a(z) $3 lapot a következő névre: $4",
        "logentry-move-move-noredirect": "$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül",
        "logentry-move-move_redir": "$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva",
index e4344ec..8f47121 100644 (file)
                        "Luigi.delia",
                        "Samuele2002",
                        "Kaspo",
-                       "Pequod76"
+                       "Pequod76",
+                       "Greis"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "editfont-style": "Stile del carattere nella casella di modifica:",
        "editfont-default": "Predefinito del browser",
        "editfont-monospace": "Carattere a larghezza fissa",
-       "editfont-sansserif": "Carattere sans-serif",
-       "editfont-serif": "Carattere serif",
+       "editfont-sansserif": "Carattere Sans-serif",
+       "editfont-serif": "Carattere Serif",
        "sunday": "domenica",
        "monday": "lunedì",
        "tuesday": "martedì",
        "oct": "ott",
        "nov": "nov",
        "dec": "dic",
-       "january-date": "{{PLURAL:$1|1°|$1}} gennaio",
-       "february-date": "{{PLURAL:$1|1°|$1}} febbraio",
-       "march-date": "{{PLURAL:$1|1°|$1}} marzo",
-       "april-date": "{{PLURAL:$1|1°|$1}} aprile",
-       "may-date": "{{PLURAL:$1|1°|$1}} maggio",
-       "june-date": "{{PLURAL:$1|1°|$1}} giugno",
-       "july-date": "{{PLURAL:$1|1°|$1}} luglio",
-       "august-date": "{{PLURAL:$1|1°|$1}} agosto",
-       "september-date": "{{PLURAL:$1|1°|$1}} settembre",
-       "october-date": "{{PLURAL:$1|1°|$1}} ottobre",
-       "november-date": "{{PLURAL:$1|1°|$1}} novembre",
-       "december-date": "{{PLURAL:$1|1°|$1}} dicembre",
+       "january-date": "$1 gennaio",
+       "february-date": "$1 febbraio",
+       "march-date": "$1 marzo",
+       "april-date": "$1 aprile",
+       "may-date": "$1 maggio",
+       "june-date": "$1 giugno",
+       "july-date": "$1 luglio",
+       "august-date": "$1 agosto",
+       "september-date": "$1 settembre",
+       "october-date": "$1 ottobre",
+       "november-date": "$1 novembre",
+       "december-date": "$1 dicembre",
        "period-am": "AM",
        "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorie}}",
        "searchbutton": "Ricerca",
        "go": "Vai",
        "searcharticle": "Vai",
-       "history": "Versioni precedenti",
+       "history": "Cronologia della pagina",
        "history_short": "Cronologia",
        "history_small": "cronologia",
        "updatedmarker": "modificata dalla mia ultima visita",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Inserisci la tua password",
        "createacct-yourpassword-ph": "Inserisci una password",
-       "yourpasswordagain": "Ripeti la password:",
+       "yourpasswordagain": "Riscrivi la password:",
        "createacct-yourpasswordagain": "Conferma password",
        "createacct-yourpasswordagain-ph": "Inserisci nuovamente la password",
        "userlogin-remembermypassword": "Mantienimi collegato",
        "pt-login-button": "Entra",
        "pt-login-continue-button": "Continua l'accesso",
        "pt-createaccount": "Registrati",
-       "pt-userlogout": "esci",
+       "pt-userlogout": "Esci",
        "php-mail-error-unknown": "Errore sconosciuto nella funzione PHP mail()",
        "user-mail-no-addy": "Hai cercato di inviare una e-mail senza un indirizzo.",
        "user-mail-no-body": "Tentato di inviare una e-mail con un testo vuoto o estremamente breve.",
        "watchthis": "Aggiungi agli osservati speciali",
        "savearticle": "Salva la pagina",
        "savechanges": "Salva le modifiche",
-       "publishpage": "Pubblica pagina",
-       "publishchanges": "Pubblica modifiche",
+       "publishpage": "Pubblica la pagina",
+       "publishchanges": "Pubblica le modifiche",
        "preview": "Anteprima",
        "showpreview": "Visualizza anteprima",
        "showdiff": "Mostra modifiche",
        "loginreqtitle": "Accesso richiesto",
        "loginreqlink": "effettuare l'accesso",
        "loginreqpagetext": "Per vedere altre pagine è necessario $1.",
-       "accmailtitle": "Password inviata.",
+       "accmailtitle": "Password inviata",
        "accmailtext": "Una password generata casualmente per [[User talk:$1|$1]] è stata inviata a $2. Questa password può essere modificata nella pagina per ''[[Special:ChangePassword|cambiare la password]]'' subito dopo l'accesso.",
        "newarticle": "(Nuovo)",
        "newarticletext": "Il collegamento appena seguito corrisponde ad una pagina non ancora esistente.\nSe vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella qui sotto (vedi la [$1 pagina di aiuto] per maggiori informazioni).\nSe il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante <strong>Indietro</strong> del proprio browser.",
        "permissionserrorstext-withaction": "Non si dispone dei permessi necessari per $2, per {{PLURAL:$1|il seguente motivo|i seguenti motivi}}:",
        "contentmodelediterror": "Non puoi modificare questa versione poiché il suo modello di contenuto è <code>$1</code>, che differisce dall'attuale modello di contenuto della pagina <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Attenzione: si sta per ricreare una pagina già cancellata in passato.</strong>\n\nAccertarsi che sia davvero opportuno continuare a modificare questa pagina.\nL'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per comodità:",
-       "moveddeleted-notice": "Questa pagina è stata cancellata. L'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per informazione.",
-       "moveddeleted-notice-recent": "Spiacenti, questa pagina è stata cancellata recentemente (nelle ultime 24 ore).\n\nLe azioni di cancellazione e spostamento per questa pagina sono disponibili di seguito per completezza.",
+       "moveddeleted-notice": "Questa pagina è stata cancellata.\nLe azioni di cancellazione, protezione e spostamento per questa pagina sono disponibili di seguito per informazione.",
+       "moveddeleted-notice-recent": "Spiacenti, questa pagina è stata cancellata recentemente (nelle ultime 24 ore).\n\nLe azioni di cancellazione, protezione e spostamento per questa pagina sono disponibili di seguito per informazione.",
        "log-fulllog": "Visualizza log completo",
        "edit-hook-aborted": "La modifica è stata annullata dall'hook.\nNon è stata restituita alcuna spiegazione.",
        "edit-gone-missing": "Impossibile aggiornare la pagina.\nSembra che sia stata cancellata.",
        "prefs-editwatchlist-clear": "Svuota i tuoi osservati speciali",
        "prefs-watchlist-days": "Numero di giorni da mostrare negli osservati speciali:",
        "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|giorno|giorni}}",
-       "prefs-watchlist-edits": "Numero di modifiche da mostrare con le funzioni avanzate:",
+       "prefs-watchlist-edits": "Numero massimo di modifiche da mostrare negli osservati speciali:",
        "prefs-watchlist-edits-max": "Numero massimo: 1000",
        "prefs-watchlist-token": "Token osservati speciali:",
        "prefs-misc": "Varie",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Mostra",
        "rcfilters-legend-heading": "<strong>Elenco di abbreviazioni:</strong>",
+       "rcfilters-other-review-tools": "<strong>Altri strumenti di revisione</strong>",
        "rcfilters-grouping-title": "Raggruppamento",
        "rcfilters-activefilters": "Filtri attivi",
        "rcfilters-advancedfilters": "Filtri avanzati",
        "rcfilters-savedqueries-add-new-title": "Salva le impostazioni attuali del filtro",
        "rcfilters-restore-default-filters": "Ripristina i filtri predefiniti",
        "rcfilters-clear-all-filters": "Pulisci tutti i filtri",
+       "rcfilters-show-new-changes": "Visualizza le modifiche più recenti",
+       "rcfilters-previous-changes-label": "Modifiche visualizzate precedentemente",
        "rcfilters-search-placeholder": "Filtra le ultime modifiche (naviga o inizia a digitare)",
        "rcfilters-invalid-filter": "Filtro non valido",
        "rcfilters-empty-filter": "Nessun filtro attivo. Sono mostrati tutti i contributi.",
        "compare-invalid-title": "Il titolo che hai specificato non è valido.",
        "compare-title-not-exists": "Il titolo che hai specificato non esiste.",
        "compare-revision-not-exists": "La versione che hai specificato non esiste.",
+       "diff-form": "Differenze",
+       "diff-form-submit": "Mostra le differenze",
+       "permanentlink": "Link permanente",
        "dberr-problems": "Questo sito sta avendo dei problemi tecnici.",
        "dberr-again": "Prova ad attendere qualche minuto e ricaricare.",
        "dberr-info": "(Impossibile accedere al server del database: $1)",
index 80f5022..3189ef0 100644 (file)
        "newwindow": "(新しいウィンドウで開きます)",
        "cancel": "取り消し",
        "moredotdotdot": "続き...",
-       "morenotlisted": "この一覧はおそらく完全ではありません。",
+       "morenotlisted": "この一覧は不完全かもしれません。",
        "mypage": "ページ",
        "mytalk": "トーク",
        "anontalk": "トーク",
        "compare-invalid-title": "指定したページ名は無効です。",
        "compare-title-not-exists": "指定したページは存在しません。",
        "compare-revision-not-exists": "指定した版は存在しません。",
+       "diff-form": "'''フォーム'''",
        "dberr-problems": "申し訳ありません! このウェブサイトに技術的な障害が発生しています。",
        "dberr-again": "数分間待った後、もう一度読み込んでください。",
        "dberr-info": "(データベース $1 にアクセスできません)",
index 88a78b8..6efbd9a 100644 (file)
        "history_short": "Sajarah",
        "history_small": "sajarah",
        "updatedmarker": "wis dianyari kawit tekaku mréné pungkasan",
-       "printableversion": "Vèrsi cap-capan",
+       "printableversion": "Vèrsi céthak",
        "permalink": "Pranala permanèn",
        "print": "Cithak",
        "view": "Deleng",
        "accmailtext": "Tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.\n\nTembung sandi iki bisa diganti ing kaca <em>[[Special:ChangePassword|salin tembung sandi]]</em> sawisé mlebu log.",
        "newarticle": "(Anyar)",
        "newarticletext": "Panjenengan ngetuti pranala sing durung ana.\nKanggo nggawé kaca, gagéa ngetik ing kothak ngisor iki (deleng [$1 kaca pitulung] ngenani katerangané).\nManawa panjenengan tekan kéné awit ora sengaja, kliken tumbul <strong>balik</strong> ana ing pangluruné panjenengan.",
-       "anontalkpagetext": "----\n<em>Iki kaca parembugané panganggo anonim sing durung gawé akun, utawa sing ora nganggo akuné.</em>\nMula, awak dhéwé kudu nganggo alamat IP awujud angka kanggo nglacak dhèwèké.\nAlamat IP mangkono bisa dianggo déning sawenèh panganggo.\nManawa panjenengan panganggo anonim lan rumasa yèn ana tanggepan sing ora ilok dieneraké marang panjenengan, mangga [[Special:CreateAccount|gawéa akun]] utawa [[Special:UserLogin|mlebua log]] kanggo ngéndhani salah pangira karo panganggo anonim liyané ing tembé buri.",
+       "anontalkpagetext": "----\n<em>Iki kaca parembugané panganggo anonim sing durung gawé akun, utawa sing ora nganggo akuné.</em>\nMula, awak dhéwé kudu nganggo alamat IP-né awujud angka kanggo nglacak dhèwèké.\nAlamat IP mangkono bisa dianggo déning sawenèh panganggo.\nManawa panjenengan panganggo anonim lan rumasa yèn ana tanggepan sing ora ilok dieneraké marang panjenengan, mangga [[Special:CreateAccount|gawéa akun]] utawa [[Special:UserLogin|mlebua log]] kanggo ngéndhani salah pangira karo panganggo anonim liyané ing tembé buri.",
        "noarticletext": "Kala saiki kaca iki durung ana tulisané.\nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] sajeroning kaca liya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki]</span>.",
        "noarticletext-nopermission": "Saiki lagi ora ana tèks ing kaca iki. \nPanjenengan bisa [[Special:Search/{{PAGENAME}}|nggolèk sesirah kaca iki]] ing kaca liyané, \nutawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{urlencode:{{FULLPAGENAME}}}}}} nggolèk ing log sing gegayutan]</span>, nanging panjenengan ora kawogan nggawé kaca iki.",
        "missing-revision": "Révisi #$1 saka kaca ajeneng \"{{FULLPAGENAME}}\" ora ana.\n\nIki biyasané kasababaké awit nututi pranala sajarah sing wis lawas saka sawijiné kaca sing wis dibusak.\nRerincèné bisa digolèki ing [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].",
        "previousrevision": "← Owahan sadurungé",
        "nextrevision": "Owahan sabanjuré →",
        "currentrevisionlink": "Owahan wekasan",
-       "cur": "sai",
+       "cur": "saiki",
        "next": "sabanjuré",
-       "last": "sadurung",
+       "last": "sadurungé",
        "page_first": "kapisan",
        "page_last": "pungkasan",
-       "histlegend": "Kanggo nandhingaké: tandhani kothak radhio révisi-révisi sing arep dibandhingaké lan pencèt ''Enter'' utawa tombol sing ana ing ngisor.<br />\nLegéndha: <strong>({{int:cur}})</strong> = béda karo révisi pungkasan, <strong>({{int:last}})</strong> = béda karo révisi sadurungé, <strong>{{int:minoreditletter}}</strong> = besutan cilik.",
+       "histlegend": "Kanggo mbandhingaké: Tandhani kothak radhioning révisi-révisi sing arep dibandhingaké lan pencèt ''Enter'' utawa tombol ing ngisor.<br />\nLegéndhah: <strong>({{int:cur}})</strong> = bédané karo révisi pungkasan, <strong>({{int:last}})</strong> = bédané karo révisi sadurungé, <strong>{{int:minoreditletter}}</strong> = besutan cilik.",
        "history-fieldset-title": "Golèk owahan",
        "history-show-deleted": "Mligi owahan sing dibusak",
        "histfirst": "lawas dhéwé",
        "rev-deleted-comment": "(tingkesaning besutan dibusak)",
        "rev-deleted-user": "(jeneng panganggo dibusak)",
        "rev-deleted-event": "(rerincèn log dibusak)",
-       "rev-deleted-user-contribs": "(jeneng panganggo utawa alamat IP dibusak - suntingan didhelikaké saka kontribusi)",
+       "rev-deleted-user-contribs": "[jeneng panganggo utawa alama IP dibusak - besutan didhelikaké saka pratélaning pisumbang]",
        "rev-deleted-text-permission": "Révisi kaca iki wis '''dibusak'''.\nPrincèné mbokmanawa kasedyakaké ing  [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pambusakan].",
        "rev-deleted-text-unhide": "Révisi kaca iki wis <strong>dibusak</strong>.\nRerincèné bisa digolèki ing [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log busak].\nPanjenengan isih bisa [$1 ndeleng révisi iki] yèn panjenengan arep.",
        "rev-suppressed-text-unhide": "Révisi kaca iki wis <strong>dibrèdhèl</strong>.\nRerincèné bisa digolèki ing [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log brèdhèl].\nPanjenengan isih bisa [$1 ndeleng révisi iki] yèn panjenengan arep.",
        "difference-title-multipage": "Béda antarané kaca \"$1\" lan \"$2\"",
        "difference-multipage": "(Prabédhan antar kaca)",
        "lineno": "Larik $1:",
-       "compareselectedversions": "Bandhingna vèrsi kapilih",
+       "compareselectedversions": "Bandhingaké rèvisi sing kapilih",
        "showhideselectedversions": "Tampilaké/dhelikaké révisi kapilih",
        "editundo": "wurung",
        "diff-empty": "(Ora ana bedane)",
        "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-description": "Sumbangané panjenengan dhéwé.",
+       "rcfilters-filter-editsbyself-description": "Pisumbangé panjenengan dhéwé.",
        "rcfilters-filter-editsbyother-label": "Owah-owahané liyan",
        "rcfilters-filter-editsbyother-description": "Kabèh owahan kajaba duwèké panjenengan.",
        "rcfilters-filtergroup-userExpLevel": "Tataran pangalaman (mung kanggo panganggo kadhaftar)",
        "rcfilters-filter-user-experience-level-learner-description": "Luwih akèh pangalamané tinimbang \"Wong neneka anyar\" nanging durung ngèmperi \"Panganggo kawakan\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Panganggo kawakan",
        "rcfilters-filter-user-experience-level-experienced-description": "Punjul saka 30 dina kagiyatan lan 500 besutan.",
-       "rcfilters-filtergroup-automated": "Sumbangan otomatisasi",
+       "rcfilters-filtergroup-automated": "Pisumbang otomatis",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Besutan déning piranti otomatisasi.",
        "rcfilters-filter-humans-label": "Manungsa (dudu bot)",
        "protectedtitlesempty": "Ora ana sesirah sing saiki kareksa mawa paramèter iki.",
        "protectedtitles-submit": "Tuduhaké sesirah",
        "listusers": "Daftar panganggo",
-       "listusers-editsonly": "Tampilaké mung panganggo sing nduwèni kontribusi",
+       "listusers-editsonly": "Mligi tuduhaké panganggo sing duwé pisumbang",
        "listusers-creationsort": "Urut miturut tanggal digawé",
        "listusers-desc": "Urutna mudhun",
        "usereditcount": "$1 {{PLURAL:$1|besutan|besutan}}",
        "categories-submit": "Tuduhaké",
        "categoriespagetext": "{{PLURAL:$1|kategori ing ngisor iki ngandhut|kategori ing ngisor iki ngandhut}} kaca utawa media.\n[[Special:UnusedCategories|Kategori sing ora dianggo]] ora ditampilaké ing kéné.\nDeleng uga [[Special:WantedCategories|kategori sing diperlokaké]].",
        "categoriesfrom": "Tuduhaké kategori-kategori sing diwiwiti:",
-       "deletedcontributions": "Sumbangané panganggo sing dibusak",
-       "deletedcontributions-title": "Sumbangané panganggo sing dibusak",
-       "sp-deletedcontributions-contribs": "sumbangan",
+       "deletedcontributions": "Pisumbanging panganggo sing dibusak",
+       "deletedcontributions-title": "Pisumbanging panganggo sing dibusak",
+       "sp-deletedcontributions-contribs": "pisumbang",
        "linksearch": "Golèkan pranala njaba",
        "linksearch-pat": "Polah ing gegolèkan:",
        "linksearch-ns": "Bilik nama:",
        "namespace_association": "Mandala aran magepokan",
        "tooltip-namespace_association": "Centhang kothak iki kanggo nglebokaké uga bilik jeneng gumenan utawa subyèk sing kakait karo bilik jeneng kapilih",
        "blanknamespace": "(Pokok)",
-       "contributions": "Sumbangané {{GENDER:$1|panganggo}}",
-       "contributions-title": "Sumbangané panganggo $1",
-       "mycontris": "Sumbangan",
-       "anoncontribs": "Sumbangan",
+       "contributions": "Pisumbanging {{GENDER:$1|panganggo}}",
+       "contributions-title": "Pisumbanging panganggo $1",
+       "mycontris": "Pisumbang",
+       "anoncontribs": "Pisumbang",
        "contribsub2": "Kanggo {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ora ditemokaké owah-owahan sing cocog karo kritéria kasebut iku.",
        "uctop": "(saiki)",
        "month": "Saka wulan (lan sadurungé):",
        "year": "Wiwit taun (lan sadurungé):",
-       "sp-contributions-newbies": "Tuduhaké mung sumbangané akun-akun anyar waé",
+       "sp-contributions-newbies": "Tuduhaké mung pisumbangé akun-akun anyar waé",
        "sp-contributions-newbies-sub": "Kanggo panganggo anyar",
-       "sp-contributions-newbies-title": "Sumbangané panganggo anyar",
+       "sp-contributions-newbies-title": "Pisumbanging panganggo anyar",
        "sp-contributions-blocklog": "log blokir",
-       "sp-contributions-deleted": "sumbangané {{GENDER:$1|panganggo}} sing dibusak",
+       "sp-contributions-deleted": "pisumbangé {{GENDER:$1|panganggo}} sing dibusak",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "sp-contributions-talk": "rembug",
-       "sp-contributions-userrights": "pengaturan hak panganggo",
+       "sp-contributions-userrights": "panataning hak {{GENDER:$1|panganggo}}",
        "sp-contributions-blocked-notice": "Panganggo iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya nèng ngisor kanggo rujukan:",
        "sp-contributions-blocked-notice-anon": "Alamat IP iki lagi diblokir.\nÈntri log blokiran pungkasan sumadhiya nèng ngisor kanggo rujukan:",
-       "sp-contributions-search": "Golèk sumbangan",
+       "sp-contributions-search": "Golèk pisumbang",
        "sp-contributions-username": "Alamat IP utawa jeneng panganggo:",
        "sp-contributions-toponly": "Tuduhaké besutan mligi rèvisi anyar",
        "sp-contributions-newonly": "Tuduhaké besutan mligi kaca gawéan",
        "blocklink": "palang",
        "unblocklink": "copot blokiran",
        "change-blocklink": "owahi blokiran",
-       "contribslink": "sumbangan",
+       "contribslink": "pisumbang",
        "emaillink": "kirim layang-èl",
        "autoblocker": "Panjenengan otomatis dipun-blok amargi nganggé alamat protokol internet (IP) ingkang sami kaliyan \"[[User:$1|$1]]\". Alesanipun $1 dipun blok inggih punika \"'''$2'''\"",
        "blocklogpage": "Log blokir",
        "tooltip-pt-anontalk": "Parembug ing besutan-besutan saka alamat IP iki",
        "tooltip-pt-preferences": "Pilih-pilihaning {{GENDER:|sampéyan}}",
        "tooltip-pt-watchlist": "Pratélaning kaca sing sampéyan awasi owah-owahané",
-       "tooltip-pt-mycontris": "Pratélané sumbangané {{GENDER:|panjenengan}}",
+       "tooltip-pt-mycontris": "Pratélaning pisumbangé {{GENDER:|panjenengan}}",
        "tooltip-pt-anoncontribs": "Pratélan besutané alamat IP iki",
        "tooltip-pt-login": "Panjenengan prayogané mlebu log, sanadyan ora kudu",
        "tooltip-pt-login-private": "Panjenengan kudu mlebu log supaya bisa nganggo wiki iki",
        "tooltip-t-recentchangeslinked": "Owah-owahan anyar saka kaca-kaca sing nggayut kaca iki",
        "tooltip-feed-rss": "''RSS feed'' kanggo kaca iki",
        "tooltip-feed-atom": "''Atom feed'' kanggo kaca iki",
-       "tooltip-t-contributions": "Pratélané sumbangané {{GENDER:$1|panganggo iki}}",
+       "tooltip-t-contributions": "Pratélaning pisumbanging {{GENDER:$1|panganggo iki}}",
        "tooltip-t-emailuser": "Kirimi layang-èl nyang {{GENDER:$1|panganggo iki}}",
        "tooltip-t-info": "Katerangan liyané ngenani kaca iki",
        "tooltip-t-upload": "Unggah barkas",
        "exif-photometricinterpretation": "Komposisi piksel",
        "exif-orientation": "Kéblat",
        "exif-samplesperpixel": "Cacah komponèn",
-       "exif-planarconfiguration": "Pangaturan data",
+       "exif-planarconfiguration": "Tata rakiting data",
        "exif-ycbcrsubsampling": "Rasio subsampling Y ke C",
        "exif-ycbcrpositioning": "Pandokokan Y lan C",
        "exif-xresolution": "Résolusi horisontal",
        "exif-contrast": "Kontras",
        "exif-saturation": "Saturasi",
        "exif-sharpness": "Kalandhepan",
-       "exif-devicesettingdescription": "Dhèskripsi pangaturan piranti",
+       "exif-devicesettingdescription": "Wedharaning setèlaning piranti",
        "exif-subjectdistancerange": "Jarak subjèk",
        "exif-imageuniqueid": "ID unik gambar",
        "exif-gpsversionid": "Vèrsi tag GPS",
        "compare-invalid-title": "Sesirah sing kokawèhaké ora sah.",
        "compare-title-not-exists": "Sesirah sing kokawèhaké ora ana.",
        "compare-revision-not-exists": "Benahan sing Sampéyan jaluk ora ana.",
+       "diff-form": "sawijining '''formulir'''",
        "dberr-problems": "Nyuwun ngapura! Situs iki ngalami masalah tèknis.",
        "dberr-again": "Coba nunggu sawetara menit lan unggahna manèh.",
        "dberr-info": "(Ora bisa nggayut basis dhata: $1)",
        "logentry-import-interwiki": "$1 {{GENDER:$2|ngimpor}} $3 saka wiki liyané",
        "logentry-import-interwiki-details": "$1 {{GENDER:$2|ngimpor}} $3 saka $5 ($4 {{PLURAL:$4|révisi}})",
        "logentry-merge-merge": "$1 {{GENDER:$2|nggabung}} $3 karo $4 (révisi nyandhak $5)",
-       "logentry-move-move": "$1 {{GENDER:$2|ngalih}} kaca $3 nyang $4",
-       "logentry-move-move-noredirect": "$1 {{GENDER:$2|mindhahaké}} kaca $3 nèng $4 tanpa ninggalaké pangalihan",
-       "logentry-move-move_redir": "$1 {{GENDER:$2|mindhahaké}} kaca $3 nèng $4 nindesi pangalihan liyane",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|mindhahaké}} kaca $3 nèng $4 nindesi pangalihan liyane tanpa nginggalaké pangalihan",
+       "logentry-move-move": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4",
+       "logentry-move-move-noredirect": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 tanpa ninggal alihan",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 kanthi nindhihi alihan",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|ngalih}} kaca $3 menyang $4 kanthi nindhihi alihan tanpa nginggal alihan",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|nengeri}} rèvisi $4 saka kaca $3 sing diawasi",
        "logentry-patrol-patrol-auto": "$1 otomatis {{GENDER:$2|nandhani}} benahan $4 saka kaca $3 kaawasake",
        "logentry-newusers-newusers": "Akun panganggo $1 {{GENDER:$2|digawé}}",
index 894a2bd..5be46fc 100644 (file)
@@ -15,7 +15,8 @@
                        "Mezgoug",
                        "Macofe",
                        "Matma Rex",
-                       "Belkacem77"
+                       "Belkacem77",
+                       "Mhenni"
                ]
        },
        "tog-underline": "Aderrer n iseɣwan:",
        "october-date": "$1 tuber",
        "november-date": "$1 wamber",
        "december-date": "$1 dujamber",
+       "period-am": "FT",
+       "period-pm": "MD",
        "pagecategories": "{{PLURAL:$1|Taggayt|Taggayin}}",
        "category_header": "Isebtar deg taggayt \"$1\"",
        "subcategories": "Adutaggayin",
        "jumptonavigation": "ẓer isebtar",
        "jumptosearch": "anadi",
        "view-pool-error": "Suref-aɣ, iqeddacen iwziren tura.\nAṭas iseqdacen tnadin ad ẓṛen asebter agi.\nIlaq ad arǧuḍ imir uqbel ad εreḍeḍ tikkelt nniḍen .\n\n$1",
+       "generic-pool-error": "Suref-aɣ, iqeddacen ur stufan ara akka tura.\nDdeqs n iseqdacen ttnadin ad ẓṛen taɣbalut-agi.\nMa ulac aɣilif, rǧu cwiṭ send ad tεreḍeḍ ad tkecmeḍ tikkelt-nniḍen.",
        "pool-timeout": "Amenḍar iɛedda deg taganit n uzekṛun",
        "pool-queuefull": "Adras n umahil yečuṛ",
        "pool-errorunknown": "Anezri warisem",
+       "pool-servererror": "Amẓlu n uḥerri ur iheegi ara ($1).",
        "poolcounter-usage-error": "Tuccḍa  n useqdec: $1",
        "aboutsite": "Ɣef {{SITENAME}}",
        "aboutpage": "Project:Ɣef",
        "edithelp": "Tallalt deg ubeddel",
        "helppage-top-gethelp": "Tallelt",
        "mainpage": "Asebter agejdan",
-       "mainpage-description": "Asebter amenzawi",
+       "mainpage-description": "Asebter agejdan",
        "policy-url": "Project:Ilugan",
        "portal": "Awwur n timetti",
        "portal-url": "Project:Awwur n timetti",
        "permissionserrorstext": "Ur tesɛiḍ ara turagt iwakken ad xedmeḍ wayagi i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :",
        "permissionserrorstext-withaction": "Ur sɛiḍ ara ttesriḥ af $2, i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :",
        "recreate-moveddeleted-warn": "'''Ɣur-wet : asebter agi i tebɣam ad snulfum, yetwekkes uqbel.'''\n\nIlaq ad snulfum asebter agi haca ma i xater. Aɣmis n isebtaren i twekkesen yella ddaw-agi :",
-       "moveddeleted-notice": "Asebter agi yetwekkes. Aɣmis n isebtaren i twekkesen yella ddaw agi.",
+       "moveddeleted-notice": "Asebter-a yettwekkes. Isallen n usfaḍ, n uḥuddu d uḥerrrek i usebter atnan ɣer wadda i uwelleh.",
+       "moveddeleted-notice-recent": "Nesḥassef, melmi kan yettwasfeḍ usebter-a (deg 24 n yisragen ineggura). Isallen n usfaḍ, n uḥuddu d uḥerrrek i usebter atnan ɣer wadda i uwelleh.",
        "log-fulllog": "Ẓeṛ aɣmis ummid",
        "edit-hook-aborted": "Abrir n ubeddel s usiɣzef.\nTamentilt warisem",
        "edit-gone-missing": "Ur yezmer ara ad yemucceḍ asebter agi.\nAhat yetwemḥa.",
        "right-siteadmin": "Sekkweṛ naɣ kkes aseḍru i taffa n isefka",
        "right-override-export-depth": "Sifeḍ isebtar akkw d isebtar iqqenen alama tadrut n 5 iswiren",
        "right-sendemail": "Ceggaɛ tirawt i iseqdacen nniḍen",
+       "grant-group-email": "Azen imayl",
        "newuserlogpage": "Aɣmis n isnulfan n  imiḍanen n imseqdacen",
        "newuserlogpagetext": "Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.",
        "rightslog": "Aɣmis n yizerfan n wemseqdac",
        "upload-too-many-redirects": "URL agi yesɛa aṭas illusen n wesnili.",
        "upload-http-error": "Anezri HTTP : $1",
        "upload-copy-upload-invalid-domain": "Anɣel n izdamen ur yezmer ara seg taɣult agi.",
+       "upload-dialog-title": "Azen afaylu",
+       "upload-dialog-button-cancel": "Sefsex",
+       "upload-dialog-button-back": "Uɣal",
+       "upload-dialog-button-done": "Immed",
+       "upload-dialog-button-save": "Sekles",
+       "upload-dialog-button-upload": "Sali",
+       "upload-form-label-infoform-title": "Talqayt",
+       "upload-form-label-infoform-name": "Isem",
+       "upload-form-label-infoform-name-tooltip": "Azwel n useglem asuf i ufaylu, win ara ttwasqedcen d isem n ufaylu. Tzemreḍ ad tesqedceḍ tutlayt tamirant s isekkilen ilmawen. Ur sedday ara asiɣzef n ufaylu.",
+       "upload-form-label-infoform-description": "Aglam",
+       "upload-form-label-usage-title": "Aseqdec",
+       "upload-form-label-usage-filename": "Isem n ufaylu",
+       "upload-form-label-own-work": "D nek i d ameskar n umahil-a",
+       "upload-form-label-infoform-categories": "Taggayin",
        "upload-form-label-infoform-date": "Azemz",
        "backend-fail-stream": "Ulamek an ɣeṛ afaylu $1.",
        "backend-fail-backup": "Ulamek an ḥrez afaylu $1.",
        "img-auth-public": "Tasɣent n img_auth.php tella i ubeqqeḍ n ifuyla n yiwen wiki uslig.\nWiki agi yesɣwer am wiki azayez.\nI taɣellist tameqqṛant, img_auth.php yensa.",
        "img-auth-noread": "Aseqdac ur yesɛa ara azref deg taɣuri ɣef « $1 ».",
        "http-invalid-url": "URL ur teɣbel ara : $1",
-       "http-invalid-scheme": "URL s uzenziɣ « $1 » ur ɣbelen ara d-agi.",
+       "http-invalid-scheme": "Tansiwin URL s uzenziɣ \"$1\" ur ttusefraken ara d-agi.",
        "http-request-error": "Anezri warisem deg uceggaɛ n tuttra.",
        "http-read-error": "Anezri n taɣuri HTTP.",
        "http-timed-out": "Tuttra HTTP teneffeṛ.",
        "randomincategory-nopages": "Ulac asebtar deg [[:Category:$1]].",
        "randomredirect": "Asemmimeḍ menwala",
        "randomredirect-nopages": "Ulac asebter n alsanamad deg tallunt n isemawen « $1 ».",
-       "statistics": "Tisnaddanin",
+       "statistics": "Tidaddanin",
        "statistics-header-pages": "Tisnaddanin n isebtar",
-       "statistics-header-edits": "Tisnaddanin n ibeddilen",
+       "statistics-header-edits": "Tidaddanin n teẓrigt",
        "statistics-header-users": "Tisnaddanin n wemseqdac",
-       "statistics-header-hooks": "Tisnaddanin nniḍen",
+       "statistics-header-hooks": "Tidaddanin-nniḍen",
        "statistics-articles": "Isebtar n ugbur",
        "statistics-pages": "Isebtar",
        "statistics-pages-desc": "Akkw isebtar n wiki agi, ula d isebtar n umeslay, etc...",
        "mostrevisions": "Isebtar i yettubedlen aṭas",
        "prefixindex": "Akk isebtaren s yisekkilen imezwura",
        "prefixindex-namespace": "Akkw isebtar s adat (tallunt n isemawe $1)",
+       "prefixindex-submit": "Sken",
        "prefixindex-strip": "Ekkes azwir deg umuɣ",
        "shortpages": "isebtar imecṭuḥen",
        "longpages": "Isebtar imeqqranen",
        "protectedpages-cascade": "Imestenen s uceṛcuṛ kan",
        "protectedpages-noredirect": "Ffer isemmimḍen",
        "protectedpagesempty": "isebtar-agi ttwaḥerzen s imsektayen -agi.",
+       "protectedpages-timestamp": "Asragemz",
+       "protectedpages-page": "Asebter",
+       "protectedpages-performer": "Ammesten n useqdac",
+       "protectedpages-reason": "Taɣẓint",
+       "protectedpages-submit": "Sken isebtar",
+       "protectedpages-unknown-timestamp": "Arussin",
+       "protectedpages-unknown-performer": "Aseqdac arussin",
        "protectedtitles": "Izwal ugdilen",
        "protectedtitlesempty": "Ulac azwel yesɛan asegdel s iɣewwaren agi.",
+       "protectedtitles-submit": "Sken izwal",
        "listusers": "Umuɣ n yimseqdacen",
        "listusers-editsonly": "Sekned kan iseqdacen yesɛan asekcem naɣ ugar",
        "listusers-creationsort": "Fren s azmez n usnulfu",
        "usereditcount": "$1 {{PLURAL:$1|abeddel|ibeddilen}}",
        "usercreated": "{{GENDER:$3|Yesnulfu-d}} ass n $1 ar $2",
        "newpages": "isebtar imaynuten",
+       "newpages-submit": "Sken",
        "newpages-username": "Isem n wemseqdac:",
        "ancientpages": "isebtar iqdimen",
        "move": "Smimeḍ",
        "nopagetext": "Asebter asaḍas agi ulac-it.",
        "pager-newer-n": "{{PLURAL:$1|amaynut|$1 imaynuten}}",
        "pager-older-n": "{{PLURAL:$1|aqbur|$1 iqburen}}",
-       "suppress": "Mdi",
+       "suppress": "Kkes",
        "querypage-disabled": "Asebter uslig agi yensa , taɣzint : timellal is.",
+       "apihelp": "Tallelt n API",
+       "apihelp-no-such-module": "Azegrir\"$1\" ulac-it.",
+       "apisandbox-api-disabled": "Asnas API ur yermid ara ɣef usmel-agi.",
        "apisandbox-unfullscreen": "Sken sebter",
+       "apisandbox-reset": "Sfeḍ",
+       "apisandbox-retry": "Ɛref̣ tikelt-nniḍen",
+       "apisandbox-helpurls": "Iseɣwan n tallelt",
+       "apisandbox-examples": "Imedyaten",
+       "apisandbox-dynamic-parameters": "Iɣewwaṛen-nniḍen",
+       "apisandbox-dynamic-parameters-add-label": "Rnu aɣewwaṛ",
+       "apisandbox-dynamic-parameters-add-placeholder": "Isem n uɣewwaṛ",
+       "apisandbox-dynamic-error-exists": "Aɣewwaṛ s yisem \"$1\" yella yakan.",
+       "apisandbox-deprecated-parameters": "Iɣewwaṛen iqbuṛen",
        "booksources": "Iɣbula n yidlisen",
        "booksources-search-legend": "Nadi ɣef iɣbula n yidlisen",
        "booksources-text": "Deg ukessar, yella wumuɣ n yizdayen iberraniyen izzenzen idlisen (imaynuten akk d weqdimen), yernu ahat sɛan kter talɣut ɣef idlisen i tettnadiḍ fell-asen:",
        "watching": "Ad iɛass...",
        "unwatching": "Ad ifukk aɛessi...",
        "watcherrortext": "Yella anezri imi tebeddeleḍ iɣewwaren n umuɣ inek/inem n uɛassi i « $1 ».",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Rcem akk isebtar mmeẓren",
        "enotif_impersonal_salutation": "Amseqdac n {{SITENAME}}",
        "enotif_subject_deleted": "Asebtar $1 ɣef {{SITENAME}} yetwakkes sɣur {{GENDER:$2|$2}}",
        "tooltip-invert": "Sekcem amidag deg tankult agi iwakken ad ffereḍ ibeddilen n isebtar deg tallunt n isemawen yettwafren (dɣa tallunt n isemawen yeqqnen ma yella amidag deg tankult)",
        "namespace_association": "Tallunt n isemawen yeqqenen",
        "tooltip-namespace_association": "Sekcem amidag deg tankult agi iwakken ad rnuḍ daɣen tallunt n isemawen n umyannan yeqqnen ar tallunt n  isemawen yettwafren",
-       "blanknamespace": "(Amenzawi)",
+       "blanknamespace": "(Agejdan)",
        "contributions": "Ittekkiyen n {{GENDER:$1|umseqdac|tamseqdact}}",
        "contributions-title": "Umuɣ n tikkin n umseqdac $1",
        "mycontris": "Ittekkiyen",
        "tooltip-search": "Nadi {{SITENAME}}",
        "tooltip-search-go": "Ṛuḥ ɣer usebter i sɛan isem agi ma yella.",
        "tooltip-search-fulltext": "Nadi isebtar i sɛan aḍris agi",
-       "tooltip-p-logo": "Asebter amenzawi",
+       "tooltip-p-logo": "Rzu ar usebter agejdan",
        "tooltip-n-mainpage": "Rzu ar usebter agejdan",
-       "tooltip-n-mainpage-description": "Rzu asebter amenzawi",
+       "tooltip-n-mainpage-description": "Rzu asebter agejdan",
        "tooltip-n-portal": "Ɣef usenfar, ayen tzemrḍ ad txedmeḍ, anda tafeḍ tiɣawsiwin",
        "tooltip-n-currentevents": "Af ayen yeḍran tura",
        "tooltip-n-recentchanges": "Umuɣ n yibeddlen imaynuten deg wiki.",
        "pagelang-select-lang": "Fren tutlayt",
        "pagelang-reason": "Taɣẓint",
        "pagelang-submit": "Azen",
+       "pagelang-unchanged-language": "Asebter $1 yettusers yakan ɣef tutlayt $2.",
+       "log-name-pagelang": "Amis n usnifel n tutlayt",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ibedde|tbeddel}} tutlayt n usebter $3 si $4 ar $5.",
+       "mediastatistics": "Tidaddanin ɣef imidyaten",
        "special-characters-group-latin": "talaṭinit",
        "special-characters-group-latinextended": "talaṭinit taɣezfant",
        "special-characters-group-ipa": "Gmm.Grɣ",
index 6ed58da..799be66 100644 (file)
@@ -67,7 +67,8 @@
                        "Jerrykim306",
                        "Sukjong0406",
                        "Garam",
-                       "렌즈"
+                       "렌즈",
+                       "CYAN"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "tog-watchlisthideminor": "주시문서 목록에서 사소한 편집을 숨기기",
        "tog-watchlisthideliu": "주시문서 목록에서 로그인한 사용자의 편집을 숨기기",
        "tog-watchlistreloadautomatically": "필터가 수정될 때마다 주시문서 목록 자동으로 새로 고치기 (자바스크립트 필요)",
+       "tog-watchlistunwatchlinks": "주시문서 목록 항목에 대한 직접적인 주시/주시해제 링크를 추가합니다 (토글 기능을 위해 자바스크립트가 필요합니다)",
        "tog-watchlisthideanons": "주시문서 목록에서 익명 사용자의 편집을 숨기기",
        "tog-watchlisthidepatrolled": "주시문서 목록에서 점검한 편집을 숨기기",
        "tog-watchlisthidecategorization": "페이지 분류 숨기기",
        "permissionserrorstext-withaction": "$2 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해주세요:",
        "contentmodelediterror": "이 판을 편집할 수 없습니다. 콘텐츠 모델은 <code>$1</code>이며, 이 문서의 현재 콘텐츠 모델은 <code>$2</code>이므로 차이가 있습니다.",
        "recreate-moveddeleted-warn": "<strong>경고: 삭제된 문서를 다시 만들고 있습니다.</strong>\n\n이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.\n편의를 위해 삭제와 이동 기록을 다음과 같이 제공합니다:",
-       "moveddeleted-notice": "이 문서는 삭제되었습니다.\n이 문서의 삭제 및 이동 기록은 다음과 같습니다.",
-       "moveddeleted-notice-recent": "죄송합니다, 이 문서는 최근 (24시간 내)에 삭제된 적이 있습니다.\n삭제와 이동 기록이 참고를 위해 남겨져 있습니다.",
+       "moveddeleted-notice": "이 문서는 삭제되었습니다.\n이 문서의 삭제 및 이동, 보호 기록은 다음과 같습니다.",
+       "moveddeleted-notice-recent": "죄송합니다, 이 문서는 최근 (24시간 내)에 삭제된 적이 있습니다.\n삭제와 보호, 이동 기록이 참고를 위해 남겨져 있습니다.",
        "log-fulllog": "전체 기록 보기",
        "edit-hook-aborted": "훅에 의해 편집이 중단되었습니다.\n아무런 설명도 주어지지 않았습니다.",
        "edit-gone-missing": "문서를 저장하지 못했습니다.\n문서가 삭제된 것 같습니다.",
        "recentchanges-submit": "보기",
        "rcfilters-legend-heading": "<strong>약어 목록:</strong>",
        "rcfilters-other-review-tools": "<strong>다른 검토 도구</strong>",
+       "rcfilters-group-results-by-page": "문서별로 묶음",
+       "rcfilters-grouping-title": "묶기",
        "rcfilters-activefilters": "사용 중인 필터",
        "rcfilters-advancedfilters": "고급 필터",
-       "rcfilters-limit-title": "표시할 변경사항",
-       "rcfilters-limit-shownum": "최근 {{PLURAL:$1개의 변경사항}} 표시",
+       "rcfilters-limit-title": "표시할 변경사항 수",
+       "rcfilters-limit-shownum": "최근 {{PLURAL:$1|$1개의 변경사항}} 표시",
        "rcfilters-days-title": "최근 날",
        "rcfilters-hours-title": "최근 시간",
        "rcfilters-days-show-days": "$1{{PLURAL:$1|일}}",
        "rcfilters-filter-excluded": "제외됨",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:아님</strong> $1",
        "rcfilters-exclude-button-off": "선택 제외",
+       "rcfilters-exclude-button-on": "선택 제외",
        "rcfilters-view-advanced-filters-label": "고급 필터",
        "rcfilters-view-tags": "태그된 편집",
        "rcfilters-view-namespaces-tooltip": "이름공간으로 결과 필터",
        "apisandbox-sending-request": "API 요청을 보내는 중...",
        "apisandbox-loading-results": "API 결과를 받는 중...",
        "apisandbox-results-error": "API 질의 응답을 불러오는 도중 오류 발생: $1.",
+       "apisandbox-results-login-suppressed": "해당 요청은 로그인을 하지 않은 사용자가 동일 출처 보안을 우회하기 위해 진행되었습니다. API 샌드박스의 자동 토큰 조정이 해당 요청에 대해 제대로 작동하지 않는지 확인하고, 수동으로 채워주세요.",
        "apisandbox-request-selectformat-label": "요청한 데이터를 보여주기:",
        "apisandbox-request-format-url-label": "URL 쿼리 문자열",
        "apisandbox-request-url-label": "요청 URL:",
        "watching": "주시 추가 중…",
        "unwatching": "주시 해제 중…",
        "watcherrortext": "\"$1\" 문서에 대한 주시 여부를 바꾸는 중 오류가 발생했습니다.",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "모든 문서를 방문한 것으로 표시하기",
        "enotif_impersonal_salutation": "{{SITENAME}} 사용자",
        "enotif_subject_deleted": "{{SITENAME}} $1 문서를 $2님이 {{GENDER:$2|삭제했습니다}}",
        "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": "판으로 이동",
        "dberr-problems": "죄송합니다! 이 사이트에 기술적인 문제가 발생하고 있습니다.",
        "dberr-again": "잠시 기다리고 나서 다시 불러오세요.",
        "dberr-info": "(데이터베이스 서버에 연결할 수 없습니다: $1)",
index 6f0f831..2efad89 100644 (file)
@@ -47,7 +47,7 @@
        "tog-shownumberswatching": "D'Zuel vun de Benotzer déi dës Säit iwwerwaache weisen",
        "tog-oldsig": "Är Aktuell Ënnerschrëft:",
        "tog-fancysig": "Ënnerschrëft als Wiki-Text behandelen (Ouni automatesche Link)",
-       "tog-uselivepreview": "Live-Preview benotzen",
+       "tog-uselivepreview": "Live-Preview benotzen ouni d'Säit ze lueden",
        "tog-forceeditsummary": "Warnen, wa beim Späicheren de Resumé feelt",
        "tog-watchlisthideown": "Meng Ännerungen op menger Iwwerwaachungslëscht verstoppen",
        "tog-watchlisthidebots": "Ännerunge vu Botten op menger Iwwerwaachungslëscht verstoppen",
        "permissionserrorstext-withaction": "Dir sidd, aus {{PLURAL:$1|dësem Grond|dëse Grënn}}, net berechtegt $2 :",
        "contentmodelediterror": "Dir kënnt dës Versioun net ännere well hiren Inhaltsmodell <code>$1</code> ass dee verschidde vum aktuellen Inhaltsmodell vun der Säit <code>$2</code> ass.",
        "recreate-moveddeleted-warn": "'''Opgepasst: Dir sidd am Gaang eng Säit unzeleeën déi schonn eng Kéier geläscht gouf.'''\n\nFrot Iech ob et wierklech sënnvoll ass dës Säit nees nei ze schafen.\nFir Iech z'informéieren fannt Dir hei d'Logbuch vum Läsche mam Grond:",
-       "moveddeleted-notice": "Dës Säit gouf geläscht.\nHei ass den Extrait aus dem Logbuch vum Réckelen a Läsche fir déi Säit.",
-       "moveddeleted-notice-recent": "Leider gouf dëse Säit rezent (bannent de leschte 24 Stonnen) geläscht. D'Logbuch vum Läschen a Réckele vun dëser Säit fannt Dir fir Ar Informatioun hei drënner.",
+       "moveddeleted-notice": "Dës Säit gouf geläscht.\nDen Extrait aus dem Logbuch vum Réckelen a Läsche fir déi Säit fannt Dir hei drënner als Referenz.",
+       "moveddeleted-notice-recent": "Leider gouf dëse Säit rezent (bannent de leschte 24 Stonnen) geläscht. De Logg vum Läschen, Spären a Réckele vun dëser Säit fannt Dir fir Är Informatioun hei drënner.",
        "log-fulllog": "Dat ganzt Logbuch weisen",
        "edit-hook-aborted": "D'Ännerung gouf ouni Erklärung vun enger Schnëttstell (hook) ofgebrach.",
        "edit-gone-missing": "D'Säit konnt net aktualiséiert ginn.\nSi gouf anscheinend geläscht.",
        "prefs-editwatchlist-clear": "Är Iwwerwaachungslëscht eidelmaachen",
        "prefs-watchlist-days": "Zuel vun den Deeg, déi an der Iwwerwaachungslëscht ugewise solle ginn:",
        "prefs-watchlist-days-max": "Maximal $1 {{PLURAL:$1|Dag|Deeg}}",
-       "prefs-watchlist-edits": "Maximal Zuel vun den Ännerungen déi an der erweiderter Iwwerwaachungslëscht ugewise solle ginn:",
+       "prefs-watchlist-edits": "Maximal Zuel vun den Ännerungen déi an der Iwwerwaachungslëscht ugewise ginn:",
        "prefs-watchlist-edits-max": "Maximal Zuel: 1000",
        "prefs-watchlist-token": "Iwwerwaachungslëscht-Token:",
        "prefs-misc": "Verschiddenes",
        "rcfilters-activefilters": "Aktiv Filteren",
        "rcfilters-advancedfilters": "Erweidert Filteren",
        "rcfilters-limit-title": "Ännerunge fir ze weisen",
-       "rcfilters-limit-shownum": "Lescht $1 Ännerunge weisen",
+       "rcfilters-limit-shownum": "Lescht {{PLURAL:$1|Ännerung|$1 Ännerunge}} weisen",
        "rcfilters-days-title": "Rezent Deeg",
        "rcfilters-hours-title": "Rezent Stonnen",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|Dag|Deeg}}",
        "rcfilters-filter-lastrevision-label": "Lescht Versioun",
        "rcfilters-filter-lastrevision-description": "Nëmmen déi lescht Ännerung op enger Säit.",
        "rcfilters-filter-previousrevision-label": "Net déi lescht Versioun",
-       "rcfilters-filter-previousrevision-description": "All Ännerungen, déi net déi rezenst Ännerung vun enger Säit sinn.",
+       "rcfilters-filter-previousrevision-description": "All Ännerungen, déi net déi 'rezentst Versioun' vun enger Säit sinn.",
        "rcfilters-filter-excluded": "Ausgeschloss",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:net</strong> $1",
        "rcfilters-view-advanced-filters-label": "Erweidert Filteren",
        "rcfilters-view-tags": "Markéiert Ännerungen",
        "rcfilters-view-namespaces-tooltip": "Resultater no Nummraum filteren",
        "rcfilters-liveupdates-button": "Live-Aktualiséierungen",
+       "rcfilters-liveupdates-button-title-off": "Nei Ännerunge weisen esoubal wéi se gemaach ginn",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
        "rcshowhideminor": "Kleng Ännerunge $1",
        "watching": "Iwwerwaachen …",
        "unwatching": "Net méi iwwerwaachen …",
        "watcherrortext": "Beim Ännere vun den Astellunge vun der Iwwerwaachungslëscht fir \"$1\" ass e Feeler geschitt.",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "All Säiten als besicht markéieren",
        "enotif_impersonal_salutation": "{{SITENAME}}-Benotzer",
        "enotif_subject_deleted": "D'{{SITENAME}}-Säit $1 gouf vum {{gender:$2|$2}} geläscht",
        "import-nonewrevisions": "Et goufe keng Versiounen importéiert (se waren al entweder scho virdrun importéiert ginn oder se goufen iwwersprong well Feeler dra waren).",
        "xml-error-string": "$1 an der Zeil $2, Spalt $3, (Byte $4): $5",
        "import-upload": "XML-Daten importéieren",
-       "import-token-mismatch": "D'Date vun ärer Sessioun si verluer gaang.\n\nDir sidd eventuell ausgeloggt ginn. <strong>Kuckt w.e.g. no ob Dir nach ageloggt sidd a probéiert nach eng Kéier</strong>.\nWann et dann nach net geet, probéiert [[Special:UserLogout|Iech auszeloggen]] an duerno nees anzeloggen a kuckt no ob Äre Browser Cookië vun dësem Site akzeptéiert.",
+       "import-token-mismatch": "D'Date vun ärer Sessioun si verluer gaangen.\n\nDir sidd eventuell ausgeloggt ginn. '''Kuckt w.e.g. no ob Dir nach ageloggt sidd a probéiert nach eng Kéier'''.\nWann et dann nach net geet, probéiert [[Special:UserLogout|Iech auszeloggen]] an duerno nees anzeloggen a kuckt no ob Äre Browser Cookië vun dësem Site akzeptéiert.",
        "import-invalid-interwiki": "Aus der Wiki déi Dir uginn hutt kann näischt importéiert ginn.",
        "import-error-edit": "D'Säit \"$1\" gouf net importéiert well Dir se net änneren däerft.",
        "import-error-create": "D'Säit \"$1\" gouf net importéiert well Dir se net uleeën däerft.",
        "compare-invalid-title": "Den Titel deen Dir uginn hutt ass net valabel.",
        "compare-title-not-exists": "Den Titel deen Dir uginn hutt gëtt et net.",
        "compare-revision-not-exists": "D'Versioun déi Dir uginn hutt gëtt et net.",
+       "diff-form": "Ënnerscheeder",
+       "diff-form-submit": "Ënnerscheeder weisen.",
        "dberr-problems": "Pardon! Dëse Site huet technesch Schwieregkeeten.",
        "dberr-again": "Versicht e puer Minutten ze waarden an dann nei ze lueden.",
        "dberr-info": "(D'Datebank kann net erreecht ginn: $1)",
index 078806f..26757f2 100644 (file)
        "grant-createaccount": "Maak gebroekers aan",
        "grant-createeditmovepage": "Maak, bewirk en verplaats pagina's",
        "grant-delete": "Wösj pagina's, bewirkinge en logbookregele",
+       "grant-editmycssjs": "Bewirk diene CSS/JavaScript",
+       "grant-editmyoptions": "Bewirk dien veurkäöre",
+       "grant-editmywatchlist": "Bewirk dien volglies",
+       "grant-editpage": "Bewirk bestäöndje pagina's",
+       "grant-editprotected": "Bewirk besjurmde pagina's",
        "grant-basic": "Basisrechte",
        "newuserlogpage": "Logbook nuuj gebroekers",
        "newuserlogpagetext": "Hiej ónger saton de nuuj ingesjreve gebroekers.",
        "compare-invalid-title": "De opgegaeve pazjenanaam is óngeljig.",
        "compare-title-not-exists": "Aangegaeve titel besteit neet.",
        "compare-revision-not-exists": "Aangegaeve versie besteit neet.",
+       "diff-form": "'n '''formulier'''",
        "dberr-problems": "Os excuses. Deze site ongervindj op t moment technische probleme.",
        "dberr-again": "Wach n aantal minute en probeer t daonao opnuuj.",
        "dberr-info": "(Kan gein verbinjing make mit de databaseserver: $1)",
index a0f331d..3b8e6d0 100644 (file)
@@ -41,7 +41,7 @@
        "tog-watchdefault": "哨己纂",
        "tog-watchmoves": "派哨於頁吾遷者",
        "tog-watchdeletion": "派哨於頁吾除者",
-       "tog-watchuploads": "增載文至監",
+       "tog-watchuploads": "所傳圖案,付之監視",
        "tog-watchrollback": "回過之頁,增至監",
        "tog-minordefault": "慣為校",
        "tog-previewontop": "頂草覽",
        "oct": "十月",
        "nov": "十一月",
        "dec": "十二月",
-       "january-date": "正月 $1",
+       "january-date": "一月$1日",
        "february-date": "二月$1日",
        "march-date": "三月$1日",
        "april-date": "四月$1日",
        "october-date": "十月$1日",
        "november-date": "十一月$1日",
        "december-date": "十二月$1日",
-       "period-am": "",
+       "period-am": "午前",
        "period-pm": "午後",
        "pagecategories": "$1類",
        "category_header": "「$1」中之頁",
        "collapsible-collapse": "摺",
        "collapsible-expand": "展",
        "confirmable-confirm": "{{GENDER:$1|汝}}無悔?",
-       "confirmable-yes": "",
+       "confirmable-yes": "",
        "confirmable-no": "否",
        "thisisdeleted": "還$1或閱之?",
        "viewdeleted": "閱$1之?",
        "userlogin-noaccount": "尚無簿乎?",
        "userlogin-joinproject": "入{{SITENAME}}",
        "createaccount": "增簿",
-       "userlogin-resetpassword-link": "亡子符節?",
+       "userlogin-resetpassword-link": "忽忘符節?",
        "userlogin-helplink2": "協助",
-       "userlogin-createanother": "å¢\9eå\8f¦一簿",
+       "userlogin-createanother": "å\88¥å\8a 一簿",
        "createacct-emailrequired": "電郵",
        "createacct-emailoptional": "電郵(可選)",
        "createacct-email-ph": "書君郵址",
        "fileduplicatesearch-result-1": "案 \"$1\" 無重也。",
        "fileduplicatesearch-result-n": "案 \"$1\" 重有$2。",
        "specialpages": "特查",
-       "specialpages-note": "* 準特查。\n* <strong class=\"mw-specialpagerestricted\">限特查。</strong>",
        "specialpages-group-maintenance": "護報",
        "specialpages-group-other": "他奇頁",
        "specialpages-group-login": "登/增",
        "compare-rev1": "審一",
        "compare-rev2": "審二",
        "compare-submit": "較",
+       "diff-form": "表",
        "htmlform-invalid-input": "爾之輸問也",
        "htmlform-select-badoption": "爾之值為非效之。",
        "htmlform-int-invalid": "爾之值為非整數也。",
index ddb9443..3dedf8d 100644 (file)
@@ -58,6 +58,7 @@
        "tog-watchlisthideminor": "Скриј ги ситните уредувања во набљудуваните",
        "tog-watchlisthideliu": "Скриј ги уредувањата на најавените корисници во набљудуваните",
        "tog-watchlistreloadautomatically": "Превчитувај ги набљудувањата автоматски кога ќе се смени филтерот (бара JavaScript)",
+       "tog-watchlistunwatchlinks": "Додај непосредни врски до набљудуваните (бара JavaScript)",
        "tog-watchlisthideanons": "Скриј ги уредувањата од анонимни корисници во набљудуваните",
        "tog-watchlisthidepatrolled": "Скриј испатролирани уредувања од мојот список на набљудувања",
        "tog-watchlisthidecategorization": "Сокриј ја категоризацијата на страниците",
        "permissionserrorstext-withaction": "Немате дозвола за $2, од {{PLURAL:$1|следнава причина|следниве причини}}:",
        "contentmodelediterror": "Не можете да ја измените оваа преработка бидејќи нејзиниот содржински модел е <code>$1</code>, што се разликува од тековниот содржински модел на страницата <code>$2</code>.",
        "recreate-moveddeleted-warn": "Внимание: Повторно создавате страница што претходно била бришена.'''\n\nРазмислете дали е правилно да продолжите со уредување на оваа страница.\nПодолу е прикажан дневникот на бришења и преместувања на оваа страница:",
-       "moveddeleted-notice": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ð±Ð¸Ð»Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð±Ñ\80иÑ\88ена.\nÐ\94невникоÑ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\9aа Ð·Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¿Ñ\80икажан Ð¿Ð¾Ð´Ð¾Ð»Ñ\83 Ð·Ð° Ð²Ð°Ñ\88е Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ\82елно Ð¸Ð½Ñ\84оÑ\80миÑ\80аÑ\9aе.",
-       "moveddeleted-notice-recent": "Ð\97а Ð¶Ð°Ð», Ñ\81Ñ\82Ñ\80аниÑ\86ава Ð±ÐµÑ\88е Ð½ÐµÐ¾Ð´Ð°Ð¼Ð½Ð° Ð¸Ð·Ð±Ñ\80иÑ\88ана (во Ð¿Ð¾Ñ\81ледниве 24 Ñ\87аÑ\81а).\nÐ\9fодолÑ\83 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¾ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ¾Ñ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aе Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\9aе.",
+       "moveddeleted-notice": "Ð\9eваа Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¸Ð·Ð±Ñ\80иÑ\88ана.\nÐ\94невникоÑ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\9aа Ð·Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð¿Ñ\80икажан Ð¿Ð¾Ð´Ð¾Ð»Ñ\83.",
+       "moveddeleted-notice-recent": "Ð\97а Ð¶Ð°Ð», Ñ\81Ñ\82Ñ\80аниÑ\86ава Ð±ÐµÑ\88е Ð½ÐµÐ¾Ð´Ð°Ð¼Ð½Ð° Ð¸Ð·Ð±Ñ\80иÑ\88ана (во Ð¿Ð¾Ñ\81ледниве 24 Ñ\87аÑ\81а).\nÐ\9fодолÑ\83 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¾ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐ¾Ñ\82 Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа, Ð·Ð°Ñ\88Ñ\82иÑ\82и Ð¸ Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\9aа.",
        "log-fulllog": "Преглед на целиот дневник",
        "edit-hook-aborted": "Уредувањето е прекинато со пресретник.\nНе е дадено никакво образложение.",
        "edit-gone-missing": "Не можев да ја подновам страницата.\nВеројатно е избришана.",
        "prefs-editwatchlist-clear": "Исчисти набљудувани",
        "prefs-watchlist-days": "Број на денови за приказ во набљудуваните",
        "prefs-watchlist-days-max": "Највеќе $1 {{PLURAL:$1|ден|дена}}",
-       "prefs-watchlist-edits": "Ð\9dаÑ\98веÑ\9cе Ð¿Ñ\80икажани Ð¿Ñ\80омени Ð²Ð¾ Ð¿Ñ\80оÑ\88иÑ\80ениоÑ\82 Ñ\81пиÑ\81ок Ð½Ð° Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваÑ\9aа:",
+       "prefs-watchlist-edits": "Ð\9dаÑ\98веÑ\9cе Ð¿Ñ\80икажани Ð¿Ñ\80омени Ð²Ð¾ Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваÑ\9aаÑ\82а:",
        "prefs-watchlist-edits-max": "Највеќе: 1000",
        "prefs-watchlist-token": "Шифра на набљудувањата:",
        "prefs-misc": "Други нагодувања",
        "rcfilters-savedqueries-add-new-title": "Зачувај тековни филтерски поставки",
        "rcfilters-restore-default-filters": "Поврати основни филтри",
        "rcfilters-clear-all-filters": "Тргни ги сите филтри",
-       "rcfilters-show-new-changes": "Прикажи нови промени",
+       "rcfilters-show-new-changes": "Погл. најнови промени",
        "rcfilters-previous-changes-label": "Претходно прегледани промени",
        "rcfilters-search-placeholder": "Филтрирај скорешни промени (прелстајте или почнете да пишувате)",
        "rcfilters-invalid-filter": "Неважечки филтер",
        "watching": "Набљудување...",
        "unwatching": "Отстранувам од набљудувани...",
        "watcherrortext": "Се појави грешка при менувањето на вашите нагодувања набљудуваните за „$1“.",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Означи ги сите страници како посетени",
        "enotif_impersonal_salutation": "Википедија корисник",
        "enotif_subject_deleted": "Страницата $1 на {{SITENAME}} е избришана од {{gender:$2|$2}}",
        "import-nonewrevisions": "Не увезов ниедна преработка (сите се веќе присутни или изоставени поради грешки)",
        "xml-error-string": "$1 во ред $2, колона $3 (бајт $4): $5",
        "import-upload": "Подигни XML податоци",
-       "import-token-mismatch": "Загубени седничките податоци.\n\nМоже да сте биле одјавени. <strong>Проверете дали сè уште сте најавени и обидете се повторно</strong>.\nАко проблемот продолжи да се јавува, [[Special:UserLogout|одјавете се]] и повторно најавете се, и проверете дали прелистувачот дозволува колачиња од ова мрежно место.",
+       "import-token-mismatch": "Загубени седничките податоци.\n\nМоже да сте биле одјавени. '''Проверете дали сè уште сте најавени и обидете се повторно'''.\nАко проблемот продолжи да се јавува, [[Special:UserLogout|одјавете се]] и повторно најавете се, и проверете дали прелистувачот дозволува колачиња од ова мрежно место.",
        "import-invalid-interwiki": "Не можам да увезам од наведеното вики.",
        "import-error-edit": "Страницата „$1“ не е увезена бидејќи не ви е дозволено да ја уредувате.",
        "import-error-create": "Страницата „$1“ не е увезена бидејќи не ви е дозволено да ја создадете.",
        "compare-invalid-title": "Наведениот наслов е неважечки.",
        "compare-title-not-exists": "Наведениот наслов не постои.",
        "compare-revision-not-exists": "Наведената преработка не постои.",
+       "diff-form": "Разлики",
+       "diff-form-oldid": "Назнака на старата преработка (незадолж.)",
+       "diff-form-revid": "Назнака на преработката на разликата",
+       "diff-form-submit": "Прик. разлики",
+       "permanentlink": "Постојана врска",
+       "permanentlink-revid": "Назнака на преработката",
+       "permanentlink-submit": "Оди на преработката",
        "dberr-problems": "Жалиме! Ова мрежно место се соочува со технички потешкотии.",
        "dberr-again": "Почекајте неколку минути и обидете се повторно.",
        "dberr-info": "(Не можам да пристапам кон базата: $1)",
        "mediastatistics-header-text": "Текстуални",
        "mediastatistics-header-executable": "Извршни",
        "mediastatistics-header-archive": "Збиени формати",
+       "mediastatistics-header-3d": "3Д",
        "mediastatistics-header-total": "Сите податотеки",
        "json-warn-trailing-comma": "{{PLURAL:$1|Отстранета е една завршна запирка|Отстранети се $1 завршни запирки}} од JSON",
        "json-error-unknown": "Се јави проблем со JSON. Грешка: $1.",
index fd48e9a..da0df70 100644 (file)
        "searcharticle": "പോകൂ",
        "history": "നാൾവഴി",
        "history_short": "നാൾവഴി",
+       "history_small": "നാൾവഴി",
        "updatedmarker": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം മാറ്റം വന്നത്",
        "printableversion": "അച്ചടിരൂപം",
        "permalink": "സ്ഥിരംകണ്ണി",
        "passwordreset-emailelement": "ഉപയോക്തൃനാമം: \n$1\n\nതാത്കാലിക രഹസ്യവാക്ക്: \n$2",
        "passwordreset-emailsentemail": "താങ്കളുടെ അംഗത്വത്തിന് നൽകിയിട്ടുള്ള ഇമെയിൽ വിലാസം ഇതാണെങ്കിൽ,  രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയക്കുന്നതാണ്.",
        "passwordreset-emailsentusername": "ഈ ഉപയോക്തൃനാമത്തിന് ഒരു ഇമെയിൽ വിലാസം ചേർത്തിട്ടുണ്ടെങ്കിൽ,  രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയക്കുന്നതാണ്.",
+       "passwordreset-invalidemail": "അസാധുവായ ഇമെയിൽ വിലാസം",
        "changeemail": "ഇമെയിൽ വിലാസം മാറ്റുക അല്ലെങ്കിൽ നീക്കംചെയ്യുക",
        "changeemail-header": "താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്താൻ ഈ ഫോം പൂരിപ്പിച്ചു നൽകുക.താങ്കളുടെ അംഗത്വവുമായി ഏതെങ്കിലുമൊരു ഇമെയിൽ വിലാസത്തിനുള്ള ബന്ധം ഒഴിവാക്കാൻ ഫോം പൂരിപ്പിക്കുമ്പോൾ പുതിയ ഇമെയിൽ വിലാസത്തിനുള്ള ഭാഗം ഒഴിച്ചിടുക.",
        "changeemail-no-info": "ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.",
        "watchthis": "ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "savearticle": "താൾ സേവ് ചെയ്യുക",
        "savechanges": "മാറ്റങ്ങൾ സേവ് ചെയ്യുക",
+       "publishpage": "താൾ പ്രസിദ്ധീകരിക്കുക",
+       "publishchanges": "മാറ്റങ്ങൾ പ്രസിദ്ധീകരിക്കുക",
        "preview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
        "showpreview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
        "showdiff": "മാറ്റങ്ങൾ കാണിക്കുക",
        "permissionserrorstext": "താഴെ കൊടുത്തിരിക്കുന്ന {{PLURAL:$1|കാരണം|കാരണങ്ങൾ}} കൊണ്ട് താങ്കൾക്ക് ഈ പ്രവൃത്തി ചെയ്യാനുള്ള അനുമതിയില്ല:",
        "permissionserrorstext-withaction": "താങ്കൾക്ക് $2 എന്ന പ്രവൃത്തി ചെയ്യാൻ അനുമതി ഇല്ല, {{PLURAL:$1|കാരണം|കാരണങ്ങൾ}} താഴെ കൊടുത്തിരിക്കുന്നു:",
        "recreate-moveddeleted-warn": "'''മുന്നറിയിപ്പ്: മുമ്പ് മായ്ച്ചുകളഞ്ഞ താളാണ്‌ താങ്കൾ വീണ്ടും ചേർക്കാൻ ശ്രമിക്കുന്നത്'''\n\nതാങ്കൾ ചെയ്യുന്നത് ശരിയായ നടപടിയാണോ എന്നു പരിശോധിക്കുക. ഉറപ്പിനായി ഈ താളിന്റെ മായ്ക്കൽ രേഖയും മാറ്റൽ രേഖയും കൂടെ ചേർത്തിരിക്കുന്നു.",
-       "moveddeleted-notice": "ഈ താൾ മായ്ക്കപ്പെട്ടിരിക്കുന്നു.\nഈ താളിന്റെ മായ്ക്കൽ രേഖ പരിശോധനയ്ക്കായി താഴെ കൊടുത്തിരിക്കുന്നു",
+       "moveddeleted-notice": "ഈ താൾ മായ്ക്കപ്പെട്ടിരിക്കുന്നു.\nഈ താളിന്റെ മായ്ക്കൽ, സംരക്ഷണ, മാറ്റ രേഖ പരിശോധനയ്ക്കായി താഴെ കൊടുത്തിരിക്കുന്നു",
        "moveddeleted-notice-recent": "ക്ഷമിക്കുക, ഈ താൾ ഈയടുത്ത് (കഴിഞ്ഞ 24 മണിക്കൂറിനുള്ളിൽ) മായ്ക്കപ്പെട്ടു.\nഅവലംബമായി മായ്ക്കലിന്റെയും താൾ നീക്കിയതിന്റെയും രേഖ താഴെ കൊടുത്തിരിക്കുന്നു.",
        "log-fulllog": "എല്ലാ രേഖകളും കാണുക",
        "edit-hook-aborted": "തിരുത്തൽ കൊളുത്തിനാൽ റദ്ദാക്കിയിരിക്കുന്നു.\nവിശദീകരണമൊന്നും നൽകിയിട്ടില്ല.",
        "fileduplicatesearch-noresults": "\"$1\" എന്ന പേരിൽ ഒരു പ്രമാണവും കണ്ടെത്താനായില്ല.",
        "specialpages": "പ്രത്യേക താളുകൾ",
        "specialpages-note-top": "സൂചന",
-       "specialpages-note": "* പൊതുവേ ഉപയോഗിക്കുന്ന പ്രത്യേക താളുകൾ.\n* <span class=\"mw-specialpagerestricted\">ഉപയോഗം പരിമിതപ്പെടുത്തിയിരിക്കുന്ന പ്രത്യേക താളുകൾ.</span>",
        "specialpages-group-maintenance": "പരിചരണം ആവശ്യമായവ",
        "specialpages-group-other": "മറ്റു പ്രത്യേക താളുകൾ",
        "specialpages-group-login": "പ്രവേശിക്കുക / അംഗത്വമെടുക്കുക",
index 68f0ce2..2b4ff60 100644 (file)
        "permissionserrorstext-withaction": "तुम्हाला $2 क्रियेची परवानगी नाही, खालील {{PLURAL:$1|कारणासाठी|कारणांसाठी}}:",
        "contentmodelediterror": "ही आवृत्ती आपण संपादू शकत नाही कारण त्याचा आशय-आराखडा (कंटेन्ट मॉडेल)<code>$1</code> आहे व सध्याच्या <code>$2</code> पानाचा आशय आराखडा वेगळा आहे.",
        "recreate-moveddeleted-warn": "'''सूचना: पूर्वी वगळलेला लेख तुम्ही पुन्हा बनवित आहात.'''\n\nआपण याचा विचार करा कि या पानाचे संपादन यापुढे करणे योग्य आहे काय.या पानाच्या वगळण्याच्या व स्थानांतराच्या नोंदी आपल्या (कामाच्या) सुलभतेसाठी दिलेल्या आहेत:",
-       "moveddeleted-notice": "हà¥\87 à¤ªà¤¾à¤¨ à¤µà¤\97ळणà¥\8dयात à¤\86लà¥\87लà¥\87 à¤\86हà¥\87.\nसà¤\82दरà¥\8dभासाठà¥\80, à¤µà¤\97ळणà¥\8dयाà¤\9aà¥\80 à¤µ à¤¸à¥\8dथानाà¤\82तराà¤\9aà¥\80 à¤¨à¥\8bà¤\82द à¤\96ालà¥\80 à¤¦à¤¿à¤²à¥\87लà¥\80 à¤\86हà¥\87.",
-       "moveddeleted-notice-recent": "माफ करा,हे पान अलीकडेच (मागील २४ तासात) वगळल्या गेले आहे.हा पानाच्या वगळण्याचा व हलविण्याचा लॉग संदर्भासाठी खाली दिला आहे.",
+       "moveddeleted-notice": "हà¥\87 à¤ªà¤¾à¤¨ à¤µà¤\97ळणà¥\8dयात à¤\86लà¥\87लà¥\87 à¤\86हà¥\87.\nया à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\87 à¤µà¤\97ळणà¥\8dयाà¤\9aà¥\87,व à¤¸à¥\8dथानाà¤\82तरणाà¤\9aà¥\87 à¤²à¥\89à¤\97 à¤¸à¤\82दरà¥\8dभासाठà¥\80 à¤\96ालà¥\80 à¤¦à¤¿à¤²à¥\87 à¤\86हà¥\87त.",
+       "moveddeleted-notice-recent": "माफ करा,हे पान अलीकडेच (मागील २४ तासात) वगळल्या गेले आहे.\nया पानाचे वगळण्याचे,व स्थानांतरणाचे लॉग संदर्भासाठी खाली दिले आहेत.",
        "log-fulllog": "पूर्ण नोंदी पहा",
        "edit-hook-aborted": "हूकद्वारे संपादन रद्द.\nकारण दिलेले नाही.",
        "edit-gone-missing": "नविन पृष्ठ अद्यतन करता आले नाही. ते वगळले असण्याची शक्यता आहे.",
        "prefs-editwatchlist-clear": "आपली निरीक्षणसूची साफ(क्लिअर) करा",
        "prefs-watchlist-days": "निरीक्षणसूचीमध्ये दिसणाऱ्या दिवसांची संख्या:",
        "prefs-watchlist-days-max": "जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवस}}",
-       "prefs-watchlist-edits": "वाढà¥\80व à¤¨à¤¿à¤°à¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 à¤¦à¤¿à¤¸à¤£à¤¾à¤±à¥\8dया à¤¸à¤\82पादनाà¤\82à¤\9aà¥\80 संख्या:",
+       "prefs-watchlist-edits": "निरà¥\80à¤\95à¥\8dषणसà¥\82à¤\9aà¥\80मधà¥\8dयà¥\87 à¤¦à¤¿à¤¸à¤£à¤¾à¤±à¥\8dया à¤¸à¤\82पादनाà¤\82à¤\9aà¥\80 à¤®à¤¹à¤¤à¥\8dतम संख्या:",
        "prefs-watchlist-edits-max": "अधिकतम अंक:  १०००.",
        "prefs-watchlist-token": "निरीक्षणसूचीचा बिल्ला:",
        "prefs-misc": "किरकोळ",
        "rcfilters-invalid-filter": "अवैध गाळणी",
        "rcfilters-filterlist-title": "गाळण्या",
        "rcfilters-filterlist-noresults": "कोणतीच गाळणी सापडली नाही",
-       "rcfilters-filtergroup-registration": "सदस्य नोंदणी",
-       "rcfilters-filter-registered-label": "नोंदणीकृत",
-       "rcfilters-filter-registered-description": "प्रवेशलेले सदस्य",
-       "rcfilters-filter-unregistered-label": "अ-नोंदणीकृत",
-       "rcfilters-filter-unregistered-description": "संपादक जे प्रवेशित नाहीत.",
        "rcfilters-filtergroup-authorship": "संपादनाचा लेखक",
        "rcfilters-filter-editsbyself-label": "आपली स्वत:ची संपादने",
        "rcfilters-filter-editsbyself-description": "आपली संपादने",
        "rcfilters-filter-editsbyother-label": "इतरांची संपादने",
        "rcfilters-filter-editsbyother-description": "इतर सदस्यांनी तयार केलेली संपादने (आपण नाही).",
        "rcfilters-filtergroup-userExpLevel": "अनुभवाचा स्तर (फक्त नोंदणीकृत सदस्यांसाठीच)",
+       "rcfilters-filter-user-experience-level-registered-label": "नोंदणीकृत",
+       "rcfilters-filter-user-experience-level-registered-description": "प्रवेशलेले सदस्य",
+       "rcfilters-filter-user-experience-level-unregistered-label": "अ-नोंदणीकृत",
+       "rcfilters-filter-user-experience-level-unregistered-description": "संपादक जे प्रवेशित नाहीत.",
        "rcfilters-filter-user-experience-level-newcomer-label": "नवागत",
        "rcfilters-filter-user-experience-level-newcomer-description": "१० संपादनांपेक्षा कमी व ४ दिवसांची सक्रियता.",
        "rcfilters-filter-user-experience-level-learner-label": "शिकाऊ",
        "fileduplicatesearch-noresults": "\"$1\" या नावाची संचिका सापडली नाही.",
        "specialpages": "विशेष पृष्ठे",
        "specialpages-note-top": "विवरण",
-       "specialpages-note": "* सर्वसाधारण विशेष पृष्ठे.\n* <span class=\"mw-specialpagerestricted\">प्रतिबंधित विशेष पृष्ठे.</span>",
        "specialpages-group-maintenance": "व्यवस्थापन अहवाल",
        "specialpages-group-other": "इतर विशेष पृष्ठे",
        "specialpages-group-login": "प्रवेश / नवीन सदस्य नोंदणी",
index b164c2e..1a0dc94 100644 (file)
        "permissionserrorstext": "အောက်ပါ {{PLURAL:$1|အကြောင်းပြချက်|အကြောင်းပြချက်များ}}ကြောင့် ထိုအရာအတွက် ခွင့်ပြုချက်မရှိပါ -",
        "permissionserrorstext-withaction": "အောက်ပါ အကြောင်းပြချက် {{PLURAL:$1|ခု|ခု}} ကြောင့် $2 အတွက် ခွင့်ပြုချက်မရှိပါ -",
        "recreate-moveddeleted-warn": "'''သတိပေးချက်။ သင်သည် ယခင်က ဖျက်ထားသော စာမျက်နှာတစ်ခုကို ပြန်လည်ဖန်တီးနေသည်။'''\n\nသင့်အနေနှင့် ဤစာမျက်နှာကို ဆက်လက်တည်းဖြတ်ရန် သင့်တော်မည် မသင့်တော်မည်ကို စဉ်းစားသင့်သည်။\nဖျက်ထားခြင်း နှင့် ရွှေ့ထားခြင်းတို့၏ မှတ်တမ်းကို သင့်အတွက် အလွယ်တကူ ကိုးကားနိုင်ရန် ဖော်ပြထားသည်။",
-       "moveddeleted-notice": "ဤစာမျက်နှာကို ဖျက်ထားသည်။\nဖျက်ထားခြင်း ရွှေ့ဆိုင်းထားခြင်းတို့နှင့် ပတ်သက်သော မှတ်တမ်းကို ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
+       "moveddeleted-notice": "ဤစာမျက်နှာကို ဖျက်ထားသည်။\nဖျက်ထားခြင်း၊ ကာကွယ်ထားခြင်းနှင့် ရွှေ့ပြောင်းထားခြင်းတို့နှင့် ပတ်သက်သော မှတ်တမ်းကို ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "log-fulllog": "မှတ်တမ်းအပြည့်အစုံကြည့်ရန်",
        "edit-gone-missing": "စာမျက်နှာကို အပ်ဒိတ်မလုပ်နိုင်ပါ။\nအဖျက်ခံလိုက်ရပုံပေါ်သည်။",
        "edit-conflict": "အငြင်းပွားမှုကို တည်းဖြတ်ရန်။",
        "fileduplicatesearch-filename": "ဖိုင်အမည် -",
        "fileduplicatesearch-submit": "ရှာဖွေရန်",
        "specialpages": "အထူး စာမျက်နှာများ",
-       "specialpages-note": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* <span class=\"mw-specialpagerestricted\">ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။</span>",
+       "specialpages-note-restricted": "* ပုံမှန် အထူးစာမျက်နှာများ။\n* <span class=\"mw-specialpagerestricted\">ကန့်သတ်ထားသော အထူးစာမျက်နှာများ။</span>",
        "specialpages-group-maintenance": "ထိန်းသိမ်းမှု အစီရင်ခံချက်များ",
        "specialpages-group-other": "အခြားအထူးစာမျက်နှာများ",
        "specialpages-group-login": "Log in ဝင်ရန်/ အကောင့် ဖန်တီးရန်",
index 76e1986..562a819 100644 (file)
        "redirectedfrom": "(Omdirigert fra $1)",
        "redirectpagesub": "Omdirigeringsside",
        "redirectto": "Omdirigering til:",
-       "lastmodifiedat": "Denne siden ble sist endret $1 kl. $2.",
+       "lastmodifiedat": "Denne siden ble sist redigert $1 kl. $2.",
        "viewcount": "Denne siden er vist {{PLURAL:$1|én gang|$1 ganger}}.",
        "protectedpage": "Låst side",
        "jumpto": "Hopp til:",
        "permissionserrorstext-withaction": "Du har ikke tillatelse til å $2 {{PLURAL:$1|fordi|av følgende grunner}}:",
        "contentmodelediterror": "Du kan ikke redigere denne revisjonen fordi innholdsmodellen er <code>$1</code>, som avviker fra den nåværende innholdsmodellen til siden <code>$2</code>.",
        "recreate-moveddeleted-warn": "Advarsel: Du er i ferd med å opprette en side som tidligere har blitt slettet.'''\n\nDu bør vurdere om det er passende å fortsette å redigere denne siden.\nSlette- og flytteloggen for denne siden gjengis her:",
-       "moveddeleted-notice": "Denne siden har blitt slettet.\nSlette- og flytteloggen vises nedenfor.",
-       "moveddeleted-notice-recent": "Beklager, denne siden er nylig blitt slettet (i løpet av de siste 24 timer)\nSlette- og flytteloggen for siden er angitt nedenfor for referanse.",
+       "moveddeleted-notice": "Denne siden har blitt slettet.\nSlette-, beskyttelses- og flytteloggen vises nedenfor.",
+       "moveddeleted-notice-recent": "Beklager, denne siden er nylig blitt slettet (i løpet av de siste 24 timer)\nSlette-, beskyttelses- og flytteloggen for siden er angitt nedenfor for referanse.",
        "log-fulllog": "Vis hele loggen",
        "edit-hook-aborted": "Redigering avbrutt av en funksjon, uten forklaring.",
        "edit-gone-missing": "Kunne ikke oppdatere siden fordi den har blitt slettet.",
        "lineno": "Linje $1:",
        "compareselectedversions": "Sammenlign valgte revisjoner",
        "showhideselectedversions": "Vis/skjul valgte versjoner",
-       "editundo": "fjern",
+       "editundo": "omgjør",
        "diff-empty": "(Ingen forskjell)",
        "diff-multi-sameuser": "({{PLURAL:$1|Én mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
        "searchprofile-articles-tooltip": "Søk i $1",
        "searchprofile-images-tooltip": "Søk etter filer",
        "searchprofile-everything-tooltip": "Søk i alt innhold (inkldert diskusjonssider)",
-       "searchprofile-advanced-tooltip": "Søk i visse navnerom",
+       "searchprofile-advanced-tooltip": "Søk i innførte navnerom",
        "search-result-size": "$1 ({{PLURAL:$2|ett ord|$2 ord}})",
        "search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
        "search-redirect": "(omdirigering $1)",
        "recentchanges-label-minor": "Dette er en mindre endring",
        "recentchanges-label-bot": "Denne redigeringen ble gjort av en bot",
        "recentchanges-label-unpatrolled": "Denne redigeringen har ikke blitt patruljert ennå",
-       "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet byte",
+       "recentchanges-label-plusminus": "Sidestørrelsen ble endret med dette antallet bytes",
        "recentchanges-legend-heading": "<strong>Tegnforklaring:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (se også [[Special:NewPages|liste over nye sider]])",
        "recentchanges-legend-plusminus": "«(±123)»",
        "rcshowhideminor": "$1 mindre endringer",
        "rcshowhideminor-show": "Vis",
        "rcshowhideminor-hide": "Skjul",
-       "rcshowhidebots": "$1 roboter",
+       "rcshowhidebots": "$1 boter",
        "rcshowhidebots-show": "Vis",
        "rcshowhidebots-hide": "Skjul",
        "rcshowhideliu": "$1 registrerte brukere",
        "rcshowhidepatr": "$1 patruljerte endringer",
        "rcshowhidepatr-show": "Vis",
        "rcshowhidepatr-hide": "Skjul",
-       "rcshowhidemine": "$1 mine endringer",
+       "rcshowhidemine": "$1 egne endringer",
        "rcshowhidemine-show": "Vis",
        "rcshowhidemine-hide": "Skjul",
        "rcshowhidecategorization": "$1 kategorisering av sider",
        "rcshowhidecategorization-show": "Vis",
        "rcshowhidecategorization-hide": "Skjul",
-       "rclinks": "Vis siste $1 endringer de siste $2 dagene",
+       "rclinks": "Vis siste $1 endringer de siste $2 dagene",
        "diff": "diff",
        "hist": "hist",
        "hide": "Skjul",
        "recentchangeslinked-feed": "Relaterte endringer",
        "recentchangeslinked-toolbox": "Relaterte endringer",
        "recentchangeslinked-title": "Endringer relatert til «$1»",
-       "recentchangeslinked-summary": "Dette er en liste over de siste endringene på sidene lenket fra en spesifisert side (eller til meldlemmer av en spesifisert kategori).\nSider på [[Special:Watchlist|overvåkningslisten din]] er i '''fet skrift'''.",
+       "recentchangeslinked-summary": "Dette er en liste over de siste endringene på sidene som eer lenket fra en angitt side (eller til medlemmer av en angitt kategori).\nSider på [[Special:Watchlist|overvåkningslisten din]] er i '''fet skrift'''.",
        "recentchangeslinked-page": "Sidenavn:",
        "recentchangeslinked-to": "Vis endringer på sider som lenker til den gitte siden istedet",
        "recentchanges-page-added-to-category": "[[:$1]] ble lagt til i kategorien",
        "filehist-deleteone": "slett",
        "filehist-revert": "tilbakestill",
        "filehist-current": "nåværende",
-       "filehist-datetime": "Dato/tid",
+       "filehist-datetime": "Dato/klokkeslett",
        "filehist-thumb": "Miniatyrbilde",
        "filehist-thumbtext": "Miniatyrbilde av versjonen fra $1",
        "filehist-nothumb": "Intet miniatyrbilde",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Vis",
        "fewestrevisions": "Artikler med færrest revisjoner",
-       "nbytes": "$1 {{PLURAL:$1|byte}}",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategorier}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikier}}",
        "nlinks": "$1 {{PLURAL:$1|lenke|lenker}}",
        "undelete-show-file-submit": "Ja",
        "namespace": "Navnerom:",
        "invert": "Inverter valg",
-       "tooltip-invert": "Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de er avkrysset også)",
+       "tooltip-invert": "Kryss av denne boksen for å skjule endringer på sider i det valgte navnerommet (og tilhørende navnerom hvis de også er avkrysset)",
        "tooltip-whatlinkshere-invert": "Merk av denne boksen for å skjule lenker fra sider i valgte navnerom.",
        "namespace_association": "Tilknyttet navnerom",
-       "tooltip-namespace_association": "Kryss av denne boksen for å også inkludere diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet",
+       "tooltip-namespace_association": "Kryss av denne boksen for å inkludere også diskusjons- eller emnenavnerommet som er tilknyttet det valgte navnerommet",
        "blanknamespace": "(Hoved)",
        "contributions": "{{GENDER:$1|Brukerbidrag}}",
        "contributions-title": "Brukerbidrag av $1",
        "sp-contributions-newonly": "Bare vis bidrag som er sideopprettinger",
        "sp-contributions-hideminor": "Skjul mindre endringer",
        "sp-contributions-submit": "Søk",
-       "whatlinkshere": "Hva lenker hit",
+       "whatlinkshere": "Det som lenker hit",
        "whatlinkshere-title": "Sider som lenker til «$1»",
        "whatlinkshere-page": "Side:",
        "linkshere": "Følgende sider lenker til '''[[:$1]]''':",
        "tooltip-pt-watchlist": "Liste over sider du overvåker for endringer.",
        "tooltip-pt-mycontris": "En liste over {{GENDER:|dine}} bidrag",
        "tooltip-pt-anoncontribs": "En liste over redigeringer gjort fra denne IP-adressen",
-       "tooltip-pt-login": "Du oppfordres til å logge inn, men det er ikke obligatorisk",
+       "tooltip-pt-login": "Du oppfordres til å logge inn, men det er ikke påkrevet",
        "tooltip-pt-login-private": "Du må logge inn for å bruke denne wikien",
        "tooltip-pt-logout": "Logg ut",
-       "tooltip-pt-createaccount": "Du oppfordres til å opprette en konto og logge inn, men det er ikke obligatorisk.",
+       "tooltip-pt-createaccount": "Du oppfordres til å opprette en konto og logge inn, men det er ikke påkrevet.",
        "tooltip-ca-talk": "Diskusjon om innholdssiden",
        "tooltip-ca-edit": "Rediger denne siden",
        "tooltip-ca-addsection": "Start et nytt avsnitt",
        "tooltip-search-fulltext": "Søk etter sider som innholder denne teksten",
        "tooltip-p-logo": "Gå til hovedsiden",
        "tooltip-n-mainpage": "Gå til hovedsiden",
-       "tooltip-n-mainpage-description": "Besøk hovedsiden",
+       "tooltip-n-mainpage-description": "Gå til hovedsiden",
        "tooltip-n-portal": "Om prosjektet, hva du kan gjøre, hvor du kan finne ting",
        "tooltip-n-currentevents": "Finn bakgrunnsinformasjon om aktuelle hendelser",
        "tooltip-n-recentchanges": "Liste over siste endringer på wikien.",
        "yesterday-at": "I går kl. $1",
        "bad_image_list": "Formatet er som følger:\n\nKun listeelementer (linjer som starter med *) tas med.\nDen første lenken på en linje må være en lenke til en dårlig fil.\nAlle andre lenker på samme linje anses for å være unntak, altså sider der filen kan opptre.",
        "metadata": "Metadata",
-       "metadata-help": "Denne filen inneholder tilleggsinformasjon, antagligvis lagt til av digitalkameraet eller skanneren brukt til å lage eller digitalisere det.\nHvis filen har blitt forandret fra utgangspunktet, kan enkelte detaljer være unøyaktige.",
+       "metadata-help": "Denne filen inneholder tilleggsinformasjon, sannsynligvis lagt til av digitalkameraet eller skanneren som ble brukt til å lage eller digitalisere det.\nHvis filen har blitt forandret fra utgangspunktet, kan enkelte detaljer være unøyaktige.",
        "metadata-expand": "Vis utvidede detaljer",
        "metadata-collapse": "Skjul utvidede detaljer",
        "metadata-fields": "Bildemetadatafelt listet i denne meldingen inkluderes på bildesiden når metadatatabellen har kollapset.\nAndre vil skjules som standard.\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",
        "compare-invalid-title": "Tittelen du oppga er ugyldig.",
        "compare-title-not-exists": "Tittelen du oppga eksisterer ikke.",
        "compare-revision-not-exists": "Versjonen du oppga eksisterer ikke.",
+       "diff-form": "Forskjeller",
+       "diff-form-oldid": "Gammel revisjons-ID (valgfritt)",
+       "diff-form-revid": "Revisjons-ID for diffen",
+       "diff-form-submit": "Vis forskjeller",
+       "permanentlink": "Permanent lenke",
+       "permanentlink-revid": "Revisjons-ID",
+       "permanentlink-submit": "Gå til revisjon",
        "dberr-problems": "Siden har tekniske problemer.",
        "dberr-again": "Prøv å oppdatere siden om noen minutter.",
        "dberr-info": "(Kan ikke kontakte databasetjeneren: $1)",
index c1f6c52..1b1d4bc 100644 (file)
        "compare-invalid-title": "तपाईंले खुलाउनु भएको शिर्षक अमान्य छ।",
        "compare-title-not-exists": "तपाईंले खुलाउनु भएको शिर्षक उपलब्ध छैन ।",
        "compare-revision-not-exists": "तपाईंले खुलाउनु भएको संस्करण उपलब्ध छैन ।",
+       "diff-form": "एक '''फारम'''",
        "dberr-problems": "क्षमा पाउँ! यो साइटमा तकनीकी गड़बड़ी आइपरेकोछ।",
        "dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
        "dberr-info": "(डेटाबेस सर्भर: $1 सँग सम्पर्क स्थापित गर्न सकिएन)",
index b0d8a12..1c863bd 100644 (file)
        "permissionserrorstext-withaction": "U hebt geen rechten om $2, {{PLURAL:$1|want}}:",
        "contentmodelediterror": "U kunt deze versie niet bewerken, want het contentmodel ervan is <code>$1</code> en het huidige contentmodel van de pagina is <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Waarschuwing: u bent bezig met het aanmaken van een pagina die in het verleden verwijderd is.'''\n\nOverweeg of het terecht is dat u verder werkt aan deze pagina.\nVoor uw gemak staan hieronder het verwijderingslogboek en het hernoemingslogboek voor deze pagina:",
-       "moveddeleted-notice": "Deze pagina is verwijderd.\nTer informatie wordt het verwijderingslogboek en het hernoemingslogboek van deze pagina hieronder weergegeven.",
-       "moveddeleted-notice-recent": "Deze pagina is helaas recentelijk verwijderd (in de afgelopen 24 uur).\nDe verwijdering- en hernoemingslogboek worden voor uw gemak hieronder weergegeven.",
+       "moveddeleted-notice": "Deze pagina is verwijderd.\nTer informatie wordt het verwijderingslogboek, het beveiligingslogboek en het hernoemingslogboek van deze pagina hieronder weergegeven.",
+       "moveddeleted-notice-recent": "Deze pagina is recentelijk verwijderd (in de afgelopen 24 uur).\nHet verwijderingslogboek, het beveiligingslogboek en het hernoemingslogboek worden voor het gemak hieronder weergegeven.",
        "log-fulllog": "Het volledige logboek bekijken",
        "edit-hook-aborted": "De bewerking is afgebroken door een hook.\nEr is geen toelichting beschikbaar.",
        "edit-gone-missing": "De pagina is niet bijgewerkt.\nDeze lijkt verwijderd te zijn.",
        "watching": "Bezig met plaatsen op volglijst…",
        "unwatching": "Bezig met verwijderen van volglijst…",
        "watcherrortext": "Er is een fout opgetreden tijdens het wijzigen van uw volglijstinstellingen voor \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Alle pagina's markeren als bezocht",
        "enotif_impersonal_salutation": "gebruiker van {{SITENAME}}",
        "enotif_subject_deleted": "{{SITENAME}}: pagina $1 is verwijderd door {{GENDER:$2|$2}}",
        "compare-invalid-title": "De opgegeven pagina is ongeldig.",
        "compare-title-not-exists": "De titel die u hebt opgegeven bestaat niet.",
        "compare-revision-not-exists": "De versie die u hebt opgegeven bestaat niet.",
+       "diff-form": "Wijzigingen",
+       "diff-form-revid": "Versienummer van de wijziging",
+       "diff-form-submit": "Verschillen weergeven",
+       "permanentlink": "Permanente koppeling",
+       "permanentlink-revid": "Versienummer",
+       "permanentlink-submit": "Naar versie gaan",
        "dberr-problems": "Onze excuses. Deze site ondervindt op het moment technische problemen.",
        "dberr-again": "Wacht een aantal minuten en probeer het daarna opnieuw.",
        "dberr-info": "(Kan geen toegang krijgen tot de database: $1)",
index 7670061..416b587 100644 (file)
        "rcfilters-filter-previousrevision-description": "Alle endringar som ikkje er den siste versjonen.",
        "rcfilters-filter-excluded": "Utelate",
        "rcfilters-exclude-button-off": "Utelat dei valde",
+       "rcfilters-view-advanced-filters-label": "Avanserte filter",
        "rcfilters-view-tags": "Endringar med merke",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultat etter namnerom",
        "rcfilters-view-tags-tooltip": "Filtrer resultat etter endringsmerke",
        "compare-invalid-title": "Tittelen du oppgav er ugild.",
        "compare-title-not-exists": "Tittelen du oppgav finst ikkje.",
        "compare-revision-not-exists": "Versjonen du oppgav finst ikkje.",
+       "diff-form": "eit '''skjema'''",
        "dberr-problems": "Nettstaden har tekniske problem.",
        "dberr-again": "Venta nokre minutt og last sida inn på nytt.",
        "dberr-info": "(Kan ikkje kontakta databasetenaren: $1)",
        "revdelete-unrestricted": "fjerna avgrensingar for administratorar",
        "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} for $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
+       "logentry-merge-merge": "$1 {{GENDER:$2|fletta}} $3 inn i $4 (versjonar til og med $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flytte}} sida $3 til $4 utan å lata etter ei omdirigering",
        "logentry-move-move_redir": "$1 {{GENDER:$2|flytte}} sida $3 til $4 over ei omdirigering",
index b79c3ff..01eb029 100644 (file)
        "permissionserrorstext-withaction": "Nie masz uprawnień do $2 z {{PLURAL:$1|następującego powodu|następujących powodów}}:",
        "contentmodelediterror": "Nie możesz edytować tej wersji, ponieważ model jej zawartości (<code>$1</code>) różni się od obecnego modelu zawartości strony (<code>$2</code>).",
        "recreate-moveddeleted-warn": "'''Uwaga! Zamierzasz utworzyć stronę, która została wcześniej usunięta.'''\n\nUpewnij się, czy ponowne utworzenie tej strony jest uzasadnione.\nPoniżej znajduje się rejestr usunięć i zmian nazwy tej strony:",
-       "moveddeleted-notice": "Ta strona została usunięta.\nRejestr usunięć i zmian nazwy tej strony jest pokazany poniżej.",
-       "moveddeleted-notice-recent": "Przepraszamy, ale ta strona została niedawno (w ciągu ostatnich 24 godzin) usunięta. Poniżej znajduje się rejestr usunięć i zmian nazwy tej strony.",
+       "moveddeleted-notice": "Ta strona została usunięta.\nRejestr usunięć, zabezpieczeń i zmian nazwy tej strony jest pokazany poniżej.",
+       "moveddeleted-notice-recent": "Przepraszamy, ale ta strona została niedawno (w ciągu ostatnich 24 godzin) usunięta. Poniżej znajduje się rejestr usunięć, zabezpieczeń i zmian nazwy tej strony.",
        "log-fulllog": "Pokaż cały rejestr",
        "edit-hook-aborted": "Edycja zatrzymana z powodu haka.\nWystąpił z nieokreślonej przyczyny.",
        "edit-gone-missing": "Nie udało się zaktualizować strony.\nZdaje się, że została skasowana.",
        "compare-invalid-title": "Tytuł jest nieprawidłowy.",
        "compare-title-not-exists": "Podany tytuł nie istnieje.",
        "compare-revision-not-exists": "Wybrana wersja nie istnieje.",
+       "diff-form": "Różnice",
+       "diff-form-oldid": "ID starej wersji",
+       "diff-form-revid": "ID wersji ze zmianą",
+       "diff-form-submit": "Pokaż różnice",
+       "permanentlink": "Link trwały do wersji",
+       "permanentlink-revid": "ID wersji",
+       "permanentlink-submit": "Przejdź do wersji",
        "dberr-problems": "Przepraszamy! Witryna ma problemy techniczne.",
        "dberr-again": "Spróbuj przeładować stronę za kilka minut.",
        "dberr-info": "(Błąd łączności z bazą danych: $1)",
index 5f01a42..4e06940 100644 (file)
        "tog-watchlisthideminor": "Ocultar edições menores da lista de páginas vigiadas",
        "tog-watchlisthideliu": "Ocultar edições de usuários autenticados da lista de páginas vigiadas",
        "tog-watchlistreloadautomatically": "Recarregar a lista de páginas vigiadas automaticamente sempre que um filtro for alterado (requer JavaScript)",
+       "tog-watchlistunwatchlinks": "Adicione links diretos de despertar/assistir a entradas da lista de observação (JavaScript necessário para a funcionalidade de alternância)",
        "tog-watchlisthideanons": "Ocultar edições de usuários anônimos da lista de páginas vigiadas",
        "tog-watchlisthidepatrolled": "Ocultar edições patrulhadas da lista de páginas vigiadas",
        "tog-watchlisthidecategorization": "Ocultar a categorização das páginas",
        "permissionserrorstext-withaction": "Você não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos motivos a seguir}}:",
        "contentmodelediterror": "Você não pode editar essa revisão pois seu modelo de conteúdo é <code>$1</code>, que difere do modelo de conteúdo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Atenção: Você está recriando uma página já eliminada em outra ocasião.'''\n\nConsidere se é realmente adequado continuar editando esta página.\nOs registros de eliminação e de movimentação desta página são exibidos a seguir, para sua comodidade:",
-       "moveddeleted-notice": "Esta página foi eliminada.\nOs registros de eliminação e de movimentação para esta página estão disponibilizados abaixo, para referência.",
-       "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nos últimos 24 horas). A eliminação e se mover para a página de log são fornecidos abaixo para referência.",
+       "moveddeleted-notice": "Esta página foi eliminada.\nOs registros de eliminação, proteção e de movimentação para esta página estão disponibilizados abaixo, para referência.",
+       "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nas últimas 24 horas). Os registros de eliminação, proteção e de movimentação para esta página estão disponibilizados abaixo, para referência.",
        "log-fulllog": "Ver registro detalhado",
        "edit-hook-aborted": "Edição abortada por ''hook''.\nEle não deu nenhuma explicação.",
        "edit-gone-missing": "Não foi possível atualizar a página.\nEla parece ter sido eliminada.",
        "watching": "Vigiando...",
        "unwatching": "Deixando de vigiar...",
        "watcherrortext": "Ocorreu um erro ao alterar a configuração da sua lista de páginas vigiadas para \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Marcar todas as páginas como visitadas",
        "enotif_impersonal_salutation": "Usuário do projeto \"{{SITENAME}}\"",
        "enotif_subject_deleted": "A página $1 da {{SITENAME}} foi eliminada por {{gender:$2|$2}}",
        "compare-invalid-title": "O título que você especificou é inválido.",
        "compare-title-not-exists": "O título que você especificou não existe.",
        "compare-revision-not-exists": "A revisão que você especificou não existe.",
+       "diff-form": "Diferenças",
+       "diff-form-oldid": "ID de revisão antiga (opcional)",
+       "diff-form-revid": "ID de revisão da diferença",
+       "diff-form-submit": "Mostrar diferenças",
+       "permanentlink": "Ligação permanente",
+       "permanentlink-revid": "ID da revisão",
+       "permanentlink-submit": "Ir para revisão",
        "dberr-problems": "Desculpe! Este sítio está passando por dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não pode acessar a base de dados: $1)",
index 9e88af6..cafc398 100644 (file)
        "permissionserrorstext-withaction": "Não possui permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "contentmodelediterror": "Não pode editar esta revisão porque o modelo de conteúdo é <code>$1</code>, que é diferente do modelo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Aviso: Está a recriar uma página anteriormente eliminada.</strong>\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
-       "moveddeleted-notice": "Esta página foi eliminada.\nPara sua referência, é apresentado abaixo o registo de eliminação e movimentação da página.",
-       "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nas últimas 24 horas).\nA exclusão e registo de movimentação para a página são fornecidos abaixo para referência.",
+       "moveddeleted-notice": "Esta página foi eliminada.\nPara sua referência, é apresentado abaixo o registo de eliminação, proteção e movimentação da página.",
+       "moveddeleted-notice-recent": "Desculpe, esta página foi eliminada recentemente (nas últimas 24 horas).\nPara sua referência é apresentado abaixo o registo de eliminação, proteção e movimentação da página.",
        "log-fulllog": "Ver registo detalhado",
        "edit-hook-aborted": "A edição foi abortada por um hook.\nNão foi dada nenhuma explicação.",
        "edit-gone-missing": "Não foi possível atualizar a página.\nEla parece ter sido eliminada.",
        "prefs-editwatchlist-clear": "Limpar lista de páginas vigiadas",
        "prefs-watchlist-days": "Dias a mostrar nas mudanças às páginas vigiadas:",
        "prefs-watchlist-days-max": "Máximo: $1 {{PLURAL:$1|dia|dias}}",
-       "prefs-watchlist-edits": "Número de edições a mostrar na listagem expandida:",
+       "prefs-watchlist-edits": "Número máximo de edições a mostrar na lista de vigiadas:",
        "prefs-watchlist-edits-max": "Máximo: 1000",
        "prefs-watchlist-token": "Chave secreta da lista de páginas vigiadas:",
        "prefs-misc": "Diversos",
        "compare-invalid-title": "O título que especificou é inválido.",
        "compare-title-not-exists": "O título que especificou não existe.",
        "compare-revision-not-exists": "A revisão que especificou não existe.",
+       "diff-form": "Diferenças",
+       "diff-form-oldid": "Identificador de revisão antigo (opcional)",
+       "diff-form-revid": "Identificador de revisão da diferença",
+       "diff-form-submit": "Mostrar diferenças",
+       "permanentlink": "Link permanente",
+       "permanentlink-revid": "Identificador de revisão",
+       "permanentlink-submit": "Ir para a revisão",
        "dberr-problems": "Desculpe! Este site está com dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não foi possível aceder ao servidor da base de dados: $1)",
index 7be71f0..f7b176c 100644 (file)
        "tog-watchlisthidebots": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide bot edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-watchlisthideminor": "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide minor edits from watchlist. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-watchlisthideliu": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
-       "tog-watchlistreloadautomatically": "[[Special:Preferences]], tab 'Watchlist'. Offers user to to automatically refresh the watchlist page, when a filter is changed.",
+       "tog-watchlistreloadautomatically": "[[Special:Preferences]], tab 'Watchlist'. Offers user to automatically refresh the watchlist page, when a filter is changed.",
+       "tog-watchlistunwatchlinks": "[[Special:Preferences]], tab 'Watchlist'. Offers user to add an unwatch/watch toggle link to watchlist entries.",
        "tog-watchlisthideanons": "Option in tab 'Watchlist' of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-watchlisthidepatrolled": "Option in Watchlist tab of [[Special:Preferences]]. {{Gender}}\n\n{{Related|Preferences-watchlistrc-toggle}}",
        "tog-watchlisthidecategorization": "Option in Watchlist tab of [[Special:Preferences]]. Offers user to hide/show categorization of pages. Appears next to checkboxes with labels such as {{msg-mw|tog-watchlisthideminor}}.",
        "watching": "Text displayed when clicked on the watch tab: {{msg-mw|Watch}}. It means the wiki is adding that page to your watchlist.",
        "unwatching": "Text displayed when clicked on the unwatch tab: {{msg-mw|Unwatch}}. It means the wiki is removing that page from your watchlist.",
        "watcherrortext": "When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed.\n\nThis message is used raw and should not contain wikitext.\n\nParameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Addedwatchtext}}",
+       "watchlist-unwatch": "Symbol used for the link to unwatch a page from the watchlist.",
+       "watchlist-unwatch-undo": "Symbol used for the link to re-watch a page that has been unwatched from the watchlist.",
        "enotif_reset": "Used in [[Special:Watchlist]].\n\nThis should be translated as \"Mark all pages '''as''' visited\".\n\nSee also:\n* {{msg-mw|Watchlist-options|fieldset}}\n* {{msg-mw|Watchlist-details|watchlist header}}\n* {{msg-mw|Wlheader-enotif|watchlist header}}",
        "enotif_impersonal_salutation": "Used for impersonal e-mail notifications, suitable for bulk mailing.\n{{Identical|User}}",
        "enotif_subject_deleted": "Email notification subject for deleted pages. Parameters:\n* $1 - page title\n* $2 - username who has deleted the page, can be used for GENDER",
        "compare-invalid-title": "Used as error message in [[Special:ComparePages]].",
        "compare-title-not-exists": "Used as error message in [[Special:ComparePages]].",
        "compare-revision-not-exists": "Used as error message in [[Special:ComparePages]].",
+       "diff-form": "The title of [[Special:Diff]]\n{{Identical|Difference}}",
+       "diff-form-oldid": "Label for the field of the old revision in the comparison for [[Special:Diff]]",
+       "diff-form-revid": "Label for the field of the new revision in the comparison for [[Special:Diff]]",
+       "diff-form-submit": "Submit button on [[Special:Diff]]",
+       "diff-form-summary": "{{doc-specialpagesummary|diff}}",
+       "permanentlink": "The title of [[Special:PermanentLink]]",
+       "permanentlink-revid": "Label for the field for the revision ID in [[Special:PermanentLink]]",
+       "permanentlink-submit": "Submit button on [[Special:PermanentLink]]",
+       "permanentlink-summary": "{{doc-specialpagesummary|permanentlink}}",
        "dberr-problems": "This message does not allow any wiki nor html markup.",
        "dberr-again": "This message does not allow any wiki nor html markup.",
        "dberr-info": "This message does not allow any wiki nor html markup. Parameters:\n* $1 - database server name\nSee also:\n* {{msg-mw|Dberr-info-hidden}} - hides database server name",
index 4fb3318..cc85e3b 100644 (file)
@@ -15,7 +15,7 @@
        "underline-always": "ⵍⴱⴷⴰ",
        "sunday": "ⴰⵙⴰⵎⴰⵙ",
        "monday": "ⴰⵢⵏⴰⵙ",
-       "tuesday": "Asinas (Ettřata)",
+       "tuesday": "ⴰⵙⵉⵏⴰⵙ",
        "wednesday": "Akṛas (Řarbeɛ)",
        "thursday": "ⴰⴽⵡⴰⵙ",
        "friday": "ⴰⵙⵉⵎⵡⴰⵙ",
@@ -73,7 +73,7 @@
        "november-date": "$1 ⵏⵓⵡⴰⵏⴱⵉⵔ",
        "december-date": "$1 ⴷⵓⵊⴰⵏⴱⵉⵔ",
        "pagecategories": "{{PLURAL:$1|ⴰⵙⵎⵉⵍ|ⵉⵙⵎⵉⵍⵏ}}",
-       "category_header": "âµ\9câ´°âµ\99âµ\8fâµ\89ⵡâµ\89âµ\8f â´³ ⵜⴰⴳⴳⴰⵢⵜ \"$1\"",
+       "category_header": "âµ\9câ´°âµ\99âµ\8fâµ\89ⵡâµ\89âµ\8f â´·âµ\89 ⵜⴰⴳⴳⴰⵢⵜ \"$1\"",
        "subcategories": "ⵉⴷⵓⵙⵎⵉⵍⵏ",
        "category-media-header": "Media di category \"$1\"",
        "category-empty": "''Taggayt a war dags bu ca n Tasna niɣ ca n umedia.''",
        "mypage": "ⵜⴰⵙⵏⴰ",
        "mytalk": "ⴰⵎⵙⴰⵡⴰⵍ",
        "anontalk": "ⴰⵎⵙⴰⵡⴰⵍ",
-       "navigation": "Tagriwa",
+       "navigation": "ⴰⵙⵜⴰⵔⴰ",
        "and": "&#32;ⴷ",
        "actions": "ⵜⵉⴳⴰⵡⵉⵏ",
        "errorpagetitle": "ⵜⴰⵣⴳⵍⵜ",
        "returnto": "Dwl ghar $1.",
-       "tagline": "Zi {{SITENAME}}",
+       "tagline": "ⵣⵉ {{SITENAME}}",
        "help": "ⵜⵉⵡⵉⵙⵉ",
        "search": "ⵔⵣⵓ",
        "searchbutton": "ⵔⵣⵓ",
        "printableversion": "Tanghelt n usiggez",
        "permalink": "Tamghunt iqqimen",
        "edit": "ⵙⵏⴼⵍ",
-       "create": "Egg",
+       "create": "ⵙⵏⵓⵍⴼⵓ",
        "delete": "ⴽⴽⵙ",
        "protect": "Mstn",
        "protect_change": "ⵙⵏⴼⵍ",
        "talkpagelinktext": "ⴰⵎⵙⴰⵡⴰⵍ",
        "personaltools": "Imassen inu",
        "talk": "ⴰⵎⵙⴰⵡⴰⵍ",
-       "views": "Timmeẓṛa",
+       "views": "ⵜⴰⵏⵏⴰⵢⵉⵏ",
        "toolbox": "ⵉⵎⴰⵙⵙⵏ",
-       "otherlanguages": "S tutlayin nneḍni",
+       "otherlanguages": "ⵙ ⵜⵓⵜⵍⴰⵢⵉⵏ ⵏⵏⵉⴹⵏ",
        "redirectedfrom": "(Itwasnnmd-d zi $1)",
        "redirectpagesub": "Tasna n (Redirect)",
        "jumpto": "Nḍu ghar:",
-       "jumptonavigation": "tagriwa",
+       "jumptonavigation": "ⴰⵙⵜⴰⵔⴰ",
        "jumptosearch": "ⵔⵣⵓ",
        "aboutsite": "ⵅⴼ {{SITENAME}}",
        "aboutpage": "Project:ⵅⴼ",
        "group-bot": "ⵉⵔⵓⴱⵓⵜⵏ",
        "group-sysop": "Indbaln",
        "group-all": "(ⵎⴰⵔⵔⴰ)",
+       "grouppage-bot": "{{ns:project}}:ⵉⵔⵓⴱⵓⵜⵏ",
        "grouppage-sysop": "{{ns:project}}:inedbalen",
        "right-read": "ⵖⵔ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "right-edit": "ⵙⵏⴼⵍ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "enhancedrc-history": "ⴰⵎⵣⵔⵓⵢ",
        "recentchanges": "ⵉⵙⵏⴼⵉⵍⵏ ⵉⵏⴳⴳⵓⵔⴰ",
        "recentchanges-feed-description": "Bbar tiẓṛigin timayutin n wiki deg usudem(feed) a .",
+       "recentchanges-label-newpage": "ⵉⵙⵏⵓⵍⴼⴰ ⵓⵙⵏⴼⵍ ⴰ ⵉⵛⵜ ⵏ ⵜⴰⵙⵏⴰ ⵜⴰⵎⴰⵢⵏⵓⵜ",
        "recentchanges-label-minor": "ⵡⴰ ⴷ ⴰⵙⵏⴼⵍ ⵓⵎⵥⵉⵢ",
        "recentchanges-label-bot": "ⴰⵙⵏⴼⵍ ⴰ ⵉⴳⴳⴰ ⵜ ⵉⵊⵊ ⵏ ⵓⵔⵓⴱⵓ",
        "rcfilters-savedqueries-new-name-label": "ⵉⵙⵎ",
        "rclinks": "Ẓar $1 tiẓṛigin tinggura di $2 n ussan inggura",
        "diff": "ⴰⵎⵣⴰⵔⴰⵢ",
        "hist": "ⴰⵎⵣⵔⵓⵢ",
-       "hide": "Snuffar",
+       "hide": "ⵙⵏⵓⴼⴼⵔ",
        "show": "semmel-d",
        "minoreditletter": "ⵎⵥⵢ",
        "newpageletter": "ⵎⵢⵏ",
        "download": "ⴰⴳⵎ",
        "listredirects": "Ẓar (redirects)",
        "unusedtemplates": "Timudmiwin war twasexedment",
-       "randompage": "Tasna mamec ma tella",
+       "randompage": "ⵜⴰⵙⵏⴰ ⵜⴰⴷⵀⵎⴰⵙⵜ",
        "randomincategory-category": "ⴰⵙⵎⵉⵍ:",
        "randomincategory-submit": "Raḥ ɣa",
        "randomredirect": "(redirect) zi ṭṭarf",
-       "statistics": "tisiḍanin",
+       "statistics": "ⵉⵙⵉⴹⵏⴻⵏ",
        "statistics-articles": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵏ ⵜⵓⵎⴰⵢⵜ",
        "statistics-pages": "ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "doubleredirects": "(redirects) ɛɛawdent",
        "sp-contributions-newbies-sub": "i imiḍan imaynuten",
        "sp-contributions-blocklog": "sbdd tabdart n talghut",
        "sp-contributions-talk": "ⵎⵙⴰⵡⵍ",
-       "sp-contributions-search": "Arzu x tiggawin",
+       "sp-contributions-search": "ⵔⵣⵓ ⵅ ⵜⵓⵎⵓⵜⵉⵏ",
        "sp-contributions-username": "Tansa IP d isem useqdac:",
        "sp-contributions-submit": "ⵔⵣⵓ",
        "whatlinkshere": "ⵎⵉⵏ ⵉⵇⵇⵏⴻⵏ ⵖⵔ ⴷⴰ",
        "whatlinkshere-hidelinks": "$1 timqqan",
        "blockip": "Sbdd asqdac a",
        "ipbreason": "ⵜⴰⵎⵏⵜⵉⵍⵜ:",
-       "ipboptions": "2 âµ\9câµ\99âµ\94â´°â´³âµ\89âµ\8f:2 hours,1 âµ¡â´°âµ\99âµ\99:1 day,3 âµ¡âµ\93âµ\99âµ\99â´°âµ\8f:3 days,1 âµ\89âµ\8eâ´°âµ\8dâ´°âµ\99âµ\99:1 week,2 âµ\89âµ\8eâ´°âµ\8dâ´°âµ\99âµ\99âµ\8f:2 weeks,1 âµ¡â´°âµ¢âµ¢âµ\93âµ\93âµ\94:1 month,3 âµ¡â´°âµ¢âµ¢âµ\93âµ\94âµ\8f:3 months,6 âµ¡â´°âµ¢âµ¢âµ\93âµ\94âµ\8f:6 months,1 âµ\93âµ\99ⴳⴳⵯⴰâµ\99:1 year,âµ\8dⴱⴷⴰ:infinite",
+       "ipboptions": "2 ⵜⵙⵔⴰⴳⵉⵏ:2 hours,1 ⵡⴰⵙⵙ:1 day,3 ⵡⵓⵙⵙⴰⵏ:3 days,1 ⵉⵎⴰⵍⴰⵙⵙ:1 week,2 ⵉⵎⴰⵍⴰⵙⵙⵏ:2 weeks,1 ⵡⴰⵢⵢⵓⵔ:1 month,3 ⵡⴰⵢⵢⵓⵔⵏ:3 months,6 ⵡⴰⵢⵢⵓⵔⵏ:6 months,1 ⵓⵙⴳⴳⵯⴰⵙ:1 year,ⵍⴱⴷⴰ:infinite",
        "autoblocklist-submit": "ⵔⵣⵓ",
        "ipblocklist": "Tabdart n tansiwin IP d isemawen n iseqdacen ig iteblukan",
        "blocklist-reason": "ⵜⴰⵎⵏⵜⵉⵍⵜ",
        "tooltip-ca-unwatch": "Kkes Tasna ya zi Tabdart uḥṭṭu inec",
        "tooltip-search": "ⵔⵣⵓ ⴳ {{SITENAME}}",
        "tooltip-search-go": "Uyur ghar tasna s yizwel a s imant nnes malla tella",
-       "tooltip-search-fulltext": "Rzu di tasniwin xef waḍṛis a",
+       "tooltip-search-fulltext": "ⵔⵣⵓ ⴷⵉ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵅⴼ ⵓⴹⵔⵉⵙ ⴰ",
        "tooltip-p-logo": "Tasbtirt Tamzwarut",
        "tooltip-n-mainpage": "Adef ɣar tasna tamezwarut",
        "tooltip-n-mainpage-description": "Adef ghar tasna tamezwarut",
        "tooltip-n-portal": "Xef usenfar, mayen tzemmared ad tegged, mani ɣa tafed tiɣawsiwin",
        "tooltip-n-currentevents": "Af tilgha n ugilal xf tmsarin titurawin",
-       "tooltip-n-recentchanges": "Tabdart n isenfilen imaynuten di Wiki.",
+       "tooltip-n-recentchanges": "ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵉⵙⵏⴼⵉⵍⵏ ⵉⵏⴳⴳⵓⵔⴰ ⴷⴳ ⵓⵡⵉⴽⵉ",
        "tooltip-n-randompage": "Zdem ict tasna d tagacurant",
        "tooltip-n-help": "Mani gha tessned",
        "tooltip-t-whatlinkshere": "Tabdart n marra tasniwin n Wiki i d-iteqqnen da",
-       "tooltip-t-recentchangeslinked": "Isenfilen n drus zggwami di tasniwin i yetwaqqnen zi tasna ya",
+       "tooltip-t-recentchangeslinked": "ⵉⵙⵏⴼⵉⵍⵏ ⵉⵏⴳⴳⵓⵔⴰ ⴷⵉ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⵇⵇⵏⴻⵏ ⵣⵉ ⵜⴰⵙⵏⴰ ⴰ",
        "tooltip-t-contributions": "Ẓar Tabdart n tiggawin n useqdac a",
        "tooltip-t-emailuser": "Sekk e-mail i bnadem a",
        "tooltip-t-upload": "ⵙⴽⵜⵔ ⵉⴼⴰⵢⵍⵓⵜⵏ",
-       "tooltip-t-specialpages": "Tabdart n marra tasniwin tinemmezrayin",
+       "tooltip-t-specialpages": "ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵎⴰⵔⵔⴰ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵉⵥⵍⵉⵏ",
        "tooltip-t-print": "Tanghelt usiggez n tasna ya",
        "tooltip-ca-nstab-main": "Ẓeṛ tasna n ukettur",
        "tooltip-ca-nstab-user": "Ẓar Tasna n user",
        "tooltip-ca-nstab-template": "Ẓṛ tamudmt",
        "tooltip-ca-nstab-help": "Ẓar Tasna n tallalt",
        "tooltip-ca-nstab-category": "Ẓṛ tasna n taggayt",
-       "tooltip-minoredit": "egg-itt d taẓṛigt tamẓyant",
+       "tooltip-minoredit": "ⴳⴳ ⵉⵜ ⴷ ⴰⵙⵏⴼⵍ ⵓⵎⵥⵉⵢ",
        "tooltip-save": "Xmml isnfiln nnk",
        "tooltip-preview": "Ẓṛ mayn turid, zzat i t gha txmmld!",
        "tooltip-diff": "Ẓar tiẓṛigin i teggid deg uḍṛiṣ a.",
        "tooltip-compareselectedversions": "Ẓar imsebeḍiyen jar tunɣilin n Tasna ya.",
        "tooltip-watch": "Arni Tasna ya ɣa Tabdart uḥṭṭu inec",
+       "pageinfo-header-edits": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵓⵙⵏⴼⵍ",
        "pageinfo-language": "ⵜⵓⵜⵍⴰⵢⵜ ⵏ ⵜⵓⵎⴰⵢⵜ ⵏ ⵜⴰⵙⵏⴰ",
        "pageinfo-contentpage-yes": "ⵢⴰⵀ",
        "pageinfo-protect-cascading-yes": "ⵢⴰⵀ",
index 185c8f3..c5f9e8c 100644 (file)
        "compare-invalid-title": "Titlul specificat nu este corect.",
        "compare-title-not-exists": "Titlul specificat nu există.",
        "compare-revision-not-exists": "Versiunea specificată nu există.",
+       "diff-form": "un '''formular'''",
        "dberr-problems": "Ne cerem scuze! Acest site întâmpină dificultăți tehnice.",
        "dberr-again": "Așteptați câteva minute și încercați din nou.",
        "dberr-info": "(Nu se poate accesa baza de date: $1)",
        "authprovider-resetpass-skip-label": "Omite",
        "linkaccounts-submit": "Leagă conturile",
        "unlinkaccounts": "Dezleagă conturile",
-       "unlinkaccounts-success": "Contul a fost dezlegat"
+       "unlinkaccounts-success": "Contul a fost dezlegat",
+       "userjsispublic": "Atenție: subpaginile JavaScript nu trebuie să conțină date confidențiale, întrucât ele sunt vizibile altor utilizatori."
 }
index 2d5d2eb..e6937d0 100644 (file)
        "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}}:",
        "recreate-moveddeleted-warn": "'''Fa Attenziò: Ste ccreje 'na pàgene ca avère state scangillete apprime.'''\n\nVide bbuene ce l'ha ccrejà sta pàgene.\nSinde a me, vide l'archivie de le scangellaminde e de le spustaminde accussì sì secure de quidde cà fà:",
-       "moveddeleted-notice": "Sta pàgene ha state scangellate.\nL'archivije de le scangellaminde e de le spustaminde pe sta pàgene 'u puè vedè aqquà sotte pe riferimende.",
+       "moveddeleted-notice": "Sta pàgene ha state scangellate.\nL'archivije de le scangellaminde, de le prutezziune e de le spustaminde pe sta pàgene 'u puè 'ndrucà aqquà sotte pe riferimende.",
        "log-fulllog": "Vide l'arichivije comblete",
        "edit-hook-aborted": "Cangiamende annullete da  'nu ''hook''.\nNon g'à date nisciune mutive.",
        "edit-gone-missing": "Non ge puè cangià sta pàgene.\nPare proprie ca l'onne scangellete.",
        "content-model-css": "CSS",
        "content-json-empty-object": "Oggette vacande",
        "content-json-empty-array": "Matrice vacande",
+       "deprecated-self-close-category": "Lè pàggene ca ausane le tag HTML auto-achiuse invalide",
        "duplicate-args-warning": "<strong>Attenziò:</strong> [[:$1]] ste chiame [[:$2]] cu cchiù de 'nu valore pu parametre \"$3\". Sulamende l'urteme valore date avène ausate.",
        "duplicate-args-category": "Pàggene ca ausane le argumende a doppie jndr'à le chiamate d'u template",
        "duplicate-args-category-desc": "'A pàgene téne chiamate a template ca ausane arguminde a doppie, cumme <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "prefs-editwatchlist-clear": "Sdevache l'elenghe de le pàggene condrollate tune",
        "prefs-watchlist-days": "Giurne da fà vedè jndr'à liste de le pàggene condrollete:",
        "prefs-watchlist-days-max": "Massime $1 {{PLURAL:$1|sciurne|sciurne}}",
-       "prefs-watchlist-edits": "Numere massime de cangiaminde ca se ponne fa vedè jndr'à liste de le pàggene condrollete spannute:",
+       "prefs-watchlist-edits": "Numere massime de cangiaminde ca se ponne fa 'ndrucà jndr'à l'lenghe de le pàggene condrollate:",
        "prefs-watchlist-edits-max": "Numere massime: 1000",
        "prefs-watchlist-token": "Token de le pàggene condrollate:",
        "prefs-misc": "Misc",
        "grant-group-file-interaction": "Inderaggisce cu le media",
        "grant-group-watchlist-interaction": "Inderaggisce cu le pàggene condrollate",
        "grant-group-email": "Manne 'n'e-mail",
+       "grant-group-customization": "Personalizzazzione e preferenze",
+       "grant-group-administration": "Face aziune amministrative",
+       "grant-group-private-information": "Accede a le date private sus a te",
+       "grant-group-other": "Attività misckate",
+       "grant-blockusers": "Blocche e sblocche le utinde",
        "grant-createaccount": "Ccreje le cunde utinde",
        "grant-createeditmovepage": "Ccreje, cange e spueste le pàggene",
        "grant-delete": "Scangille pàggene, revisiune e vôsce de l'archivije",
        "rcfilters-savedqueries-new-name-placeholder": "Dì a ce serve 'u filtre",
        "rcfilters-savedqueries-apply-label": "Ccrèje 'nu filtre",
        "rcfilters-savedqueries-cancel-label": "Annulle",
+       "rcfilters-invalid-filter": "Filtre invalide",
+       "rcfilters-empty-filter": "Nisciune filtre attive. Tutte le condrebbute avènene fatte 'ndrucà.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-whatsthis": "Cumme funzionane?",
        "rcfilters-highlightmenu-title": "Scacchie 'nu culore",
        "import-nonewrevisions": "Tutte le revisiune avèrene già state 'mbortate.",
        "xml-error-string": "$1 a 'a linea $2, colonne $3 (byte $4): $5",
        "import-upload": "Careche le date in XML",
-       "import-token-mismatch": "S'à perse 'a sessione de le date.\n\nPò essere ca è state mise fore. <strong>Verifiche de sta angore jndre e pruéve arrete</strong>.\nCe tìne angore 'u probbleme, pué pruvà a [[Special:UserLogout|assè]] e trasè arrete, condrollanne ca 'u browser tune se pigghie le cookie da stu site.",
+       "import-token-mismatch": "S'à perse 'a sessione de le date.\n\nPò essere ca è state mise fore. '''Verifiche de sta angore jndre e pruéve arrete'''.\nCe tìne angore 'u probbleme, pué pruvà a [[Special:UserLogout|assè]] e trasè arrete, condrollanne ca 'u browser tune se pigghie le cookie da stu site.",
        "import-invalid-interwiki": "Non ge pozze 'mbortà da 'a Uicchi specificate.",
        "import-error-edit": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe cangiarle.",
        "import-error-create": "Pàgene \"$1\" non g'ha state 'mbortate purcé tu non ge tìne le permesse pe ccrejarle.",
        "compare-invalid-title": "'U titele ca è specificate jè invalide.",
        "compare-title-not-exists": "'U titele ca è specificate non g'esiste.",
        "compare-revision-not-exists": "'A revisione ca è specificate non g'esiste.",
+       "diff-form": "'nu '''form'''",
        "dberr-problems": "Sime spiacende! Stu site stè 'ngondre de le difficoltà tecniche.",
        "dberr-again": "Aspitte quacche minute e pò recareche.",
        "dberr-info": "(Non ge riuscime a trasè sus a'u server d'u database: $1)",
index 6d6ecde..2bded0c 100644 (file)
        "tog-hidepatrolled": "Скрывать патрулированные правки в списке свежих правок",
        "tog-newpageshidepatrolled": "Скрывать отпатрулированные страницы в списке новых страниц",
        "tog-hidecategorization": "Скрывать категоризацию страниц",
-       "tog-extendwatchlist": "РаÑ\81Ñ\88иÑ\80еннÑ\8bй Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f, Ð²ÐºÐ»Ñ\8eÑ\87аÑ\8eÑ\89ий все изменения, а не только последние <small>(они могут быть сгруппированы настройкой на вкладке «[[Служебная:Настройки#mw-prefsection-rc|Свежие правки]]»)</small>",
+       "tog-extendwatchlist": "РаÑ\81Ñ\88иÑ\80иÑ\82Ñ\8c Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f, Ð²ÐºÐ»Ñ\8eÑ\87аÑ\8eÑ\89аÑ\8f все изменения, а не только последние <small>(они могут быть сгруппированы настройкой на вкладке «[[Служебная:Настройки#mw-prefsection-rc|Свежие правки]]»)</small>",
        "tog-usenewrc": "Группировать изменения в свежих правках и списке наблюдения",
        "tog-numberheadings": "Автоматически нумеровать заголовки",
        "tog-showtoolbar": "Показывать панель инструментов при редактировании",
        "tog-shownumberswatching": "Показывать число участников, включивших страницу в свой список наблюдения",
        "tog-oldsig": "Ваша текущая подпись:",
        "tog-fancysig": "Собственная вики-разметка подписи (без автоматической ссылки)",
-       "tog-uselivepreview": "Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð±Ñ\8bÑ\81Ñ\82Ñ\80Ñ\8bй Ð¿Ñ\80едваÑ\80иÑ\82елÑ\8cнÑ\8bй Ð¿Ñ\80оÑ\81моÑ\82Ñ\80",
+       "tog-uselivepreview": "Ð\9fоказÑ\8bваÑ\82Ñ\8c Ð¿Ñ\80едваÑ\80иÑ\82елÑ\8cнÑ\8bй Ð¿Ñ\80оÑ\81моÑ\82Ñ\80 Ð±ÐµÐ· Ð¿ÐµÑ\80езагÑ\80Ñ\83зки Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b",
        "tog-forceeditsummary": "Предупреждать, когда не заполнено поле описания правки",
        "tog-watchlisthideown": "Скрывать мои правки из списка наблюдения",
        "tog-watchlisthidebots": "Скрывать правки ботов из списка наблюдения",
        "databaseerror-function": "Функция: $1",
        "databaseerror-error": "Ошибка: $1",
        "transaction-duration-limit-exceeded": "Для того, чтобы избежать большого лага при репликации, эта транзакция была прервана, поскольку продолжительность записи ($1) превысила лимит в $2 {{PLURAL:$2|секунду|секунд|секунды}}.\nЕсли вы изменяете несколько элементов за один раз, попробуйте вместо этого сделать несколько небольших операций.",
-       "laggedslavemode": "Внимание: страница может не содержать последних обновлений.",
+       "laggedslavemode": "<strong>Внимание:</strong> на странице могут отсутствовать последние обновления.",
        "readonly": "Запись в базу данных заблокирована",
        "enterlockreason": "Укажите причину и намеченный срок блокировки.",
        "readonlytext": "Добавление новых статей и другие изменения базы данных сейчас заблокированы: вероятно, в связи с плановым обслуживанием.\n\nСистемный администратор, заблокировавший базу, оставил следующее объяснение: $1",
        "title-invalid-too-long": "Запрашиваемый заголовок страницы слишком длинен. Он должен быть не более $1 {{PLURAL:$1|1=байта|байт}} в кодировке UTF-8.",
        "title-invalid-leading-colon": "Запрашиваемое название страницы содержит недопустимое двоеточие в начале.",
        "perfcached": "Данные взяты кэша; они могли устареть. В кэше хранится не более $1 {{PLURAL:$1|1=записи|записей}}.",
-       "perfcachedts": "СледÑ\83Ñ\8eÑ\89ие Ð´Ð°Ð½Ð½Ñ\8bе Ð²Ð·Ñ\8fÑ\82Ñ\8b Ð¸Ð· ÐºÑ\8dÑ\88а, последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=$1 записи|$1 записей}}.",
+       "perfcachedts": "Ð\94аннÑ\8bе Ð²Ð·Ñ\8fÑ\82Ñ\8b Ð¸Ð· ÐºÑ\8dÑ\88а; последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=$1 записи|$1 записей}}.",
        "querypage-no-updates": "Обновление этой страницы сейчас отключено.\nПредставленные здесь данные не будут обновляться.",
        "viewsource": "Просмотр вики-текста",
        "viewsource-title": "Просмотр исходного текста страницы $1",
        "mycustomcssprotected": "У вас нет прав для редактирования этого CSS страницы.",
        "mycustomjsprotected": "У вас нет прав для редактирования JavaScript на странице.",
        "myprivateinfoprotected": "У вас нет разрешения на изменение вашей личной информации",
-       "mypreferencesprotected": "У Ð²Ð°Ñ\81 Ð½ÐµÑ\82 Ð¿Ñ\80ав Ð´Ð»Ñ\8f Ñ\80едакÑ\82иÑ\80ованиÑ\8f Ð²Ð°Ñ\88иÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80оек.",
+       "mypreferencesprotected": "У вас нет прав для редактирования настроек.",
        "ns-specialprotected": "Страницы пространства имён «{{ns:special}}» не могут правиться.",
        "titleprotected": "Создание страницы с таким заголовком было запрещено участником [[User:$1|$1]].\nУказана следующая причина: <em>$2</em>.",
        "filereadonlyerror": "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».\n\nСистемный администратор, заблокировавший базу, оставил следующее объяснение: «$3».",
        "virus-badscanner": "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
        "virus-scanfailed": "ошибка сканирования (код $1)",
        "virus-unknownscanner": "неизвестный антивирус:",
-       "logouttext": "<strong>Ð\92Ñ\8b Ð·Ð°Ð²ÐµÑ\80Ñ\88или Ñ\81еанÑ\81 Ñ\80абоÑ\82Ñ\8b.</strong>\n\nÐ\9dекоÑ\82оÑ\80Ñ\8bе Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð¿Ñ\80одолжаÑ\82Ñ\8c Ð¾Ñ\82обÑ\80ажаÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ñ\82ом Ð²Ð¸Ð´Ðµ, ÐºÐ°Ðº Ð±Ñ\83дÑ\82о Ð²Ñ\8b Ð²Ñ\81Ñ\91 ÐµÑ\89Ñ\91 Ð¿Ñ\80едÑ\81Ñ\82авленÑ\8b системе. Для борьбы с этим явлением обновите кэш браузера.",
+       "logouttext": "<strong>Ð\92Ñ\8b Ð·Ð°Ð²ÐµÑ\80Ñ\88или Ñ\81еанÑ\81 Ñ\80абоÑ\82Ñ\8b.</strong>\n\nÐ\9dекоÑ\82оÑ\80Ñ\8bе Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð¿Ñ\80одолжиÑ\82Ñ\8c Ð¾Ñ\82обÑ\80ажаÑ\82Ñ\8cÑ\81Ñ\8f Ñ\82ак, Ñ\81ловно Ð²Ñ\8b Ð²Ñ\81е ÐµÑ\89е Ð½Ð°Ñ\85одиÑ\82еÑ\81Ñ\8c Ð² системе. Для борьбы с этим явлением обновите кэш браузера.",
        "cannotlogoutnow-title": "Невозможно выйти прямо сейчас",
        "cannotlogoutnow-text": "Нельзя выйти во время использования $1.",
        "welcomeuser": "Добро пожаловать, $1!",
-       "welcomecreation-msg": "Ð\92аÑ\88а Ñ\83Ñ\87Ñ\91Ñ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ñ\81оздана.\nÐ\9dе Ð·Ð°Ð±Ñ\83дÑ\8cÑ\82е Ð¿Ñ\80овеÑ\81Ñ\82и [[Special:Preferences|персональную настройку]] сайта {{SITENAME}}.",
+       "welcomecreation-msg": "Ð\92аÑ\88а Ñ\83Ñ\87Ñ\91Ñ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ñ\83Ñ\81пеÑ\88но Ñ\81оздана.\nТепеÑ\80Ñ\8c Ð²Ñ\8b Ñ\82акже Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ñ\80овеÑ\81Ñ\82и  [[Special:Preferences|персональную настройку]] сайта {{SITENAME}}.",
        "yourname": "Имя учётной записи:",
        "userlogin-yourname": "Имя учётной записи",
        "userlogin-yourname-ph": "Введите имя вашей учётной записи",
        "acct_creation_throttle_hit": "Посетители с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись|было создано $1 учётных записей|были созданы $1 учётных записи}} за последние $2 — это предельное количество для данного отрезка времени.\nВ результате, пользователи с этим IP-адресом в данный момент больше не могут создавать новых учётных записей.",
        "emailauthenticated": "Ваш адрес электронной почты подтверждён $2 в $3.",
        "emailnotauthenticated": "Ваш адрес электронной почты ещё не был подтверждён.\nПисьма не будут отправляться ни для одной из следующий функций.",
-       "noemailprefs": "Адрес электронной почты не был указан, функции вики-движка по работе с эл. почтой отключены.",
+       "noemailprefs": "Адрес электронной почты не указан  — функции по работе с эл. почтой отключены.",
        "emailconfirmlink": "Подтвердить ваш адрес электронной почты",
        "invalidemailaddress": "Адрес электронной почты не может быть принят, так как он не соответствует формату.\nПожалуйста, введите корректный адрес или оставьте поле пустым.",
        "cannotchangeemail": "Адреса электронной почты этой учётной записи не могут быть изменены в этой вики.",
        "accountcreatedtext": "Создана учётная запись участника [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|обс.]]).",
        "createaccount-title": "{{SITENAME}}: создание учётной записи",
        "createaccount-text": "Кто-то создал учётную запись «$2» на сервере проекта {{SITENAME}} ($4), указав ваш адрес электронной почты. \n\nПароль учётной записи — «$3». Вам следует авторизоваться на сайте и изменить пароль.\n\nПроигнорируйте данное сообщение, если учётная запись была создана по ошибке.",
-       "login-throttled": "Ð\92Ñ\8b Ñ\81делали Ñ\81лиÑ\88ком Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð¿Ñ\80едÑ\81Ñ\82авиÑ\82Ñ\8cÑ\81Ñ\8f Ñ\81иÑ\81Ñ\82еме.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
+       "login-throttled": "Ð\92Ñ\8b Ñ\81делали Ñ\81лиÑ\88ком Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð²Ñ\85ода.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
        "login-abort-generic": "Не удалось представиться системе — отменено",
        "login-migrated-generic": "Ваша учётная запись была перенесена, и ваше имя участника больше не существует в этой вики.",
        "loginlanguagelabel": "Язык: $1",
        "retypenew": "Повторите ввод нового пароля:",
        "resetpass_submit": "Установить пароль и представиться",
        "changepassword-success": "Ваш пароль был изменён!",
-       "changepassword-throttled": "Ð\92Ñ\8b Ñ\81делали Ñ\81лиÑ\88ком Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð¿Ñ\80едÑ\81Ñ\82авиÑ\82Ñ\8cÑ\81Ñ\8f Ñ\81иÑ\81Ñ\82еме.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
+       "changepassword-throttled": "Ð\92Ñ\8b Ñ\81делали Ñ\81лиÑ\88ком Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð²Ñ\85ода.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
        "botpasswords": "Пароли ботов",
        "botpasswords-summary": "<em>Пароли бота</em> позволяют получить доступ к учётной записи пользователя через API без использования логина и пароля главной учётной записи. Права участника при входе с паролем бота могут быть ограничены.\n\nЕсли Вы не знаете, зачем это нужно, воздержитесь от использования этой страницы. Никто никогда не должен просить вас, чтобы вы создали и сообщили его.",
        "botpasswords-disabled": "Пароли бота отключены.",
        "subject-preview": "Предпросмотр темы/заголовка:",
        "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
        "blockedtitle": "Участник заблокирован",
-       "blockedtext": "<strong>Ваша учётная запись или IP-адрес заблокированы.</strong>\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «<em>$2</em>».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
-       "autoblockedtext": "Ваш IP-адрес автоматически заблокирован в связи с тем, что он ранее использовался кем-то из участников, заблокированных {{GENDER:$4|участником|участницей}} $1. \nБыла указана следующая причина блокировки:\n\n: «$2».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\n\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\n\nВаш IP-адрес — $3, идентификатор блокировки — #$5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
+       "blockedtext": "<strong>Ð\92аÑ\88а Ñ\83Ñ\87Ñ\91Ñ\82наÑ\8f Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c Ð¸Ð»Ð¸ IP-адÑ\80еÑ\81 Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ\80ованÑ\8b.</strong>\n\nÐ\91локиÑ\80овка Ð¿Ñ\80оизведена Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80ом $1.\nУказана Ñ\81ледÑ\83Ñ\8eÑ\89аÑ\8f Ð¿Ñ\80иÑ\87ина: Â«<em>$2</em>».\n\n* Ð\9dаÑ\87ало Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $8\n* Ð\9eконÑ\87ание Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $6\n* Ð¦ÐµÐ»Ñ\8c Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $7\n\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81вÑ\8fзаÑ\82Ñ\8cÑ\81Ñ\8f Ñ\81 $1 Ð¸Ð»Ð¸ Ð»Ñ\8eбÑ\8bм Ð´Ñ\80Ñ\83гим [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80ом]], Ñ\87Ñ\82обÑ\8b Ð¾Ð±Ñ\81Ñ\83диÑ\82Ñ\8c Ð±Ð»Ð¾ÐºÐ¸Ñ\80овкÑ\83.\nÐ\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ð²Ñ\8b Ð½Ðµ Ñ\81можеÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\84Ñ\83нкÑ\86иÑ\8e Â«Ð¿Ð¸Ñ\81Ñ\8cмо Ñ\83Ñ\87аÑ\81Ñ\82никÑ\83», ÐµÑ\81ли Ð² Ñ\81воиÑ\85 [[Special:Preferences|пеÑ\80Ñ\81оналÑ\8cнÑ\8bÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80ойкаÑ\85]] Ð½Ðµ Ð·Ð°Ð´Ð°Ð»Ð¸ Ð¸Ð»Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ñ\82веÑ\80дили ÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bй Ð°Ð´Ñ\80еÑ\81 Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82Ñ\8b, Ð¸Ð»Ð¸ ÐµÑ\81ли Ð²Ð°Ñ\88а Ð±Ð»Ð¾ÐºÐ¸Ñ\80овка Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð·Ð°Ð¿Ñ\80еÑ\82 Ð¾Ñ\82пÑ\80авки Ð¿Ð¸Ñ\81ем Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ\8bм Ð¾Ð±Ñ\80азом.\nÐ\92аÑ\88 IP-адÑ\80еÑ\81 â\80\94 $3, Ð¸Ð´ÐµÐ½Ñ\82иÑ\84икаÑ\82оÑ\80 Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки â\80\94 $5.\nÐ\9fожалÑ\83йÑ\81Ñ\82а, Ñ\83казÑ\8bвайÑ\82е Ñ\8dÑ\82и Ñ\81ведениÑ\8f Ð² Ð»Ñ\8eбÑ\8bÑ\85 Ñ\81воиÑ\85 Ð¾Ð±Ñ\80аÑ\89ениÑ\8fÑ\85.",
+       "autoblockedtext": "Ð\92аÑ\88 IP-адÑ\80еÑ\81 Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ\80ован Ð² Ñ\81вÑ\8fзи Ñ\81 Ñ\82ем, Ñ\87Ñ\82о Ð¾Ð½ Ñ\80анее Ð¸Ñ\81полÑ\8cзовалÑ\81Ñ\8f ÐºÐµÐ¼-Ñ\82о Ð¸Ð· Ñ\83Ñ\87аÑ\81Ñ\82ников, Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñ\80ованнÑ\8bÑ\85 {{GENDER:$4|Ñ\83Ñ\87аÑ\81Ñ\82ником|Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86ей}} $1. \nÐ\91Ñ\8bла Ñ\83казана Ñ\81ледÑ\83Ñ\8eÑ\89аÑ\8f Ð¿Ñ\80иÑ\87ина Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки:\n\n: Â«$2».\n\n* Ð\9dаÑ\87ало Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $8\n* Ð\9eконÑ\87ание Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $6\n* Ð¦ÐµÐ»Ñ\8c Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки: $7\n\nÐ\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81вÑ\8fзаÑ\82Ñ\8cÑ\81Ñ\8f Ñ\81 $1 Ð¸Ð»Ð¸ Ð»Ñ\8eбÑ\8bм Ð´Ñ\80Ñ\83гим [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80ом]], Ñ\87Ñ\82обÑ\8b Ð¾Ð±Ñ\81Ñ\83диÑ\82Ñ\8c Ð±Ð»Ð¾ÐºÐ¸Ñ\80овкÑ\83.\n\nÐ\9eбÑ\80аÑ\82иÑ\82е Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, Ñ\87Ñ\82о Ð²Ñ\8b Ð½Ðµ Ñ\81можеÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\84Ñ\83нкÑ\86иÑ\8e Â«Ð¿Ð¸Ñ\81Ñ\8cмо Ñ\83Ñ\87аÑ\81Ñ\82никÑ\83», ÐµÑ\81ли Ð² Ñ\81воиÑ\85 [[Special:Preferences|пеÑ\80Ñ\81оналÑ\8cнÑ\8bÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80ойкаÑ\85]] Ð½Ðµ Ð·Ð°Ð´Ð°Ð»Ð¸ Ð¸Ð»Ð¸ Ð½Ðµ Ð¿Ð¾Ð´Ñ\82веÑ\80дили ÐºÐ¾Ñ\80Ñ\80екÑ\82нÑ\8bй Ð°Ð´Ñ\80еÑ\81 Ñ\8dлекÑ\82Ñ\80онной Ð¿Ð¾Ñ\87Ñ\82Ñ\8b, Ð¸Ð»Ð¸ ÐµÑ\81ли Ð²Ð°Ñ\88а Ð±Ð»Ð¾ÐºÐ¸Ñ\80овка Ð²ÐºÐ»Ñ\8eÑ\87аеÑ\82 Ð·Ð°Ð¿Ñ\80еÑ\82 Ð¾Ñ\82пÑ\80авки Ð¿Ð¸Ñ\81ем Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ\8bм Ð¾Ð±Ñ\80азом.\n\nÐ\92аÑ\88 IP-адÑ\80еÑ\81 â\80\94 $3, Ð¸Ð´ÐµÐ½Ñ\82иÑ\84икаÑ\82оÑ\80 Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки â\80\94 #$5.\nÐ\9fожалÑ\83йÑ\81Ñ\82а, Ñ\83казÑ\8bвайÑ\82е Ñ\8dÑ\82и Ñ\81ведениÑ\8f Ð² Ð»Ñ\8eбÑ\8bÑ\85 Ñ\81воиÑ\85 Ð¾Ð±Ñ\80аÑ\89ениÑ\8fÑ\85.",
        "systemblockedtext": "Ваше имя участника или IP-адрес были автоматически заблокированы MediaWiki.\nУказана следующая причина:\n\n:<em>$2</em>\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВаш текущий IP-адрес $3.\nПожалуйста, указывайте все эти сведения в любых своих обращениях.",
        "blockednoreason": "причина не указана",
        "whitelistedittext": "Вы должны $1 для изменения страниц.",
        "anontalkpagetext": "----\n<em>Эта страница обсуждения анонимного участника, который ещё не создал учётной записи или не использует её.</em>\nПоэтому мы вынуждены для его/её идентификации использовать цифровой IP-адрес.\nЭтот же адрес может использоваться нескольким другим участникам.\nЕсли вы анонимный участник и полагаете, что получили сообщения, адресованные не вам, пожалуйста, [[Special:CreateAccount|создайте учётную запись]] или [[Special:UserLogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими анонимными участниками.",
        "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов]\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
        "noarticletext-nopermission": "В настоящее время на этой странице нет текста.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\nили <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span> У вас нет разрешения создать данную страницу.",
-       "missing-revision": "Ð\92еÑ\80Ñ\81иÑ\8f $1 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Â«{{FULLPAGENAME}}» Ð½Ðµ Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82.\n\nЭÑ\82о Ð¾Ð±Ñ\8bÑ\87но Ð±Ñ\8bваеÑ\82, ÐµÑ\81ли Ð¿Ð¾Ñ\81ледоваÑ\82Ñ\8c Ð¿Ð¾ Ñ\83Ñ\81Ñ\82аÑ\80евÑ\88ей Ñ\81Ñ\81Ñ\8bлке Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83, ÐºÐ¾Ñ\82оÑ\80аÑ\8f Ð±Ñ\8bла Ñ\83далена.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
+       "missing-revision": "Ð\92еÑ\80Ñ\81иÑ\8f $1 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Â«{{FULLPAGENAME}}» Ð½Ðµ Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82.\n\nÐ\9eбÑ\8bÑ\87но Ñ\8dÑ\82о Ð±Ñ\8bваеÑ\82, ÐµÑ\81ли Ð¿Ñ\80оÑ\81ледоваÑ\82Ñ\8c Ð¿Ð¾ Ñ\83Ñ\81Ñ\82аÑ\80евÑ\88ей Ñ\81Ñ\81Ñ\8bлке Ð½Ð° Ñ\83далÑ\91ннÑ\83Ñ\8e Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "userpage-userdoesnotexist": "Учётной записи «<nowiki>$1</nowiki>» не существует. Убедитесь, что вы действительно желаете создать или изменить эту страницу.",
        "userpage-userdoesnotexist-view": "Не зарегистрировано учётной записи «$1».",
        "blocked-notice-logextract": "{{GENDER:$1|Этот участник|Эта участница}} в данный момент {{GENDER:$1|заблокирован|заблокирована}}.\nНиже приведена последняя запись из журнала блокировок:",
        "permissionserrorstext-withaction": "У вас нет прав на $2 по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
        "contentmodelediterror": "Вы не можете редактировать эту версию, поскольку модель её содержания — <code>$1</code>, отличающаяся от текущей модели содержания страницы — <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Внимание. Вы пытаетесь воссоздать страницу, которая ранее удалялась.'''\n\nПроверьте, действительно ли вам нужно воссоздавать эту страницу.\nНиже приведены журналы удалений и переименований этой страницы.",
-       "moveddeleted-notice": "ЭÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð±Ñ\8bла Ñ\83далена.\nÐ\94лÑ\8f Ñ\81пÑ\80авки Ð½Ð¸Ð¶Ðµ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ\8b Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89ие Ð·Ð°Ð¿Ð¸Ñ\81и Ð¸Ð· Ð¶Ñ\83Ñ\80налов Ñ\83далений Ð¸ Ð¿ÐµÑ\80еименований.",
-       "moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления и перемещения для этой страницы.",
+       "moveddeleted-notice": "ЭÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð±Ñ\8bла Ñ\83далена.\nÐ\9dиже Ð´Ð»Ñ\8f Ñ\81пÑ\80авки Ð¿Ñ\80иведенÑ\8b Ð¶Ñ\83Ñ\80налÑ\8b Ñ\83далениÑ\8f, Ð·Ð°Ñ\89иÑ\82Ñ\8b Ð¸ Ð¿ÐµÑ\80емеÑ\89ениÑ\8f Ð´Ð»Ñ\8f Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b.",
+       "moveddeleted-notice-recent": "К сожалению, эта страница была недавно удалена (в течение последних 24 часов).\nНиже для справки приведены журналы удаления, защиты и перемещения для этой страницы.",
        "log-fulllog": "Просмотреть журнал целиком",
        "edit-hook-aborted": "Правка отменена процедурой-перехватчиком.\nДополнительных разъяснений не приведено.",
        "edit-gone-missing": "Невозможно обновить страницу.\nВероятно, она была удалена.",
        "prefs-editwatchlist-clear": "Очистить список наблюдения",
        "prefs-watchlist-days": "Количество дней:",
        "prefs-watchlist-days-max": "Не более $1 {{PLURAL:$1|дня|дней}}",
-       "prefs-watchlist-edits": "Максимальное количество правок, отображаемых в расширенном списке наблюдения:",
+       "prefs-watchlist-edits": "Максимальное количество правок для показа в списке наблюдения:",
        "prefs-watchlist-edits-max": "Наибольшее значение: 1000",
        "prefs-watchlist-token": "Токен списка наблюдения:",
        "prefs-misc": "Другие настройки",
        "recentchangescount": "Количество правок, отображаемое по умолчанию:",
        "prefs-help-recentchangescount": "Включает свежие правки, истории страниц, журналы.",
        "prefs-help-watchlist-token2": "Это секретный ключ для веб-канала вашего списка наблюдений.\nЛюбой, кто знает его, сможет читать ваш список наблюдения, поэтому не сообщайте его другим. [[Special:ResetTokens|Нажмите здесь, если вам нужно сбросить его]].",
-       "savedprefs": "Ð\92аÑ\88и Ð½астройки сохранены.",
+       "savedprefs": "Ð\9dастройки сохранены.",
        "savedrights": "Группы пользователя {{GENDER:$1|$1}} были сохранены.",
        "timezonelegend": "Часовой пояс:",
        "localtime": "Местное время:",
        "prefs-custom-css": "Собственный CSS",
        "prefs-custom-js": "Собственный JS",
        "prefs-common-css-js": "Общие CSS/JS для всех тем оформления:",
-       "prefs-reset-intro": "Эта страница может быть использована для сброса ваших настроек на настройки по умолчанию.\nПодтвердив данное действие, вы не сможете его отменить.",
+       "prefs-reset-intro": "Эта страница может быть использована для сброса ваших настроек на стандартные.\nУчтите, что это действие невозможно отменить.",
        "prefs-emailconfirm-label": "Подтверждение электронной почты:",
        "youremail": "Электронная почта:",
        "username": "{{GENDER:$1|Имя участника|Имя участницы}}:",
        "prefs-help-signature": "Комментарии на страницах обсуждений должны быть подписаны посредством добавления символов «<nowiki>~~~~</nowiki>», которые будут преобразованы в вашу подпись и время.",
        "badsig": "Неверная подпись. Проверьте корректность HTML-тегов.",
        "badsiglength": "Слишком длинная подпись.\nПодпись не должна превышать $1 {{PLURAL:$1|символа|символа|символов}}.",
-       "yourgender": "Ð\9aакое Ð¾Ð¿Ð¸Ñ\81ание Ð²Ð°Ð¼ Ð±Ð¾Ð»ÐµÐµ Ð¿Ð¾Ð´Ñ\85одиÑ\82?",
+       "yourgender": "Ð\9aакое Ð¾Ð¿Ð¸Ñ\81ание Ð¿Ð¾Ð´Ñ\85одиÑ\82 Ð´Ð»Ñ\8f Ð²Ð°Ñ\81 Ð±Ð¾Ð»Ñ\8cÑ\88е Ð²Ñ\81его?",
        "gender-unknown": "При упоминании вас, программное обеспечение будет по возможности использовать гендерно-нейтральные слова",
        "gender-male": "Он редактирует страницы вики",
        "gender-female": "Онa редактирует страницы вики",
-       "prefs-help-gender": "ЭÑ\82оÑ\82 Ð¿Ð°Ñ\80амеÑ\82Ñ\80 Ð·Ð°Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð½ÐµÐ¾Ð±Ñ\8fзаÑ\82елÑ\8cно.\nÐ\94вижок Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82 Ñ\8dÑ\82о Ð·Ð½Ð°Ñ\87ение, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
+       "prefs-help-gender": "ЭÑ\82оÑ\82 Ð¿Ð°Ñ\80амеÑ\82Ñ\80 Ð·Ð°Ð´Ð°Ð²Ð°Ñ\82Ñ\8c Ð½ÐµÐ¾Ð±Ñ\8fзаÑ\82елÑ\8cно.\nÐ\97наÑ\87ение Ð±Ñ\83деÑ\82 Ð¸Ñ\81полÑ\8cзовано Ð´Ð»Ñ\8f Ñ\82ого, чтобы обращаться к вам и упоминать вас в правильном грамматическом роде.\nЭта информация будет общедоступной.",
        "email": "Электронная почта",
        "prefs-help-realname": "Вводить настоящее имя необязательно.\nЕсли вы заполните его, оно может быть использовано для указания авторства ваших работ.",
        "prefs-help-email": "Адрес почты не обязателен, но это единственный способ восстановить забытый пароль.",
        "prefs-displaywatchlist": "Настройки отображения",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разница версий",
-       "prefs-help-prefershttps": "ЭÑ\82а Ð½Ð°Ñ\81Ñ\82Ñ\80ойка Ð±Ñ\83деÑ\82 Ð¿Ñ\80именена Ð¿Ð¾Ñ\81ле Ñ\81ледÑ\83Ñ\8eÑ\89его Ð¿Ñ\80едÑ\81Ñ\82авлениÑ\8f Ñ\81иÑ\81Ñ\82еме.",
-       "prefswarning-warning": "Вы внесли в свои настройки изменения, которые ещё не были сохранены.\nЕсли вы покинете эту страницу, не нажав «$1», настройки не будут обновлены.",
+       "prefs-help-prefershttps": "ЭÑ\82оÑ\82 Ð¿Ð°Ñ\80амеÑ\82Ñ\80 Ð±Ñ\83деÑ\82 Ð¿Ñ\80именÑ\91н Ñ\82олÑ\8cко Ð¿Ð¾Ñ\81ле Ð¿ÐµÑ\80езаÑ\85ода Ð½Ð° Ñ\81айÑ\82.",
+       "prefswarning-warning": "Вы внесли в свои настройки изменения, которые ещё не были сохранены.\nЕсли вы покинете эту страницу, не нажав «$1», то настройки обновлены не будут.",
        "prefs-tabs-navigation-hint": "Совет: Вы можете использовать клавиши стрелок влево и вправо для перехода между вкладками в списке вкладок.",
        "userrights": "Права участника",
        "userrights-lookup-user": "Выбор участника",
        "right-editmywatchlist": "редактирование своего списка наблюдения",
        "right-viewmyprivateinfo": "просмотр собственных личных данных (например, адрес электронной почты, настоящее имя)",
        "right-editmyprivateinfo": "правка собственных личных данных (например, адрес электронной почты, настоящее имя)",
-       "right-editmyoptions": "Ñ\80едакÑ\82иÑ\80ование Ñ\81обÑ\81Ñ\82веннÑ\8bÑ\85 Ð¿Ñ\80едпоÑ\87Ñ\82ений",
+       "right-editmyoptions": "Ñ\80едакÑ\82иÑ\80ование Ñ\81обÑ\81Ñ\82веннÑ\8bÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80оек",
        "right-rollback": "быстрый откат правок последнего участника",
        "right-markbotedits": "отметка откатываемых правок как правок бота",
        "right-noratelimit": "обход ограничений скорости",
        "grant-delete": "Удаление страниц, правок и записей журнала",
        "grant-editinterface": "Правка пространства имён MediaWiki и пользовательских CSS/JavaScript",
        "grant-editmycssjs": "Редактирование ваших пользовательских CSS/JavaScript",
-       "grant-editmyoptions": "РедакÑ\82иÑ\80ование Ð²Ð°Ñ\88иÑ\85 Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8cÑ\81киÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80оек",
+       "grant-editmyoptions": "Редактирование ваших настроек",
        "grant-editmywatchlist": "Редактирование вашего списка наблюдения",
        "grant-editpage": "Редактирование существующих страниц",
        "grant-editprotected": "Редактирование защищённых страниц",
        "recentchanges-submit": "Показать",
        "rcfilters-legend-heading": "<strong>Список сокращений:</strong>",
        "rcfilters-other-review-tools": "<strong>Другие инструменты проверки</strong>",
+       "rcfilters-group-results-by-page": "Группировать результаты по странице",
        "rcfilters-grouping-title": "Группировка",
        "rcfilters-activefilters": "Активные фильтры",
        "rcfilters-advancedfilters": "Расширенные фильтры",
        "rcfilters-savedqueries-add-new-title": "Сохранить текущие настройки фильтра",
        "rcfilters-restore-default-filters": "Восстановить фильтры по умолчанию",
        "rcfilters-clear-all-filters": "Очистить все фильтры",
-       "rcfilters-show-new-changes": "Показать новые изменения",
+       "rcfilters-show-new-changes": "Последние изменения",
        "rcfilters-previous-changes-label": "Ранее просмотренные изменения",
        "rcfilters-search-placeholder": "Последние изменения фильтров (просмотрите или начните вводить)",
        "rcfilters-invalid-filter": "Недопустимый фильтр",
        "rcfilters-filter-minor-description": "Правки, которые автор пометил как малые.",
        "rcfilters-filter-major-label": "Обычные правки",
        "rcfilters-filter-major-description": "Правки, не помеченные как малые.",
-       "rcfilters-filtergroup-watchlist": "Страницы в Списке наблюдения",
-       "rcfilters-filter-watchlist-watched-label": "В Списке наблюдения",
+       "rcfilters-filtergroup-watchlist": "Страницы в списке наблюдения",
+       "rcfilters-filter-watchlist-watched-label": "В списке наблюдения",
        "rcfilters-filter-watchlist-watched-description": "Изменения страниц в вашем Списке наблюдения.",
-       "rcfilters-filter-watchlist-watchednew-label": "Новые изменения в Списке наблюдения",
+       "rcfilters-filter-watchlist-watchednew-label": "Новые изменения в списке наблюдения",
        "rcfilters-filter-watchlist-watchednew-description": "Правки на страницах из вашего списка наблюдения, которые вы не просмотрели с их совершения.",
-       "rcfilters-filter-watchlist-notwatched-label": "Нет в Списке наблюдения",
+       "rcfilters-filter-watchlist-notwatched-label": "Нет в списке наблюдения",
        "rcfilters-filter-watchlist-notwatched-description": "Всё, исключая правки со страниц из вашего списка наблюдения.",
        "rcfilters-filtergroup-changetype": "Тип изменения",
        "rcfilters-filter-pageedits-label": "Правки страницы",
        "rcfilters-view-tags-tooltip": "Результаты фильтра, использующего метки правок",
        "rcfilters-view-return-to-default-tooltip": "Вернуться в главное меню фильтров",
        "rcfilters-liveupdates-button": "Обновлять автоматически",
+       "rcfilters-liveupdates-button-title-on": "Отключить автоматические обновления",
+       "rcfilters-liveupdates-button-title-off": "Показывать новые изменения сразу после их появления",
        "rcnotefrom": "Ниже {{PLURAL:$5|указано изменение|перечислены изменения}} с <strong>$3, $4</strong> (показано не более <strong>$1</strong>).",
        "rclistfromreset": "Сбросить выбор даты",
        "rclistfrom": "Показать изменения с $3 $2.",
        "watching": "Добавление в список наблюдения…",
        "unwatching": "Удаление из списка наблюдения…",
        "watcherrortext": "Произошла ошибка при изменении настройки наблюдения для «$1».",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Отметить все страницы как просмотренные",
        "enotif_impersonal_salutation": "Участник {{grammar:genitive|{{SITENAME}}}}",
        "enotif_subject_deleted": "Страница проекта «{{SITENAME}}» с именем «$1» была удалена {{gender:$2|участником|участницей}} $2",
        "deletereasonotherlist": "Другая причина",
        "deletereason-dropdown": "* Типовые причины удаления\n** Спам\n** Вандализм\n** Нарушение авторских прав\n** По запросу автора\n** Неработающее перенаправление",
        "delete-edit-reasonlist": "Править список причин",
-       "delete-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nУдаление таких страниц было запрещено во избежание нарушений в работе сайта «{{SITENAME}}».",
-       "delete-warning-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nЕё удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;\nдействуйте с осторожностью.",
+       "delete-toobig": "У этой страницы очень длинная история изменений (более $1 {{PLURAL:$1|версии|версий}}).\nУдаление таких страниц было запрещено во избежание нарушений в работе сайта «{{SITENAME}}».",
+       "delete-warning-toobig": "У этой страницы очень длинная история изменений (более $1 {{PLURAL:$1|версии|версий}}).\nЕё удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;\nдействуйте с осторожностью.",
        "deleteprotected": "Вы не можете удалить эту страницу, поскольку она защищена.",
        "deleting-backlinks-warning": "<strong>Предупреждение:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
        "deleting-subpages-warning": "<strong>Предупреждение:</strong> У страницы, которую вы собираетесь удалить, имеется [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1 подстраница|$1 подстраницы|$1 подстраниц|51=более 50 подстраниц}}]].",
        "modifiedarticleprotection": "изменён уровень защиты страницы «[[$1]]»",
        "unprotectedarticle": "снята защита с «[[$1]]»",
        "movedarticleprotection": "перенёс настройки защиты с «[[$2]]» на «[[$1]]»",
-       "protectedarticle-comment": "Защитил{{GENDER:$2||а}} «[[$1]]»",
-       "modifiedarticleprotection-comment": "Изменил{{GENDER:$2||а}} уровень защиты «[[$1]]»",
+       "protectedarticle-comment": "Защитил{{GENDER:$2||а}} [[$1]]",
+       "modifiedarticleprotection-comment": "Изменил{{GENDER:$2||а}} уровень защиты [[$1]]",
        "unprotectedarticle-comment": "Cнял{{GENDER:$2||а}} защиту с «[[$1]]»",
        "protect-title": "Установка уровня защиты для «$1»",
        "protect-title-notallowed": "Просмотр уровня защиты «$1»",
        "ipbnounblockself": "Вы не можете разблокировать самого себя",
        "lockdb": "Сделать базу данных доступной только для чтения",
        "unlockdb": "Восстановить возможность записи в базу данных",
-       "lockdbtext": "Ð\91локиÑ\80овка Ð±Ð°Ð·Ñ\8b Ð´Ð°Ð½Ð½Ñ\8bÑ\85 Ð¿Ñ\80иоÑ\81Ñ\82ановиÑ\82 Ð´Ð»Ñ\8f Ð²Ñ\81еÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82Ñ\8c Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b, Ð¸Ð·Ð¼ÐµÐ½Ñ\8fÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойки,\nизменÑ\8fÑ\82Ñ\8c Ñ\81пиÑ\81ки Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f Ð¸ Ð¿Ñ\80оизводиÑ\82Ñ\8c Ð´Ñ\80Ñ\83гие Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f, Ñ\82Ñ\80ебÑ\83Ñ\8eÑ\89ие Ð´Ð¾Ñ\81Ñ\82Ñ\83па Ðº Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ\8bÑ\85.\nÐ\9fожалÑ\83йÑ\81Ñ\82а, Ð¿Ð¾Ð´Ñ\82веÑ\80диÑ\82е, Ñ\87Ñ\82о Ñ\8dÑ\82о â\80\94 Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñ\82о, Ñ\87Ñ\82о Ð²Ñ\8b Ñ\85оÑ\82иÑ\82е сделать, и что вы снимете блокировку как только закончите\nпроцедуру обслуживания базы данных.",
+       "lockdbtext": "Ð\91локиÑ\80овка Ð±Ð°Ð·Ñ\8b Ð´Ð°Ð½Ð½Ñ\8bÑ\85 Ð¿Ñ\80иоÑ\81Ñ\82ановиÑ\82 Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82Ñ\8c Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b, Ð¸Ð·Ð¼ÐµÐ½Ñ\8fÑ\82Ñ\8c Ð½Ð°Ñ\81Ñ\82Ñ\80ойки,\nÑ\81пиÑ\81ки Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f Ð¸ Ð¿Ñ\80оизводиÑ\82Ñ\8c Ð´Ñ\80Ñ\83гие Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f, Ñ\82Ñ\80ебÑ\83Ñ\8eÑ\89ие Ð´Ð¾Ñ\81Ñ\82Ñ\83па Ðº Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ\8bÑ\85 Ð´Ð»Ñ\8f Ð²Ñ\81еÑ\85 Ñ\83Ñ\87аÑ\81Ñ\82ников.\nÐ\9fожалÑ\83йÑ\81Ñ\82а, Ð¿Ð¾Ð´Ñ\82веÑ\80диÑ\82е, Ñ\87Ñ\82о Ð²Ñ\8b Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\82елÑ\8cно Ñ\85оÑ\82иÑ\82е Ñ\8dÑ\82о сделать, и что вы снимете блокировку как только закончите\nпроцедуру обслуживания базы данных.",
        "unlockdbtext": "Разблокирование базы данных восстановит для всех участников\nвозможность редактировать страницы, изменять настройки, изменять списки наблюдения и производить\nдругие действия, требующие доступа к базе данных.\nПожалуйста, подтвердите, что вы намерены это сделать.",
        "lockconfirm": "Да, я действительно хочу заблокировать базу данных на запись.",
        "unlockconfirm": "Да, я действительно хочу снять блокировку базы данных.",
        "import-nonewrevisions": "Никакие правки не были импортированы (все уже либо были обработаны, либо пропущены из-за ошибок).",
        "xml-error-string": "$1 в строке $2, позиции $3 (байт $4): $5",
        "import-upload": "Загрузить XML-данные",
-       "import-token-mismatch": "Потеряны данные сеанса.\n\nВозможно, вы завершили сеанс работы. <strong>Пожалуйста, убедитесь, что вы всё ещё авторизованы, и попробуйте снова.</strong>\nЕсли это всё равно не помогло, попробуйте [[Special:UserLogout|выйти из системы]] и войти заново, а также проверьте, что ваш браузер позволяет принимать cookies с этого сайта.",
+       "import-token-mismatch": "Потеряны данные сеанса.\n\nВозможно, вы завершили сеанс работы. '''Пожалуйста, убедитесь, что вы всё ещё авторизованы, и попробуйте снова.'''\nЕсли это всё равно не помогло, попробуйте [[Special:UserLogout|выйти из системы]] и войти заново, а также проверьте, что ваш браузер позволяет принимать cookies с этого сайта.",
        "import-invalid-interwiki": "Невозможно импортировать из указанной вики.",
        "import-error-edit": "Страница «$1» не была импортирована, так как вам не разрешено её редактировать.",
        "import-error-create": "Страница «$1» не была импортирована, так как вам не разрешено её создавать.",
        "compare-invalid-title": "Указанное вами название недопустимо.",
        "compare-title-not-exists": "Не существует указанного вами названия.",
        "compare-revision-not-exists": "Указанной вами версии не существует.",
+       "diff-form": "Различия",
+       "diff-form-oldid": "Старый идентификатор версии (необязательно)",
+       "diff-form-submit": "Показать отличия",
+       "permanentlink": "Постоянная ссылка",
+       "permanentlink-revid": "Идентификатор правки",
+       "permanentlink-submit": "Перейти к версии",
        "dberr-problems": "Извините! На данном сайте возникли технические трудности.",
        "dberr-again": "Попробуйте обновить страницу через несколько минут.",
        "dberr-info": "(Нет доступа к базе данных: $1)",
        "authmanager-provider-password": "Аутентификация на основе пароля",
        "authmanager-provider-password-domain": "Проверка подлинности на основе пароля и домена",
        "authmanager-provider-temporarypassword": "Временный пароль",
-       "authprovider-confirmlink-message": "Ð\9dа Ð¾Ñ\81новании Ð²Ð°Ñ\88иÑ\85 Ð¿Ð¾Ñ\81ледниÑ\85 Ð¿Ð¾Ð¿Ñ\8bÑ\82кок Ð²Ñ\85ода, Ñ\83Ñ\87Ñ\91Ñ\82нÑ\8bе Ð·Ð°Ð¿Ð¸Ñ\81и Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð±Ñ\8bÑ\82Ñ\8c Ñ\81вÑ\8fзанÑ\8b Ñ\81 Ð²Ð°Ñ\88ей Ñ\83Ñ\87Ñ\91Ñ\82ной Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8cÑ\8e Ð² Ð²Ð¸ÐºÐ¸. Ð\98Ñ\85 Ñ\81вÑ\8fзÑ\8bвание Ð´Ð°Ñ\91Ñ\82 Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82Ñ\8c Ð²Ñ\85ода Ñ\87еÑ\80ез Ñ\8dÑ\82и Ñ\83Ñ\87Ñ\91Ñ\82нÑ\8bе Ð·Ð°Ð¿Ð¸Ñ\81и. Ð\9fожалÑ\83йÑ\81Ñ\82а, Ð²Ñ\8bбеÑ\80иÑ\82е, ÐºÐ°ÐºÐ¸Ðµ Ð¸Ð· Ð½Ð¸Ñ\85 Ð´Ð¾Ð»Ð¶Ð½Ñ\8b Ð±Ñ\8bÑ\82Ñ\8c Ñ\81вÑ\8fзанÑ\8b Ð¼ÐµÐ¶Ð´Ñ\83 Ñ\81обой.",
+       "authprovider-confirmlink-message": "На основании ваших последних попыток входа, учётные записи могут быть связаны с вашей учётной записью в вики. Их связывание даёт возможность входа через эти учётные записи. Пожалуйста, выберите, какие из них должны быть связаны между собой.",
        "authprovider-confirmlink-option": "$1 ($2)",
        "authprovider-confirmlink-request-label": "Учётные записи, которые должны быть связаны",
        "authprovider-confirmlink-success-line": "$1: успешно связан.",
index 7875342..fab6663 100644 (file)
@@ -30,6 +30,7 @@
        "tog-hideminor": "सद्योजातानां परिवर्तनानां लघूनि सम्पादनानि गोप्यन्ताम्",
        "tog-hidepatrolled": "सद्योजातानां परिवर्तनानां परिशीलितानि सम्पादनानि गोप्यन्ताम्",
        "tog-newpageshidepatrolled": "नूतनपृष्ठानाम् आवलेः परिशीलितानि पृष्ठानि गोप्यन्त्ताम्",
+       "tog-hidecategorization": "पृष्ठानां श्रेणीविभाजनं न दर्श्यताम् ।",
        "tog-extendwatchlist": "न केवलं सद्योजातानि अपि तु निरीक्षासूचेः सर्वाणि परिवर्तनानि दृश्यन्ताम्",
        "tog-usenewrc": "सद्यः परिवर्तनावल्यां, निरीक्षासूचौ च पृष्ठानि विभागानुसारं प्रदर्श्यन्ताम् (जावा-लिपिः अपेक्ष्यते)",
        "tog-numberheadings": "शीर्षकाणि स्वयमेव यथाक्रमं करोतु",
@@ -40,6 +41,7 @@
        "tog-watchdefault": "मया सम्पादितानि पृष्ठानि मम निरीक्षासूचौ योज्यन्ताम्।",
        "tog-watchmoves": "मया चालितानि पृष्ठानि मम निरीक्षासूचौ योज्यन्ताम्।",
        "tog-watchdeletion": "मया अपाकृतानि पृष्ठानि मम निरीक्षासूचौ योज्यन्ताम्।",
+       "tog-watchuploads": "मया आरोपिताः नूतनसञ्चिकाः मम निरीक्षासूच्यां योजनीयाः ।",
        "tog-watchrollback": "मया प्रत्यापन्नानि (rollback) पृष्ठानि मम निरीक्षासूचौ योज्यताम् ।",
        "tog-minordefault": "मम सर्वाणि सम्पादनानि लघुत्वेन प्रदर्श्यन्ताम् ।",
        "tog-previewontop": "सम्पादनात् पूर्वं प्राग्दृश्यं दर्श्यताम् ।",
        "anontalk": "सम्भाषणम्",
        "navigation": "सञ्चरणम्",
        "and": "&#32;तथा च",
-       "qbfind": "अन्विष्यताम्",
-       "qbbrowse": "अन्विष्यताम्",
-       "qbedit": "सम्पाद्यताम्",
-       "qbpageoptions": "इदं पृष्ठम्",
-       "qbmyoptions": "मम पृष्ठानि",
        "faq": "सामान्यजिज्ञासाः (FAQ)",
-       "faqpage": "Project:सामान्यजिज्ञासाः(FAQ)",
        "actions": "क्रियाः",
        "namespaces": "नामाकाशाः",
        "variants": "पाठभेदाः",
        "edit-local": "स्थानीयवर्णनं सम्पाद्यताम्",
        "create": "सृज्यताम्",
        "create-local": "स्थानीयवर्णनं योज्यताम्",
-       "editthispage": "इदं पृष्ठं सम्पाद्यताम्",
-       "create-this-page": "इदं पृष्ठं सृज्यताम्",
        "delete": "अपाक्रियताम्",
-       "deletethispage": "इदं पृष्ठम् अपाक्रियताम्",
-       "undeletethispage": "इदं पृष्ठं न अपाक्रियताम्",
        "undelete_short": "{{PLURAL:$1|एकं सम्पादनं|$1 सम्पादनानि}} न अपाकरोतु",
        "viewdeleted_short": "{{PLURAL:$1|एकम् अपाकृतं सम्पादनम्  |$1 अपाकृतानि सम्पादनानि}} दृश्यताम्",
        "protect": "संरक्ष्यताम्",
        "protect_change": "परिवर्त्यताम्",
-       "protectthispage": "इदं पृष्ठं संरक्ष्यताम्",
        "unprotect": "संरक्षणं परिवर्तयतु",
-       "unprotectthispage": "अस्य पृष्ठस्य सुरक्षां परिवर्तयतु ।",
        "newpage": "नवीनपृष्ठम्",
-       "talkpage": "अस्य पृष्ठस्य विषये सम्भाषमणं क्रियताम्",
        "talkpagelinktext": "सम्भाषणम्",
        "specialpage": "विशिष्टपृष्ठम्",
        "personaltools": "वैयक्तिकोपकरणानि",
-       "articlepage": "लेखः दृश्यताम्",
        "talk": "सम्भाषणम्",
        "views": "मतानि",
        "toolbox": "उपकरणानि",
-       "userpage": "योजकपृष्ठं दृश्यताम्",
-       "projectpage": "प्रकल्पपृष्ठं दृश्यताम्",
        "imagepage": "सञ्चिकापृष्ठं दृश्यताम्",
        "mediawikipage": "सन्देशपृष्ठं दृश्यताम्।",
        "templatepage": "फलकपृष्ठं दृश्यताम्",
        "fileduplicatesearch-noresults": "\"$1\" इति नाम्ना सञ्चिका न दृष्टा ।",
        "specialpages": "विशिष्टपृष्ठानि",
        "specialpages-note-top": "तालिका",
-       "specialpages-note": "* विशिष्टपृष्ठानि । \n* <span class=\"mw-specialpagerestricted\"> प्रतिबन्धितानि विशिष्टपृष्ठानि ।</span>",
        "specialpages-group-maintenance": "निर्वहणवृत्तानि ।",
        "specialpages-group-other": "अन्यविशेषपुटानि ।",
        "specialpages-group-login": "प्रविश्यताम् / लेखा सृज्यताम्",
index 907e6c7..b92fbee 100644 (file)
@@ -35,7 +35,7 @@
        "tog-shownumberswatching": "ڏسندڙ يوزرس جو انگ ڏيکاريو",
        "tog-oldsig": "توھان جو موجوده دستخط:",
        "tog-fancysig": "صحيح کي وڪيٽيڪسٽ سمجھو (ڪنھن خوڪار ڳنڍڻي کانسواءِ)",
-       "tog-uselivepreview": "سÚ\8cÙ\8a Ø³Ù\86ئÙ\8aÙ\86 Ù¾Ù\8aØ´ Ù\86گاھÛ\81 Ø§Ø³ØªØ¹Ù\85اÙ\84 Úªريو",
+       "tog-uselivepreview": "صÙ\81Ø­Ù\8a Ú©Ù\8a Ù»Ù\8aھر Ø§ØªØ§Ø±Ú» Ø³Ù\88اءÙ\90 Ù¾Ù\8aØ´ Ù\86گاھ Ú\8fÙ\8aکاريو",
        "tog-watchlisthideown": "نظر ۾ فھرست مان منھنجون ترميمون لڪايو",
        "tog-watchlisthidebots": "نظر ۾ فھرست تان بوٽ جون ترميمون لڪايو",
        "tog-watchlisthideminor": "نظر ۾ فھرست تان معمولي ترميمون لڪايو",
        "permissionserrorstext": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي اهو ڪرڻ جي اجازت حاصل ڪانهي.",
        "permissionserrorstext-withaction": "ھيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توھان کي $2 جي اجازت ڪانھي.",
        "recreate-moveddeleted-warn": "'''خبردار: توھان اھڙو صفحو نئين سِر سرجي رھيا آھيو جيڪو اڳ ڊاٺو ويو آھي.'''\n\nبھتر ٿيندو تہ توھان سوچي وٺو تہ ڇا ان صفحي کي سنوارڻ چڱو ٿيندو.\nتوهان جي سھولت خاطر ھتي ان صفحي جو ڊاٺ لاگ ميسر ڪجي ٿو:",
-       "moveddeleted-notice": "ھيءُ صفحو ڊھي چڪو آهي. \nحوالي طور ڊاٺ ۽ چور لاگ ھيٺ ڏجن ٿا.",
-       "moveddeleted-notice-recent": "معاف ڪندا، هيءُ صفحو تازو ئي ڊاٺو ويو آهي (پوين 24 ڪلاڪن اندر). حوالي طور ڊاٺ ۽ چور لاگ هيٺ پيش ڪجي ٿو:",
+       "moveddeleted-notice": "ھيءُ صفحو ڊھي چڪو آهي. \nحوالي طور صفحي جا ڊاھ، حفاظت ۽ چورڻ لاگ ھيٺ ڏنل آھن.",
+       "moveddeleted-notice-recent": "معاف ڪجو، هيءُ صفحو تازو ئي ڊاٺو ويو ھو (پوين 24 ڪلاڪن اندر). حوالي طور صفحي جا ڊاھ، حفاظت ۽ چورڻ لاگ ھيٺ ڏنل آھن.",
        "log-fulllog": "پُورو لاگ ڏسو",
        "edit-conflict": "سنوار تڪرار",
        "postedit-confirmation-created": "هيءُ صفحو سرجي چڪو آهي.",
index 795debd..575a1bd 100644 (file)
        "watchthis": "ⴹⴼⵓⵔ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "savearticle": "Ẓṛig d tḥbut",
        "preview": "Iẓṛi amzwaru",
-       "showpreview": "Iẓṛi amzwaru",
-       "showdiff": "Mel imbddln lli ifttun",
+       "showpreview": "ⵎⵍ ⵜⴰⵎⵓⵖⵍⵉ",
+       "showdiff": "ⵎⵍ ⵉⵙⵏⴼⵉⵍⵏ",
        "anoneditwarning": "Han  ''' ur ttuyssant ''' rad ibayn IP nk ɣ umzrut n tasna yad, ur sul  iḥba tamagit nk",
        "anonpreviewwarning": "ur ittuyssan mat tgit. Iɣ tgdl tawuri nk, tansa nk IP rad tbayn ɣ umzruy n imbdln n tasna yad.",
        "missingsummary": "'''Adakt nskti :''' ur ta tfit awal imun n imbddln nk.\nIɣ tklikkit tiklit yaḍn f tjrrayt « $1 », aẓṛig rad ittuyskar blla tsnt",
        "nextrevision": "Amẓr amaynu",
        "currentrevisionlink": "Amcggr amggaṛu",
        "cur": "ⵎⵔⵏ",
-       "next": "Imal (wad yuckan)",
+       "next": "ⵓⴹⴼⵉⵔ",
        "last": "Amzwaru",
        "page_first": "walli izwarn",
        "page_last": "walli igran",
        "nextn": "Tallid yuckan {{PLURAL:$1|$1}}",
        "prevn-title": "$1 {{PLURAL:$1|Askfa amzaru|Iskfatn imzwura}}",
        "nextn-title": "$1 {{PLURAL:$1|ⵜⵢⴰⴼⵓⵜ ⵜⵓⴹⴼⵉⵔⵜ|ⵜⵢⴰⴼⵓⵜⵉⵏ ⵜⵓⴹⴼⵉⵔⵉⵏ}}",
-       "shown-title": "Fsr $1 tayafut{{PLURAL:$1||s}} s tasna",
+       "shown-title": "ⵎⵍ $1 {{PLURAL:$1|ⵜⵢⴰⴼⵓⵜ|ⵜⵢⴰⴼⵓⵜⵉⵏ}} ⵉ ⵜⴰⵙⵏⴰ",
        "viewprevnext": "Mel ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "\"'Tlla yat tasna lli ilan assaɣ « [[:$1]] » ɣ wiki yad",
        "searchmenu-new": "<strong>ⵙⵏⵓⵍⴼⵓ ⵜⴰⵙⵏⴰ \"[[:$1]]\" ⴳ ⵓⵡⵉⴽⵉ ⴰⴷ!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
        "rcfilters-savedqueries-new-name-label": "ⵉⵙⵎ",
        "rcfilters-filterlist-whatsthis": "ⵎⴰⵜⵜⴰ ⵓⵢⴰ?",
        "rcfilters-filter-bots-label": "ⴱⵓⵜ",
-       "rcnotefrom": "Had imbddln lli ittuyskarn z '''$2''' ('''$1''' ɣ uggar).",
-       "rclistfrom": "Mel imbdeltn imaynutn z $3 $2",
+       "rcnotefrom": "ⴷⴷⴰⵡ ⴰⵙ {{PLURAL:$5|ⴰⵙⵏⴼⵍ|ⵉⵙⵏⴼⵉⵍⵏ}} ⵣⵖ <strong>$3, $4</strong> (ⴰⵔ <strong>$1</strong> ⴰⴷ ⵉⴱⴰⵢⵏⴻⵏ ⵙ ⵉⴳⴳⵓⵜ).",
+       "rclistfrom": "ⵎⵍ ⵉⵙⵏⴼⵉⵍⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ ⵣⵖ $3 ⵖ $2",
        "rcshowhideminor": "$1 ⵉⵙⵏⴼⵉⵍⵏ ⵓⵎⵥⵉⵢⵏ",
        "rcshowhideminor-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhidebots": "$1 ⵉⵔⵓⴱⵓⵜⵏ",
+       "rcshowhidebots-show": "ⵎⵍ",
        "rcshowhidebots-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhideliu": "$1 ⵉⵙⵎⵔⴰⵙⵏ ⵣⵎⵎⴻⵎⵏⵉⵏ",
+       "rcshowhideliu-show": "ⵎⵍ",
        "rcshowhideliu-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhideanons": "$1 midn ur ttuyssan nin",
+       "rcshowhideanons-show": "ⵎⵍ",
        "rcshowhideanons-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhidepatr": "$1 ⵉⵙⵏⴼⵉⵍⵏ ⵜⵜⵡⴰⵃⴹⴰⵏⵉⵏ",
        "rcshowhidepatr-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhidemine": "$1 ⵉⵙⵏⴼⵉⵍⵏ ⵉⵏⵓ",
+       "rcshowhidemine-show": "ⵎⵍ",
        "rcshowhidemine-hide": "ⵙⵙⵏⵜⵍ",
        "rcshowhidecategorization-hide": "ⵙⵙⵏⵜⵍ",
        "rclinks": "Ml id  $1 n imbddltn immgura li ittuyskarn n id $2 ussan ad gguranin",
        "diff": "ⴰⵎⵣⴰⵔⴰⵢ",
        "hist": "ⴰⵎⵣⵔⵓⵢ",
        "hide": "ⵙⵙⵏⵜⵍ",
-       "show": "Mel",
+       "show": "ⵎⵍ",
        "minoreditletter": "ⵎⵥⵢ",
        "newpageletter": "ⵎⵢⵏ",
        "boteditletter": "ⴱ",
        "recentchangeslinked-title": "ⵉⵙⵏⴼⵉⵍⵏ ⵇⵇⵏⵏⵉⵏ ⵙ \"$1\"",
        "recentchangeslinked-summary": "Ɣid umuɣ iymbddeln li ittyskarnin tigira yad ɣ tisniwin li ittuyzdayn d kra n tasna (ulla i igmamn n kra taggayt ittuyzlayn). Tisniwin  ɣ [[Special:Watchlist|Umuɣ n tisniwin li ttsaggat]].",
        "recentchangeslinked-page": "ⵉⵙⵎ ⵏ ⵜⴰⵙⵏⴰ:",
-       "recentchangeslinked-to": "Afficher les changements vers les pages liées au lieu de la page donnée\nMel imbddeln z tisniwin li ittuyzdayni bla tasna li trit.",
+       "recentchangeslinked-to": "ⵎⵍ ⵉⵙⵏⴼⵉⵍⵏ ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵇⵇⵏⵏⵉⵏ ⵙ ⵜⴰⵙⵏⴰ instead",
        "upload": "ⵙⴽⵜⵔ ⴽⵔⴰ ⵏ ⵓⴼⴰⵢⵍⵓ",
        "uploadbtn": "ⵙⴽⵜⵔ ⴰⴼⴰⵢⵍⵓ",
        "reuploaddesc": "Sbidd asrbu d turrit",
        "listfiles-latestversion-no": "ⵓⵀⵓ",
        "file-anchor-link": "ⴰⴼⴰⵢⵍⵓ",
        "filehist": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵓⴼⴰⵢⵍⵓ",
-       "filehist-help": "Adr i asakud/tizi bac attżrt manik as izwar usddaw ɣ tizi yad",
+       "filehist-help": "ⴽⵍⵉⴽⵉ ⴼ ⴽⵔⴰ ⵏ ⵓⵙⴰⴽⵓⴷ/ⴰⴽⵓⴷ ⴰⴷ ⵜⵥⵔⵜ ⴰⴼⴰⵢⵍⵓ ⵎⴽⵍⵍⵉ ⵜⵜ ⵉⵏⵏ ⵉⴽⴽⴰ ⵖ ⵜⵉⵣⵉ ⴰⵏⵏ.",
        "filehist-deleteone": "ⴽⴽⵙ",
        "filehist-revert": "Sgadda daɣ",
        "filehist-current": "ⴰⵎⵉⵔⴰⵏ",
        "linkstoimage": "Tasna yad {{PLURAL:$1|izdayn n tasna|$1 azday n tasniwin}} s usdaw:",
        "nolinkstoimage": "Ḥtta kra n tasna ur tra asdaw ad",
        "sharedupload": "Asdawad z $1 tẓḍart at tsxdmt gr iswirn yaḍnin",
-       "sharedupload-desc-here": "â´°âµ\99ⴷⴰⵡ â´°â´· âµ\89ⴽⴽⴰⴷ âµ£ : $1.  âµ\9cⵥⴹⴰâµ\94âµ\9c â´°âµ\99âµ\99âµ\89 âµ\9câµ\99ⵡⵡâµ\93âµ\94 âµ\96 âµ\9câµ\89ⵡâµ\93âµ\94âµ\89ⵡâµ\89âµ\8f âµ\9câ´°â´¹âµ\8f.\nâµ\93ⴳⴳⴰâµ\94 â´¼âµ\8dâµ\8dâ´°âµ\99 âµ\8dâµ\8dâ´°âµ\8f âµ\96 [$2 âµ\9câ´°âµ\99âµ\8fâ´° âµ\8f âµ\89âµ\8eâµ\8dâµ\93ⵣⵣâµ\93âµ\9câµ\8f] âµ\8dâµ\8dâµ\89 âµ\89âµ\8dâµ\8dâ´°âµ\8f âµ\96âµ\89â´·.",
+       "sharedupload-desc-here": "ⴰⴼⴰⵢâµ\8dâµ\93 â´°â´· âµ\89ⴽⴽⴰ â´· $1 â´· âµ\89ⵥⴹⴰâµ\94 â´°â´· âµ¢âµ\89âµ\8dâµ\89 âµ\89âµ\9câµ\9cⵢⴰⵡâµ\99âµ\85â´·â´°âµ\8e âµ\96 âµ\89âµ\99âµ\8fⴼⴰâµ\94âµ\8f âµ¢â´°â´¹âµ\8f.\nâ´°â´³âµ\8dâ´°âµ\8e âµ\89âµ\8dâµ\8dâ´°âµ\8f âµ\96 [$2 âµ\9câ´°âµ\99âµ\8fâ´° âµ\8fâµ\8fâµ\99 âµ\8f âµ\93â´³âµ\8dâ´°âµ\8e] âµ\80â´° âµ\9c â´·â´·â´°âµ¡ â´°âµ\99.",
        "uploadnewversion-linktext": "ⵙⴽⵜⵔ ⴽⵔⴰ ⵏ ⵜⵓⵏⵖⵉⵍⵜ ⵜⴰⵎⴰⵢⵏⵓⵜ ⵏ ⵓⴼⴰⵢⵍⵓ ⴰⴷ",
        "filedelete": "ⴽⴽⵙ $1",
        "filedelete-legend": "ⴽⴽⵙ ⴰⴼⴰⵢⵍⵓ",
        "all-logs-page": "Immussutn ittyuran immurzmn i kullu..",
        "log-title-wildcard": "Cabba s iswln li ttizwirnin s uṭṛiṣ ad",
        "allpages": "ⴽⵓⵍⵍⵓ ⵜⴰⵙⵏⵉⵡⵉⵏ",
-       "nextpage": "Tasna li rad yack ($1)",
+       "nextpage": "ⵜⴰⵙⵏⴰ ⵜⵓⴹⴼⵉⵔⵜ ($1)",
        "prevpage": "Tasna li izrin $1",
        "allpagesfrom": "Mel tisniwin li ittizwirn z",
        "allpagesto": "Mel tasniwin li ttgurunin s",
        "watchthispage": "ⴹⴼⵓⵔ ⵜⴰⵙⵏⴰ ⴰⴷ",
        "unwatch": "ⵙⴱⴷⴷ ⴰⴹⴼⴼⵓⵔ",
        "watchlist-details": "{{PLURAL:$1|$1 ⵜⴰⵙⵏⴰ|$1 ⵜⴰⵙⵏⵉⵡⵉⵏ}} ⴳ ⵜⵍⴳⴰⵎⵜ {{GENDER:|ⵏⵏⴽ|ⵏⵏⵎ}} ⵏ ⵓⴹⴼⴼⵓⵔ, not separately counting talk pages.",
-       "wlshowlast": "Ml ikudan imggura $1 , ussan imggura $2 niɣd",
+       "wlshowlast": "ⵎⵍ $1 ⵜⵙⵔⴰⴳⵉⵏ ⴳⴳⵯⵔⴰⵏⵉⵏ, $2 ⵡⵓⵙⵙⴰⵏ ⴳⴳⵯⵔⴰⵏⵉⵏ",
        "watchlist-hide": "ⵙⵙⵏⵜⵍ",
        "wlshowhidebots": "ⵉⴷ ⴱⵓⵜ",
        "watchlist-options": "ⵜⵉⵙⵖⴰⵍ ⵏ ⵜⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
        "uctop": "(ⵜⴰⵎⵉⵔⴰⵏⵜ)",
        "month": "Z usggas (d urbur):",
        "year": "Z usggas (d urbur):",
-       "sp-contributions-newbies": "Ad ur tmlt abla tiwuriwin n wiyyaḍ",
+       "sp-contributions-newbies": "ⵎⵍ ⵖⴰⵔ ⵜⵓⵎⵓⵜⵉⵏ ⵏ ⵉⵎⵉⴹⴰⵏⴻⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
        "sp-contributions-newbies-sub": "Z imiḍan (comptes) imaynutn",
        "sp-contributions-newbies-title": "Tiwuriwin n umqdac z imḍan imaynutn",
        "sp-contributions-blocklog": "Tinɣmas n willi ttuyqqanin (blocage)",
        "sp-contributions-blocked-notice-anon": "Tansa yad IP ttuysbddad. Maf ittuysbddad illa ɣ uɣmmis n n willi n sbid. Mayad ɣ trit ad tsnt maɣ",
        "sp-contributions-search": "ⵙⵉⴳⴳⵍ ⵜⵓⵎⵓⵜⵉⵏ",
        "sp-contributions-username": "Tansa IP niɣ assaɣ nu umsqdac:",
-       "sp-contributions-toponly": "Ad urtmlt adla mat ittuyẓran tigira yad",
+       "sp-contributions-toponly": "ⵎⵍ ⵖⴰⵔ ⵉⵙⵏⴼⵉⵍⵏ ⴳⴰⵏⵉⵏ ⵜⵓⵏⵖⵉⵍⵉⵏ ⵜⵉⵎⵉⵔⴰⵏⵉⵏ",
+       "sp-contributions-newonly": "ⵎⵍ ⵖⴰⵔ ⵉⵙⵏⴼⵉⵍⵏ ⴳⴰⵏⵉⵏ ⵉⵙⵏⵓⵍⴼⵓⵜⵏ ⵏ ⵜⴰⵙⵏⵉⵡⵉⵏ",
        "sp-contributions-submit": "ⵙⵉⴳⴳⵍ",
        "sp-contributions-explain": "↓",
        "whatlinkshere": "ⵎⴰⴷ ⵉⵇⵇⵏⴻⵏ ⵙ ⵖⵉⴷ",
        "tooltip-minoredit": "ⵔⵛⵎ ⴰⵢⴰ ⵎⴰⵙ ⵉⴳⴰ ⴰⵙⵏⴼⵍ ⵓⵎⵥⵉⵢ",
        "tooltip-save": "Ḥbu imbddel nek",
        "tooltip-preview": "Mel(fsr) imbddeln nek, urat tḥibit matskert",
-       "tooltip-diff": "Mel (fsr) imbddeln li tskert u-ṭṛiṣ",
+       "tooltip-diff": "ⵎⵍ ⵎⴰⵏ ⵉⵙⵏⴼⵉⵍⵏ ⴰⴷ ⵜⵙⴽⵔⵜ ⵉ ⵓⴹⵔⵉⵙ",
        "tooltip-compareselectedversions": "Ẓr inaḥyatn gr sin lqimat li ttuystaynin ɣ tasna yad.",
        "tooltip-watch": "ⵔⵏⵓ ⵜⴰⵙⵏⴰ ⴰⴷ ⵉ ⵜⵍⴳⴰⵎⵜ {{GENDER:|ⵏⵏⴽ|ⵏⵏⵎ}} ⵏ ⵓⴹⴼⴼⵓⵔ",
        "tooltip-recreate": "Als askr n tasna yad waxxa ttuwḥiyyad",
        "tooltip-undo": "\"Sglb\" ḥiyd ambdl ad t mmurẓmt tasatmt n umbdl ɣ umuḍ tiẓri tamzwarut.",
        "tooltip-summary": "Skcm yat tayafut imẓẓin",
        "pageinfo-header-edits": "ⴰⵎⵣⵔⵓⵢ ⵏ ⵓⵙⵏⴼⵍ",
+       "pageinfo-length": "ⵜⵉⴷⴷⵉ ⵏ ⵜⴰⵙⵏⴰ (ⵙ ⵉⴷ ⴱⴰⵢⵜ)",
        "pageinfo-language": "ⵜⵓⵜⵍⴰⵢⵜ ⵏ ⵜⵓⵎⴰⵢⵜ ⵏ ⵜⴰⵙⵏⴰ",
        "pageinfo-language-change": "ⵙⵏⴼⵍ",
        "pageinfo-content-model-change": "ⵙⵏⴼⵍ",
        "pageinfo-firsttime": "ⴰⵙⴰⴽⵓⴷ ⵏ ⵓⵙⵏⵓⵍⴼⵓ ⵏ ⵜⴰⵙⵏⴰ",
        "pageinfo-lastuser": "ⴰⵎⵙⵏⴼⵍ ⵉⴳⴳⵯⵔⴰⵏ",
-       "pageinfo-lasttime": "ⴰⵙⴰⴽⵓⴷ ⵏ ⵓⵙⵏⴼⵍ ⵉⴳⴳⵯⵔⴰⵏ",
+       "pageinfo-lasttime": "â´°âµ\99â´°â´½âµ\93â´· âµ\8f âµ\93âµ\99âµ\8fâ´¼âµ\8d â´°â´½â´½âµ¯ âµ\89ⴳⴳⵯâµ\94â´°âµ\8f",
        "pageinfo-hidden-categories": "{{PLURAL:$1|ⴰⵙⵎⵉⵍ ⵉⵏⵜⵍⵏ|ⵉⵙⵎⵉⵍⵏ ⵏⵜⵍⵏⵉⵏ}} ($1)",
        "pageinfo-contentpage-yes": "ⵢⴰⵀ",
        "pageinfo-protect-cascading-yes": "ⵢⴰⵀ",
        "variantname-shi-latn": "Tašlḥiyt",
        "variantname-shi": "disable",
        "metadata": "ⵎⵉⵜⴰⴷⴰⵜⴰ",
-       "metadata-help": "Asdaw ad llan gis inɣmisn yaḍnin lli tfl lkamira tuṭunit niɣd aṣfḍ n uxddam lliɣ ay sgadda asdaw ad",
+       "metadata-help": "ⵢⵓⵙⵢ ⵓⴼⴰⵢⵍⵓ ⴰⴷ ⵓⵎⵍⴰⵏ , lli tfl lkamira tuṭunit niɣd aṣfḍ n uxddam lliɣ ay sgadda asdaw ad.\nⵉⵖ ⵉⵏⴼⵍ ⵓⴼⴰⵢⵍⵓ ⵣⵖ ⴰⴷⴷⴰⴷ ⵏⵏⵙ ⴰⵏⵚⵍⵉ, .",
        "metadata-expand": "Ml ifruriyn lluzzanin",
        "metadata-collapse": "Aḥbu n ifruriyn lluzzanin",
        "metadata-fields": "Igran n isfkan n metadata li illan ɣ tabratad ran ilin ɣ tawlaf n tasna iɣ mzzin tiflut n isfka n mita\nWiyyaḍ raggis ḥbun s ɣiklli sttin kkan gantn.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-orientation": "ⴰⵙⵡⴰⵍⴰ",
+       "exif-datetime": "ⴰⵙⴰⴽⵓⴷ ⴷ ⵡⴰⴽⵓⴷ ⵏ ⵓⵙⵏⴼⵍ ⵏ ⵓⴼⴰⵢⵍⵓ",
        "exif-flash": "ⴼⵍⴰⵛ",
        "exif-source": "ⴰⵙⴰⴳⵎ",
        "exif-languagecode": "ⵜⵓⵜⵍⴰⵢⵜ",
        "img-lang-default": "(ⵜⵓⵜⵍⴰⵢⵜ ⵙ ⵓⵡⵏⵓⵍ)",
        "ascending_abbrev": "aryaqliw",
        "descending_abbrev": "aritgiiz",
-       "table_pager_next": "tawriqt tamaynut",
+       "table_pager_next": "ⵜⴰⵙⵏⴰ ⵜⵓⴹⴼⵉⵔⵜ",
        "table_pager_prev": "tawriqt izrin",
        "table_pager_first": "tawriqt tamzwarut",
        "table_pager_last": "tawriqt tamgrut",
index d8258da..f5155f4 100644 (file)
        "permissionserrorstext-withaction": "ၸဝ်ႈၵဝ်ႇဢမ်ႇမီးသုၼ်ႇ တႃႇ $2, တွၼ်ႈတႃႇ ၸိူဝ်း ဢၼ်ပဵၼ် {{PLURAL:$1|reason|လွင်ႈတၢင်း}}:",
        "contentmodelediterror": "ၸဝ်ႈၵဝ်ႇတေဢမ်ႇၸၢင်ႈ မႄးထတ်း ၵၢၼ်ၶူၼ်ႉၶႆႈၼႆႉ၊ ယွၼ်ႉပိူဝ်ႈဝႃႈ ၽၢင်တူဝ် ၶေႃႈၶဝ်ႈပႃး မၼ်းၼႆႉပဵၼ်  <code>$1</code>, ဢၼ် ပႅၵ်ႇပိူင်ႈၵၼ်တၢင်း ၽၢင်တူဝ် ၶေႃႈၶဝ်ႈပႃး ၶွင်ႈၼႃႈလိၵ်ႈ <code>$2</code> ၼႆႉ။",
        "recreate-moveddeleted-warn": "<strong>ၶေႃႈၽၢင်ႉပၼ် : ၸဝ်ႈၵဝ်ႇ ၶိုၼ်းၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ ဢၼ်လႆႈ မွတ်ႇပႅတ်ႈၵႂႃႇဝႆႉၼၼ်ႉ။</strong>\n\nၸဝ်ႈၵဝ်ႇ ထုၵ်ႇလီဝူၼ်ႉတူၺ်းဝႃႈ ၸွင်ႇမၼ်းသၢင်ႇထုၵ်ႇ တွၼ်ႈတႃႇတေသိုပ်ႇ မႄးထတ်း ၼႃႈလိၵ်ႈၼႆႉဢၼ်ဝႃႈၼၼ်ႉ။\nသဵၼ်ႈလၢႆ မွတ်ႇပႅတ်ႈလႄႈ ၶၢႆႉဢွင်ႈ တွၼ်ႈတႃႇၼႃႈလိၵ်ႈၼႆႉ ၵမ်ႉထႅမ်ဝႆႉပၼ် ၵႃႈတီႈၼႆႈ တွၼ်ႈတႃႇ ႁႂ်းငၢႆႈလူမ်ၸႂ် :",
-       "moveddeleted-notice": "á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80½á\80\90á\80ºá\82\87á\80\95á\82\85á\80\90á\80ºá\82\88á\81µá\82\82á\82\83á\82\87á\80\9aá\80\9dá\80ºá\82\89á\81\8b á\80\9cá\80½á\80\84á\80ºá\82\88á\80\99á\80½á\80\90á\80ºá\82\87á\80\95á\82\85á\80\90á\80ºá\82\88á\80\9cá\82\84á\82\88 á\80\9cá\80½á\80\84á\80ºá\82\88á\81¶á\81¢á\82\86á\82\89á\80\9eá\81¢á\82\86á\80\99á\81¢á\82\86 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\86á\82\89 á\81µá\80\99á\80ºá\82\89á\80\91á\82\85á\80\99á\80ºá\80\9dá\82\86á\82\89á\80\95á\81¼á\80º á\81¼á\80\84á\80ºá\82\87á\80\95á\82\83á\82\88á\80\90á\82\82á\80ºá\82\88á\81¼á\82\86á\82\89á\80\9aá\80°á\82\87á\81\8b á\80\99á\81¼á\80ºá\80¸ပဵၼ် တွၼ်ႈတႃႇ ႁဵတ်းၽိုၼ်ဢိင်ယဝ်ႉ။",
+       "moveddeleted-notice": "á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80½á\80\90á\80ºá\82\87á\80\95á\82\85á\80\90á\80ºá\82\88á\81µá\82\82á\82\83á\82\87á\80\9aá\80\9dá\80ºá\82\89á\81\8b á\80\9cá\80½á\80\84á\80ºá\82\88á\80\99á\80½á\80\90á\80ºá\82\87á\80\95á\82\85á\80\90á\80ºá\82\88á\81\8a á\80\9cá\80½á\80\84á\80ºá\82\88á\82\81á\82\84á\82\89á\81µá\80\84á\80ºá\82\88 á\80\9cá\82\84á\82\88 á\80\9eá\81¢á\82\86á\80\99á\81¢á\82\86á\80\9cá\80½á\80\84á\80ºá\82\88á\81¶á\81¢á\82\86á\82\89 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\86á\82\89 á\81µá\80\99á\80ºá\82\89á\80\91á\82\85á\80\99á\80ºá\80\9dá\82\86á\82\89á\80\95á\81¼á\80º á\81¼á\80\84á\80ºá\82\87á\80\95á\82\83á\82\88á\80\90á\82\82á\80ºá\82\88á\81¼á\82\86á\82\89 ပဵၼ် တွၼ်ႈတႃႇ ႁဵတ်းၽိုၼ်ဢိင်ယဝ်ႉ။",
        "moveddeleted-notice-recent": "ယိၼ်းၶီၸွမ်ႈယူႇ၊ ၼႃႈလိၵ်ႈၼႆႉ တိုၵ်ႉႁႃထုၵ်ႇမွတ်ႇပႅတ်ႈ (ၼႂ်းၶၢဝ်းတၢင်း မိူဝ်ႈပူၼ်ႉမႃး 24 ၸူဝ်ႈမူင်း) ၼႆႉၵူၺ်း။ သဵၼ်ႈမၢႆ မွတ်ႇပႅတ်ႈ လႄႈ ၶၢႆႉဢွင်ႈတီႈ ၸိူဝ်းၼၼ်ႉ လႆႈၵမ်ႉထႅမ်ဝႆႉပၼ်ၼင်ႇၽၢႆႇတႂ်ႈ ႁႂ်ႈၸၢင်ႈပဵၼ် ၵၢၼ်ၽိုၼ်ဢိင်။",
        "log-fulllog": "တူၺ်း သဵၼ်ႈမၢႆဢၼ်တဵမ်ထူၼ်ႈ",
        "edit-hook-aborted": "ၵၢၼ်မႄးထတ်း ထုၵ်ႇလူတ်းပႅတ်တင်းၶေႃၵွင်ႉ။\nမၼ်းဢမ်ႇပၼ်ဝႆႉ ၶေႃႈသပ်းလႅင်းသင်။",
        "editundo": "ၶိုၼ်ၶိုၼ်း",
        "diff-empty": "(ဢမ်ႇမီးလွင်ႈပႅၵ်ႇပိူင်ႈ)",
        "diff-multi-sameuser": "({{PLURAL:$1|လွင်ႈၶူၼ်ႉၶႆႈ ပၢၼ်ၵၢင် |$1 လွင်ႈၶူၼ်ႉၶႆႈ ပၢၼ်ၵၢင်}} ​ပေႃးတႃႇ ၽူႈၸႂ်တိုဝ်းမိူၼ်ၵၼ် တေဢမ်ႇၼႄပၼ်)",
+       "diff-multi-otherusers": "({{PLURAL:$1|လွင်ႈၶူၼ်ႉၶႆႈမႄးၶိုၼ်း ပၢၼ်ၵၢင် |$1 လွင်ႈၶူၼ်ႉၶႆႈမႄးၶိုၼ်း ပၢၼ်ၵၢင်}} ​\n{{PLURAL:$2|ၽူႈၸႂ်ႉတိုဝ်း ထႅင်ႈၵေႃႉၼိုင်ႈ|$2 ၽူႈၸႂ်ႉတိုဝ်း}} ဢမ်ႇၼႄဝႆႉ)",
        "searchresults": "ၶူၼ်ႉႁႃၺႃး",
        "searchresults-title": "ၶူၼ်ႉႁႃၺႃးတွၼ်ႈတႃႇ \"$1\"",
        "titlematches": "ႁူဝ်ၶေႃႈ ၼႃႈလိၵ်ႈ ၶူပ်းၵၼ်ယူႇ",
        "searchprofile-everything-tooltip": "သွၵ်ႈႁႃလမ်းၼႂ်းတင်းမူတ်း (ဢိၵ်ႇပႃးၼႃႈလိၵ်ႈ ဢုပ်ႇဢူဝ်း)",
        "searchprofile-advanced-tooltip": "သွၵ်ႈႁႃတီႈၼႂ်း ဢွင်ႈတီႈၸိုဝ်ႈႁင်းတူဝ်",
        "search-result-size": "$1 ({{PLURAL:$2|1 ၶေႃႈ|$2 ၶေႃႈ}})",
+       "search-result-category-size": "{{PLURAL:$1|1 ၽူႈၶဝ်ႈၸုမ်း|$1 ၽူႈၶဝ်ႈၸုမ်း}} ({{PLURAL:$2|1 ၵၼ်ၽႄ|$2 ၵၼ်ၽႄ}}, {{PLURAL:$3|1 ၾၢႆႇ|$3 ၾၢႆႇ}})",
        "search-redirect": "(ပိၼ်ႇဝၢႆႇမႃးတီႈ $1)",
        "search-section": "(တွၼ်ႈၵၼ် $1)",
        "search-category": "(တွၼ်ႈၵၼ် $1)",
+       "search-file-match": "(လမ်းၼႂ်းၾၢႆႇဢၼ်မႅၼ်ႈၵၼ်)",
        "search-suggest": "ၶႂ်ႈဝႃႈ $1 - ၼႆႁႃႉ",
        "search-interwiki-caption": "ၽွၼ်းလႆႈ ၵႃႈတီႈ ၼႃႈၵၢၼ် ပီႈၼွင်ႉၵၼ်",
        "search-interwiki-default": "ၽွၼ်းလႆႈ ၵႃႈတီႈ $1 :",
        "rcfilters-empty-filter": "ဢမ်ႇမီးတူဝ်ထွင် ဢၼ်တူင်ႉၼိုင်။ ၵၢၼ်ၶဝ်ႈႁူမ်ႈတၢင်းသဵင်ႈၵေႃႈၼႄဝႆႉယူႇ။",
        "rcfilters-filterlist-title": "တူဝ်ထွင်",
        "rcfilters-filterlist-noresults": "ဢမ်ႇႁၼ်မီးတူဝ်ထွင်",
-       "rcfilters-filtergroup-registration": "လွင်ႈတၢင်ႇမၢႆၽၢင် ၽူႈၸႂ်ႉတိုဝ်း",
-       "rcfilters-filter-registered-label": "တၢင်ႇမၢႆၾၢင်ဝႆႉယဝ်ႉ",
-       "rcfilters-filter-registered-description": "ၽူႈမႄးထတ်းၶဝ် ၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆႉ",
-       "rcfilters-filter-unregistered-label": "ဢမ်ႇလႆႈတၢင်ႇမၢႆႇၽၢင်ဝႆႉ",
-       "rcfilters-filter-unregistered-description": "ၽူႈမႄးထတ်း ၸိူဝ်းဢမ်ႇလႆႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇဝႆႉ",
        "rcfilters-filtergroup-authorship": "လွင်ႈၶဝ်ႈႁူမ်ႈ ၸဝ်ႈပၢႆၵမ်",
        "rcfilters-filter-editsbyself-label": "လွင်ႈ​လႅၵ်ႈလၢႆႈ ၸဝ်ႈၵဝ်ႇႁဵတ်း",
        "rcfilters-filter-editsbyself-description": "လွင်ႈၶဝ်ႈႁူမ်ႈ ၶွင်တူဝ်ၸဝ်ႈၵဝ်ႇ",
        "rcfilters-filter-editsbyother-label": "လွင်ႈလႅၵ်ႈလၢႆႈ တၢင်ႇၵေႃႉႁဵတ်း",
        "rcfilters-filter-editsbyother-description": "လွင်ႈလႅၵ်ႈလၢႆႈတၢင်းသဵင် လိူဝ်သေၶွင်တူဝ်ၸဝ်ႈၵဝ်ႇ",
        "rcfilters-filtergroup-userExpLevel": "ၸၼ်ႉထၢၼ်ႈ တူဝ်ထူပ်း (တွၼ်ႈတႃႈ ၽူႈၸႂ်ႉတိုဝ်း ၸိူဝ်းတၢင်ႇဝႆႉ မႆၽၢင်ၵူၺ်း)",
+       "rcfilters-filter-user-experience-level-registered-label": "တၢင်ႇမၢႆၾၢင်ဝႆႉယဝ်ႉ",
+       "rcfilters-filter-user-experience-level-registered-description": "ၽူႈမႄးထတ်းၶဝ် ၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆႉ",
+       "rcfilters-filter-user-experience-level-unregistered-label": "ဢမ်ႇလႆႈတၢင်ႇမၢႆႇၽၢင်ဝႆႉ",
+       "rcfilters-filter-user-experience-level-unregistered-description": "ၽူႈမႄးထတ်း ၸိူဝ်းဢမ်ႇလႆႈၶဝ်ႈ လွၵ်ႉဢိၼ်ႇဝႆႉ",
        "rcfilters-filter-user-experience-level-newcomer-label": "ၵူၼ်းၼႃႈမႂ်ႇ",
        "rcfilters-filter-user-experience-level-newcomer-description": "ဢေႇလိူဝ် ၵၢၼ်မႄးထတ်း ႑႐ ဢၼ် လႄႈ လွင်ႈတူင်ႉၼိုင် တႃႇသီႇဝၼ်း",
        "rcfilters-filter-user-experience-level-learner-label": "ၽူႈလဵပ်ႈႁဵၼ်း",
        "allinnamespace": "ၼႃႈလိၵ်ႈတင်းမူတ်း ($1 ဢွင်ႈၸိုဝ်ႈ)",
        "allpagessubmit": "သိုပ်ႇၵႂႃႇ",
        "allpagesprefix": "ၼႃးလိၵ်ႈဢၼ်ၼႄ ဢိၵ်ႇတင်း ၶေႃႈလူင်ႈၼႃႈ",
+       "allpages-hide-redirects": "သိူင်ႇ ၸိူဝ်းတူဝ်ပိၼ်ႇၸီႉ",
        "categories": "လိူင်ႈ",
        "sp-deletedcontributions-contribs": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
        "linksearch": "သွၵ်ႈႁႃ ႁဵင်းၵွင်ႉၽၢႆႇၼွၵ်ႈ",
        "watchnologin": "ဢမ်ႇလႆႈၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆ့",
        "addwatch": "ထႅမ်သႂ်ႇၸူး သဵၼ်ႈမၢႆ ပႂ်ႉတူၺ်း",
        "watch": "ပႂ်ႉတူၺ်း",
+       "unwatch": "ဢမ်ႇတူၺ်း",
+       "wlshowlast": "ၼႄ ၶၢဝ်းယၢမ်းလိုၼ်းသုတ်း $1 မူင်း $2 ဝၼ်း",
        "watchlist-hide": "သိူင်ႇ",
        "watchlist-submit": "ၼႄ",
        "wlshowtime": "ပွင်ႈၶၢဝ်းယၢမ်း တွၼ်ႈတႃႇ ဢွၵ်ႇၼႄ:",
        "watchlist-options": "ၵၼ်လိူၵ်ႈသၢင်ႈ တူဝ်ပႂ်ႉတူၺ်း",
        "watching": "တိုၵ်ႉတူၺ်းယူႇ...",
        "unwatching": "ဢမ်ႇတူၺ်းဝႆႉ...",
+       "enotif_reset": "ႁဵတ်းၼႃႈလိၵ်ႈတင်းသဵင်ႈ ၼင်ႇဢႅဝ်ႇဝႆႉယဝ်ႉ",
        "enotif_impersonal_salutation": "{{SITENAME}} ၽူႈၸႂ်ႉတိုဝ်း",
        "enotif_subject_deleted": "ၼႃႈလိၵ်ႈ {{SITENAME}}  $1 ၼႆႉ ထုၵ်ႇ $2 ၵေႃႉ {{GENDER:$2|မူတ်ႇပႅတ်ႈ}} ဢေႃႈ။",
        "enotif_subject_created": "ၼႃႈလိၵ်ႈ {{SITENAME}}  $1 ၼႆႉ ထုၵ်ႇ $2 ၵေႃႉ {{GENDER:$2|ၵေႃႇသၢင်ႈဝႆႉ}} ဢေႃႈ",
        "logentry-contentmodel-change-revertlink": "ပိၼ်ႈၶိုၼ်း",
        "logentry-contentmodel-change-revert": "ပိၼ်ႈၶိုၼ်း",
        "protectlogpage": "မၢႆတမ်း ၵၢၼ်ႁေႉၵင်ႈ",
+       "protectedarticle": "ႁႄႉၵင်ႈဝႆႉ \"[[$1]]\"",
+       "modifiedarticleprotection": "ၸၼ်ႉထၢၼ်ႈလွင်ႈႁႄႉၵင်ႈ ဢၼ်လႅၵ်ႈလၢႆႈဝႆႉတႃႇ  \"[[$1]]\"",
        "protect-default": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း တၢင်းသဵင်ႈ",
        "protect-fallback": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်တင်း လွင်ႈၶႂၢင်းပၼ် \"$1\" ၼၼ်ႉၵူၺ်း",
        "protect-level-autoconfirmed": "ၶႂၢင်းပၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႄႉၼွၼ်းႁင်းၵူၺ်းၼၼ်ႉ ၵူၺ်း",
        "tooltip-namespace_association": "လိူၵ်ႈပၼ် လွၵ်းၼႆႉ တႃႇတေႁႂ်ႈပႃး ၶေႃႈဢုပ်ႇဢူဝ်း ဢမ်ႇၼၼ် ၸိုဝ်ႈႁူဝ်ၶေႃႈ ဢၼ်ၵပ်းၵၢႆႇလူၺ်ႈ ႁူဝ်ၶေႃႈ ဢၼ်လိူၵ်ႈဝႆႉၼၼ်ႉ။",
        "blanknamespace": "ႁူဝ်ႁႅၵ်ႇ",
        "contributions": "{{GENDER:$1|User}} ၶဝ်ႈႁူမ်ႈပႃး",
+       "contributions-title": "လွင်ႈၶဝ်ႈႁူမ်ႈၽူႈၸႂ်ႉတိုဝ်း တွၼ်ႈတႃႇ $1",
        "mycontris": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
        "anoncontribs": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
+       "contribsub2": "တွၼ်ႈတႃႇ {{GENDER:$3|$1}} ($2)",
        "uctop": "(ယၢမ်းလဵဝ်)",
        "month": "တႄႇဢဝ်လိူၼ် (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
        "year": "တႄႇဢဝ်ပီ (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
+       "sp-contributions-newbies": "ၼႄပၼ်လွင်ႈၶဝ်ႈႁူမ်ႈ ၶွင် ဢၶွင်ႉဢၼ်မႂ်ႇလၢႆလၢႆၵူၺ်းလႄႈ",
        "sp-contributions-newbies-sub": "တွၼ်ႈတႃႇဢၶွင်ႉ ဢၼ်မႂ်ႇ",
        "sp-contributions-blocklog": "မၢႆတမ်းၵၢၼ်​ႁေႉတတ်း",
        "sp-contributions-suppresslog": "လွင်ႈၶဝ်ႈႁူမ်ႈ {{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}} ဢၼ်ႁူမ်ႇလပ်ႉဝႆႉ",
        "ipb_hide_invalid": "ဢမ်ႇၸၢင်ႈႁူမ်ႇလပ်ႉဝႆႉ ဢၶွင်ႉဢၼ်ၼႆႉ; မၼ်းမီးလိူဝ်ဝႆႉ {{PLURAL:$1|လွင်ႈမႄးထတ်း ဢၼ်ၼိုင်ႈ|$1 လွင်ႈမႄးထတ်းတင်းၼမ်}}။",
        "ipb_already_blocked": "\"$1\" ၼႆႉ ထုၵ်ႇ ႁႄႉတတ်းဝႆႉယဝ်ႉ။",
        "ipb-needreblock": "$1 ၼႆႉ ထုၵ်ႇႁႄႉတတ်းဝႆႉယဝ်ႉ။ ၸွင်ႇၸဝ်ႈၵဝ်ႇ ၶႂ်ႈလႅၵ်ႈလၢႆႈ ၵၼ်တင်ႈႁိုဝ်?",
+       "proxyblocker": "တူဝ်ႁႄႉတတ်း ပရၢဝ်ႇသီႇ",
        "ipbnounblockself": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇ ပိုတ်ႇသေႃးၶိုၼ်းတႃႇၸဝ်ႈၵဝ်ႇ။",
        "lockdb": "ၶတ်းယွင်ၶေႃႈမုၼ်း",
        "unlockdb": "ပိုတ်ႇသေႃး ယွင်ၶေႃႈမုၼ်း",
        "lastmodifiedatby": "ၼႃႈလိၵ်ႈဢၼ်ၼႆႉ ထုၵ်ႇ $3 ၵေႃႉမူၼ်ႉမႄးဝႆႉမိူဝ်ႈ $2, $1။",
        "spam_reverting": "လွင်ႈပိၼ်ႈၶိုၼ်း လွင်ႈၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်းၼၼ်ႉ မၼ်းဢမ်ႇၶဝ်ႈပႃးဝႆႉ ႁဵင်းၵွင်ႉ ဢၼ်ၵွင်ႉၸူး $1",
        "simpleantispam-label": "ၵူတ်ႇထတ်း Anti-spam.\n<strong>ယႃႇပေ</strong>ထႅမ်ဢၼ်ၼႆႉသႂ်ႇ!",
+       "pageinfo-title": "လွၼ်ႉၶၢဝ်ႇ တွၼ်ႈတႃႇ \"$1\"",
        "pageinfo-header-basic": "�လွၼ်ႉၶၢဝ်ႈ ပိုၼ်ႉထၢၼ်",
        "pageinfo-header-edits": "ပိုၼ်းမႄးထတ်း",
        "pageinfo-header-restrictions": "လွင်ႈႁႄႉၵင်ႈၼႃႈလိၵ်ႈ",
        "pageinfo-language-change": "လႅၵ်ႈလၢႆႈ",
        "pageinfo-content-model": "ပိူင်ၵေႃႇသၢင်ႈ လမ်းၼႂ်း ၼႃႈလိၵ်ႈ",
        "pageinfo-content-model-change": "လႅၵ်ႈလၢႆႈ",
+       "pageinfo-robot-policy": "လွင်ႈ ၶိူင်ႈၸၢၵ်ႈၵေႃႉ ၸီႉၼႄပၼ်",
        "pageinfo-robot-index": "ၶႂၢင်းပၼ်ဝႆႉ",
        "pageinfo-robot-noindex": "ဢမ်ႇၶႂၢင်းပၼ်ဝႆႉ",
        "pageinfo-watchers": "တၢင်းၼမ် ၽူႈတူၺ်းၼႃႈလိၵ်ႈ",
        "pageinfo-visiting-watchers": "တၢင်းၼမ်ၽူႈၶဝ်ႈတူၺ်း ၼႃႈလိၵ်ႈ ၵေႃႉဢၼ် တိုၵ်ႉႁႃၶဝ်ႈဢႅဝ်တီႈ လွင်ႈမႄးထတ်း ၸိူဝ်းပႆႇပေႃးႁိုင်",
        "pageinfo-few-watchers": "ဢေႇလိူဝ်သေ $1 {{PLURAL:$1|ၽူႈၶဝ်ႈတူၺ်း}}",
+       "pageinfo-redirects-name": "တၢင်းၼမ် လွင်ႈပိၼ်ႇၽၢႆႇ ၸူး ၼႃႈလိၵ်ႈဢၼ်ၼႆႉ",
+       "pageinfo-subpages-name": "တၢင်းၼမ် ၼႃႈလိၵ်ႈၽႄ ၶွင်ႈၼႃႈလိၵ်ႈဢၼ်ၼႆႉ",
        "pageinfo-firstuser": "ၽူႈၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ",
        "pageinfo-firsttime": "ဝၼ်းထီႉ လွင်ႈၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ",
        "pageinfo-lastuser": "ၽူႈမႄးထတ်း ၵေႃႉလိုၼ်းသုတ်း",
        "pageinfo-authors": "ႁူဝ်ႁုပ်ႈတၢင်းၼမ် ၽူႈတႅမ်ႈလိၵ်ႈ ပႅၵ်ႇပိူင်ႈ",
        "pageinfo-recent-edits": "တၢင်းၼမ်လွင်ႈမႄးထတ်း ၸိူဝ်းပႆႇပေႃးႁိုင် (တီႈၼႂ်း ၶၢဝ်းပူၼ်ႉမႃး $1)",
        "pageinfo-recent-authors": "တၢင်းၼမ် ၽူႈတႅမ်ႈလိၵ်ႈ ပႅၵ်ႇပိူင်ႈ ၸိူဝ်းဢၼ်ပႆႇပေႃးႁိုင်",
+       "pageinfo-magic-words": " {{PLURAL:$1|ၶေႃႈၵႂၢမ်း|ၶေႃႈၵႂၢမ်းၸိူဝ်း}} ($1) မေႃၽၢမ်း",
        "pageinfo-hidden-categories": "သိူင်ႇဝႆႉ {{PLURAL:$1|လိူင်ႈ|လိူင်ႈ(ၼမ်)}} ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|ပိူင်တမ်း|ၸိူဝ်းပိူင်တမ်း}} ($1) ဢၼ်ႁဵတ်းဝႆႉ Transclude",
        "pageinfo-toolboxlink": "လွၼ်ႉၶၢဝ်ႇၼႃႈလိၵ်ႈ",
        "pageinfo-redirectsto": "ဝိၼ်ႇၵႂႃႇၸူး",
        "pageinfo-redirectsto-info": "လွၼ်ႉၶၢဝ်ႇ",
        "markaspatrolleddiff": "မၢႆဝႆႉၼင်ႇ ပႂ်ႉယၢမ်း",
        "markaspatrolledtext": "မၢႆဝႆႉၼႃႈလိၵ်ႈၼင်ႇ ပႂ်ႉယၢမ်း",
        "markedaspatrolled": "မၢႆဝႆႉၼင်ႇ ပႂ်ႉယၢမ်း",
+       "patrol-log-page": "သဵၼ်ႈမၢႆ လွင်ႈပႂ်ႉၵူတ်ႇထတ်း",
        "previousdiff": "ၵၢၼ်မႄးထတ်း ဢၼ်ၵဝ်ႇ",
        "nextdiff": "ထတ်းသၢင်ႈဢၼ်မႂ်ႇမႂ်ႇ",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ၼႃႈလိၵ်ႈ|ၼႃႈလိၵ်ႈ။}}",
        "file-info-size": "$1 × $2 pixels, တၢင်းလဵၵ်ႉတၢင်းယႂ်ႇ ၾၢႆႇ: $3, ယိူင်ႈ MIME: $4",
        "file-info-size-pages": "$1 × $2 pixels, သႅၼ်းၾၢႆႇ: $3, ၸုပ်ႈ MIME: $4, $5 {{PLURAL:$5|ၼႃႈ|ၼႃႈ(ၼမ်)}}",
        "file-nohires": "ဢမ်ႇမီး ဢၼ်ႁႅင်းၸိုၼ်ႈသႂ်ႇမၼ်း သုင်သုင်",
        "version-extensions": "သၢႆလင် ၸိူဝ်းဢူၼ်းသႂ်ႇဝႆႉ�",
        "version-skins": "ၽိဝ်ၼင် ၸိူဝ်းဢူၼ်းသႂ်ႇဝႆႉ�",
        "version-specialpages": "�ၼႃႈလိၵ်ႈ ၶိုၵ်ႉတွၼ်း",
+       "redirect": "ၶိုၼ်းပိၼ်ႇၽၢႆ ၼင်ႇ ၾၢႆႇ၊ ၽူႈၸႂ်ႉတိုဝ်း၊ ၼႃႈလိၵ်ႈ၊ လွင်ႈမႄးၶိုၼ်း ဢမ်ႇၼၼ် မၢႆၽၢင် သဵၼ်ႈမၢႆ",
+       "redirect-submit": "သိုပ်ႇၵႂႃႇ",
+       "redirect-lookup": "ပိုတ်ႇတူၺ်း:",
+       "redirect-value": "ၵႃႈၶၼ်:",
+       "redirect-user": "ၽၢႆၽၢင် ၽူႈၸႂ်ႉတိုဝ်း",
+       "redirect-page": "မၢႆၽၢင် ၼႃႈလိၵ်ႈ",
+       "redirect-revision": "လွင်ႈမႄးၶိုၼ်းၼႃႈလိၵ်ႈ",
+       "redirect-file": "ၸိုဝ်ႈၾၢႆႇ",
        "specialpages": "ၼႃႈလိၵ်ႈ ၶိုၵ်ႉတွၼ်း",
        "tag-filter": "ၶတ်းလိူၵ်ႈဢဝ်[[Special:Tags|Tag]]:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tags-active-yes": "ၸႂ်ႈယဝ်ႉ",
+       "tags-active-no": "ဢမ်ႇ",
+       "tags-hitcount": "$1 {{PLURAL:$1|လႅၵ်ႈလၢႆႈ|ၸိူဝ်းလႅၵ်ႈလၢႆႈ}}",
        "logentry-delete-delete": "$1 {{GENDER:$2|မွတ်ႇယဝ်ႉ}} ၼႃႈလိၵ်ႈ $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|ဢဝ်ၶိုၼ်း}} ၼႃႈလိၵ်ႈ $3 ($4)",
+       "logentry-delete-revision": "$1 {{GENDER:$2|လႅၵ်ႈလၢႆႈဝႆႉ}} လွင်ႈႁၼ်လႆႈၶွင် {{PLURAL:$5|လွင်ႈၶူၼ်ႉမႄးၶိုၼ်း|$5 လွင်ႈၶူၼ်ႉမႄးၶိုၼ်း}} တီႈၼိူဝ် ၼႃႈလိၵ်ႈ $3: $4",
+       "revdelete-content-hid": "လမ်းၼႂ်း ဢၼ်သိူင်ႇဝႆႉ",
        "logentry-move-move": "$1 {{GENDER:$2|ၶၢႆႉယဝ်ႉ}} ၼႃႈလိၵ်ႈ $3 တေႃႇ $4",
+       "logentry-move-move-noredirect": "ဢမ်ႇဢွၵ်ႇယၢၼ် လွင်ႈပိၼ်ႇၽၢႆႇေသ $1 {{GENDER:$2|ၶၢႆႉဝႆႉ}} ၼႃႈလိၵ်ႈ $3 တေႃႇ $4",
+       "logentry-move-move_redir": "တၢင်ႇၼိူဝ် လွင်ႈပိၼ်ႇၽၢႆႇ သေ $1 {{GENDER:$2|ၶၢႆႉ}} ၼႃႈလိၵ်ႈ $3 တေႃႇ $4",
        "logentry-newusers-create": "ဢၶွင်ႉၽူႈၸႂ်ႉတိုဝ်း $1 ၼႆႉ လႆႈ  {{GENDER:$2|ၵေႃႇသၢင်ႈယဝ်ႉ}}",
+       "logentry-newusers-autocreate": "ဢၶွင်ႉ ၽူႈၸႂ်ႉတိုဝ်း $1 ၼႆႉ ထုၵ်ႇ  {{GENDER:$2|ၵေႃႇသၢင်ႈၵႂႃႇ}} ႁင်းမၼ်းယဝ်ႉ။",
        "logentry-upload-upload": "$1 {{GENDER:$2|လူတ်ႇၶိုၼ်ႈၵႂႃႇယဝ်ႉ}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|လူတ်ႇၶိုၼ်ႈဝႆႉ}} မၢႆဢွၵ်ႇဢၼ်မႂ်ႇ ၶွင် $3",
        "searchsuggest-search": "ၶူၼ်ႉႁႃ {{SITENAME}}",
+       "duration-days": "$1 {{PLURAL:$1|ဝၼ်း|ဝၼ်း။}}",
        "mw-widgets-dateinput-no-date": "ပႆႇလိူၵ်ႈဝၼ်းယၢမ်း",
+       "randomrootpage": "ၼႃႈလိၵ်ႈငဝ်ႈႁၢၵ်ႈ ၵမ်ႉသၢင်ႇတေႃႇ",
        "revid": "ၶူၼ်ႉၶႆႈ $1",
        "pageid": "မၢႆၽၢင် ၽိုၼ်လိၵ်ႈ $1"
 }
index 9daccbb..0dd4975 100644 (file)
        "permissionserrorstext": "Na to nemáte povolenie z {{PLURAL:$1|nasledujúceho dôvodu|nasledujúcich dôvodov}}:",
        "permissionserrorstext-withaction": "Nemáte oprávnenie $2 z {{PLURAL:$1|nasledovného dôvodu|nasledovných dôvodov}}:",
        "recreate-moveddeleted-warn": "'''Upozornenie: Opätovne vytvárate stránku, ktorá bola predtým zmazaná.'''\n\nMali by ste zvážiť, či je vhodné pokračovať v úpravách tejto stránky.\nĎalšie informácie si môžete pozrieť v zázname zmazaní a presunutí:",
-       "moveddeleted-notice": "Táto stránka bola zmazaná.\nĎalšie informácie si môžete pozrieť v zázname zmazaní a presunutí.",
+       "moveddeleted-notice": "Táto stránka bola zmazaná.\nĎalšie informácie si môžete pozrieť v zázname zmazaní, zamknutí a presunutí.",
+       "moveddeleted-notice-recent": "Ospravedlňujeme sa, ale táto stránka bola zmazaná (počas posledným 24 hodín).\nĎalšie informácie si môžete pozrieť v zázname zmazaní, zamknutí a presunutí.",
        "log-fulllog": "Zobraziť úplný záznam",
        "edit-hook-aborted": "Úpravu zrušila prídavná funkcia (prípojný bod syntaktického analyzátora).\nNeudala vysvetlenie.",
        "edit-gone-missing": "Nebolo možné aktualizovať stránku.\nZdá sa, že bola zmazaná.",
        "version-libraries-license": "Licencia",
        "version-libraries-description": "Popis",
        "version-libraries-authors": "Autori",
-       "redirect": "Presmerovanie podľa súboru, používateľa alebo ID revízie",
-       "redirect-summary": "Táto špeciálna stránka presmerováva na súbor (podľa názvu), stránku (podľa ID stránky alebo revízie) alebo používateľa (podľa číselného ID). Použitie: [[{{#Special:Redirect}}/file/Test.jpg]], [[{{#Special:Redirect}}/revision/328429]], resp. [[{{#Special:Redirect}}/user/101]].",
+       "redirect": "Presmerovanie podľa súboru, používateľa, ID revízie alebo ID protokolového záznamu.",
+       "redirect-summary": "Táto špeciálna stránka presmerováva na súbor (podľa názvu), stránku (podľa ID stránky alebo revízie), používateľa (podľa číselného ID) alebo protokolový záznam (podľa ID záznamu). Použitie: [[{{#Special:Redirect}}/file/Test.jpg]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], resp. [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Ísť",
        "redirect-lookup": "Vyhľadať:",
        "redirect-value": "Hodnota:",
        "fileduplicatesearch-noresults": "Súbor s názvom „$1“ nebol nájdený.",
        "specialpages": "Špeciálne stránky",
        "specialpages-note-top": "Legenda",
-       "specialpages-note": "* Bežné špeciálne stránky.\n* <strong class=\"mw-specialpagerestricted\">Špeciálne stránky s obmedzeným prístupom.</strong>",
        "specialpages-group-maintenance": "Údržbové správy",
        "specialpages-group-other": "Iné špeciálne stránky",
        "specialpages-group-login": "Prihlásenie / registrácia",
        "compare-invalid-title": "Názov, ktorý ste zadali nie je platný.",
        "compare-title-not-exists": "Názov, ktorý ste zadali neexistuje.",
        "compare-revision-not-exists": "Revízia, ktorú ste zadali, neexistuje.",
+       "diff-form": "'''formulár'''",
        "dberr-problems": "Prepáčte! Táto stránka má práve technické problémy.",
        "dberr-again": "Skúste niekoľko minút počkať a potom opäť načítať stránku.",
        "dberr-info": "(Spojenie s databázovým serverom neúspešné: $1)",
        "htmlform-datetime-placeholder": "RRRR-MM-DD HH:MM:SS",
        "logentry-delete-delete": "$1 zmazal stránku $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|zmazal|zmazala}} presunom presmerovanie $3",
-       "logentry-delete-restore": "$1 obnovil stránku $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|obnovil|obnovila}} stránku $3 ($4)",
        "logentry-delete-event": "$1 zmenil viditeľnosť {{PLURAL:$5|záznamu udalostí|$5 záznamov udalostí}} k stránke $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|zmenil|zmenila}} viditeľnosť {{PLURAL:$5|revízie|$5 revízií}} na stránke $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|zmenil|zmenila}} viditeľnosť záznamov udalostí k stránke $3",
        "logentry-rights-rights-legacy": "$1 zmenil členstvo $3 v skupinách",
        "logentry-rights-autopromote": "$1 bol automaticky povýšený z $4 na $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|pridal|pridala}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|nahral|nahrala}} novú verziu $3",
        "log-name-managetags": "Záznam správy značiek",
        "log-description-managetags": "Táto stránka obsahuje zoznam správcovských úkonov týkajúcich sa [[Special:Tags|značiek]]. Záznam obsahuje len akcie, zrealizované manuálne správcom. Značky môže vytvárať a mazať aj priamo softvér wiki, bez zmienky v tomto zázname.",
        "log-name-tag": "Záznam značiek",
index 1991ad6..db48f9a 100644 (file)
@@ -6,12 +6,14 @@
        },
        "tog-underline": "لنک  ہیٹھ لکیر",
        "tog-hideminor": "چھوٹیاں تبدیلیاں لُکاؤ",
+       "tog-hidecategorization": "ورقیاں دیاں قسم بندی لُکاؤ",
        "tog-numberheadings": "سرخیاں کوں خود کار نمبر ݙیوو",
        "tog-showtoolbar": "آلات ترمیم ݙکھاؤ",
        "tog-editondblclick": "ڈبل کلک نال ورقے وچ تبدیلیاں کرو",
        "tog-oldsig": "تہاݙے موجودہ دستخط:",
        "tog-uselivepreview": "ورقہ ولدا لوڈ کیتے ٻاجھوں نمائش ݙکھاؤ",
        "tog-watchlisthideminor": "چھوٹیاں تبدیلیاں اکھیں ہیٹھ فہرست وچوں لکاؤ",
+       "tog-watchlisthidecategorization": "ورقیاں دیاں قسم بندی لُکاؤ",
        "tog-showhiddencats": "لڳیاں قسماں ݙکھاؤ",
        "underline-always": "ہمیشہ",
        "underline-never": "کݙاہیں وی کائناں",
        "view": "ݙکھالے",
        "view-foreign": "$1 تے ݙیکھو",
        "edit": "لکھو",
+       "edit-local": "مقامی تفصیل درج کرو",
        "create": "بݨاؤ",
        "create-local": "آپنی لکھت رلاؤ",
        "delete": "مٹاؤ",
        "jumptonavigation": "رہنمائی",
        "jumptosearch": "ڳولو",
        "pool-errorunknown": "نامعلوم غلطی",
+       "poolcounter-usage-error": "استعمال وچ خامی: $1",
        "aboutsite": "{{SITENAME}} دا تعارف",
        "aboutpage": "Project:تعارف",
        "copyrightpage": "{{ns:project}}:حقوق تصانیف",
        "editlink": "لکھو",
        "viewsourcelink": "ماخذ ݙیکھو",
        "editsectionhint": "حصہ لکھو: $1",
-       "toc": "حصے",
+       "toc": "شاÙ\85Ù\84 Ø­ØµÛ\92",
        "showtoc": "ݙیکھاؤ",
        "hidetoc": "لُکاؤ",
        "collapsible-collapse": "لکاؤ",
        "confirmable-no": "کو",
        "viewdeleted": "ݙیکھو $1؟",
        "feedlinks": "فیڈ",
+       "site-rss-feed": "$1 آر.ایس.ایس فیڈ",
        "site-atom-feed": "$1 اٹوم فیڈ",
+       "page-rss-feed": "\"$1\" آر.ایس.ایس فیڈ",
        "page-atom-feed": "$1 اٹوم فیڈ",
        "red-link-title": "$1 (ایہ ورقہ اڄݨ تائیں کائنی بݨیا)",
+       "sort-descending": "ترتیب نزولی",
+       "sort-ascending": "ترتیب صعودی",
        "nstab-main": "ورقہ",
        "nstab-user": "صفحۂ صارف",
        "nstab-media": "میڈیا آلا ورقہ",
        "nosuchspecialpage": "اینجھا کوئی خاص ورقہ کائنی",
        "error": "نقص",
        "databaseerror": "ڈیٹابیس دی غلطی",
+       "databaseerror-query": "کیوری: $1",
+       "databaseerror-function": "فنکشن: $1",
        "databaseerror-error": "نقص: $1",
        "missingarticle-rev": "(دہرائی#: $1)",
        "missingarticle-diff": "(فرق: $1، $2)",
        "internalerror": "اندر دی غلطی",
        "internalerror_info": "اندر دی غلطی:$1",
        "filedeleteerror": "مِسَل \"$1\" کوں مٹایا نی ونڄ سڳیا۔",
+       "cannotdelete-title": "ورقہ\"$1\" نی مٹا سڳدے",
        "badtitle": "بھیڑا عنوان",
        "viewsource": "ماخذ ݙیکھو",
        "viewsource-title": "$1 دا مسودہ ݙیکھو",
        "viewsourcetext": "تساں ایں ورقے کوں صرف ݙیکھ تے ماخز نقل کر سڳدے ہو لیکن تبدیلی نہوے کر سڳدے",
+       "exception-nologin": "لاگ ان نہوے تھئے",
+       "cannotlogoutnow-title": "ہݨ لاگ ان نہوے تھی سڳدے",
+       "welcomeuser": "خوش آمدید، $1!",
        "yourname": "صارف دا ناں",
        "userlogin-yourname": "صارف ناں",
        "userlogin-yourname-ph": "آپݨا ورتݨ ناں صارف درج کرو",
        "cannotlogin-title": "لاگ ان نی تھی سڳدے",
        "cannotlogin-text": "لاگ ان تھیوݨ ناممکن ہے",
        "cannotloginnow-title": "ہݨ لاگ ان نہوے تھی سڳدے",
+       "cannotcreateaccount-title": "کھاتے نہوے بݨا سڳدے",
+       "yourdomainname": "تہاݙی ڈومین:",
        "login": "لاگ ان تھیوو",
+       "login-security": "آپݨی سنڄاݨ دی تصدیق کرو",
+       "nav-login-createaccount": "لاگ ان / کھاتہ کھولو",
        "logout": "لاگ آؤٹ",
        "userlogout": "لاگ آؤٹ",
        "notloggedin": "لاگ ان نہوے تھئے",
        "createaccount": "کھاتہ کھولو",
        "userlogin-resetpassword-link": "پاسورڈ بھل ڳئے ہو؟",
        "userlogin-helplink2": "لاگ ان تھیوݨ کیتے مدد دی لوڑ ہے؟",
+       "userlogin-createanother": "اپݨاں  نواں کھاتہ کھولو",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "ای-میل پتہ، آپشنل",
        "createacct-email-ph": "اپنا ای-میل پتہ لکھو",
        "createacct-another-email-ph": "اپنا ای-میل پتہ لکھو",
+       "createacct-realname": "اصلی ناں (اختیاری)",
        "createacct-reason": "سبب",
        "createacct-submit": "اپݨاں کھاتا کھولو",
        "createacct-another-submit": "کھاتہ کھولو",
+       "createacct-continue-submit": "کھاتہ بݨاوݨ جاری رکھو",
+       "createacct-another-continue-submit": "کھاتہ بݨاوݨ جاری رکھو",
        "createacct-benefit-heading": "{{SITENAME}} تہاݙے وانگوں علم دوست افراد دا مرہون منت ہے۔",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "createacct-benefit-body2": "\n$1 {{PLURAL:$1|ورقہ|ورقے}}",
        "createacct-error": "کھاتہ بݨاوݨ وچ غلطی",
        "loginsuccesstitle": "لاگ ان تھی ڳیا",
        "mailmypassword": "نواں پاس ورڈ بݨاؤ",
+       "emailconfirmlink": "آپݨے ای میل پتے دی تصدیق کرو",
+       "emaildisabled": "ایہ سائٹ ای میل نی بھیج سڳدی۔",
        "accountcreated": "کھاتہ کھل ڳیا",
        "loginlanguagelabel": "زبان: $1",
        "pt-login": "لاگ ان تھیوو",
        "pt-login-button": "لاگ ان تھیوو",
+       "pt-login-continue-button": "لاگ ان جاری رکھو",
        "pt-createaccount": "کھاتہ کھولو",
        "pt-userlogout": "لاگ آؤٹ",
        "changepassword": "پاس ورڈ تبدیل کرو",
+       "resetpass_header": "پاس ورڈ بدلو",
        "oldpassword": "پراݨا پاس ورڈ",
        "newpassword": "نواں پاس ورڈ",
        "retypenew": "نواں پاس ورڈ ولدا لکھو",
+       "botpasswords": "بوٹ پاس ورڈ",
+       "botpasswords-label-appid": "بوٹ ناں:",
        "botpasswords-label-create": "بݨاؤ",
        "botpasswords-label-update": "اپ ݙیٹ",
        "botpasswords-label-cancel": "منسوخ",
        "passwordreset-domain": "ڈومین",
        "passwordreset-email": "ای میل پتہ",
        "passwordreset-emailtitle": "{{SITENAME}} کھاتہ دی تفصیلات",
+       "passwordreset-invalidemail": "ای۔میل پتہ درست کائنی",
+       "changeemail-oldemail": "موجودہ ای میل پتہ:",
+       "changeemail-newemail": "نواں ای میل پتہ",
        "changeemail-none": "(کوئی وی کائنی)",
        "changeemail-password": "تہاݙا {{SITENAME}} پاس ورڈ:",
        "changeemail-submit": "ای-میل بدلو",
        "preview": "نمائش",
        "showpreview": "نمائش",
        "showdiff": "تبدیلیاں ݙکھاؤ",
+       "subject-preview": "موضوع دی نمائش:",
+       "blockedtitle": "ورتݨ آلا بلاک ہے",
+       "blockednoreason": "کوئی وجہ نی ݙتی ڳئی",
+       "loginreqtitle": "لاگ ان ضروری ہے",
        "loginreqlink": "لاگ ان",
+       "accmailtitle": "پاس ورڈ بھیج ݙتے",
        "newarticle": "(نواں)",
        "userpage-userdoesnotexist-view": "صارف کھاتہ \"$1\" رجسٹرڈ کائنی۔",
+       "updated": "(اپ ڈیٹ تھی ڳیا)",
+       "note": "<strong>نوٹ:</strong>",
        "continue-editing": "خانہ ترمیم وچ ونڄو",
        "editing": "تساں \"$1\" لکھدے پئے ہو",
        "creating": "زیر تخلیق $1",
        "editingsection": "«$1» دے قطعہ دی ترمیم",
+       "editconflict": "تبدیلی رپھڑ: $1",
        "yourtext": "تہاݙی لکھائی",
        "yourdiff": "فرق",
        "templatesused": "ایں ورقے تے  ورتے ڳئے {{PLURAL:$1|سانچے|سانچہ}}:",
        "template-semiprotected": "(نیم محفوظ)",
        "hiddencategories": "ایہ ورقہ {{PLURAL:$1|1 لُکے زمریاں|$1 لکا زمرہ }} وچ شامل ہے:",
        "permissionserrors": "خطائے اجازت",
-       "moveddeleted-notice": "ایہ ورقہ مٹایا ڳیا ہے۔ مٹاوݨ دا لاگ ہیٹھاں ݙتا ہویا ہے",
+       "moveddeleted-notice": "ایہ ورقہ مٹایا ڳیا ہے۔ مٹاوݨ دا لاگ،حفاظت دا لاگ تے ورقہ ٹورݨ دا لاگ  حوالے کیتے ہیٹھاں ݙتے ہوئے ہن۔",
+       "log-fulllog": "پورا لاگ ݙیکھو",
        "content-model-wikitext": "ویکی متن",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا  سکرپٹ",
        "content-json-empty-array": "خالی ایرے",
        "undo-failure": "متنازع تبدیلیاں پاروں ایہ تبدیلی واپس نی تھی سڳدی۔",
        "viewpagelogs": "صفحے دے لاگ ݙیکھو",
+       "currentrev": "موجودہ حالت",
        "currentrev-asof": "حالیہ نسخہ بمطابق $1",
        "revisionasof": "دی تبدیلیاں $1",
        "previousrevision": "→ پراݨا نسخہ",
        "history-feed-title": "ریویژن رکارڈ",
        "history-feed-description": "وکی تے ایں ورقے دی ریویژن ہسٹری",
        "history-feed-item-nocomment": "$2 کوں $1",
+       "rev-deleted-user": "(ورتن آلا ناں مٹ ڳیا)",
        "rev-delundel": "ݙکھاؤ/لکاؤ",
        "rev-showdeleted": "ݙیکھاؤ",
        "revdelete-show-file-submit": "ڄیا",
        "revdelete-hide-comment": "تبدیلی دا خلاصہ",
+       "revdelete-radio-same": "(تبدیل نہ کرو)",
+       "revdelete-radio-set": "پوشیدہ",
+       "revdelete-radio-unset": "ظاہر",
+       "revdelete-log": "سبب:",
+       "deletedhist": "مٹایا ہویا تاریخچہ",
+       "revdelete-reasonotherlist": "ہور وجہ",
+       "revdelete-edit-reasonlist": "مٹاوݨ دی وجہ لکھو",
+       "mergehistory-from": "مآخذ ورقہ:",
        "mergehistory-reason": "سبب",
        "mergelog": "لاگ رلاؤ",
        "revertmerge": "وکھریاں کرو",
        "search-result-size": "$1 ({{PLURAL:$2|1 لفظ|$2 الفاظ}})",
        "search-redirect": "($1 کنوں ولدا رجوع )",
        "search-section": "(قطعہ $1)",
+       "search-category": "(کیٹیگری $1)",
        "search-file-match": "فائل مواد نال ملدا ہے",
        "search-suggest": "بھلا تہاݙا مطلب ہائی: $1",
+       "search-interwiki-more": "(ٻیا)",
+       "search-interwiki-more-results": "ٻئے نتیجے",
+       "search-relatedarticle": "متعلقہ",
+       "searchrelated": "متعلقہ",
        "searchall": "یکے",
        "search-nonefound": "سوال دے نال رلدے ملدے نتارے کائنی۔",
        "powersearch-togglelabel": "ݙیکھو",
        "prefs-skin": "جِلد",
        "skin-preview": "نمائش",
        "datedefault": "کوئی ترجیح کائنی",
+       "prefs-user-pages": "ورتݨ آلے دے ورقے",
+       "prefs-personal": "پروفائل",
+       "prefs-rc": "نویاں تبدیلیاں",
+       "prefs-watchlist": "نظریں ہیٹھ فہرست",
+       "prefs-rendering": "شکل و صورت",
        "saveprefs": "بچاؤ",
        "searchresultshead": "ڳولو",
        "stub-threshold-sample-link": "نمونہ",
        "stub-threshold-disabled": "غیر فعال",
+       "timezonelegend": "ویلے دا علاقہ:",
+       "localtime": "مقامی ویلا:",
        "servertime": "سرور دا وقت:",
        "guesstimezone": "براؤزر توں بھرو۔",
        "timezoneregion-africa": "افریقہ",
        "prefs-registration": "رجسٹریشن ویلہ:",
        "yourrealname": "اصلی ناں:",
        "yourlanguage": "زبان",
+       "yournick": "نویں دستخط:",
        "email": "ای میل",
+       "prefs-help-email-required": "ای میل پتے دی لوڑ ہے۔",
        "prefs-info": "بنیادی معلومات",
        "prefs-i18n": "بین الاقوامیت",
        "prefs-signature": "دستخط",
        "prefs-advancedediting": "عام آپشن",
        "prefs-editor": "خانہ ترمیم",
        "prefs-preview": "نمائش",
+       "prefs-advancedrc": "اعلیٰ اختیارات",
+       "prefs-advancedrendering": "اعلیٰ اختیارات",
+       "prefs-advancedsearchoptions": "اعلیٰ اختیارات",
+       "prefs-advancedwatchlist": "اعلیٰ اختیارات",
        "prefs-tokenwatchlist": "ٹوکن",
+       "prefs-diffs": "فرق",
+       "userrights-reason": "سبب:",
+       "userrights-expiry": "مُکسی:",
+       "userrights-expiry-othertime": "ٻیا ویلا:",
        "group": "گروپ:",
        "group-user": "ورتݨ آلے",
        "group-bot": "بوٹ",
        "group-sysop": "منتظمین",
        "group-all": "(سارے)",
+       "group-user-member": "{{GENDER:$1|ورتݨ آلا}}",
        "grouppage-bot": "{{ns:project}}:بوٹ",
        "grouppage-sysop": "{{ns:project}}:ایڈمنسٹریٹر",
+       "right-upload": "فائلاں چڑھاؤ",
        "right-writeapi": "اے پی آئی تحریر دا استعمال",
+       "right-delete": "ورقے مٹاؤ",
+       "right-editmyoptions": "آپݨیاں ذاتی ترجیحاں لکھو",
+       "grant-group-email": "ای میل بھیجو",
+       "grant-createaccount": "کھاتے کھولو",
+       "grant-basic": "بنیادی حقوق",
        "newuserlogpage": "یوزر بنݨاوݨ آلی لاگ",
        "rightslog": "ورتݨ والے دے حقاں دی لاگ",
+       "action-read": "ایہ ورقہ پڑھو",
        "action-edit": "ایں ورقے تے لکھو",
+       "action-createpage": "ایہ ورقہ بݨاؤ",
        "action-createaccount": "ایہ ورتݨ آلا کھاتہ کھولو",
+       "action-move": "ایہ ورقہ ٹورو",
+       "action-movefile": "ایہ فائل ٹورو",
+       "action-delete": "ایہ ورقہ مٹاؤ",
+       "action-sendemail": "ای میلاں بھیجو",
        "enhancedrc-history": "پچھلا کم",
        "recentchanges": "نویاں تبدیلیاں",
        "recentchanges-legend": "اِختیاراتِ حالیہ تبدیلیاں",
        "rcfilters-savedqueries-unsetdefault": "ݙیفالٹ توں ہٹاؤ",
        "rcfilters-savedqueries-remove": "مٹاؤ",
        "rcfilters-savedqueries-new-name-label": "ناں",
+       "rcfilters-savedqueries-apply-label": "نتارا بݨاؤ",
        "rcfilters-savedqueries-cancel-label": "منسوخ",
+       "rcfilters-filterlist-title": "نتارے",
+       "rcfilters-highlightmenu-title": "رنگ چݨو",
        "rcfilters-filter-bots-label": "ٻوٹ",
+       "rcfilters-filter-minor-label": "معمولی تبدیلیاں",
+       "rcfilters-filtergroup-lastRevision": "موجودہ حالت",
+       "rcfilters-filter-lastrevision-label": "موجودہ حالت",
        "rclistfrom": "$3 $2 توں ہونے آلیاں نویاں تبدیلیاں ݙکھاؤ",
        "rcshowhideminor": "$1 معمولی تبدیلیاں",
        "rcshowhideminor-show": "ݙیکھاؤ",
        "newpageletter": "نواں",
        "boteditletter": " خودکار",
        "rc-change-size-new": "تبدیلی دے بعد $1 {{PLURAL:$1|بائٹ}}",
+       "rc-enhanced-expand": "تفصیل ݙکھاؤ",
+       "rc-enhanced-hide": "تفضیل لکاؤ",
        "rc-old-title": "اصلاً «$1» دے عنوان نال تخلیق شدہ",
        "recentchangeslinked": "رلدیاں ملدیاں تبدیلیاں",
        "recentchangeslinked-feed": "رلدیاں ملدیاں تبدیلیاں",
        "recentchangeslinked-page": "ورقے دا ناں",
        "recentchangeslinked-to": "کھلے ہوئے ورقے دی بجائے ایندے نال جُڑے ہوئے ورقے دیاں تبدیلیاں ݙکھاؤ",
        "upload": "فائل چڑھاؤ",
+       "uploadbtn": "فائل چڑھاؤ",
        "uploadlogpage": "اپلوڈ لاگ",
        "filename": "فائل دا ناں",
        "filedesc": "خلاصہ",
        "filereuploadsummary": "حالیہ تبدیلیاں",
        "filesource": "ماخذ",
        "savefile": "فائل بچاؤ",
+       "upload-source": "اصل فائل",
        "upload-dialog-title": "فائل چڑھاؤ",
        "upload-dialog-button-cancel": "منسوخ",
        "upload-dialog-button-back": "پچھوں",
        "upload-form-label-own-work": "یہ میݙا ذاتی کم ہے",
        "upload-form-label-infoform-categories": "قسماں، زمرے",
        "upload-form-label-infoform-date": "تاریخ",
+       "backend-fail-delete": "مِسَل \"$1\" کوں مٹایا نی ونڄ سڳیا۔",
        "license": "اجازت نامہ:",
        "license-header": "اجازہ کاری",
        "listfiles-delete": "مٹاؤ",
        "sharedupload-desc-here": "ایہ فائل $1 توں ہے تے ݙوجھیاں منصوبیاں تے وی ورتی ویسی۔\nایندی وضاحت [$2 فائل دی وضاحت دا ورقہ]  تے تھلے ݙتی ڳئی۔",
        "filepage-nofile": "ایں ناں دی کوئی فائل کائنی۔",
        "upload-disallowed-here": "تساں ایں فائل تے لکھ نی سڳدے۔",
+       "filerevert-comment": "سبب:",
+       "filerevert-submit": "واپس",
+       "filedelete": "$1 مٹاؤ",
+       "filedelete-legend": "فائل مٹاؤ",
        "filedelete-comment": "سبب:",
        "filedelete-submit": "مٹاؤ",
+       "filedelete-maintenance-title": "مِسل نی مٹا سڳدے",
        "randompage": "رلے ملے ورقے",
+       "randomincategory-category": "قسم:",
        "randomincategory-submit": "ڄلو",
        "statistics": "شماريات",
+       "statistics-pages": "ورقے",
        "pageswithprop-submit": "ڄلو",
        "double-redirect-fixer": "ریڈائرکٹ فکسر",
        "brokenredirects-edit": "لکھو",
        "nbytes": "$1 {{PLURAL:$1|بائٹ}}",
        "nmembers": "{{PLURAL:$1|رکن|اراکین}}",
        "prefixindex": "سارے ورقے بمع سابقہ",
+       "prefixindex-submit": "ݙِکھاؤ",
        "protectedpages-page": "ورقہ",
        "protectedpages-reason": "سبب",
+       "protectedpages-unknown-timestamp": "اݨ سونہاں",
        "listusers": "ورتݨ والیاں دے ناں",
        "newpages": "نویں ورقے",
+       "newpages-submit": "ݙِکھاؤ",
+       "newpages-username": "ورتݨ آلا ناں:",
        "move": "ٹرو",
        "pager-newer-n": "{{PLURAL:$1|newer 1|زیادہ نواں $1}}",
        "pager-older-n": "{{PLURAL:$1|قدیم}} $1",
+       "apisandbox-unfullscreen": "ورقہ ݙکھاؤ",
        "apisandbox-reset": "صاف",
+       "apisandbox-retry": "ولدا کوشش کرو",
+       "apisandbox-results": "نتیجے",
+       "apisandbox-continue": "جاری رکھو",
+       "apisandbox-continue-clear": "صاف",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "ایں مضمون تے کتاباں لبھو",
        "booksources-search": "ڳولو",
        "specialloguserlabel": "کرݨ آلا :",
        "speciallogtitlelabel": "ہدف (عنوان یا {{ns:user}}: صارف کیتے صارف دا ناں):",
        "log": "لاگز",
+       "logeventslist-submit": "ݙِکھاؤ",
        "all-logs-page": "سارےعوامی لاگ",
        "logempty": "لاگ وچ رلدیاں ملدیاں چیزاں کائنی۔",
+       "checkbox-all": "یکے",
+       "checkbox-none": "کوئی وی کائنی",
        "allpages": "سارے مقالے",
+       "nextpage": "اڳلا ورقہ ($1)",
+       "prevpage": "پچھلا ورقہ ($1)",
        "allarticles": "سارے مقالے",
        "allpagessubmit": "ڄلو",
        "allpages-hide-redirects": "رجوع مکررات لکاؤ",
        "categories": "زمرہ",
+       "categories-submit": "ݙِکھاؤ",
+       "deletedcontributions": "ورتݨ آلے دے کم مٹا ݙتے ڳئے",
+       "linksearch-ok": "ڳولو",
+       "listusers-submit": "ݙِکھاؤ",
+       "listgrouprights-group": "گروپ:",
+       "listgrouprights-rights": "حق",
        "listgrouprights-members": "(رکناں دی لسٹ)",
        "emailuser": "ایں ورتݨ والے کوں ای میل کرو",
+       "emailuser-title-notarget": "ای میل ورتݨ آلا",
+       "emailusername": "ورتݨ آلا ناں:",
+       "emailusernamesubmit": "جمع کرواؤ",
+       "emailfrom": "توں:",
+       "emailto": "کوں:",
+       "emailsubject": "عنوان:",
+       "emailmessage": "سنیہا:",
+       "emailsend": "بھیجو",
        "usermessage-editor": "نظامی پیغام رساں",
        "watchlist": "زیرنظر فہرست",
        "mywatchlist": "زیرنظر فہرست",
        "watch": "اکھ تلے رکھو",
        "unwatch": "اکھ ہیٹھوں ہٹاؤ",
        "wlshowlast": "ݙیکھاؤ چھیکڑی $1 گھنٹے $2 ݙینہ",
+       "watchlist-hide": "لُکاؤ",
+       "watchlist-submit": "ݙِکھاؤ",
+       "wlshowtime": "ظاہر تھیوݨ دی مدت:",
+       "wlshowhideminor": "معمولی تبدیلیاں",
+       "wlshowhidebots": "بوٹ",
+       "wlshowhidemine": "میݙیاں تبدیلیاں",
        "watchlist-options": "نظر تھلے رکھݨ دیاں راہواں",
        "enotif_reset": "سارے ورقے ڈیکھ گھدن",
+       "deletepage": "ورقہ مٹاؤ",
+       "confirm": "تصدیق",
+       "delete-confirm": "\"$1\" مٹاؤ",
+       "delete-legend": "مٹاؤ",
+       "historyaction-submit": "ݙِکھاؤ",
        "dellogpage": "مٹاوݨ آلی لاگ",
+       "deletecomment": "سبب:",
        "rollbacklink": "واپس",
+       "rollbacklinkcount": "واپس $1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "changecontentmodel-reason-label": "سبب:",
+       "changecontentmodel-submit": "تبدیل کرو",
+       "logentry-contentmodel-change-revertlink": "واپس",
+       "logentry-contentmodel-change-revert": "واپس",
        "protectlogpage": "بچت لاگ",
        "protectedarticle": "\"[[$1]]\" بچایا گیا اے",
        "modifiedarticleprotection": "«[[$1]]» دا درجہ حفاظت تبدیل کیتا",
+       "protectcomment": "سبب:",
+       "protectexpiry": "مُکسی:",
        "protect-default": "تمام صارفین کوں اجازت ہے",
+       "protect-expiring-local": "مکسی $1",
+       "protect-expiry-indefinite": "لا محدود",
+       "protect-othertime": "ٻیا ویلا:",
+       "protect-othertime-op": "ٻیا ویلا",
        "restriction-edit": "لکھو",
        "restriction-move": "ٹرو",
+       "restriction-create": "بݨاؤ",
+       "restriction-upload": "اپلوڈ",
+       "undelete": "مٹائے ڳئے ورقے ݙیکھو",
+       "undeletecomment": "سبب:",
+       "undelete-search-submit": "ڳولو",
+       "undelete-show-file-submit": "جیا",
        "namespace": "ناں دی جگہ:",
        "invert": "انتخاب معکوس",
        "namespace_association": "رلدے ناں دی تھاں",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "تصویر دے روابط $1",
        "whatlinkshere-filters": "نتارے",
+       "whatlinkshere-submit": "ڄلو",
+       "ipbreason": "سبب:",
+       "autoblocklist-submit": "ڳولو",
+       "blocklist-reason": "سبب:",
        "infiniteblock": "بے انت",
        "blocklink": "پابندی لاؤ",
        "contribslink": "حصے داری",
        "tooltip-t-upload": "فائل چڑھاؤ",
        "tooltip-t-specialpages": "سارے خاص ورقیاں دی تندیر",
        "tooltip-t-print": "ایں ورقے دا چھپݨ آلا انگ ݙیکھو",
-       "tooltip-t-permalink": "اس صفے دے ایں روپ نال پکا جوڑ",
+       "tooltip-t-permalink": "ایں ورقے دی ایں رویژن دا پکا لنک جوڑ",
        "tooltip-ca-nstab-main": "مواد آلا صفہ ݙیکھو",
        "tooltip-ca-nstab-user": "صارف دا ورقہ ݙیکھو",
        "tooltip-ca-nstab-special": "ایہ ہک خاص ورقہ ہے، اینکوں تبدیل نسے کرسڳدے",
        "show-big-image-preview": "ایں نمائش دا حجم:$1",
        "show-big-image-other": "ٻیاں {{PLURAL:$2|قرارداد|قراردادیں}}: $1۔",
        "show-big-image-size": "$1 × $2 پکسلز",
+       "sunday-at": "اتوار بوقت $1",
        "metadata": "میٹا ڈیٹا",
        "metadata-help": "ایں فائل وچ ٻیاں معلومات وی ہن۔ شاید او تہاݙے کیمرے یا سیکنر توں آیاں ہن، جیندے نال تساں ایہ فائل بݨائی ہائی۔\nجے ایہ فائل آپݨی اصل حالت وچ نہ ہووے تاں کجھ معلومات تبدیل تھئی ہوئی فائل دی پوری پوری عکاسی کائناں کریسی۔",
        "metadata-fields": "تصویر دے میٹاڈیٹا دے او خانے جہڑے پیغام میں درج ہن او تصویر دے صفحے تے شامل ہوندے ہن۔ ایہ ااوں ویلے ظاہر تھیندن جڈݨ میٹاڈیٹا کوں ودھایا ونڄے۔\nٻئے خانے شروع وچ لُڳے ہوندن۔\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",
        "tags-active-yes": "ڄیا",
        "tags-active-no": "کو",
        "tags-hitcount": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
+       "diff-form": "فرق",
        "logentry-delete-delete": "$1 {{GENDER:$2|مٹایا ڳیا}} ورقہ $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|بحال تھی ڳیوہے}} page $3 ($4)",
        "revdelete-content-hid": "مواد لکیا",
index ecd7525..0f5b47c 100644 (file)
@@ -51,6 +51,7 @@
        "tog-watchlisthideminor": "Na spisku nadzorov skrij manjša urejanja",
        "tog-watchlisthideliu": "Na spisku nadzorov skrij urejanja prijavljenih uporabnikov",
        "tog-watchlistreloadautomatically": "Samodejno ponovno naloži spisek nadzorov ob spremembi filtra (zahteva JavaScript)",
+       "tog-watchlistunwatchlinks": "Dodaj neposredne povezave za dodajanje/odstranjevanje strani s spiska nadzorov (za funkcionalnost preklopa je zahtevan JavaScript)",
        "tog-watchlisthideanons": "Na spisku nadzorov skrij urejanja anonimnih uporabnikov",
        "tog-watchlisthidepatrolled": "Na spisku nadzorov skrij pregledana urejanja",
        "tog-watchlisthidecategorization": "Skrij kategorizacijo strani",
        "permissionserrorstext-withaction": "Za $2 zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov}} nimate dovoljenja:",
        "contentmodelediterror": "Redakcije ne morete urejati, ker je njen vsebinski model <code>$1</code>, kar se razlikuje od trenutnega vsebinskega modela strani <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Opozorilo: Pišete stran, ki je bila nekoč že izbrisana.'''\n\nPremislite preden nadaljujete s pisanjem, morda bo stran zaradi istih razlogov ponovno odstranjena.\nSpodaj je prikazan dnevnik brisanja in prestavljanja:",
-       "moveddeleted-notice": "Stran je bila izbrisana.\nSpodaj sta za sklicevanje na razpolago dnevnik brisanja in dnevnik prestavljanja strani.",
-       "moveddeleted-notice-recent": "Oprostite, stran je bila nedavno izbrisana (v zadnjih 24 urah).\nDnevnik brisanja in prestavljanj strani je naveden spodaj.",
+       "moveddeleted-notice": "Stran je bila izbrisana.\nSpodaj sta za sklicevanje na razpolago dnevnik brisanja, zaščite in prestavljanja strani.",
+       "moveddeleted-notice-recent": "Oprostite, stran je bila nedavno izbrisana (v zadnjih 24 urah).\nDnevnik brisanja, zaščite in prestavljanja strani je naveden spodaj.",
        "log-fulllog": "Ogled celotnih dnevniških zapiskov",
        "edit-hook-aborted": "Urejanje je bilo brez obrazložitve prekinjeno zaradi neznane napake.",
        "edit-gone-missing": "Strani ni mogoče posodobiti.\nIzgleda, da je bila izbrisana.",
        "tmp-write-error": "Napaka pri pisanju začasne datoteke",
        "large-file": "Priporočeno je, da datoteke niso večje od $1; ta datoteka je $2.",
        "largefileserver": "Velikost datoteke presega strežnikove nastavitve.",
-       "emptyfile": "Kaže, da je aložena datoteka prazna.\nDo tega bi lahko prišlo zaradi tipkarske napake v imenu.\nAli datoteko resnično želite naložiti?",
+       "emptyfile": "Kaže, da je naložena datoteka prazna.\nDo tega bi lahko prišlo zaradi tipkarske napake v imenu.\nAli resnično želite datoteko naložiti?",
        "windows-nonascii-filename": "Ta wiki ne podpira imen datotek s posebnimi znaki.",
        "fileexists": "Datoteka s tem imenom že obstaja. Preden jo {{GENDER:|povozite}}, preverite stran <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
        "filepageexists": "Opisna stran za to datoteko je bila že ustvarjena na <strong>[[:$1]]</strong>, vendar datoteka s tem imenom trenutno ne obstaja.\nPovzetek, ki ste ga vnesli, se ne bo prikazal na opisni strani.\nDa tam prikažete povzetek, morate stran urediti ročno.\n[[$1|thumb]]",
        "compare-invalid-title": "Navedeni naslov ni veljaven.",
        "compare-title-not-exists": "Navedeni naslov ne obstaja.",
        "compare-revision-not-exists": "Navedena redakcija ne obstaja.",
+       "diff-form": "Razlike",
+       "diff-form-oldid": "ID stare redakcije (izbirno)",
+       "diff-form-revid": "ID redakcije razlike",
+       "diff-form-submit": "Prikaži razlike",
+       "permanentlink": "Trajna povezava",
+       "permanentlink-revid": "ID redakcije",
+       "permanentlink-submit": "Pojdi na redakcijo",
        "dberr-problems": "Oprostite! Ta stran se sooča s tehničnimi težavami.",
        "dberr-again": "Poskusite počakati nekaj minut in ponovno naložite stran.",
        "dberr-info": "(Ne morem dostopati do zbirke podatkov: $1)",
index 3c2245f..1cbcf69 100644 (file)
        "compare-invalid-title": "Titulli që keni specifikuar është i pavlefshëm",
        "compare-title-not-exists": "Titulli që keni specifikuar nuk ekziston.",
        "compare-revision-not-exists": "Rishikimi që ju specifikuat nuk ekziston",
+       "diff-form": "'''formë'''",
        "dberr-problems": "Na vjen keq! Kjo faqe po has vështirësi teknike.",
        "dberr-again": "Pritni disa minuta dhe provoni të ringarkoni faqen.",
        "dberr-info": "(Nuk mund të qaset në bazën e të dhënave: $1)",
index 39ecb52..2546fdc 100644 (file)
        "rcfilters-other-review-tools": "<strong>Остали алати за преглед</strong>",
        "rcfilters-grouping-title": "Груписање",
        "rcfilters-activefilters": "Активни филтери",
+       "rcfilters-advancedfilters": "Напредни филтери",
        "rcfilters-limit-title": "Приказати измјена",
        "rcfilters-limit-shownum": "Прикажи посљедњих $1 измјена",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|дан|дана}}",
        "rcfilters-savedqueries-add-new-title": "Сачувај тренутне поставке филтера",
        "rcfilters-restore-default-filters": "Враћање подразумеваних филтера",
        "rcfilters-clear-all-filters": "Уклони све филтере",
-       "rcfilters-show-new-changes": "Прикажи нове измене",
+       "rcfilters-show-new-changes": "Погледајте најновије измене",
        "rcfilters-search-placeholder": "Филтер скорашњих измјена (претражите или почните куцати)",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-noresults-conflict": "Није пронађен ниједан резултат јер су критеријуми претраге сукобљени",
        "rcfilters-filter-user-experience-level-unregistered-label": "Нерегистровани",
        "rcfilters-filter-user-experience-level-unregistered-description": "Уредници који нису пријављени.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новајлије",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Ð\9cање од 10 измјена и 4 дана активности.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "РегиÑ\81Ñ\82Ñ\80овани Ñ\83Ñ\80едниÑ\86и Ñ\81а Ð¼ање од 10 измјена и 4 дана активности.",
        "rcfilters-filter-user-experience-level-learner-label": "Ученици",
-       "rcfilters-filter-user-experience-level-learner-description": "Ð\92ише искуства од „новајлија”, али мање од „искусних корисника”.",
+       "rcfilters-filter-user-experience-level-learner-description": "РегиÑ\81Ñ\82Ñ\80овани Ñ\83Ñ\80едниÑ\86и Ñ\81а Ð²ише искуства од „новајлија”, али мање од „искусних корисника”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Искусни корисници",
-       "rcfilters-filter-user-experience-level-experienced-description": "Ð\9fÑ\80еко 30 Ð´Ð°Ð½Ð° Ð°ÐºÑ\82ивноÑ\81Ñ\82и Ð¸ 500 Ð¸Ð·Ð¼Ñ\98ена.",
+       "rcfilters-filter-user-experience-level-experienced-description": "РегиÑ\81Ñ\82Ñ\80овани Ñ\83Ñ\80едниÑ\86и Ñ\81а Ð²Ð¸Ñ\88е Ð¾Ð´ 500 Ð¸Ð·Ð¼Ñ\98ена Ð¸ 30 Ð´Ð°Ð½Ð° Ð°ÐºÑ\82ивноÑ\81Ñ\82и.",
        "rcfilters-filter-bots-label": "Бот",
        "rcfilters-filter-humans-label": "Човјек (није бот)",
        "rcfilters-filter-patrolled-label": "Патролирано",
        "rcfilters-typeofchange-conflicts-hideminor": "Овај филтер типа измене је у сукобу са филтером за „мање” измене. Одређени типови измена не могу да се означе као „мање”.",
        "rcfilters-filtergroup-lastRevision": "Последња измена",
        "rcfilters-filter-lastrevision-label": "Последња измена",
-       "rcfilters-filter-lastrevision-description": "Ð\9dаÑ\98Ñ\81коÑ\80аÑ\88Ñ\9aиÑ\98а Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86е.",
+       "rcfilters-filter-lastrevision-description": "Само Ð½Ð°Ñ\98новиÑ\98а Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и.",
        "rcfilters-filter-previousrevision-label": "Раније измене",
        "rcfilters-filter-previousrevision-description": "Све измене које нису најскорашњије измене странице.",
+       "rcfilters-view-advanced-filters-label": "Напредни филтери",
        "rcfilters-view-namespaces-tooltip": "Филтер резултата према именском простору",
+       "rcfilters-view-tags-tooltip": "Филтер резултата према ознаци измјене",
        "rcnotefrom": "Испод {{PLURAL:$5|је измена|су измене}} од <strong>$3, $4</strong> (до <strong>$1</strong> приказано).",
        "rclistfromreset": "Ресетуј одабир датума",
        "rclistfrom": "Прикажи нове измене почев од $2 $3",
        "lockedbyandtime": "(од $1 дана $2 у $3)",
        "move-page": "Премештање „$1“",
        "move-page-legend": "Премештање странице",
-       "movepagetext": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови наслов.\nМожете ажурирати преусмерења која воде до изворног наслова;\nпогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом, осим ако је празна, садржи преусмерење или нема историју измена.\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
-       "movepagetext-noredirectfixer": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови наслов.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где би требало да иду.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом, осим ако је она празна, садржи преусмерење или нема историју измена.\nТо значи да можете вратити страницу на претходно место ако погрешите, али не можете заменити постојећу страницу.\n\n<strong>Пажња!</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
+       "movepagetext": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови.\nМожете ажурирати преусмерења која воде до изворног наслова;\nпогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
+       "movepagetext-noredirectfixer": "Доњи образац ће преименовати страницу, премештајући целу историју на ново име.\nСтари наслов постаће преусмерење на нови.\nПогледајте [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмерења.\nНа вама је одговорност да везе и даље иду тамо где треба.\n\nСтраница <strong>неће</strong> бити премештена ако већ постоји страница с тим именом (осим ако је празна, садржи преусмерење или нема историју измена).\nТо значи да можете вратити страницу на претходно име ако погрешите, али не можете ''преписати'' постојећу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану измену за популарну страницу;\nдобро размислите о последицама пре него што наставите.",
        "movepagetalktext": "Ако сте означили овај квадратић, одговарајућа страница за разговор биће аутоматски премештена на нови наслов, осим ако већ постоји страница за разговор са истим насловом.\n\nУ том случају, мораћете ручно да је преместите или спојите, ако има потребе за тим.",
        "moveuserpage-warning": "'''Упозорење:''' на путу сте да преместите корисничку страницу. Имајте у виду да ће само страница бити премештена, а сам корисник ''неће'' бити преименован.",
        "movecategorypage-warning": "<strong>Упозорење:</strong> премештате страницу категорије. Имајте на уму да ће само страница бити премештена и да све странице у старој категорији <em>неће</em> бити рекатегорисане у нову категорију.",
        "timezone-utc": "UTC",
        "duplicate-defaultsort": "<strong>Упозорење:</strong> Подразумевани кључ сврставања „$2“ мења ранији подразумевани кључ сврставања „$1“.",
        "duplicate-displaytitle": "<strong>Упозорење:</strong> наслов за приказ „$2“ замениће постојећи „$1“.",
+       "restricted-displaytitle": "<strong>Упозорење:</strong> Наслов за приказ „$1” је игнорисан пошто није еквивалентан стварном наслову странице.",
        "version": "Верзија",
        "version-extensions": "Инсталирана проширења",
        "version-skins": "Инсталиране теме",
        "compare-invalid-title": "Наведени наслов је неисправан.",
        "compare-title-not-exists": "Наведени наслов не постоји.",
        "compare-revision-not-exists": "Наведена измена не постоји.",
+       "diff-form": "'''форма'''",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
        "dberr-info": "(Не могу приступити бази података: $1)",
index a3d9243..1c752eb 100644 (file)
        "rcfilters-legend-heading": "<strong>Spisak skraćenica:</strong>",
        "rcfilters-other-review-tools": "<strong>Ostali alati za pregled:</strong>",
        "rcfilters-activefilters": "Aktivni filteri",
+       "rcfilters-advancedfilters": "Napredni filteri",
        "rcfilters-limit-title": "Prikazati izmjena",
        "rcfilters-limit-shownum": "Prikaži posljednjih $1 izmjena",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dana|dana}}",
        "rcfilters-filter-newpages-label": "Stvaranje stranica",
        "rcfilters-filter-newpages-description": "Izmjene kojima se stvaraju nove stranice.",
        "rcfilters-filter-logactions-label": "Radnje zabilježene u dnevnicima",
+       "rcfilters-view-advanced-filters-label": "Napredni filteri",
        "rcfilters-view-namespaces-tooltip": "Filter rezultata prema imenskom prostoru",
+       "rcfilters-view-tags-tooltip": "Filter rezultata prema oznaci izmjene",
        "rcnotefrom": "Ispod {{PLURAL:$5|je izmena|su izmene}} od <strong>$3, $4</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove izmene počev od $2 $3",
        "rcshowhideminor": "$1 manje izmene",
        "lockedbyandtime": "(od $1 dana $2 u $3)",
        "move-page": "Premeštanje „$1“",
        "move-page-legend": "Premeštanje stranice",
-       "movepagetext": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi naslov.\nMožete automatski izmeniti preusmerenje do izvornog naslova.\nPogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde bi trebalo da idu.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom, osim ako je ona prazna, sadrži preusmerenje ili nema istoriju izmena.\nTo znači da možete vratiti stranicu na prethodno mesto ako pogrešite, ali ne možete zameniti postojeću stranicu.\n\n<strong>Pažnja!</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
-       "movepagetext-noredirectfixer": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi naslov.\nPogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde bi trebalo da idu.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom, osim ako je ona prazna, sadrži preusmerenje ili nema istoriju izmena.\nTo znači da možete vratiti stranicu na prethodno mesto ako pogrešite, ali ne možete zameniti postojeću stranicu.\n\n<strong>Pažnja!</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
+       "movepagetext": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nMožete ažurirati preusmerenja koja vode do izvornog naslova;\npogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
+       "movepagetext-noredirectfixer": "Donji obrazac će preimenovati stranicu, premeštajući celu istoriju na novo ime.\nStari naslov postaće preusmerenje na novi.\nPogledajte [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|pokvarena]] preusmerenja.\nNa vama je odgovornost da veze i dalje idu tamo gde treba.\n\nStranica <strong>neće</strong> biti premeštena ako već postoji stranica s tim imenom (osim ako je prazna, sadrži preusmerenje ili nema istoriju izmena).\nTo znači da možete vratiti stranicu na prethodno ime ako pogrešite, ali ne možete ''prepisati'' postojeću.\n\n<strong>Napomena:</strong>\nOvo može predstavljati drastičnu i neočekivanu izmenu za popularnu stranicu;\ndobro razmislite o posledicama pre nego što nastavite.",
        "movepagetalktext": "Ako ste označili ovaj kvadratić, odgovarajuća stranica za razgovor biće automatski premeštena na novi naslov, osim ako već postoji stranica za razgovor sa istim naslovom.\n\nU tom slučaju, moraćete ručno da je premestite ili spojite, ako ima potrebe za tim.",
        "moveuserpage-warning": "'''Upozorenje:''' na putu ste da premestite korisničku stranicu. Imajte u vidu da će samo stranica biti premeštena, a sam korisnik ''neće'' biti preimenovan.",
        "movecategorypage-warning": "<strong>Upozorenje:</strong> premeštate stranicu kategorije. Imajte na umu da će samo stranica biti premeštena i da sve stranice u staroj kategoriji <em>neće</em> biti rekategorisane u novu kategoriju.",
        "timezone-utc": "UTC",
        "duplicate-defaultsort": "<strong>Upozorenje:</strong> Podrazumevani ključ svrstavanja „$2“ menja raniji podrazumevani ključ svrstavanja „$1“.",
        "duplicate-displaytitle": "<strong>Upozorenje:</strong> naslov za prikaz „$2“ zameniće postojeći „$1“.",
+       "restricted-displaytitle": "<strong>Upozorenje:</strong> Naslov za prikaz „$1” je ignorisan pošto nije ekvivalentan stvarnom naslovu stranice.",
        "version": "Verzija",
        "version-extensions": "Instalirana proširenja",
        "version-skins": "Instalirane teme",
        "compare-invalid-title": "Navedeni naslov je neispravan.",
        "compare-title-not-exists": "Navedeni naslov ne postoji.",
        "compare-revision-not-exists": "Navedena izmena ne postoji.",
+       "diff-form": "'''forma'''",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
index 6f53839..28ea0ae 100644 (file)
        "tog-shownumberswatching": "Visa antalet användare som bevakar",
        "tog-oldsig": "Din nuvarande signatur:",
        "tog-fancysig": "Behandla signatur som wikitext (utan en automatisk länk)",
-       "tog-uselivepreview": "Använd direktuppdaterad förhandsgranskning",
+       "tog-uselivepreview": "Visa förhandsgranskningar utan att uppdatera sidan",
        "tog-forceeditsummary": "Påminn mig om jag inte fyller i en redigeringskommentar",
        "tog-watchlisthideown": "Dölj mina redigeringar i bevakningslistan",
        "tog-watchlisthidebots": "Visa inte robotredigeringar i bevakningslistan",
        "permissionserrorstext-withaction": "Du har inte behörighet att $2, av följande {{PLURAL:$1|anledning|anledningar}}:",
        "contentmodelediterror": "Du kan inte redigera den här sidversionen eftersom dess innehållsmodell är <code>$1</code> som skiljer sig från sidans aktuella innehållsmodell <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Varning: Du återskapar en sida som tidigare raderats.'''\n\nDu bör överväga om det är lämpligt att fortsätta redigera den här sidan.\nRaderings- och sidflyttningsloggen för den här sidan visas här som hjälp:",
-       "moveddeleted-notice": "Den här sidan har raderats.\nRaderings- och sidflyttningsloggen för sidan visas nedan som referens.",
-       "moveddeleted-notice-recent": "Tyvärr, denna sida raderades nyligen (inom de senaste 24 timmarna).\nLoggen för radering och flyttning av sidan visas nedan som referens.",
+       "moveddeleted-notice": "Den här sidan har raderats.\nRaderings-, skydd- och sidflyttningsloggen för sidan visas nedan som referens.",
+       "moveddeleted-notice-recent": "Tyvärr, denna sida raderades nyligen (inom de senaste 24 timmarna).\nLoggen för radering, skydd och flyttning av sidan visas nedan som referens.",
        "log-fulllog": "Visa fullständig logg",
        "edit-hook-aborted": "Redigering avbruten av hook.\nDen gav ingen förklaring.",
        "edit-gone-missing": "Kunde inte uppdatera sidan.\nDet verkar som att den har raderats.",
        "prefs-editwatchlist-clear": "Rensa din bevakningslista",
        "prefs-watchlist-days": "Antal dygn som skall visas i bevakningslistan:",
        "prefs-watchlist-days-max": "Maximalt $1 {{PLURAL:$1|dag|dygn}}",
-       "prefs-watchlist-edits": "Maximalt antal redigeringar som visas i utökad bevakningslista:",
+       "prefs-watchlist-edits": "Maximalt antal redigeringar som visas i bevakningslistan:",
        "prefs-watchlist-edits-max": "Maximalt antal: 1 000",
        "prefs-watchlist-token": "Bevakningslistsnyckel:",
        "prefs-misc": "Diverse",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Visa",
        "rcfilters-legend-heading": "<strong>Lista över förkortningar:</strong>",
-       "rcfilters-other-review-tools": "<strong>Andra granskningsverktyg:</strong>",
+       "rcfilters-other-review-tools": "<strong>Andra granskningsverktyg</strong>",
+       "rcfilters-group-results-by-page": "Gruppera resultat efter sida",
+       "rcfilters-grouping-title": "Gruppering",
        "rcfilters-activefilters": "Aktiva filter",
        "rcfilters-advancedfilters": "Avancerade filter",
        "rcfilters-limit-title": "Ändringar att visa",
-       "rcfilters-limit-shownum": "Visa de senaste $1 ändringarna",
+       "rcfilters-limit-shownum": "Visa {{PLURAL:$1|den senaste ändringen|de senaste $1 ändringarna}}",
        "rcfilters-days-title": "Senaste dagarna",
        "rcfilters-hours-title": "Senaste timmarna",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dag|dagar}}",
        "rcfilters-savedqueries-add-new-title": "Spara filterinställningar",
        "rcfilters-restore-default-filters": "Återställ standardfilter",
        "rcfilters-clear-all-filters": "Rensa alla filter",
-       "rcfilters-show-new-changes": "Visa nya ändringar",
+       "rcfilters-show-new-changes": "Visa nyaste ändringarna",
        "rcfilters-previous-changes-label": "Ändringar som visades tidigare",
        "rcfilters-search-placeholder": "Filtrera senaste ändringar (bläddra eller börja skriva)",
        "rcfilters-invalid-filter": "Ogiltigt filter",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-exclude-button-off": "Exkludera markerade",
        "rcfilters-exclude-button-on": "Exkluderar markerade",
+       "rcfilters-view-advanced-filters-label": "Avancerade filter",
        "rcfilters-view-tags": "Märkta redigeringar",
        "rcfilters-view-namespaces-tooltip": "Filtrera resultat efter namnrymder",
        "rcfilters-view-tags-tooltip": "Filtrera resultat med redigeringsmärken",
        "rcfilters-view-return-to-default-tooltip": "Återvänd till huvudfiltreringsmenyn",
        "rcfilters-liveupdates-button": "Liveuppdateringar",
+       "rcfilters-liveupdates-button-title-on": "Stäng av live-uppdateringar",
+       "rcfilters-liveupdates-button-title-off": "Visa nya ändringar när de händer",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfromreset": "Återställ datumval",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "watching": "Bevakar...",
        "unwatching": "Avbevakar...",
        "watcherrortext": "Ett fel inträffade när du ändrade dina bevakningsinställningarna för \"$1\".",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "Markera alla sidor som besökta",
        "enotif_impersonal_salutation": "{{SITENAME}}användare",
        "enotif_subject_deleted": "{{SITENAME}}sidan $1 har raderats av {{gender:$2|$2}}",
        "import-nonewrevisions": "Inga sidversioner importerades (alla var antingen redan där eller hoppades över p.g.a. fel).",
        "xml-error-string": "$1 på rad $2, kolumn $3 (byte $4): $5",
        "import-upload": "Ladda upp XML-data",
-       "import-token-mismatch": "Sessionsdata har förlorats.\n\nDu kanske har loggats ut. <strong>Var god se till att du fortfarande är inloggad och försök igen.</strong>\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen, samt kontrollera att din webbläsare tillåter kakor från denna webbplats.",
+       "import-token-mismatch": "Sessionsdata har förlorats.\n\nDu kanske har loggats ut. '''Var god se till att du fortfarande är inloggad och försök igen.'''\nOm det fortfarande inte fungerar, prova att [[Special:UserLogout|logga ut]] och logga in igen, samt kontrollera att din webbläsare tillåter kakor från denna webbplats.",
        "import-invalid-interwiki": "Kan inte importera från den angivna wikin.",
        "import-error-edit": "Sidan \"$1\" blev inte importerad eftersom du inte har tillåtelse att redigera den.",
        "import-error-create": "Sidan \"$1\" blev inte importerad eftersom du inte har tillåtelse att skapa den.",
        "compare-invalid-title": "Titeln du angav är ogiltig.",
        "compare-title-not-exists": "Titeln du angav finns inte.",
        "compare-revision-not-exists": "Versionen du angav finns inte.",
+       "diff-form": "Skillnader",
+       "diff-form-oldid": "Gammalt versions-ID (valfritt)",
+       "diff-form-revid": "Versions-ID för diff",
+       "diff-form-submit": "Visa differenser",
+       "permanentlink": "Permanent länk",
+       "permanentlink-revid": "Sidversions-ID",
+       "permanentlink-submit": "Gå till sidversion",
        "dberr-problems": "Ursäkta! Denna sajt har just nu tekniska problem.",
        "dberr-again": "Pröva med att vänta några minuter och ladda om.",
        "dberr-info": "(Kan inte komma åt databasen: $1)",
diff --git a/languages/i18n/tay.json b/languages/i18n/tay.json
new file mode 100644 (file)
index 0000000..baf6ce6
--- /dev/null
@@ -0,0 +1,538 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Akamycoco",
+                       "Corainn",
+                       "Hitaypayan",
+                       "Temu19900728",
+                       "Translatealcd"
+               ]
+       },
+       "sunday": "Hngawan ryax",
+       "monday": "’Ringan qutux hngawan",
+       "tuesday": "Tay sazing ryax qutux hngawan",
+       "wednesday": "Tay cyugal ryax qutux hngawan",
+       "thursday": "Tay spayat ryax qutux hngawan",
+       "friday": "Tay zmagal ryax qutux hngawan",
+       "saturday": "Smka’ ryax",
+       "sun": "Hngawan ryax",
+       "mon": "Ringan qutux hngawan",
+       "tue": "Tay sazing ryax qutux hngawan",
+       "wed": "Tay cyugal ryax qutux hngawan",
+       "thu": "Tay spayat ryax qutux hngawan",
+       "fri": "Tay zmagal ryax qutux hngawan",
+       "sat": "Smka’ ryax",
+       "january": "Tay qutux byacing",
+       "february": "Tay sazing byacing",
+       "march": "Tay cyugal byacing",
+       "april": "Tay spayat byacing",
+       "may_long": "Tay ymagal byacing",
+       "june": "Tay mtzyu’ byacing",
+       "july": "Tay mpitu’ byacing",
+       "august": "Tay mspat byacing",
+       "september": "Tay mqiru’ byacing",
+       "october": "Tay mawpuw byacing",
+       "november": "Tay mawpuw qutux byacing",
+       "december": "Tay mawpuw sazing byacing",
+       "january-gen": "tay qutux byacing",
+       "february-gen": "Tay sazing byacing",
+       "march-gen": "Tay cyugal byacing",
+       "april-gen": "Tay spayat byacing",
+       "may-gen": "Tay ymagal byacing",
+       "june-gen": "Tay mtzyu’ byacing",
+       "july-gen": "Tay mpitu’ byacing",
+       "august-gen": "Tay mspat byacing",
+       "september-gen": "Tay mqiru’ byacing",
+       "october-gen": "Tay mawpuw byacing",
+       "november-gen": "Tay mawpuw qutux byacing",
+       "december-gen": "Tay mawpuw sazing byacing",
+       "jan": "Tay qutux byacing",
+       "feb": "Tay sazing byacing",
+       "mar": "Tay cyugal byacing",
+       "apr": "Tay spayat byacing",
+       "may": "Tay ymagal byacing",
+       "jun": "Tay mtzyu’ byacing",
+       "jul": "Tay mpitu’ byacing",
+       "aug": "Tay mspat byacing",
+       "sep": "Tay mqiru’ byacing",
+       "oct": "Tay mawpuw byacing",
+       "nov": "Tay mawpuw qutux byacing",
+       "dec": "Tay mawpuw sazing byacing",
+       "january-date": "tay qutux byacing $1",
+       "february-date": "tay sazing byacing $1",
+       "march-date": "tay cyugal byacing $1",
+       "april-date": "tay spayat byacing $1",
+       "may-date": "tay ymagal byacing $1",
+       "june-date": "tay mtzyu’ byacing $1",
+       "july-date": "tay mpitu’ byacing $1",
+       "august-date": "tay mspat byacing $1",
+       "september-date": "tay mqiru’ byacing $1",
+       "october-date": "tay mawpuw byacing $1",
+       "november-date": "tay mawpuw qutux byacing $1",
+       "december-date": "tay mawpuw sazing byacing $1",
+       "period-am": "AM",
+       "period-pm": "PM",
+       "pagecategories": "{{PLURAL:$1|Pinbuci’ niya’ qmasuw|$1 Pinbuci’ niya’ qmasuw}}",
+       "category_header": "Zngazyan tay qsahuy pintbcyan sa\"$1\"",
+       "subcategories": "Uzyuk na pintbcyan",
+       "category-media-header": "Cyux niya’ ptbcyun na \"$1\" Meti’",
+       "hidden-categories": "{{PLURAL:$1| Lnqing na pintbcyan }}",
+       "category-subcat-count": "{{PLURAL:$2|pintbcyan qaniy ga nanak yaquw qutux uzyuk na pintbcyan quw spgluw niya’.| pintbcyan qaniy ga kwara’ kin na $1 uzyuk na pintbcyan sawn niya uziy, $2 kwara’.}}",
+       "category-article-count": "{{PLURAL:$2| pintbcyan qaniy ga ginkwara’ zngazyan tay suruw. | pintbcyan qaniy ga kwara’ kin $1 pintbcyan tay suruw, $2 kwara’.}}",
+       "category-file-count": "{{PLURAL:$2|Pintbcyan niya’ qaniy ga nanak yaquw nyux niya’ sbiru’ sa hugal qaniy|Pintbcyan niya’ qaniy ga kwara’ kin na biru’ ka $1, psqunun kwara\nga $2 .}}",
+       "listingcontinuesabbrev": "pin’ubuy sa",
+       "about": "Nanu’ quw",
+       "newwindow": "(gyahiy na giqas na kktan)",
+       "cancel": "laxan",
+       "moredotdotdot": "pzyux na’...",
+       "mypage": "qutux qutux gnyahan",
+       "mytalk": "mpkal",
+       "anontalk": "mpkal",
+       "navigation": "Pglaing pzyangay",
+       "and": "&#32; squw &#32",
+       "faq": "FAQ",
+       "namespaces": "Sslalu’ sa kung cyen",
+       "variants": "Qbuci’ pinsbahan",
+       "navigation-heading": "Biru’ na bzyagan pglaing pzyangay",
+       "returnto": " ’bzinah $1",
+       "tagline": "Minkahul squw {{SITENAME}}",
+       "help": "Minblaq kmal",
+       "search": "Hhkangi’",
+       "searchbutton": "Shkangi’",
+       "go": "mtzyuwaw",
+       "searcharticle": "Ptzyuwaw",
+       "history": "Zngazyan binrwan sraral",
+       "history_short": "Kwara’ binrwan sraral",
+       "history_small": "Pinhknyan sraral",
+       "printableversion": "Kinbalay sa musa’ blaq sp’isat",
+       "permalink": "Mrayrhuw na pin’ubuy",
+       "view": "view",
+       "view-foreign": "Psbzih mita’ squ$1",
+       "edit": "Smr’zyut miru’smr’zyut miru’",
+       "create": "ps’rux",
+       "create-local": "Tnwang sa kay’ na rhzyal qasa",
+       "delete": "’muyut",
+       "protect": "mlahang",
+       "protect_change": "smbah",
+       "newpage": "Giqas na zngayan",
+       "talkpagelinktext": "mpkal",
+       "specialpage": "Mnanak na bbrwan",
+       "personaltools": "Qayqaya’ nanak saxa’",
+       "talk": "Spkayal",
+       "views": "Cyens’",
+       "toolbox": "Qayqaya’",
+       "otherlanguages": "Kay’ bzinah",
+       "redirectedfrom": "(wal niya’ t’ringun paykura’ squ $1)",
+       "redirectto": "T’ringun pawsa’ sa",
+       "lastmodifiedat": "Zzngayan qaniy gasinr’zyut niya’ squ pucing balay tay$1 $2.",
+       "jumpto": "Musa’",
+       "jumptonavigation": "Pglaing pzyangay",
+       "jumptosearch": "Hkangi’",
+       "aboutsite": "Nanu’ quw {{SITENAME}}",
+       "aboutpage": "Project: Nanu’ quw",
+       "copyrightpage": "{{ns:project}}:pancyuen",
+       "currentevents": "’Awsan na giqas na Sinbung",
+       "currentevents-url": "Project: Pzyang giqas na sinbung",
+       "disclaimers": "Gaga’ na iyat ppanga’ sikining",
+       "disclaimerpage": "Project: kwara’ qu gaga’ na iyat ppanga’ sikining",
+       "edithelp": "Smbbaq sa ssawn nanu’ miru’ qsahuy na ssr’zyut miru’",
+       "helppage-top-gethelp": "Minblaq kmal",
+       "mainpage": "T’ringan na zzngayan",
+       "mainpage-description": "T’ringan na zzngayan",
+       "policy-url": "Project:Gaga’ na zyuwaw nanak",
+       "portal": "Kkzyup secyun",
+       "portal-url": "Project:kkzyup secyun",
+       "privacy": "Gaga’ na zyuwaw nanak",
+       "privacypage": "Project: Gaga’ na zyuwaw nanak",
+       "ok": "OK",
+       "retrievedfrom": "’Nagal sa \"$1\"",
+       "editsection": "Smr’zyut miru’",
+       "editold": "Smr’zyut miru’",
+       "editlink": "Smr’zyut miru’",
+       "viewsourcelink": "Kta quw llpgan aring sa cin’ringan",
+       "editsectionhint": "Smr’zyut miru’ gnaygay binrwan:$1",
+       "toc": "bnrwan tay qsahuy",
+       "showtoc": "Pkaykita’",
+       "hidetoc": "smbbaq",
+       "confirmable-yes": "Aw’",
+       "confirmable-no": "Iyat",
+       "site-atom-feed": "$1 na tkhulan Atom",
+       "page-atom-feed": "inkhulan na Atom tay $1",
+       "red-link-title": "$1 (ungat zzngayan)",
+       "nstab-main": "Zzngayan",
+       "nstab-user": "Pkt’aniy",
+       "nstab-special": "Mnanak na bbrwan",
+       "nstab-project": "Zngyan na Cwan’an",
+       "nstab-image": "biru’ na zayzyuwaw",
+       "nstab-mediawiki": "pintkaykay’",
+       "nstab-template": "Mopan",
+       "nstab-category": "pintbcyan na mlmlamu’",
+       "mainpage-nstab": "T’ringan na zzngayan",
+       "badtitle": "Ungat zyuwaw na lalu’ na spzyang kkayal",
+       "badtitletext": "Sni’ su’ lalu’ na spzyang kkayal su’ qasa ga ungat zyuwaw niya’, ungat ana nanu’ qsahuy niya’, ini’ ga ini’ su’ ’nblayqiy p’ubuy quw pin’ubuy su’ squw bzinah na kay’, ini’ ga ’mubuy sa sni’ naha’ lalu’ sa Wiki’. \nKuna kya wal su’ syun ka biru’ qasa ga kya’a cyux ’magan sa biru’ na ini’ baqiy mita’ hazi’.",
+       "viewsource": "Kta quw llpgan aring sa cin’ringan",
+       "yourname": "Lalu’ na pptzyuwaw:",
+       "userlogin-yourname": "Lalu’ na pptzyuwaw",
+       "userlogin-yourname-ph": "Brwaniy lalu’ na pptzyuwaw su’",
+       "yourpassword": "Mima’:",
+       "userlogin-yourpassword": "Nanak kung baq sa llpgan qaniy",
+       "userlogin-yourpassword-ph": "Brwaniy Mima’ su’",
+       "userlogin-remembermypassword": "Laxiy zngiy kinzyup maku’",
+       "login": "mzyup",
+       "logout": "mshriq",
+       "userlogout": "mshriq",
+       "userlogin-noaccount": "Ungat canghaw?",
+       "userlogin-joinproject": "Twangiy {{SITENAME}}",
+       "createaccount": "Ps’rux canghaw",
+       "userlogin-resetpassword-link": "Zngyan mima’?",
+       "userlogin-helplink2": "Mzyup musa’ rmaw",
+       "createacct-emailrequired": "Zyusyo na e-meyo’",
+       "createacct-emailoptional": "Zyusyo na e-meyo’ (bruwiy)",
+       "createacct-email-ph": "Brwaniy zyusyo na e-meyo’ su’",
+       "createacct-another-email-ph": "Brwaniy zyusyo na e-meyo’ su’",
+       "createacct-benefit-heading": "{{SITENAME}} hya’ ga ’nagal squw yan isu’ psr’zyut miru’ na squliq pins’rux.",
+       "createacct-benefit-body1": "{{PLURAL:$1|smr’zyut miru’ }}",
+       "createacct-benefit-body2": "{{PLURAL:$1|zzngayan}}",
+       "createacct-benefit-body3": "misuw qaniy na{{PLURAL:$1| smnr’zyut miru’}}",
+       "loginlanguagelabel": "Kay’:$1",
+       "pt-login": "Mzyup",
+       "pt-login-button": "mzyup",
+       "pt-createaccount": "Ps’rux  canghaw",
+       "pt-userlogout": "mshriq",
+       "botpasswords-label-create": "ps’rux",
+       "botpasswords-label-update": "Sbahun giqas",
+       "botpasswords-label-cancel": "laxan",
+       "botpasswords-label-delete": "’muyut",
+       "botpasswords-label-resetpassword": "T’aring lawziy smi’ mima’",
+       "resetpass-submit-cancel": "laxan",
+       "passwordreset": "T’aring lawziy smi’ mima’",
+       "passwordreset-username": "Lalu’ na pptzyuwaw:",
+       "bold_sample": "Qthuy na biru’",
+       "bold_tip": "Qthuy na biru’",
+       "italic_sample": "Mtkkiy na biru’",
+       "italic_tip": "Mtkkiy na biru’",
+       "link_sample": "Spzyang lalu’ na ’ubuy sqaniy",
+       "link_tip": "’nubuy sa qsahuy",
+       "extlink_sample": "http://www.example.com qaniy quw lalu’ na ’ubuy",
+       "extlink_tip": "’ubuy tay bzinah(zngyay su’ yaquw http://quw tqsu’ miru’)",
+       "headline_sample": "Biru’ spzyang lalu’ tay msinqutux",
+       "headline_tip": "Biru’ na spzyang lalu’ na binrwan tay msinsazing",
+       "nowiki_sample": "Si’ quw biru’ na iyat minKs’ xwa’",
+       "nowiki_tip": "Ini’ si’ inlung quw minKs’xwa’ kkayal kay’ na Wiki’",
+       "image_tip": "Pinraw niya’  biru’ na zayzyuwaw",
+       "media_tip": "’ubuy sa biru’ na kwara’ zayzyuwaw",
+       "sig_tip": "Cyux pglgan bnrwan zikang ru ryax nquw binrwan lalu’",
+       "hr_tip": "Swe ping syen (laxiy brwaniy iyal)",
+       "summary": "Lalu’ na spzyang bbiru’ su’",
+       "subject": "spzyang na ptzyuwaw",
+       "minoredit": "Iyat spzyang balay ssr’tun miru’ balay qaniy hya’",
+       "watchthis": "Kmyagal mita’ sa zngayan qaniy",
+       "savearticle": "Cucun qu zngazyan",
+       "showpreview": "Pnaynama’ pkita’ sa misa spkita’ na zayzyuwaw",
+       "showdiff": "Pkaykita’ sinbah",
+       "anoneditwarning": "<strong>Smrhuw kmal:</strong> Ini’ su’ kzyup na’. Maha iy wal su’ sbahun ana inu’ ga, nanu’ quw cyux ki’an na  IP su’ ga musa’ ktan kwara’ squliq. Maha iy <strong>[$1 wal mzyup]</strong> ini’ ga <strong>[$2 ps’rux Canghaw]</strong>,sinr’zyut su’ miru’ qaniy ga musa’ niya’ s’agal sa lalu’ su’ ka nyux mmiru’ qaniy smbbaq, ru musa’ magal sa kwara’ ka qqblayqan na hway naha’.",
+       "loginreqlink": "mzyup",
+       "noarticletext-nopermission": "Ungat ana cikuy knayal sa zyuwaw na qsahuy na lalu’ na kay’ squw nyux ktan sa zngayan qaniy.\nAna su’ s’usa’ sa zngayan tay bzinah \n[[Special:Search/{{PAGENAME}}|hmkangi’ sa puqing lalu’ na zngayan qaniy]], ini’ ga <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hmkangi’ sa m’ubuy sa zyuwaw na bbrwan qutux qutux ryax]</span>,ga ungat kinri’ su’ ms’rux sa zngayan qaniy.",
+       "note": "<strong> pinkita’ niya’ sa pinzga’ :</strong>",
+       "editing": "Nyuw smr’zyut miru’ $1",
+       "editingsection": "smr’zyut miru’ $1 (gnaygay binrwan)",
+       "templatesused": "Zngayan qaniy ga cyux niya’ sptzyuwaw qu nyux sbiru’ hugal qaniy{{PLURAL:$1|mopan}}:",
+       "template-protected": "(klhangan)",
+       "template-semiprotected": "(ana walskun ga baqun smbah)",
+       "hiddencategories": "zngayan qaniy hya’ ga gluw na {{PLURAL:$1|1 lnqing na pintbcyan|$1 lnqing pintbcyan}}na qutux bluw na squliq naha’:",
+       "moveddeleted-notice": "Wal pzyutan quw zngayan qaniy.\nNyux sbiru’ hugal quw wal pzyutan na zngazyan squw sinhzyuwan bniru’ sa qutux qutux ryax aki’ baqun sa ggalan pspngan mita’.",
+       "content-model-wikitext": "Wikitext",
+       "viewpagelogs": "Inblaq mita’ quw bniru’ sa zngazyan qaniy",
+       "currentrev-asof": "Spzyang balay giqas sinbahan squw  $1",
+       "revisionasof": "Gaga’ na pptzyuwaw sa qutux qutux binkgan gaga’",
+       "revision-info": "Nanu’ squ $1 kahul sa {{GENDER:$6|$2}} smnbah squ $7",
+       "previousrevision": "Sinbahan tay glaing",
+       "nextrevision": "Ssbahun babaw nya’→",
+       "currentrevisionlink": "Pzyang giqas na sinhzi’",
+       "cur": "misuw qaniy ga",
+       "last": "tay glaing",
+       "historysize": "({{PLURAL:$1|$1 bzyaqan kkayal na llpgan}})",
+       "rev-delundel": "Smbah sa musa’ slwan mita’",
+       "rev-showdeleted": "Pkaykita’",
+       "revdelete-show-file-submit": "Aw’",
+       "history-title": "Tay \"$1\" na sinbah bniru’ sraral",
+       "difference-title": "Kin ini’ ptnaq sinbahan squw \"$1\"",
+       "lineno": "Tuqiy binkgan binrwan$1:",
+       "editundo": "Psbzinah",
+       "diff-multi-sameuser": "({{PLURAL:ini’ kta quw sinbahan tay kska’ nquw sinbahan  tay $1}})",
+       "searchresults": "Babaw na hinkangi",
+       "searchresults-title": "$1 na babaw hinkangi",
+       "prevn": "tay glaing {{PLURAL:$1|$1}}",
+       "nextn": "tay suruw {{PLURAL:$1|$1}}",
+       "nextn-title": "Pimkaykita’ sa babaw tay {{PLURAL:$1|na pinspngan ktan qasa}}",
+       "shown-title": "Pinkita’ $1 {{PLURAL:$1|babaw nya’| babaw niya’}}squw qutux qutux zzngayan",
+       "viewprevnext": "Psbzih mita’ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Ps’rux zngazyan squw Wiki qaniy \"[[:$1]]\"!</strong>{{PLURAL:$2|0=|Ini’ ga kt’aniy squ zngayan ka wal su’ ’lwan.|Ini’ ga kta sa hinkangi’ naha’ sa bzinah na zngazyan.}}",
+       "searchprofile-articles": "Bnrwan tay qsahuy na zzngazyan",
+       "searchprofile-images": "Twometi’",
+       "searchprofile-everything": "Kwara’",
+       "searchprofile-advanced": "minbayblaq balay",
+       "searchprofile-articles-tooltip": "Hkangi’ sa qsahuy na $1",
+       "searchprofile-images-tooltip": "Hhkangi’ biru’ na bniru’ sa zayzyuwaw",
+       "searchprofile-everything-tooltip": "Hkangi’ kwara’ qu bnrwan tay qsahuy na (kwara’ kin na spkayal sa zzngyan)",
+       "searchprofile-advanced-tooltip": "Hkangi’ sa sniyan nanak Kungcyen nasslalu’",
+       "search-result-size": "$1 ({{PLURAL:$2|1 binrwan|$2 binrwan}})",
+       "search-redirect": "(t’aring pglaing squw $1)",
+       "search-section": "(binkgan sa lalu’ na puqing kkayal squw uzyuk na kkayal tay $1)",
+       "search-suggest": "Imi’ na kay’ su’ ga yasa qasa: $1",
+       "search-interwiki-more": "(pzyux na’)",
+       "searchall": "kwara’",
+       "search-showingresults": "{{PLURAL:$4|tay <strong>$1</strong>pucing niya’, psqunun lga <strong>$3</strong> |tay <strong>$1 - $2</strong> pucing nya’, psqunun lga <strong>$3</strong> pucing nya’}}",
+       "search-nonefound": "Ktan qu bniru’ niya’ ga ungat quw musa’ mtnaq sa tthuzyay sa awsa’ hmkangi’.",
+       "mypreferences": "Sni’ maku’",
+       "prefs-email": "bbzagan sa e-meyo’",
+       "saveprefs": "Cucun",
+       "prefs-editing": "smr’zyut miru’",
+       "searchresultshead": "hhkangi’",
+       "prefs-searchoptions": "hhkangi’",
+       "prefs-files": "biru’ na zayzyuwaw",
+       "youremail": "e-meyo’:",
+       "username": "{{GENDER:$1|Lalu’ na pptzyuwaw}}:",
+       "email": "e-meyo’",
+       "group-user": "kwara’ ka cyux mbing ka qutux qutux ngasal",
+       "group-bot": "squliq na kikay",
+       "group-sysop": "pklahang",
+       "group-user-member": "{{GENDER:$1|kwara’ ka cyux mbing ka qutux qutux ngasal}}",
+       "grouppage-user": "{{ns:project}}: kwara’ ka cyux mbing ka qutux qutux ngasal",
+       "grouppage-bot": "{{ns:project}}:squliq na kikay",
+       "right-writeapi": "Sptzyuwaw squw API",
+       "newuserlogpage": "Ps’rux sa bbiru’ krayryax na pbing nasquliq",
+       "enhancedrc-history": "kwara’ binrwan sraral",
+       "recentchanges": "Sinbahan misuw qaniy",
+       "recentchanges-legend": "Misan sinbahan wwazyaw misuw",
+       "recentchanges-summary": "Sksa’ quw misan sinbah sa misuw qaniy ka zngayan sa Wiki’ qaniy.",
+       "recentchanges-label-newpage": "Cyux ps’rux sa qutux giqas na zzngayan quw sinr’zitan qasa",
+       "recentchanges-label-minor": "Qaniy hya’ ga mszik sa ssr’zitun miru’",
+       "recentchanges-label-bot": "Ssr’zyut miru’ qaniy hya’ ga kikay psr’zyut miru’",
+       "recentchanges-label-unpatrolled": "Iyat pnbzih mita’ na’ quw sinr’zyut bniru’ qaniy",
+       "recentchanges-label-plusminus": "Wayal spkciky sinbahan na(bzyaqan kkayal na llpgan) ka zzngazyan qasa",
+       "recentchanges-legend-heading": "<strong> pinkita’ niya’ sa pinzga’ :</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aniy mita’ sa[[Special:NewPages|giqas na zzngayan]])",
+       "recentchanges-submit": "Pkaykita’",
+       "rcfilters-filter-bots-label": "squliq na kikay",
+       "rclistfrom": "Inkahul misan sinbahan sa $2, $3",
+       "rcshowhideminor": "$1 mszik sa ssr’tun",
+       "rcshowhideminor-show": "Pkaykita’",
+       "rcshowhideminor-hide": "smbbaq",
+       "rcshowhidebots": "$1 squliq na kikay",
+       "rcshowhidebots-show": "Pkaykita’",
+       "rcshowhidebots-hide": "smbbaq",
+       "rcshowhideliu": "$1 wal pbiru’ na pptzyuwaw",
+       "rcshowhideliu-show": "Pkaykita’",
+       "rcshowhideliu-hide": "smbbaq",
+       "rcshowhideanons": "$1 ini’ sbbqan lalu’ na mintzyuwaw",
+       "rcshowhideanons-show": "Pkaykita’",
+       "rcshowhideanons-hide": "smbbaq",
+       "rcshowhidepatr-show": "Pkaykita’",
+       "rcshowhidemine": "$1 sinr’zyut maku’ miru’",
+       "rcshowhidemine-show": "Pkaykita’",
+       "rcshowhidemine-hide": "smbbaq",
+       "rclinks": "Pinkaykita’ sinbah sa $1 smbah squw $2  misuw qaniy",
+       "diff": "Kin’ini’ ptnaq",
+       "hist": "Pinhknyan sraral",
+       "hide": "Lqing",
+       "show": "pkaykita’",
+       "minoreditletter": "cipuq",
+       "newpageletter": "Giqas",
+       "boteditletter": "squliq na kikay",
+       "rc-change-size-new": "sin-nbah$1 {{PLURAL:bzyaqan kkayal na llpgan}}",
+       "recentchangeslinked": "M’ubuy quw zyuwaw na sinbahan",
+       "recentchangeslinked-feed": "M’ubuy quw zyuwaw na sinbahan",
+       "recentchangeslinked-toolbox": "M’ubuy quw zyuwaw na sinbahan",
+       "recentchangeslinked-title": "Wal m’ubuy squw sinbahan na \"$1\"",
+       "recentchangeslinked-summary": "ani mkuw quw cyux niya’ spsbaq ssyansa zngayan tay sqaniy aniy p‘ubuy sa qsahuy kwara’ zzngayan (ini’ ga kwara’ nyux maki’ sqaniy kawayal niya’ s’nakun) ka wayal niya’ bkgun kwara’ qu zngayan ka wayal sbahun.\ncyux  maki’ sa qsahuy na [[Special:Watchlist|bnkuw su’ ka cyux su’ ktan]] ka zngayan ga musa’ niya’  <strong>biru’ qthuy</strong>buru’.",
+       "recentchangeslinked-page": "Palu’ na zzngayan",
+       "recentchangeslinked-to": "Sbah squw m’ay’ubuy zngayan sqaniy ka sinbahan na pinkaykita’ niya’ squw m’ay’ubuy sa sngayan sqaniy",
+       "upload": "Pawsa’ sa kktan zayzyuwaw na biru’",
+       "filename": "Lalu’ na tang’an",
+       "filedesc": "Lalu’ na spzyang bbiru’ su’",
+       "license-header": "Biru’ na gaga’ nqu snwayal hmriq sa kinri’",
+       "imgfile": "biru’ na zayzyuwaw",
+       "listfiles_user": "kwara’ ka cyux mbing ka qutux qutux ngasal",
+       "file-anchor-link": "biru’ na zayzyuwaw",
+       "filehist": "Bniru’ naha’ sa sinr’zyutan na biru’",
+       "filehist-help": "Pphtan ryax/zikang sa kkita’ squw kinblayan biru’ na zayzyuwaw.",
+       "filehist-current": "misuw qaniy",
+       "filehist-datetime": "ryax/zikang",
+       "filehist-thumb": "Swotu’",
+       "filehist-thumbtext": "Pinkcikuy kbalay na syasing squ kinblayan $1",
+       "filehist-user": "kwara’ ka cyux mbing ka qutux qutux ngasal.",
+       "filehist-dimensions": "Sspngan kinkrahu’",
+       "filehist-comment": "Tnwang smbbaq miru’",
+       "imagelinks": "Pptzyuwaw na sinr’zyut biru’",
+       "linkstoimage": "Nyux sbiru’ tay hugal ka {{PLURAL:$1| qutux zngazyan |$1 qutux zngazyan}}sp’ubuy sa biru’ qaniy.",
+       "nolinkstoimage": "Ungat ana qutux wal ’mubuy sa biru’ na ana nanu’ zyuwaw qaniy.",
+       "sharedupload-desc-here": "Tang’an qaniy hya’ ga  kahul squw$1 ruw hazi’ ana wal sptzyuwaw na cwan’an bbzinah. \nTay kyahu’ cyux spkita’ sa Tang’an qaniy hya’ ga cyux squw [$2 Tang’an pinqzyu’ zngayan ] na qsahuy pinqzyuwan.",
+       "upload-disallowed-here": "Iyat su’ bauqn ’mumuk quw biru’ na zayzyuwaw qaniy.",
+       "randompage": "Random page",
+       "statistics": "Sinqunan plpuw",
+       "brokenredirects-edit": "Smr’zyut miru’",
+       "nbytes": "$1 {{PLURAL:$1|qutux llpgan na bzyaqan kkayal}}",
+       "nmembers": "$1 {{PLURAL:$1|pinglgan}}",
+       "usereditcount": "$1 {{PLURAL:$1|smr’zyut miru’}}",
+       "newpages": "Giqas na zzngzyan",
+       "newpages-username": "Lalu’ na pptzyuwaw:",
+       "move": "smhzi’",
+       "pager-older-n": "{{PLURAL:$1|smural hazi’ quw $1}}",
+       "booksources": "Brbiru’ na inkhulan na pila’",
+       "booksources-search-legend": "Hkangi’ tkhulan pila’ na brbiru’",
+       "booksources-search": "Hkangi’",
+       "log": "Bniru",
+       "allarticles": "Kwara’ biru’ na zngyan",
+       "allpagessubmit": "mtzyuwaw",
+       "categories": "Pintbcyan",
+       "linksearch-ok": "hhkangi’",
+       "emailusername": "Lalu’ na pptzyuwaw:",
+       "watchlist": "Cyes’ cingtan",
+       "mywatchlist": "Kta quw binkgan biru’",
+       "watch": "Kita’",
+       "wlshowhidebots": "squliq na kikay",
+       "wlshowhideanons": "inqing lalu’ nqu squliq cyux mbing",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
+       "enotif_impersonal_salutation": "{{SITENAME}} kwara’ ka cyux mbing ka qutux qutux ngasal",
+       "enotif_anon_editor": "inqing lalu’ nqu squliq cyux mbing $1",
+       "dellogpage": "Wayal pzyutan ka bniru’ qasa",
+       "rollbacklink": "psbnahun",
+       "rollbacklinkcount": "psbzih $1{{PLURAL:$1|sinr’zyut miru’}}",
+       "pagesize": "(bzyaqan kkayal na llpgan)",
+       "restriction-edit": "Smr’zyut miru’",
+       "restriction-move": "smhzi’",
+       "undelete-search-submit": "hhkangi’",
+       "namespace": "Kung cyen na sslalu’:",
+       "invert": "Mssyuk mwazyaw",
+       "tooltip-invert": "Prawngan mwazyaw squw “bbzyagan” qaniy ga lqingun niya’ quw sinbahan zngazyan na wnwazyaw sa “kungcyen na sslalu’ ” (maha iy prawngan su’ mwazyaw quw gluw na “kungcyen na sslalu’ ” lga, mutuw niya’ siy ptnaqiy lmqing uziy kwara’ quw gluw na “kungcyen na sslalu’.”)",
+       "namespace_association": "M’ubuy squw \"kungcyen na sslalu’ \" imi’ niya’",
+       "tooltip-namespace_association": "Prawngan mwazyaw squw “bbzyagan” qaniy ga spgluw niya’ kwara’ quw kin na ppkayal sa wnwazyaw kungcyen na sslalu’, ini’ ga tunux lalu’ nquw kungcyen na sslalu’",
+       "blanknamespace": "(Spzyang balay)",
+       "contributions": "{{GENDER:$1| squliq mniru’}}bniru’ na qmnlah biru’",
+       "mycontris": "Snli’ sa binrwan",
+       "anoncontribs": "Snli’ sa binrwan",
+       "month": "Pcingan na sniyan naha’ ryax na byacing:",
+       "year": "Pcingan na sniyan naha’ ryax na kawas",
+       "sp-contributions-logs": "bniru",
+       "sp-contributions-talk": "mpkal",
+       "sp-contributions-submit": "hhkangi’",
+       "whatlinkshere": "Aniy p’ubuy tay lpgan sqaniy",
+       "whatlinkshere-title": "Aniy ’mubuy sa zngayan tay \"$1\"",
+       "whatlinkshere-page": "Zngayan",
+       "linkshere": "Zngayan tay suruw qaniy ga aniy p’ubuy sa <strong>[[:$1]]</strong>:",
+       "isredirect": "t’ringun pawsa’ sa zngayan",
+       "istemplate": " ’nagal sa",
+       "isimage": "’ubuy sa biru’ na ana nanu’ zayzyuwaw",
+       "whatlinkshere-prev": "{{PLURAL:$1|glaing tay|glaing tay $1 }}",
+       "whatlinkshere-next": "{{PLURAL:$1|tay suruw|’mubuy sa $1 }}",
+       "whatlinkshere-links": "←p’ubuy",
+       "whatlinkshere-hideredirs": "t’aring maras lawziy sa spzyang balay sa $1",
+       "whatlinkshere-hidetrans": "’ nagal sa $1",
+       "whatlinkshere-hidelinks": "$1 p’ubuy",
+       "whatlinkshere-filters": "Hmkangi’",
+       "autoblocklist-submit": "hhkangi’",
+       "ipblocklist-submit": "hhkangi’",
+       "blocklink": "qmhut",
+       "contribslink": "wal miq sa pincyuwagan",
+       "movelogpage": "Sinhzyan sa bniru’",
+       "export": "Pawsa’ sa bzinah quwzngayan",
+       "thumbnail-more": "Pkrahu’",
+       "import-upload-filename": "Lalu’ na tang’an:",
+       "tooltip-pt-userpage": "{{GENDER:|Lalu’ su’ sa pptzyuwaw}}sinr’zyut miru’",
+       "tooltip-pt-mytalk": "{{GENDER:|Rwa su’}} zngayan sa spkayal",
+       "tooltip-pt-preferences": "{{GENDER:|Rwa su’}}sni’ maku’ ktan krayryax",
+       "tooltip-pt-watchlist": "Nyux su’ mita’ squw binkgan biru’ na sinbahan sinr’zyut miru’",
+       "tooltip-pt-mycontris": "{{GENDER:|Rwa su’}}binkgan binrwan na squliq mniru’",
+       "tooltip-pt-login": "Kzyup ha sun misu’, ga baliy maha sikiy musa’ su’ mzyup balay",
+       "tooltip-pt-logout": "mshriq",
+       "tooltip-pt-createaccount": "Musa’ misu’ miyan slawkahan maha ps’rux canghaw hru kzyup qsahuy niya ha, ana maha baliy sikiy musa’ maha qasa hiya",
+       "tooltip-ca-talk": "Nanu’quw spkayal squw zyuwaw qsahuy na zzngayan",
+       "tooltip-ca-edit": "Sr’zyut squw zzngayan tay sqaniy",
+       "tooltip-ca-viewsource": "Ana wayal skun quw zngazyan qaniy ga, musa’ su’ baqun musa’ msbaybzih mita’ na’ quw puqing balay lalu’ na binkgan niya’.",
+       "tooltip-ca-history": "Zzngayan qaniy hya’ ga sinbahan sa wayal qasa",
+       "tooltip-ca-watch": "Aniy tmwang sa baqun du’ mita’ na biru’ binkgan ka ggyahan llpgan qaniy",
+       "tooltip-search": "Hmkangi’ sa {{SITENAME}}",
+       "tooltip-search-go": "Maha maki’ balay mtnaq lalu’ sa zzngayan qaniy ga, hala ta’ sa zzngayan qasa.",
+       "tooltip-search-fulltext": "Hhkangi’ sa mtntnaq kay’ niya’ sa zzngayan qaniy",
+       "tooltip-p-logo": "Musa’ sa t’ringan zzngayan",
+       "tooltip-n-mainpage": "Musa’ sa t’ringan zzngayan",
+       "tooltip-n-mainpage-description": "Musa’ sa t’ringan zzngayan",
+       "tooltip-n-portal": "Maki’ sa Cwan’an(sinpngan naha’ zyuwaw) qaniy ga, nanu’ quw musa’ su’ thzyazyun mtzyuwaw, cyux tay inu’ quw musa’ su’ ’lwan ka musa’ su’ sawyan na pcyuwagun",
+       "tooltip-n-currentevents": "Maki’ sa qsahuy sinbung ga, ktan kya quw mtnaq sa zyuwaw cyux sbiru’ gluw na zyuwaw qasa",
+       "tooltip-n-recentchanges": "Aniy paybkuw sa kktan qu misan wal sbahun misuw qaniy ka nyux qsahuy na beki’ qaniy",
+       "tooltip-n-randompage": "Spgluw sa pinkita’ na Randommzyup sa zngayan",
+       "tooltip-n-help": "Hmkangi’ sa musa’ thuzyay sa ppraw",
+       "tooltip-t-whatlinkshere": "Aniy paybkuw kwara’ quw m’ubuy sa zzngayan sqaniy ka gniyahan lpgan",
+       "tooltip-t-recentchangeslinked": "Misan sinbahan sa misuw qaniy lpgan sqaniy ka wayal sp’ubuy sa zzngayan tay bzinah",
+       "tooltip-feed-atom": "Inkhulan na Atom sa zngazyan qaniy",
+       "tooltip-t-contributions": "{{GENDER:$1|nanu’ quw nyux mtzyuwaw qaniy ga}}bnkuw niya’ ka bnrwan niya’",
+       "tooltip-t-upload": "Pawsa’ sa kktan zayzyuwaw na biru’",
+       "tooltip-t-specialpages": "Kwara’ ka binkgan kktan sa mnanak na zzngayan",
+       "tooltip-t-print": "Biru’ ka musa’ blaq sp’insat na gniyahan lpgan",
+       "tooltip-t-permalink": "Sinbahan llpgan ka mrayrhuw pin’ubuy",
+       "tooltip-ca-nstab-main": "Psbzinah mita; qsahuy na zzngayan",
+       "tooltip-ca-nstab-user": "Psbzih mita’ zngayan na cyux mtzyuwaw squliq qaniy.",
+       "tooltip-ca-nstab-special": "Zzngayan qaniy hya’ ga ini’ ptnaq balayna zzngayan, iyat baqun smr’zyut",
+       "tooltip-ca-nstab-project": "Inblaq mita’ quw zngazyan na Cwan’an qaniy",
+       "tooltip-ca-nstab-image": "Psbzih mita’ zzngzyan sa biru’ na bniru’ sa zayzyuwaw",
+       "tooltip-ca-nstab-template": "Kta quw mopan",
+       "tooltip-ca-nstab-category": "psbzih mita’ sa pintbcyan na zngazyan",
+       "tooltip-save": "Sku’ qu wayal su’ sbahun",
+       "tooltip-preview": "Zik na sskun su’ quw sinbahan su’ ga, sbnahiy mita’ quw sinbah su’.",
+       "tooltip-diff": "Aniy pkita’ quw wayal su’ sbahun tay qsahuy niya’",
+       "tooltip-rollback": "ssbu’ sa ’ubuy squ “Psbznahan” lga musa’ baq mbzinah squw sinr’ztan binrwan na misan mniru’ sa wayal qasa",
+       "tooltip-undo": "\"Psbzinah\"hya’ ga mutuw niya’ baqun psbzinah quw sinr’zyut miru’, ruw kahul sa yuran mosu’ gmyah sa pcyuawag na smr’zyut miru’, ana su’ twangan miru’ sa nanu’ quw stwang squw sslalu’ na kkayal qaniy.",
+       "tooltip-summary": "Brwaniy quw lalu’ na spzyang bbiru’ su’",
+       "simpleantispam-label": "Kmyagal sa kana ptayqihiy na niwan saysyup na kay’ na nnanu.\n<strong>Laxiy</strong> brwaniy sa bbrwan qaniy!",
+       "pageinfo-watchers": "Number of page watchers",
+       "pageinfo-toolboxlink": "Zzngayan na ggalan qqbaqan",
+       "pageinfo-contentpage-yes": "Aw’",
+       "nextdiff": "Giqas hazi’ sinr’zyut→",
+       "file-info-size": "$1 × $2 qqblayqan zzyangay, zayzyuwaw biru’ na sspngan kinkrahu’: $3, gluw na mmntnaq MIME: $4",
+       "file-nohires": "Ungat qbaqan miq qutux sa musa’ tthuzyay iyal pkaykita’ sa kinslwan iyal na qayqaya’.",
+       "svg-long-desc": "SVG biru’ na cyux slyan ana nanu’ zayzyuwaw,kinkrahu’ ktan tay babaw\n$1 × $2 tay babaw na Syangsu’,\nsspngan kinkrahu’ kkita’ syasing:$3",
+       "show-big-image": "Spzyang puqing balay na Tang’an",
+       "show-big-image-preview": "Squw tay $1 tay glaing",
+       "show-big-image-other": "Kinbaqun iyal mita’ na kwara’ tay bbzinah na {{PLURAL:$2||}}:$1",
+       "show-big-image-size": "$1 × $2 qqblayqan zzyangay",
+       "ilsubmit": "hhkangi’",
+       "metadata": "Cyuens’cryaw",
+       "metadata-help": "Taki’ sa biru’ na kwara’ zayzyuwaw qaniy ga kwara’ kin na zayzyuwaw bbzinah, kwara’ quw zyuwaw sqaniy ga hazi’ na kahul sa pins’rux na Suwe syangciy ini’ ga tmrang squw cyux ps’rux squw Sken ini’ ga cyux tmrang smr’zyut sa Suwe . \nMaha iy wal sbahun squw puqing balay na biru’ cyux syan squw ana nanu’ zyuwaw lga, iyat hazi’ baqun minblaq ppwah kruma’ quw wal minblayqun miru’ na wayal sbahun na zyuwaw hya’ la.",
+       "metadata-fields": "maki’ squw bnaykgan na pintkaykay’ ka qsahuy na Cyens’cryaw EXIF ga, syun niya’ sa zzngazyan kwara’ kin na Syasing, nanu’ iy mhiriq quw binrwan niya’ Cyens’cryaw lga nanak yaquw nyux sbiru’ hugal ka pintkaykay’ qaniy msthay.\ncyuens’ cryaw bzinah hya’ lga skun niya’ sa llqingun qasa hya’. \n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Ppiray sa iyat ptkkiy ktan quw syasing",
+       "exif-xresolution": "Sweping Cyesitu’",
+       "exif-yresolution": "Cwec’ Cyesitu’",
+       "exif-datetime": "Ryax na sinbah Tang’an squw zikang na sinbahan Tang’an",
+       "exif-make": "Squliq ka pkbalay squw Syasinki’",
+       "exif-model": "Lalu’ na kinblayan Syasingki’",
+       "exif-software": "Ggalan pptzyuwaw sa zyuwaw na Tennaw",
+       "exif-exifversion": "ktan sa kinblayan na Exif",
+       "exif-colorspace": "Hhalan mwazyaw sa qqlah sa ini’ ptnaq  kktan na bbiru’",
+       "exif-datetimeoriginal": "Ryax na sni’ sa Craw squw zikang na sni’ sa Craw",
+       "exif-datetimedigitized": "Ryax na minsuwexwa’ squw zikang na minsuwexwa’",
+       "exif-orientation-1": "Mutuw galan sa puqing pspngan kwara’ na squliq",
+       "namespacesall": "kwara’",
+       "monthsall": "kwara’",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mpkal]])",
+       "redirect-submit": "Ptzyuwaw",
+       "redirect-file": "Lalu’ na tang’an",
+       "fileduplicatesearch-filename": "Lalu’ na tang’an:",
+       "fileduplicatesearch-submit": "hhkangi’",
+       "specialpages": "Mnanak na zzngayan",
+       "tag-filter": "[[Special:Tags|qinlah lalu’]]hhkangi’:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|qinlah lalu’}}]]: $2)",
+       "tags-active-yes": "Aw’",
+       "tags-active-no": "Iyat",
+       "tags-edit": "Smr’zyut miru’",
+       "logentry-delete-delete": "$1 {{GENDER:$2|wal laxan}}zngayan $3",
+       "logentry-move-move": "$1 {{GENDER:$2|wal shzyun}}zngyan $3 squw $4",
+       "logentry-newusers-create": "Wayal tmasuq {{GENDER:$2|ps’rux sq }} quw cin canghaw $1",
+       "logentry-upload-upload": "$1 {{GENDER:$2|wal pawsun }} $3",
+       "searchsuggest-search": "Hhkangi’ {{SITENAME}}",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 bzyaqan kkayal na llpgan}} ($2; $3%)",
+       "authmanager-email-label": "e-meyo’"
+}
index 493d2e6..547c09c 100644 (file)
        "allmessages-filter": "కస్టమైజేషను స్థితిని బట్టి వడకట్టు:",
        "allmessages-filter-unmodified": "మార్చబడనివి",
        "allmessages-filter-all": "అన్నీ",
-       "allmessages-filter-modified": "మారà±\8dà°\9aబడినవి",
+       "allmessages-filter-modified": "à°\85à°¨à±\81వదిà°\82à°\9aినవి",
        "allmessages-prefix": "ఉపసర్గ పై వడపోత:",
        "allmessages-language": "భాష:",
        "allmessages-filter-submit": "వెళ్ళు",
        "compare-invalid-title": "మీరు ఇచ్చిన శీర్షిక చెల్లనిది.",
        "compare-title-not-exists": "మీరు పేర్కొన్న శీర్షిక లేనే లేదు.",
        "compare-revision-not-exists": "మీరు పేర్కొన్న కూర్పు లేనే లేదు.",
+       "diff-form": "ఒక '''ఫారం'''",
        "dberr-problems": "క్షమించండి! ఈ సైటు సాంకేతిక సమస్యలని ఎదుర్కొంటుంది.",
        "dberr-again": "కొన్ని నిమిషాలాగి మళ్ళీ ప్రయత్నించండి.",
        "dberr-info": "(డేటాబేసును చేరలేకున్నాం: $1)",
index a6fde72..ad083e9 100644 (file)
@@ -75,9 +75,9 @@
        "tog-prefershttps": "ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อเข้าสู่ระบบแล้ว",
        "underline-always": "ทุกครั้ง",
        "underline-never": "ไม่",
-       "underline-default": "à¸\84à¹\88าà¹\80ริà¹\88มà¸\95à¹\89à¸\99ของหน้าตาหรือเบราว์เซอร์",
+       "underline-default": "à¸\84à¹\88าà¸\9bริยายของหน้าตาหรือเบราว์เซอร์",
        "editfont-style": "รูปแบบชุดแบบอักษรในพื้นที่แก้ไข:",
-       "editfont-default": "à¸\84à¹\88าà¹\80ริà¹\88มà¸\95à¹\89à¸\99ของเบราว์เซอร์",
+       "editfont-default": "à¸\84à¹\88าà¸\9bริยายของเบราว์เซอร์",
        "editfont-monospace": "ชุดอักษรแบบความกว้างคงที่",
        "editfont-sansserif": "ชุดอักษรแบบไม่มีเชิง",
        "editfont-serif": "ชุดอักษรแบบมีเชิง",
        "postedit-confirmation-restored": "กู้คืนหน้าแล้ว",
        "postedit-confirmation-saved": "บันทึกการแก้ไขของคุณแล้ว",
        "edit-already-exists": "ไม่สามารถสร้างหน้าใหม่ได้\nเพราะมีแล้ว",
-       "defaultmessagetext": "à¸\82à¹\89อà¸\84วามสารà¹\82à¸\94ยà¸\9bริยาย",
+       "defaultmessagetext": "ข้อความสารปริยาย",
        "content-failed-to-parse": "แจงส่วนเนื้อหา $2 ของตัวแบบ $1 ล้มเหลว: $3",
        "invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
        "content-not-allowed-here": "ไม่อนุญาตเนื้อหา \"$1\" ในหน้า [[$2]]",
        "content-model-css": "CSS",
        "content-json-empty-object": "วัตถุเปล่า",
        "content-json-empty-array": "แถวเปล่า",
+       "duplicate-args-warning": "<strong>คำเตือน:</strong> [[:$1]] กำลังเรียกใช้ [[:$2]] ด้วยค่ามากกว่าหนึ่งค่าสำหรับตัวแปร \"$3\" เฉพาะค่าสุดท้ายที่ระบุเท่านั้นจะถูกนำมาใช้",
        "duplicate-args-category": "หน้าที่ใช้อาร์กิวเมนต์ซ้ำในการเรียกแม่แบบ",
        "expensive-parserfunction-warning": "<strong>คำเตือน:</strong> หน้านี้มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป\n\nหน้านี้ควรมีการเรียกใช้น้อยกว่า $2  ครั้ง แต่ปัจจุบันมีการเรียกใช้ $1 ครั้ง",
        "expensive-parserfunction-category": "หน้าที่มีการเรียกใช้ฟังก์ชันแจงส่วนมากเกินไป",
        "prefs-email": "ตัวเลือกอีเมล",
        "prefs-rendering": "การแสดงผล",
        "saveprefs": "บันทึก",
-       "restoreprefs": "à¸\84ืà¸\99à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\97ัà¹\89à¸\87หมà¸\94 (à¹\83à¸\99à¸\97ุà¸\81สà¹\88วà¸\99)",
+       "restoreprefs": "คืนการตั้งค่าปริยายทั้งหมด (ในทุกส่วน)",
        "prefs-editing": "การแก้ไข",
        "searchresultshead": "ค้นหา",
        "stub-threshold": "ความยาวของหน้าที่ใช้เป็นเส้นแบ่งในการระบุหน้าโครง เพื่อจะให้มีการจัดรูปแบบเฉพาะตัว สำหรับลิงก์ที่โยงมายังโครง ($1):",
        "savedrights": "บันทึกกลุ่มผู้ใช้ของ {{GENDER:$1|$1}} แล้ว",
        "timezonelegend": "เขตเวลา:",
        "localtime": "เวลาท้องถิ่น:",
-       "timezoneuseserverdefault": "à¹\83à¸\8aà¹\89à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87วิà¸\81ิ ($1)",
+       "timezoneuseserverdefault": "ใช้ค่าปริยายของวิกิ ($1)",
        "timezoneuseoffset": "อื่น ๆ (ระบุส่วนต่างเวลา)",
        "servertime": "เวลาเซิร์ฟเวอร์:",
        "guesstimezone": "เรียกค่าจากเบราว์เซอร์",
        "allowemail": "เปิดรับอีเมลจากผู้ใช้อื่น",
        "prefs-searchoptions": "ค้นหา",
        "prefs-namespaces": "เนมสเปซ",
-       "default": "à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยาย",
+       "default": "ค่าปริยาย",
        "prefs-files": "ไฟล์",
        "prefs-custom-css": "สไตล์ชีตปรับแต่งเอง",
        "prefs-custom-js": "จาวาสคริปต์ปรับแต่งเอง",
        "prefs-common-css-js": "CSS / จาวาสคริปต์รวมสำหรับทุกหน้าตา:",
-       "prefs-reset-intro": "à¸\84ุà¸\93สามารà¸\96à¹\83à¸\8aà¹\89หà¸\99à¹\89าà¸\99ีà¹\89à¸\95ัà¹\89à¸\87à¸\81ารà¸\95ัà¹\89à¸\87à¸\84à¹\88าà¸\82อà¸\87à¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\84à¹\88าà¹\82à¸\94ยà¸\9bริยายà¸\82อà¸\87à¹\80วà¹\87à¸\9aà¹\83หมà¹\88\nà¹\84มà¹\88สามารà¸\96à¸\97ำà¸\81ลัà¸\9aà¹\84à¸\94à¹\89",
+       "prefs-reset-intro": "คุณสามารถใช้หน้านี้ตั้งการตั้งค่าของคุณเป็นค่าปริยายของเว็บใหม่\nไม่สามารถทำกลับได้",
        "prefs-emailconfirm-label": "การยืนยันอีเมล:",
        "youremail": "อีเมล:",
        "username": "{{GENDER:$1|ชื่อผู้ใช้}}:",
        "recentchanges-submit": "แสดง",
        "rcfilters-activefilters": "ตัวกรองที่ทำงาน",
        "rcfilters-advancedfilters": "ตัวกรองขั้นสูง",
+       "rcfilters-days-show-days": "$1 วัน",
+       "rcfilters-days-show-hours": "$1 ชั่วโมง",
        "rcfilters-quickfilters": "ตัวกรองที่บันทึกไว้",
        "rcfilters-quickfilters-placeholder-title": "ยังไม่มีลิงก์ที่บันทึกไว้",
        "rcfilters-savedqueries-defaultlabel": "ตัวกรองที่บันทึกไว้",
        "rcfilters-savedqueries-new-name-label": "ชื่อ",
        "rcfilters-savedqueries-new-name-placeholder": "อธิบายจุดประสงค์ของตัวกรอง",
        "rcfilters-savedqueries-apply-label": "สร้างตัวกรอง",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "สร้างตัวกรองปริยาย",
        "rcfilters-savedqueries-cancel-label": "ยกเลิก",
        "rcfilters-savedqueries-add-new-title": "บันทึกการตั้งค่าตัวกรองปัจจุบัน",
        "rcfilters-restore-default-filters": "คืนค่าตัวกรองปริยาย",
        "rcfilters-highlightmenu-help": "เลือกสีสำหรับเน้นการแสดงคุณสมบัตินี้",
        "rcfilters-filterlist-noresults": "ไม่พบตัวกรองใด ๆ",
        "rcfilters-noresults-conflict": "ไม่พบผลลัพธ์ เนื่องจากเงื่อนไขการค้นขัดแย้งกัน",
-       "rcfilters-filtergroup-registration": "การลงทะเบียนผู้ใช้",
-       "rcfilters-filter-registered-label": "ลงทะเบียน",
-       "rcfilters-filter-registered-description": "ผู้แก้ไขที่ล็อกอินแล้ว",
-       "rcfilters-filter-unregistered-label": "ไม่ได้ลงทะเบียน",
-       "rcfilters-filter-unregistered-description": "ผู้แก้ไขที่ไม่ได้ล็อกอิน",
        "rcfilters-filter-editsbyself-label": "การแก้ไขของคุณเอง",
        "rcfilters-filter-editsbyself-description": "การแก้ไขต่าง ๆ ที่คุณทำ",
        "rcfilters-filter-editsbyother-label": "การแก้ไขต่าง ๆ ที่ผู้อื่นทำ",
        "rcfilters-filter-editsbyother-description": "การแก้ไขต่าง ๆ ที่ผู้ใช้อื่นทำ (ไม่ใช่คุณ)",
        "rcfilters-filtergroup-userExpLevel": "ระดับผู้เชี่ยวชาญ (สำหรับผู้ใช้ที่ลงทะเบียนเท่านั้น)",
+       "rcfilters-filter-user-experience-level-registered-label": "ลงทะเบียน",
+       "rcfilters-filter-user-experience-level-registered-description": "ผู้แก้ไขที่ล็อกอินแล้ว",
+       "rcfilters-filter-user-experience-level-unregistered-label": "ไม่ได้ลงทะเบียน",
+       "rcfilters-filter-user-experience-level-unregistered-description": "ผู้แก้ไขที่ไม่ได้ล็อกอิน",
        "rcfilters-filter-user-experience-level-newcomer-label": "ผู้ที่มาใหม่",
        "rcfilters-filter-user-experience-level-experienced-label": "ผู้ใช้ที่มีความเชี่ยวชาญ",
        "rcfilters-filter-minor-label": "การแก้ไขเล็กน้อย",
        "upload-form-label-own-work": "นี่เป็นงานสร้างสรรค์ของฉันเอง",
        "upload-form-label-infoform-categories": "หมวดหมู่",
        "upload-form-label-infoform-date": "วันที่",
+       "upload-form-label-not-own-work-local-generic-local": "คุณอาจต้องการทดลองใช้[[Special:Upload|หน้าอัปโหลดปริยาย]]",
        "backend-fail-backup": "ไม่สามารถสำรองไฟล์ \"$1\"",
        "backend-fail-notexists": "ไม่มีไฟล์ $1",
        "backend-fail-hashes": "ไม่สามารถดึง hash ของไฟล์ เพื่อใช้เปรียบเทียบ",
        "fileduplicatesearch-noresults": "ไม่พบไฟล์ที่มีชื่อ \"$1\"",
        "specialpages": "หน้าพิเศษ",
        "specialpages-note-top": "คำอธิบายสัญลักษณ์",
-       "specialpages-note": "* หน้าพิเศษปกติ\n* <span class=\"mw-specialpagerestricted\">หน้าพิเศษที่ถูกจำกัด</span>",
        "specialpages-group-maintenance": "รายงานการบำรุงรักษา",
        "specialpages-group-other": "หน้าพิเศษอื่น ๆ",
        "specialpages-group-login": "ล็อกอิน / สร้างบัญชี",
        "compare-invalid-title": "ชื่อเรื่องที่คุณระบุไม่ถูกต้อง",
        "compare-title-not-exists": "ชื่อเรื่องที่คุณระบุไม่มีอยู่",
        "compare-revision-not-exists": "รุ่นที่คุณระบุไม่มีอยู่",
+       "diff-form": "'''แบบฟอร์ม'''",
        "dberr-problems": "ขออภัย เว็บไซต์นี้กำลังพบกับข้อผิดพลาดทางเทคนิค",
        "dberr-again": "กรุณารอสักครู่แล้วจึงโหลดใหม่",
        "dberr-info": "(ไม่สามารถเข้าถึงฐานข้อมูล: $1)",
index f700a7a..a75aaf0 100644 (file)
@@ -20,7 +20,8 @@
                        "Stranger195",
                        "Emem.calist",
                        "Asmen",
-                       "MJPCubelo"
+                       "MJPCubelo",
+                       "Blakegripling ph"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng link:",
        "minoredit": "Ito ay isang munting pagbabago",
        "watchthis": "Bantayan ang pahinang ito",
        "savearticle": "Itala ang pahina",
+       "publishpage": "Ilimbag ang pahina",
        "preview": "Paunang tingin",
        "showpreview": "Paunang tingin",
        "showdiff": "Ipakita ang mga pagbabago",
        "tooltip-ca-nstab-category": "Tingnan ang pahina ng kategorya",
        "tooltip-minoredit": "Tandaan ito bilang isang maliit na pagbabago",
        "tooltip-save": "Sagipin ang iyong mga pagbabago",
+       "tooltip-publish": "Ilimbag ang pagbabago",
        "tooltip-preview": "Paunang-tingnan ang mga pagbabago mo, pakigamit muna ito bago sagipin o magtala!",
        "tooltip-diff": "Ipakita ang mga pagbabagong ginawa mo sa teksto.",
        "tooltip-compareselectedversions": "Tingnan ang pagkakaiba sa pagitan ng dalawang napiling bersyon ng pahinang ito.",
        "fileduplicatesearch-result-n": "Ang talaksan na \"$1\" ay may {{PLURAL:$2|1 kapareho|$2 mga kapareho}}.",
        "fileduplicatesearch-noresults": "Walang natagpuang talaksan na may pangalang \"$1\".",
        "specialpages": "Mga natatanging pahina",
-       "specialpages-note": "* Normal na natatanging mga pahina.\n* <span class=\"mw-specialpagerestricted\">Pinaghihigpitang natatanging mga pahina.</span>",
        "specialpages-group-maintenance": "Mga pagpapanatiling ulat",
        "specialpages-group-other": "Iba pang natatanging mga pahina",
        "specialpages-group-login": "Mag-login / lumikha ng account",
        "compare-invalid-title": "Hindi katanggap-tanggap ang tinukoy mong pamagat.",
        "compare-title-not-exists": "Hindi umiiral ang tinukoy mong pamagat.",
        "compare-revision-not-exists": "Hindi umiiral ang tinukoy mong rebisyon.",
+       "diff-form": "isang '''pormularyo'''",
        "dberr-problems": "Paumanhin! Dumaranas ng mga kahirapang teknikal ang sityong ito.",
        "dberr-again": "Subuking maghintay ng ilang mga minuto at muling magkarga.",
        "dberr-info": "(Hindi makaugnay sa tagapaghain ng kalipunan ng dato: $1)",
        "searchsuggest-containing": "naglalaman ng ...",
        "api-error-badtoken": "Panloob na kamalian: masamang kahalip.",
        "api-error-emptypage": "Lumilikha ng bago, hindi pinapayagan ang mga pahinang walang laman.",
+       "api-error-publishfailed": "Kamaliang panloob: nabigo ang tagapaghain na magtabi ng pansamantalang talaksan.",
        "api-error-stashfailed": "Panloob na kamalian: nabigo ang tagapaghain na magtabi ng pansamantalang talaksan.",
        "api-error-unknown-warning": "Hindi nalalamang babala: $1",
        "api-error-unknownerror": "Hindi malamang kamalian: \"$1\".",
index b1cbe8d..aad07df 100644 (file)
        "pageinfo-firstuser": "Sayfa oluşturucu",
        "pageinfo-firsttime": "Sayfa oluşturulma tarihi",
        "pageinfo-lastuser": "En son düzenleyici",
-       "pageinfo-lasttime": "Son düzenleme tarihi",
+       "pageinfo-lasttime": "Son değişiklik tarihi",
        "pageinfo-edits": "Düzenleme sayısı",
        "pageinfo-authors": "Farklı yazar sayısı",
        "pageinfo-recent-edits": "Son zamanlardaki düzenlemeler (son $1)",
        "compare-invalid-title": "Belirttiğiniz başlık geçersiz.",
        "compare-title-not-exists": "Belirttiğiniz başlık mevcut değil.",
        "compare-revision-not-exists": "Belirttiğiniz sürüm mevcut değil.",
+       "diff-form": "bir '''form'''",
        "dberr-problems": "Üzgünüz! Bu site teknik zorluklar yaşıyor.",
        "dberr-again": "Bir kaç dakika bekleyip tekrar yüklemeyi deneyin.",
        "dberr-info": "(Veritabanı sunucusuyla irtibat kurulamıyor: $1)",
index cd9b832..79af9d4 100644 (file)
        "rcfilters-limit-shownum": "Соңгы $1 үзгәртүне күрсәтү",
        "rcfilters-days-title": "Соңгы көннәр",
        "rcfilters-hours-title": "Соңгы сәгатьләр",
+       "rcfilters-days-show-days": "$1 көн",
+       "rcfilters-days-show-hours": "$1 сәгать",
        "rcfilters-quickfilters": "Сакланган фильтрлар",
+       "rcfilters-savedqueries-add-new-title": "Хәзерге фильтр көйләнмәләрен саклау",
        "rcfilters-clear-all-filters": "Барлык филтерләрне чистарту",
        "rcfilters-search-placeholder": "Фильтрланы соңгы үзгәртү (карау яисә кертүне башлау)",
+       "rcfilters-filterlist-feedbacklink": "Яңа (бета) фильтрләр турында фикер калдыру",
+       "rcfilters-filtergroup-authorship": "Үзгәртүләрнең авторлыгы",
        "rcfilters-filter-editsbyself-label": "Сезнең үзгәртүләр",
+       "rcfilters-filter-editsbyself-description": "Сезнең кертемегез.",
        "rcfilters-filter-editsbyother-label": "Башка кулланучыларның үзгәртүләре",
        "rcfilters-filter-user-experience-level-registered-label": "Теркәлгән",
        "rcfilters-filter-user-experience-level-registered-description": "Теркәлгән мөхәррирләр.",
        "rcfilters-filter-user-experience-level-unregistered-description": "Системага кермәгән мөхәррирләр.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Яңа кулланучылар",
        "rcfilters-filter-user-experience-level-experienced-label": "Тәҗрибәле кулланучылар",
+       "rcfilters-filtergroup-automated": "Автоматлаштырылган кертем",
+       "rcfilters-filter-bots-description": "Автоматлаштырылган кораллар ярдәмендә ясалган үзгәртүләр.",
        "rcfilters-filter-humans-label": "Кеше (бот түгел)",
+       "rcfilters-filter-humans-description": "Кешеләр ясаган үзгәртүләр.",
        "rcfilters-filter-minor-label": "Кече үзгәртүләр",
        "rcfilters-filter-minor-description": "«Кече үзгәртү» дип тамгаланган үзгәртүләр",
        "rcfilters-filter-major-label": "Гади үзгәртүләр",
        "rcfilters-filter-major-description": "«Кече» дип тамгаланмаган үзгәртүләр",
+       "rcfilters-filtergroup-watchlist": "Күзәтү исемлегегездәге битләр",
        "rcfilters-filtergroup-changetype": "Үзгәртү төре",
        "rcfilters-filter-pageedits-label": "Бит үзгәртүләре",
        "rcfilters-filter-newpages-label": "Бит төзүләре",
+       "rcfilters-filter-categorization-label": "Төркем үзгәртүләре",
+       "rcfilters-filter-categorization-description": "Төркемнәргә кушылган яки төркемнәрдән алып ташланган битләр турында язмалар.",
        "rcfilters-filter-logactions-label": "Беркетмәләнүче гамәлләр",
        "rcfilters-filter-logactions-description": "Административ гамәлләр, хисап язмасын төзүләр, битне бетерүләр, файл йөкләүләр...",
        "rcfilters-filter-lastrevision-label": "Соңгы юрама",
+       "rcfilters-filter-lastrevision-description": "Битнең соңгы гына үзгәртүе.",
+       "rcfilters-filter-previousrevision-label": "Соңгы булмаган юрама",
+       "rcfilters-filter-previousrevision-description": "«Соңгы юрама» булмаган барлык үзгәртүләр.",
+       "rcfilters-view-advanced-filters-label": "Киңәйтелгән фильтрлар",
+       "rcfilters-view-tags": "Тәгләнгән үзгәртүләр",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәртүләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
        "rclistfrom": "$3 $2 башлап яңа үзгәртүләрне күрсәт",
        "rcshowhideminor": "кече үзгәртүләрне $1",
index d942cd8..2e07b2b 100644 (file)
                        "아라",
                        "Macofe",
                        "Matma Rex",
-                       "Amire80"
+                       "Amire80",
+                       "Uzdil"
                ]
        },
        "tog-underline": "ئۇلانما ئاستى سىزىقى:",
-       "tog-hideminor": "يېقىنقى ئۆزگەرتىشتە ئازراقلا تەھرىرنى يوشۇر",
-       "tog-hidepatrolled": "يېقىنقى ئۆزگەرتىشتە كۆزەتكەن تەھرىرنى يوشۇر",
-       "tog-newpageshidepatrolled": "يېڭى بەت تىزىملىكىدە كۆزەتكەن تەھرىرنى يوشۇر",
-       "tog-extendwatchlist": "كۈچەيتىلگەن كۆزەت تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسەت",
-       "tog-usenewrc": "يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىملىلىگىدىكى بەتلەر ئۆزگىرىشىگە ئاساسەن گۇرۇپپىلا",
+       "tog-hideminor": "يېقىنقى ئۆزگەرتىشىكى كىچىك تەھرىرلەشنى يوشۇرۇش",
+       "tog-hidepatrolled": "يېقىنقى ئۆزگەرتىشتە تەكشۈرۈلگەن تەھرىرلەشنى يوشۇرۇش",
+       "tog-newpageshidepatrolled": "يېڭى بەت تىزىملىكىدە كۆزەتكەن تەھرىرنى يوشۇرۇش",
+       "tog-hidecategorization": "بەت تۈرىنى يوشۇرۇش",
+       "tog-extendwatchlist": "كۆزىتىش تىزىملىكىدە يېقىنقى ئۆزگەرتىشنىلا كۆرسەتمەي بەلكى ھەممە ئۆزگەرتىشنى كۆرسىتىش",
+       "tog-usenewrc": "يېقىنقى ئۆزگەرتىش ۋە كۆزەت تىزىملىلىگىدىكى بەتلەر ئۆزگىرىشىگە ئاساسەن گۇرۇپپىلاش",
        "tog-numberheadings": "ماۋزۇغا ئۆزلۈكىدىن تەرتىپ نومۇرى قوش",
        "tog-showtoolbar": "تەھرىر قورال بالداقنى كۆرسەت",
        "tog-editondblclick": "قوش چەككەندە بەت تەھرىرلە",
@@ -29,6 +31,8 @@
        "tog-watchdefault": "مەن تەھرىرلىگەن بەت ۋە ھۆججەتنى كۆزەت تىزىملىكىمگە قوش",
        "tog-watchmoves": "مەن يۆتكىگەن بەت ۋە ھۆججەتنى كۆزەت تىزىملىكىمگە قوش",
        "tog-watchdeletion": "مەن ئۆچۈرگەن بەت ۋە ھۆججەتنى كۆزەت تىزىملىكىمگە قوش",
+       "tog-watchuploads": "يوللىغان يېڭى ھۆججەتلىرىمنى نازارەت تىزىملىكىگە قوشىمەن",
+       "tog-watchrollback": "قايتقان بەتلەرنى نازارەت تىزىملىكىمگە قوشىمەن",
        "tog-minordefault": "ھەممە تەھرىرلەشنى ئازراقلا تەھرىرگە تەڭشە",
        "tog-previewontop": "تەھرىر رامكىسىنىڭ ئۈستىدە ئالدىن كۆزىتىشنى كۆرسەت",
        "tog-previewonfirst": "تۇنجى قېتىم تەھرىرلىگەندە ئالدىن كۆزىتىشنى كۆرسەت",
        "tog-shownumberswatching": "بۇ بەتنى كۆزىتىۋاتقان ئىشلەتكۈچى سانىنى كۆرسەت",
        "tog-oldsig": "نۆۋەتتىكى ئىمزا:",
        "tog-fancysig": "ئىمزاغا wiki تېكستى سۈپىتىدە مۇئامىلە قىل (ئۆزلۈكىدىن ئۇلانما ھاسىل بولمايدۇ)",
-       "tog-uselivepreview": "جاÙ\86Ù\84Ù\89Ù\82 Ø¦Ø§Ù\84دÙ\89Ù\86 Ù\83Û\86زÙ\89تÙ\89Ø´Ù\86Ù\89 Ø¦Ù\89Ø´Ù\84Û\95ت (سÙ\89Ù\86اÙ\82)",
+       "tog-uselivepreview": "بÛ\95تÙ\86Ù\89 Ù\82اÚ\86Ù\89Ù\84Ù\89Ù\85اÙ\8a ØªÛ\87رÛ\87Ù¾ Ø¦Ø§Ù\84دÙ\89Ù\86 Ù\83Û\86رÛ\88Ø´Ù\86Ù\89 Ù\83Û\86رسÙ\89تÙ\89Ø´",
        "tog-forceeditsummary": "ئۈزۈندە كىرگۈزمىگەندە مېنى ئەسكەرت",
-       "tog-watchlisthideown": "كۆزەت تىزىملىكىدىن مېنىڭ تەھرىرلىگىنىمنى يوشۇر",
-       "tog-watchlisthidebots": "كۆزەت تىزىملىكىدىن ماشىنا ئادەم تەھرىرلىگەننى يوشۇر",
-       "tog-watchlisthideminor": "كۆزەت تىزىملىكىدىن ئازراقلا تەھرىرلىگەننى يوشۇر",
-       "tog-watchlisthideliu": "كۆزەت تىزىملىكىدە تىزىمغا كىرگەن ئىشلەتكۈچىلەرنى يوشۇر",
-       "tog-watchlisthideanons": "كۆزەت تىزىملىكىدە ئىمزاسىز ئىشلەتكۈچىلەرنى يوشۇر",
-       "tog-watchlisthidepatrolled": "كۆزەت تىزىملىكىدىن كۆزىتىلگەن تەھرىرنى يوشۇر",
+       "tog-watchlisthideown": "كۆزىتىش تىزىملىكىدىن تەھرىرلىگىنىمنى يوشۇرىمەن",
+       "tog-watchlisthidebots": "كۆزىتىش تىزىملىكىدىن ماشىنا ئادەم تەھرىرلىگەننى يوشۇرۇش",
+       "tog-watchlisthideminor": "كۆزىتىش تىزىملىكىدىن ئازراقلا تەھرىرلىگەننى يوشۇرۇش",
+       "tog-watchlisthideliu": "كۆزىتىش تىزىملىكىدە تىزىمغا كىرگەن ئىشلەتكۈچىلەرنىڭ تەھرىرىنى يوشۇرۇش",
+       "tog-watchlisthideanons": "كۆزەت تىزىملىكىدە ئىمزاسىز ئابونتلارنى يوشۇرۇش",
+       "tog-watchlisthidepatrolled": "كۆزىتىش تىزىملىكىدىن كۆزىتىلگەن تەھرىرنى يوشۇرۇش",
+       "tog-watchlisthidecategorization": "بەت تۈرىنى يوشۇرۇش",
        "tog-ccmeonemails": "مەن باشقىلارغا يوللىغان ئېلخەتنى ئۆزەمگىمۇ بىر نۇسخا يوللا",
        "tog-diffonly": "تۈزىتىلگەن ئىككى نەشرىنىڭ پەرقىنى سېلىشتۇرغاندا بەت مەزمۇنىنى كۆرسەتمە",
        "tog-showhiddencats": "يوشۇرۇن تۈرلەرنى كۆرسەت",
        "tog-norollbackdiff": "قايتۇرۇشنى ئىجرا قىلغاندىن كېيىن پەرقنى كۆرسەتمە",
        "tog-useeditwarning": "بىر تەھرىرلىگەن بەتنى ساقلىماي چېكىنگەندە مېنى ئەسكەرت",
-       "tog-prefershttps": "تىزىمغا كىرگەندە دائىم بىخەتەر ئۇلىنىشنى ئىشلەت",
+       "tog-prefershttps": "تىزىمغا كىرگەندە دائىم بىخەتەر ئۇلىنىشنى ئىشلىتىمەن",
        "underline-always": "دائىم",
        "underline-never": "ھەرگىز",
        "underline-default": "تېرە ياكى توركۆرگۈ كۆڭۈلدىكىسى",
        "october-date": "$1- ئۆكتەبىر",
        "november-date": "$1- نويابىر",
        "december-date": "$1- دىكابىر",
+       "period-am": "چۈشتىن بۇرۇن",
+       "period-pm": "چۈشتىن كېيىن",
        "pagecategories": "{{PLURAL:$1|تۈر|تۈرلەر}}",
        "category_header": "\"$1\" تۈردىكى بەتلەر",
        "subcategories": "تارماق تۈر",
        "morenotlisted": "بۇ تىزىملىك تولۇق ئەمەس.",
        "mypage": "بەت",
        "mytalk": "مۇنازىرە بېتىم",
-       "anontalk": "بۇ IP نىڭ مۇنازىرە بېتى",
+       "anontalk": "مۇنازىرە",
        "navigation": "يولباشچى",
        "and": "&#32;ۋە",
-       "qbfind": "ئىزدە:",
-       "qbbrowse": "كۆز يۈگۈرت",
-       "qbedit": "تەھرىر",
-       "qbpageoptions": "بۇ بەت",
-       "qbmyoptions": "بەتلەرىم",
        "faq": "كۆپ كۆرۈلىدىغان مەسىلىلەر",
-       "faqpage": "Project:كۆپ كۆرۈلىدىغان مەسىلىلەر",
        "actions": "مەشغۇلات",
        "namespaces": "ئات بوشلۇقى",
        "variants": "ۋارىيانتلار",
        "help": "ياردەم",
        "search": "ئىزدە",
        "searchbutton": "ئىزدە",
-       "go": "يۆتكەل",
-       "searcharticle": "يۆتكەل",
+       "go": "يۆتكىلىش",
+       "searcharticle": "يۆتكىلىش",
        "history": "بەتنىڭ تارىخى",
        "history_short": "تارىخ",
+       "history_small": "تارىخ",
        "updatedmarker": "مەن ئالدىنقى قېتىم زىيارەت قىلغاندىن بۇيانقى يېڭىلانغىنى",
-       "printableversion": "باسÙ\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÙ\89غاÙ\86 Ù\86Û\95شرى",
+       "printableversion": "باسÙ\85ا Ù\86Û\87سخÙ\89سى",
        "permalink": "مەڭگۈلۈك ئۇلانما",
        "print": "باس",
        "view": "كۆرۈنۈش",
-       "edit": "تەھرىر",
+       "view-foreign": "$1 دە كۆرۈش",
+       "edit": "تەھرىرلەش",
+       "edit-local": "يەرلىك ئىزاھاتنى تەھرىرلەش",
        "create": "قۇر",
-       "editthispage": "بۇ بەتنى تەھرىرلە",
-       "create-this-page": "بۇ بەتنى قۇر",
+       "create-local": "يەرلىك ئىزاھات قوشۇش",
        "delete": "ئۆچۈر",
-       "deletethispage": "بۇ بەتنى ئۆچۈر",
-       "undeletethispage": " بۇ بەتنى ئەسلىگە كەلتۈر",
        "undelete_short": "ئۆچۈرۈلگەن {{PLURAL:$1|بىر تەھرىر|$1 تەھرىر}} ئەسلىگە كەلتۈرۈلدى",
        "viewdeleted_short": "{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}نى كۆرسەت",
        "protect": "قوغدا",
        "protect_change": "ئۆزگەرت",
-       "protectthispage": "بۇ بەتنى قوغدا",
        "unprotect": "قوغداش ئۆزگەرت",
-       "unprotectthispage": "بۇ بەتنى قوغداشنى ئۆزگەرت",
        "newpage": "يېڭى بەت",
-       "talkpage": "بۇ بەتنىڭ مۇنازىرىسى",
        "talkpagelinktext": "مۇنازىرە",
        "specialpage": "ئالاھىدە بەت",
        "personaltools": "شەخسىي قوراللار",
-       "articlepage": "مەزمۇن بېتىنى كۆرسەت",
        "talk": "مۇنازىرە",
        "views": "كۆرۈنۈش",
        "toolbox": "قوراللار",
-       "userpage": "ئىشلەتكۈچى بېتىنى كۆرسەت",
-       "projectpage": "قۇرۇلۇش بېتىنى كۆرسەت",
+       "tool-link-userrights": "{{GENDER:$1|ئەزا}} گۇرۇپپىسىنى ئۆزگەرتىش",
+       "tool-link-userrights-readonly": "{{GENDER:$1|ئەزا}} گۇرۇپپىسىنى كۆرۈش",
+       "tool-link-emailuser": "بۇ {{ئىشلەتكۈچى|GENDER:$1}} گە ئېلخەت يوللاش",
        "imagepage": "ھۆججەت بېتىنى كۆرسەت",
        "mediawikipage": "ئۇچۇر بېتىنى كۆرسەت",
        "templatepage": "قېلىپ بېتىنى كۆرسەت",
        "otherlanguages": "باشقا تىلاردا",
        "redirectedfrom": "(قايتا نىشان بەلگىلەش ئورنى $1)",
        "redirectpagesub": "قايتا نىشان بەلگىلەنگەن بەت",
+       "redirectto": "قايتا نىشانلاش:",
        "lastmodifiedat": "بۇ بەتنى $1 ئاخىرقى قېتىم $2 دا ئۆزگەرتكەن.",
        "viewcount": "بۇ بەت {{PLURAL:$1|بىر قېتىم|$1 قېتىم}}  زىيارەت قىلىندى.",
        "protectedpage": "قوغدالغان بەت",
        "pool-timeout": "قۇلۇپنى ساقلاش ۋاقىت ھالقىدى",
        "pool-queuefull": "قاچا ئۆچرىتى توشتى",
        "pool-errorunknown": "نامەلۇم خاتالىق",
+       "poolcounter-usage-error": "ئىشلىتىش خاتالىقى: $1",
        "aboutsite": "{{SITENAME}} ھەققىدە",
        "aboutpage": "Project:ھەققىدە",
        "copyright": "خاتىرىلەنگەندىن باشقا تېكست مەزمۇنى $1 ماددىسىغا ئاساسەن تەمىنلىنىدۇ.",
        "copyrightpage": "{{ns:project}}:نەشر ھوقۇقى",
        "currentevents": "نۆۋەتتىكى ھادىسە",
        "currentevents-url": "Project:نۆۋەتتىكى ھادىسە",
-       "disclaimers": "ئاگاھلاندۇرۇشلار",
+       "disclaimers": "ھوقۇق باياناتى",
        "disclaimerpage": "Project:ئومۇمىي ئاگاھلاندۇرۇش",
        "edithelp": "تەھرىرلەش ياردىمى",
+       "helppage-top-gethelp": "ياردەم",
        "mainpage": "باش بەت",
        "mainpage-description": "باش بەت",
        "policy-url": "Project:تاكتىكا",
        "newmessageslinkplural": "{{PLURAL:$1|بىر يېڭى ئۇچۇر|999=يېڭى ئۇچۇرلار}}",
        "newmessagesdifflinkplural": "ئاخىرقى {{PLURAL:$1|ئۆزگەرتىش|999=ئۆزگەرتىشلەر}}",
        "youhavenewmessagesmulti": "$1 دە يېڭى ئۇچۇرىڭىز بار",
-       "editsection": "تەھرىر",
-       "editold": "تەھرىر",
+       "editsection": "تەھرىرلەش",
+       "editold": "تەھرىرلەش",
        "viewsourceold": "مەنبەنى كۆرسەت",
-       "editlink": "تەھرىر",
+       "editlink": "تەھرىرلەش",
        "viewsourcelink": "مەنبەنى كۆرسەت",
-       "editsectionhint": "ئابزاس تەھرىر: $1",
+       "editsectionhint": "ئابزاس تەھرىرلەش: $1",
        "toc": "مەزمۇنى",
        "showtoc": "كۆرسەت",
-       "hidetoc": "يوشۇر",
-       "collapsible-collapse": "ئابزاس ئايرىمىسى يوشۇر",
+       "hidetoc": "يوشۇرۇش",
+       "collapsible-collapse": "قاتلاش",
        "collapsible-expand": "ياي",
+       "confirmable-yes": "ھەئە",
+       "confirmable-no": "ياق",
        "thisisdeleted": "كۆرسەت ياكى ئەسلىگە كەلتۈر $1 ؟",
        "viewdeleted": "$1 كۆرسەت؟",
        "restorelink": "{{PLURAL:$1|بىر ئۆچۈرۈلگەن نەشرى|$1 ئۆچۈرۈلگەن نەشرى}}",
        "readonly_lag": "قوشۇمچە ساندان مۇلازىمىتىر غەملەكنى ئاساسىي مۇلازىمىتىرغا يېڭىلاۋاتىدۇ، ساندان ئۆزلۈكىدىن قۇلۇپلاندى",
        "internalerror": "ئىچكى خاتالىق",
        "internalerror_info": "ئىچكى خاتالىق: $1",
+       "internalerror-fatal-exception": "تىپ \"$1\" نىڭ ئەجەللىك خاتالىقى",
        "filecopyerror": "\"$1\" ھۆججەتنى\"$2\" غا كۆچۈرەلمىدى.",
        "filerenameerror": "\"$1\" ھۆججەتنىڭ ئاتىنى \"$2\" غا ئۆزگەرتەلمىدى.",
        "filedeleteerror": "\"$1\" ھۆججەتنى ئۆچۈرەلمىدى.",
        "directorycreateerror": "\"$1\" مۇندەرىجىنى قۇرالمىدى.",
+       "directoryreadonlyerror": "مۇندەرىجە \"$1\" پەقەت ئوقۇشچان.",
+       "directorynotreadableerror": "مۇندەرىجە \"$1\" نى ئوقۇغىلى بولمىدى.",
        "filenotfound": "\"$1\" ھۆججەتنى تاپالمىدى.",
        "unexpected": "كۈتۈلمىگەن قىممەت: \"$1\"=\"$2\".",
        "formerror": "خاتالىق: جەدۋەلنى يوللىيالمىدى",
        "actionthrottled": "مەشغۇلات چەكلەندى",
        "actionthrottledtext": "ئەخلەتكە قارشى تۇرۇش ئۆلچىمىگە ئاساسەن، سىز بۇ بىر بۆلۈك قىسقا ۋاقىتتا بۇ مەشغۇلاتنى ئېلىپ بېرىشىڭىزنى چەكلىدى، ئەمما سىز بۇ چەكتىن ئېشىپ كەتتىڭىز.\n\nبىر قانچە مىنۇتتىن كېيىن قايتا سىناڭ.",
        "protectedpagetext": "بۇ بەت تەھرىرلەشنىڭ ئالدىنى ئېلىش ئۈچۈن قۇلۇپلانغان.",
-       "viewsourcetext": "سÙ\89ز Ø¨Û\87 Ø¨Û\95تÙ\86Ù\89 Ø¦Û\95سÙ\84Ù\89 Ù\83Ù\88دÙ\89Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز Û\8bÛ\95 Ù\83Û\86Ú\86Û\88رÛ\95Ù\84Û\95Ù\8aسÙ\89ز:",
+       "viewsourcetext": "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ Ø¦Û\95سÙ\84Ù\89 Ù\83Ù\88دÙ\89Ù\86Ù\89 Ù\83Û\86رÛ\95Ù\84Û\95Ù\8aسÙ\89ز Û\8bÛ\95 Ù\83Û\86Ú\86Û\88رÛ\95Ù\84Û\95Ù\8aسÙ\89ز.",
        "viewyourtext": "بۇ بەتتىكى '''تەھرىرلىگەنلىرىڭىز'''نىڭ ئەسلى كودىنى كۆرۈپ كۆچۈرەلەيسىز.",
        "protectedinterface": "بۇ بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىنى تەمىنلىگەن، خالىغانچە تەھرىرلەشتىن ساقلىنىش ئۈچۈن قۇلۇپلانغان.\nمەسىلەن ئەگەر تەرجىمە قىلسىڭىز [https://translatewiki.net/wiki/Main_Page?setlang=ug translatewiki.net] ئۇنداقتا MediaWiki يەرلىكلەشتۈرۈش پىلانىنى ئىشلىتىشنى ئويلىشىڭ.",
        "editinginterface": "'''ئاگاھلاندۇرۇش:''' سىز تەھرىرلەۋاتقان بەت يۇمشاق دېتالنىڭ كۆرۈنۈش تېكستىگە ئىشلىتىلىدۇ.\n\nبۇ بەت ئۆزگەرتىلسە باشقا ئىشلەتكۈچىلەرنىڭ كۆرۈنۈش ئۇسلۇبىغا تەسىر كۆرسىتىدۇ.\n\nمەسىلەن ئەگەر تەرجىمە قىلسىڭىز [https://translatewiki.net/wiki/Main_Page?setlang=ug translatewiki.net] ئۇنداقتا MediaWiki يەرلىكلەشتۈرۈش پىلانىنى ئىشلىتىشنى ئويلىشىڭ.",
        "virus-scanfailed": "تەكشۈرۈش مەغلۇپ بولدى (كودى $1)",
        "virus-unknownscanner": "نامەلۇم ۋىرۇسخور",
        "logouttext": "'''ھازىر تىزىمدىن چىقتىڭىز.'''\n\nدىققەت، بەزى بەتلەر توركۆرگۈنىڭ غەملىكى تازىلانمىغۇچە يەنىلا سىزنى تىزىمغا كىرگەن ھالەتتە كۆرسىتىشى مۇمكىن.",
+       "cannotlogoutnow-title": "ھازىر چېكىنگىلى بولمايدۇ",
        "welcomeuser": "$1، خۇش كەپسىز!",
        "welcomecreation-msg": "ھېساباتىڭىز قۇرۇلدى.\n\n[[Special:Preferences|{{SITENAME}} تەڭشىكىڭىزنى تەڭشەشنى ئۇنتۇپ قالماڭ]].",
        "yourname": "ئىشلەتكۈچى نامى:",
        "createacct-yourpasswordagain-ph": "پارولنى قايتا كىرگۈزۈڭ",
        "userlogin-remembermypassword": "مېنى ئەستە ساقلا",
        "userlogin-signwithsecure": "بىخەتەر ئۇلىنىشنى ئىشلەت",
+       "cannotlogin-title": "ھازىر كىرگىلى بولمايدۇ",
+       "cannotlogin-text": "كىرگىلى بولمايدۇ.",
+       "cannotloginnow-title": "ھازىر كىرگىلى بولمايدۇ",
+       "cannotcreateaccount-title": "ھېسابات قۇرالمىدى",
        "yourdomainname": "دائىرە نامىڭىز:",
        "password-change-forbidden": "بۇ ۋىكىدىكى پارولنى ئۆزگەرتەلمەيسىز.",
        "externaldberror": "بۇ سانداننى دەلىللەش خاتالىقى ياكى سىرتقى ھېساباتىڭىزنى يېڭىلاشنى چەكلىگەنلىكتىن بولغان بولۇشى مۇمكىن.",
        "login": "تىزىمغا كىر",
+       "login-security": "سالاھيىتىڭىزنى جەزىملەشتۈرۈڭ",
        "nav-login-createaccount": "تىزىمغا كىر/ھېسابات قۇر",
-       "logout": "تىزىمدىن چىق",
-       "userlogout": "تىزىمدىن چىق",
+       "logout": "چېكىنىش",
+       "userlogout": "چېكىنىش",
        "notloggedin": "تىزىمغا كىرمىدى",
        "userlogin-noaccount": "ھېساباتىڭىز يوقمۇ؟",
        "userlogin-joinproject": "{{SITENAME}} قا ئەزا بولۇڭ",
        "createaccount": "ھېسابات قۇر",
        "userlogin-resetpassword-link": "پارولىڭىزنى ئۇنتۇپ قالدىڭىزمۇ؟",
+       "userlogin-helplink2": "كىرىشتىن ياردەم",
        "userlogin-loggedin": "سىز ئاللىقاچان {{GENDER:$1|$1}} ھالىتىدە تىزىمغا كىرىپ بولدىڭىز. تۆۋەندىكىلەرنى تولدۇرۇپ باشقا ئىشلەتكۈچى ھالىتىدە تىزىمغا كىرىڭ.",
        "userlogin-createanother": "باشقا ھېسابات قۇرىمەن",
        "createacct-emailrequired": "ئېلخەت ئادرېسى",
        "createacct-realname": "ھەقىقى ئىسمىڭىز (ئىختىيارى)",
        "createacct-reason": "سەۋەبى",
        "createacct-reason-ph": "نېمىشقا باشقا ھېسابات قۇرماقچى بولدىڭىز",
+       "createacct-reason-help": "ئاككونت قۇرۇش خاتىرىسىدە كۆرۈنىدىغان ئۇچۇر",
        "createacct-submit": "ھېساباتىڭىزنى قۇرۇڭ",
-       "createacct-another-submit": "باشقا ھېسابات قۇرىمەن",
+       "createacct-another-submit": "ھېسابات قۇرۇش",
+       "createacct-continue-submit": "ئاككونت قۇرۇشنى داۋاملاشتۇرۇش",
+       "createacct-another-continue-submit": "ئاككونت قۇرۇشنى داۋاملاشتۇرۇش",
        "createacct-benefit-heading": "{{SITENAME}} سىزگە ئوخشاش كىشىلەر تەرىپىدىن قۇرۇلغان.",
        "createacct-benefit-body1": "{{PLURAL:$1|قېتىم}} تەھرىرلەنگەن",
        "createacct-benefit-body2": "{{PLURAL:$1|بەت}}",
        "nocookiesfornew": "ئىشلەتكۈچى ھېساباتى قۇرۇلمىدى، ئۇنىڭ مەنبەسىنى جەزملىيەلمەيمىز.\ncookies نى قوزغاتقانلىقىڭىزنى جەزملەڭ، بۇ بەتنى قايتا يۈكلەپ ئاندىن قايتا سىناڭ.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "سىز تېخى ئىناۋەتلىك ئىشلەتكۈچى نامىنى بەلگىلىمىدىڭىز.",
-       "loginsuccesstitle": "تىزىمغا كىرىش مۇۋەپپەقىيەتلىك",
+       "loginsuccesstitle": "تىزىمغا كىردىڭىز",
        "loginsuccess": "'''سىز {{SITENAME}} غا \"$1\" سالاھىيىتىدە كىردىڭىز.'''",
        "nosuchuser": "\"$1\" ناملىق ئىشلەتكۈچىنى تاپالمىدى.\nئىشلەتكۈچى نامىنى تەكشۈرۈڭ.\nياكى [[Special:CreateAccount|يېڭى ھېسابات قۇرۇڭ]].",
        "nosuchusershort": "\"$1\" ناملىق ئىشلەتكۈچى يوق.\nكىرگۈزگىنىڭىزنى تەكشۈرۈڭ.",
        "suspicious-userlogout": "تىزىمدىن چىقىش ئىلتىماسىڭىز رەت قىلىندى، چۈنكى ئۇ بەلكىم بۇزۇلغان توركۆرگۈ ياكى غەملەك ۋاكالەتچىسى يوللىغان بولۇشى مۇمكىن.",
        "createacct-another-realname-tip": "ھەقىقىي ئىسمىڭىز ئىختىيارى.\nئەگەر تەمىنلەشنى تاللىسىڭىز، ئۇ سىزنىڭ تۆھپىڭىزنىڭ ئىمزاسى بولىدۇ.",
        "pt-login": "تىزىمغا كىرىڭ",
+       "pt-login-button": "كىرىش",
+       "pt-login-continue-button": "داۋاملىق كىرىش",
        "pt-createaccount": "ھېسابات قۇر",
+       "pt-userlogout": "چېكىنىش",
        "php-mail-error-unknown": "PHP نىڭ mail() فونكسىيەسىدىكى يوچۇن خاتالىق",
        "user-mail-no-addy": "ئېلخەت ئادرېسسىز خەت يوللاشنى سىنىدى.",
        "user-mail-no-body": "بوش ياكى مەزمۇنى قىسقا مۇۋاپىق بولمىغان تورخەت ئەۋەتىشنى سىنىدى.",
        "changepassword": "پارولنى ئۆزگەرتىش",
-       "resetpass_announce": "سىز ۋاقىتلىق ئېلخەت جەزملەش كودىدا تىزىمغا كىرگەن.\nتىزىمغا كىرىشنى تاماملاشتا، بۇ جايدا يېڭى ئىم بەلگىلىشىڭىز لازىم:",
+       "resetpass_announce": "كىرىشنى تاماملاشتا، چوقۇم يېڭى پارول بەلگىلەيسىز.",
        "resetpass_text": "<!-- بۇ يەرگە تېكست قوشۇڭ -->",
        "resetpass_header": "ھېسابات ئىمنى ئۆزگەرت",
        "oldpassword": "كونا پارول:",
        "resetpass_submit": "پارول بەلگىلەپ تىزىمغا كىرىڭ",
        "changepassword-success": "پارولىڭىز ئوڭۇشلۇق ئۆزگەرتىلدى!",
        "changepassword-throttled": "سىز بۇ ھېساباتتا تىزىمغا كىرىشنى كۆپ قېتىم سىنىدىڭىز.\n$1 ساقلاپ، ئاندىن قايتا سىناڭ.",
+       "botpasswords": "ماشىنا ئادەم پارولى",
+       "botpasswords-disabled": "ماشىنا ئادەم پارولى چەكلەنگەن.",
+       "botpasswords-existing": "نۆۋەتتە بار ماشىنا ئادەم پارولى",
+       "botpasswords-createnew": "يېڭى ماشىنا ئادەم پارولى قۇرۇش",
+       "botpasswords-label-appid": "ماشىنا ئادەم نامى:",
+       "botpasswords-label-create": "قۇرۇش",
+       "botpasswords-label-update": "يېڭىلاش",
+       "botpasswords-label-cancel": "قالدۇرۇش",
+       "botpasswords-label-delete": "ئۆچۈرۈلگەن",
+       "botpasswords-label-resetpassword": "پارولنى ئەسلىگە قايتۇرماق",
+       "botpasswords-label-grants": "قوللىنىش ھوقۇقى:",
+       "botpasswords-label-grants-column": "ھوقۇقلۇق",
+       "botpasswords-bad-appid": "ماشىنا ئادەم نامى \"$1\" ئىناۋەتسىز.",
+       "botpasswords-created-title": "ماشىنا ئادەم پارولى قۇرۇلدى",
+       "botpasswords-updated-title": "ماشىنا ئادەم پارولى يېڭىلاندى",
+       "botpasswords-deleted-title": "ماشىنا ئادەم پارولى ئۆچۈرۈلدى",
        "resetpass_forbidden": "پارولنى ئۆزگەرتەلمىدى",
+       "resetpass_forbidden-reason": "پارولنى ئۆزگەرتەلمىدى: $1",
        "resetpass-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
        "resetpass-submit-loggedin": "پارولنى ئۆزگەرتىش",
        "resetpass-submit-cancel": "ۋاز كەچ",
        "passwordreset-emailtext-user": "{{SITENAME}} دىكى ئىشلەتكۈچى $1 بېكەت {{SITENAME}} ($4) دىكى پارولىڭىزنى قايتا بېكىتىشنى ئىلتىماس قىلدى .\nتۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}($4)ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "passwordreset-emailelement": "ئىشلەتكۈچى نامى: \n$1\n\nۋاقىتلىق پارول: \n$2",
        "passwordreset-emailsentemail": "پارولنى قايتا بېكىتىش ئېلخېتى يوللاندى.",
+       "passwordreset-nocaller": "چوقۇم بىر يۆتكەپ ئىشلەتكۈچى تەمىنلەڭ",
+       "passwordreset-nosuchcaller": "يۆتكەپ ئىشلەتكۈچى تەرەپ مەۋجۇت ئەمەس: $1",
+       "passwordreset-invalidemail": "ئىناۋەتسىز ئېلخەت ئادرېسى",
        "changeemail": "ئېلخەت ئادرېس ئۆزگەرت",
        "changeemail-header": "ھېساباتنىڭ ئېلخەت ئادرېسىنى ئۆزگەرت",
        "changeemail-no-info": "سىز تىزىمغا كىرگەندىن كېيىن بىۋاسىتە بۇ بەتكە كىرىشىڭىز لازىم.",
        "sig_tip": "ۋاقىت تامغىلىق ئىمزايىڭىز",
        "hr_tip": "توغرىسىغا سىزىق (ئېھتىيات بىلەن ئىشلىتىڭ)",
        "summary": "ئۈزۈندە",
-       "subject": "تېما/ماۋزۇ:",
+       "subject": "ماۋزۇ:",
        "minoredit": "بۇ ئازراقلا تەھرىرلەش",
-       "watchthis": "بۇ بەتنى كۆزەت",
+       "watchthis": "بۇ بەتنى كۆزىتىش",
        "savearticle": "بەت ساقلا",
+       "savechanges": "ئۆزگەرتىشنى ساقلاش",
+       "publishpage": "بەتنى ئېلان قىلىش",
+       "publishchanges": "يوللىغاننى ئۆزگەرتىش",
        "preview": "ئالدىن كۆزەت",
        "showpreview": "ئالدىن كۆزىتىشنى كۆرسەت",
        "showdiff": "ئۆزگەرتىشنى كۆرسەت",
        "missingsummary": "'''ئەسكەرتىش:''' سىز تەھرىرلەش ئۈزۈندىسى تەمىنلىمىدىڭىز. .\nئەگەر ساقلانى يەنە بىر قېتىم چەكسىڭىز، تەھرىرلىگىنىڭىزنى ئۈزۈندە يوق ھالەتتە ساقلايدۇ.",
        "missingcommenttext": "تۆۋەندە ئىزاھات كىرگۈزۈڭ.",
        "missingcommentheader": "'''ئەسكەرتىش:''' سىز ئىزاھاتقا ماۋزۇ تەمىنلىمىدىڭىز.\nئەگەر \"$1\"نى يەنە بىر قېتىم چەكسىڭىز، تەھرىرلىگىنىڭىزنى ماۋزۇسىز ھالەتتە ساقلايدۇ.",
-       "summary-preview": "ئۈزۈندە ئالدىن كۆزىتىش:",
-       "subject-preview": "تېما/ماۋزۇنى ئالدىن كۆزەت:",
+       "summary-preview": "ئۈزۈندىنى ئالدىن كۆزىتىش:",
+       "subject-preview": "ماۋزۇنى ئالدىن كۆرۈش:",
        "blockedtitle": "ئىشلەتكۈچى چەكلەنگەن",
        "blockedtext": "'''ئىشلەتكۈچى ئاتىڭىز ياكى IP ئادرېسىڭىزنى $1 چەكلىگەن .'''\n\n بۇنى $1 چەكلىگەن.\nسەۋەبى ''$2''.\n\n* چەكلەش باشلانغان ۋاقىت: $8\n* چەكلەش ئاخىرلىشىدىغان ۋاقىت: $6\n* چەكلەنگۈچى: $7\n\n $1 بىلەن ئالاقىلىشىڭ ياكى باشقا [[{{MediaWiki:Grouppage-sysop}}|باشقۇرغۇچى]] بىلەن بۇ قېتىملىق چەكلەشنى سۆزلىشىشڭ.\nسىز [[Special:Preferences|ھېسابات مايىللىقى]] تەڭشىكىڭىزدە ئىناۋەتلىك ئېلخەت ئادرېسى بەلگىلىمىگەن بولسىڭىز، 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا' ئىقتىدارىنى ئىشلىتەلمەيسىز. ئىناۋەتلىك ئېلخەتتىن بىرنى بەلگىلىگەندىن كېيىن، بۇ ئىقتىدار چەكلەنمەيدۇ.\nسىزنىڭ نۆۋەتتىكى IP ئادرېسىڭىز $3، چەكلەنگەن كىملىك   #$5.\nسوئالىڭىزدا يۇقىرىقى بارلىق ماتېرىياللارنى ئىزاھلاڭ.",
        "autoblockedtext": "IP ئادرېسىڭىز ئاپتوماتىك چەكلەنگەن، چۈنكى ئىلگىرى باشقا بىر ئىشلەتكۈچىنى $1 چەكلىگەن.\nچەكلەش سەۋەبى:\n\n''$2''.\n\n* چەكلەش باشلانغان ۋاقىت: $8\n* چەكلەش ئاخىرلىشىدىغان ۋاقىت: $6\n* چەكلەنگۈچى: $7\n\n $1 بىلەن ئالاقىلىشىڭ ياكى باشقا [[{{MediaWiki:Grouppage-sysop}}|باشقۇرغۇچى]] بىلەن بۇ قېتىملىق چەكلەشنى سۆزلىشىشڭ.\nسىز [[Special:Preferences|ھېسابات مايىللىقى]] تەڭشىكىڭىزدە ئىناۋەتلىك ئېلخەت ئادرېسى بەلگىلىمىگەن بولسىڭىز، 'بۇ ئىشلەتكۈچىگە ئېلخەت يوللا' ئىقتىدارىنى ئىشلىتەلمەيسىز. ئىناۋەتلىك ئېلخەتتىن بىرنى بەلگىلىگەندىن كېيىن، بۇ ئىقتىدار چەكلەنمەيدۇ.\nسىزنىڭ نۆۋەتتىكى IP ئادرېسىڭىز $3، چەكلەنگەن كىملىك   #$5.\nسوئالىڭىزدا يۇقىرىقى بارلىق ماتېرىياللارنى ئىزاھلاڭ.",
        "updated": "(يېڭىلاندى)",
        "note": "'''ئىزاھات:'''",
        "previewnote": "'''ئېسىڭىزدە بولسۇنكى بۇ پەقەتلا ئالدىن كۆزىتىش.'''\nئۆزگەرتكەن مەزمۇنىڭىز تېخى ساقلانمىدى!",
-       "continue-editing": "تەھرىرلەشكە يۆتكەل",
+       "continue-editing": "تەھرىرلەش رايونىغا كۆچۈش",
        "previewconflict": "بۇ ئالدىن كۆزىتىشتە ئۈستىدىكى تېكست تەھرىرلەش رايونىدىكى مەزمۇننى كۆرسەتتى. ئۇ ساقلانى تاللىغاندىن كېيىن كۆرۈنىدۇ.",
        "session_fail_preview": "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''\nقايتا سىناڭ.\nئەگەر يەنىلا مەغلۇپ بولسا، [[Special:UserLogout|تىزىمدىن چىق]]قاندىن كېيىن قايتا تىزىمغا كىرىڭ.",
        "session_fail_preview_html": "'''كەچۈرۈڭ! سىزنىڭ جەريان سانلىق مەلۇماتىڭىز يوقاپ كەتكەندە ئېلىپ بارغان تەھرىرىڭىزنى بىر تەرەپ قىلالمايمىز.'''\n\n''چۈنكى {{SITENAME}} بېكىتى ئەسلى HTML ئىشلىتىشكە يول قويىدۇ،   JavaScript ھۇجۇمىنىڭ ئالدىنى ئېلىش ئۈچۈن، ئالدىن كۆزىتىش يوشۇرۇلدى.''\n\n'''ئەگەر بۇ قانۇنلۇق تەھرىرلەش بولسا قايتا سىناڭ'''\nئەگەر ئۇنداق بولمىسا [[Special:UserLogout|تىزىمدىن چىق]]ىپ قايتا تىزىمغا كىرىڭ.",
        "permissionserrorstext": "تۆۋەندىكى {{PLURAL:$1|سەۋەپ|سەۋەپ}}: تۈپەيلىدىن تۆۋەندىكى مەشغۇلاتنى ئېلىپ بېرىش ھوقۇقىڭىز يوق.",
        "permissionserrorstext-withaction": "{{PLURAL:$1|سەۋەب|سەۋەبلەر}} تۈپەيلىدىن $2 مەشغۇلاتى ئېلىپ بېرىش ھوقۇقىڭىز يوق:",
        "recreate-moveddeleted-warn": "'''ئاگاھلاندۇرۇش: ئىلگىرى ئۆچۈرگەن ھۆججەتتىن بىرنى قۇرۇۋاتىسىز.'''\n\nبۇ ھۆججەتنى قايتا يۈكلەشنىڭ مۇۋاپىق ياكى ئەمەسلىكىنى ئويلىنىپ بېقىڭ.\nقولايلىق بولۇشى ئۈچۈن بۇ ھۆججەتنىڭ ئۆچۈرۈش خاتىرىسى تۆۋەندە تەمىنلەندى:",
-       "moveddeleted-notice": "بۇ بەت ئۆچۈرۈلگەن.\nبۇ بەتنىڭ ئۆچۈرۈش ۋە يۆتكەش خاتىرىسى پايدىلىنىش ئۈچۈن تۆۋەندە كۆرسىتىلدى.",
+       "moveddeleted-notice": "بۇ بەت ئۆچۈرۈلدى.\nتۆۋەندە بۇ بەتنىڭ ئۆچۈرۈش، قوغداش ۋە يۆتكەش خاتىرىسى پايدىلىنىش ئۈچۈن تەمىنلەندى.",
        "log-fulllog": "تولۇق خاتىرىنى كۆرسەت",
        "edit-hook-aborted": "تەھرىر ئىلمەك تەرىپىدىن چېكىندۈرۈلدى\nئۇ سەۋەبىنى تەمىنلىمىدى.",
        "edit-gone-missing": "بۇ بەتنى يېڭىلىيالمايدۇ.\nئۇ بايىلا ئۆچۈرۈلگەن بولۇشى مۇمكىن.",
        "edit-conflict": "تەھرىر توقۇنۇشى.",
        "edit-no-change": "تەھرىرلىگىنىڭىزگە پەرۋا قىلىنمىدى، چۈنكى تېكستتە ئۆزگىرىش بولمىدى.",
+       "postedit-confirmation-created": "بەت قۇرۇلدى.",
+       "postedit-confirmation-restored": "بەت ئەسلىگە كەلدى.",
        "postedit-confirmation-saved": "تەھرىرلىگىنىڭىز ساقلاندى.",
        "edit-already-exists": "يېڭى بەت قۇرالمىدى.\nبەت بۇرۇندىن مەۋجۇد.",
        "defaultmessagetext": "كۆڭۈلدىكى ئۇچۇر تېكستى",
        "invalid-content-data": "مەزمۇن سانلىق مەلۇماتى ئىناۋەتسىز",
        "content-not-allowed-here": "[[$2]] بەتتە \"$1\" مەزمۇنغا يول قويۇلمايدۇ",
        "editwarning-warning": "بەتتىن ئايرىلغاندا بەلكىم بارلىق تەھرىرلىگىنىڭىز بېكار بولۇپ كېتىشى مۇمكىن.\nئ‍ەگەر تىزىمغا كىرسىڭىز، مايىللىق بېتىڭىزنىڭ «{{int:prefs-editing}}» بۆلىكىدە، بۇ ئەسكەرتمىنى ئىناۋەتسىز قىلالايسىز.",
+       "editpage-invalidcontentmodel-title": "مەزمۇن ئەندىزىسىنى قوللىمىدى.",
+       "editpage-invalidcontentmodel-text": "مەزمۇن مودېلى “$1” نى قوللىمىدى.",
        "editpage-notsupportedcontentformat-title": "مەزمۇن ئەندىزىسىنى قوللىمىدى.",
        "editpage-notsupportedcontentformat-text": "مەزمۇن قېلىپى $2 نى مەزمۇن ئەندىزىسى $1 نى قوللىمىدى.",
        "content-model-wikitext": "ۋىكىتېكىست",
        "content-model-text": "ساپ تېكىست",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "قۇرۇق ئوبېكىت",
+       "content-json-empty-array": "قۇرۇق سانلار گۇرۇپپىسى",
        "expensive-parserfunction-warning": "'''ئاگاھلاندۇرۇش:''' بۇ بەت ناھايىتى كۆپ يۇقىرى سەرپىياتتىكى گىرامماتىكىلىق ئىقتىدارنى چاقىرغان.\\n\n\\n\nئۇ {{PLURAL:$2|قېتىم|قېتىم}} دىن ئاز چاقىرىشى لازىم، ھازىر {{PLURAL:$1| $1 قېتىم| $1 قېتىم}}  چاقىرىلغان.",
        "expensive-parserfunction-category": "بەتتە يۇقىرى سەرپىياتتىكى گرامماتىكىلىق ئىقتىدار چاقىرىلغان.",
        "post-expand-template-inclusion-warning": "'''ئاگاھلاندۇرۇش:''' ئۆز ئىچىگە ئالغان قېلىپ بەك چوڭ.\nبەزى قېلىپنى ئۆز ئىچىگە ئالمايدۇ.",
        "post-expand-template-argument-warning": "'''ئاگاھلاندۇرۇش:''' بۇ بەتتە ئاز دېگەندە بىر پارامېتىر كېڭەيتىلگەن يۇقىرى قىممەتنى ئۆز ئىچىگە ئالغان.\nبۇ پارامېتىرلار ئېتىبارغا ئېلىنمايدۇ.",
        "post-expand-template-argument-category": "ئېتىبارغا ئېلىنمىغان قېلىپ پارامېتىرىنى ئۆز ئىچىگە ئالغان بەت",
        "parser-template-loop-warning": "قېلىپ دەۋرىيلىكى بايقالدى: [[$1]]",
+       "template-loop-category": "قېلىپ دەۋرىيلىنىدىغان بەت بار",
        "parser-template-recursion-depth-warning": "قايتىلانما ئىپادە چوڭقۇر چەكلىمىسىدىن ئېشىپ كەتتى ($1)",
        "language-converter-depth-warning": "تىل ئالماشتۇرۇش چوڭقۇرلۇقى چەكتىن ئاشتى ($1)",
        "node-count-exceeded-category": "بەتنىڭ نۇقتا سانى چەكتىن ئېشىپ كەتتى",
-       "node-count-exceeded-warning": "بەت نۇقتا سانىدىن ئېشىپ كەتتى",
+       "node-count-exceeded-warning": "بەت نۇقتا چەكلىمە سانىدىن ئېشىپ كەتتى",
        "expansion-depth-exceeded-category": "كېڭەيتىلگەن چوڭقۇرلۇق بەت چەكلىمىسىدىن ئېشىپ كەتتى",
        "expansion-depth-exceeded-warning": "بەت كېڭەيتىلگەن چوڭقۇرلۇقتىن ئېشىپ كەتتى",
        "parser-unstrip-loop-warning": "دەۋرىيلىك بايقالدى",
        "page_first": "تۇنجى",
        "page_last": "ئاخىرقى",
        "histlegend": "پەرق تاللاش: سېلىشتۇرىدىغان ئۆزگەرتىلگەن نەشرىنىڭ يەككە تاللاش كۇنۇپكىسىغا بەلگە سېلىپ، ئاستىدىكى كۇنۇپكىنى چېكىپ سېلىشتۇرۇڭ. <br />\nچۈشەندۈرۈش: '''({{int:cur}})'' نۆۋەتتىكى نەشرى بىلەن سېلىشتۇرۇشنى كۆرسىتىدۇ.\n '''({{int:last}})''' ئالدىنقى ئۆزگەرتىلگەن نەشرى بىلەن سېلىشتۇرۇشنى كۆرسىتىدۇ.\n '''{{int:minoreditletter}}''' ئازراقلا ئۆزگەرتىش.",
-       "history-fieldset-title": "تارÙ\89Ø®Ù\89Ù\86Ù\89 Ù\83Û\86رسÛ\95ت",
+       "history-fieldset-title": "ئÛ\86زگÛ\95رتÙ\89Ù\84Ú¯Û\95Ù\86 Ù\86Û\95Ø´Ù\89رÙ\89Ù\86Ù\89 Ø¦Ù\89زدÛ\95Ø´",
        "history-show-deleted": "ئۆچۈرۈلگەننىلا",
        "histfirst": "ئەڭ كونا",
        "histlast": "ئەڭ يېڭى",
        "history-feed-description": "مەزكۇر بەتنىڭ بۇ بېكەتتىكى ئۆزگەرتىش تارىخى",
        "history-feed-item-nocomment": "$2 دىكى $1",
        "history-feed-empty": "ئىلتىماس قىلغان بەت مەۋجۇد ئەمەس\nئۇ ئۆچۈرۈلگەن ياكى ئاتى ئۆزگەرتىلگەن بولۇشى مۇمكىن\n [[Special:Search|wiki دىن ئىزدە]] نى سىناپ مۇناسىۋەتلىك يېڭى بەتكە ئېرىشىڭ.",
+       "history-edit-tags": "تاللانغان ئۆزگەرتىلگەن نەشىرىنىڭ خەتكۈچىنى تەھرىرلەش",
        "rev-deleted-comment": "(تەھرىرلەش ئۈزۈندىسى چىقىرىۋېتىلدى)",
        "rev-deleted-user": "(ئىشلەتكۈچى نامى چىقىرىۋېتىلدى)",
        "rev-deleted-event": "(خاتىرە مەشغۇلاتى چىقىرىۋېتىلدى)",
-       "rev-deleted-user-contribs": "[ئىشلەتكۈچى نامى ياكى IP ئادرېس چىقىرىۋېتىلدى - تۆھپىدىن تەھرىرنى يوشۇر]",
+       "rev-deleted-user-contribs": "[ئىشلەتكۈچى نامى ياكى IP ئادرېس چىقىرىۋېتىلدى - تۆھپىە تەھرىرلەشكە يوشۇرۇلدى]",
        "rev-deleted-text-permission": "'''ئاگاھلاندۇرۇش: بۇ بەتنىڭ تۈزىتىلگەن نەشرى'''ئۆچۈرۈلگەن'''\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.",
        "rev-deleted-text-unhide": "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ.\nداۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ نەشرىنى كۆرسەت]ەلەيسىز.",
        "rev-suppressed-text-unhide": "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''نازارەتچى يوشۇرغان'''.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} نازارەتچى يوشۇرۇش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ. ئەگەر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
        "rev-suppressed-unhide-diff": "بۇ بەتنىڭ تۈزىتىلگەن نەشرى '''نازارەتچى يوشۇرغان'''.\n[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} نازارەتچى يوشۇرۇش خاتىرىسى]دىن تەپسىلىي ئۇچۇرنى تاپقىلى بولىدۇ. ئەگەر داۋاملاشتۇرماقچى بولسىڭىز يەنىلا [$1 بۇ تۈزىتىلگەن نەشرىنى كۆرسەت]ەلەيسىز.",
        "rev-deleted-diff-view": "بۇ بەتنىڭ بىر قېتىملىق تۈزىتىلگەن نەشرى '''ئۆچۈرۈلگەن'''\nبۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ئۆچۈرۈش خاتىرىسى]دىن تاپالايسىز.",
        "rev-suppressed-diff-view": "بۇ بەتنىڭ بىر قېتىملىق تۈزىتىلگەن نەشرى '''نازارەتچى يوشۇرغان'''.\nبۇ پەرقنى كۆرەلەيسىز.: تەپسىلاتىنى [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} نازارەتچى يوشۇرۇش خاتىرىسى]دىن تاپالايسىز.",
-       "rev-delundel": "كۆرسەت/يوشۇر",
+       "rev-delundel": "كۆرسىتىش ھالىتىنى ئۆزگەرتىش",
        "rev-showdeleted": "كۆرسەت",
        "revisiondelete": "تۈزىتىلگەن نەشرىنى ئۆچۈر/ئەسلىگە كەلتۈر",
        "revdelete-nooldid-title": "ئىناۋەتسىز نىشان تۈزىتىش نەشرى",
        "revdelete-legend": "كۆرۈنۈشچانلىق چەكلىمە تەڭشىكى",
        "revdelete-hide-text": "تۈزىتىلگەن تېكىست",
        "revdelete-hide-image": "ھۆججەت مەزمۇنىنى يوشۇر",
-       "revdelete-hide-name": "Ù\85Û\95شغÛ\87Ù\84ات Û\8bÛ\95 Ù\86Ù\89شاÙ\86Ù\86Ù\89 Ù\8aÙ\88Ø´Û\87ر",
+       "revdelete-hide-name": "Ù\86Ù\89شاÙ\86 Û\8bÛ\95 Ø³Ø§Ù\86Ù\84Ù\89Ù\82 Ø¦Û\87Ú\86Û\87رÙ\86Ù\89 Ù\8aÙ\88Ø´Û\87رÛ\87Ø´",
        "revdelete-hide-comment": "تەھرىر ئىزاھاتىنى يوشۇر",
-       "revdelete-hide-user": "تەھرىرلىگۈچىنىڭ نامى/IP ئادرېسىنى يوشۇر",
+       "revdelete-hide-user": "تەھرىرلىگۈچىنىڭ نامى/IP ئادرېسىنى يوشۇرۇش",
        "revdelete-hide-restricted": "مەشغۇلاتچى ۋە باشقا ئىشلەتكۈچىنىڭ سانلىق مەلۇمات كۆرۈشىنىمۇ چەكلە",
        "revdelete-radio-same": "(ئۆزگەرتمە)",
        "revdelete-radio-set": "يوشۇرۇن",
        "mergehistory-empty": "بىرلەشتۈرگىلى بولىدىغان تۈزىتىلگەن نەشرى يوق.",
        "mergehistory-done": "$1 نىڭ {{PLURAL:$3|قېتىملىق|قېتىملىق}}  تۈزىتىلگەن نەشرى مۇۋەپپەقىيەتلىك ھالدا [[:$2]] غا بىرلەشتۈرۈلدى.",
        "mergehistory-fail": "تارىخنى بىرلەشتۈرگىلى بولمايدۇ، بۇ بەت ۋە ۋاقىت پارامېتىرىنى قايتا تەكشۈرۈڭ.",
+       "mergehistory-fail-bad-timestamp": "ۋاقىت ئوقى ئىناۋەتسىز.",
+       "mergehistory-fail-invalid-source": "مەنبە بەت ئىناۋەتسىز.",
+       "mergehistory-fail-invalid-dest": "نىشان بەت ئىناۋەتسىز.",
        "mergehistory-no-source": "مەنبە بەت $1 مەۋجۇد ئەمەس.",
        "mergehistory-no-destination": "نىشان بەت $1 مەۋجۇد ئەمەس.",
        "mergehistory-invalid-source": "مەنبە بەتنىڭ چوقۇم ئىناۋەتلىك ماۋزۇسى بولۇشى لازىم.",
        "notextmatches": "ماس كېلىدىغان بەت مەزمۇنى يوق",
        "prevn": "ئالدى {{PLURAL:$1|$1}}",
        "nextn": "كەينى {{PLURAL:$1|$1}}",
+       "prev-page": "ئالدىنقى بەت",
+       "next-page": "كېيىنكى بەت",
        "prevn-title": "ئالدىنقى $1 {{PLURAL:$1|نەتىجە|نەتىجە}}",
        "nextn-title": "كېيىكى $1 {{PLURAL:$1|نەتىجە|نەتىجە}}",
        "shown-title": "ھەر بىر بەتتە $1 {{PLURAL:$1|نەتىجە |نەتىجە }} كۆرسەت",
        "search-result-category-size": "{{PLURAL:$1|1 ئەزا|$1 ئەزا}}({{PLURAL:$2|1 تارماق تۈر|$2 تارماق تۈر}}, {{PLURAL:$3|1 ھۆججەت|$3 ھۆججەت}})",
        "search-redirect": "($1 قايتا نىشانلا)",
        "search-section": "(ئابزاس $1)",
+       "search-category": "(تۈر $1)",
        "search-file-match": "(ھۆججەت مەزمۇنى ماس كەلگەن)",
        "search-suggest": "ئىزدىمەكچى بولغىنىڭىز: $1",
        "search-interwiki-caption": "ھەمشىرە قۇرۇلۇشلار",
-       "search-interwiki-default": "$1 نەتىجە:",
+       "search-interwiki-default": "$1 دىكى نەتىجە:",
        "search-interwiki-more": "(تېخىمۇ كۆپ)",
+       "search-interwiki-more-results": "تېخىمۇ كۆپ نەتىجە",
        "search-relatedarticle": "ئالاقىدار",
        "searchrelated": "ئالاقىدار",
        "searchall": "ھەممىسى",
        "search-error": "ئىزدەش جەريانىدا بىر خاتالىق يۈز بەردى: $1",
        "preferences": "مايىللىق",
        "mypreferences": "مايىللىق",
-       "prefs-edits": "تەھرىر سانى:",
+       "prefs-edits": "تەھرىرلەش قېتىم سانى:",
        "prefsnologintext2": "مايىللىقىڭىزنى ئۆزگەرتىش ئۈچۈن $1.",
        "prefs-skin": "تېرە",
        "skin-preview": "ئالدىن كۆزەت",
        "prefs-personal": "ئىشلەتكۈچى سەپلىمە ھۆججىتى",
        "prefs-rc": "ئاخىرقى ئۆزگەرتىشلەر",
        "prefs-watchlist": "كۆزەت تىزىملىكى",
+       "prefs-editwatchlist": "كۆزەت تىزىملىكىنى تەھرىرلەش",
+       "prefs-editwatchlist-raw": "ئەسلى كۆزەت تىزىملىكىنى تەھرىرلەش",
+       "prefs-editwatchlist-clear": "كۆزىتىش تىزىملىكىنى تازىلاش",
        "prefs-watchlist-days": "كۆزەت تىزىملىكىدە كۆرۈنىدىغان كۈن سانى:",
        "prefs-watchlist-days-max": "ئەڭ چوڭ 1$ {{PLURAL:$1|كۈن}}",
-       "prefs-watchlist-edits": "Ù\83Û\88Ú\86Û\95Ù\8aتÙ\89Ù\84Ú¯Û\95Ù\86 Ù\83Û\86زÛ\95ت ØªÙ\89زÙ\89Ù\85Ù\84Ù\89Ù\83Ù\89دÛ\95 Ø¦Û\95Ú­ Ù\83Û\86Ù¾ Ø¦Û\86زگÛ\95رتÙ\89Ø´ Ø³Ø§Ù\86Ù\89:",
+       "prefs-watchlist-edits": "Ù\83Û\86زÙ\89تÙ\89Ø´ ØªÙ\89زÙ\89Ù\85Ù\84Ù\89Ù\83Ù\89دÛ\95 Ø¦Û\95Ú­ Ù\83Û\86Ù¾ Ø¦Û\86زگÛ\95رتÙ\89Ø´ Ø³Ø§Ù\86Ù\89Ù\86Ù\89 Ù\83Û\86رسÙ\89تÙ\89Ø´:",
        "prefs-watchlist-edits-max": "ئەڭ كۆپ سانى: 1000",
        "prefs-watchlist-token": "كۆزەت تىزىملىك نىشانى:",
        "prefs-misc": "ئارىلاشما تۈر",
        "prefs-resetpass": "پارولنى ئۆزگەرتىش",
-       "prefs-changeemail": "ئېلخەت ئۆزگەرت",
+       "prefs-changeemail": "ئېلخەت ئۆزگەرتىش ياكى چىقىرۋېتىش",
        "prefs-setemail": "ئېلخەت ئادرېس تەڭشەك",
        "prefs-email": "ئېلخەت تاللانما",
        "prefs-rendering": "كۆرۈنۈش",
        "saveprefs": "ساقلا",
        "restoreprefs": "بارلىق كۆڭۈلدىكى تەڭشەكنى ئەسلىگە كەلتۈر (بارلىق بۆلەكلەردە)",
-       "prefs-editing": "تەھرىر",
+       "prefs-editing": "تەھرىرلەش",
        "searchresultshead": "ئىزدە",
        "stub-threshold": "<a href=\"#\" class=\"stub\">قىسقا بەت ئۇلانمىسى</a> فورمات چەك قىممىتى (بايت) :",
        "stub-threshold-disabled": "چەكلەنگەن",
        "username": "{{GENDER:$1|ئىشلەتكۇچى ئىسمى}}:",
        "prefs-memberingroups": "{{PLURAL:$1|گۇرۇپپا}} دىكى{{GENDER:$2| ئەزا}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 (غىچە $2)",
        "prefs-registration": "خەتلەتكەن ۋاقىت:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "ھەقىقىي ئىسىم:",
        "prefs-tokenwatchlist": "ئاچقۇچ",
        "prefs-diffs": "پەرقلەر",
        "prefs-help-prefershttps": "بۇ سەپلەك، سىز قايتا تىزىمغا كىرگەندە ئىشلەيدۇ.",
-       "userrights": "ئىشلەتكۈچى ھوقۇقى باشقۇرۇش",
-       "userrights-lookup-user": "ئىشلەتكۈچى گۇرۇپپىسى باشقۇرۇش",
+       "userrights": "ئابونت ھوقۇقى",
+       "userrights-lookup-user": "ئەزا تاللاڭ",
        "userrights-user-editname": "ئىشلەتكۈچى ئاتى كىرگۈزۈڭ:",
-       "editusergroup": "ئىشلەتكۈچى گۇرۇپپىسى تەھرىر",
+       "editusergroup": "ئىشلەتكۈچى گۇرۇپپىسى",
        "editinguser": "ئىشلەتكۈچى '''[[User:$1|$1]]''' $2 نىڭ ھوقۇقىنى ئۆزگەرتىۋاتىدۇ",
        "userrights-editusergroup": "ئىشلەتكۈچى گۇرۇپپىسى تەھرىر",
        "saveusergroups": "ئىشلەتكۈچى گۇرۇپپىسى ساقلا",
        "userrights-changeable-col": "سىز ئۆزگەرتەلەيدىغان گۇرۇپپا",
        "userrights-unchangeable-col": "سىز ئۆزگەرتەلمەيدىغان گۇرۇپپا",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "$1 دا توختاش",
+       "userrights-expiry-none": "توختىتىلمايدۇ",
+       "userrights-expiry": "قەرەلى:",
+       "userrights-expiry-othertime": "باشقا ۋاقىت:",
        "group": "گۇرۇپپا:",
        "group-user": "ئىشلەتكۈچىلەر",
        "group-autoconfirmed": "ئۆزلۈكىدىن جەزملەنگەن ئىشلەتكۈچىلەر",
        "right-move": "بەت يۆتكە",
        "right-move-subpages": "بەتنى تاماق بەتلىرى بىلەن قوشۇپ يۆتكە",
        "right-move-rootuserpages": "غول ئىشلەتكۈچى بېتىنى يۆەتكە",
+       "right-move-categorypages": "تۈر بېتىنى يۆتكەش",
        "right-movefile": "ھۆججەت يۆتكە",
        "right-suppressredirect": "ھۆججەت يۈتكىگەندە مەنبە بەتنىڭ قايتا نىشان بەلگىلىنىشىنى قۇرما.",
        "right-upload": "ھۆججەتلەرنى يۈكلە",
        "right-reupload": "مەۋجۇد ھۆججەتنى قاپلا",
        "right-reupload-own": "ئوخشاش بىر ئادەم يوللىغان ھۆججەتنى قاپلىۋەت",
        "right-reupload-shared": "ئېتىبارغا ئېلىنمايدىغان يەرلىك ھەمبەھىر كۆپ ۋاسىتە ئامبىرىدىكى ھۆججەت",
-       "right-upload_by_url": "URL دىن ھۆججەت يۈكلە",
+       "right-upload_by_url": "URL دىن ھۆججەت يۈكلەش",
        "right-purge": "جەزملەشنى سورىمايلا تور بېكەت غەملىكىنى تازىلا",
        "right-autoconfirmed": "يېرىم قوغدالغان بەت تەھرىر",
        "right-bot": "ئاپتوماتىك جەريان دەپ قارىلىدۇ",
        "right-siteadmin": "ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ",
        "right-override-export-depth": "بەت قەۋەتلىك ئۇلىنىشى بار بەتنى چىقار",
        "right-sendemail": "باشقا ئىشلەتكۈچىگە ئېلخەت يوللا",
+       "grant-group-email": "ئېلخەت يوللاش",
+       "grant-createaccount": "ھېسابات قۇرۇش",
+       "grant-editmywatchlist": "كۈزىتىش تىزىملىكىڭىزنى تەھرىرلەڭ",
+       "grant-editpage": "مەۋجۇت بەتنى تەھرىرلەش",
+       "grant-editprotected": "قوغدىلىدىغان بەتنى تەھرىرلەش",
+       "grant-highvolume": "چوڭ مىقدارلىق تەھرىرلەش",
+       "grant-uploadfile": "يېڭى ھۆججەت يۈكلەش",
+       "grant-basic": "ئاساسىي ھوقۇق",
+       "grant-viewmywatchlist": "كۈزىتىش تىزىملىكىڭىزنى كۆرۈڭ",
        "newuserlogpage": "ئىشلەتكۈچى قۇرغان خاتىرە",
        "newuserlogpagetext": "(چەكلەنگەن)",
        "rightslog": "ئىشلەتكۈچى ھوقۇق خاتىرىسى",
        "rightslogtext": "ئىشلەتكۈچى ھوقۇق خاتىرىسى",
        "action-read": "بۇ بەتنى ئوقۇ",
        "action-edit": "بۇ بەتنى تەھرىرلە",
-       "action-createpage": "بۇ بەتنى قۇر",
-       "action-createtalk": "مۇنازىرە بېتى قۇر",
+       "action-createpage": "بۇ بەتنى قۇرۇش",
+       "action-createtalk": "بۇ مۇنازىرە بېتىنى قۇرۇش",
        "action-createaccount": "بۇ ئىشلەتكۈچى ھېساباتىنى قۇر",
        "action-minoredit": "بۇنىڭغا ئازراقلا تەھرىر بەلگىسى قوي",
        "action-move": "بۇ بەتنى يۆتكە",
        "action-move-subpages": "بۇ بەتنىڭ تارماق بەتلىرىنى قوشۇپ يۆتكە",
        "action-move-rootuserpages": "غول ئىشلەتكۈچى بېتىنى يۆتكە",
+       "action-move-categorypages": "تۈر بېتىنى يۆتكەش",
        "action-movefile": "بۇ ھۆججەتنى يۆتكە",
        "action-upload": "بۇ ھۆججەتنى يۈكلە",
        "action-reupload": "مەۋجۇد ھۆججەتنى قاپلا",
        "action-upload_by_url": "بۇ ھۆججەتنى URL دىن يۈكلە",
        "action-writeapi": "API يېزىشقا ئىشلىتىلىدۇ",
        "action-delete": "بۇ بەتنى ئۆچۈر",
-       "action-deleterevision": "بۇ تۈزىتىلگەن نەشرىنى ئۆچۈر",
-       "action-deletedhistory": "بۇ بەتنىڭ ئۆچۈرۈش تارىخىنى كۆرسەت",
+       "action-deleterevision": "تۈزىتىلگەن نەشرىنى ئۆچۈرۈش",
+       "action-deletelogentry": "كۈندىلىك خاتىرىنى ئۆچۈرۈش",
+       "action-deletedhistory": "بۇ بەتنىڭ ئۆچۈرۈش تارىخىنى كۆرسىتىش",
        "action-browsearchive": "ئۆچۈرۈلگەن بەتنى ئىزدە",
-       "action-undelete": " بۇ بەتنى ئەسلىگە كەلتۈر",
+       "action-undelete": "بەتنى ئەسلىگە كەلتۈرۈش",
        "action-suppressrevision": "بۇ يوشۇرۇلغان تۈزىتىلگەن نەشرىنى قايتا كۆرۈپ ئەسلىگە كەلتۈر",
        "action-suppressionlog": "بۇ شەخسىي خاتىرىنى كۆرسەت",
        "action-block": "بۇ ئىشلەتكۈچىنىڭ تەھرىرىنى چەكلە",
        "action-sendemail": "ئېلخەت يوللا",
        "action-editmywatchlist": "كۈزىتىش تىزىملىكىڭىزنى تەھرىرلەڭ",
        "action-viewmywatchlist": "كۈزىتىش تىزىملىكىڭىزنى كۆرۈڭ",
+       "action-purge": "بۇ بەتنى يېڭىلاش",
        "nchanges": "$1 {{PLURAL:$1|ئۆزگەرتىش|ئۆزگەرتىش}}",
        "enhancedrc-history": "تارىخ",
        "recentchanges": "يېقىنقى ئۆزگەرتىشلەر",
        "recentchanges-label-minor": "بۇ ئازراقلا تەھرىرلەش",
        "recentchanges-label-bot": "بۇ تەھرىرنى ماشىنا ئادەم ئېلىپ بارغان",
        "recentchanges-label-unpatrolled": "بۇ تەھرىر تېخى كۆزىتىلمىگەن",
+       "recentchanges-legend-heading": "<strong>ئىزاھات:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بۇنىڭغىمۇ قاراڭ [[Special:NewPages|يېڭى بەتلەر تىزىملىگى]])",
+       "recentchanges-submit": "كۆرسىتىش",
+       "rcfilters-legend-heading": "<strong>قىسقارتىپ يېزىلىش تىزىملىكى:</strong>",
+       "rcfilters-other-review-tools": " <strong>باشقا تەكشۈرۈش قوراللىرى</strong>",
+       "rcfilters-grouping-title": "گۇرۇپپىلىنىۋاتىدۇ",
+       "rcfilters-activefilters": "قوزغىتىلىغان سۈزگۈچلەر",
+       "rcfilters-days-title": "يېقىنقى بىر نەچچە كۈن",
+       "rcfilters-hours-title": "يېقىنقى بىر نەچچە سائەت",
+       "rcfilters-quickfilters": "سۈزگۈچ ساقلاندى",
+       "rcfilters-quickfilters-placeholder-title": "ئۇلىنىش ساقلانمىدى",
+       "rcfilters-savedqueries-defaultlabel": "سۈزگۈچ ساقلاندى",
+       "rcfilters-savedqueries-rename": "ئىسىم ئۆزگەرتىش",
+       "rcfilters-savedqueries-remove": "چىقىرىۋىتىش",
+       "rcfilters-savedqueries-new-name-label": "نامى",
+       "rcfilters-savedqueries-apply-label": "سۈزگۈچ قۇرۇش",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "ئەسلىدىكى سۈزگۈچنى قۇرۇش",
+       "rcfilters-savedqueries-cancel-label": "چېكىنىش",
+       "rcfilters-filterlist-title": "سۈزگۈچلەر",
+       "rcfilters-filterlist-whatsthis": "بۇلار قانداق خىزمەت قىلىدۇ؟",
+       "rcfilters-highlightmenu-title": "رەڭ تاللاش",
+       "rcfilters-filterlist-noresults": "سۈزگۈچ تېپىلمىدى",
+       "rcfilters-filter-editsbyself-label": "سىز ئۆزگەرتكەن",
+       "rcfilters-filter-editsbyself-description": "ئۆزىڭىزنىڭ تۆھپىسى.",
+       "rcfilters-filter-editsbyother-label": "باشقىلار ئۆزگەرتكەن",
+       "rcfilters-filter-user-experience-level-registered-label": "تىزىملانغان",
+       "rcfilters-filter-user-experience-level-registered-description": "كىرىش تەھرىرى.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "تىزىملاتمىغان",
+       "rcfilters-filter-user-experience-level-newcomer-label": "يېڭى كەلداخۇن",
+       "rcfilters-filter-user-experience-level-learner-label": "يېڭى ئۆگەنچى",
+       "rcfilters-filter-bots-label": "ماشىنا ئادەم",
+       "rcfilters-filtergroup-reviewstatus": "رازۋىتكا ھالىتى",
+       "rcfilters-filter-patrolled-label": "چارلاندى",
+       "rcfilters-filter-minor-label": "كىچىك تەھرىرلەش",
+       "rcfilters-filter-major-label": "كىچىك تەھرىرلەش ئەمەس",
+       "rcfilters-filter-watchlist-watched-label": "كۆزىتىش تىزىملىكىدە",
+       "rcfilters-filter-newpages-label": "بەت قۇرۇلدى",
+       "rcfilters-filter-categorization-label": "تۈر ئۆزگەرتىلدى",
+       "rcfilters-filtergroup-lastRevision": "ئاخىرقى نەشىرلىرى",
+       "rcfilters-filter-lastrevision-label": "ئاخىرقى نەشىرى",
+       "rcfilters-view-tags": "بەلگە قويۇلغان تەھرىرلەش",
        "rcnotefrom": "تۆۋەندىكىسى '''$2''' نىڭ ئۆزگەرتىشى (ئەڭ كۆپ بولغاندا '''$1''' كۆرسىتىدۇ )",
        "rclistfrom": "$3 $2 دىن باشلانغان يېڭى ئۆزگەرتىشنى كۆرسەت",
-       "rcshowhideminor": "$1 ئازراقلا تەھرىر",
+       "rcshowhideminor": "$1 ئازراقلا تەھرىرلەش",
+       "rcshowhideminor-show": "كۆرسىتىش",
+       "rcshowhideminor-hide": "يوشۇر",
        "rcshowhidebots": "$1 ماشىنا ئادەمنىڭ تەھرىرى",
+       "rcshowhidebots-show": "كۆرسەت",
+       "rcshowhidebots-hide": "يوشۇرۇش",
        "rcshowhideliu": "$1 خەتلەنگەن ئىشلەتكۈچى",
+       "rcshowhideliu-show": "كۆرسىتىش",
+       "rcshowhideliu-hide": "يوشۇرۇش",
        "rcshowhideanons": "$1 ئىمزاسىز ئىشلەتكۈچى تەھرىرى",
-       "rcshowhidepatr": "$1 كۆزىتىلگەن تەھرىر",
+       "rcshowhideanons-show": "كۆرسىتىش",
+       "rcshowhideanons-hide": "يوشۇر",
+       "rcshowhidepatr": "$1 كۆزىتىلگەن تەھرىرلەش",
+       "rcshowhidepatr-show": "كۆرسىتىش",
+       "rcshowhidepatr-hide": "يوشۇرۇش",
        "rcshowhidemine": "$1 مېنىڭ تەھرىرىم",
+       "rcshowhidemine-show": "كۆرسىتىش",
+       "rcshowhidemine-hide": "يوشۇرۇش",
+       "rcshowhidecategorization-show": "كۆرسىتىش",
+       "rcshowhidecategorization-hide": "يوشۇرۇش",
        "rclinks": "يېقىنقى $2 كۈن ئىچىدىكى ئەڭ يېڭى  $1 قېتىملىق ئۆزگەرتىشنى كۆرسەت.",
        "diff": "پەرق",
        "hist": "تارىخ",
-       "hide": "يوشۇر",
+       "hide": "يوشۇرۇش",
        "show": "كۆرسەت",
        "minoreditletter": "ئازراقلا",
        "newpageletter": "يېڭى",
        "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1  {{PLURAL:$1|ئىشلەتكۈچى|ئىشلەتكۈچى}}كۆزىتىۋاتىدۇ]",
        "rc_categories": "تۈر چېگرىسى (\"|\" بىلەن ئايرىلىدۇ )",
-       "rc_categories_any": "خالىغان",
+       "rc_categories_any": "خالىغانچە تاللاش",
        "rc-change-size": "$1",
        "rc-change-size-new": "ئۆزگەرتكەندىن كېيىن $1 {{PLURAL:$1|بايت}}",
        "newsectionsummary": "* $1 * يېڭى ئابزاس",
        "rc-enhanced-expand": "تەپسىلاتىنى كۆرسەت",
-       "rc-enhanced-hide": "تەپسىلاتىنى يوشۇر",
+       "rc-enhanced-hide": "تەپسىلاتىنى يوشۇرۇش",
        "rc-old-title": "ئەڭ دەسلەپتە \"$1\" سۈپىتىدە قۇرۇلغان",
        "recentchangeslinked": "مۇناسىۋەتلىك ئۆزگەرتىشلەر",
        "recentchangeslinked-feed": "مۇناسىۋەتلىك ئۆزگەرتىشلەر",
        "recentchangeslinked-summary": "بۇ ئالاھىدە بەت يۈزى كۆرسەتكەن بەتتىن ئۇلىنىپ چىققان يېقىنقى ئۆزگەرتىش تىزىملىكى (ياكى ئالاھىدە تۈرنىڭ ئەزاسى).\n [[Special:Watchlist|كۆزەت تىزىملىكىڭىز]] دىكى بەت يۈزى '''توم''' كۆرسىتىلىدۇ.",
        "recentchangeslinked-page": "بەت نامى:",
        "recentchangeslinked-to": "بېرىلگەن بەتكە ئۇلانغان ئۆزگەرتىشنى كۆرسەت",
-       "upload": "ھۆججەت يۈكلە",
-       "uploadbtn": "ھۆججەت يۈكلە",
+       "upload": "ھۆججەت يۈكلەش",
+       "uploadbtn": "ھۆججەت يۈكلەش",
        "reuploaddesc": "يۈكلەشتىن ۋاز كېچىپ، يۈكلەش كۆزنىكىگە قايت",
        "upload-tryagain": "ئۆزگەرتىلگەن ھۆججەت چۈشەندۈرۈشى يوللا",
        "uploadnologin": "تىزىمغا كىرمىدى",
        "uploaderror": "يۈكلەش خاتالىقى",
        "upload-recreate-warning": "'''ئاگاھلاندۇرۇش: ئوخشاش ئاتلىق ھۆججەتتىن بىرى ئىلگىرى ئۆچۈرۈلگەن ياكى باشقا جايغا يۆتكەلگەن.'''\nپايدىلىنىش ئۈچۈن بۇ بەتنىڭ ئۆچۈرۈش ۋە يۆتكەش خاتىرىسى بۇ جايدا تەمىنلەندى:",
        "uploadtext": "تۆۋەندىكى كۆزنەكنى ئىشلىتىپ ھۆججەت يۈكلەڭ.\nئىلگىرى يۈكلەنگەن ھۆججەتلەرنى كۆرۈش ياكى ئىزدەشتە [[Special:FileList|ھۆججەت يۈكلەش تىزىملىكى]]گە كىرىپ،  (يېڭىدىن) يۈكلەنگەننى [[Special:Log/upload|يۈكلەش خاتىرىسى]]دە خاتىرىلىنىدۇ، ئۆچۈرۈلگىنى [[Special:Log/delete|ئۆچۈرۈش خاتىرىسى]]دە خاتىرىلىنىدۇ.\n\nبەتكە ھۆججەت يۈكلىمەكچى بولسىڭىز، تۆۋەندىكى ئۇلانما شەكلىنى ئىشلىتىڭ:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' ھۆججەتنىڭ تولۇق نەشرىنى ئىشلىتىدۇ\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' 200 نۇقتا كەڭلىكتىكى سول ياندىكى رامكىدا قايتا پەيدا بولىدىغان 'ئالماشتۇرىدىغان تېكست' چۈشەندۈرۈشىنى ئىشلىتىدۇ.\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' ھۆججەتنى كۆرسەتمەيلا بىۋاسىتە ئۇلىنىدۇ",
-       "upload-permitted": "يول قويىدىغان ھۆججەت تىپى: $1",
-       "upload-preferred": "تەۋسىيىلىك ھۆججەت تىپى: $1",
-       "upload-prohibited": "چەكلەيدىغان ھۆججەت تىپى: $1",
+       "upload-permitted": "يول قويىدىغان ھۆججەت {{PLURAL:$2|تىپى}}: $1",
+       "upload-preferred": "تەۋسىيىلىك ھۆججەت {{PLURAL:$2|تىپى}}: $1",
+       "upload-prohibited": "چەكلەيدىغان ھۆججەت {{PLURAL:$2|تىپى}}: $1",
        "uploadlogpage": "خاتىرە يۈكلە",
        "uploadlogpagetext": "تۆۋەندىكىسى يېقىندا يوللانغان ھۆججەت تىزىملىكى.\\n\n [[Special:NewFiles|يېڭى ھۆججەت كارىدورى]]دىن تېخىمۇ كۆپ سۈرەتلەرنى كۆرۈڭ.",
        "filename": "ھۆججەت ئاتى",
        "nopagetext": "سىز بەلگىلىگەن نىشان بەت مەۋجۇد ئەمەس.",
        "pager-newer-n": "{{PLURAL:$1|يېڭى 1|يېڭى $1}}",
        "pager-older-n": "{{PLURAL:$1|كونا 1|كونا $1}}",
-       "suppress": "نازارەتچى",
+       "suppress": "چەكلەش",
        "querypage-disabled": "بۇ ئالاھىدە بەت ئۈنۈم سەۋەبىدىن چەكلەندى.",
        "apisandbox": "API قۇم ساندۇقى",
        "apisandbox-api-disabled": "مەزكۇر بېكەتتە API چەكلەندى.",
        "apisandbox-submit": "ئىلتىماس يوللا",
        "apisandbox-reset": "تازىلا",
        "apisandbox-examples": "مىسال",
-       "apisandbox-results": "نەتىجە",
+       "apisandbox-results": "نەتىجىسى",
        "apisandbox-request-url-label": "تەلەپ قىلغان URL:",
        "apisandbox-request-time": "ئىلتىماس ۋاقتى: $1",
        "booksources": "كىتاب مەنبەسى",
        "booksources-search-legend": "كىتاب مەنبەسى ئىزدە",
        "booksources-isbn": "ISBN:",
+       "booksources-search": "ئىزدەش",
        "booksources-text": "تۆۋەندىكىسى بىر قىسىم تور كىتابخانىلىرىنىڭ تىزىملىكى، ئىچىدە سىز ئىزدىمەكچى بولغان كىتابلارنىڭ تېخىمۇ كۆپ ئۇچۇرى بولۇشى مۇمكىن:",
        "booksources-invalid-isbn": "تەمىنلىگەن ISBN نومۇرى توغرا ئەمەس. ئەسلى كۆچۈرگەن مەنبەدىكى نومۇردا خاتالىق بار يوقلۇقىنى تەكشۈرۈڭ.",
        "specialloguserlabel": "ئىشلەتكۈچى:",
        "alllogstext": "{{SITENAME}} بارلىق ئىشلەتكىلى بولىدىغان خاتىرىنى ئۇنىۋېرسال كۆرسىتىدۇ.\nسىز خاتىرە تىپى، ئىشلەتكۈچى ئاتى (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) نى تاللىيالايسىز ياكى مۇناسىۋەتلىك بەت (چوڭ كىچىك يېزىلىشنى پەرقلەندۈرىدۇ) ئارقىلىق ئىزدەش دائىرىسىنى كىچىكلىتەلەيسىز.",
        "logempty": "خاتىرىدە ماس كېلىدىغان تۈر يوق.",
        "log-title-wildcard": "بۇ تېكست بىلەن باشلانغان ماۋزۇنى ئىزدە",
-       "showhideselectedlogentries": "تالغان خاتىرىسى كۈرسەت / يوشۇر",
+       "showhideselectedlogentries": "تاللىغان خاتىرىنى كۆرسىتىش/يوشۇرۇش",
        "allpages": "ھەممە بەت",
        "nextpage": "كەينى بەت ($1)",
        "prevpage": "ئالدىنقى بەت ($1)",
        "allpagesto": "بۇ جايدىن ئاياغلاشقان بەتنى كۆرسەت:",
        "allarticles": "ھەممە بەت",
        "allinnamespace": "ئالدى بەت ($1)",
-       "allpagessubmit": "يۆتكەل",
+       "allpagessubmit": "يوللاش",
        "allpagesprefix": "ئالدى قوشۇلغۇچىسى بار بەتنى كۆرسەت:",
        "allpagesbadtitle": "بېرىلگەن بەت ماۋزۇسى قانۇنسىز ياكى ئىچكى تىلغا ئىگە ياكى ئىچكى wiki نىڭ ئالدى قوشۇلغۇچىسى.\nئۇ ماۋزۇغا ئىشلەتكىلى بولمايدىغان بىر ياكى بىر قانچە ھەرپنى ئۆز ئىچىگە ئالغان بولۇشى مۇمكىن.",
        "allpages-bad-ns": "{{SITENAME}} دا\\\"$1\" ئات بوشلۇقى يوق.",
-       "allpages-hide-redirects": "قايتا نىشانلاشنى يوشۇر",
+       "allpages-hide-redirects": "قايتا نىشانلاشنى يوشۇرۇش",
        "cachedspecial-viewing-cached-ttl": "سىز بۇ بەتنىڭ غەملەك نەشرىنى كۆرۈۋاتىسىز، ئەڭ كۆپ بولغاندا $1 كونىراق.",
        "cachedspecial-viewing-cached-ts": "سىز بۇ بەتنىڭ غەملەك نەشرىنى كۆرۈۋاتىسىز، ئۇ ئەڭ يېڭى تولۇق نەشرى بولماسلىقى مۇمكىن.",
        "cachedspecial-refresh-now": "يېقىنقىنى كۈرىشى.",
        "delete-edit-reasonlist": "ئۆچۈرۈش سەۋەبى تەھرىر",
        "delete-toobig": "بۇ بەتنىڭ بەك كۆپ تەھرىرلەش تارىخى بار، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق. {{SITENAME}} قالايمىقانچىلىقنىڭ ئالدىنى ئېلىش ئۈچۈن بۇ خىل بەتلەرنى ئۆچۈرۈش مەشغۇلاتى چەكلەندى.",
        "delete-warning-toobig": "بۇ بەتنىڭ تەھرىرلەش تارىخى بەك كۆپ، {{PLURAL:$1|تۈزىتىلگەن نەشرى|تۈزىتىلگەن نەشرى}} قېتىمدىن ئارتۇق.\nبۇ بەت ئۆچۈرۈلسە {{SITENAME}} ساندانىنىڭ مەشغۇلاتىنى قالايمىقانلاشتۇرۇۋېتىشى مۇمكىن؛\nبۇ مەشغۇلاتنى داۋاملاشتۇرۇشتىن ئىلگىرى ئېھتىيات قىلىڭ.",
-       "rollback": "تەھرىر ئەسلىگە قايتۇر",
+       "rollback": "تەھرىرلەشكە قايتىش",
        "rollbacklink": "ئەسلىگە قايتۇر",
        "rollbacklinkcount": "$1 {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
        "rollbacklinkcount-morethan": "$1 دىن كۆپ {{PLURAL:$1|تەھرىر}}نى ئەسلىگە قايتۇر",
        "minimum-size": "ئەڭ كىچىك چوڭلۇقى",
        "maximum-size": "ئەڭ چوڭ چوڭلۇقى:",
        "pagesize": "(بايت)",
-       "restriction-edit": "تەھرىر",
+       "restriction-edit": "تەھرىرلەش",
        "restriction-move": "يۆتكە",
        "restriction-create": "قۇر",
        "restriction-upload": "يۈكلە",
        "contributions": "{{GENDER:$1|ئىشلەتكۈچى}} تۆھپىسى",
        "contributions-title": "$1 نىڭ ئىشلەتكۈچى تۆھپىسى",
        "mycontris": "تۆھپە",
+       "anoncontribs": "تۆھپە",
        "contribsub2": "{{GENDER:$3|$1}} ($2) ئۈچۈن",
        "nocontribs": "بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.",
        "uctop": "(نۆۋەتتىكى)",
        "sp-contributions-search": "تۆھپە ئىزدە",
        "sp-contributions-username": "IP ئادرېس ياكى ئىشلەتكۈچى نامى:",
        "sp-contributions-toponly": "ئەڭ يېڭى تۈزىتىلگەن نەشرىنىلا كۆرسەت",
+       "sp-contributions-newonly": "بەت قۇرۇش تەھرىرىنىلا كۆرسەت",
        "sp-contributions-submit": "ئىزدە",
        "whatlinkshere": "بۇ جايدىكى ئۇلانما",
        "whatlinkshere-title": "\"$1\" بەتكە ئۇلانغان بەتلەر",
        "whatlinkshere-prev": "{{PLURAL:$1|ئالدى|ئالدى $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|كەينى|كەينى $1}}",
        "whatlinkshere-links": "→ ئۇلانما",
-       "whatlinkshere-hideredirs": "$1 قايتا نىشان بەلگىلە",
+       "whatlinkshere-hideredirs": "$1 قايتا نىشان بەلگىلەش",
        "whatlinkshere-hidetrans": "$1 ئۆز ئىچىگە ئالغان",
        "whatlinkshere-hidelinks": "$1 ئۇلانما",
        "whatlinkshere-hideimages": "$1 ھۆججەت ئۇلانما",
        "ipblocklist": "چەكلەنگەن ئىشلەتكۈچىلەر",
        "ipblocklist-legend": "چەكلەنگەن ئىشلەتكۈچىدىن بىرنى ئىزدە",
        "blocklist-userblocks": "ھېسابات چەكلەشنى يوشۇر",
-       "blocklist-tempblocks": "ۋاقىتلىق چەكلەشنى يوشۇر",
+       "blocklist-tempblocks": "ۋاقىتلىق چەكلەنمىنى يوشۇرۇش",
        "blocklist-addressblocks": "يەككە IP چەكلەشنى يوشۇر",
-       "blocklist-rangeblocks": "دائىرە چەكلىمىسىنى يوشۇر",
+       "blocklist-rangeblocks": "چەكلەنگەن IP بۆلىكىنى يوشۇرۇش",
        "blocklist-timestamp": "ۋاقىت تامغاسى",
        "blocklist-target": "نىشان",
        "blocklist-expiry": "ۋاقتى ئۆتتى",
        "allmessages-filter-modified": "ئۆزگەرتىلگەن",
        "allmessages-prefix": "ئالدى قوشۇلغۇچى سۈزگۈچ:",
        "allmessages-language": "تىل:",
-       "allmessages-filter-submit": "يۆتكەل",
+       "allmessages-filter-submit": "يوللاش",
        "thumbnail-more": "چوڭايت",
        "filemissing": "ھۆججەت يوقالغان",
        "thumbnail_error": "كىچىك رەسىم قۇرۇش خاتالىقى: $1",
        "import-nonewrevisions": "ھەممە تۈزىتىش بايىلا ئەكىرىلگەن.",
        "xml-error-string": "$2 قۇردىكى $1، ستون $3 ($4 بايت): $5",
        "import-upload": "XML سانلىق مەلۇماتى يۈكلە",
-       "import-token-mismatch": "جەريان سانلىق مەلۇماتى يوقالدى.\n قايتا سىناڭ.",
+       "import-token-mismatch": "جەريان سانلىق مەلۇماتى يوقالدى.\n\nسىز بەلكىم چېكىنىپ چىقتىڭىز. '''سېستىمىغا تىزىملىتىپ كىرگەنلىك ھالىتىڭىزنى تەكشۈرۈڭ، ھەم قايتا سىناڭ '''. ئەگەر داۋاملىق ئىشلىمىسە، [[Special:UserLogout|چېكىنىش]] نى سىناپ قايتا كىرىڭ، شۇنداقلا توركۆرگۈچىڭىزنىڭ تور بېكەت cookie نى قوللايدىغانلىقىنى تەكشۈرۈڭ.",
        "import-invalid-interwiki": "بەلگىلەنگەن wiki دىن ئەكىرەلمىدى.",
        "import-error-edit": "\"$1\" نى ئەكىرمىدى چۈنكى سىز ئۇنى تەھرىرلەشكە يول قويمىغان.",
        "import-error-create": "\"$1\" نى ئەكىرمىدى چۈنكى سىز ئۇنى قۇرۇشقا يول قويمىغان.",
        "import-logentry-interwiki-detail": "$2 دىن كەلگەن $1 {{PLURAL:$1|تۈزىتىش|تۈزىتىش}}",
        "javascripttest": "JavaScript سىناش",
        "javascripttest-qunit-intro": "mediawiki.org دىكى [$1 سىناش قوللانمىسى]نى كۆرۈڭ.",
-       "tooltip-pt-userpage": "ئىشلەتكۈچى بېتىڭىز",
+       "tooltip-pt-userpage": "{{GENDER:|سىزنىڭ ئىشلەتكۈچى}} بېتىڭىز",
        "tooltip-pt-anonuserpage": "بۇ بېكەتنى تەھرىرلىگەندە ئىشلەتكەن IP ماس كەلگەن ئىشلەتكۈچى بېتى",
-       "tooltip-pt-mytalk": "مۇنازىرە بېتىڭىز",
+       "tooltip-pt-mytalk": "{{GENDER:|سىزنىڭ}} مۇنازىرە بېتىڭىز",
        "tooltip-pt-anontalk": "مەزكۇر IP ئادرېستىن كەلگەن تەھرىرنىڭ مۇنازىرىسى",
-       "tooltip-pt-preferences": "مايىللىق تەڭشىگىڭىز",
+       "tooltip-pt-preferences": "{{GENDER:|سىزنىڭ}} مايىللىق تەڭشىكىڭىز",
        "tooltip-pt-watchlist": "سىز كۆزىتىۋاتقان بەتلەر تىزىملىگى",
-       "tooltip-pt-mycontris": "تۆھپە تىزىملىكىڭىز",
+       "tooltip-pt-mycontris": "{{GENDER:|سىزنىڭ}} تۆھپە تىزىملىكىڭىز",
        "tooltip-pt-login": "تىزىمغا كىرىشىڭىزنى تەۋسىيە قىلىمىز ئەمما مەجبۇرىي ئەمەس",
-       "tooltip-pt-logout": "تىزىمدىن چىق",
+       "tooltip-pt-logout": "چېكىنىش",
        "tooltip-pt-createaccount": "ھېساباتتىن بىرنى قۇرۇپ تىزىمغا كىرىشىڭىزنى تەۋسىيە قىلىمىز، ئەمما بۇ مەجبۇرىي ئەمەس.",
        "tooltip-ca-talk": "بەت مەزمۇنى ھەققىدىكى مۇنازىرە",
-       "tooltip-ca-edit": "بۇ بەتنى تەھرىرلىيەلەيسىز.\nساقلاشتىن ئىلگىرى ئالدىن كۆزەت كۇنۇپكىسىنى ئىشلىتىڭ",
+       "tooltip-ca-edit": "بۇ بەتنى تەھرىرلەش",
        "tooltip-ca-addsection": "يېڭى بىر مۇنازىرە باشلاڭ",
        "tooltip-ca-viewsource": "بۇ بەت قوغدالغان.\nمەنبە ھۆججىتىنى كۆرەلەيسىز",
        "tooltip-ca-history": "بۇ بەتنىڭ بۇرۇنقى نەشرى",
        "tooltip-ca-watch": "بۇ بەتنى كۆزەت تىزىملىكىگە قوش",
        "tooltip-ca-unwatch": "بۇ بەتنى كۆزەت تىزىملىكىمدىن چىقىرىۋەت",
        "tooltip-search": "{{SITENAME}} ئىزدە",
-       "tooltip-search-go": "ئەگەر بۇ ئاتتىكى بەت مەۋجۇد بولسا شۇ بەتكە يۆتكەل",
+       "tooltip-search-go": "ئوخشاش ماۋزۇلۇق تېما بولسا، بىۋاستە بۇ بەتكە يۆتكىلىدۇ",
        "tooltip-search-fulltext": "بۇ تېكست بار بەتنى ئىزدە",
        "tooltip-p-logo": "باش بەتنى زىيارەت قىل",
        "tooltip-n-mainpage": "باش بەتنى زىيارەت قىل",
        "tooltip-feed-rss": "بۇ بەتنىڭ RSS قانىلى",
        "tooltip-feed-atom": "بۇ بەتنىڭ Atom قانىلى",
        "tooltip-t-contributions": "بۇ ئىشلەتكۈچىنىڭ تۆھپە تىزىملىكىنى كۆرسەت",
-       "tooltip-t-emailuser": "بۇ ئىشلەتكۈچىگە ئېلخەت يوللا",
+       "tooltip-t-emailuser": "{{GENDER:$1|بۇ ئىشلەتكۈچىگە}} ئېلخەت يوللاش",
        "tooltip-t-upload": "ھۆججەتلەرنى يۈكلە",
        "tooltip-t-specialpages": "بارلىق ئالاھىدە بەتلەر تىزىملىكى",
-       "tooltip-t-print": "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ Ø¨Ø§Ø³Ù\82Ù\89Ù\84Ù\89 Ø¨Ù\88Ù\84Ù\89دÙ\89غاÙ\86 Ù\86Û\95شرى",
+       "tooltip-t-print": "بÛ\87 Ø¨Û\95تÙ\86Ù\89Ú­ Ø¨Ø§Ø³Ù\85ا Ù\86Û\87سخÙ\89سى",
        "tooltip-t-permalink": "ئۆزگەرتىلگەن نەشرىدىكى بۇ بەتنىڭ مەڭگۈلۈك ئۇلانمىسى",
        "tooltip-ca-nstab-main": "مەزمۇن بېتىنى كۆرسەت",
        "tooltip-ca-nstab-user": "ئىشلەتكۈچى بېتىنى كۆرسەت",
        "pageinfo-length": "بەت چوڭلۇقى (بايت)",
        "pageinfo-article-id": "بەت ID",
        "pageinfo-language": "بەت مەزمۇن تىلى",
-       "pageinfo-robot-policy": "ئىزدەش ماتور ھالىتى",
+       "pageinfo-content-model": "بەت مەزمۇنى تىپى",
+       "pageinfo-robot-policy": "ماشىنا ئادەمدە ئىنىدىكىسلاش",
        "pageinfo-robot-index": "چەكلەنمىگەن",
        "pageinfo-robot-noindex": "چەكلەنگەن",
        "pageinfo-watchers": "بەت كۆزەتكۈچىلەر سانى",
        "filedelete-old-unregistered": "بەلگىلەنگەن ھۆججەتنىڭ \"$1\" تۈزىتىلگەن نەشرى سانداندا يوق.",
        "filedelete-current-unregistered": "بەلگىلەنگەن ھۆججەت \"$1\" سانداندا يوق.",
        "filedelete-archive-read-only": "تور بەت مۇلازىمىتىرىدىكى ئارخىپ مۇندەرىجىسى \"$1\"  گە يازغىلى بولمايدۇ.",
-       "previousdiff": "→ ئالدىنقى تەھرىر",
+       "previousdiff": "→ ئالدىنقى تەھرىرلەش",
        "nextdiff": "كېيىنكى تەھرىر ←",
        "mediawarning": "'''ئاگاھلاندۇرۇش''': بۇ ھۆججەتتە زەھەرخەندە كود بولۇشى مۇمكىن، ئۇنى ئىجرا قىلسىڭىز سىستېمىڭىزغا خەۋپ ئېلىپ كېلىشى مۇمكىن.",
        "imagemaxsize": "سۈرەت چوڭلۇق چەكلىمىسى: <br />''(ھۆججەت چۈشەندۈرۈش بېتى ئۈچۈن)''",
        "confirm-unwatch-top": "بۇ بەتنى كۆزەت تىزىمىدىن چىقىرىۋېتەمسىز؟",
        "imgmultipageprev": "← ئالدىنقى بەت",
        "imgmultipagenext": "كېيىنكى بەت →",
-       "imgmultigo": "يۆتكەل!",
-       "imgmultigoto": "$1 بەتكە يۆتكەل",
+       "imgmultigo": "يوللاش!",
+       "imgmultigoto": "$1 .بەتكە يۆتكىلىش",
        "ascending_abbrev": "ئۆسكۈچى",
        "descending_abbrev": "كېمەيگۈچى",
        "table_pager_next": "كېيىنكى بەت",
        "table_pager_last": "ئەڭ ئاخىرقى بەت",
        "table_pager_limit": "ھەر بىر بەتتە $1 تۈر كۆرسەت",
        "table_pager_limit_label": "ھەر بەتتىكى تۈر سانى:",
-       "table_pager_limit_submit": "يۆتكەل",
+       "table_pager_limit_submit": "يوللاش",
        "table_pager_empty": "نەتىجە يوق",
        "autosumm-blank": "بەتنى قۇرۇقدا",
        "autosumm-replace": "ئالماشتۇرۇلغان مەزمۇن '$1'",
        "watchlistedit-raw-done": "كۆزەت تىزىملىكىڭىز يېڭىلاندى.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 ماۋزۇ|$1 ماۋزۇ}} قوشۇلدى:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 ماۋزۇ|$1 ماۋزۇ}} چىقىرىۋېتىلدى:",
+       "watchlisttools-clear": "كۆزىتىش تىزىملىكىنى تازىلاش",
        "watchlisttools-view": "مۇناسىۋەتلىك ئۆزگەرتىشنى كۆرسەت",
        "watchlisttools-edit": "كۆزەت تىزىملىكىنى كۆرۈپ تەھرىرلەش",
        "watchlisttools-raw": "ئەسلى كۆزەت تىزىملىك تەھرىرى",
        "version-entrypoints": "كىرىش نۇقتىسىنىڭ URL لىرى",
        "version-entrypoints-header-entrypoint": "كىرىش نۇقتىسى",
        "version-entrypoints-header-url": "URL",
+       "redirect-submit": "يوللاش",
+       "redirect-lookup": "تەكشۈرۈش:",
        "redirect-value": "قىممىتى:",
+       "redirect-user": "ئابونت ID",
+       "redirect-page": "بەت ID",
+       "redirect-revision": "بەت نەشىرى",
        "redirect-file": "ھۆججەت نامى",
        "redirect-not-exists": "قىممىتى تېپىلمىدى",
        "fileduplicatesearch": "تەكرار ھۆججەت ئىزدە",
        "fileduplicatesearch-result-n": " \"$1\" ھۆججەتنىڭ تامامەن ئوخشاش {{PLURAL:$2|1 تەكرار|$2 تەكرار}} نۇسخىسى بار.",
        "fileduplicatesearch-noresults": "\"$1\" ئاتلىق ھۆججەت تېپىلمىدى.",
        "specialpages": "ئالاھىدە بەتلەر",
-       "specialpages-note": "* ئادەتتىكى ئالاھىدە بەت.\n* <strong class=\"mw-specialpagerestricted\">چەكلىمىلىك ئالاھىدە بەتلەر.</strong>\n* <span class=\"mw-specialpagecached\">غەملەنگەن ئالاھىدە بەتلەر(ۋاقتى ئۆتكەن بولۇشى مۇمكىن).</span>",
        "specialpages-group-maintenance": "ئاسراش دوكلاتى",
        "specialpages-group-other": "باشقا ئالاھىدە بەتلەر",
        "specialpages-group-login": "تىزىملىتىش / كىرىش",
        "compare-invalid-title": "سىز بەلگىلىگەن تېما ئىناۋەتسىز.",
        "compare-title-not-exists": "سىز بەلگىلىگەن تېما مەۋجۇت ئەمەس.",
        "compare-revision-not-exists": "سىز بەلگىلىگەن تۈزىتىلگەن نەشرى مەۋجۇت ئەمەس.",
+       "diff-form": "پەرقلەر",
+       "permanentlink": "مەڭگۈلۈك ئۇلانما",
+       "permanentlink-revid": "تۈزىتىلگەن نەشرى ID",
        "dberr-problems": "كەچۈرۈڭ! بۇ بېكەتتە تېخنىكىلىق قىيىنچىلىق كۆرۈلدى.",
        "dberr-again": "بىر قانچە مىنۇت كۈتۈپ ئاندىن قايتا يۈكلەڭ.",
        "dberr-info": "(ساندان مۇلازىمىتىرىغا ئۇلىنالمىدى:  $1)",
        "logentry-patrol-patrol": "$3 بەتنىڭ $4 تۈزىتىلگەن نەشرىگە $1 چارلاش بەلگىسى سالدى",
        "logentry-patrol-patrol-auto": "$3 بەتنىڭ $4 تۈزىتىلگەن نەشرىگە $1 چارلاش بەلگىسى ئاپتوماتىك سالدى",
        "logentry-newusers-newusers": "ئەزا $1 قۇرۇلبولدى",
-       "logentry-newusers-create": "ئەزا $1 قۇرۇلبولدى",
+       "logentry-newusers-create": "ئەزا ئاكونت $1 تىنى {{GENDER:$2|قۇرۇپ بولغان}}",
        "logentry-newusers-create2": "ئىشلەتكۈچى ھېساباتى $3 نى $1 قۇردى",
        "logentry-newusers-byemail": "ئىشلەتكۈچى ھېساباتى $3 نى $1 قۇردى ھەمدە ئىمنى تورخەتكە ئەۋەتتى",
-       "logentry-newusers-autocreate": "ئىشلەتكۈچى $1 ئاپتوماتلىق قۇرۇلدى",
+       "logentry-newusers-autocreate": "ئىشلەتكۈچى ئاكونتى $1 نى {{GENDER:$2|ئاپتوماتىك قۇردى}}",
        "logentry-rights-rights": "$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $4 دىن $5 غا $1 ئالماشتۇردى",
        "logentry-rights-rights-legacy": "$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى",
        "logentry-rights-autopromote": "$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى",
+       "logentry-upload-overwrite": "$1 يېڭى نەشىرى $3 نى {{GENDER:$2|يوللاش}}",
        "rightsnone": "(يوق)",
        "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
        "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
        "feedback-subject": "تېما:",
        "feedback-submit": "تاپشۇر",
        "feedback-thanks": "كۆپ رەھمەت! قايتۇرما ئىنكاسىڭىز \"[$2 $1]\" بەتكە يوللاندى.",
-       "searchsuggest-search": "ئىزدەش",
+       "searchsuggest-search": "{{SITENAME}} ئىزدەش",
        "searchsuggest-containing": "ئىچىدە…",
        "api-error-badtoken": "ئىچكى خاتالىق: سۆزلىشىش ئىناۋەتسىز.",
        "api-error-emptypage": "يېڭىدىن قۇرۇش، قۇرۇق بەت يول قۇيۇلمايدۇ.",
        "special-characters-group-devanagari": "سانسكرىتچە",
        "special-characters-group-thai": "تايلاندچە",
        "special-characters-group-lao": "لائوسچە",
-       "special-characters-group-khmer": "كېخمېرچە"
+       "special-characters-group-khmer": "كېخمېرچە",
+       "randomrootpage": "خالىغان غول بەت"
 }
index 146647e..03bbe0b 100644 (file)
        "tog-shownumberswatching": "Показувати число користувачів, які додали сторінку до свого списку спостереження",
        "tog-oldsig": "Ваш поточний підпис:",
        "tog-fancysig": "Сприймати підпис як вікітекст (без автоматичного посилання)",
-       "tog-uselivepreview": "Ð\92икоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ñ\88видкий Ð¿Ð¾Ð¿ÐµÑ\80еднÑ\96й Ð¿ÐµÑ\80еглÑ\8fд",
+       "tog-uselivepreview": "Ð\9fоказÑ\83ваÑ\82и Ð¿Ð¾Ð¿ÐµÑ\80еднÑ\96й Ð¿ÐµÑ\80еглÑ\8fд Ð±ÐµÐ· Ð¿ÐµÑ\80езаванÑ\82аженнÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нки",
        "tog-forceeditsummary": "Попереджати, коли не зазначений короткий опис редагування",
        "tog-watchlisthideown": "Приховати мої редагування у списку спостереження",
        "tog-watchlisthidebots": "Приховати редагування ботів у списку спостереження",
        "permissionserrorstext-withaction": "У Вас нема дозволу на $2 з {{PLURAL:$1|1=такої причини|таких причин}}:",
        "contentmodelediterror": "Ви не можете редагувати цю версію, оскільки модель його змісту —  <code>$1</code>, відрізняється від теперішньої моделі змісту сторінки — <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Попередження: Ви намагаєтеся створити сторінку, яка раніше вже була вилучена.'''\n\nПеревірте, чи Вам справді потрібно створювати цю сторінку.\nНижче, для зручності, наведений журнал вилучень і перейменувань:",
-       "moveddeleted-notice": "ЦÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нка Ð±Ñ\83ла Ð²Ð¸Ð»Ñ\83Ñ\87ена.\nÐ\94лÑ\8f Ð´Ð¾Ð²Ñ\96дки Ð½Ð¸Ð¶Ñ\87е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\96 Ð²Ñ\96дповÑ\96днÑ\96 Ð·Ð°Ð¿Ð¸Ñ\81и Ð· Ð¶Ñ\83Ñ\80налÑ\96в Ð²Ð¸Ð»Ñ\83Ñ\87енÑ\8c Ñ\96 Ð¿ÐµÑ\80ейменÑ\83ванÑ\8c.",
-       "moveddeleted-notice-recent": "На жаль, ця сторінка нещодавно була вилучена (протягом останніх 24 годин). Для довідки нижче наведені відповідні записи з журналів вилучень і перейменувань.",
+       "moveddeleted-notice": "ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð±Ñ\83ло Ð²Ð¸Ð»Ñ\83Ñ\87ено.\nÐ\94лÑ\8f Ð´Ð¾Ð²Ñ\96дки Ð½Ð¸Ð¶Ñ\87е Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\96 Ð²Ñ\96дповÑ\96днÑ\96 Ð·Ð°Ð¿Ð¸Ñ\81и Ð· Ð¶Ñ\83Ñ\80налÑ\96в Ð²Ð¸Ð»Ñ\83Ñ\87енÑ\8c, Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ð¹ Ð¿ÐµÑ\80ейменÑ\83ванÑ\8c Ñ\86Ñ\96Ñ\94Ñ\97 Ñ\81Ñ\82оÑ\80Ñ\96нки.",
+       "moveddeleted-notice-recent": "На жаль, ця сторінка нещодавно була вилучена (протягом останніх 24 годин). Для довідки нижче наведені відповідні записи з журналів вилучень, захисту й перейменувань цієї сторінки.",
        "log-fulllog": "Переглянути весь журнал",
        "edit-hook-aborted": "Редагування скасоване процедурою-перехоплювачем.\nДодаткові пояснення не наведені.",
        "edit-gone-missing": "Неможливо оновити сторінку.\nІмовірно, вона була вилучена.",
        "prefs-editwatchlist-clear": "Очистити список спостереження",
        "prefs-watchlist-days": "Кількість днів, що відображаються у списку спостережень:",
        "prefs-watchlist-days-max": "Максимум $1 {{PLURAL:$1|день|дні|днів}}",
-       "prefs-watchlist-edits": "Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c Ñ\80едагÑ\83ванÑ\8c Ð´Ð»Ñ\8f Ð²Ñ\96добÑ\80аженнÑ\8f Ñ\83 Ñ\80озÑ\88иÑ\80еному списку спостереження:",
+       "prefs-watchlist-edits": "Ð\9cакÑ\81ималÑ\8cна ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c Ð·Ð¼Ñ\96н, Ñ\8fкÑ\83 Ð¼Ð¾Ð¶Ð½Ð° Ð²Ð¸Ð²Ð¾Ð´Ð¸Ñ\82и у списку спостереження:",
        "prefs-watchlist-edits-max": "Максимально: 1000",
        "prefs-watchlist-token": "Мітка списку спостереження:",
        "prefs-misc": "Інші налаштування",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (див. також [[Special:NewPages|список нових сторінок]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Показати",
+       "rcfilters-legend-heading": "<strong>Список скорочень:</strong>",
+       "rcfilters-other-review-tools": "<strong>Інші інструменти перевірки</strong>",
+       "rcfilters-group-results-by-page": "Групувати результати за сторінкою",
+       "rcfilters-grouping-title": "Групування",
        "rcfilters-activefilters": "Активні фільтри",
        "rcfilters-advancedfilters": "Розширені фільтри",
+       "rcfilters-limit-title": "Зміни, які слід показати",
+       "rcfilters-limit-shownum": "Показати {{PLURAL:$1|$1 останню зміну|$1 останні зміни|$1 останніх змін}}",
+       "rcfilters-days-title": "Останні дні",
+       "rcfilters-hours-title": "Останні години",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|день|дні|днів}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|година|години|годин}}",
        "rcfilters-quickfilters": "Збережені фільтри",
        "rcfilters-quickfilters-placeholder-title": "Ще немає збережених посилань",
        "rcfilters-quickfilters-placeholder-description": "Щоб зберегти Ваші налаштування фільтрів та використати їх пізніше, клацніть на іконку закладки в ділянці активних фільтрів нижче.",
        "rcfilters-savedqueries-new-name-label": "Назва",
        "rcfilters-savedqueries-new-name-placeholder": "Опишіть мету фільтра",
        "rcfilters-savedqueries-apply-label": "Створити фільтр",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Створити стандартний фільтр",
        "rcfilters-savedqueries-cancel-label": "Скасувати",
        "rcfilters-savedqueries-add-new-title": "Зберегти поточні налаштування фільтрів",
        "rcfilters-restore-default-filters": "Відновити стандартні фільтри",
        "rcfilters-clear-all-filters": "Очистити фільтри",
+       "rcfilters-show-new-changes": "Переглянути найновіші зміни",
+       "rcfilters-previous-changes-label": "Раніше переглянуті зміни",
        "rcfilters-search-placeholder": "Фільтруйте нові редагування (переглядайте або почніть вводити)",
        "rcfilters-invalid-filter": "Недійсний фільтр",
        "rcfilters-empty-filter": "Без фільтрів. Показано всі зміни.",
        "rcfilters-filter-editsbyself-description": "Ваш власний внесок.",
        "rcfilters-filter-editsbyother-label": "Зміни, здійснені іншими",
        "rcfilters-filter-editsbyother-description": "Усі зміни, за винятком Ваших власних.",
-       "rcfilters-filtergroup-userExpLevel": "Рівень досвіду (тільки для зареєстрованих користувачів)",
+       "rcfilters-filtergroup-userExpLevel": "Реєстрація користувача і його досвід",
        "rcfilters-filter-user-experience-level-registered-label": "Зареєстровані",
        "rcfilters-filter-user-experience-level-registered-description": "Користувачі, що увійшли в систему.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Незареєстровані",
        "rcfilters-filter-user-experience-level-unregistered-description": "Користувачі, які не ввійшли в систему.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новачки",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Ð\9cенÑ\88е ніж 10 редагувань і 4 дні активності.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Ð\97аÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96 Ñ\80едакÑ\82оÑ\80и, Ñ\8fкÑ\96 Ð¼Ð°Ñ\8eÑ\82Ñ\8c Ð¼ÐµÐ½Ñ\88 ніж 10 редагувань і 4 дні активності.",
        "rcfilters-filter-user-experience-level-learner-label": "Учні",
-       "rcfilters-filter-user-experience-level-learner-description": "Ð\91Ñ\96лÑ\8cÑ\88е Ð´Ð¾Ñ\81вÑ\96дÑ\83, Ð½Ñ\96ж Ñ\83 Â«Ð½Ð¾Ð²Ð°Ñ\87кÑ\96в», Ð°Ð»Ðµ Ð¼ÐµÐ½Ñ\88е, Ð½Ñ\96ж Ñ\83 Â«Ð´Ð¾Ñ\81вÑ\96дÑ\87ениÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в».",
+       "rcfilters-filter-user-experience-level-learner-description": "Ð\97аÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96 Ñ\80едакÑ\82оÑ\80и, Ñ\80Ñ\96венÑ\8c Ð´Ð¾Ñ\81вÑ\96дÑ\83 Ñ\8fкиÑ\85 Ð¿ÐµÑ\80ебÑ\83ваÑ\94 Ð¼Ñ\96ж Â«Ð½Ð¾Ð²Ð°Ñ\87ками» Ñ\82а Â«Ð´Ð¾Ñ\81вÑ\96дÑ\87еними ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ами».",
        "rcfilters-filter-user-experience-level-experienced-label": "Досвідчені користувачі",
-       "rcfilters-filter-user-experience-level-experienced-description": "Ð\91Ñ\96лÑ\8cÑ\88е 30 Ð´Ð½Ñ\96в Ð°ÐºÑ\82ивноÑ\81Ñ\82Ñ\96 Ñ\96 Ð¿Ð¾Ð½Ð°Ð´ 500 Ñ\80едагÑ\83ванÑ\8c.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Ð\97аÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96 Ñ\80едакÑ\82оÑ\80и, Ñ\8fкÑ\96 Ð¼Ð°Ñ\8eÑ\82Ñ\8c Ð¿Ð¾Ð½Ð°Ð´ 500 Ñ\80едагÑ\83ванÑ\8c Ñ\96 30 Ð´Ð½Ñ\96в Ð°ÐºÑ\82ивноÑ\81Ñ\82Ñ\96.",
        "rcfilters-filtergroup-automated": "Автоматизовані редагування",
        "rcfilters-filter-bots-label": "Бот",
        "rcfilters-filter-bots-description": "Редагування, зроблені з допомогою автоматизованих засобів.",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Фільтр «Незначні редагування» конфліктує з одним або більше фільтрів за типом змін, оскільки певні типи змін не можна позначити як «незначні». Конфліктні фільтри позначені в ділянці активних фільтрів угорі.",
        "rcfilters-hideminor-conflicts-typeofchange": "Певні типи змін не можна позначити як «незначні», тож цей фільтр конфліктує з такими фільтрами за типом змін: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Цей фільтр за типом змін конфліктує з фільтром «Незначні редагування». Певні типи змін не можна позначати як «незначні».",
-       "rcfilters-filtergroup-lastRevision": "Ð\9fоÑ\82оÑ\87на Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f",
+       "rcfilters-filtergroup-lastRevision": "Ð\9eÑ\81Ñ\82аннÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97",
        "rcfilters-filter-lastrevision-label": "Поточна версія",
-       "rcfilters-filter-lastrevision-description": "Ð\9eстання зміна на сторінці.",
-       "rcfilters-filter-previousrevision-label": "Ð\9fопеÑ\80еднÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97",
-       "rcfilters-filter-previousrevision-description": "Усі зміни, які не є поточною версією сторінки.",
+       "rcfilters-filter-lastrevision-description": "Ð\9bиÑ\88е Ð¾стання зміна на сторінці.",
+       "rcfilters-filter-previousrevision-label": "Ð\9dе Ð¾Ñ\81Ñ\82аннÑ\8f Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\8f",
+       "rcfilters-filter-previousrevision-description": "Усі зміни, які не є «останньою версією».",
        "rcfilters-filter-excluded": "Виключено",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:не</strong> $1",
+       "rcfilters-exclude-button-off": "Виключити вибране",
+       "rcfilters-exclude-button-on": "Виключення вибраного",
+       "rcfilters-view-advanced-filters-label": "Розширені фільтри",
        "rcfilters-view-tags": "Редагування з мітками",
        "rcfilters-view-namespaces-tooltip": "Фільтрувати результати за простором назв",
        "rcfilters-view-tags-tooltip": "Фільтрувати результати, використовуючи мітки до редагувань",
        "rcfilters-view-return-to-default-tooltip": "Повернутися до головного меню фільтра",
+       "rcfilters-liveupdates-button": "Оновлення наживо",
+       "rcfilters-liveupdates-button-title-on": "Вимкнути оновлення наживо",
+       "rcfilters-liveupdates-button-title-off": "Показувати нові зміни одразу ж після їх здійснення",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
        "rclistfromreset": "Скинути вибір дати",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "pageswithprop-legend": "Сторінки з перевизначеними властивостями",
        "pageswithprop-text": "Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.",
        "pageswithprop-prop": "Назва властивості:",
+       "pageswithprop-reverse": "Сортувати у зворотньому порядку",
+       "pageswithprop-sortbyvalue": "Сортувати за значенням властивості",
        "pageswithprop-submit": "Перейти",
        "pageswithprop-prophidden-long": "довге значення текстової властивості приховано ($1)",
        "pageswithprop-prophidden-binary": "двійкове значення властивості приховано ($1)",
        "enotif_lastdiff": "Щоб переглянути цю зміну, див. $1",
        "enotif_anon_editor": "анонімний користувач $1",
        "enotif_body": "Шановний $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nКороткий опис змін: $PAGESUMMARY $PAGEMINOREDIT\n\nЗвернутись до редагувальника:\nелектронною поштою: $PAGEEDITOR_EMAIL\nчерез вікі: $PAGEEDITOR_WIKI\n\nЯкщо ви не відвідаєте цю сторінку під своїм обліковим записом, то в подальшому не будете отримувати сповіщень про наступні дії. Ви також можете вимкнути налаштування сповіщень для усіх сторінок зі списку спостереження.\n\nВаша дружня система сповіщення {{grammar:genitive|{{SITENAME}}}}\n\n--\nЗміна налаштувань повідомлень електронною поштою\n{{canonicalurl:{{#special:Preferences}}}}\n\nЩоб змінити налаштування списку спостереження, перейдіть за посиланням\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nЩоб вилучити сторінку зі списку спостереження, відвідайте сторінку\n$UNWATCHURL\n\nЗворотній зв'язок і допомога:\n$HELPPAGE",
+       "enotif_minoredit": "Це незначна зміна",
        "created": "створена",
        "changed": "змінена",
        "deletepage": "Вилучити сторінку",
        "delete-warning-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nЇї вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};\nдійте обережно.",
        "deleteprotected": "Ви не можете видалити цю сторінку, тому що вона захищена.",
        "deleting-backlinks-warning": "<strong>Попередження:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку Ви маєте намір видалити.",
+       "deleting-subpages-warning": "<strong>Попередження:</strong> Сторінка, яку Ви маєте намір вилучити, має [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|$1 підсторінку|$1 підсторінки|$1 підсторінок|51=понад 50 підсторінок}}]].",
        "rollback": "Відкинуто редагування",
        "rollbacklink": "відкинути",
        "rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
        "undelete-search-title": "Пошук видалених сторінок",
        "undelete-search-box": "Пошук вилучених сторінок",
        "undelete-search-prefix": "Показати сторінки, що починаються з:",
+       "undelete-search-full": "Показати назви сторінок, які містять:",
        "undelete-search-submit": "Знайти",
        "undelete-no-results": "Не знайдено потрібних сторінок серед вилучених.",
        "undelete-filename-mismatch": "Неможливо відновити версію файлу з відміткою часу $1: невідповідність назви файлу",
        "import-nonewrevisions": "Ніякі поправки не були імпортовані (всі вже були оброблені, або пропущені через помилки).",
        "xml-error-string": "$1 в рядку $2, позиції $3 (байт $4): $5",
        "import-upload": "Завантажити XML-дані",
-       "import-token-mismatch": "Втрачені дані сеансу. \n\nВи могли вийти з системи. <strong>Будь ласка, переконайтеся, що досі залогінені, і спробуйте ще раз</strong>.\nЯкщо це не спрацює, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову, та перевірте, чи Ваш браузер дозволяє куки з цього сайту.",
+       "import-token-mismatch": "Втрачено дані сеансу. \n\nВи могли вийти з системи. '''Будь ласка, переконайтеся, що досі перебуваєте в системі, і спробуйте ще раз'''.\nЯкщо це не спрацює, спробуйте [[Special:UserLogout|вийти з системи]] і увійти знову, та перевірте, чи Ваш браузер дозволяє куки з цього сайту.",
        "import-invalid-interwiki": "Неможливо імпортувати із зазначеної вікі.",
        "import-error-edit": "Сторінку «$1» не було імпортовано, оскільки Вам не дозволено її редагувати.",
        "import-error-create": "Сторінку «$1» не було імпортовано, оскільки Вам не дозволено її створювати.",
        "fileduplicatesearch-noresults": "Файл з назвою «$1» не знайдено.",
        "specialpages": "Спеціальні сторінки",
        "specialpages-note-top": "Легенда",
+       "specialpages-note-restricted": "* Звичайні спеціальні сторінки.\n* <span class=\"mw-specialpagerestricted\">Спеціальні сторінки з обмеженим доступом.</span>",
        "specialpages-group-maintenance": "Технічні звіти",
        "specialpages-group-other": "Інші",
        "specialpages-group-login": "Вхід до системи / реєстрація",
        "compare-invalid-title": "Зазначена назва неприпустима.",
        "compare-title-not-exists": "Зазначена назва не існує.",
        "compare-revision-not-exists": "Зазначеної версії не існує.",
+       "diff-form": "Відмінності",
+       "diff-form-oldid": "Ідентифікатор старої версії (необов'язково)",
+       "diff-form-revid": "Ідентифікатор версії з відмінностями",
+       "diff-form-submit": "Показати відмінності",
+       "permanentlink": "Постійне посилання",
+       "permanentlink-revid": "Ідентифікатор версії",
+       "permanentlink-submit": "Перейти до версії",
        "dberr-problems": "Вибачте! На цьому сайті виникли технічні труднощі.",
        "dberr-again": "Спробуйте оновити сторінку за кілька хвилин.",
        "dberr-info": "(неможливо з'єднатися з сервером баз даних: $1)",
index 8dd0c53..9ab3d48 100644 (file)
@@ -37,7 +37,8 @@
                        "Nguyên Lê",
                        "Asmen",
                        "Stephanecbisson",
-                       "Quoclinh94"
+                       "Quoclinh94",
+                       "Tmp1109"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "prefs-editwatchlist-clear": "Xóa sạch danh sách theo dõi của bạn",
        "prefs-watchlist-days": "Số ngày hiển thị trong danh sách theo dõi:",
        "prefs-watchlist-days-max": "Tối đa $1 ngày",
-       "prefs-watchlist-edits": "Số lần sửa đổi tối đa trong danh sách theo dõi mở rộng:",
+       "prefs-watchlist-edits": "Số lần sửa đổi lớn nhất trong danh sách theo dõi mở rộng:",
        "prefs-watchlist-edits-max": "Con số tối đa: 1.000",
        "prefs-watchlist-token": "Dấu hiệu cho danh sách theo dõi:",
        "prefs-misc": "Linh tinh",
        "compare-invalid-title": "Tên trang chỉ định không hợp lệ.",
        "compare-title-not-exists": "Tên trang chỉ định không tồn tại.",
        "compare-revision-not-exists": "Phiên bản chỉ định không tồn tại.",
+       "diff-form": "'''biểu mẫu'''",
        "dberr-problems": "Xin lỗi! Trang này đang gặp phải những khó khăn về kỹ thuật.",
        "dberr-again": "Xin thử đợi vài phút rồi tải lại trang.",
        "dberr-info": "(Không thể liên lạc với máy chủ cơ sở dữ liệu: $1)",
index d503166..986f6d3 100644 (file)
@@ -49,7 +49,7 @@
        "tog-shownumberswatching": "ווייזן דעם נומער פון בלאט אויפֿפאסערס",
        "tog-oldsig": "אייער איצטיגער אונטערשריפֿט:",
        "tog-fancysig": "באַהאַנדלן  אונטערשריפט אַלס וויקיטעקסט (אָן אויטאמאטישן לינק)",
-       "tog-uselivepreview": "×\91×\90× ×\99צ×\9f ×\96×\99×\9a ×\9e×\99×\98 ×\92×\99×\9bער ×¤×\90ר×\90×\95×\99ס×\93×\99×\92ער ×\95×\95×\99×\99×\96×\95× ×\92",
+       "tog-uselivepreview": "×°×\99×\99×\96×\9f ×¤×\90ר×\90×\95×\99ס×\93×\99×\92ער ×\95×\95×\99×\99×\96×\95× ×\92×¢×\9f ×\90Ö¸×\9f ×°×\99×\93ער×\9c×\90Ö¸×\93×\9f ×\93×¢×\9d ×\91×\9c×\90Ö·×\98",
        "tog-forceeditsummary": "ווארן מיך ווען איך לייג א ליידיג קורץ ווארט ענדערונג",
        "tog-watchlisthideown": "באהאלט מיינע ענדערונגען פון דער אויפפאסן ליסטע",
        "tog-watchlisthidebots": "באהאלט באט עדיטס פון אויפפאסן ליסטע",
        "permissionserrorstext": "איר זענט נישט ערלויבט צו טון דאס, פֿאַר {{PLURAL:$1|דער פֿאלגנדער סיבה|די פֿאלגנדע סיבות}}:",
        "permissionserrorstext-withaction": "איר זענט נישט ערלויבט צו $2, וועגן {{PLURAL:$1|דער פֿאלגנדער סיבה| די פֿאלגנדע סיבות}}:",
        "recreate-moveddeleted-warn": "'''ווארענונג: איר שאפט א נייעם בלאט וואס איז שוין איינמאל  געווארן אויסגעמעקט.'''\n\nאיר זאלט איבערטראכטן צי עס פאַסט רעדאַקטירן דעם בלאַט ווײַטער.\nדי אויסמעקן און באַוועגן לאגביכער ווערן געוויזן דא:",
-       "moveddeleted-notice": "דער בלאט איז געווארן אויסגעמעקט.\nדי אויסמעקן און באַוועגן לאגביכער פונעם בלאט ווערן געוויזן דא אונטן.",
-       "moveddeleted-notice-recent": "×\9c×\99×\99×\93ער ×\94×\90×\98 ×\9e×¢×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\9cעצ×\98נס ×\90×\95×\99ס×\92×¢×\9eעק×\98 (×\90×\99נער×\94×\90×\9c×\91 ×\93×\99 ×\9cעצ×\98×¢ 24 ×©×¢×\94).\n×\93×\99 ×\90×\95×\99ס×\9eעק×\95× ×\92 ×\90×\95×\9f ×\91×\90×\95×\95×¢×\92×\95× ×\92 אינפארמאציע פארן בלאט ווערן פארזארגט אונטן.",
+       "moveddeleted-notice": "דער בלאט איז געווארן אויסגעמעקט.\nדי אויסמעקן, שיצן און באַוועגן לאגביכער פונעם בלאט ווערן געוויזן דא אונטן.",
+       "moveddeleted-notice-recent": "×\9c×\99×\99×\93ער ×\94×\90×\98 ×\9e×¢×\9f ×\93×¢×\9d ×\91×\9c×\90×\98 ×\9cעצ×\98נס ×\90×\95×\99ס×\92×¢×\9eעק×\98 (×\90×\99נער×\94×\90×\9c×\91 ×\93×\99 ×\9cעצ×\98×¢ 24 ×©×¢×\94).\n×\93×\99 ×\90×\95×\99ס×\9eעק×\9f, ×©×\99צ×\9f ×\90×\95×\9f ×\91×\90×\95×\95×¢×\92×\9f אינפארמאציע פארן בלאט ווערן פארזארגט אונטן.",
        "log-fulllog": "באַקוקן פֿולן לאגבוך",
        "edit-hook-aborted": "רעדאַקטירונג אַנולירט דורך Hook.\nנישטא קיין הסבר.",
        "edit-gone-missing": "נישט מעגלעך צו דערהיינטיגן דעם בלאט.\nס'ווייזט אויס אז ער איז אויסגעמעקט.",
        "mergehistory-fail-bad-timestamp": "צייטשטעמפל איז אומגילטיק.",
        "mergehistory-fail-invalid-source": "קוואל־בלאט איז אומגילטיק.",
        "mergehistory-fail-invalid-dest": "צילבלאט איז אומגילטיק.",
+       "mergehistory-fail-permission": "נישט גענוג דערלויבונגען כדי צונויפֿגיסן היסטאריע.",
        "mergehistory-fail-self-merge": "מקור און ציל בלעטער זענען די זעלבע.",
        "mergehistory-fail-toobig": "אוממעגלעך אויסצופירן היסטאריע צונויפמישונג ווײַל מען וואלט געדארפט באוועגן מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}.",
        "mergehistory-no-source": "מקור בלאַט $1 עקזיסטירט נישט.",
        "prefs-editwatchlist-clear": "ליידיגן אייער אויפפאסונג ליסטע",
        "prefs-watchlist-days": "טעג צו ווייזן אין דער אויפפאסונג ליסטע:",
        "prefs-watchlist-days-max": "העכסטן $1 {{PLURAL:$1|טאג|טעג}}",
-       "prefs-watchlist-edits": "×\9e×\90ַקס×\99×\9e×\95×\9d × ×\95×\9eער ×¤×\95×\9f × ×²Ö·×¢ ×¢× ×\93ער×\95× ×\92×¢×\9f ×¦×\95 ×\95×\95×\99×\99Ö·×\96×\9f ×\90×\99×\9f ×¤Ö¿×\90ַר×\91ר×\99×\99×\98ער×\98ער אויפֿפאַסונג ליסטע:",
+       "prefs-watchlist-edits": "×\9e×\90ַקס×\99×\9e×\95×\9d ×¦×\90Ö¸×\9c ×¢× ×\93ער×\95× ×\92×¢×\9f ×¦×\95 ×\95×\95×\99×\99Ö·×\96×\9f ×\90×\99×\9f אויפֿפאַסונג ליסטע:",
        "prefs-watchlist-edits-max": "מאַקסימום נומער: 1000",
        "prefs-watchlist-token": "אויפֿפאַסונג ליסטע סימן:",
        "prefs-misc": "פֿאַרשידנס",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (זעט אויך [[Special:NewPages|די רשימה פון נייע בלעטער]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "ווייזן",
-       "rcfilters-legend-heading": "<strong>ליסטער פון ראשי תיבות:</strong>",
+       "rcfilters-legend-heading": "<strong>ליסטע פון ראשי תיבות:</strong>",
+       "rcfilters-other-review-tools": "<strong>אנדערע רעצענזיע ווערקצייג</strong>",
        "rcfilters-activefilters": "אַקטיווע פילטערס",
        "rcfilters-advancedfilters": "פֿארגעשריטענע פֿילטערס",
        "rcfilters-limit-title": "ענדערונגען צו ווייזן",
-       "rcfilters-limit-shownum": "ווייזן די לעצטע $1 ענדערונגען",
+       "rcfilters-limit-shownum": "ווייזן די לעצטע {{PLURAL:$1|ענדערונג|$1 ענדערונגען}}",
        "rcfilters-days-title": "לעצטיקע טעג",
        "rcfilters-hours-title": "לעצטיקע שעה׳ן",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|טאג|טעג}}",
        "rcfilters-filter-minor-label": "מינערדיקע רעדאַקטירונגען",
        "rcfilters-filter-watchlist-watched-label": "אויף דער אויפֿפאַסונג ליסטע",
        "rcfilters-filter-watchlist-notwatched-label": "נישט אויף דער אויפֿפאַסונג ליסטע",
+       "rcfilters-filtergroup-changetype": "טיפ ענדערונג",
        "rcfilters-filter-pageedits-label": "בלאט רעדאקטירונגען",
        "rcfilters-filter-newpages-label": "בלאַט־שאַפֿונגען",
        "rcfilters-filter-categorization-label": "קאטעגאריע־ענדערונגען",
        "import-nonewrevisions": "קיין רעוויזיעס נישט אימפארטירט (אדער אלע שוין דא, אדער איבערגעהיפט צוליב גרײַזן).",
        "xml-error-string": "$1 בײַ שורה $2, זייל $3 (בייט $4): $5",
        "import-upload": "אַרויפֿלאָדן XML דאַטן",
-       "import-token-mismatch": "פ×\90ר×\9c×\95ס×\98 ×¤×\95×\9f ×¡×¢×¡×\99×¢ ×\93×\90×\98×\9f. \n\nקע×\9f ×\96×\99×\99×\9f ×\90×\96 ×\90×\99ר ×\96×¢× ×¢×\9f ×\92×¢×\95×\95×\90ר×\9f ×\90ר×\95×\99ס×\9c×\90×\92×\99ר×\98\n<strong>×\91×\99×\98×¢ ×¤×¨×\95×\91×\99ר×\98 × ×\90×\9b×\90×\9e×\90×\9c</strong>. \n\nאויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
+       "import-token-mismatch": "פ×\90ר×\9c×\95ס×\98 ×¤×\95×\9f ×¡×¢×¡×\99×¢ ×\93×\90×\98×\9f. \n\nקע×\9f ×\96×\99×\99×\9f ×\90×\96 ×\90×\99ר ×\96×¢× ×\98 ×\92×¢×\95×\95×\90ר×\9f ×\90ר×\95×\99ס×\9c×\90×\92×\99ר×\98. '''×\91×\99×\98×¢ ×¤×¨×\95×\91×\99ר×\98 × ×\90×\9b×\90×\9e×\90×\9c'''.   \nאויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
        "import-invalid-interwiki": "נישט מעגלעך צו אימפארטירן פון ספעציפֿירטער וויקי.",
        "import-error-edit": "דעם בלאט \"$1\" קען מען נישט אימפארטירן ווייל איר האט נישט די רעכט אים צו רעדאקטירן.",
        "import-error-create": "דעם  בלאט \"$1\" האט מען נישט אימפארטירט ווייל איר האט נישט די רעכט צו שאפן אים.",
        "compare-invalid-title": "דעם טיטל איר האט ספעציפֿירט איז אומגילטיק.",
        "compare-title-not-exists": "דעם טיטל וואס איר האט ספעציפֿירט עקזיסטירט נישט",
        "compare-revision-not-exists": "די רעוויזיע וואס איר האט ספעציפֿירט עקזיסטירט נישט.",
+       "diff-form": "א '''פארעם'''",
        "dberr-problems": "אנטשולדיגט! דער דאזיקער סייט האט טעכנישע פראבלעמען.",
        "dberr-again": "וואַרט א פאָר מינוט און לאָדנט אָן ווידער.",
        "dberr-info": "(קען נישט צוקומען צו דער דאַטנבאַזע: $1)",
index 12ff346..39f8d8e 100644 (file)
        "tog-watchlisthideminor": "隐藏监视列表中的小编辑",
        "tog-watchlisthideliu": "隐藏监视列表中的登录用户的编辑",
        "tog-watchlistreloadautomatically": "当一条过滤器规则被更改时,自动重新加载监视列表(需要JavaScript)",
+       "tog-watchlistunwatchlinks": "添加监视列表条目的直接(取消)监视链接(需要JavaScript才能打开功能)",
        "tog-watchlisthideanons": "隐藏监视列表中的匿名用户的编辑",
        "tog-watchlisthidepatrolled": "隐藏监视列表中的已巡查编辑",
        "tog-watchlisthidecategorization": "隐藏对页面的分类",
        "permissionserrorstext-withaction": "因为以下{{PLURAL:$1|原因}},您没有权限$2:",
        "contentmodelediterror": "您不能编辑此修订版本,因为它的内容模型是<code>$1</code>,这与当前页面<code>$2</code>的内容模型不同。",
        "recreate-moveddeleted-warn": "<strong>警告:您正在重新创建曾经被删除的页面。</strong>\n\n您应该考虑继续编辑本页是否合适。这里提供本页的删除和移动日志以供参考:",
-       "moveddeleted-notice": "本页面已被删除。下面提供本页的删除和移动日志以供参考。",
-       "moveddeleted-notice-recent": "æ\8a±æ­\89ï¼\8c此页é\9d¢å\88\9aå\88\9a被å\88 é\99¤ï¼\88å\9c¨æ\9c\80è¿\9124å°\8fæ\97¶å\86\85ï¼\89ã\80\82\n页é\9d¢ç\9a\84å\88 é\99¤å\92\8c移å\8a¨æ\97¥å¿\97å\9c¨ä¸\8bæ\96¹æ\8f\90ä¾\9b以ä¾\9bå\8f\82è\80\83ã\80\82",
+       "moveddeleted-notice": "本页面已被删除。下面提供本页的删除、保护和移动日志以供参考。",
+       "moveddeleted-notice-recent": "对ä¸\8dèµ·ï¼\8c此页é\9d¢å\88\9aå\88\9a被å\88 é\99¤ï¼\88å\9c¨æ\9c\80è¿\9124å°\8fæ\97¶å\86\85ï¼\89ã\80\82页é\9d¢ç\9a\84å\88 é\99¤ã\80\81ä¿\9dæ\8a¤å\92\8c移å\8a¨æ\97¥å¿\97å\9c¨ä¸\8bæ\96¹æ\8f\90ä¾\9b以ä¾\9bå\8f\82è\80\83ã\80\82",
        "log-fulllog": "查看完整日志",
        "edit-hook-aborted": "编辑被hook指令取消。\n无解释。",
        "edit-gone-missing": "不能更新页面。\n它可能刚刚被删除。",
        "watching": "正在监视...",
        "unwatching": "正在取消监视...",
        "watcherrortext": "更改“$1”的监视列表设置时出错。",
+       "watchlist-unwatch": "×",
+       "watchlist-unwatch-undo": "+",
        "enotif_reset": "标记所有页面为已访问",
        "enotif_impersonal_salutation": "{{SITENAME}}用户",
        "enotif_subject_deleted": "{{SITENAME}}页面$1已被$2删除",
        "import-mapping-subpage": "作为以下页面的子页面导入:",
        "import-upload-filename": "文件名:",
        "import-comment": "注释:",
-       "importtext": "请使用[[Special:Export|导出功能]]从源 wiki 导出文件,\n保存到您的电脑并上传到这里。",
+       "importtext": "请使用[[Special:Export|导出功能]]从源wiki导出文件,保存到您的电脑并上传到这里。",
        "importstart": "正在导入页面...",
        "import-revision-count": "$1个版本",
        "importnopages": "没有导入的页面。",
        "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": "前往修订版本",
        "dberr-problems": "抱歉!本网站出现了一些技术问题。",
        "dberr-again": "请等待几分钟后重试。",
        "dberr-info": "(无法访问数据库:$1)",
index 933567b..a7b7004 100644 (file)
        "permissionserrorstext-withaction": "由於下列{{PLURAL:$1|原因}},您沒有權限進行 $2 的動作:",
        "contentmodelediterror": "您無法編輯此修訂,因此修訂使用的內容模型為 <code>$1</code> 與目前使用的頁面內容模型 <code>$2</code> 不同。",
        "recreate-moveddeleted-warn": "<strong>警告:您正重新建立先前已刪除的頁面。</strong>\n\n您應考慮是否繼續編輯此頁。\n在此提供刪除與移動日誌方便作為參考:",
-       "moveddeleted-notice": "此頁面已刪除。\n下方提供此頁面的刪除和移動日誌以便參考。",
+       "moveddeleted-notice": "此頁面已刪除。\n下方提供此頁面的刪除、保護和移動日誌以便參考。",
        "moveddeleted-notice-recent": "抱歉,此頁面最近被刪除 (24 小時內)。\n以下提供此頁面的刪除與移動日誌做為參考。",
        "log-fulllog": "檢視完整日誌",
        "edit-hook-aborted": "編輯已被 Hook 中止。\n且未回應無任何說明。",
        "watchlist-details": "您的監視清單上共有 $1 個頁面 (不包含對話頁面)。",
        "wlheader-enotif": "已開啟電子郵件通知功能。",
        "wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
-       "wlnote": "以ä¸\8bç\82ºè\87ª $3 $4 ä¹\8bå¾\8c的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
+       "wlnote": "以ä¸\8bç\82ºè\87ª $3 $4 ä¹\8bå\89\8d的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
        "wlshowlast": "顯示最近 $1 小時 $2 天",
        "watchlist-hide": "隱藏",
        "watchlist-submit": "顯示",
        "confirm-purge-title": "清除此頁快取",
        "confirm_purge_button": "確定",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
-       "confirm-purge-bottom": "刷新頁面會清空頁面的快取記錄並強制顯示最近的頁面修訂。",
+       "confirm-purge-bottom": "清除頁面會清除快取紀錄並強制顯示最近的頁面修訂。",
        "confirm-watch-button": "確定",
        "confirm-watch-top": "新增此頁面至您的監視清單?",
        "confirm-unwatch-button": "確定",
        "compare-invalid-title": "您所指定的標題無效。",
        "compare-title-not-exists": "您所指定的標題不存在。",
        "compare-revision-not-exists": "您所指定的修訂不存在。",
+       "diff-form": "表",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
        "dberr-again": "請稍後數分鐘後再試。",
        "dberr-info": "(無法存取資料庫:$1)",
index 967224f..299beb8 100644 (file)
@@ -88,7 +88,7 @@ $defaultDateFormat = 'km';
 $dateFormats = [
        'km time' => 'ម៉ោងH:i',
        'km date' => 'l ទីd F ឆ្នាំY',
-       'km both' =>  'ម៉ោងH:i l ទីd F ឆ្នាំY',
+       'km both' => 'ម៉ោងH:i l ទីd F ឆ្នាំY',
 ];
 
 $specialPageAliases = [
diff --git a/maintenance/archives/patch-ip_changes.sql b/maintenance/archives/patch-ip_changes.sql
new file mode 100644 (file)
index 0000000..5f05672
--- /dev/null
@@ -0,0 +1,23 @@
+--
+-- Every time an edit by a logged out user is saved,
+-- a row is created in ip_changes. This stores
+-- the IP as a hex representation so that we can more
+-- easily find edits within an IP range.
+--
+CREATE TABLE /*_*/ip_changes (
+  -- Foreign key to the revision table, also serves as the unique primary key
+  ipc_rev_id int unsigned NOT NULL PRIMARY KEY DEFAULT '0',
+
+  -- The timestamp of the revision
+  ipc_rev_timestamp binary(14) NOT NULL DEFAULT '',
+
+  -- Hex representation of the IP address, as returned by IP::toHex()
+  -- For IPv4 it will resemble: ABCD1234
+  -- For IPv6: v6-ABCD1234000000000000000000000000
+  -- BETWEEN is then used to identify revisions within a given range
+  ipc_hex varbinary(35) NOT NULL DEFAULT ''
+
+) /*$wgDBTableOptions*/;
+
+CREATE INDEX /*i*/ipc_rev_timestamp ON /*_*/ip_changes (ipc_rev_timestamp);
+CREATE INDEX /*i*/ipc_hex_time ON /*_*/ip_changes (ipc_hex,ipc_rev_timestamp);
index 2a102b2..c1aa082 100644 (file)
@@ -95,7 +95,7 @@ class HHVMMakeRepo extends Maintenance {
                print "Found " . count( $files ) . " files in " .
                        count( $dirs ) . " directories\n";
 
-               $tmpDir = wfTempDir() . '/mw-make-repo' . mt_rand( 0, 1<<31 );
+               $tmpDir = wfTempDir() . '/mw-make-repo' . mt_rand( 0, 1 << 31 );
                if ( !mkdir( $tmpDir ) ) {
                        $this->error( 'Unable to create temporary directory', 1 );
                }
index 578a226..b099aff 100644 (file)
@@ -448,7 +448,7 @@ class RefreshLinks extends Maintenance {
                do {
                        $finalConds = $conds;
                        $timestamp = $dbr->addQuotes( $timestamp );
-                       $finalConds []=
+                       $finalConds [] =
                                "(cl_timestamp > $timestamp OR (cl_timestamp = $timestamp AND cl_from > $lastId))";
                        $res = $dbr->select( [ 'page', 'categorylinks' ],
                                [ 'page_id', 'cl_timestamp' ],
diff --git a/maintenance/sqlite/archives/patch-ip_changes.sql b/maintenance/sqlite/archives/patch-ip_changes.sql
new file mode 100644 (file)
index 0000000..5f05672
--- /dev/null
@@ -0,0 +1,23 @@
+--
+-- Every time an edit by a logged out user is saved,
+-- a row is created in ip_changes. This stores
+-- the IP as a hex representation so that we can more
+-- easily find edits within an IP range.
+--
+CREATE TABLE /*_*/ip_changes (
+  -- Foreign key to the revision table, also serves as the unique primary key
+  ipc_rev_id int unsigned NOT NULL PRIMARY KEY DEFAULT '0',
+
+  -- The timestamp of the revision
+  ipc_rev_timestamp binary(14) NOT NULL DEFAULT '',
+
+  -- Hex representation of the IP address, as returned by IP::toHex()
+  -- For IPv4 it will resemble: ABCD1234
+  -- For IPv6: v6-ABCD1234000000000000000000000000
+  -- BETWEEN is then used to identify revisions within a given range
+  ipc_hex varbinary(35) NOT NULL DEFAULT ''
+
+) /*$wgDBTableOptions*/;
+
+CREATE INDEX /*i*/ipc_rev_timestamp ON /*_*/ip_changes (ipc_rev_timestamp);
+CREATE INDEX /*i*/ipc_hex_time ON /*_*/ip_changes (ipc_hex,ipc_rev_timestamp);
index 14f6932..1497d6f 100644 (file)
@@ -410,6 +410,30 @@ CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timesta
 -- and is a logged-in user.
 CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
 
+--
+-- Every time an edit by a logged out user is saved,
+-- a row is created in ip_changes. This stores
+-- the IP as a hex representation so that we can more
+-- easily find edits within an IP range.
+--
+CREATE TABLE /*_*/ip_changes (
+  -- Foreign key to the revision table, also serves as the unique primary key
+  ipc_rev_id int unsigned NOT NULL PRIMARY KEY DEFAULT '0',
+
+  -- The timestamp of the revision
+  ipc_rev_timestamp binary(14) NOT NULL DEFAULT '',
+
+  -- Hex representation of the IP address, as returned by IP::toHex()
+  -- For IPv4 it will resemble: ABCD1234
+  -- For IPv6: v6-ABCD1234000000000000000000000000
+  -- BETWEEN is then used to identify revisions within a given range
+  ipc_hex varbinary(35) NOT NULL DEFAULT ''
+
+) /*$wgDBTableOptions*/;
+
+CREATE INDEX /*i*/ipc_rev_timestamp ON /*_*/ip_changes (ipc_rev_timestamp);
+CREATE INDEX /*i*/ipc_hex_time ON /*_*/ip_changes (ipc_hex,ipc_rev_timestamp);
+
 --
 -- Holds text of individual page revisions.
 --
index d2e4fcc..cabea09 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -2,20 +2,19 @@
 <ruleset name="MediaWiki">
        <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
                <exclude name="Generic.ControlStructures.InlineControlStructure" />
-               <!-- Rule will pass in 0.10.0 but update depends on T167168 -->
-               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeClassBrace.NoSpaceBeforeBrace" />
-               <!-- Disable rules added in 0.8.0 that don't pass yet -->
-               <exclude name="MediaWiki.Commenting.FunctionComment.ExtraParamComment" />
                <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamName" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
                <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
                <exclude name="MediaWiki.Commenting.FunctionComment.MissingReturn" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.Missing.Protected" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.Missing.Public" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.ParamNameNoMatch" />
                <exclude name="MediaWiki.Commenting.FunctionComment.SpacingAfter" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.SpacingAfterParamName" />
-               <exclude name="MediaWiki.Commenting.FunctionComment.SpacingAfterParamType" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.ParamNameNoMatch" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.NotShortBoolReturn" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.NotShortIntReturn" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.NotShortBoolParam" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.NotShortIntParam" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.ExtraParamComment" />
+               <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
                <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentStart" />
                <exclude name="MediaWiki.Commenting.IllegalSingleLineComment.IllegalSingleLineCommentEnd" />
                <exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
@@ -43,7 +42,6 @@
                <exclude-pattern>*/includes/StubObject.php</exclude-pattern>
        </rule>
        <file>.</file>
-       <arg name="bootstrap" value="vendor/mediawiki/mediawiki-codesniffer/utils/bootstrap-ci.php"/>
        <arg name="encoding" value="UTF-8"/>
        <arg name="extensions" value="php,php5,inc,sample"/>
        <exclude-pattern type="relative">^extensions/</exclude-pattern>
index d8ab7d7..144747b 100644 (file)
@@ -1453,6 +1453,7 @@ return [
                        'mediawiki.diff.styles',
                        'mediawiki.util',
                        'mediawiki.jqueryMsg',
+                       'oojs-ui-core',
                ],
                'messages' => [
                        // Keep the uses message keys in sync with EditPage#setHeaders
@@ -2217,11 +2218,27 @@ return [
        ],
        'mediawiki.special.watchlist' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.watchlist.js',
+               'messages' => [
+                       'addedwatchtext',
+                       'addedwatchtext-talk',
+                       'removedwatchtext',
+                       'removedwatchtext-talk',
+                       'tooltip-ca-watch',
+                       'tooltip-ca-unwatch',
+                       'watchlist-unwatch',
+                       'watchlist-unwatch-undo',
+               ],
                'dependencies' => [
-                       'mediawiki.api',
+                       'mediawiki.api.watch',
+                       'mediawiki.jqueryMsg',
+                       'mediawiki.Title',
+                       'mediawiki.util',
                        'oojs-ui-core',
                        'user.options',
-               ]
+               ],
+       ],
+       'mediawiki.special.watchlist.styles' => [
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.watchlist.css',
        ],
        'mediawiki.special.version' => [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.version.css',
diff --git a/resources/lib/html5shiv/html5shiv.js b/resources/lib/html5shiv/html5shiv.js
new file mode 100644 (file)
index 0000000..45ea723
--- /dev/null
@@ -0,0 +1,326 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+;(function(window, document) {
+/*jshint evil:true */
+  /** version */
+  var version = '3.7.3';
+
+  /** Preset options */
+  var options = window.html5 || {};
+
+  /** Used to skip problem elements */
+  var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+  /** Not all elements can be cloned in IE **/
+  var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+  /** Detect whether the browser supports default html5 styles */
+  var supportsHtml5Styles;
+
+  /** Name of the expando, to work with multiple documents or to re-shiv one document */
+  var expando = '_html5shiv';
+
+  /** The id for the the documents expando */
+  var expanID = 0;
+
+  /** Cached data for each document */
+  var expandoData = {};
+
+  /** Detect whether the browser supports unknown elements */
+  var supportsUnknownElements;
+
+  (function() {
+    try {
+        var a = document.createElement('a');
+        a.innerHTML = '<xyz></xyz>';
+        //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+        supportsHtml5Styles = ('hidden' in a);
+
+        supportsUnknownElements = a.childNodes.length == 1 || (function() {
+          // assign a false positive if unable to shiv
+          (document.createElement)('a');
+          var frag = document.createDocumentFragment();
+          return (
+            typeof frag.cloneNode == 'undefined' ||
+            typeof frag.createDocumentFragment == 'undefined' ||
+            typeof frag.createElement == 'undefined'
+          );
+        }());
+    } catch(e) {
+      // assign a false positive if detection fails => unable to shiv
+      supportsHtml5Styles = true;
+      supportsUnknownElements = true;
+    }
+
+  }());
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Creates a style sheet with the given CSS text and adds it to the document.
+   * @private
+   * @param {Document} ownerDocument The document.
+   * @param {String} cssText The CSS text.
+   * @returns {StyleSheet} The style element.
+   */
+  function addStyleSheet(ownerDocument, cssText) {
+    var p = ownerDocument.createElement('p'),
+        parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+    p.innerHTML = 'x<style>' + cssText + '</style>';
+    return parent.insertBefore(p.lastChild, parent.firstChild);
+  }
+
+  /**
+   * Returns the value of `html5.elements` as an array.
+   * @private
+   * @returns {Array} An array of shived element node names.
+   */
+  function getElements() {
+    var elements = html5.elements;
+    return typeof elements == 'string' ? elements.split(' ') : elements;
+  }
+
+  /**
+   * Extends the built-in list of html5 elements
+   * @memberOf html5
+   * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
+   * @param {Document} ownerDocument The context document.
+   */
+  function addElements(newElements, ownerDocument) {
+    var elements = html5.elements;
+    if(typeof elements != 'string'){
+      elements = elements.join(' ');
+    }
+    if(typeof newElements != 'string'){
+      newElements = newElements.join(' ');
+    }
+    html5.elements = elements +' '+ newElements;
+    shivDocument(ownerDocument);
+  }
+
+   /**
+   * Returns the data associated to the given document
+   * @private
+   * @param {Document} ownerDocument The document.
+   * @returns {Object} An object of data.
+   */
+  function getExpandoData(ownerDocument) {
+    var data = expandoData[ownerDocument[expando]];
+    if (!data) {
+        data = {};
+        expanID++;
+        ownerDocument[expando] = expanID;
+        expandoData[expanID] = data;
+    }
+    return data;
+  }
+
+  /**
+   * returns a shived element for the given nodeName and document
+   * @memberOf html5
+   * @param {String} nodeName name of the element
+   * @param {Document|DocumentFragment} ownerDocument The context document.
+   * @returns {Object} The shived element.
+   */
+  function createElement(nodeName, ownerDocument, data){
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    if(supportsUnknownElements){
+        return ownerDocument.createElement(nodeName);
+    }
+    if (!data) {
+        data = getExpandoData(ownerDocument);
+    }
+    var node;
+
+    if (data.cache[nodeName]) {
+        node = data.cache[nodeName].cloneNode();
+    } else if (saveClones.test(nodeName)) {
+        node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+    } else {
+        node = data.createElem(nodeName);
+    }
+
+    // Avoid adding some elements to fragments in IE < 9 because
+    // * Attributes like `name` or `type` cannot be set/changed once an element
+    //   is inserted into a document/fragment
+    // * Link elements with `src` attributes that are inaccessible, as with
+    //   a 403 response, will cause the tab/window to crash
+    // * Script elements appended to fragments will execute when their `src`
+    //   or `text` property is set
+    return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+  }
+
+  /**
+   * returns a shived DocumentFragment for the given document
+   * @memberOf html5
+   * @param {Document} ownerDocument The context document.
+   * @returns {Object} The shived DocumentFragment.
+   */
+  function createDocumentFragment(ownerDocument, data){
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    if(supportsUnknownElements){
+        return ownerDocument.createDocumentFragment();
+    }
+    data = data || getExpandoData(ownerDocument);
+    var clone = data.frag.cloneNode(),
+        i = 0,
+        elems = getElements(),
+        l = elems.length;
+    for(;i<l;i++){
+        clone.createElement(elems[i]);
+    }
+    return clone;
+  }
+
+  /**
+   * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+   * @private
+   * @param {Document|DocumentFragment} ownerDocument The document.
+   * @param {Object} data of the document.
+   */
+  function shivMethods(ownerDocument, data) {
+    if (!data.cache) {
+        data.cache = {};
+        data.createElem = ownerDocument.createElement;
+        data.createFrag = ownerDocument.createDocumentFragment;
+        data.frag = data.createFrag();
+    }
+
+
+    ownerDocument.createElement = function(nodeName) {
+      //abort shiv
+      if (!html5.shivMethods) {
+          return data.createElem(nodeName);
+      }
+      return createElement(nodeName, ownerDocument, data);
+    };
+
+    ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+      'var n=f.cloneNode(),c=n.createElement;' +
+      'h.shivMethods&&(' +
+        // unroll the `createElement` calls
+        getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
+          data.createElem(nodeName);
+          data.frag.createElement(nodeName);
+          return 'c("' + nodeName + '")';
+        }) +
+      ');return n}'
+    )(html5, data.frag);
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Shivs the given document.
+   * @memberOf html5
+   * @param {Document} ownerDocument The document to shiv.
+   * @returns {Document} The shived document.
+   */
+  function shivDocument(ownerDocument) {
+    if (!ownerDocument) {
+        ownerDocument = document;
+    }
+    var data = getExpandoData(ownerDocument);
+
+    if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+      data.hasCSS = !!addStyleSheet(ownerDocument,
+        // corrects block display not defined in IE6/7/8/9
+        'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+        // adds styling not present in IE6/7/8/9
+        'mark{background:#FF0;color:#000}' +
+        // hides non-rendered elements
+        'template{display:none}'
+      );
+    }
+    if (!supportsUnknownElements) {
+      shivMethods(ownerDocument, data);
+    }
+    return ownerDocument;
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * The `html5` object is exposed so that more elements can be shived and
+   * existing shiving can be detected on iframes.
+   * @type Object
+   * @example
+   *
+   * // options can be changed before the script is included
+   * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+   */
+  var html5 = {
+
+    /**
+     * An array or space separated string of node names of the elements to shiv.
+     * @memberOf html5
+     * @type Array|String
+     */
+    'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
+
+    /**
+     * current version of html5shiv
+     */
+    'version': version,
+
+    /**
+     * A flag to indicate that the HTML5 style sheet should be inserted.
+     * @memberOf html5
+     * @type Boolean
+     */
+    'shivCSS': (options.shivCSS !== false),
+
+    /**
+     * Is equal to true if a browser supports creating unknown/HTML5 elements
+     * @memberOf html5
+     * @type boolean
+     */
+    'supportsUnknownElements': supportsUnknownElements,
+
+    /**
+     * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+     * methods should be overwritten.
+     * @memberOf html5
+     * @type Boolean
+     */
+    'shivMethods': (options.shivMethods !== false),
+
+    /**
+     * A string to describe the type of `html5` object ("default" or "default print").
+     * @memberOf html5
+     * @type String
+     */
+    'type': 'default',
+
+    // shivs the document according to the specified `html5` object options
+    'shivDocument': shivDocument,
+
+    //creates a shived element
+    createElement: createElement,
+
+    //creates a shived documentFragment
+    createDocumentFragment: createDocumentFragment,
+
+    //extends list of elements
+    addElements: addElements
+  };
+
+  /*--------------------------------------------------------------------------*/
+
+  // expose html5
+  window.html5 = html5;
+
+  // shiv the document
+  shivDocument(document);
+
+  if(typeof module == 'object' && module.exports){
+    module.exports = html5;
+  }
+
+}(typeof window !== "undefined" ? window : this, document));
diff --git a/resources/lib/html5shiv/html5shiv.min.js b/resources/lib/html5shiv/html5shiv.min.js
new file mode 100644 (file)
index 0000000..355afd1
--- /dev/null
@@ -0,0 +1,4 @@
+/**
+* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
\ No newline at end of file
index 4bcccdd..9d970ed 100644 (file)
                        return true;
                }
        }, function ( key, value ) {
-               mw.log.deprecate( $, key, value );
+               mw.log.deprecate( $, key, value, null, '$.' + key );
        } );
 
        mw.log.deprecate( $, 'escapeRE', function ( str ) {
                return str.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ); // eslint-disable-line no-useless-escape
-       }, 'Use mediawiki.RegExp instead.' );
+       }, 'Use mediawiki.RegExp instead.', '$.escapeRE' );
 
 }( jQuery, mediaWiki ) );
index ec91773..922da31 100644 (file)
@@ -90,6 +90,7 @@
                        config = $( table ).data( 'tablesorter' ).config,
                        cellIndex,
                        nodeValue,
+                       nextRow = false,
                        // Start with 1 because 0 is the fallback parser
                        i = 1,
                        lastRowIndex = -1,
                        if ( nodeValue !== '' ) {
                                if ( parsers[ i ].is( nodeValue, table ) ) {
                                        concurrent++;
-                                       rowIndex++;
+                                       nextRow = true;
                                        if ( concurrent >= needed ) {
                                                // Confirmed the parser for multiple cells, let's return it
                                                return parsers[ i ];
                                        }
+                               } else if ( parsers[ i ].id.match( /isoDate/ ) && /^\D*(\d{1,4}) ?(\[.+\])?$/.test( nodeValue ) ) {
+                                       // For 1-4 digits and maybe reference(s) parser "isoDate" or "number" is possible, check next row
+                                       empty++;
+                                       nextRow = true;
                                } else {
                                        // Check next parser, reset rows
                                        i++;
                                        rowIndex = 0;
                                        concurrent = 0;
                                        empty = 0;
+                                       nextRow = false;
                                }
                        } else {
                                // Empty cell
                                empty++;
+                               nextRow = true;
+                       }
+
+                       if ( nextRow ) {
+                               nextRow = false;
                                rowIndex++;
                                if ( rowIndex >= rows.length ) {
-                                       if ( concurrent >= rows.length - empty ) {
+                                       if ( concurrent > 0 && concurrent >= rows.length - empty ) {
                                                // Confirmed the parser for all filled cells
                                                return parsers[ i ];
                                        }
                                new RegExp( /(https?|ftp|file):\/\// )
                        ],
                        isoDate: [
-                               new RegExp( /^([-+]?\d{1,4})-([01]\d)-([0-3]\d)([T\s]((([01]\d|2[0-3])(:?[0-5]\d)?|24:?00)?(:?([0-5]\d|60))?([.,]\d+)?)([zZ]|([+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?/ ),
-                               new RegExp( /^([-+]?\d{1,4})-([01]\d)-([0-3]\d)/ )
+                               new RegExp( /^[^-\d]*(-?\d{1,4})-(0\d|1[0-2])(-([0-3]\d))?([T\s]([01]\d|2[0-4]):?(([0-5]\d):?(([0-5]\d|60)([.,]\d{1,3})?)?)?([zZ]|([-+])([01]\d|2[0-3]):?([0-5]\d)?)?)?/ ),
+                               new RegExp( /^[^-\d]*(-?\d{1,4})-?(\d\d)?(-?(\d\d))?([T\s](\d\d):?((\d\d)?:?((\d\d)?([.,]\d{1,3})?)?)?([zZ]|([-+])(\d\d):?(\d\d)?)?)?/ )
                        ],
                        usLongDate: [
                                new RegExp( /^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/ )
                        return ts.rgx.isoDate[ 0 ].test( s );
                },
                format: function ( s ) {
-                       var isodate, matches;
-                       if ( !Date.prototype.toISOString ) {
-                               // Old browsers don't understand iso, Fallback to US date parsing and ignore the time part.
-                               matches = $.trim( s ).match( ts.rgx.isoDate[ 1 ] );
-                               if ( !matches ) {
-                                       return $.tablesorter.formatFloat( 0 );
+                       var match, i, isodate, ms, hOffset, mOffset;
+                       match = s.match( ts.rgx.isoDate[ 0 ] );
+                       if ( match === null ) {
+                               // Otherwise a signed number with 1-4 digit is parsed as isoDate
+                               match = s.match( ts.rgx.isoDate[ 1 ] );
+                       }
+                       if ( !match ) {
+                               return 0;
+                       }
+                       // Month and day
+                       for ( i = 2; i <= 4; i += 2 ) {
+                               if ( !match[ i ] || match[ i ].length === 0 ) {
+                                       match[ i ] = 1;
                                }
-                               isodate = new Date( matches[ 2 ] + '/' + matches[ 3 ] + '/' + matches[ 1 ] );
-                       } else {
-                               matches = s.match( ts.rgx.isoDate[ 0 ] );
-                               if ( !matches ) {
-                                       return $.tablesorter.formatFloat( 0 );
+                       }
+                       // Time
+                       for ( i = 6; i <= 15; i++ ) {
+                               if ( !match[ i ] || match[ i ].length === 0 ) {
+                                       match[ i ] = '0';
                                }
-                               isodate = new Date( $.trim( matches[ 0 ] ) );
                        }
-                       return $.tablesorter.formatFloat( ( isodate !== undefined ) ? isodate.getTime() : 0 );
+                       ms = parseFloat( match[ 11 ].replace( /,/, '.' ) ) * 1000;
+                       hOffset = $.tablesorter.formatInt( match[ 13 ] + match[ 14 ] );
+                       mOffset = $.tablesorter.formatInt( match[ 13 ] + match[ 15 ] );
+
+                       isodate = new Date( 0 );
+                       // Because Date constructor changes year 0-99 to 1900-1999, use setUTCFullYear()
+                       isodate.setUTCFullYear( match[ 1 ], match[ 2 ] - 1, match[ 4 ] );
+                       isodate.setUTCHours( match[ 6 ] - hOffset, match[ 8 ] - mOffset, match[ 10 ], ms );
+                       return isodate.getTime();
                },
                type: 'numeric'
        } );
index 706e1fe..c26d915 100644 (file)
@@ -3,12 +3,14 @@
  */
 ( function ( mw, $ ) {
 
+       var oojsuieditform;
+
        /**
         * @ignore
         * @param {jQuery.Event} e
         */
        function doLivePreview( e ) {
-               var isDiff, api, parseRequest, diffRequest, postData, copySelectors, section,
+               var isDiff, api, parseRequest, diffRequest, postData, copySelectors, section, summary,
                        $wikiPreview, $wikiDiff, $editform, $textbox, $summary, $copyElements, $spinner, $errorBox;
 
                isDiff = ( e.target.name === 'wpDiff' );
                $wikiDiff = $( '#wikiDiff' );
                $editform = $( '#editform' );
                $textbox = $editform.find( '#wpTextbox1' );
-               $summary = $editform.find( '#wpSummary' );
+
+               if ( oojsuieditform ) {
+                       summary = OO.ui.infuse( $( '#wpSummaryWidget' ) );
+               } else {
+                       $summary = $editform.find( '#wpSummary' );
+               }
+
                $spinner = $( '.mw-spinner-preview' );
                $errorBox = $( '.errorbox' );
                section = $editform.find( '[name="wpSection"]' ).val();
@@ -78,7 +86,7 @@
                        formatversion: 2,
                        action: 'parse',
                        title: mw.config.get( 'wgPageName' ),
-                       summary: $summary.textSelection( 'getContents' ),
+                       summary: oojsuieditform ? summary.getValue() : $summary.val(),
                        prop: ''
                };
 
        }
 
        $( function () {
+               oojsuieditform = $( '#editform' ).hasClass( 'mw-editform-ooui' );
+
                // Do not enable on user .js/.css pages, as there's no sane way of "previewing"
                // the scripts or styles without reloading the page.
                if ( $( '#mw-userjsyoucanpreview' ).length || $( '#mw-usercssyoucanpreview' ).length ) {
                }
 
                if ( !$( '.mw-summary-preview' ).length ) {
-                       $( '#wpSummary' ).after(
+                       $( oojsuieditform ? '#wpSummaryWidget' : '#wpSummary' ).after(
                                $( '<div>' ).addClass( 'mw-summary-preview' )
                        );
                }
index 6eccc05..bd1b918 100644 (file)
@@ -99,7 +99,7 @@
        $.each( [ 'write', 'writeln' ], function ( idx, method ) {
                mw.log.deprecate( document, method, function () {
                        $( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
-               }, 'Use jQuery or mw.loader.load instead.' );
+               }, 'Use jQuery or mw.loader.load instead.', 'document.' + method );
        } );
 
 }( mediaWiki, jQuery ) );
index d4937c6..56824f2 100644 (file)
@@ -17,8 +17,9 @@
 @colorGray13: #ddd;
 @colorGray14: #eaecf0;
 @colorGray15: #f8f9fa; // lightest
+@colorBaseInverted: #fff;
 
-// Semantic background colors
+// Semantic colors
 // Blue; for contextual use of a continuing action
 @colorProgressive: #36c;
 @colorProgressiveHighlight: #447ff5;
@@ -41,7 +42,7 @@
 
 // Text colors
 @colorText: @colorGray2;
-@colorTextLight: @colorGray6;
+@colorTextLight: @colorGray5;
 @colorButtonText: @colorGray2;
 @colorButtonTextHighlight: @colorGray4;
 @colorButtonTextActive: @colorGray1;
 @colorWarningText: #705000;
 
 // UI colors
+@backgroundColorInputBinaryChecked: @colorProgressive;
+@backgroundColorInputBinaryActive: @colorProgressiveActive;
 @colorFieldBorder: #a2a9b1;
 @colorShadow: @colorGray14;
 @colorPlaceholder: @colorGray10;
 @colorNeutral: @colorGray7;
 
+// Border colors
+@borderColorInputBinaryChecked: @colorProgressive;
+@borderColorInputBinaryActive: @colorProgressiveActive;
+
+// Checked radio input border-width, equal to OOUI at 14px base font-size
+@borderWidthRadioChecked: 0.4285em;
+
 // Global border radius to be used to buttons and inputs
 @borderRadius: 2px;
 
+// Box shadows
+@boxShadowWidget: inset 0 0 0 1px transparent;
+@boxShadowWidgetFocus: inset 0 0 0 1px @colorProgressive;
+@boxShadowProgressiveFocus: inset 0 0 0 1px @colorProgressive, inset 0 0 0 2px @colorBaseInverted;
+@boxShadowInputBinaryActive: inset 0 0 0 1px @colorProgressiveActive;
+
 // Icon related variables
 @iconSize: 1.5em;
 @iconGutterWidth: 1em;
 
-// Form input sizes
-@checkboxSize: 2em;
-@radioSize: 2em;
+// Form input sizes, equal to OOUI at 14px base font-size
+@sizeInputBinary: 1.5625em;
index 31effe1..0085bd6 100644 (file)
         * @return {Object} Minimal filters and highlights list
         */
        mw.rcfilters.Controller.prototype._getMinimalFilterList = function ( valuesObject ) {
-               var result = { filters: {}, highlights: {} },
+               var result = { filters: {}, highlights: {}, invert: valuesObject.invert },
                        baseState = this._getBaseFilterState();
 
                // XOR results
index ddf9b05..20668eb 100644 (file)
@@ -80,31 +80,14 @@ figure[typeof*='mw:Audio'] {
        &.mw-halign-center {
                margin: 0 auto 0.5em auto;
                display: table;
+               border-collapse: collapse;
                clear: none;
                float: none;
        }
 
+       /* Hide the caption for frameless and plain floated images */
        > figcaption {
-               display: table-caption;
-               caption-side: bottom;
-               /* In mw-core the font-size is duplicated, 94% in thumbiner
-                * and again 94% in thumbcaption. 88.4% for font size of the
-                * caption results in the same behavior. */
-               font-size: 88.4%;
-               line-height: 1.4em;
-               text-align: left;
-
-               border: 1px solid #c8ccd1;
-               border-top: 0;
-
-               /* taken from .thumbcaption, plus .thumbinner */
-               padding: 0 6px 6px 6px;
-               background-color: #f8f9fa;
-
-               table {
-                       /* reset caption side for tables inside figcaptions */
-                       caption-side: top;
-               }
+               display: none;
        }
 }
 
@@ -115,12 +98,18 @@ figure[typeof~='mw:Image/Frame'],
 figure[typeof~='mw:Video/Frame'],
 figure[typeof~='mw:Audio/Frame'] {
        display: table;
-       overflow: auto;
        text-align: center;
        border: 1px solid #c8ccd1;
-       border-bottom: 0; // No border to caption
-       border-collapse: collapse;
+       border-collapse: separate;
+       border-spacing: 3px;
        background-color: #f8f9fa;
+       width: 1px;  // From https://stackoverflow.com/a/6536025
+
+       // Avoid !important
+       &.mw-halign-center {
+               border-collapse: separate;
+       }
+
        // Default to right alignment. This is needed since Parsoid only specifies the
        // alignment class when the alignment is explicitly set.
        margin: 0.5em 0 1.3em 1.4em;
@@ -131,10 +120,53 @@ figure[typeof~='mw:Audio/Frame'] {
                > img,
                > video {
                        border: 1px solid #c8ccd1;
-                       margin: 3px;
                        background: #fff;
                }
        }
+
+       > figcaption {
+               display: block;
+
+               /* In mw-core the font-size is duplicated, 94% in thumbiner
+                * and again 94% in thumbcaption. 88.4% for font size of the
+                * caption results in the same behavior. */
+               font-size: 88.4%;
+               line-height: 1.4em;
+               text-align: left;
+
+               /* taken from .thumbcaption, plus .thumbinner */
+               padding: 3px;
+       }
+}
+
+figure[typeof*='mw:Image/Thumb'],
+figure[typeof*='mw:Video/Thumb'],
+figure[typeof*='mw:Audio/Thumb'] {
+       > a:after {
+               content: '';
+               width: 15px;
+               height: 11px;
+               margin: 3px;
+               margin-bottom: 0;
+
+               .mw-content-ltr & {
+                       /* @noflip */
+                       float: right;
+                       /* @noflip */
+                       background-image: url( images/magnify-clip-ltr.png );
+                       /* @noflip */
+                       background-image: linear-gradient( transparent, transparent ), url( images/magnify-clip-ltr.svg );
+               }
+
+               .mw-content-rtl & {
+                       /* @noflip */
+                       float: left;
+                       /* @noflip */
+                       background-image: url( images/magnify-clip-rtl.png );
+                       /* @noflip */
+                       background-image: linear-gradient( transparent, transparent ), url( images/magnify-clip-rtl.svg );
+               }
+       }
 }
 
 /* Same as img.thumbborder in content.css */
@@ -144,15 +176,3 @@ figure[typeof~='mw:Audio/Frame'] {
                border: 1px solid #eaecf0;
        }
 }
-
-/* Hide the caption for frameless and plain floated images */
-figure[typeof~='mw:Image/Frameless'],
-figure[typeof~='mw:Video/Frameless'],
-figure[typeof~='mw:Audio/Frameless'],
-figure[typeof~='mw:Image'],
-figure[typeof~='mw:Video'],
-figure[typeof~='mw:Audio'] {
-       > figcaption {
-               display: none;
-       }
-}
index c6d5082..3e0d2b9 100644 (file)
@@ -72,7 +72,7 @@ textarea {
        font-size: 84%;
        line-height: 1.2em;
        margin: 0 0 1.4em 1em;
-       color: #545454;
+       color: #54595d;
        width: auto;
 }
 
index 992ce99..59464bd 100644 (file)
                }
                .mw-search-createlink,
                .mw-search-nonefound,
-               .mw-search-results {
+               .mw-search-results,
+               .mw-search-interwiki-header {
                        float: left;
                        width: 60%;
                        clear: left;
diff --git a/resources/src/mediawiki.special/mediawiki.special.watchlist.css b/resources/src/mediawiki.special/mediawiki.special.watchlist.css
new file mode 100644 (file)
index 0000000..c9861c2
--- /dev/null
@@ -0,0 +1,15 @@
+/*!
+ * Styling for elements generated by JavaScript on Special:Watchlist
+ */
+.mw-changelist-line-inner-unwatched {
+       text-decoration: line-through;
+       opacity: 0.5;
+}
+
+span.mw-changeslist-line-prefix {
+       display: inline-block;
+}
+/* This can be either a span or a table cell */
+.mw-changeslist-line-prefix {
+       width: 1.25em;
+}
index 7cc9b9b..535ca93 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $, OO ) {
        $( function () {
-               var $progressBar, $resetForm = $( '#mw-watchlist-resetbutton' );
+               var api = new mw.Api(), $progressBar, $resetForm = $( '#mw-watchlist-resetbutton' );
 
                // If the user wants to reset their watchlist, use an API call to do so (no reload required)
                // Adapted from a user script by User:NQ of English Wikipedia
@@ -19,8 +19,7 @@
                        if ( !$progressBar ) {
                                $progressBar = new OO.ui.ProgressBarWidget( { progress: false } ).$element;
                                $progressBar.css( {
-                                       position: 'absolute',
-                                       width: '100%'
+                                       position: 'absolute', width: '100%'
                                } );
                        }
                        // Show progress bar
 
                        // Use action=setnotificationtimestamp to mark all as visited,
                        // then set all watchlist lines accordingly
-                       new mw.Api().postWithToken( 'csrf', {
-                               formatversion: 2,
-                               action: 'setnotificationtimestamp',
-                               entirewatchlist: true
+                       api.postWithToken( 'csrf', {
+                               formatversion: 2, action: 'setnotificationtimestamp', entirewatchlist: true
                        } ).done( function () {
                                // Enable button again
                                $button.prop( 'disabled', false );
                                $( '#mw-watchlist-form' ).submit();
                        } );
                }
+
+               if ( mw.user.options.get( 'watchlistunwatchlinks' ) ) {
+                       // Watch/unwatch toggle link:
+                       // If a page is on the watchlist, a '×' is shown which, when clicked, removes the page from the watchlist.
+                       // After unwatching a page, the '×' becomes a '+', which if clicked re-watches the page.
+                       // Unwatched page entries are struck through and have lowered opacity.
+                       $( '.mw-unwatch-link, .mw-watch-link' ).click( function ( event ) {
+                               var $unwatchLink = $( this ), // EnhancedChangesList uses <table> for each row, while OldChangesList uses <li> for each row
+                                       $watchlistLine = $unwatchLink.closest( 'li, table' )
+                                               .find( '[data-target-page]' ),
+                                       pageTitle = $watchlistLine.data( 'targetPage' ),
+                                       isTalk = mw.Title.newFromText( pageTitle ).getNamespaceId() % 2 === 1;
+
+                               // Utility function for looping through each watchlist line that matches
+                               // a certain page or its associated page (e.g. Talk)
+                               function forEachMatchingTitle( title, callback ) {
+
+                                       var titleObj = mw.Title.newFromText( title ),
+                                               pageNamespaceId = titleObj.getNamespaceId(),
+                                               isTalk = pageNamespaceId % 2 === 1,
+                                               associatedTitle = mw.Title.makeTitle( isTalk ? pageNamespaceId - 1 : pageNamespaceId + 1,
+                                                       titleObj.getMainText() ).getPrefixedText();
+                                       $( '.mw-changeslist-line' ).each( function () {
+                                               var $this = $( this ), $row, $unwatchLink;
+
+                                               $this.find( '[data-target-page]' ).each( function () {
+                                                       var $this = $( this ), rowTitle = $this.data( 'targetPage' );
+                                                       if ( rowTitle === title || rowTitle === associatedTitle ) {
+
+                                                               // EnhancedChangesList groups log entries by performer rather than target page. Therefore...
+                                                               // * If using OldChangesList, use the <li>
+                                                               // * If using EnhancedChangesList and $this is part of a grouped log entry, use the <td> sub-entry
+                                                               // * If using EnhancedChangesList and $this is not part of a grouped log entry, use the <table> grouped entry
+                                                               $row =
+                                                                       $this.closest(
+                                                                               'li, table.mw-collapsible.mw-changeslist-log td[data-target-page], table' );
+                                                               $unwatchLink = $row.find( '.mw-unwatch-link, .mw-watch-link' );
+
+                                                               callback( rowTitle, $row, $unwatchLink );
+                                                       }
+                                               } );
+                                       } );
+                               }
+
+                               // Depending on whether we are watching or unwatching, for each entry of the page (and its associated page i.e. Talk),
+                               // change the text, tooltip, and non-JS href of the (un)watch button, and update the styling of the watchlist entry.
+                               if ( $unwatchLink.hasClass( 'mw-unwatch-link' ) ) {
+                                       api.unwatch( pageTitle )
+                                               .done( function () {
+                                                       forEachMatchingTitle( pageTitle,
+                                                               function ( rowPageTitle, $row, $rowUnwatchLink ) {
+                                                                       $rowUnwatchLink
+                                                                               .text( mw.msg( 'watchlist-unwatch-undo' ) )
+                                                                               .attr( 'title', mw.msg( 'tooltip-ca-watch' ) )
+                                                                               .attr( 'href',
+                                                                                       mw.util.getUrl( rowPageTitle, { action: 'watch' } ) )
+                                                                               .removeClass( 'mw-unwatch-link loading' )
+                                                                               .addClass( 'mw-watch-link' );
+                                                                       $row.find(
+                                                                               '.mw-changeslist-line-inner, .mw-enhanced-rc-nested' )
+                                                                               .addBack( '.mw-enhanced-rc-nested' ) // For matching log sub-entry
+                                                                               .addClass( 'mw-changelist-line-inner-unwatched' );
+                                                               } );
+
+                                                       mw.notify(
+                                                               mw.message( isTalk ? 'removedwatchtext-talk' : 'removedwatchtext',
+                                                                       pageTitle ), { tag: 'watch-self' } );
+                                               } );
+                               } else {
+                                       api.watch( pageTitle )
+                                               .then( function () {
+                                                       forEachMatchingTitle( pageTitle,
+                                                               function ( rowPageTitle, $row, $rowUnwatchLink ) {
+                                                                       $rowUnwatchLink
+                                                                               .text( mw.msg( 'watchlist-unwatch' ) )
+                                                                               .attr( 'title', mw.msg( 'tooltip-ca-unwatch' ) )
+                                                                               .attr( 'href',
+                                                                                       mw.util.getUrl( rowPageTitle, { action: 'unwatch' } ) )
+                                                                               .removeClass( 'mw-watch-link loading' )
+                                                                               .addClass( 'mw-unwatch-link' );
+                                                                       $row.find( '.mw-changelist-line-inner-unwatched' )
+                                                                               .addBack( '.mw-enhanced-rc-nested' )
+                                                                               .removeClass( 'mw-changelist-line-inner-unwatched' );
+                                                               } );
+
+                                                       mw.notify(
+                                                               mw.message( isTalk ? 'addedwatchtext-talk' : 'addedwatchtext',
+                                                                       pageTitle ), { tag: 'watch-self' } );
+                                               } );
+                               }
+
+                               event.preventDefault();
+                               event.stopPropagation();
+                               $unwatchLink.blur();
+                       } );
+               }
        } );
 
-}( mediaWiki, jQuery, OO ) );
+}( mediaWiki, jQuery, OO )
+);
index 9ee499c..d55ed80 100644 (file)
 
        // Expose API publicly
        // @deprecated since MW 1.29
-       mw.log.deprecate( mw, 'toolbar', toolbar );
+       mw.log.deprecate( mw, 'toolbar', toolbar, null, 'mw.toolbar' );
 
        $( function () {
                var i, button;
index 2ca20a5..c1626db 100644 (file)
@@ -5,9 +5,9 @@
 //
 // Styling checkboxes in a way that works cross browser is a tricky problem to solve.
 // In MediaWiki UI put a checkbox and label inside a mw-ui-checkbox div.
-// This renders in all browsers except IE 6-8 which do not support the :checked selector;
+// This renders in all browsers except IE 6-8 which do not support the `:checked` selector;
 // these are kept backwards-compatible using the `:not( #noop )` selector.
-// You should give the checkbox and label matching "id" and "for" attributes, respectively.
+// You should give the checkbox and label matching `id` and `for` attributes, respectively.
 //
 // Markup:
 // <div class="mw-ui-checkbox">
 // Styleguide 3.
 .mw-ui-checkbox {
        display: inline-block;
+       line-height: @sizeInputBinary;
        vertical-align: middle;
 }
 
-// We use the not selector to cancel out styling on IE 8 and below
+// We use the `:not` selector to cancel out styling on IE 8 and below
 // We also disable this styling on JavaScript disabled devices. This fixes the issue with
 // Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
 // more capable browsers with unstyled checkboxes.
 .client-js .mw-ui-checkbox:not( #noop ) {
+       display: table;
        // Position relatively so we can make use of absolute pseudo elements
        position: relative;
-       display: table;
 
        * {
-               // reset font sizes (see T74727)
+               // Reset font sizes, see T74727
                font: inherit;
                vertical-align: middle;
        }
 
-       input[type='checkbox'] {
-               // we hide the input element as instead we will style the label that follows
-               // we use opacity so that VoiceOver software can still identify it
-               opacity: 0;
-               // Render *on top of* the label, so that it's still clickable (T98905)
-               z-index: 1;
+       [type='checkbox'] {
+               display: table-cell;
                position: relative;
-               // ensure the invisible checkbox takes up the required width
-               width: @checkboxSize;
-               height: @checkboxSize;
-               // This is needed for Firefox mobile (See T73750 to workaround default Firefox stylesheet)
+               // Ensure the invisible input takes up the required `width` & `height`
+               width: @sizeInputBinary;
+               height: @sizeInputBinary;
+               // Support: Firefox mobile to override user-agent stylesheet, see T73750
                max-width: none;
-               margin: 0 0.4em 0 0;
-               display: table-cell;
+               margin: 0;
+               // Hide `input[type=checkbox]` and instead style the label that follows
+               // Support: VoiceOver. Use `opacity` so that VoiceOver can still identify the checkbox
+               opacity: 0;
+               // Render *on top of* the label, so that it's still clickable, see T98905
+               z-index: 1;
 
                & + label {
                        display: table-cell;
+                       padding-left: 0.4em;
                }
 
-               // the pseudo before element of the label after the checkbox now looks like a checkbox
+               // Pseudo `:before` element of the label after the checkbox now looks like a checkbox
                & + label:before {
                        content: '';
                        background-color: #fff;
-                       .background-image-svg( 'images/checked.svg', 'images/checked.png' );
-                       background-position: center center;
                        background-origin: border-box;
+                       background-position: center center;
                        background-repeat: no-repeat;
                        .background-size( 0, 0 );
                        .box-sizing( border-box );
                        position: absolute;
-                       // align the checkbox to middle of the text
+                       // Ensure alignment of checkbox to middle of the text in long labels, see T85241
                        top: 50%;
                        left: 0;
-                       width: @checkboxSize;
-                       height: @checkboxSize;
-                       margin-top: -1em;
+                       width: @sizeInputBinary;
+                       height: @sizeInputBinary;
+                       margin-top: -( @sizeInputBinary / 2 );
                        border: 1px solid @colorGray7;
                        border-radius: @borderRadius;
-                       line-height: @checkboxSize;
-                       cursor: pointer;
                }
 
-               // when the input is checked, style the label pseudo before element that followed as a checked checkbox
+               // Apply a checkmark on the pseudo `:before` element when the input is checked
                &:checked + label:before {
-                       .background-size( 100%, 100% );
+                       .background-image-svg( 'images/checkbox-checked.svg', 'images/checkbox-checked.png' );
+                       .background-size( 90%, 90% );
                }
 
-               &:active + label:before {
-                       background-color: @colorGray13;
-                       border-color: @colorGray13;
-               }
+               &:enabled {
+                       cursor: pointer;
 
-               &:focus + label:before {
-                       border-width: 2px;
-               }
+                       & + label {
+                               cursor: pointer;
+                       }
+
+                       & + label:before {
+                               cursor: pointer;
+                               .transition( ~'background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms' );
+                       }
+
+                       // `:focus` has to come first, otherwise a specificity race with `:hover:focus` etc is necessary
+                       &:focus + label:before {
+                               border-color: @colorProgressive;
+                               box-shadow: @boxShadowWidgetFocus;
+                       }
+
+                       &:hover + label:before {
+                               border-color: @colorProgressive;
+                       }
+
+                       &:active + label:before {
+                               background-color: @colorProgressiveActive;
+                               border-color: @borderColorInputBinaryActive;
+                               box-shadow: @boxShadowInputBinaryActive;
+                       }
 
-               &:focus:hover + label:before,
-               &:hover + label:before {
-                       border-bottom-width: 3px;
+                       &:checked {
+                               & + label:before {
+                                       background-color: @backgroundColorInputBinaryChecked;
+                                       border-color: @borderColorInputBinaryChecked;
+                               }
+
+                               &:focus + label:before {
+                                       background-color: @backgroundColorInputBinaryChecked;
+                                       border-color: @borderColorInputBinaryChecked;
+                                       box-shadow: @boxShadowProgressiveFocus;
+                               }
+
+                               &:hover + label:before {
+                                       background-color: @colorProgressiveHighlight;
+                                       border-color: @colorProgressiveHighlight;
+                               }
+
+                               &:active + label:before {
+                                       background-color: @backgroundColorInputBinaryActive;
+                                       border-color: @borderColorInputBinaryActive;
+                               }
+                       }
                }
 
                // disabled checkboxes have a gray background
                &:disabled + label:before {
-                       cursor: default;
-                       background-color: @colorGray14;
-                       border-color: @colorGray14;
-               }
-
-               // disabled and checked checkboxes have a white circle
-               &:disabled:checked + label:before {
-                       .background-image-svg( 'images/checked_disabled.svg', 'images/checked_disabled.png' );
+                       background-color: @colorGray12;
+                       border-color: @colorGray12;
                }
        }
 }
diff --git a/resources/src/mediawiki.ui/components/images/checkbox-checked.png b/resources/src/mediawiki.ui/components/images/checkbox-checked.png
new file mode 100644 (file)
index 0000000..708bb39
Binary files /dev/null and b/resources/src/mediawiki.ui/components/images/checkbox-checked.png differ
diff --git a/resources/src/mediawiki.ui/components/images/checkbox-checked.svg b/resources/src/mediawiki.ui/components/images/checkbox-checked.svg
new file mode 100644 (file)
index 0000000..7f3299a
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+    <path d="M17 7.5L9.5 15 6 11.5 4.5 13l5 5L20 7.5c-.706-.706-2.294-.706-3 0z" id="check"/>
+</g></svg>
diff --git a/resources/src/mediawiki.ui/components/images/checked_disabled.png b/resources/src/mediawiki.ui/components/images/checked_disabled.png
deleted file mode 100644 (file)
index 8217815..0000000
Binary files a/resources/src/mediawiki.ui/components/images/checked_disabled.png and /dev/null differ
diff --git a/resources/src/mediawiki.ui/components/images/checked_disabled.svg b/resources/src/mediawiki.ui/components/images/checked_disabled.svg
deleted file mode 100644 (file)
index ba4010e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M4 12l5 5L20 5" stroke="#fff" stroke-width="3" fill="none"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.png b/resources/src/mediawiki.ui/components/images/radio_checked.png
deleted file mode 100644 (file)
index adee2c9..0000000
Binary files a/resources/src/mediawiki.ui/components/images/radio_checked.png and /dev/null differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_checked.svg b/resources/src/mediawiki.ui/components/images/radio_checked.svg
deleted file mode 100644 (file)
index c8b9b62..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#00AF89" cx="12" cy="12" r="6"/></svg>
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.png b/resources/src/mediawiki.ui/components/images/radio_disabled.png
deleted file mode 100644 (file)
index 75989e6..0000000
Binary files a/resources/src/mediawiki.ui/components/images/radio_disabled.png and /dev/null differ
diff --git a/resources/src/mediawiki.ui/components/images/radio_disabled.svg b/resources/src/mediawiki.ui/components/images/radio_disabled.svg
deleted file mode 100644 (file)
index ec8ffe3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><circle fill="#fff" cx="12" cy="12" r="6"/></svg>
index 7cb2849..3d82e8e 100644 (file)
@@ -40,7 +40,7 @@
 .client-js .mw-ui-radio:not( #noop ) {
        // Position relatively so we can make use of absolute pseudo elements
        position: relative;
-       line-height: @radioSize;
+       line-height: @sizeInputBinary;
 
        * {
                // reset font sizes (see T74727)
                vertical-align: middle;
        }
 
-       input[type='radio'] {
-               // we hide the input element as instead we will style the label that follows
-               // we use opacity so that VoiceOver software can still identify it
-               opacity: 0;
+       [type='radio'] {
                // ensure the invisible radio takes up the required width
-               width: @radioSize;
-               height: @radioSize;
+               width: @sizeInputBinary;
+               height: @sizeInputBinary;
                // This is needed for Firefox mobile (See T73750 to workaround default Firefox stylesheet)
                max-width: none;
-               margin-right: 0.4em;
-
-               // the pseudo before element of the label after the radio now looks like a radio
-               & + label:before {
-                       content: '';
-                       background-color: #fff;
-                       .background-image-svg( 'images/radio_checked.svg', 'images/radio_checked.png' );
-                       background-origin: border-box;
-                       background-position: center center;
-                       background-repeat: no-repeat;
-                       .background-size( 0, 0 );
-                       .box-sizing( border-box );
-                       position: absolute;
-                       left: 0;
-                       width: @radioSize;
-                       height: @radioSize;
-                       border: 1px solid @colorGray7;
-                       border-radius: 100%;
-                       cursor: pointer;
+               margin: 0;
+               // Hide `input[type=radio]` and instead style the label that follows
+               // Support: VoiceOver. Use `opacity` so that VoiceOver can still identify the radio
+               opacity: 0;
+
+               & + label {
+                       padding-left: 0.4em;
+
+                       // Pseudo `:before` element of the label after the radio now looks like a radio
+                       &:before {
+                               content: '';
+                               background-color: #fff;
+                               .box-sizing( border-box );
+                               position: absolute;
+                               left: 0;
+                               width: @sizeInputBinary;
+                               height: @sizeInputBinary;
+                               border: 1px solid @colorGray7;
+                               border-radius: 100%;
+                       }
+
+                       // Needed for `:focus` state's inner white circle
+                       &:after {
+                               content: ' ';
+                               position: absolute;
+                               top: 2px; // `px` unit due to pixel rounding error when using `@sizeInputBinary / 4`
+                               left: 2px;
+                               width: 1.14285em; // equals `@sizeInputBinary - 4px`
+                               height: 1.14285em;
+                               border: 1px solid transparent;
+                               border-radius: 100%;
+                       }
                }
 
-               // when the input is checked, style the label pseudo before element that followed as a checked radio
+               // Apply a dot on the pseudo `:before` element when the input is checked
                &:checked + label:before {
-                       .background-size( 100%, 100% );
+                       border-width: @borderWidthRadioChecked;
                }
 
-               &:active + label:before {
-                       background-color: @colorGray13;
-                       border-color: @colorGray13;
-               }
+               &:enabled {
+                       cursor: pointer;
 
-               &:focus + label:before {
-                       border-width: 2px;
-               }
+                       & + label:before {
+                               cursor: pointer;
+                               .transition( ~'background-color 100ms, color 100ms, border-color 100ms' );
+                       }
 
-               &:focus:hover + label:before,
-               &:hover + label:before {
-                       border-bottom-width: 3px;
-               }
+                       &:hover + label:before {
+                               border-color: @colorProgressive;
+                       }
+
+                       &:active + label:before {
+                               background-color: @colorProgressiveActive;
+                               border-color: @borderColorInputBinaryActive;
+                       }
+
+                       &:checked {
+                               & + label:before {
+                                       border-color: @borderColorInputBinaryChecked;
+                               }
 
-               // disabled radios have a gray background
-               &:disabled + label:before {
-                       background-color: @colorGray14;
-                       border-color: @colorGray14;
-                       cursor: default;
+                               &:focus + label:after {
+                                       border-color: #fff;
+                               }
+
+                               &:hover + label:before {
+                                       border-color: @colorProgressiveHighlight;
+                               }
+
+                               &:active {
+                                       & + label:before {
+                                               border-color: @borderColorInputBinaryActive;
+                                               box-shadow: @boxShadowInputBinaryActive;
+                                       }
+
+                                       & + label:after {
+                                               border-color: @borderColorInputBinaryActive;
+                                       }
+                               }
+                       }
                }
 
-               // disabled and checked radios have a white circle
-               &:disabled:checked + label:before {
-                       .background-image-svg( 'images/radio_disabled.svg', 'images/radio_disabled.png' );
+               &:disabled {
+                       & + label:before {
+                               background-color: @colorGray12;
+                               border-color: @colorGray12;
+                       }
+
+                       &:checked + label:before {
+                               background-color: #fff;
+                       }
                }
        }
 }
index d0ec585..34f7eba 100644 (file)
                 */
                rawurlencode: rawurlencode,
 
-               /**
-                * Encode the string like Sanitizer::escapeId() in PHP
-                * @deprecated since 1.30 use escapeIdForAttribute() or escapeIdForLink()
-                *
-                * @param {string} str String to be encoded.
-                * @return {string} Encoded string
-                */
-               escapeId: function ( str ) {
-                       return escapeIdInternal( str, 'legacy' );
-               },
-
                /**
                 * Encode string into HTML id compatible form suitable for use in HTML
                 * Analog to PHP Sanitizer::escapeIdForAttribute()
         * @inheritdoc #getUrl
         * @deprecated since 1.23 Use #getUrl instead.
         */
-       mw.log.deprecate( util, 'wikiGetlink', util.getUrl, 'Use mw.util.getUrl instead.' );
+       mw.log.deprecate( util, 'wikiGetlink', util.getUrl, 'Use mw.util.getUrl instead.', 'mw.util.wikiGetlink' );
 
        /**
         * Add the appropriate prefix to the accesskey shown in the tooltip.
                }
 
                $nodes.updateTooltipAccessKeys();
-       }, 'Use jquery.accessKeyLabel instead.' );
+       }, 'Use jquery.accessKeyLabel instead.', 'mw.util.updateTooltipAccessKeys' );
 
        /**
         * Add a little box at the top of the screen to inform the user of
                }
                mw.notify( message, { autoHide: true, tag: 'legacy' } );
                return true;
-       }, 'Use mw.notify instead.' );
+       }, 'Use mw.notify instead.', 'mw.util.jsMessage' );
+
+       /**
+        * Encode the string like Sanitizer::escapeId() in PHP
+        *
+        * @method escapeId
+        * @deprecated since 1.30 use escapeIdForAttribute() or escapeIdForLink()
+        * @param {string} str String to be encoded.
+        * @return {string} Encoded string
+        */
+       mw.log.deprecate( util, 'escapeId', function ( str ) {
+               return escapeIdInternal( str, 'legacy' );
+       }, 'Use mw.util.escapeIdForAttribute or mw.util.escapeIdForLink instead.', 'mw.util.escapeId' );
 
        /**
         * Initialisation of mw.util.$content
index ab780fe..57e0d8d 100644 (file)
@@ -2,6 +2,5 @@
    responsibility, but alas our skins tend to have the weirdest font-sizes on body. This shall be
    removed when we make the MediaWiki skins bundled with tarball sane. (T91152) */
 body > .oo-ui-windowManager {
-       font-size: 12.8px;
        font-size: 0.8rem;
 }
index 9b9ea6d..8f752df 100644 (file)
@@ -158,8 +158,6 @@ $wgAutoloadClasses += [
        'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
        'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
        'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
-       'MockOggHandler' => "$testDir/phpunit/mocks/media/MockOggHandler.php",
-       'MockMediaHandlerFactory' => "$testDir/phpunit/mocks/media/MockMediaHandlerFactory.php",
        'MockChangesListFilter' => "$testDir/phpunit/mocks/MockChangesListFilter.php",
        'MockChangesListFilterGroup' => "$testDir/phpunit/mocks/MockChangesListFilterGroup.php",
        'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php",
index e578418..1d53344 100644 (file)
@@ -341,8 +341,9 @@ class ParserTestRunner {
                MediaWikiServices::getInstance()->disableService( 'MediaHandlerFactory' );
                MediaWikiServices::getInstance()->redefineService(
                        'MediaHandlerFactory',
-                       function () {
-                               return new MockMediaHandlerFactory();
+                       function ( MediaWikiServices $services ) {
+                               $handlers = $services->getMainConfig()->get( 'ParserTestMediaHandlers' );
+                               return new MediaHandlerFactory( $handlers );
                        }
                );
                $teardown[] = function () {
@@ -477,7 +478,7 @@ class ParserTestRunner {
         * @see staticSetup
         *
         * @param array $teardown The snippet array
-        * @param ScopedCallback|null A ScopedCallback to consume
+        * @param ScopedCallback|null $nextTeardown A ScopedCallback to consume
         * @return ScopedCallback
         */
        protected function createTeardownObject( $teardown, $nextTeardown = null ) {
@@ -1529,7 +1530,7 @@ class ParserTestRunner {
        /**
         * Add articles to the test DB.
         *
-        * @param $articles Article info array from TestFileReader
+        * @param array $articles Article info array from TestFileReader
         */
        public function addArticles( $articles ) {
                global $wgContLang;
index 4afe710..6a1f4b5 100644 (file)
@@ -300,7 +300,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                        'ConfigFactory',
                        self::makeTestConfigFactoryInstantiator(
                                $oldConfigFactory,
-                               [ 'main' =>  $bootstrapConfig ]
+                               [ 'main' => $bootstrapConfig ]
                        )
                );
                $newServices->resetServiceForTesting( 'DBLoadBalancerFactory' );
@@ -1254,7 +1254,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @return Database[] Array of Database master connections
         */
-
        protected static function getExternalStoreDatabaseConnections() {
                global $wgDefaultExternalStore;
 
diff --git a/tests/phpunit/data/media/say-test-mpeg1.mp3 b/tests/phpunit/data/media/say-test-mpeg1.mp3
new file mode 100644 (file)
index 0000000..b3a6318
Binary files /dev/null and b/tests/phpunit/data/media/say-test-mpeg1.mp3 differ
diff --git a/tests/phpunit/data/media/say-test-mpeg2.5.mp3 b/tests/phpunit/data/media/say-test-mpeg2.5.mp3
new file mode 100644 (file)
index 0000000..e6743a8
Binary files /dev/null and b/tests/phpunit/data/media/say-test-mpeg2.5.mp3 differ
diff --git a/tests/phpunit/data/media/say-test-mpeg2.mp3 b/tests/phpunit/data/media/say-test-mpeg2.mp3
new file mode 100644 (file)
index 0000000..8b2aaa2
Binary files /dev/null and b/tests/phpunit/data/media/say-test-mpeg2.mp3 differ
diff --git a/tests/phpunit/data/media/say-test-with-id3.mp3 b/tests/phpunit/data/media/say-test-with-id3.mp3
new file mode 100644 (file)
index 0000000..04205d5
Binary files /dev/null and b/tests/phpunit/data/media/say-test-with-id3.mp3 differ
index 9d9815b..bdba6a3 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @group GlobalFunctions
  * @covers ::wfThumbIsStandard
@@ -92,10 +94,11 @@ class WfThumbIsStandardTest extends MediaWikiTestCase {
         * @dataProvider provideThumbParams
         */
        public function testIsStandard( $message, $expected, $params ) {
-               $this->setService( 'MediaHandlerFactory', new MockMediaHandlerFactory() );
+               $handlers = MediaWikiServices::getInstance()->getMainConfig()->get( 'ParserTestMediaHandlers' );
+               $this->setService( 'MediaHandlerFactory', new MediaHandlerFactory( $handlers ) );
                $this->assertSame(
                        $expected,
-                       wfThumbIsStandard( new FakeDimensionFile( [ 2000, 1800 ] ), $params ),
+                       wfThumbIsStandard( new FakeDimensionFile( [ 2000, 1800 ], 'image/jpeg' ), $params ),
                        $message
                );
        }
index 958d70a..4744875 100644 (file)
@@ -49,7 +49,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
        }
 
        /**
-        * @param $mockDb
+        * @param PHPUnit_Framework_MockObject_MockObject|Database $mockDb
         * @return PHPUnit_Framework_MockObject_MockObject|LoadBalancer
         */
        private function getMockLoadBalancer( $mockDb ) {
index 6c18599..950e220 100644 (file)
@@ -2030,7 +2030,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
        }
 
        /**
-        * @param $text
+        * @param string $text
         * @param int $ns
         *
         * @return PHPUnit_Framework_MockObject_MockObject|Title
index 3b00194..a4b980f 100644 (file)
@@ -282,7 +282,7 @@ class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
         * @dataProvider provideTestForAccountCreation
         * @param string $msg
         * @param Status|null $status
-        * @param StatusValue Result
+        * @param StatusValue $result Result
         */
        public function testTestForAccountCreation( $msg, $status, $result ) {
                $this->hook( 'AbortNewAccount', $this->once() )
index 0015453..811c8c2 100644 (file)
@@ -84,7 +84,7 @@ class ChangesListFilterTest extends MediaWikiTestCase {
                        ]
                );
 
-               $groupB =  $this->getGroup(
+               $groupB = $this->getGroup(
                        [
                                'name' => 'groupB',
                                'filters' => [
index 465bc22..420fe74 100644 (file)
@@ -74,6 +74,47 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
                $this->assertEquals( '', $html );
        }
 
+       public function testRecentChangesPrefix() {
+               $mockContext = $this->getMockBuilder( RequestContext::class )
+                       ->setMethods( [ 'getTitle' ] )
+                       ->getMock();
+               $mockContext->method( 'getTitle' )
+                       ->will( $this->returnValue( Title::newFromText( 'Expected Context Title' ) ) );
+
+               // One group of two lines
+               $enhancedChangesList = $this->newEnhancedChangesList();
+               $enhancedChangesList->setContext( $mockContext );
+               $enhancedChangesList->setChangeLinePrefixer( function ( $rc, $changesList ) {
+                       // Make sure RecentChange and ChangesList objects are the same
+                       $this->assertEquals( 'Expected Context Title', $changesList->getContext()->getTitle() );
+                       $this->assertTrue( $rc->getTitle() == 'Cat' || $rc->getTitle() == 'Dog' );
+                       return 'Hello world prefix';
+               } );
+               $enhancedChangesList->beginRecentChangesList();
+
+               $recentChange = $this->getEditChange( '20131103092153' );
+               $enhancedChangesList->recentChangesLine( $recentChange );
+               $recentChange = $this->getEditChange( '20131103092154' );
+               $enhancedChangesList->recentChangesLine( $recentChange );
+
+               $html = $enhancedChangesList->endRecentChangesList();
+
+               $this->assertRegExp( '/Hello world prefix/', $html );
+
+               // Two separate lines
+               $enhancedChangesList->beginRecentChangesList();
+
+               $recentChange = $this->getEditChange( '20131103092153' );
+               $enhancedChangesList->recentChangesLine( $recentChange );
+               $recentChange = $this->getEditChange( '20131103092154', 'Dog' );
+               $enhancedChangesList->recentChangesLine( $recentChange );
+
+               $html = $enhancedChangesList->endRecentChangesList();
+
+               preg_match_all( '/Hello world prefix/', $html, $matches );
+               $this->assertCount( 2, $matches[0] );
+       }
+
        public function testCategorizationLineFormatting() {
                $html = $this->createCategorizationLine(
                        $this->getCategorizationChange( '20150629191735', 0, 0 )
@@ -99,7 +140,10 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
                $enhancedChangesList->recentChangesLine( $recentChange, false );
 
                $html = $enhancedChangesList->endRecentChangesList();
-               $this->assertRegExp( '/data-mw-revid="5" data-mw-ts="20131103092153" class="[^"]*mw-enhanced-rc[^"]*"/', $html );
+               $this->assertRegExp(
+                       '/data-mw-revid="5" data-mw-ts="20131103092153" class="[^"]*mw-enhanced-rc[^"]*"/',
+                       $html
+               );
 
                $recentChange2 = $this->getEditChange( '20131103092253' );
                $enhancedChangesList->recentChangesLine( $recentChange2, false );
@@ -109,12 +153,16 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
                preg_match_all( '/td class="mw-enhanced-rc-nested"/', $html, $matches );
                $this->assertCount( 2, $matches[0] );
 
+               preg_match_all( '/data-target-page="Cat"/', $html, $matches );
+               $this->assertCount( 2, $matches[0] );
+
                $recentChange3 = $this->getLogChange();
                $enhancedChangesList->recentChangesLine( $recentChange3, false );
 
                $html = $enhancedChangesList->endRecentChangesList();
                $this->assertContains( 'data-mw-logaction="foo/bar"', $html );
                $this->assertContains( 'data-mw-logid="25"', $html );
+               $this->assertContains( 'data-target-page="Title"', $html );
        }
 
        /**
@@ -130,10 +178,10 @@ class EnhancedChangesListTest extends MediaWikiLangTestCase {
        /**
         * @return RecentChange
         */
-       private function getEditChange( $timestamp ) {
+       private function getEditChange( $timestamp, $pageTitle = 'Cat' ) {
                $user = $this->getMutableTestUser()->getUser();
                $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
-                       $user, 'Cat', 0, 5, 191, $timestamp, 0, 0
+                       $user, $pageTitle, 0, 5, 191, $timestamp, 0, 0
                );
 
                return $recentChange;
index 90c60c8..91dc731 100644 (file)
@@ -126,10 +126,14 @@ class OldChangesListTest extends MediaWikiLangTestCase {
                $oldChangesList = $this->getOldChangesList();
                $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
 
-               $this->assertRegExp( '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/',
-                       $line );
-               $this->assertRegExp( '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-newbie[\w\s-]*">/',
-                       $line );
+               $this->assertRegExp(
+                       '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/',
+                       $line
+               );
+               $this->assertRegExp(
+                       '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-newbie[\w\s-]*">/',
+                       $line
+               );
        }
 
        public function testRecentChangesLine_numberOfWatchingUsers() {
@@ -151,6 +155,40 @@ class OldChangesListTest extends MediaWikiLangTestCase {
                $this->assertRegExp( "/watchlist-0-Cat/", $line );
        }
 
+       public function testRecentChangesLine_dataAttribute() {
+               $oldChangesList = $this->getOldChangesList();
+               $oldChangesList->setWatchlistDivs( true );
+
+               $recentChange = $this->getEditChange();
+               $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
+               $this->assertRegExp( '/data-target-page=\"Cat\"/', $line );
+
+               $recentChange = $this->getLogChange( 'delete', 'delete' );
+               $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
+               $this->assertRegExp( '/data-target-page="Abc"/', $line );
+       }
+
+       public function testRecentChangesLine_prefix() {
+               $mockContext = $this->getMockBuilder( RequestContext::class )
+                       ->setMethods( [ 'getTitle' ] )
+                       ->getMock();
+               $mockContext->method( 'getTitle' )
+                       ->will( $this->returnValue( Title::newFromText( 'Expected Context Title' ) ) );
+
+               $oldChangesList = $this->getOldChangesList();
+               $oldChangesList->setContext( $mockContext );
+               $recentChange = $this->getEditChange();
+
+               $oldChangesList->setChangeLinePrefixer( function ( $rc, $changesList ) {
+                       // Make sure RecentChange and ChangesList objects are the same
+                       $this->assertEquals( 'Expected Context Title', $changesList->getContext()->getTitle() );
+                       $this->assertEquals( 'Cat', $rc->getTitle() );
+                       return 'I am a prefix';
+               } );
+               $line = $oldChangesList->recentChangesLine( $recentChange );
+               $this->assertRegExp( "/I am a prefix/", $line );
+       }
+
        private function getNewBotEditChange() {
                $user = $this->getMutableTestUser()->getUser();
 
index 19cffa2..c13cf25 100644 (file)
@@ -90,7 +90,7 @@ class EtcConfigTest extends PHPUnit_Framework_TestCase {
         */
        public function testConstructCacheSpec() {
                $config = $this->createConfigMock( [ 'cache' => [
-                       'class' =>  HashBagOStuff::class
+                       'class' => HashBagOStuff::class
                ] ] );
                $config->expects( $this->once() )->method( 'fetchAllFromEtcd' )
                        ->willReturn( [
index 49907c8..f1b54f6 100644 (file)
@@ -8,7 +8,7 @@ class WikitextStructureTest extends MediaWikiLangTestCase {
 
        /**
         * Get parser output for Wiki text
-        * @param $text
+        * @param string $text
         * @return ParserOutput
         */
        private function getParserOutput( $text ) {
@@ -18,7 +18,7 @@ class WikitextStructureTest extends MediaWikiLangTestCase {
 
        /**
         * Get WikitextStructure for given text
-        * @param $text
+        * @param string $text
         * @return WikiTextStructure
         */
        private function getStructure( $text ) {
index 48310a9..fd3b0b8 100644 (file)
@@ -39,7 +39,7 @@ class ClassicInterwikiLookupTest extends MediaWikiTestCase {
                $lookup = new \MediaWiki\Interwiki\ClassicInterwikiLookup(
                        Language::factory( 'en' ),
                        WANObjectCache::newEmpty(),
-                       60*60,
+                       60 * 60,
                        false,
                        3,
                        'en'
@@ -153,7 +153,7 @@ class ClassicInterwikiLookupTest extends MediaWikiTestCase {
                $lookup = new \MediaWiki\Interwiki\ClassicInterwikiLookup(
                        Language::factory( 'en' ),
                        WANObjectCache::newEmpty(),
-                       60*60,
+                       60 * 60,
                        $cdbFile,
                        3,
                        'en'
@@ -204,7 +204,7 @@ class ClassicInterwikiLookupTest extends MediaWikiTestCase {
                $lookup = new \MediaWiki\Interwiki\ClassicInterwikiLookup(
                        Language::factory( 'en' ),
                        WANObjectCache::newEmpty(),
-                       60*60,
+                       60 * 60,
                        $hash,
                        3,
                        'en'
index cf891e2..64f4960 100644 (file)
@@ -1,4 +1,8 @@
 <?php
+/*
+ * @group Media
+ * @covers MimeAnalyzer
+ */
 class MimeMagicTest extends PHPUnit_Framework_TestCase {
        /** @var MimeAnalyzer */
        private $mimeAnalyzer;
@@ -20,6 +24,13 @@ class MimeMagicTest extends PHPUnit_Framework_TestCase {
                parent::setUp();
        }
 
+       function doGuessMimeType( array $parameters = [] ) {
+               $class = new ReflectionClass( get_class( $this->mimeAnalyzer ) );
+               $method = $class->getMethod( 'doGuessMimeType' );
+               $method->setAccessible( true );
+               return $method->invokeArgs( $this->mimeAnalyzer, $parameters );
+       }
+
        /**
         * @dataProvider providerImproveTypeFromExtension
         * @param string $ext File extension (no leading dot)
@@ -69,4 +80,49 @@ class MimeMagicTest extends PHPUnit_Framework_TestCase {
                $actualType = $this->mimeAnalyzer->getMediaType( $oggFile, 'application/ogg' );
                $this->assertEquals( MEDIATYPE_AUDIO, $actualType );
        }
+
+       /**
+        * Test to make sure that mp3 files are detected as audio type
+        */
+       function testMP3AsAudio() {
+               $file = __DIR__ . '/../../../data/media/say-test-with-id3.mp3';
+               $actualType = $this->mimeAnalyzer->getMediaType( $file );
+               $this->assertEquals( MEDIATYPE_AUDIO, $actualType );
+       }
+
+       /**
+        * Test to make sure that MP3 with id3 tag is recognized
+        */
+       function testMP3WithID3Recognize() {
+               $file = __DIR__ . '/../../../data/media/say-test-with-id3.mp3';
+               $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+               $this->assertEquals( 'audio/mpeg', $actualType );
+       }
+
+       /**
+        * Test to make sure that MP3 without id3 tag is recognized (MPEG-1 sample rates)
+        */
+       function testMP3NoID3RecognizeMPEG1() {
+               $file = __DIR__ . '/../../../data/media/say-test-mpeg1.mp3';
+               $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+               $this->assertEquals( 'audio/mpeg', $actualType );
+       }
+
+       /**
+        * Test to make sure that MP3 without id3 tag is recognized (MPEG-2 sample rates)
+        */
+       function testMP3NoID3RecognizeMPEG2() {
+               $file = __DIR__ . '/../../../data/media/say-test-mpeg2.mp3';
+               $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+               $this->assertEquals( 'audio/mpeg', $actualType );
+       }
+
+       /**
+        * Test to make sure that MP3 without id3 tag is recognized (MPEG-2.5 sample rates)
+        */
+       function testMP3NoID3RecognizeMPEG2_5() {
+               $file = __DIR__ . '/../../../data/media/say-test-mpeg2.5.mp3';
+               $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
+               $this->assertEquals( 'audio/mpeg', $actualType );
+       }
 }
index 3d405fa..58a6d38 100644 (file)
@@ -2,7 +2,7 @@
 
 use Wikimedia\TestingAccessWrapper;
 
-class WANObjectCacheTest extends PHPUnit_Framework_TestCase  {
+class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
        /** @var WANObjectCache */
        private $cache;
        /**@var BagOStuff */
@@ -912,7 +912,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase  {
        /**
         * @dataProvider getWithSetCallback_versions_provider
         * @param array $extOpts
-        * @param $versioned
+        * @param bool $versioned
         */
        public function testGetWithSetCallback_versions( array $extOpts, $versioned ) {
                $cache = $this->cache;
index 5eee8b8..514e6cd 100644 (file)
@@ -4,7 +4,7 @@
  * @group Media
  * @covers XMPReader
  */
-class XMPTest extends PHPUnit_Framework_TestCase  {
+class XMPTest extends PHPUnit_Framework_TestCase {
 
        protected function setUp() {
                parent::setUp();
index 4b8f213..81e820e 100644 (file)
@@ -5,12 +5,15 @@
  */
 class FakeDimensionFile extends File {
        public $mustRender = false;
+       public $mime;
+       public $dimensions;
 
-       public function __construct( $dimensions ) {
+       public function __construct( $dimensions, $mime = 'unknown/unknown' ) {
                parent::__construct( Title::makeTitle( NS_FILE, 'Test' ),
                        new NullRepo( null ) );
 
                $this->dimensions = $dimensions;
+               $this->mime = $mime;
        }
 
        public function getWidth( $page = 1 ) {
@@ -28,4 +31,8 @@ class FakeDimensionFile extends File {
        public function getPath() {
                return '';
        }
+
+       public function getMimeType() {
+               return $this->mime;
+       }
 }
index c861b37..7c7f1cf 100644 (file)
@@ -180,4 +180,43 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                        'Substitute placeholders'
                );
        }
+
+       /**
+        * @covers ResourceLoaderModule::getHeaders
+        * @covers ResourceLoaderModule::getPreloadLinks
+        */
+       public function testGetHeaders() {
+               $context = $this->getResourceLoaderContext();
+
+               $module = new ResourceLoaderTestModule();
+               $this->assertSame( [], $module->getHeaders( $context ), 'Default' );
+
+               $module = $this->getMockBuilder( ResourceLoaderTestModule::class )
+                       ->setMethods( [ 'getPreloadLinks' ] )->getMock();
+               $module->method( 'getPreloadLinks' )->willReturn( [
+                        'https://example.org/script.js' => [ 'as' => 'script' ],
+               ] );
+               $this->assertSame(
+                       [
+                               'Link: <https://example.org/script.js>;rel=preload;as=script'
+                       ],
+                       $module->getHeaders( $context ),
+                       'Preload one resource'
+               );
+
+               $module = $this->getMockBuilder( ResourceLoaderTestModule::class )
+                       ->setMethods( [ 'getPreloadLinks' ] )->getMock();
+               $module->method( 'getPreloadLinks' )->willReturn( [
+                        'https://example.org/script.js' => [ 'as' => 'script' ],
+                        '/example.png' => [ 'as' => 'image' ],
+               ] );
+               $this->assertSame(
+                       [
+                               'Link: <https://example.org/script.js>;rel=preload;as=script,' .
+                                       '</example.png>;rel=preload;as=image'
+                       ],
+                       $module->getHeaders( $context ),
+                       'Preload two resources'
+               );
+       }
 }
index e6f709d..e9d022f 100644 (file)
@@ -794,4 +794,79 @@ mw.example();
                        'startup response sets state to error'
                );
        }
+
+       /**
+        * Integration test for modules sending extra HTTP response headers.
+        *
+        * @covers ResourceLoaderModule::getHeaders
+        * @covers ResourceLoaderModule::buildContent
+        * @covers ResourceLoader::makeModuleResponse
+        */
+       public function testMakeModuleResponseExtraHeaders() {
+               $module = $this->getMockBuilder( ResourceLoaderTestModule::class )
+                       ->setMethods( [ 'getPreloadLinks' ] )->getMock();
+               $module->method( 'getPreloadLinks' )->willReturn( [
+                        'https://example.org/script.js' => [ 'as' => 'script' ],
+               ] );
+
+               $rl = new EmptyResourceLoader();
+               $rl->register( [
+                       'foo' => $module,
+               ] );
+               $context = $this->getResourceLoaderContext(
+                       [ 'modules' => 'foo', 'only' => 'scripts' ],
+                       $rl
+               );
+
+               $modules = [ 'foo' => $rl->getModule( 'foo' ) ];
+               $response = $rl->makeModuleResponse( $context, $modules );
+               $extraHeaders = TestingAccessWrapper::newFromObject( $rl )->extraHeaders;
+
+               $this->assertEquals(
+                       [
+                               'Link: <https://example.org/script.js>;rel=preload;as=script'
+                       ],
+                       $extraHeaders,
+                       'Extra headers'
+               );
+       }
+
+       /**
+        * @covers ResourceLoaderModule::getHeaders
+        * @covers ResourceLoaderModule::buildContent
+        * @covers ResourceLoader::makeModuleResponse
+        */
+       public function testMakeModuleResponseExtraHeadersMulti() {
+               $foo = $this->getMockBuilder( ResourceLoaderTestModule::class )
+                       ->setMethods( [ 'getPreloadLinks' ] )->getMock();
+               $foo->method( 'getPreloadLinks' )->willReturn( [
+                        'https://example.org/script.js' => [ 'as' => 'script' ],
+               ] );
+
+               $bar = $this->getMockBuilder( ResourceLoaderTestModule::class )
+                       ->setMethods( [ 'getPreloadLinks' ] )->getMock();
+               $bar->method( 'getPreloadLinks' )->willReturn( [
+                        '/example.png' => [ 'as' => 'image' ],
+                        '/example.jpg' => [ 'as' => 'image' ],
+               ] );
+
+               $rl = new EmptyResourceLoader();
+               $rl->register( [ 'foo' => $foo, 'bar' => $bar ] );
+               $context = $this->getResourceLoaderContext(
+                       [ 'modules' => 'foo|bar', 'only' => 'scripts' ],
+                       $rl
+               );
+
+               $modules = [ 'foo' => $rl->getModule( 'foo' ), 'bar' => $rl->getModule( 'bar' ) ];
+               $response = $rl->makeModuleResponse( $context, $modules );
+               $extraHeaders = TestingAccessWrapper::newFromObject( $rl )->extraHeaders;
+               $this->assertEquals(
+                       [
+                               'Link: <https://example.org/script.js>;rel=preload;as=script',
+                               'Link: </example.png>;rel=preload;as=image,</example.jpg>;rel=preload;as=image'
+                       ],
+                       $extraHeaders,
+                       'Extra headers'
+               );
+       }
 }
index bb7508c..8b4119e 100644 (file)
@@ -18,11 +18,11 @@ class SearchIndexFieldTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider getMergeCases
-        * @param $t1
-        * @param $n1
-        * @param $t2
-        * @param $n2
-        * @param $result
+        * @param int $t1
+        * @param string $n1
+        * @param int $t2
+        * @param string $n2
+        * @param bool $result
         */
        public function testMerge( $t1, $n1, $t2, $n2, $result ) {
                $field1 =
index a9a612d..0af3089 100644 (file)
@@ -27,7 +27,7 @@ class SpecialRecentchangesTest extends AbstractChangesListSpecialPageTestCase {
 
                        [ 'days=3', [ 'days' => '3' ] ],
 
-                       [ 'days=0.25', [ 'days' => '0.25'] ],
+                       [ 'days=0.25', [ 'days' => '0.25' ] ],
 
                        [ 'namespace=5', [ 'namespace' => '5' ] ],
 
index 14c692a..a5fb50e 100644 (file)
@@ -18,7 +18,7 @@ class SpecialShortpagesTest extends MediaWikiTestCase {
                        'wgShortPagesNamespaceBlacklist' => $blacklistNS,
                        'wgContentNamespaces' => $contentNS
                ] );
-               $this->setTemporaryHook( 'ShortPagesQuery', function() {
+               $this->setTemporaryHook( 'ShortPagesQuery', function () {
                        // empty hook handler
                } );
 
index b0490ec..1c43919 100644 (file)
@@ -41,6 +41,7 @@ class SpecialWatchlistTest extends SpecialPageTestBase {
                                'watchlisthidepatrolled' => 0,
                                'watchlisthidecategorization' => 1,
                                'watchlistreloadautomatically' => 0,
+                               'watchlistunwatchlinks' => 0,
                        ]
                );
        }
index b33360c..7689ef1 100644 (file)
@@ -37,4 +37,10 @@ class LanguageCodeTest extends PHPUnit_Framework_TestCase {
                $this->assertArrayNotHasKey( 'simple', $map );
        }
 
+       public function testReplaceDeprecatedCodes() {
+               $this->assertEquals( 'gsw', LanguageCode::replaceDeprecatedCodes( 'als' ) );
+               $this->assertEquals( 'gsw', LanguageCode::replaceDeprecatedCodes( 'gsw' ) );
+               $this->assertEquals( null, LanguageCode::replaceDeprecatedCodes( null ) );
+       }
+
 }
index 3ac5bfb..90475c3 100644 (file)
@@ -7,8 +7,7 @@
  * WebRequest#response), then you might be able to use this mock to simplify
  * your tests.
  */
-class MockWebRequest extends WebRequest
-{
+class MockWebRequest extends WebRequest {
        /**
         * @var WebResponse
         */
diff --git a/tests/phpunit/mocks/media/MockMediaHandlerFactory.php b/tests/phpunit/mocks/media/MockMediaHandlerFactory.php
deleted file mode 100644 (file)
index 54d46b0..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Media-handling base classes and generic functionality.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Media
- */
-
-/**
- * Replace all media handlers with a mock. We do not need to generate
- * actual thumbnails to do parser testing, we only care about receiving
- * a ThumbnailImage properly initialized.
- *
- * @since 1.28
- */
-class MockMediaHandlerFactory extends MediaHandlerFactory {
-
-       private static $overrides = [
-               'image/svg+xml' => MockSvgHandler::class,
-               'image/vnd.djvu' => MockDjVuHandler::class,
-               'application/ogg' => MockOggHandler::class,
-       ];
-
-       public function __construct() {
-               // override parent
-       }
-
-       protected function getHandlerClass( $type ) {
-               if ( isset( self::$overrides[$type] ) ) {
-                       return self::$overrides[$type];
-               }
-
-               return MockBitmapHandler::class;
-       }
-
-}
diff --git a/tests/phpunit/mocks/media/MockOggHandler.php b/tests/phpunit/mocks/media/MockOggHandler.php
deleted file mode 100644 (file)
index 99992fe..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Fake handler for Ogg videos.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Media
- */
-
-class MockOggHandler extends OggHandlerTMH {
-       function doTransform( $file, $dstPath, $dstUrl, $params, $flags = 0 ) {
-               # Important or height handling is wrong.
-               if ( !$this->normaliseParams( $file, $params ) ) {
-                       return new TransformParameterError( $params );
-               }
-
-               $srcWidth = $file->getWidth();
-               $srcHeight = $file->getHeight();
-
-               // Audio should not be transformed by size, give it a default width and height
-               if ( $this->isAudio( $file ) ) {
-                       $srcWidth = 220;
-                       $srcHeight = 23;
-               }
-
-               $params['width'] = isset( $params['width'] ) ? $params['width'] : $srcWidth;
-
-               // if height overtakes width use height as max:
-               $targetWidth = $params['width'];
-               $targetHeight = $srcWidth == 0 ? $srcHeight : round( $params['width'] * $srcHeight / $srcWidth );
-               if ( isset( $params['height'] ) && $targetHeight > $params['height'] ) {
-                       $targetHeight = $params['height'];
-                       $targetWidth = round( $params['height'] * $srcWidth / $srcHeight );
-               }
-               $options = [
-                       'file' => $file,
-                       'length' => $this->getLength( $file ),
-                       'offset' => $this->getOffset( $file ),
-                       'width' => $targetWidth,
-                       'height' =>  $targetHeight,
-                       'isVideo' => !$this->isAudio( $file ),
-                       'thumbtime' => isset(
-                               $params['thumbtime']
-                       ) ? $params['thumbtime'] : intval( $file->getLength() / 2 ),
-                       'start' => isset( $params['start'] ) ? $params['start'] : false,
-                       'end' => isset( $params['end'] ) ? $params['end'] : false,
-                       'fillwindow' => isset( $params['fillwindow'] ) ? $params['fillwindow'] : false,
-                       'disablecontrols' => isset ( $params['disablecontrols'] ) ? $params['disablecontrols'] : false
-               ];
-
-               // No thumbs for audio
-               if ( !$options['isVideo'] ) {
-                       return new TimedMediaTransformOutput( $options );
-               }
-
-               // Setup pointer to thumb arguments
-               $options[ 'thumbUrl' ] = $dstUrl;
-               $options[ 'dstPath' ] = $dstPath;
-               $options[ 'path' ] = $dstPath;
-
-               return new TimedMediaTransformOutput( $options );
-       }
-
-       function getLength( $file ) {
-               if ( $this->isAudio( $file ) ) {
-                       return 0.99875;
-               }
-               return 4.3666666666667;
-       }
-
-       function getBitRate( $file ) {
-               if ( $this->isAudio( $file ) ) {
-                       return 41107;
-               }
-               return 590013;
-       }
-
-       function getWebType( $file ) {
-               if ( $this->isAudio( $file ) ) {
-                       return "audio/ogg; codecs=\"vorbis\"";
-               }
-               return "video/ogg; codecs=\"theora\"";
-       }
-
-       function getFramerate( $file ) {
-               if ( $this->isAudio( $file ) ) {
-                       return 0;
-               }
-               return 30;
-       }
-}
index 71cf852..671bdf1 100644 (file)
@@ -42,17 +42,17 @@ mw.loader.implement( 'testUsesNestedMissing', function () {
 }, {}, {});
 ",
 
-       'testSkipped' =>"
+       'testSkipped' => "
 mw.loader.implement( 'testSkipped', function () {
        QUnit.ok( false, 'Module testSkipped was supposed to be skipped.' );
 }, {}, {});
 ",
 
-       'testNotSkipped' =>"
+       'testNotSkipped' => "
 mw.loader.implement( 'testNotSkipped', function () {}, {}, {});
 ",
 
-       'testUsesSkippable' =>"
+       'testUsesSkippable' => "
 mw.loader.implement( 'testUsesSkippable', function () {}, {}, {});
 ",
 ];
index 200395e..257699a 100644 (file)
        parserTest( 'Y Dates', 'date', YDates );
 
        ISODates = [
-               [ '2000',               false, 0, 'Plain 4-digit year' ],
-               [ '2000-01',            false, 0, 'Year with month' ],
-               [ '2000-01-01', true, 946684800000, 'Year with month and day' ],
-               [ '2000-13-01', true, -Infinity, 'Non existant month' ],
-               [ '2000-01-32', true, -Infinity, 'Non existant day' ],
+               [ '2000',               false,  946684800000, 'Plain 4-digit year' ],
+               [ '2000-01',    true,   946684800000, 'Year with month' ],
+               [ '2000-01-01', true,   946684800000, 'Year with month and day' ],
+               [ '2000-13-01', false,  978307200000, 'Non existant month' ],
+               [ '2000-01-32', true,   949363200000, 'Non existant day' ],
+               [ '2000-01-01T12:30:30',        true, 946729830000, 'Date with a time' ],
                [ '2000-01-01T12:30:30Z',       true, 946729830000, 'Date with a UTC+0 time' ],
-               [ '2000-01-01T24:30:30Z',       true, -Infinity, 'Date with invalid hours' ],
-               [ '2000-01-01T12:60:30Z',       true, -Infinity, 'Date with invalid minutes' ],
+               [ '2000-01-01T24:30:30Z',       true, 946773030000, 'Date with invalid hours' ],
+               [ '2000-01-01T12:60:30Z',       true, 946728000000, 'Date with invalid minutes' ],
+               [ '2000-01-01T12:30:61Z',       true, 946729800000, 'Date with invalid amount of seconds, drops seconds' ],
                [ '2000-01-01T23:59:59Z',       true, 946771199000, 'Edges of time' ],
                [ '2000-01-01T12:30:30.111Z',   true, 946729830111, 'Date with milliseconds' ],
                [ '2000-01-01T12:30:30.11111Z', true, 946729830111, 'Date with too high precision' ],
-               [ '2000-01-01T12:30:30,111Z',   true, -Infinity, 'Date with milliseconds and , separator' ],
+               [ '2000-01-01T12:30:30,111Z',   true, 946729830111, 'Date with milliseconds and , separator' ],
                [ '2000-01-01T12:30:30+01:00',  true, 946726230000, 'Date time in UTC+1' ],
                [ '2000-01-01T12:30:30+01:30',  true, 946724430000, 'Date time in UTC+1:30' ],
                [ '2000-01-01T12:30:30-01:00',  true, 946733430000, 'Date time in UTC-1' ],
                [ '2000-01-01T12:30:30-01:30',  true, 946735230000, 'Date time in UTC-1:30' ],
                [ '2000-01-01T12:30:30.111+01:00', true, 946726230111, 'Date time and milliseconds in UTC+1' ],
                [ '2000-01-01Postfix', true, 946684800000, 'Date with appended postfix' ],
-               [ '2000-01-01 Postfix', true, 946684800000, 'Date with separate postfix' ]
-               /* Disable testcases, because behavior is browser dependant */
-               /*
-               [ '2000-11-31', true, 0, '31 days in 30 day month' ],
-               [ '50-01-01',   false, -60589296000000, 'Year with just two digits' ],
-               [ '-1000-01-01',        true, -93724128000000, 'Year BC' ],
-               [ '+1000-01-01',        true, -30610224000000, 'Date with +sign' ],
-               [ '2000-01-01 12:30:30Z',       true, 0, 'Date and time with no T marker' ],
+               [ '2000-01-01 Postfix', true, 946684800000, 'Date with separate postfix' ],
+               [ '2 Postfix',  false, -62104060800000, 'One digit with separate postfix' ],
+               [ 'ca. 2',              false, -62104060800000, 'Three digit with separate prefix' ],
+               [ '~200',               false, -55855785600000, 'Three digit with appended prefix' ],
+               [ 'ca. 200[1]', false, -55855785600000, 'Three digit with separate prefix and postfix' ],
+               [ '2000-11-31', true,   975628800000, '31 days in 30 day month' ],
+               [ '50-01-01',   true,   -60589296000000, 'Year with just two digits' ],
+               [ '2',                  false,  -62104060800000, 'Year with one digit' ],
+               [ '02-01',              true,   -62104060800000, 'Year with one digit and leading zero' ],
+               [ ' 2-01',              true,   -62104060800000, 'Year with one digit and leading space' ],
+               [ '-2-10',              true,   -62206704000000, 'Year BC with month' ],
+               [ '-9999',              false,  -377705116800000, 'max. Year BC' ],
+               [ '+9999-12',   true,   253399622400000, 'max. Date with +sign' ],
+               [ '2000-01-01 12:30:30Z',       true, 946729830000, 'Date and time with no T marker' ],
                [ '2000-01-01T12:30:60Z',       true, 946729860000, 'Date with leap second' ],
-               [ '2000-01-01T12:30:30-24:00',  true, 946816230000, 'Date time in UTC-24' ],
-               [ '2000-01-01T12:30:30+24:00',  true, 946643430000, 'Date time in UTC+24' ],
-               [ '2000-01-01T12:30:30+0100',   true, 946726230000, 'Time without separator in timezone offset' ]
-               // No "Z", uses local timezone:
-               [ '2000-01-01T12:30:30',                true, 946729830000, 'Date with a time' ],
-               [ '2000-01-01T12:30:61Z',       true, 946729800000, 'Date with invalid amount of seconds, drops seconds' ],
-               */
+               [ '2000-01-01T12:30:30-23:59',  true, 946816170000, 'Date time in UTC-23:59' ],
+               [ '2000-01-01T12:30:30+23:59',  true, 946643490000, 'Date time in UTC+23:59' ],
+               [ '2000-01-01T123030+0100',     true,   946726230000, 'Time without separators' ],
+               [ '20000101T123030+0100',       false,  946726230000, 'All without separators' ]
        ];
        parserTest( 'ISO Dates', 'isoDate', ISODates );
 
index c88941e..27d7e8d 100644 (file)
                ],
                isoDateSortingSorted = [
                        [ '2009' ],
-                       [ '2009-12-25T12:30:45' ],
                        [ '2009-12-25T12:30:45+01:00' ],
+                       [ '2009-12-25T12:30:45' ],
                        [ '2009-12-25T12:30:45.001Z' ],
                        [ '2009-12-25T12:30:45.111' ],
                        [ '2010-01-31' ],