Merge "Include bot password app ID in audit data"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 19 Dec 2018 16:37:46 +0000 (16:37 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 19 Dec 2018 16:37:46 +0000 (16:37 +0000)
147 files changed:
.travis.yml
Gruntfile.js
RELEASE-NOTES-1.32
RELEASE-NOTES-1.33
autoload.php
composer.json
includes/DefaultSettings.php
includes/Message.php
includes/Title.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiHelp.php
includes/api/ApiPageSet.php
includes/api/ApiQueryQueryPage.php
includes/api/i18n/ar.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/mk.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hant.json
includes/changes/ChangesList.php
includes/changes/OldChangesList.php
includes/changetags/ChangeTags.php
includes/diff/DifferenceEngine.php
includes/http/GuzzleHttpRequest.php
includes/http/HttpRequestFactory.php
includes/http/MWHttpRequest.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/bg.json
includes/installer/i18n/br.json
includes/installer/i18n/cs.json
includes/installer/i18n/ja.json
includes/installer/i18n/qqq.json
includes/installer/i18n/sr-ec.json
includes/libs/objectcache/WinCacheBagOStuff.php
includes/libs/rdbms/field/SQLiteField.php
includes/profiler/ProfilerExcimer.php [new file with mode: 0644]
includes/profiler/output/ProfilerOutputDb.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialUndelete.php
includes/specials/pagers/AllMessagesTablePager.php
includes/widget/TagMultiselectWidget.php [new file with mode: 0644]
includes/widget/TitlesMultiselectWidget.php
includes/widget/UsersMultiselectWidget.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/it.json
languages/i18n/kjp.json
languages/i18n/ko.json
languages/i18n/lij.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mni.json
languages/i18n/mr.json
languages/i18n/myv.json
languages/i18n/nan.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/oc.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/shn.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tru.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/yue.json
languages/i18n/zh-hant.json
maintenance/archives/patch-change_tag-indexes.sql
maintenance/archives/patch-tag_summary-ts_id.sql [deleted file]
maintenance/archives/patch-tag_summary-ts_log_id-unsigned.sql [deleted file]
maintenance/archives/patch-tag_summary-ts_rev_id-unsigned.sql [deleted file]
maintenance/archives/patch-tag_summary.sql [deleted file]
maintenance/archives/patch-valid_tag.sql [deleted file]
maintenance/mssql/archives/patch-tag_summary-ts_id.sql [deleted file]
maintenance/mssql/archives/patch-user_groups-ug_expiry.sql
maintenance/mssql/tables.sql
maintenance/oracle/archives/patch-tag_summary-ts_id.sql [deleted file]
maintenance/oracle/tables.sql
maintenance/populateChangeTagDef.php
maintenance/postgres/archives/patch-tag_summary.sql [deleted file]
maintenance/postgres/archives/patch-valid_tag.sql [deleted file]
maintenance/postgres/tables.sql
maintenance/sql.php
maintenance/sqlite/archives/patch-tag_summary-ts_id.sql [deleted file]
maintenance/tables.sql
resources/Resources.php
resources/src/mediawiki.base/mediawiki.base.js
resources/src/mediawiki.htmlform.ooui.styles.less
resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
resources/src/mediawiki.special/special.css
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.less
resources/src/mediawiki.widgets.datetime/mediawiki.widgets.datetime.definitions.less
resources/src/mediawiki.widgets/mw.widgets.TagMultiselectWidget.base.css [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.base.css [deleted file]
resources/src/startup/mediawiki.js
tests/parser/preprocess/All_system_messages.expected
tests/parser/preprocess/All_system_messages.txt
tests/phan/config.php
tests/phan/stubs/excimer.php [new file with mode: 0644]
tests/phpunit/includes/MagicWordFactoryTest.php [new file with mode: 0644]
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiComparePagesTest.php
tests/phpunit/includes/changetags/ChangeTagsTest.php

index 4260c46..3be6531 100644 (file)
@@ -34,6 +34,8 @@ matrix:
   include:
     # On Trusty, mysql user 'travis' doesn't have create database rights
     # Postgres has no user called 'root'.
+    - env: dbtype=mysql dbuser=root
+      php: 7.3
     - env: dbtype=mysql dbuser=root
       php: 7.2
     - env: dbtype=mysql dbuser=root
@@ -50,6 +52,7 @@ matrix:
     - env: dbtype=mysql dbuser=root
       php: hhvm-3.18
   allow_failures:
+    - php: 7.3
     - php: hhvm-3.18
     - php: hhvm-3.21
     - php: hhvm-3.24
index 6be908e..707a1fb 100644 (file)
@@ -21,6 +21,9 @@ module.exports = function ( grunt ) {
 
        grunt.initConfig( {
                eslint: {
+                       options: {
+                               reportUnusedDisableDirectives: true
+                       },
                        all: [
                                '**/*.js',
                                '!docs/**',
index cc250ef..5f034b5 100644 (file)
@@ -662,6 +662,8 @@ because of Phabricator reports.
   should be mediated by the CommentStore class, this change shouldn't affect
   external code.
 * (T206147) Database::close() will no longer commit any open transactions.
+* (T64103) Dropped columns category.cat_hidden, site_stats.ss_admins, and
+  recentchanges.rc_cur_time from the PostgreSQL schema.
 
 == Compatibility ==
 MediaWiki 1.32 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
index 00088f2..5b6f6b2 100644 (file)
@@ -55,6 +55,9 @@ production.
 ==== Changed external libraries ====
 * Updated wikimedia/xmp-reader from 0.6.0 to 0.6.1.
 * Updated wikimedia/scoped-callback from 2.0.0 to 3.0.0.
+* Updated wikimedia/ip-set from 1.2.0 to 2.0.0.
+  * The deprecated IPSet\IPSet alias was removed, Wikimedia\IPSet must be
+    used instead.
 * …
 
 ==== Removed external libraries ====
@@ -184,6 +187,8 @@ because of Phabricator reports.
   This will help identify the issue if you added it to $wgAuthManagerConfig.
 * wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
   domain ID as a key component and use makeGlobalKey().
+* (T202094) Title::getUserCaseDBKey() is deprecated; instead, please use
+  Title::getDBKey(), which doesn't vary case.
 * …
 
 === Other changes in 1.33 ===
index c411948..6a5a9df 100644 (file)
@@ -940,6 +940,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Widget\\Search\\SimpleSearchResultWidget' => __DIR__ . '/includes/widget/search/SimpleSearchResultWidget.php',
        'MediaWiki\\Widget\\SelectWithInputWidget' => __DIR__ . '/includes/widget/SelectWithInputWidget.php',
        'MediaWiki\\Widget\\SizeFilterWidget' => __DIR__ . '/includes/widget/SizeFilterWidget.php',
+       'MediaWiki\\Widget\\TagMultiselectWidget' => __DIR__ . '/includes/widget/TagMultiselectWidget.php',
        'MediaWiki\\Widget\\TitleInputWidget' => __DIR__ . '/includes/widget/TitleInputWidget.php',
        'MediaWiki\\Widget\\TitlesMultiselectWidget' => __DIR__ . '/includes/widget/TitlesMultiselectWidget.php',
        'MediaWiki\\Widget\\UserInputWidget' => __DIR__ . '/includes/widget/UserInputWidget.php',
@@ -1130,6 +1131,7 @@ $wgAutoloadLocalClasses = [
        'ProcessCacheLRU' => __DIR__ . '/includes/libs/ProcessCacheLRU.php',
        'Processor' => __DIR__ . '/includes/registration/Processor.php',
        'Profiler' => __DIR__ . '/includes/profiler/Profiler.php',
+       'ProfilerExcimer' => __DIR__ . '/includes/profiler/ProfilerExcimer.php',
        'ProfilerOutput' => __DIR__ . '/includes/profiler/output/ProfilerOutput.php',
        'ProfilerOutputDb' => __DIR__ . '/includes/profiler/output/ProfilerOutputDb.php',
        'ProfilerOutputDump' => __DIR__ . '/includes/profiler/output/ProfilerOutputDump.php',
index 08b0e01..1157333 100644 (file)
@@ -44,7 +44,7 @@
                "wikimedia/cldr-plural-rule-parser": "1.0.0",
                "wikimedia/composer-merge-plugin": "1.4.1",
                "wikimedia/html-formatter": "1.0.2",
-               "wikimedia/ip-set": "1.2.0",
+               "wikimedia/ip-set": "2.0.0",
                "wikimedia/less.php": "1.8.0",
                "wikimedia/object-factory": "1.0.0",
                "wikimedia/password-blacklist": "0.1.4",
index a63d352..2f1efbf 100644 (file)
@@ -4478,28 +4478,28 @@ $wgCentralIdLookupProvider = 'local';
 $wgPasswordPolicy = [
        'policies' => [
                'bureaucrat' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'sysop' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'interface-admin' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
                        'PasswordNotInLargeBlacklist' => true,
                ],
                'bot' => [
-                       'MinimalPasswordLength' => 8,
+                       'MinimalPasswordLength' => 10,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordNotInLargeBlacklist' => true,
index 15d9786..4049e11 100644 (file)
@@ -289,7 +289,6 @@ class Message implements MessageSpecifier, Serializable {
                        'parameters' => $this->parameters,
                        'format' => $this->format,
                        'useDatabase' => $this->useDatabase,
-                       'title' => $this->title,
                        'titlestr' => $this->title ? $this->title->getFullText() : null,
                ] );
        }
index 972d5b1..155bee1 100644 (file)
@@ -954,6 +954,7 @@ class Title implements LinkTarget {
 
        /**
         * Get the DB key with the initial letter case as specified by the user
+        * @deprecated since 1.33; please use Title::getDBKey() instead
         *
         * @return string DB key
         */
@@ -3275,9 +3276,13 @@ class Title implements LinkTarget {
         * indicating who can move or edit the page from the page table, (pre 1.10) rows.
         * Edit and move sections are separated by a colon
         * Example: "edit=autoconfirmed,sysop:move=sysop"
+        * @param bool $readLatest When true, skip replicas and read from the master DB.
         */
-       public function loadRestrictionsFromRows( $rows, $oldFashionedRestrictions = null ) {
-               $dbr = wfGetDB( DB_REPLICA );
+       public function loadRestrictionsFromRows(
+               $rows, $oldFashionedRestrictions = null, $readLatest = false
+       ) {
+               $whichDb = $readLatest ? DB_MASTER : DB_REPLICA;
+               $dbr = wfGetDB( $whichDb );
 
                $restrictionTypes = $this->getRestrictionTypes();
 
@@ -3347,9 +3352,10 @@ class Title implements LinkTarget {
         * indicating who can move or edit the page from the page table, (pre 1.10) rows.
         * Edit and move sections are separated by a colon
         * Example: "edit=autoconfirmed,sysop:move=sysop"
+        * @param bool $readLatest When true, skip replicas and read from the master DB.
         */
-       public function loadRestrictions( $oldFashionedRestrictions = null ) {
-               if ( $this->mRestrictionsLoaded ) {
+       public function loadRestrictions( $oldFashionedRestrictions = null, $readLatest = false ) {
+               if ( $this->mRestrictionsLoaded && !$readLatest ) {
                        return;
                }
 
@@ -3359,10 +3365,11 @@ class Title implements LinkTarget {
                        $fname = __METHOD__;
                        $rows = $cache->getWithSetCallback(
                                // Page protections always leave a new null revision
-                               $cache->makeKey( 'page-restrictions', $id, $this->getLatestRevID() ),
+                               $cache->makeKey( 'page-restrictions', $id, $this->getLatestRevID(), $readLatest ),
                                $cache::TTL_DAY,
-                               function ( $curValue, &$ttl, array &$setOpts ) use ( $fname ) {
-                                       $dbr = wfGetDB( DB_REPLICA );
+                               function ( $curValue, &$ttl, array &$setOpts ) use ( $fname, $readLatest ) {
+                                       $whichDb = $readLatest ? DB_MASTER : DB_REPLICA;
+                                       $dbr = wfGetDB( $whichDb );
 
                                        $setOpts += Database::getCacheSetOptions( $dbr );
 
@@ -3377,7 +3384,7 @@ class Title implements LinkTarget {
                                }
                        );
 
-                       $this->loadRestrictionsFromRows( $rows, $oldFashionedRestrictions );
+                       $this->loadRestrictionsFromRows( $rows, $oldFashionedRestrictions, $readLatest );
                } else {
                        $title_protection = $this->getTitleProtectionInternal();
 
index 3581ac8..8976626 100644 (file)
@@ -57,20 +57,6 @@ class ApiBlock extends ApiBase {
                $editingRestriction = 'sitewide';
                $pageRestrictions = '';
                if ( $this->getConfig()->get( 'EnablePartialBlocks' ) ) {
-                       if ( $params['pagerestrictions'] ) {
-                               $count = count( $params['pagerestrictions'] );
-                               if ( $count > 10 ) {
-                                       $this->dieWithError(
-                                               $this->msg(
-                                                       'apierror-integeroutofrange-abovebotmax',
-                                                       'pagerestrictions',
-                                                       10,
-                                                       $count
-                                               )
-                                       );
-                               }
-                       }
-
                        if ( $params['partial'] ) {
                                $editingRestriction = 'partial';
                        }
@@ -207,6 +193,8 @@ class ApiBlock extends ApiBase {
                        $params['partial'] = false;
                        $params['pagerestrictions'] = [
                                ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_ISMULTI_LIMIT1 => 10,
+                               ApiBase::PARAM_ISMULTI_LIMIT2 => 10,
                        ];
                }
 
index f688346..4ba30ab 100644 (file)
@@ -74,16 +74,48 @@ class ApiComparePages extends ApiBase {
                        switch ( $params['torelative'] ) {
                                case 'prev':
                                        // Swap 'from' and 'to'
-                                       list( $toRev, $toRelRev2, $toValsRev ) = [ $fromRev, $fromRelRev, $fromValsRev ];
-                                       $fromRev = $this->revisionStore->getPreviousRevision( $fromRelRev );
+                                       list( $toRev, $toRelRev, $toValsRev ) = [ $fromRev, $fromRelRev, $fromValsRev ];
+                                       $fromRev = $this->revisionStore->getPreviousRevision( $toRelRev );
                                        $fromRelRev = $fromRev;
                                        $fromValsRev = $fromRev;
+                                       if ( !$fromRev ) {
+                                               $title = Title::newFromLinkTarget( $toRelRev->getPageAsLinkTarget() );
+                                               $this->addWarning( [
+                                                       'apiwarn-compare-no-prev',
+                                                       wfEscapeWikiText( $title->getPrefixedText() ),
+                                                       $toRelRev->getId()
+                                               ] );
+
+                                               // (T203433) Create an empty dummy revision as the "previous".
+                                               // The main slot has to exist, the rest will be handled by DifferenceEngine.
+                                               $fromRev = $this->revisionStore->newMutableRevisionFromArray( [
+                                                       'title' => $title ?: Title::makeTitle( NS_SPECIAL, 'Badtitle/' . __METHOD__ )
+                                               ] );
+                                               $fromRev->setContent(
+                                                       SlotRecord::MAIN,
+                                                       $toRelRev->getContent( SlotRecord::MAIN, RevisionRecord::RAW )
+                                                               ->getContentHandler()
+                                                               ->makeEmptyContent()
+                                               );
+                                       }
                                        break;
 
                                case 'next':
                                        $toRev = $this->revisionStore->getNextRevision( $fromRelRev );
                                        $toRelRev = $toRev;
                                        $toValsRev = $toRev;
+                                       if ( !$toRev ) {
+                                               $title = Title::newFromLinkTarget( $fromRelRev->getPageAsLinkTarget() );
+                                               $this->addWarning( [
+                                                       'apiwarn-compare-no-next',
+                                                       wfEscapeWikiText( $title->getPrefixedText() ),
+                                                       $fromRelRev->getId()
+                                               ] );
+
+                                               // (T203433) The web UI treats "next" as "cur" in this case.
+                                               // Avoid repeating metadata by making a MutableRevisionRecord with no changes.
+                                               $toRev = MutableRevisionRecord::newFromParentRevision( $fromRelRev );
+                                       }
                                        break;
 
                                case 'cur':
@@ -103,10 +135,12 @@ class ApiComparePages extends ApiBase {
                        list( $toRev, $toRelRev, $toValsRev ) = $this->getDiffRevision( 'to', $params );
                }
 
-               // Handle missing from or to revisions
+               // Handle missing from or to revisions (should never happen)
+               // @codeCoverageIgnoreStart
                if ( !$fromRev || !$toRev ) {
                        $this->dieWithError( 'apierror-baddiff' );
                }
+               // @codeCoverageIgnoreEnd
 
                // Handle revdel
                if ( !$fromRev->audienceCan(
index 84fcbef..886dbcc 100644 (file)
@@ -102,7 +102,6 @@ class ApiHelp extends ApiBase {
                        'mediawiki.apihelp',
                ] );
                if ( !empty( $options['toc'] ) ) {
-                       $out->addModules( 'mediawiki.toc' );
                        $out->addModuleStyles( 'mediawiki.toc.styles' );
                }
                $out->setPageTitle( $context->msg( 'api-help-title' ) );
index 913f45b..4ffe873 100644 (file)
@@ -821,7 +821,7 @@ class ApiPageSet extends ApiBase {
         * @param array $pageids Array of page IDs
         * @param bool $filterIds Whether the IDs need filtering
         */
-       private function initFromPageIds( $pageids, $filterIds = false ) {
+       private function initFromPageIds( $pageids, $filterIds = true ) {
                if ( !$pageids ) {
                        return;
                }
index 8758d9c..ea20664 100644 (file)
  * @file
  */
 
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Special\SpecialPageFactory;
+
 /**
  * Query module to get the results of a QueryPage-based special page
  *
  * @ingroup API
  */
 class ApiQueryQueryPage extends ApiQueryGeneratorBase {
-       private $qpMap;
+
+       /**
+        * @var string[] list of special page names
+        */
+       private $queryPages;
+
+       /**
+        * @var SpecialPageFactory
+        */
+       private $specialPageFactory;
 
        public function __construct( ApiQuery $query, $moduleName ) {
                parent::__construct( $query, $moduleName, 'qp' );
-               // Build mapping from special page names to QueryPage classes
-               $uselessQueryPages = $this->getConfig()->get( 'APIUselessQueryPages' );
-               $this->qpMap = [];
-               foreach ( QueryPage::getPages() as $page ) {
-                       if ( !in_array( $page[1], $uselessQueryPages ) ) {
-                               $this->qpMap[$page[1]] = $page[0];
-                       }
-               }
+               $this->queryPages = array_values( array_diff(
+                       array_column( QueryPage::getPages(), 1 ), // [ class, name ]
+                       $this->getConfig()->get( 'APIUselessQueryPages' )
+               ) );
+               $this->specialPageFactory = MediaWikiServices::getInstance()->getSpecialPageFactory();
        }
 
        public function execute() {
@@ -48,6 +57,27 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                $this->run( $resultPageSet );
        }
 
+       /**
+        * @param string $name
+        * @return QueryPage
+        */
+       private function getSpecialPage( $name ) {
+               $qp = $this->specialPageFactory->getPage( $name );
+               if ( !$qp ) {
+                       self::dieDebug(
+                               __METHOD__,
+                               'SpecialPageFactory failed to create special page ' . $name
+                       );
+               }
+               if ( !( $qp instanceof QueryPage ) ) {
+                       self::dieDebug(
+                               __METHOD__,
+                               'Special page ' . $name . ' is not a QueryPage'
+                       );
+               }
+               return $qp;
+       }
+
        /**
         * @param ApiPageSet|null $resultPageSet
         */
@@ -55,8 +85,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
                $params = $this->extractRequestParams();
                $result = $this->getResult();
 
-               /** @var QueryPage $qp */
-               $qp = new $this->qpMap[$params['page']]();
+               $qp = $this->getSpecialPage( $params['page'] );
                if ( !$qp->userCanExecute( $this->getUser() ) ) {
                        $this->dieWithError( 'apierror-specialpage-cantexecute' );
                }
@@ -125,8 +154,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        }
 
        public function getCacheMode( $params ) {
-               /** @var QueryPage $qp */
-               $qp = new $this->qpMap[$params['page']]();
+               $qp = $this->getSpecialPage( $params['page'] );
                if ( $qp->getRestriction() != '' ) {
                        return 'private';
                }
@@ -137,7 +165,7 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        public function getAllowedParams() {
                return [
                        'page' => [
-                               ApiBase::PARAM_TYPE => array_keys( $this->qpMap ),
+                               ApiBase::PARAM_TYPE => $this->queryPages,
                                ApiBase::PARAM_REQUIRED => true
                        ],
                        'offset' => [
index 17c95be..518a4fa 100644 (file)
        "apiwarn-badurlparam": "تعذر تحليل <var>$1urlparam</var> لـ$2، باستخدام العرض والطول فقط.",
        "apiwarn-badutf8": "تحتوي القيمة التي تم تمريرها لـ<var>$1</var> على بيانات غير صالحة أو غير طبيعية، يجب أن تكون البيانات النصية صالحة، NFC-normalized Unicode بدون أحرف تحكم C0 غير HT (\\t) وLF (\\n) وCR (\\r).",
        "apiwarn-checktoken-percentencoding": "تحقق من أن الرموز مثل \"+\" في الرمز المميز يتم ترميزها بشكل صحيح في المسار.",
+       "apiwarn-compare-no-next": "المراجعة $2 هي أحدث مراجعة من $1، ولا توجد مراجعة لـ<kbd>torelative=next</kbd>  للمقارنة بها.",
+       "apiwarn-compare-no-prev": "المراجعة $2 هي أقدم مراجعة من $1، ولا توجد مراجعة لـ<kbd>torelative=next</kbd>  للمقارنة بها.",
        "apiwarn-compare-nocontentmodel": "لا يمكن تحديد نموذج محتوى، على افتراض $1.",
        "apiwarn-deprecation-deletedrevs": "تم إيقاف <kbd>list=deletedrevs</kbd>; الرجاء استخدام <kbd>prop=deletedrevisions</kbd> or <kbd>list=alldeletedrevisions</kbd> بدلا من ذلك.",
        "apiwarn-deprecation-httpsexpected": "HTTP المستخدمة عند توقع HTTPS.",
index 8643135..f626d2b 100644 (file)
        "apierror-unknownerror-nocode": "Unbekannter Fehler.",
        "apierror-unknownerror": "Unbekannter Fehler: „$1“.",
        "apierror-unknownformat": "Nicht erkanntes Format „$1“.",
+       "apiwarn-compare-no-next": "Die Version $2 ist die aktuelle Version von $1. Es gibt keine zu vergleichende Version für <kbd>torelative=next</kbd>.",
+       "apiwarn-compare-no-prev": "Die Version $2 ist die aktuelle Version von $1. Es gibt keine zu vergleichende Version für <kbd>torelative=prev</kbd>.",
        "apiwarn-deprecation-missingparam": "Da <var>$1</var> nicht angegeben wurde, wurde ein veraltetes Format für die Ausgabe verwendet. Dieses Format ist veraltet und in Zukunft wird immer das neue Format benutzt.",
        "apiwarn-ignoring-invalid-templated-value": "Ignorieren des Wertes <kbd>$2</kbd> in <var>$1</var> bei der Verarbeitung von Vorlagenparametern.",
        "apiwarn-invalidcategory": "„$1“ ist keine Kategorie.",
index 9b74c5e..8f5ba8d 100644 (file)
        "apiwarn-badurlparam": "Could not parse <var>$1urlparam</var> for $2. Using only width and height.",
        "apiwarn-badutf8": "The value passed for <var>$1</var> contains invalid or non-normalized data. Textual data should be valid, NFC-normalized Unicode without C0 control characters other than HT (\\t), LF (\\n), and CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Check that symbols such as \"+\" in the token are properly percent-encoded in the URL.",
+       "apiwarn-compare-no-next": "Revision $2 is the latest revision of $1, there is no revision for <kbd>torelative=next</kbd> to compare to.",
+       "apiwarn-compare-no-prev": "Revision $2 is the earliest revision of $1, there is no revision for <kbd>torelative=prev</kbd> to compare to.",
        "apiwarn-compare-nocontentmodel": "No content model could be determined, assuming $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> has been deprecated. Please use <kbd>prop=deletedrevisions</kbd> or <kbd>list=alldeletedrevisions</kbd> instead.",
        "apiwarn-deprecation-httpsexpected": "HTTP used when HTTPS was expected.",
index 31c9d8f..afddc10 100644 (file)
@@ -32,7 +32,8 @@
                        "Javiersanp",
                        "KATRINE1992",
                        "Adjen",
-                       "Tiberius1701"
+                       "Tiberius1701",
+                       "Jelou"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correo]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> La API de MediaWiki es una interfaz madura y estable que se mejora y prueba activamente. Aunque tratamos de evitarlo, es posible que ocasionalmente debamos hacer cambios importantes; Suscribase a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de correo the mediawiki-api-announce] para recibir avisos de actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para obtener más información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errores y advertencias]].\n\n<p class=\"mw-apisandbox-link\"><strong>Pruebas:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].</p>",
        "apihelp-paraminfo-example-1": "Mostrar información para <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd> y <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-paraminfo-example-2": "Mostrar información para todos los submódulos de <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
        "apihelp-parse-summary": "Analiza el contenido y devuelve la salida del analizador sintáctico.",
-       "apihelp-parse-extended-description": "Véanse los distintos módulos prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obtener información de la versión actual de una página.\n\nHay varias maneras de especificar el texto que analizar:\n# Especificar una página o revisión, mediante <var>$1page</var>, <var>$1pageid</var> o <var>$1oldid</var>.\n# Especificar explícitamente el contenido, mediante <var>$1text</var>, <var>$1title</var> y <var>$1contentmodel</var>.\n# Especificar solamente un resumen que analizar. Se debería asignar a <var>$1prop</var> un valor vacío.",
+       "apihelp-parse-extended-description": "Véanse los distintos módulos prop de <kbd>[[Special:ApiHelp/query|action=query]]</kbd> para obtener información de la versión actual de una página.\n\nHay varias maneras de especificar el texto que analizar:\n# Especificar una página o revisión, mediante <var>$1page</var>, <var>$1pageid</var> o <var>$1oldid</var>.\n# Especificar explícitamente el contenido, mediante <var>$1text</var>, <var>$1title</var>, <var>$1revid</var>, y <var>$1contentmodel</var>.\n# Especificar solamente un resumen que analizar. Se debería asignar a <var>$1prop</var> un valor vacío.",
        "apihelp-parse-param-title": "Título de la página a la que pertenece el texto. Si se omite se debe especificar <var>$1contentmodel</var> y se debe utilizar el [[API]] como título.",
        "apihelp-parse-param-text": "Texto a analizar. Utiliza <var>$1title</var> or <var>$1contentmodel</var> para controlar el modelo del contenido.",
        "apihelp-parse-param-summary": "Resumen a analizar.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Añade el nombre de archivo de la versión archivada para las versiones que no son las últimas.",
        "apihelp-query+filearchive-example-simple": "Mostrar una lista de todos los archivos eliminados.",
        "apihelp-query+filerepoinfo-summary": "Devuelve metainformación sobre los repositorios de imágenes configurados en el wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Propiedades del repositorio a obtener (puede haber más disponibles en algunos wikis):\n;apiurl:URL del repositorio API - útil para obtener información de imagen del servidor.\n;name:La clave del repositorio - usado in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> y [[Special:ApiHelp/query+imageinfo|imageinfo]] devuelve valores.\n;displayname:El nombre legible del repositorio  wiki.\n;rooturl:Raíz URL para rutas de  imágenes.\n;local:Si ese repositorio es local o no.",
+       "apihelp-query+filerepoinfo-param-prop": "Qué propiedades del repositorio obtener (las propiedades disponibles pueden variar en otras wikis).",
        "apihelp-query+filerepoinfo-example-simple": "Obtener información acerca de los repositorios de archivos.",
        "apihelp-query+fileusage-summary": "Encontrar todas las páginas que utilizan los archivos dados.",
        "apihelp-query+fileusage-param-prop": "Qué propiedades se obtendrán:",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "La hora de notificación de la lista de seguimiento de cada página.",
        "apihelp-query+info-paramvalue-prop-subjectid": "La ID de página de la página principal de cada página de discusión.",
        "apihelp-query+info-paramvalue-prop-url": "Muestra una URL completa, una URL de edición y la URL canónica de cada página.",
-       "apihelp-query+info-paramvalue-prop-readable": "Si el usuario puede leer esta página.",
+       "apihelp-query+info-paramvalue-prop-readable": "Si el usuario puede leer esta página. Usa <kbd>intestactions=read</kbd> en su lugar.",
        "apihelp-query+info-paramvalue-prop-preload": "Muestra el texto devuelto por EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Proporciona la manera en que se muestra realmente el título de la página",
        "apihelp-query+info-param-testactions": "Comprobar su el usuario actual puede realizar determinadas acciones en la página.",
        "apihelp-query+revisions-summary": "Obtener información de la revisión.",
        "apihelp-query+revisions-extended-description": "Puede ser utilizado de varias maneras:\n# Obtener datos sobre un conjunto de páginas (última revisión), estableciendo títulos o ID de paginas.\n# Obtener revisiones para una página determinada, usando títulos o ID de páginas con inicio, fin o límite.\n# Obtener datos sobre un conjunto de revisiones estableciendo sus ID con revids.",
        "apihelp-query+revisions-paraminfo-singlepageonly": "Solo se puede usar con una sola página (modo n.º 2).",
-       "apihelp-query+revisions-param-startid": "Identificador de revisión a partir del cual empezar la enumeración.",
-       "apihelp-query+revisions-param-endid": "Identificador de revisión en el que detener la enumeración.",
+       "apihelp-query+revisions-param-startid": "Iniciar la enumeración desde la marca de tiempo de esta revisión. La revisión debe existir, pero no es necesario que pertenezca a esta página.",
+       "apihelp-query+revisions-param-endid": "Detener la enumeración en la marca de tiempo de esta revisión. La revisión debe existir, pero no es necesario que pertenezca a esta página.",
        "apihelp-query+revisions-param-start": "Marca de tiempo a partir de la cual empezar la enumeración.",
        "apihelp-query+revisions-param-end": "Enumerar hasta esta marca de tiempo.",
        "apihelp-query+revisions-param-user": "Incluir solo las revisiones realizadas por el usuario.",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "Identificador de usuario del creador de la revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-size": "Longitud (en bytes) de la revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) de la revisión.",
-       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Identificador del modelo de contenido de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Id. del modelo de contenido en cada espacio de revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "Comentario del usuario para la revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Comentario analizado del usuario para la revisión.",
-       "apihelp-query+revisions+base-paramvalue-prop-content": "Texto de la revisión.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "Contenido de cada espacio de revisión.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para la revisión.",
-       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "El árbol de análisis sintáctico XML del contenido de la revisión (requiere el modelo de contenido <code>$1</code>).",
+       "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Usa <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> o <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> en su lugar.\nEl árbol de análisis sintáctico XML del contenido de la revisión (necesita el modelo de contenido <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Limitar la cantidad de revisiones que se devolverán.",
-       "apihelp-query+revisions+base-param-expandtemplates": "Expandir las plantillas en el contenido de la revisión (requiere $1prop=content).",
-       "apihelp-query+revisions+base-param-generatexml": "Generar el árbol de análisis sintáctico XML para el contenido de la revisión (requiere $1prop=content; reemplazado por <kbd>$1prop=parsetree</kbd>).",
-       "apihelp-query+revisions+base-param-parse": "Analizar el contenido de la revisión (requiere $1prop=content). Por motivos de rendimiento, si se utiliza esta opción, el valor de $1limit es forzado a 1.",
+       "apihelp-query+revisions+base-param-expandtemplates": "Usa <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> en su lugar.\nExpandir las plantillas en el contenido de la revisión (necesita $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Usa <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> o <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> en su lugar.\nGenerar el árbol de análisis sintáctico XML para el contenido de la revisión (necesita $1prop=content).",
+       "apihelp-query+revisions+base-param-parse": "Usa <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd> en su lugar.\nAnalizar el contenido de la revisión (requiere $1prop=content). Por razones de rendimiento, si se usa esta opción, el valor de $1limit es forzado a 1.",
        "apihelp-query+revisions+base-param-section": "Recuperar solamente el contenido de este número de sección.",
        "apihelp-query+revisions+base-param-contentformat": "Formato de serialización utilizado para <var>$1difftotext</var> y esperado para la salida de contenido.",
        "apihelp-query+search-summary": "Realizar una búsqueda de texto completa.",
        "apihelp-rollback-param-tags": "Etiquetas que aplicar a la reversión.",
        "apihelp-rollback-param-user": "Nombre del usuario cuyas ediciones se van a revertir.",
        "apihelp-rollback-param-summary": "Resumen de edición personalizado. Si se deja vacío se utilizará el predeterminado.",
-       "apihelp-rollback-param-markbot": "Marcar las acciones revertidas y la reversión como ediciones por bots.",
+       "apihelp-rollback-param-markbot": "Marca las ediciones como revertidas y las revierte como ediciones de un bot.",
        "apihelp-rollback-param-watchlist": "Añadir o borrar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar seguimiento.",
        "apihelp-rollback-example-simple": "Revertir las últimas ediciones de la página <kbd>Main Page</kbd> por el usuario <kbd>Example</kbd>.",
        "apihelp-rollback-example-summary": "Revertir las últimas ediciones de la página <kbd>Main Page</kbd> por el usuario de IP <kbd>192.0.2.5</kbd> con resumen <kbd>Reverting vandalism</kbd>, y marcar esas ediciones y la reversión como ediciones realizadas por bots.",
        "apihelp-json-param-callback": "Si se especifica, envuelve la salida dentro de una llamada a una función dada. Por motivos de seguridad, cualquier dato específico del usuario estará restringido.",
        "apihelp-json-param-utf8": "Si se especifica, codifica la mayoría (pero no todos) de los caracteres no pertenecientes a ASCII como UTF-8 en lugar de reemplazarlos por secuencias de escape hexadecimal. Toma el comportamiento por defecto si <var>formatversion</var> no es <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Si se especifica, codifica todos los caracteres no pertenecientes a ASCII mediante secuencias de escape hexadecimal. Toma el comportamiento por defecto si <var>formatversion</var> no es <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno experimental. ¡Atención, las especificaciones pueden cambiar!\n;latest: Utiliza el último formato (actualmente <kbd>2</kbd>). Puede cambiar sin aviso.",
+       "apihelp-json-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno.\n;último: Utiliza el último formato (actualmente <kbd>2</kbd>), puede cambiar sin aviso.",
        "apihelp-jsonfm-summary": "Producir los datos de salida en formato JSON (con resaltado sintáctico en HTML).",
        "apihelp-none-summary": "No extraer nada.",
        "apihelp-php-summary": "Extraer los datos de salida en formato serializado PHP.",
-       "apihelp-php-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno experimental. ¡Atención, las especificaciones pueden cambiar!\n;latest: Utilizar el último formato (actualmente <kbd>2</kbd>). Puede cambiar sin aviso.",
+       "apihelp-php-param-formatversion": "Formato de salida:\n;1: Formato retrocompatible (booleanos con estilo XML, claves <samp>*</samp> para nodos de contenido, etc.).\n;2: Formato moderno.\n;último: Utiliza el último formato (actualmente <kbd>2</kbd>), puede cambiar sin aviso.",
        "apihelp-phpfm-summary": "Producir los datos de salida en formato PHP serializado (con resaltado sintáctico en HTML).",
        "apihelp-rawfm-summary": "Extraer los datos de salida, incluidos los elementos de depuración, en formato JSON (embellecido en HTML).",
        "apihelp-xml-summary": "Producir los datos de salida en formato XML.",
        "apierror-nosuchuserid": "No hay ningún usuario con ID $1.",
        "apierror-notarget": "No has especificado un destino válido para esta acción.",
        "apierror-notpatrollable": "La revisión r$1 no se puede patrullar por ser demasiado antigua.",
-       "apierror-offline": "No se puede continuar debido a problemas de conectividad de la red. Asegúrate de que tienes una conexión activa a internet e inténtalo de nuevo.",
+       "apierror-offline": "No se pudo continuar debido a problemas de conectividad de red. Asegúrate de tener una conexión a Internet que funcione y vuelve a intentarlo.",
        "apierror-opensearch-json-warnings": "No se pueden representar los avisos en formato JSON de OpenSearch.",
        "apierror-pagecannotexist": "En este espacio de nombres no se permiten páginas reales.",
        "apierror-pagedeleted": "La página ha sido borrada en algún momento desde que obtuviste su marca de tiempo.",
index 5d453b4..6801faa 100644 (file)
        "apiwarn-badurlparam": "Impossible d'analyser <var>$1urlparam</var> pour $2. En utilisant seulement la largeur et la hauteur.",
        "apiwarn-badutf8": "La valeur passée pour <var>$1</var> contient des données non valides ou non normalisées. Les données textuelles doivent être de l’Unicode valide normalisé en NFC sans caractères de contrôle c0 autres que HT (\\t), LF (\\n) et CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Vérifier que les symboles tels que \"+\" dans le jeton sont correctement  codés avec des pourcents dans l'URL.",
+       "apiwarn-compare-no-next": "La version $2 est la dernière version de $1, il n'existe pas de version <kbd>torelative=next</kbd> à comparer.",
+       "apiwarn-compare-no-prev": "La version $2 est la plus ancienne de $1, il n'existe pas de version <kbd>torelative=prev</kbd> à comparer.",
        "apiwarn-compare-nocontentmodel": "Aucun modèle de contenu n’a pu être déterminé, $1 est supposé.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> est devenu désuet. Veuillez utiliser <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd> à la place.",
        "apiwarn-deprecation-httpsexpected": "HTTP est utilisé alors que HTTPS est attendu.",
index 3370d73..94ee481 100644 (file)
@@ -49,6 +49,8 @@
        "apihelp-block-param-reblock": "אם המשתמש כבר חסום, לדרוס את החסימה הנוכחית.",
        "apihelp-block-param-watchuser": "לעקוב אחרי דף המשתמש ודף השיחה של המשתמש או של כתובת ה־IP.",
        "apihelp-block-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
+       "apihelp-block-param-partial": "חסימת משתמש מעריכת דפים או מרחבי שם מסוימים ולא מכל האתר.",
+       "apihelp-block-param-pagerestrictions": "רשימת כותרות שהמשתמש ייחסם מלערוך. חל רק כאשר \"partial\" מוגדל ל־true.",
        "apihelp-block-example-ip-simple": "חסימת כתובת ה־IP‏ <kbd>192.0.2.5</kbd> לשלושה ימים עם הסיבה <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "חסימת המשתמש <kbd>Vandal</kbd> ללא הגבלת זמן עם הסיבה <kbd>Vandalism</kbd>, ומניעת יצירת חשבונות חדשים ושליחת דוא\"ל.",
        "apihelp-changeauthenticationdata-summary": "שינוי נתוני אימות עבור המשתמש הנוכחי.",
        "apihelp-compare-param-fromtitle": "כותרת ראשונה להשוואה.",
        "apihelp-compare-param-fromid": "מס׳ זיהוי של הדף הראשון להשוואה.",
        "apihelp-compare-param-fromrev": "גרסה ראשונה להשוואה.",
-       "apihelp-compare-param-frompst": "לעשות התמרה לפני שמירה ב־<var>fromtext</var>.",
-       "apihelp-compare-param-fromtext": "להשתמש בטקסט הזה במקום תוכן הגרסה שהוגדרה על־ידי <var dir=\"ltr\">fromtitle</var>, <var dir=\"ltr\">fromid</var> או <var dir=\"ltr\">fromrev</var>.",
-       "apihelp-compare-param-fromcontentmodel": "מודל התוכן של <var>fromtext</var>. אם זה לא סופק, ייעשה ניחוש על סמך פרמטרים אחרים.",
-       "apihelp-compare-param-fromcontentformat": "תסדיר הסדרת תוכן של <var>fromtext</var>.",
+       "apihelp-compare-param-frompst": "לעשות התמרה לפני שמירה ב־<var>romtext-&#x7B;slot}</var>.",
+       "apihelp-compare-param-fromslots": "דריסת תוכן הגרסה שצוינה ב־<var>fromtitle</var>, ב־<var>fromid</var>, או ב־<var>fromrev</var>.\n\nהפרמטר הזה מציין את המשבצות שישונו. יש להשתמש ב־<var>fromtext-&#x7B;slot}</var>, ב־<var>fromcontentmodel-&#x7B;slot}</var>, וב־<var>fromcontentformat-&#x7B;slot}</var> לציון תוכן עבור כל משבצת.",
+       "apihelp-compare-param-fromtext-{slot}": "הטקסט של המשבצת שמצוינת. אם זה מושמט, המשבצת מוּסרת מהגרסה.",
+       "apihelp-compare-param-fromsection-{slot}": "כאשר <var>fromtext-&#x7B;slot}</var> הוא התוכן של פסקה אחת, זהו מספר הפסקה. הוא ימוזג לתוך הגרסה שמצוינת ב־<var>fromtitle</var>, ב־<var>fromid</var>, או ב־<var>fromrev</var> כמו בעריכת פסקה.",
+       "apihelp-compare-param-fromcontentmodel-{slot}": "מודל התוכן של <var>fromtext-&#x7B;slot}</var>. אם זה לא סופק, זה ינוחש לפי הפרמטרים האחרים.",
+       "apihelp-compare-param-fromcontentformat-{slot}": "תסדיר להסדרת תוכן של <var>fromtext-&#x7B;slot}</var>.",
+       "apihelp-compare-param-fromtext": "יש לציין <kbd>fromslots=main</kbd> ולהשתמש ב־<var>fromtext-main</var> במקום זה.",
+       "apihelp-compare-param-fromcontentmodel": "יש לציין <kbd>fromslots=main</kbd> ולהשתמש ב־<var>fromcontentmodel-main</var> במקום זה.",
+       "apihelp-compare-param-fromcontentformat": "יש לציין <kbd>fromslots=main</kbd> ולהשתמש ב־<var>fromcontentformat-main</var> במקום זה.",
        "apihelp-compare-param-fromsection": "יש להשתמש רק בפסקה שצוינה בתוכן של הפרמטר 'from'.",
        "apihelp-compare-param-totitle": "כותרת שנייה להשוואה.",
        "apihelp-compare-param-toid": "מס׳ מזהה של הדף השני להשוואה.",
        "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-topst": "לעשות התמרה לפני שמירה ב־<var>totext</var>.",
-       "apihelp-compare-param-totext": "להשתמש בטקסט הזה במקום התוכן של הגרסה שהוגדר ב־<var dir=\"ltr\">totitle</var>, <var dir=\"ltr\">toid</var> or <var dir=\"ltr\">torev</var>.",
-       "apihelp-compare-param-tocontentmodel": "מודל התוכן של <var>totext</var>. אם זה לא סופק, ייעשה ניחוש על סמך פרמטרים אחרים.",
-       "apihelp-compare-param-tocontentformat": "תסדיר הסדרת תוכן של <var>fromtext</var>.",
+       "apihelp-compare-param-toslots": "דריסת תוכן הגרסה שצוינה ב־<var>totitle</var>, ב־<var>toid</var>, או ב־<var>torev</var>.\n\nהפרמטר הזה מציין את המשבצות שישונו. יש להשתמש ב־<var>totext-&#x7B;slot}</var>, ב־<var>tocontentmodel-&#x7B;slot}</var>, וב־<var>tocontentformat-&#x7B;slot}</var> לציון תוכן עבור כל משבצת.",
+       "apihelp-compare-param-totext-{slot}": "הטקסט של המשבצת שמצוינת. אם זה מושמט, המשבצת מוּסרת מהגרסה.",
+       "apihelp-compare-param-tosection-{slot}": "כאשר <var>totext-&#x7B;slot}</var> הוא התוכן של פסקה אחת, זהו מספר הפסקה. הוא ימוזג לתוך הגרסה שמצוינת ב־<var>totitle</var>, ב־<var>toid</var>, או ב־<var>torev</var> כמו בעריכת פסקה.",
+       "apihelp-compare-param-tocontentmodel-{slot}": "מודל התוכן של <var>totext-&#x7B;slot}</var>. אם זה לא סופק, זה ינוחש לפי הפרמטרים האחרים.",
+       "apihelp-compare-param-tocontentformat-{slot}": "תסדיר להסדרת תוכן של <var>totext-&#x7B;slot}</var>.",
+       "apihelp-compare-param-totext": "יש לציין <kbd>toslots=main</kbd> ולהשתמש ב־<var>totext-main</var> במקום זה.",
+       "apihelp-compare-param-tocontentmodel": "יש לציין <kbd>toslots=main</kbd> ולהשתמש ב־<var>tocontentmodel-main</var> במקום זה.",
+       "apihelp-compare-param-tocontentformat": "יש לציין <kbd>toslots=main</kbd> ולהשתמש ב־<var>tocontentformat-main</var> במקום זה.",
        "apihelp-compare-param-tosection": "יש להשתמש רק בפסקה שצוינה בתוכן של הפרמטר 'to'.",
        "apihelp-compare-param-prop": "אילו פריטי מידע לקבל.",
        "apihelp-compare-paramvalue-prop-diff": "ה־HTML של ההשוואה.",
        "apihelp-compare-paramvalue-prop-comment": "התקציר על גרסאות ה־\"from\" וה־\"to\".",
        "apihelp-compare-paramvalue-prop-parsedcomment": "התקציר המפוענח על גרסאות ה־\"from\" וה־\"to\".",
        "apihelp-compare-paramvalue-prop-size": "הגודל של גרסאות ה־\"from\" וה־\"to\".",
+       "apihelp-compare-param-slots": "החזרת השוואות פרטניו למשבצות האלה, ולא השוואה אחת משולבת לכל המשבצות.",
        "apihelp-compare-example-1": "יצירת תיעוד שינוי בין גרסה 1 ל־2.",
        "apihelp-createaccount-summary": "יצירת חשבון משתמש חדש.",
        "apihelp-createaccount-param-preservestate": "אם <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> החזיר true עבור <samp>hasprimarypreservedstate</samp>, בקשות שמסומנות בתור <samp>primary-required</samp> אמורות להיות מושמטות. אם מוחזר ערך לא ריק ל־<samp>preservedusername</samp>, שם המשתמש הזה ישמש לפרמטר <var>username</var>.",
        "apihelp-query+blocks-paramvalue-prop-reason": "הוספת הסיבה שניתנה לחסימה.",
        "apihelp-query+blocks-paramvalue-prop-range": "הוספת טווח כתובות ה־IP שהחסימה משפיעה עליהן.",
        "apihelp-query+blocks-paramvalue-prop-flags": "מתייג את ההחרמה (autoblock‏, anononly, וכו'.).",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "הוספת הגבלות החסימה החלקית אם החסימה אינה לכל האתר.",
        "apihelp-query+blocks-param-show": "להציג רק פריטים שמתאימים לאמות המידה האלו.\nלמשל, כדי לראות רק חסימות ללא לצמיתות על כתובות IP יש להגדיר <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+blocks-example-simple": "רשימת חסימות.",
        "apihelp-query+blocks-example-users": "רשימת חסימות של המשתמשים <kbd>Alice</kbd> ו־<kbd>Bob</kbd>.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "חותם־זמן של הודעת רשימת מעקב של כל דף.",
        "apihelp-query+info-paramvalue-prop-subjectid": "מזהה הדף של הדף העיקרי של כל דף שיחה.",
        "apihelp-query+info-paramvalue-prop-url": "נותן URL מלא, URL לעריכה ו־URL קנוני לכל דף.",
-       "apihelp-query+info-paramvalue-prop-readable": "×\94×\90×\9d ×\94×\9eשת×\9eש ×\99×\9b×\95×\9c ×\9c×\94צ×\99×\92 ×\93×£ זה.",
+       "apihelp-query+info-paramvalue-prop-readable": "×\94×\90×\9d ×\94×\9eשת×\9eש ×\99×\9b×\95×\9c ×\9cקר×\95×\90 ×\90ת ×\94×\93×£ ×\94×\96×\94. ×\99ש ×\9c×\94שת×\9eש ×\91Ö¾<kbd>intestactions=read</kbd> ×\91×\9eק×\95×\9d זה.",
        "apihelp-query+info-paramvalue-prop-preload": "נותן את הטקסט שמוחזר על־ידי EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "נותן את האופן שבה שם הדף באמת מוצג.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "כותרת התצוגה בכל הגרסאות של שפת התוכן של האתר.",
        "apihelp-query+info-param-testactions": "בדיקה האם המשתמש הנוכחי יכול לבצע פעולות מסוימות על הדף.",
+       "apihelp-query+info-param-testactionsdetail": "רמת פירוט של <var>$1testactions</var>. יש להשתמש בפרמטרים <var>errorformat</var> ו־<var>errorlang</var> של [[Special:ApiHelp/main|המודול הראשי]] כדי לשלוט בתסדיר את ההודעות המוחזרות.",
+       "apihelp-query+info-paramvalue-testactionsdetail-boolean": "החזרת ערך בוליאני עבור כל פעולה.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "החזרת הודעות שמתארות למה הפעולה אינה מותרת, או מערך ריק אם היא מותרת.",
+       "apihelp-query+info-paramvalue-testactionsdetail-quick": "כמו <kbd>full</kbd>, אבל בלי בדיקות יקרות.",
        "apihelp-query+info-param-token": "להשתמש ב־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]] במקום.",
        "apihelp-query+info-example-simple": "קבלת מידע על הדף <kbd>Main Page</kbd>",
        "apihelp-query+info-example-protection": "קבלת מידע כללי ומידע על הגנה של הדף <kbd>Main Page</kbd>.",
        "apihelp-json-param-callback": "אם זה צוין, עוטף את הפלט לתוך קריאת פונקציה נתונה. למען הבטיחות, כל הנתונים הייחודיים למשתמש יוגבלו.",
        "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-json-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני.\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
        "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-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-xml-summary": "לפלוט נתונים בתסדיר XML.",
        "apierror-assertnameduserfailed": "הבדיקה שהמשתמש הוא \"$1\" נכשלה.",
        "apierror-assertuserfailed": "הבדיקה שהמשתמש נכנס לחשבון נכשלה.",
        "apierror-autoblocked": "כתובת ה־IP שלך נחסמה אוטומטית, כי היא שימשה משתמש חסום.",
+       "apierror-bad-badfilecontexttitle": "כותרת בלתי־תקינה בפרמטר <var>$1badfilecontexttitle</var>.",
        "apierror-badconfig-resulttoosmall": "הערך של <code dir=\"ltr\">$wgAPIMaxResultSize</code> בוויקי הזה קטן מלהחזיק מידע בסיסי על תוצאה.",
        "apierror-badcontinue": "פרמטר continue בלתי־תקין. יש להעביר את הערך המקורי שהחזירה השאילתה הקודמת.",
        "apierror-baddiff": "לא ניתן לאחזר את ההשוואה. גרסה אחת לא קיימת או ששתיהן לא קיימות, או שאין לך הרשאה להציג אותן.",
        "apierror-bad-watchlist-token": "סופק אסימון רשימת מעקב בלתי־תקין. נא להשתמש באסימון תקין ב־[[Special:Preferences]].",
        "apierror-blockedfrommail": "נחסמת משליחת דוא״ל.",
        "apierror-blocked": "נחסמת מעריכה.",
+       "apierror-blocked-partial": "נחסמת מעריכת הדף הזה.",
        "apierror-botsnotsupported": "הממשק הזה לא נתמך עבור בוטים.",
        "apierror-cannot-async-upload-file": "הפרמטרים  <var>async</var> ו־<var>file</var> אינם יכולים להיות משולבים. אם ברצונך לבצע עיבוד אסינכרוני של הקובץ המועלה שלך, יש להעלות אותו תחילה לסליק (באמצעות הפרמטר <var>stash</var>) ואז לפרסם את הקובץ המוסלק באופן אסינכרוני (באמצעות <var>filekey</var> ו־<var>async</var>).",
        "apierror-cannotreauthenticate": "הפעולה הזאת אינה זמינה, כי הזהות שלך לא יכולה להיות מאומתת.",
        "apierror-changeauth-norequest": "יצירת בקשת השינוי נכשלה.",
        "apierror-chunk-too-small": "גודל הפלח המזערי הוא {{PLURAL:$1|בית אחד|$1 בתים}} בשביל פלחים לא סופיים.",
        "apierror-cidrtoobroad": "טווחי CIDR של $1 שרחבים יותר מ־/$2 אינם קבילים.",
+       "apierror-compare-maintextrequired": "הפרמטר <var>$1text-main</var> נדרש כאשר <var>$1slots</var> מכיל <kbd>main</kbd> (לא ניתן למחוק את המשבצת הראשית).",
        "apierror-compare-no-title": "לא ניתן לעשות התמרה לפני שמירה ללא כותרת. נא לנסות לציין <var>fromtitle</var> או <var>totitle</var>.",
        "apierror-compare-nosuchfromsection": "הפסקה $1 אינה קיימת בתוכן של 'from'.",
        "apierror-compare-nosuchtosection": "הפסקה $1 אינה קיימת בתוכן של 'to'.",
+       "apierror-compare-nofromrevision": "אין גרסת \"from\". יש לציין <var>fromrev</var>‏, <var>fromtitle</var>, או <var>fromid</var>.",
+       "apierror-compare-notext": "הפרמטר <var>$1</var> אינו יכול לשמש ללא <var>$2</var>.",
+       "apierror-compare-notorevision": "אין גרסת \"to\". יש לציין <var>torev</var>‏, <var>totitle</var>, או <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "לא ניתן להשתמש ב־<kbd>torelative=$1</kbd> יחסית לגרסה מחוקה.",
        "apierror-compare-relative-to-nothing": "אין גרסת \"from\" עבור <var>torelative</var> שתהיה יחסית.",
        "apierror-contentserializationexception": "הסדרת התוכן נכשלה: $1",
        "apierror-contenttoobig": "התוכן שסיפקת חורג מגודל הערך המרבי של {{PLURAL:$1|קילובייט אחד|$1 קילובייטים}}.",
        "apierror-invalidexpiry": "זמן תפוגה בלתי־תקין \"$1\".",
        "apierror-invalid-file-key": "לא מפתח קובץ תקין.",
        "apierror-invalidlang": "קוד שפה בלתי־תקין לפרמטר <var>$1</var>.",
+       "apierror-invalidmethod": "שיטת HTTP בלתי־תקינה. נא לשקול להשתמש ב־GET או ב־POST.",
        "apierror-invalidoldimage": "הפרמטר <var>oldimage</var> נשלח בתסדיר בלתי־תקין.",
        "apierror-invalidparammix-cannotusewith": "הפרמטר <kbd>$1</kbd> אינו יכול לשמש עם <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "הפרמטר <kbd>$1</kbd> יכול לשמש רק עם <kbd>$2</kbd>.",
        "apierror-mimesearchdisabled": "חיפוש MIME כבוי במצב קמצן.",
        "apierror-missingcontent-pageid": "תוכן חסר עבור מזהה הדף $1.",
        "apierror-missingcontent-revid": "תוכן חסר עבור מזהה הגרסה $1.",
+       "apierror-missingcontent-revid-role": "תוכן חסר כבור מזהה גרסה $1 לתפקיד $2.",
        "apierror-missingparam-at-least-one-of": "דרוש {{PLURAL:$2|הפרמטר|לפחות אחד מהפרמטרים}} $1.",
        "apierror-missingparam-one-of": "דרוש {{PLURAL:$2|הפרמטר|אחד מהפרמטרים}} $1.",
        "apierror-missingparam": "הפרמטר <var>$1</var> צריך להיות מוגדר.",
        "apiwarn-badurlparam": "לא היה אפשר לפענח את <var>$1urlparam</var> עבור $2. משתמשים רק ב־width ו־height.",
        "apiwarn-badutf8": "הערך שהועבר ל־<var>$1</var> מכיל נתונים בלתי־תקינים או בלתי־מנורמלים. נתונים טקסט אמורים להיות תקינים, מנורמלי NFC וללא תווי בקרה C0 למעט <span dir=\"ltr\">HT (\\t)</span>&rlm;, <span dir=\"ltr\">LF (\\n)</span>&rlm; ו־<span dir=\"ltr\">CR (\\r)</span>.",
        "apiwarn-checktoken-percentencoding": "נא לבדוק שסימנים כמו \"+\" באסימון מקודדים עם אחוזים בצורה נכונה ב־URL.",
+       "apiwarn-compare-no-next": "הגרסה $2 היא הגרסה האחרונה של $1, אין גרסה עבור <kbd>torelative=next</kbd> להשוואה.",
+       "apiwarn-compare-no-prev": "הגרסה $2 היא הגרסה המוקדמת ביותר של $1, אין גרסה עבור <kbd>torelative=prev</kbd> להשוואה.",
        "apiwarn-compare-nocontentmodel": "לא היה אפשר לקבוע את מודל התוכן, נניח שזה $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> הוצהר בתור מיושן. נא להשתמש ב־ <kbd>prop=deletedrevisions</kbd> או ב־<kbd>list=alldeletedrevisions</kbd> במקום זה.",
        "apiwarn-deprecation-httpsexpected": "משמש HTTP כשהיה צפוי HTTPS.",
index 1a2a744..56826b4 100644 (file)
@@ -81,7 +81,7 @@
        "apihelp-edit-param-tags": "Ознаки за измена што се однесуваат на преработката.",
        "apihelp-edit-param-minor": "Ситно уредување.",
        "apihelp-edit-param-notminor": "Неситно уредување.",
-       "apihelp-edit-param-bot": "Означи го уредувањево како ботовско.",
+       "apihelp-edit-param-bot": "Означи го уредувањето како ботовско.",
        "apihelp-edit-param-basetimestamp": "Датум и време на преработката на базата, кои се користат за утврдување на спротиставености во уредувањето. Може да се добие преку [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
        "apihelp-edit-param-starttimestamp": "Датум и време кога сте почнало уредувањето, кои се користат за утврдување на спротиставености во уредувањата. Соодветната вредност се добива користејќи <var>[[Special:ApiHelp/main|curtimestamp]]</var> кога ќе почнете со уредување (на пр. кога ќе се вчита содржината што ќе ја уредувате).",
        "apihelp-edit-param-recreate": "Занемари ги грешките што се појавуваат во врска со страницата што е избришана во меѓувреме.",
index 53cc928..3740243 100644 (file)
        "apihelp-query+iwbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Dodaje prefiks interwiki.",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Dodaje tytuł interwiki.",
-       "apihelp-query+iwlinks-summary": "Wyświetla wszystkie liki interwiki z danych stron.",
+       "apihelp-query+iwlinks-summary": "Wyświetla wszystkie linki interwiki z danych stron.",
        "apihelp-query+iwlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
        "apihelp-query+iwlinks-param-limit": "Łączna liczba linków interwiki do zwrócenia.",
        "apihelp-query+langbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
index b3c26ce..1af3ce9 100644 (file)
        "apiwarn-badurlparam": "Não foi possível analisar <var>$1urlparam</var> por $2. Usando apenas largura e altura.",
        "apiwarn-badutf8": "O valor passado para <var>$1</var> contém dados inválidos ou não normalizados. Os dados textuais devem ser válidos, NFC-normalizado Unicode sem caracteres de controle C0 diferentes de HT (\\t), LF (\\n) e CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Verificar se os símbolos, como \"+\" no token, estão codificados corretamente na URL.",
+       "apiwarn-compare-no-next": "A revisão $2 é a revisão mais recente de $1, não há nenhuma revisão seguinte para comparar com <kbd>torelative=next</kbd>.",
+       "apiwarn-compare-no-prev": "A revisão $2 é a revisão mais antiga de $1, não há nenhuma revisão anterior para comparar com <kbd>torelative=prev</kbd>.",
        "apiwarn-compare-nocontentmodel": "Nenhum modelo de conteúdo pode ser determinado, assumindo $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> foi depreciado. Por favor, use <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd> em vez.",
        "apiwarn-deprecation-httpsexpected": "HTTP usado quando o HTTPS era esperado.",
index a609992..0dbff88 100644 (file)
        "apiwarn-badurlparam": "Não foi possível analisar <var>$1urlparam</var> para $2. Serão utilizadas somente a largura e a altura.",
        "apiwarn-badutf8": "O valor passado para <var>$1</var> contém dados inválidos ou não normalizados. Os dados textuais devem estar em formato Unicode válido, normalizado em NFC, sem caracteres de controlo C0 exceto HT (\\t), LF (\\n) e CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Verifique que símbolos como \"+\" na chave estão devidamente codificados com percentagem no URL.",
+       "apiwarn-compare-no-next": "A revisão $2 é a revisão mais recente de $1, não há nenhuma revisão seguinte para comparar com <kbd>torelative=next</kbd>.",
+       "apiwarn-compare-no-prev": "A revisão $2 é a revisão mais antiga de $1, não há nenhuma revisão anterior para comparar com <kbd>torelative=prev</kbd>.",
        "apiwarn-compare-nocontentmodel": "Não foi possível determinar nenhum modelo de conteúdo; será assumido $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> foi descontinuado. Em substituição, use <kbd>prop=deletedrevisions</kbd> ou <kbd>list=alldeletedrevisions</kbd>, por favor.",
        "apiwarn-deprecation-httpsexpected": "Foi usado HTTP quando era esperado HTTPS.",
index b33f44a..6437adf 100644 (file)
        "apiwarn-badurlparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Image title.",
        "apiwarn-badutf8": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n{{doc-important|Do not translate \"\\t\", \"\\n\", and \"\\r\"}}",
        "apiwarn-checktoken-percentencoding": "{{doc-apierror}}",
+       "apiwarn-compare-no-next": "{{doc-apierror}}\n\nParameters:\n* $1 - Title of the page.\n* $2 - Revision ID.",
+       "apiwarn-compare-no-prev": "{{doc-apierror}}\n\nParameters:\n* $1 - Title of the page.\n* $2 - Revision ID.",
        "apiwarn-compare-nocontentmodel": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model being assumed.",
        "apiwarn-deprecation-deletedrevs": "{{doc-apierror}}",
        "apiwarn-deprecation-httpsexpected": "{{doc-apierror}}",
index a516888..fe492c9 100644 (file)
        "apihelp-edit-summary": "建立與編輯頁面。",
        "apihelp-edit-param-title": "您欲編輯的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
        "apihelp-edit-param-pageid": "您欲編輯頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
-       "apihelp-edit-param-section": "章節編號。 <kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
+       "apihelp-edit-param-section": "章節編號。<kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
        "apihelp-edit-param-sectiontitle": "新章節的標題。",
        "apihelp-edit-param-text": "頁面內容。",
        "apihelp-edit-param-summary": "編輯摘要。 當未設定 $1section=new 與 $1sectiontitle 時也會當做章節標題。",
        "apihelp-expandtemplates-param-includecomments": "輸出裡是否包含 HTML 註解。",
        "apihelp-expandtemplates-param-generatexml": "產生 XML 解析樹狀(以 $1prop=parsetree 取代)。",
        "apihelp-expandtemplates-example-simple": "展開 wiki 文字<kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>。",
-       "apihelp-feedcontributions-summary": "回傳使用者貢獻 Feed。",
-       "apihelp-feedcontributions-param-feedformat": "Feed 的格式。",
+       "apihelp-feedcontributions-summary": "回傳使用者貢獻摘要。",
+       "apihelp-feedcontributions-param-feedformat": "摘要的格式。",
        "apihelp-feedcontributions-param-user": "要取得哪些使用者的貢獻。",
        "apihelp-feedcontributions-param-year": "起始年份(更早之前)。",
        "apihelp-feedcontributions-param-month": "起始月份(更早之前)。",
        "apihelp-feedcontributions-param-hideminor": "隱藏小編輯。",
        "apihelp-feedcontributions-param-showsizediff": "顯示修訂版本之間的差異大小。",
        "apihelp-feedcontributions-example-simple": "返回使用者<kbd>Example</kbd>的貢獻。",
-       "apihelp-feedrecentchanges-summary": "返回最近變更摘要。",
+       "apihelp-feedrecentchanges-summary": "返回近期變更摘要。",
        "apihelp-feedrecentchanges-param-feedformat": "摘要格式。",
        "apihelp-feedrecentchanges-param-namespace": "用於限制結果的命名空間。",
        "apihelp-feedrecentchanges-param-invert": "除所選定者外的所有命名空間。",
        "apihelp-feedrecentchanges-param-target": "僅顯示從該頁面所連結頁面上的變更。",
        "apihelp-feedrecentchanges-example-simple": "顯示近期變更。",
        "apihelp-feedrecentchanges-example-30days": "顯示近期30天內的變動",
-       "apihelp-feedwatchlist-summary": "返回監視清單 feed。",
-       "apihelp-feedwatchlist-param-feedformat": "Feed 的格式。",
+       "apihelp-feedwatchlist-summary": "返回監視清單摘要。",
+       "apihelp-feedwatchlist-param-feedformat": "摘要的格式。",
        "apihelp-feedwatchlist-param-hours": "列出在幾小時內的頁面變動。",
        "apihelp-feedwatchlist-param-linktosections": "若可以的話,直接連結至更改過的段落。",
+       "apihelp-feedwatchlist-example-default": "顯示監視清單摘要。",
        "apihelp-feedwatchlist-example-all6hrs": "顯示過去 6 小時在監視頁面的所有更改。",
        "apihelp-filerevert-summary": "回退檔案至舊的版本。",
        "apihelp-filerevert-param-filename": "目標檔案名稱,不需包含「File:」這樣的前綴字元。",
        "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
        "apihelp-parse-param-disableeditsection": "從解析輸出內容省略編輯段落連結。",
        "apihelp-parse-param-disabletidy": "不要在解析輸出裡執行 HTML 內容清理(例如使用 tidy 軟體工具)",
+       "apihelp-parse-param-disablestylededuplication": "不要在解析結果去除重複的行內樣式表。",
        "apihelp-parse-param-generatexml": "產生 XML 解析樹狀(需要被 <kbd>$2prop=parsetree</kbd> 給取代的 <code>$1</code> 內容模組)。",
        "apihelp-parse-param-preview": "在預覽模式下解析。",
+       "apihelp-parse-param-sectionpreview": "在段落預覽模式下解析(要同時啟用預覽模式)。",
        "apihelp-parse-param-disabletoc": "在輸出裡忽略目錄。",
+       "apihelp-parse-param-useskin": "套用所選的外觀至解析輸出。可能會影響以下參數:<kbd>langlinks</kbd>、<kbd>headitems</kbd>、<kbd>modules</kbd>、<kbd>jsconfigvars</kbd>、<kbd>indicators</kbd>。",
        "apihelp-parse-example-page": "解析頁面。",
        "apihelp-parse-example-text": "解析 wikitext。",
        "apihelp-parse-example-texttitle": "解析 wikitext,指定頁面標題。",
        "apihelp-patrol-param-rcid": "要巡查的最近變更 ID。",
        "apihelp-patrol-param-revid": "要巡查的修訂 ID。",
        "apihelp-patrol-param-tags": "在巡查日誌裡更改套用到項目的標籤。",
-       "apihelp-patrol-example-rcid": "巡查一次最近變更。",
+       "apihelp-patrol-example-rcid": "巡查一次近期變更。",
        "apihelp-patrol-example-revid": "巡查一個修訂。",
        "apihelp-protect-summary": "變更頁面的保護層級。",
        "apihelp-protect-param-title": "要(解除)保護頁面的標題。 不能與 $1pageid 一起使用。",
        "apihelp-query+allcategories-param-prop": "要取得的屬性。",
        "apihelp-query+allcategories-paramvalue-prop-size": "在分類裡添加頁面數。",
        "apihelp-query+allcategories-paramvalue-prop-hidden": "標記由 <code>_&#95;HIDDENCAT_&#95;</code> 隱藏的分類。",
+       "apihelp-query+allcategories-example-size": "列出分類以及各包含多少頁面的資訊。",
+       "apihelp-query+allcategories-example-generator": "替以 <kbd>List</kbd> 開頭的分類索取該分類頁面本身的資訊。",
        "apihelp-query+alldeletedrevisions-summary": "依使用者或所在命名空間來列出所有已刪除的修訂。",
        "apihelp-query+alldeletedrevisions-paraminfo-useronly": "僅與 <var>$3user</var> 一同使用。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能與 <var>$3user</var> 一同使用。",
        "apihelp-query+allusers-param-excludegroup": "排除指定群組中的使用者",
        "apihelp-query+allusers-param-prop": "要包含的資訊部份:",
        "apihelp-query+allusers-paramvalue-prop-blockinfo": "添加有關使用者目前封鎖的資訊。",
+       "apihelp-query+allusers-paramvalue-prop-groups": "列出使用者所在的群組。這會使用到較多伺服器資源,並且可能會回傳少於限制條件的結果。",
        "apihelp-query+allusers-paramvalue-prop-implicitgroups": "列出使用者自動列入的所有群組。",
        "apihelp-query+allusers-paramvalue-prop-rights": "列出使用者所擁有的權限。",
        "apihelp-query+allusers-paramvalue-prop-editcount": "添加使用者的編輯次數。",
        "apihelp-query+allusers-paramvalue-prop-registration": "若可能的話,添加當使用者註冊時的時間戳記(可能為空白)。",
+       "apihelp-query+allusers-paramvalue-prop-centralids": "替使用者添加中心 ID 與附加狀態。",
        "apihelp-query+allusers-param-limit": "要回傳的使用者名稱總數。",
        "apihelp-query+allusers-param-witheditsonly": "僅列出有做過編輯的使用者。",
        "apihelp-query+allusers-param-activeusers": "僅列出在最近 $1 {{PLURAL:$1|天|天}}裡活躍的使用者。",
        "apihelp-query+categorymembers-paramvalue-prop-ids": "添加頁面 ID。",
        "apihelp-query+categorymembers-paramvalue-prop-title": "添加標題與頁面的命名空間 ID。",
        "apihelp-query+categorymembers-paramvalue-prop-sortkey": "添加使用來在分類裡排序的排序鍵(十六進位字串)。",
+       "apihelp-query+categorymembers-paramvalue-prop-type": "添加頁面已被分類的類型(<samp>page</samp>、<samp>subcat</samp> 或 <samp>file</samp>)。",
        "apihelp-query+categorymembers-paramvalue-prop-timestamp": "添加在頁面有被包含時的時間戳記。",
+       "apihelp-query+categorymembers-param-namespace": "僅包含在這些命名空間的頁面。請注意可能會使用 <kbd>$1type=subcat</kbd> 或 <kbd>$1type=file</kbd>,而非 <kbd>$1namespace=14</kbd> 或 <kbd>6</kbd>。",
        "apihelp-query+categorymembers-param-type": "包含的分類成員類型。當有設定 <kbd>$1sort=timestamp</kbd> 時忽略。",
        "apihelp-query+categorymembers-param-limit": "回傳的頁面數量上限。",
        "apihelp-query+categorymembers-param-sort": "作為排序順序的屬性。",
        "apihelp-query+categorymembers-param-endsortkey": "請改用 $1endhexsortkey。",
        "apihelp-query+categorymembers-example-simple": "取得在 <kbd>Category:Physics</kbd> 裡前 10 項的頁面。",
        "apihelp-query+categorymembers-example-generator": "取得在 <kbd>Category:Physics</kbd> 裡前 10 個頁面的頁面資訊。",
+       "apihelp-query+contributors-summary": "取得頁面上登入貢獻者以及匿名貢獻者數量的清單。",
        "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
        "apihelp-query+contributors-example-simple": "顯示頁面 <kbd>Main Page</kbd> 的貢獻者。",
        "apihelp-query+deletedrevisions-summary": "取得已刪除修訂的資訊。",
        "apihelp-query+deletedrevs-param-excludeuser": "不要列出由該使用者作出的修訂。",
        "apihelp-query+deletedrevs-param-namespace": "僅列出此命名空間的頁面。",
        "apihelp-query+deletedrevs-param-limit": "修訂能列出的最大數量。",
+       "apihelp-query+deletedrevs-example-mode1": "以帶有內容(模式 1)列出頁面 <kbd>Main Page</kbd> 與 <kbd>Talk:Main Page</kbd> 的最新刪除修訂。",
        "apihelp-query+deletedrevs-example-mode2": "列出最近前 50 個已刪除掉由 <kbd>Bob</kbd> 所做出的貢獻(模式 2)。",
        "apihelp-query+deletedrevs-example-mode3-main": "列出在主命名空間的前 50 個已刪除修訂(模式 3)。",
        "apihelp-query+deletedrevs-example-mode3-talk": "列出在{{ns:talk}}命名空間的前 50 個已刪除頁面(模式 3)。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+extlinks-param-protocol": "URL 協定。若為空且有設定 <var>$1query</var>,會是 <kbd>http</kbd> 協定。將此與 <var>$1query</var> 一同留空會列出所有外部連結。",
        "apihelp-query+extlinks-param-query": "不以協議來搜尋字串,對於檢查某頁面是否包含某個外部 URL 時很有用。",
+       "apihelp-query+extlinks-param-expandurl": "以規範協議的擴充協議關聯 URL。",
        "apihelp-query+extlinks-example-simple": "取得 <kbd>Main Page</kbd> 的外部連結清單。",
        "apihelp-query+exturlusage-summary": "列舉包含指定 URL 的頁面。",
        "apihelp-query+exturlusage-param-prop": "要包含的資訊部份:",
        "apihelp-query+exturlusage-param-query": "不帶協定的搜尋字串。請查看 [[Special:LinkSearch]]。請留空以列出所有外部連結。",
        "apihelp-query+exturlusage-param-namespace": "要列舉的頁面命名空間。",
        "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
+       "apihelp-query+exturlusage-param-expandurl": "以規範協議的擴充協議關聯 URL。",
        "apihelp-query+exturlusage-example-simple": "顯示連結至 <kbd>https://www.mediawiki.org</kbd> 的頁面。",
        "apihelp-query+filearchive-summary": "依序列舉所有已刪除檔案。",
        "apihelp-query+filearchive-param-from": "起始列舉的圖片標題。",
        "apihelp-query+filearchive-paramvalue-prop-timestamp": "添加上傳版本的時間戳記。",
        "apihelp-query+filearchive-paramvalue-prop-user": "添加上傳該圖片版本的使用者。",
        "apihelp-query+filearchive-paramvalue-prop-size": "添加圖片大小(位元組)、高度、寬度、頁面計數(若可套用的話)。",
+       "apihelp-query+filearchive-paramvalue-prop-dimensions": "大小的別名。",
        "apihelp-query+filearchive-paramvalue-prop-description": "添加圖片版本的描述。",
        "apihelp-query+filearchive-paramvalue-prop-parseddescription": "解析版本的描述。",
        "apihelp-query+filearchive-paramvalue-prop-mime": "添加圖片的 MIME。",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "添加檔案的規範標題。",
        "apihelp-query+imageinfo-paramvalue-prop-url": "提供檔案與描述頁面的 URL。",
        "apihelp-query+imageinfo-paramvalue-prop-size": "添加以位元組為單位的檔案大小、高度、寬度、頁面計數(若可套用的話)。",
+       "apihelp-query+imageinfo-paramvalue-prop-dimensions": "大小的別名。",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "替檔案添加 SHA-1 雜湊值。",
        "apihelp-query+imageinfo-paramvalue-prop-mime": "替檔案添加 MIME 類型。",
        "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "添加圖片縮圖的 MIME 類型(需要 url 與參數 $1urlwidth)。",
        "apihelp-query+random-param-filterredir": "如何過濾重新導向。",
        "apihelp-query+random-example-simple": "從主命名空間回傳兩個隨機頁面。",
        "apihelp-query+random-example-generator": "從主命名空間回傳兩個隨機頁面的相關頁面資訊。",
-       "apihelp-query+recentchanges-summary": "列舉出最近變更。",
+       "apihelp-query+recentchanges-summary": "列舉出近期變更。",
        "apihelp-query+recentchanges-param-start": "起始列舉的時間戳記。",
        "apihelp-query+recentchanges-param-end": "結束列舉的時間戳記。",
        "apihelp-query+recentchanges-param-namespace": "篩選僅為這些命名空間的更改。",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "添加編輯的標籤。",
        "apihelp-query+recentchanges-paramvalue-prop-timestamp": "添加編輯的時間戳記。",
        "apihelp-query+recentchanges-paramvalue-prop-title": "添加編輯的頁面標題。",
-       "apihelp-query+recentchanges-paramvalue-prop-ids": "添加頁面 ID、最近更改 ID 以及新舊修訂 ID。",
+       "apihelp-query+recentchanges-paramvalue-prop-ids": "添加頁面 ID、近期變更 ID 以及新舊修訂 ID。",
        "apihelp-query+recentchanges-paramvalue-prop-sizes": "添加新舊頁面長度(位元組)。",
        "apihelp-query+recentchanges-paramvalue-prop-redirect": "若頁面為重新導向則標記編輯。",
        "apihelp-query+recentchanges-paramvalue-prop-patrolled": "標記可巡查編輯為已巡查或未巡查。",
        "apihelp-query+recentchanges-param-type": "要顯示的更改類型。",
        "apihelp-query+recentchanges-param-toponly": "僅列出最新修訂的更改。",
        "apihelp-query+recentchanges-param-title": "篩選與這些頁面關聯的項目。",
-       "apihelp-query+recentchanges-example-simple": "最近變更清單",
+       "apihelp-query+recentchanges-example-simple": "近期變更清單",
        "apihelp-query+recentchanges-example-generator": "取得有關近期尚未巡查更改的頁面資訊。",
        "apihelp-query+redirects-summary": "回傳連結至指定頁面的所有重新導向。",
        "apihelp-query+redirects-param-prop": "要取得的屬性。",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "修訂的 SHA-1(base 16)。",
        "apihelp-query+revisions+base-paramvalue-prop-slotsha1": "各修訂間隔的 SHA-1(base 16)。",
        "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "各修訂間隔的內容模組 ID。",
+       "apihelp-query+revisions+base-paramvalue-prop-comment": "由使用者對於修訂所做出的註釋。",
+       "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "由使用者對於修訂所解析的註釋。",
        "apihelp-query+revisions+base-paramvalue-prop-content": "各修訂間隔的內容。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "修訂標籤。",
        "apihelp-query+revisions+base-paramvalue-prop-parsetree": "請改用 <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> 或 <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>。修訂內容的 XML 解析樹狀(需要內容模組 <code>$1</code>)。",
        "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "已註冊命名空間別名清單。",
        "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特殊頁面別名清單。",
        "apihelp-query+siteinfo-paramvalue-prop-magicwords": "魔術字及其別名清單。",
+       "apihelp-query+siteinfo-paramvalue-prop-statistics": "回傳網站統計。",
        "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "回傳內部 wiki 對應(篩選可選用,也可透過 <var>$1inlanguagecode</var> 來選用本地化)。",
        "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "回傳有最高複製延遲的資料庫伺服器。",
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "回傳使用者群組以及所分配權限。",
        "apihelp-query+templates-summary": "回傳指定頁面中所有引用的頁面。",
        "apihelp-query+templates-param-namespace": "僅顯示在這些命名空間的模板。",
        "apihelp-query+templates-param-limit": "要回傳的模板數量。",
+       "apihelp-query+templates-param-templates": "僅列出這些模板。在檢查某一頁面是否擁有某一模板時很有用。",
        "apihelp-query+templates-param-dir": "列出時所採用的方向。",
        "apihelp-query+templates-example-simple": "取得在頁面 <kbd>Main Page</kbd> 使用到的模坂。",
        "apihelp-query+templates-example-generator": "取得使用在 <kbd>Main Page</kbd> 的模版頁面相關資訊。",
        "apihelp-query+usercontribs-summary": "按使用者來取得所有編輯。",
        "apihelp-query+usercontribs-param-limit": "回傳的貢獻數量上限。",
        "apihelp-query+usercontribs-param-user": "要檢索貢獻的使用者。不能與 <var>$1userids</var> 或 <var>$1userprefix</var> 一起使用。",
+       "apihelp-query+usercontribs-param-userids": "要檢索貢獻的使用者 ID。不能與 <var>$1user</var> 或 <var>$1userprefix</var> 一起使用。",
        "apihelp-query+usercontribs-param-namespace": "僅列出這些命名空間的貢獻。",
        "apihelp-query+usercontribs-param-prop": "包含的額外資訊部份:",
        "apihelp-query+usercontribs-paramvalue-prop-ids": "添加頁面 ID 與修訂 ID。",
        "apihelp-query+watchlist-paramvalue-type-categorize": "分類成員更改。",
        "apihelp-query+watchlist-param-owner": "與 $1token 一起使用以存取不同使用者的監視清單。",
        "apihelp-query+watchlist-param-token": "允許存取其他使用者監視清單的安全權杖(可在使用者的[[Special:Preferences#mw-prefsection-watchlist|偏好設定]]找到)。",
+       "apihelp-query+watchlist-example-simple": "列出在目前使用者監視清單裡近期變更頁面的最新修訂。",
+       "apihelp-query+watchlist-example-props": "索取在目前使用者監視清單裡近期變更頁面的最新修訂額外資訊。",
+       "apihelp-query+watchlist-example-allrev": "索取在目前使用者監視清單裡所有近期變更頁面的資訊。",
        "apihelp-query+watchlist-example-generator": "索取在目前使用者監視清單裡近期變更頁面的頁面資訊。",
+       "apihelp-query+watchlist-example-generator-rev": "索取在目前使用者監視清單裡近期變更頁面的修訂資訊。",
        "apihelp-query+watchlistraw-summary": "列出在目前使用者的監視清單裡頭所有頁面。",
        "apihelp-query+watchlistraw-param-namespace": "僅列出在指定命名空間的頁面。",
        "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
        "apihelp-setpagelanguage-extended-description-disabled": "您不被允許在此 wiki 上變更頁面的語言。\n\n請啟用 <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> 來進行此操作。",
        "apihelp-setpagelanguage-param-title": "您所想要更改語言的頁面之標題。不能與 <var>$1pageid</var> 一起使用。",
        "apihelp-setpagelanguage-param-pageid": "您所想要更改語言的頁面之頁面 ID。不能與 <var>$1title</var> 一起使用。",
+       "apihelp-setpagelanguage-param-lang": "要更改頁面的語言之代碼。使用 <kbd>default</kbd> 來重新設定頁面成 wiki 的預設內容語言。",
        "apihelp-setpagelanguage-param-reason": "變更的原因。",
        "apihelp-setpagelanguage-param-tags": "更改對應自此項操作所導致出日誌項目的標籤。",
        "apihelp-setpagelanguage-example-language": "更改 <kbd>Main Page</kbd> 的語言成巴斯克語。",
        "apihelp-setpagelanguage-example-default": "將 ID 是 123 頁面的語言更改為 wiki 的預設內容語言。",
        "apihelp-stashedit-summary": "在分享快取裡預備編輯。",
        "apihelp-stashedit-param-title": "正在編輯此頁面的標題。",
+       "apihelp-stashedit-param-section": "章節編號。<kbd>0</kbd> 代表最上層章節,<kbd>new</kbd> 代表新章節。",
        "apihelp-stashedit-param-sectiontitle": "新章節的標題。",
        "apihelp-stashedit-param-text": "頁面內容。",
        "apihelp-stashedit-param-stashedtexthash": "要替代使用的來自先前儲藏裡頁面內容雜湊。",
        "apihelp-stashedit-param-baserevid": "基本修訂的修訂 ID。",
        "apihelp-stashedit-param-summary": "更改摘要。",
        "apihelp-tag-summary": "從各別修訂或日誌項目添加或移除變更標籤。",
+       "apihelp-tag-param-rcid": "要添加或移除標籤的一個或多個近期變更 ID。",
        "apihelp-tag-param-revid": "要添加或移除標籤的一個或多個修訂 ID。",
        "apihelp-tag-param-logid": "要添加或移除標籤的一個或多個日誌項目 ID。",
        "apihelp-tag-param-add": "要添加的標籤。僅有手動定義的標籤可被添加。",
        "apihelp-tag-param-reason": "變更的原因。",
+       "apihelp-tag-param-tags": "套用到日誌項目的標籤會被建立為此操作的結果。",
        "apihelp-tag-example-rev": "不指明原因將 ID 為 123 的修訂添加 <kbd>vandalism</kbd> 標籤",
        "apihelp-tag-example-log": "將 ID 為 123 的日誌項目移除 <kbd>spam</kbd> 標籤,原因:<kbd>Wrongly applied</kbd>",
        "apihelp-tokens-summary": "取得資料修改動作的權杖。",
        "apihelp-undelete-param-title": "要恢復的頁面標題。",
        "apihelp-undelete-param-reason": "還原的原因。",
        "apihelp-undelete-param-tags": "在刪除日誌裡更改套用到項目的標籤。",
+       "apihelp-undelete-param-timestamps": "要復原的修訂時間戳記。若 <var>$1timestamps</var> 與 <var>$1fileids</var> 皆為空,則所有都會被復原。",
+       "apihelp-undelete-param-fileids": "要復原的檔案修訂 ID。若 <var>$1timestamps</var> 與 <var>$1fileids</var> 皆為空,則所有都會被復原。",
        "apihelp-undelete-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-undelete-example-page": "取消刪除頁面 <kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "取消刪除 <kbd>Main Page</kbd> 的兩筆修訂。",
        "apihelp-upload-param-ignorewarnings": "忽略所有警告。",
        "apihelp-upload-param-file": "檔案內容。",
        "apihelp-upload-param-url": "索取檔案的來源 URL。",
+       "apihelp-upload-param-sessionkey": "如同 $1filekey,維持向下相容性。",
        "apihelp-upload-param-stash": "若設定的話,伺服器將會把檔案臨時暫存;而不是添加至儲存庫裡。",
        "apihelp-upload-param-filesize": "整體上傳的檔案大小。",
        "apihelp-upload-param-chunk": "大量內容。",
        "apihelp-upload-param-async": "在可能的情況下讓潛在的大型檔案非同步處理。",
+       "apihelp-upload-param-checkstatus": "僅檢索指定檔案鍵的上傳狀態。",
        "apihelp-upload-example-url": "從 URL 上傳。",
        "apihelp-upload-example-filekey": "完成出於警告而失敗的上傳。",
        "apihelp-userrights-summary": "變更一位使用者的群組成員。",
        "apihelp-userrights-param-remove": "從這些群組移除使用者。",
        "apihelp-userrights-param-reason": "變更的原因。",
        "apihelp-userrights-param-tags": "在使用者權限日誌裡更改套用到項目的標籤。",
+       "apihelp-userrights-example-user": "添加使用者 <kbd>FooBot</kbd> 至群組 <kbd>bot</kbd>,並從群組 <kbd>sysop</kbd> 與 <kbd>bureaucrat</kbd> 裡移除。",
+       "apihelp-userrights-example-userid": "添加 ID 為 <kbd>123</kbd> 的使用者至群組 <kbd>bot</kbd>,並從群組 <kbd>sysop</kbd> 與 <kbd>bureaucrat</kbd> 裡移除。",
        "apihelp-userrights-example-expiry": "添加使用者 <kbd>SometimeSysop</kbd> 至群組 <kbd>sysop</kbd> 為期一個月時間。",
        "apihelp-validatepassword-summary": "驗證密碼是否符合 wiki 的密碼方針。",
        "apihelp-validatepassword-param-password": "要驗證的密碼。",
        "apihelp-phpfm-summary": "使用序列化 PHP 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-rawfm-summary": "使用 JSON 格式的除錯元素輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-xml-summary": "使用 XML 格式輸出資料。",
+       "apihelp-xml-param-xslt": "若有指定,添加命名頁面成 XSL 樣式表。值必須是在 <code>.xsl</code> 結尾處 {{ns:MediaWiki}} 命名空間裡的標題。",
        "apihelp-xml-param-includexmlnamespace": "若有指定,添加一個 XML 命名空間。",
        "apihelp-xmlfm-summary": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
        "api-format-title": "MediaWiki API 結果",
        "api-format-prettyprint-header-only-html": "這是用來除錯的HTML呈現,不適合實際應用。\n\n參見[[mw:Special:MyLanguage/API|完整文件]]或[[Special:ApiHelp/main|API幫助]]以取得更多資訊。",
        "api-format-prettyprint-header-hyperlinked": "這是$1格式的HTML實現。HTML對除錯很有用,但不適合應用程式使用。\n\n指定<var>format</var>參數以更改輸出格式。要查看$1格式的非HTML實現,設置[$3 <kbd>format=$2</kbd>]。\n\n參見[[mw:API|完整文件]],或[[Special:ApiHelp/main|API幫助]]以獲取更多信息。",
        "api-format-prettyprint-status": "此回應將會傳回HTTP狀態$1 $2。",
+       "api-login-fail-aborted-nobotpw": "驗證需要使用者互動,該不被 <kbd>action=login</kbd> 所支援。要登入請查看 <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>。",
        "api-login-fail-badsessionprovider": "當使用$1無法登入。",
        "api-login-fail-sameorigin": "當未套用相同原有方針時無法登入。",
        "api-pageset-param-titles": "要使用的標題清單。",
        "apierror-cantundelete": "無法取消刪除:請求的修訂可能不存在,或是可能已被取消刪除。",
        "apierror-changeauth-norequest": "建立更改請求失敗。",
        "apierror-cidrtoobroad": "不能接受超出 /$2 的 $1 CIDR 範圍。",
+       "apierror-compare-maintextrequired": "當 <var>$1slots</var> 包含 <kbd>main</kbd> 時,需要參數 <var>$1text-main</var>(不能刪除主要部份)。",
        "apierror-compare-no-title": "無法在不帶標題之下預先儲存轉換。請嘗試指定 <var>fromtitle</var> 或 <var>totitle</var>。",
        "apierror-compare-nosuchfromsection": "在 'from' 內容裡沒有段落$1。",
        "apierror-compare-nosuchtosection": "在 'to' 內容裡沒有段落$1。",
+       "apierror-compare-nofromrevision": "沒有「from」修訂。請指定 <var>fromrev</var>、<var>fromtitle</var>、或 <var>fromid</var>。",
        "apierror-compare-notext": "參數 <var>$1</var> 不能在缺少 <var>$2</var> 的情況下使用。",
+       "apierror-compare-notorevision": "沒有「to」修訂。請指定 <var>torev</var>、<var>totitle</var>、或 <var>toid</var>。",
+       "apierror-compare-relative-to-deleted": "相關已刪除修訂時不能使用 <kbd>torelative=$1</kbd>。",
        "apierror-contentserializationexception": "內容序列化失敗:$1",
        "apierror-copyuploadbaddomain": "不允許從此網域來透過 URL 上傳。",
        "apierror-copyuploadbadurl": "不允許從此 URL 來上傳。",
        "apierror-integeroutofrange-belowminimum": "<var>$1</var> 不能小於 $2(設定為 $3)。",
        "apierror-invalidcategory": "您所輸入的分類名稱無效。",
        "apierror-invalidexpiry": "無效的期限時間「$1」。",
+       "apierror-invalid-file-key": "不是有效的檔案鍵。",
        "apierror-invalidlang": "用於參數 <var>$1</var> 的語言代碼無效。",
        "apierror-invalidmethod": "無效的 HTTP 方式。請考慮採用 GET 或 POST。",
        "apierror-invalidoldimage": "<var>oldimage</var> 參數含有無效格式。",
        "apierror-revdel-needtarget": "此 RevDel 類型需要目標標題。",
        "apierror-revdel-paramneeded": "至少需要 <var>hide</var> 與/或 <var>show</var> 其中的值。",
        "apierror-revisions-badid": "查無參數 <var>$1</var> 的修訂。",
+       "apierror-revisions-norevids": "<var>revids</var> 參數不能與清單選項(<var>$1limit</var>、<var>$1startid</var>、<var>$1endid</var>、<kbd>$1dir=newer</kbd>、<var>$1user</var>、<var>$1excludeuser</var>、<var>$1start</var>、和 <var>$1end</var>)一起使用。",
        "apierror-revwrongpage": "r$1 不是$2的修訂。",
        "apierror-searchdisabled": "<var>$1</var>搜尋已停用。",
        "apierror-sectionreplacefailed": "無法合併更新的章節。",
        "apierror-stashfilestorage": "在儲藏裡不能儲存上傳:$1。",
        "apierror-stashinvalidfile": "無效的儲藏檔案。",
        "apierror-stashnosuchfilekey": "沒有這樣的檔案鍵:$1。",
+       "apierror-stashpathinvalid": "不正確格式或是其它無效的檔案鍵:$1。",
        "apierror-stashwrongowner": "錯誤擁有者:$1",
        "apierror-stashzerolength": "檔案長度為零,且無法儲存於儲藏:$1。",
        "apierror-systemblocked": "您已被 MediaWiki 給自動封鎖。",
        "apiwarn-truncatedresult": "結果會被截短,否則將會大於 $1 位元組限制。",
        "apiwarn-unrecognizedvalues": "參數 <var>$1</var> 有無法識別的{{PLURAL:$3|值|值}}:$2。",
        "apiwarn-unsupportedarray": "參數 <var>$1</var> 使用了不被支援的 PHP 陣列語法。",
+       "apiwarn-validationfailed-badchars": "在鍵裡的字元無效(僅允許 <code>a-z</code>、<code>A-Z</code>、<code>0-9</code>、<code>_</code>、和 <code>-</code> are allowed)。",
        "apiwarn-validationfailed-badpref": "不是有效的偏好設定。",
        "apiwarn-validationfailed-cannotset": "不能透過此模組設定。",
+       "apiwarn-validationfailed-keytoolong": "鍵太長(不允許超過 $1 位元組)。",
        "apiwarn-validationfailed": "<kbd>$1</kbd>驗證錯誤:$2",
        "apiwarn-wgDebugAPI": "<strong>安全警告</strong>:<var>$wgDebugAPI</var> 已啟用。",
        "api-feed-error-title": "錯誤($1)",
index b1dff14..a39568b 100644 (file)
@@ -454,11 +454,9 @@ class ChangesList extends ContextSource {
                        );
                }
                if ( $rc->mAttribs['rc_type'] == RC_CATEGORIZE ) {
-                       $diffhist = $diffLink . $this->message['pipe-separator'] . $this->message['hist'];
+                       $histLink = $this->message['hist'];
                } else {
-                       $diffhist = $diffLink . $this->message['pipe-separator'];
-                       # History link
-                       $diffhist .= $this->linkRenderer->makeKnownLink(
+                       $histLink = $this->linkRenderer->makeKnownLink(
                                $rc->getTitle(),
                                new HtmlArmor( $this->message['hist'] ),
                                [ 'class' => 'mw-changeslist-history' ],
@@ -469,9 +467,11 @@ class ChangesList extends ContextSource {
                        );
                }
 
-               // @todo FIXME: Hard coded ". .". Is there a message for this? Should there be?
-               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() .
-                       ' <span class="mw-changeslist-separator">. .</span> ';
+               $s .= Html::rawElement( 'div', [ 'class' => 'mw-changeslist-links' ],
+                               Html::rawElement( 'span', [], $diffLink ) .
+                               Html::rawElement( 'span', [], $histLink )
+                       ) .
+                       ' <span class="mw-changeslist-separator"></span> ';
        }
 
        /**
@@ -535,7 +535,7 @@ class ChangesList extends ContextSource {
                        htmlspecialchars( $this->getLanguage()->userTime(
                                $rc->mAttribs['rc_timestamp'],
                                $this->getUser()
-                       ) ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
+                       ) ) . '</span> <span class="mw-changeslist-separator"></span> ';
        }
 
        /**
index a26f5b6..c15701b 100644 (file)
@@ -121,7 +121,7 @@ class OldChangesList extends ChangesList {
                if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
                        $cd = $this->formatCharacterDifference( $rc );
                        if ( $cd !== '' ) {
-                               $html .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
+                               $html .= $cd . '  <span class="mw-changeslist-separator"></span> ';
                        }
                }
 
index bb5122f..32cfd13 100644 (file)
@@ -332,12 +332,19 @@ class ChangeTags {
                        );
                }
 
-               // update the tag_summary row
-               $prevTags = [];
-               if ( !self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $rc_id, $rev_id,
-                       $log_id, $prevTags )
-               ) {
-                       // nothing to do
+               $prevTags = self::getPrevTags( $rc_id, $log_id, $rev_id );
+
+               // add tags
+               $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) );
+               $newTags = array_unique( array_merge( $prevTags, $tagsToAdd ) );
+
+               // remove tags
+               $tagsToRemove = array_values( array_intersect( $tagsToRemove, $newTags ) );
+               $newTags = array_values( array_diff( $newTags, $tagsToRemove ) );
+
+               sort( $prevTags );
+               sort( $newTags );
+               if ( $prevTags == $newTags ) {
                        return [ [], [], $prevTags ];
                }
 
@@ -421,75 +428,24 @@ class ChangeTags {
                return [ $tagsToAdd, $tagsToRemove, $prevTags ];
        }
 
-       /**
-        * Adds or removes a given set of tags to/from the relevant row of the
-        * tag_summary table. Modifies the tagsToAdd and tagsToRemove arrays to
-        * reflect the tags that were actually added and/or removed.
-        *
-        * @param array &$tagsToAdd
-        * @param array &$tagsToRemove If a tag is present in both $tagsToAdd and
-        * $tagsToRemove, it will be removed
-        * @param int|null $rc_id Null if not known or not applicable
-        * @param int|null $rev_id Null if not known or not applicable
-        * @param int|null $log_id Null if not known or not applicable
-        * @param array &$prevTags Optionally outputs a list of the tags that were
-        * in the tag_summary row to begin with
-        * @return bool True if any modifications were made, otherwise false
-        * @since 1.25
-        */
-       protected static function updateTagSummaryRow( &$tagsToAdd, &$tagsToRemove,
-               $rc_id, $rev_id, $log_id, &$prevTags = []
-       ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $tsConds = array_filter( [
-                       'ts_rc_id' => $rc_id,
-                       'ts_rev_id' => $rev_id,
-                       'ts_log_id' => $log_id
-               ] );
-
-               // Can't both add and remove a tag at the same time...
-               $tagsToAdd = array_diff( $tagsToAdd, $tagsToRemove );
-
-               // Update the summary row.
-               // $prevTags can be out of date on replica DBs, especially when addTags is called consecutively,
-               // causing loss of tags added recently in tag_summary table.
-               $prevTags = $dbw->selectField( 'tag_summary', 'ts_tags', $tsConds, __METHOD__ );
-               $prevTags = $prevTags ?: '';
-               $prevTags = array_filter( explode( ',', $prevTags ) );
-
-               // add tags
-               $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) );
-               $newTags = array_unique( array_merge( $prevTags, $tagsToAdd ) );
-
-               // remove tags
-               $tagsToRemove = array_values( array_intersect( $tagsToRemove, $newTags ) );
-               $newTags = array_values( array_diff( $newTags, $tagsToRemove ) );
-
-               sort( $prevTags );
-               sort( $newTags );
-               if ( $prevTags == $newTags ) {
-                       return false;
-               }
+       private static function getPrevTags( $rc_id = null, $rev_id = null, $log_id = null ) {
+               $conds = array_filter(
+                       [
+                               'ct_rc_id' => $rc_id,
+                               'ct_log_id' => $log_id,
+                               'ct_rev_id' => $rev_id,
+                       ]
+               );
 
-               if ( !$newTags ) {
-                       // No tags left, so delete the row altogether
-                       $dbw->delete( 'tag_summary', $tsConds, __METHOD__ );
-               } else {
-                       // Specify the non-DEFAULT value columns in the INSERT/REPLACE clause
-                       $row = array_filter( [ 'ts_tags' => implode( ',', $newTags ) ] + $tsConds );
-                       // Check the unique keys for conflicts, ignoring any NULL *_id values
-                       $uniqueKeys = [];
-                       foreach ( [ 'ts_rev_id', 'ts_rc_id', 'ts_log_id' ] as $uniqueColumn ) {
-                               if ( isset( $row[$uniqueColumn] ) ) {
-                                       $uniqueKeys[] = [ $uniqueColumn ];
-                               }
-                       }
+               $dbw = wfGetDB( DB_MASTER );
+               $tagIds = $dbw->selectFieldValues( 'change_tag', 'ct_tag_id', $conds, __METHOD__ );
 
-                       $dbw->replace( 'tag_summary', $uniqueKeys, $row, __METHOD__ );
+               $tags = [];
+               foreach ( $tagIds as $tagId ) {
+                       $tags[] = MediaWikiServices::getInstance()->getChangeTagDefStore()->getName( (int)$tagId );
                }
 
-               return true;
+               return $tags;
        }
 
        /**
@@ -938,7 +894,7 @@ class ChangeTags {
        }
 
        /**
-        * Set ctd_user_defined = 0  in change_tag_def.
+        * Update ctd_user_defined = 0 field in change_tag_def.
         * The tag may remain in use by extensions, and may still show up as 'defined'
         * if an extension is setting it from the ListDefinedTags hook.
         *
@@ -1152,7 +1108,7 @@ class ChangeTags {
                        return Status::newFatal( 'tags-create-no-name' );
                }
 
-               // tags cannot contain commas (used as a delimiter in tag_summary table),
+               // tags cannot contain commas (used to be used as a delimiter in tag_summary table),
                // pipe (used as a delimiter between multiple tags in
                // SpecialRecentchanges and friends), or slashes (would break tag description messages in
                // MediaWiki namespace)
@@ -1266,22 +1222,6 @@ class ChangeTags {
                // set ctd_user_defined = 0
                self::undefineTag( $tag );
 
-               $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
-               $conditions = [ 'ct_tag_id' => $tagId ];
-
-               // find out which revisions use this tag, so we can delete from tag_summary
-               $result = $dbw->select( 'change_tag',
-                       [ 'ct_rc_id', 'ct_log_id', 'ct_rev_id' ],
-                       $conditions,
-                       __METHOD__ );
-               foreach ( $result as $row ) {
-                       // remove the tag from the relevant row of tag_summary
-                       $tagsToAdd = [];
-                       $tagsToRemove = [ $tag ];
-                       self::updateTagSummaryRow( $tagsToAdd, $tagsToRemove, $row->ct_rc_id,
-                               $row->ct_rev_id, $row->ct_log_id );
-               }
-
                // delete from change_tag
                $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
                $dbw->delete( 'change_tag', [ 'ct_tag_id' => $tagId ], __METHOD__ );
index 63cc2a8..826eecb 100644 (file)
  * @ingroup DifferenceEngine
  */
 
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\SlotRecord;
+use MediaWiki\Storage\NameTableAccessException;
 
 /**
  * DifferenceEngine is responsible for rendering the difference between two revisions as HTML.
@@ -1797,22 +1799,42 @@ class DifferenceEngine extends ContextSource {
 
                // Load tags information for both revisions
                $dbr = wfGetDB( DB_REPLICA );
+               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
                if ( $this->mOldid !== false ) {
-                       $this->mOldTags = $dbr->selectField(
-                               'tag_summary',
-                               'ts_tags',
-                               [ 'ts_rev_id' => $this->mOldid ],
+                       $tagIds = $dbr->selectFieldValues(
+                               'change_tag',
+                               'ct_tag_id',
+                               [ 'ct_rev_id' => $this->mOldid ],
                                __METHOD__
                        );
+                       $tags = [];
+                       foreach ( $tagIds as $tagId ) {
+                               try {
+                                       $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                               } catch ( NameTableAccessException $exception ) {
+                                       continue;
+                               }
+                       }
+                       $this->mOldTags = implode( ',', $tags );
                } else {
                        $this->mOldTags = false;
                }
-               $this->mNewTags = $dbr->selectField(
-                       'tag_summary',
-                       'ts_tags',
-                       [ 'ts_rev_id' => $this->mNewid ],
+
+               $tagIds = $dbr->selectFieldValues(
+                       'change_tag',
+                       'ct_tag_id',
+                       [ 'ct_rev_id' => $this->mNewid ],
                        __METHOD__
                );
+               $tags = [];
+               foreach ( $tagIds as $tagId ) {
+                       try {
+                               $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                       } catch ( NameTableAccessException $exception ) {
+                               continue;
+                       }
+               }
+               $this->mNewTags = implode( ',', $tags );
 
                return true;
        }
index 5654a71..db8a09b 100644 (file)
@@ -91,7 +91,11 @@ class GuzzleHttpRequest extends MWHttpRequest {
 
                if ( $this->method == 'POST' ) {
                        $postData = $this->postData;
-                       $this->guzzleOptions['body'] = $postData;
+                       if ( is_array( $postData ) ) {
+                               $this->guzzleOptions['form_params'] = $postData;
+                       } else {
+                               $this->guzzleOptions['body'] = $postData;
+                       }
 
                        // Suppress 'Expect: 100-continue' header, as some servers
                        // will reject it with a 417 and Curl won't auto retry
index a3a14d0..0faef17 100644 (file)
@@ -44,7 +44,7 @@ class HttpRequestFactory {
         */
        public function create( $url, array $options = [], $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
-                       Http::$httpEngine = 'guzzle';
+                       Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
                        throw new DomainException( __METHOD__ . ': curl (https://secure.php.net/curl) is not ' .
                           'installed, but Http::$httpEngine is set to "curl"' );
index b087019..2cf5320 100644 (file)
@@ -387,7 +387,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
 
                // Failure without (valid) headers gets a response status of zero
                if ( !$this->status->isOK() ) {
-                       $this->respStatus = '0';
+                       $this->respStatus = '0 Error';
                }
 
                foreach ( $this->headerList as $header ) {
index db4cbdf..2f1c0f3 100644 (file)
@@ -95,7 +95,6 @@ class MssqlUpdater extends DatabaseUpdater {
                        [ 'addIndex', 'recentchanges', 'rc_name_type_patrolled_timestamp',
                                'patch-add-rc_name_type_patrolled_timestamp_index.sql' ],
                        [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-                       [ 'addField', 'tag_summary', 'ts_id', 'patch-tag_summary-ts_id.sql' ],
 
                        // 1.29
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
@@ -155,6 +154,8 @@ class MssqlUpdater extends DatabaseUpdater {
 
                        // 1.33
                        [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+                       [ 'dropTable', 'valid_tag' ],
+                       [ 'dropTable', 'tag_summary' ],
                ];
        }
 
index 532ccb0..f7362cb 100644 (file)
@@ -158,8 +158,6 @@ class MysqlUpdater extends DatabaseUpdater {
 
                        // 1.15
                        [ 'addTable', 'change_tag', 'patch-change_tag.sql' ],
-                       [ 'addTable', 'tag_summary', 'patch-tag_summary.sql' ],
-                       [ 'addTable', 'valid_tag', 'patch-valid_tag.sql' ],
 
                        // 1.16
                        [ 'addTable', 'user_properties', 'patch-user_properties.sql' ],
@@ -169,7 +167,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'doLogUsertextPopulation' ],
                        [ 'doLogSearchPopulation' ],
                        [ 'addTable', 'l10n_cache', 'patch-l10n_cache.sql' ],
-                       [ 'addIndex', 'tag_summary', 'tag_summary_rc_id', 'patch-change_tag-indexes.sql' ],
+                       [ 'dropIndex', 'change_tag', 'ct_rc_id', 'patch-change_tag-indexes.sql' ],
                        [ 'addField', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ],
                        [ 'doUpdateMimeMinorField' ],
 
@@ -288,7 +286,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'doRevisionPageRevIndexNonUnique' ],
                        [ 'doNonUniquePlTlIl' ],
                        [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-                       [ 'addField', 'tag_summary', 'ts_id', 'patch-tag_summary-ts_id.sql' ],
                        [ 'modifyField', 'recentchanges', 'rc_ip', 'patch-rc_ip_modify.sql' ],
                        [ 'addIndex', 'archive', 'usertext_timestamp', 'patch-rename-ar_usertext_timestamp.sql' ],
 
@@ -375,6 +372,8 @@ class MysqlUpdater extends DatabaseUpdater {
 
                        // 1,33
                        [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+                       [ 'dropTable', 'valid_tag' ],
+                       [ 'dropTable', 'tag_summary' ],
                ];
        }
 
@@ -1179,8 +1178,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'table' => 'change_tag', 'field' => 'ct_log_id' ],
                        [ 'table' => 'change_tag', 'field' => 'ct_rev_id' ],
                        [ 'table' => 'page_restrictions', 'field' => 'pr_user' ],
-                       [ 'table' => 'tag_summary', 'field' => 'ts_log_id' ],
-                       [ 'table' => 'tag_summary', 'field' => 'ts_rev_id' ],
                        [ 'table' => 'user_newtalk', 'field' => 'user_id' ],
                        [ 'table' => 'user_properties', 'field' => 'up_user' ],
                ];
index 19c4cfe..e9be744 100644 (file)
@@ -117,7 +117,6 @@ class OracleUpdater extends DatabaseUpdater {
                        [ 'addIndex', 'recentchanges', 'rc_name_type_patrolled_timestamp',
                                'patch-add-rc_name_type_patrolled_timestamp_index.sql' ],
                        [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-                       [ 'addField', 'tag_summary', 'ts_id', 'patch-tag_summary-ts_id.sql' ],
 
                        // 1.29
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
@@ -166,6 +165,8 @@ class OracleUpdater extends DatabaseUpdater {
 
                        // 1.33
                        [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+                       [ 'dropTable', 'valid_tag' ],
+                       [ 'dropTable', 'tag_summary' ],
 
                        // KEEP THIS AT THE BOTTOM!!
                        [ 'doRebuildDuplicateFunction' ],
index 917f589..7c0d3e3 100644 (file)
@@ -71,7 +71,6 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addSequence', 'externallinks', false, 'externallinks_el_id_seq' ],
                        [ 'addSequence', 'watchlist', false, 'watchlist_wl_id_seq' ],
                        [ 'addSequence', 'change_tag', false, 'change_tag_ct_id_seq' ],
-                       [ 'addSequence', 'tag_summary', false, 'tag_summary_ts_id_seq' ],
 
                        # new tables
                        [ 'addTable', 'category', 'patch-category.sql' ],
@@ -84,8 +83,6 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addTable', 'redirect', 'patch-redirect.sql' ],
                        [ 'addTable', 'updatelog', 'patch-updatelog.sql' ],
                        [ 'addTable', 'change_tag', 'patch-change_tag.sql' ],
-                       [ 'addTable', 'tag_summary', 'patch-tag_summary.sql' ],
-                       [ 'addTable', 'valid_tag', 'patch-valid_tag.sql' ],
                        [ 'addTable', 'user_properties', 'patch-user_properties.sql' ],
                        [ 'addTable', 'log_search', 'patch-log_search.sql' ],
                        [ 'addTable', 'l10n_cache', 'patch-l10n_cache.sql' ],
@@ -443,8 +440,6 @@ class PostgresUpdater extends DatabaseUpdater {
                                '( rc_namespace, rc_type, rc_patrolled, rc_timestamp )' ],
                        [ 'addPgField', 'change_tag', 'ct_id',
                                "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('change_tag_ct_id_seq')" ],
-                       [ 'addPgField', 'tag_summary', 'ts_id',
-                               "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('tag_summary_ts_id_seq')" ],
 
                        // 1.29
                        [ 'addPgField', 'externallinks', 'el_index_60', "BYTEA NOT NULL DEFAULT ''" ],
@@ -567,7 +562,6 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'setSequenceOwner', 'job', 'job_id', 'job_job_id_seq' ],
                        [ 'setSequenceOwner', 'category', 'cat_id', 'category_cat_id_seq' ],
                        [ 'setSequenceOwner', 'change_tag', 'ct_id', 'change_tag_ct_id_seq' ],
-                       [ 'setSequenceOwner', 'tag_summary', 'ts_id', 'tag_summary_ts_id_seq' ],
                        [ 'setSequenceOwner', 'sites', 'site_id', 'sites_site_id_seq' ],
 
                        // 1.32
@@ -598,9 +592,14 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addPgField', 'ipblocks', 'ipb_sitewide', 'SMALLINT NOT NULL DEFAULT 1' ],
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
+                       [ 'dropPgField', 'category', 'cat_hidden' ],
+                       [ 'dropPgField', 'site_stats', 'ss_admins' ],
+                       [ 'dropPgField', 'recentchanges', 'rc_cur_time' ],
 
                        // 1.33
                        [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+                       [ 'dropTable', 'valid_tag' ],
+                       [ 'dropTable', 'tag_summary' ],
                ];
        }
 
@@ -953,8 +952,7 @@ END;
        protected function changeNullableField( $table, $field, $null, $update = false ) {
                $fi = $this->db->fieldInfo( $table, $field );
                if ( is_null( $fi ) ) {
-                       $this->output( "...ERROR: expected column $table.$field to exist\n" );
-                       exit( 1 );
+                       return;
                }
                if ( $fi->isNullable() ) {
                        # # It's NULL - does it need to be NOT NULL?
index 2f39912..1d99b87 100644 (file)
@@ -43,8 +43,6 @@ class SqliteUpdater extends DatabaseUpdater {
 
                        // 1.15
                        [ 'addTable', 'change_tag', 'patch-change_tag.sql' ],
-                       [ 'addTable', 'tag_summary', 'patch-tag_summary.sql' ],
-                       [ 'addTable', 'valid_tag', 'patch-valid_tag.sql' ],
 
                        // 1.16
                        [ 'addTable', 'user_properties', 'patch-user_properties.sql' ],
@@ -54,7 +52,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'doLogUsertextPopulation' ],
                        [ 'doLogSearchPopulation' ],
                        [ 'addTable', 'l10n_cache', 'patch-l10n_cache.sql' ],
-                       [ 'addIndex', 'tag_summary', 'tag_summary_rc_id', 'patch-change_tag-indexes.sql' ],
+                       [ 'dropIndex', 'change_tag', 'ct_rc_id', 'patch-change_tag-indexes.sql' ],
                        [ 'addField', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ],
                        [ 'sqliteSetupSearchindex' ],
 
@@ -157,7 +155,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'addIndex', 'recentchanges', 'rc_name_type_patrolled_timestamp',
                                'patch-add-rc_name_type_patrolled_timestamp_index.sql' ],
                        [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-                       [ 'addField', 'tag_summary', 'ts_id', 'patch-tag_summary-ts_id.sql' ],
 
                        // 1.29
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
@@ -242,6 +239,8 @@ class SqliteUpdater extends DatabaseUpdater {
 
                        // 1.33
                        [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+                       [ 'dropTable', 'valid_tag' ],
+                       [ 'dropTable', 'tag_summary' ],
                ];
        }
 
index ca67a25..94aff80 100644 (file)
        "config-sqlite-cant-create-db": "Файлът за базата от данни <code>$1</code> не може да бъде създаден.",
        "config-sqlite-fts3-downgrade": "Липсва поддръжката на FTS3 за PHP, извършен беше downgradе на таблиците.",
        "config-can-upgrade": "В базата от данни има таблици за МедияУики.\nЗа надграждането им за MediaWiki $1, натиска се <strong>Продължаване</strong>.",
+       "config-upgrade-error": "Възникна грешка при актуализиране на таблиците от базата от данни на МедияУики.\n\nЗа повече инфоремация вижте дневника по-горе, за да опитате отново щракнете <strong>Продължаване</strong>.",
        "config-upgrade-done": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].\n\nАко е необходимо, възможно е файлът <code>LocalSettings.php</code> да бъде създаден отново чрез натискане на бутона по-долу.\nТова <strong>не е препоръчително действие</strong>, освен ако не срещате затруднения с уикито.",
        "config-upgrade-done-no-regenerate": "Обновяването приключи.\n\nВече е възможно [$1 да използвате уикито].",
        "config-regenerate": "Повторно създаване на LocalSettings.php →",
index b612a8b..876ed53 100644 (file)
        "config-skins-help": "Kavet eo bet ar gwiskadurioù renablet a-us en ho kavlec'h <code>./skins</code>. Ret eo deoc'h gweredekaat unan da nebeutañ, ha dibab an hini dre ziouer.",
        "config-skins-use-as-default": "Implijout ar gwiskadur-mañ dre ziouer",
        "config-skins-missing": "N'eus bet kavet gwiskadur ebet : ober a raio MediaWiki gant unan dre ziouer betek ma vo staliet reoù a zegouezh.",
-       "config-skins-must-enable-some": "Ret eo deoc'h dibab da nebautañ ur gwiskadur da weredekaat.",
+       "config-skins-must-enable-some": "Ret eo deoc'h dibab ur gwiskadur da weredekaat da nebeutañ.",
        "config-skins-must-enable-default": "Ar gwiskadur dre ziouer dibabet a rank bezañ gweredekaet.",
        "config-install-alreadydone": "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh.\nKit d'ar bajenn war-lerc'h, mar plij.",
        "config-install-begin": "Pa vo bet pouezet ganeoc'h war \"{{int:config-continue}}\"  e krogo staliadur MediaWiki.\nPouezit war \"{{int:config-back}}\" mar fell deoc'h cheñch tra pe dra.",
index 74503b7..ca1c1c0 100644 (file)
        "config-sqlite-cant-create-db": "Nepodařilo se vytvořit databázový soubor <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP neobsahuje podporu FTS3, downgradují se tabulky",
        "config-can-upgrade": "V této databázi jsou tabulky MediaWiki.\nPokud je chcete aktualizovat na MediaWiki $1, klikněte na '''Pokračovat'''.",
+       "config-upgrade-error": "Při aktualizaci tabulek MediaWiki ve vaší databázi došlo k chybě.\n\nVíce informací najdete v protokolu výše, znovu to můžete zkusit kliknutím na <strong>Pokračovat</strong>.",
        "config-upgrade-done": "Aktualizace byla dokončena.\n\nSvou wiki teď můžete [$1 začít používat].\n\nPokud chcete přegenerovat soubor <code>LocalSettings.php</code>, klikněte na tlačítko níže.\nTo se ale '''nedoporučuje''', pokud s wiki nemáte problémy.",
        "config-upgrade-done-no-regenerate": "Aktualizace byla dokončena.\n\nSvou wiki teď můžete [$1 začít používat].",
        "config-regenerate": "Přegenerovat LocalSettings.php →",
index 955b4f4..1a64890 100644 (file)
@@ -24,7 +24,8 @@
                        "Suchichi02",
                        "Omotecho",
                        "Yusuke1109",
-                       "Aefgh39622"
+                       "Aefgh39622",
+                       "Tomri5"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-db-host-oracle": "データベース TNS:",
        "config-db-host-oracle-help": "有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.ora ファイルは、このインストール先から参照できる場所に置いてください。<br />ご使用中のクライアント ライブラリが 10g 以降の場合、[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ネーミング メソッドを使用できます。",
        "config-db-wiki-settings": "このウィキの識別情報",
-       "config-db-name": "ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\90\8d (ã\83\8fã\82¤ã\83\95ã\83³ã\81¯ä¸\8dè¦\81):",
+       "config-db-name": "ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\90\8d (ã\83\8fã\82¤ã\83\95ã\83³ã\81¯ä½¿ç\94¨ä¸\8då\8f¯):",
        "config-db-name-help": "このウィキを識別する名前を入力してください。\n空白を含めることはできません。\n\n共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。",
        "config-db-name-oracle": "データベースのスキーマ:",
        "config-db-account-oracle-warn": "バックエンドのデータベースとして Oracle をインストールする場合、3つのシナリオが考えられます。\n\nデータベース用のアカウントをインストールのプロセス途中で作成したい場合、インストールに使うデータベース用のアカウントしては SYSDBAロール付きのアカウントを指定し、ウェブアクセス用アカウントには必要なログイン情報を指定してください。あるいは、ウェブアクセス用のアカウントを手動で作成して、そのアカウント(スキーマオブジェクトの作成のパーミッションを要求する場合)だけを使うか、二つの異なるアカウントを用意して一つは特権を付与できるもの、もう一つをウェブアクセス用の制限アカウントとしてください。\n\n要求された特権でアカウントを作成するスクリプトは、このインストール環境では、\"maintenance/oracle/\" にあります。制限アカウントを使用することは、デフォルトアカウントでのすべてのメンテナンス特権を無効にすることにご注意ください。",
index 4ffe16d..bf19769 100644 (file)
        "config-sqlite-cant-create-db": "Used as SQLite error message. Parameters:\n* $1 - filename",
        "config-sqlite-fts3-downgrade": "Status message in the MediaWiki installer when SQLite is used without the FTS3 module. The FTS3 feature allows users to create special tables with a built-in full-text index.",
        "config-can-upgrade": "Parameters:\n* $1 - Version or Revision indicator.",
-       "config-upgrade-error": "Used as error message.",
+       "config-upgrade-error": "Used as error message. See also {{msg-mw|Config-continue}}",
        "config-upgrade-done": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done-no-regenerate}}",
        "config-upgrade-done-no-regenerate": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done}}",
        "config-regenerate": "This message appears in a button after LocalSettings.php is generated and downloaded at the end of the MediaWiki installation process.",
index 2fb5ba4..618e5c9 100644 (file)
@@ -28,8 +28,8 @@
        "config-no-session": "Ваши подаци о сесији су изгубљени!\nПроверите датотеку php.ini и уверите се да је параметар <code>session.save_path</code> постављен на одговарајући директоријум.",
        "config-your-language": "Ваш језик:",
        "config-your-language-help": "Изаберите језик који желите да користите током процеса инсталације.",
-       "config-wiki-language": "Wiki језик:",
-       "config-wiki-language-help": "Изаберите језик на ком ће wiki бити претежно написан.",
+       "config-wiki-language": "Вики језик:",
+       "config-wiki-language-help": "Изаберите језик на ком ће вики бити претежно написан.",
        "config-back": "← Назад",
        "config-continue": "Настави →",
        "config-page-language": "Језик",
@@ -46,7 +46,7 @@
        "config-page-releasenotes": "Напомене о издању",
        "config-page-copying": "Копирање",
        "config-page-upgradedoc": "Надоградња",
-       "config-page-existingwiki": "Постојећи wiki",
+       "config-page-existingwiki": "Постојећи вики",
        "config-help-restart": "Желите ли да обришете све сачуване податке које сте унели и поново покренете процес инсталације?",
        "config-restart": "Да, покрени поново",
        "config-welcome": "=== Провера окружења ===\nСада ће се извршити основна провера како би се утврдило да ли је ово окружење погодно за MediaWiki инсталацију.\nНе заборавите да укључите ове информације ако тражите подршку како завршити инсталацију.",
@@ -82,9 +82,9 @@
        "config-db-type": "Тип базе података:",
        "config-db-host": "Хост базе података",
        "config-db-host-oracle": "TNS базе података:",
-       "config-db-wiki-settings": "Идентификуј овај wiki",
+       "config-db-wiki-settings": "Идентификуј овај вики",
        "config-db-name": "Име базе података (без цртица):",
-       "config-db-name-help": "Одаберите име које идентификује ваш wiki.\nОно не треба да садржи размаке.\n\nАко користите дељени веб-хостинг, ваш добављач услуге хостинга ће вам дати одређено име базе података за коришћење или ће вас пустити да правите базе података путем контролне табле.",
+       "config-db-name-help": "Одаберите име које идентификује ваш вики.\nОно не треба да садржи размаке.\n\nАко користите дељени веб-хостинг, ваш добављач услуге хостинга ће вам дати одређено име базе података за коришћење или ће вас пустити да правите базе података путем контролне табле.",
        "config-db-name-oracle": "Шема базе података:",
        "config-db-install-account": "Кориснички налог за инсталацију",
        "config-db-username": "Корисничко име базе података:",
        "config-db-sys-user-exists-oracle": "Кориснички налог „$1” већ постоји. SYSDBA се само може користити за отварање новог налога!",
        "config-postgres-old": "Неопходан је PostgreSQL $1 или новији. Ви имате $2.",
        "config-mssql-old": "Неопходан је Microsoft SQL Server $1 или новији. Ви имате $2.",
-       "config-sqlite-name-help": "Одаберите име које идентификује ваш wiki.\nНе користите размаке или цртице.\nОво ће се користити за име датотеке SQLite података.",
+       "config-sqlite-name-help": "Одаберите име које идентификује ваш вики.\nНе користите размаке или цртице.\nОво ће се користити за име датотеке SQLite података.",
        "config-sqlite-mkdir-error": "Грешка при прављењу директоријума са подацима „$1”.\nПроверите локацију, па покушајте поново.",
        "config-sqlite-dir-unwritable": "Није могуће уписати у директоријум „$1”.\nПромените му дозволе, тако да веб-сервер може да уписује у њему, па покушајте поново.",
        "config-sqlite-connection-error": "$1.\n\nПроверите директоријум са подацима и име базе података испод, па покушајте поново.",
        "config-sqlite-fts3-downgrade": "PHP-у недостаје FTS3 подршка, поништавање надоградње табела.",
        "config-can-upgrade": "Постоје MediaWiki табеле у овој бази података.\nДа бисте их надоградили на MediaWiki $1, кликните на <strong>Настави</strong>.",
        "config-upgrade-error": "Дошло је до грешке при надоградњи MediaWiki табела у бази података.\n\nЗа више информација, погледајте евиденцију изнад, да бисте покушали поново, кликните на <strong>Настави</strong>.",
-       "config-upgrade-done": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој wiki].\n\nАко желите да поново генеришете датотеку <code>LocalSettings.php</code>, кликните на дугме испод.\nОво се <strong>не препоручује</strong> осим ако имате проблеме са wiki-јем.",
-       "config-upgrade-done-no-regenerate": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој wiki].",
+       "config-upgrade-done": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој вики].\n\nАко желите да поново генеришете датотеку <code>LocalSettings.php</code>, кликните на дугме испод.\nОво се <strong>не препоручује</strong> осим ако имате проблеме са викијем.",
+       "config-upgrade-done-no-regenerate": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој вики].",
        "config-regenerate": "Регенериши LocalSettings.php →",
        "config-show-table-status": "Упит <code>SHOW TABLE STATUS</code> није успео!",
        "config-unknown-collation": "<strong>Упозорење:</strong> База података користи непрепозната правила поређења.",
        "config-db-web-account": "Налог базе података за веб-приступ",
-       "config-db-web-help": "Изаберите кориснички име и лозинку коју ће веб-сервер користити за повезивање са сервером базе података, током свакодневног рада на wiki-ју.",
+       "config-db-web-help": "Изаберите кориснички име и лозинку коју ће веб-сервер користити за повезивање са сервером базе података, током свакодневног рада на викију.",
        "config-db-web-account-same": "Користи исти налог као и за инсталацију",
        "config-db-web-create": "Отвори налог ако већ не постоји.",
        "config-db-web-no-create-privs": "Налог који сте навели за инсталацију нема довољне привилегије да отвори налог.\nНалог који овде наведете већ мора да постоји.",
        "config-mssql-auth": "Тип потврде идентитета:",
        "config-mssql-sqlauth": "SQL Server потврда идентитета",
        "config-mssql-windowsauth": "Windows потврда идентитета",
-       "config-site-name": "Име wiki-ја:",
+       "config-site-name": "Име викија:",
        "config-site-name-help": "Ово ће се појавити у насловној траци прегледача и на разним другим местима.",
-       "config-site-name-blank": "Унесите име сајта.",
+       "config-site-name-blank": "Унесите име локације.",
        "config-project-namespace": "Именски простор пројекта:",
        "config-ns-generic": "Пројекат",
-       "config-ns-site-name": "Исти као wiki име: $1",
+       "config-ns-site-name": "Исти као вики име: $1",
        "config-ns-other": "Друго (наведите)",
        "config-ns-other-default": "MyWiki",
        "config-ns-invalid": "Наведени именски простор „<nowiki>$1</nowiki>” није важећи.\nНаведите други именски простор пројекта.",
        "config-admin-name": "Ваше корисничко име:",
        "config-admin-password": "Лозинка:",
        "config-admin-password-confirm": "Поновите лозинку:",
-       "config-admin-help": "Овде унесите жељено корисничко име; на пример, „Александар Живковић”.\nОво име ћете користити за пријаву на wiki.",
+       "config-admin-help": "Овде унесите жељено корисничко име; на пример, „Александар Живковић”.\nОво име ћете користити за пријаву на вики.",
        "config-admin-name-blank": "Унесите корисничко име администратора.",
        "config-admin-name-invalid": "Наведено корисничко име „<nowiki>$1</nowiki>” није важеће.\nНаведите друго.",
        "config-admin-password-blank": "Унесите лозинку за налог администратора.",
        "config-subscribe": "Претплатите се на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements дописну листу].",
        "config-subscribe-noemail": "Покушали сте да се претплатите на дописну листу за објаве о новим издањима без пружања адресе е-поште.\nПружите адресу е-поште ако желите да се претплатите на њу.",
        "config-pingback": "Дели податке о овој инсталацији са MediaWiki програмерима.",
-       "config-almost-done": "Скоро сте готови!\nСада можете прескочити преосталу конфигурацију и одмах инсталирати wiki.",
+       "config-almost-done": "Скоро сте готови!\nСада можете прескочити преосталу конфигурацију и одмах инсталирати вики.",
        "config-optional-continue": "Постави ми још питања.",
-       "config-optional-skip": "Већ ми је досадно, само инсталирај wiki.",
+       "config-optional-skip": "Већ ми је досадно, само инсталирај вики.",
        "config-profile": "Профил корисничких група:",
-       "config-profile-wiki": "Отворен wiki",
+       "config-profile-wiki": "Отворен вики",
        "config-profile-no-anon": "Неопходно је отворити налог",
        "config-profile-fishbowl": "Само овлашћени уредници",
-       "config-profile-private": "Приватан wiki",
-       "config-profile-help": "Wiki-ји најбоље функционишу када дозвољавате што више корисника да уређују како је то могуће.\nУ MediaWiki-ју, лако је прегледати недавне промене и вратити сваку штету коју почине наивни или злонамерни корисници.\n\nМеђутим, многи су пронашли MediaWiki да је користан у широкој разноликости улога, а понекад није лако уверити се у све предности начина wiki-ја.\nТако да имате избор.\n\nМодел <strong>{{int:config-profile-wiki}}</strong> дозвољава свима да уређују, без пријављивања.\nWiki-ји са <strong>{{int:config-profile-no-anon}}</strong> пружају додатну одговорност, али може спречити случајне доприносе.\n\n<strong>{{int:config-profile-fishbowl}}</strong> сценарио дозвољава одобреним корисницима да уређују, али сви могу видети странице, укључујући историју.\n<strong>{{int:config-profile-private}}</strong> само дозвољава одобреним корисницима да виде странице, са истом групом дозвољеном да уређује.\n\nСложене конфигурације корисничких права су доступне након инсталације, погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights одговарајући ручни унос].",
+       "config-profile-private": "Приватан вики",
+       "config-profile-help": "Викији најбоље функционишу када дозвољавате што више корисника да уређују како је то могуће.\nУ MediaWiki-ју, лако је прегледати недавне промене и вратити сваку штету коју почине наивни или злонамерни корисници.\n\nМеђутим, многи су пронашли MediaWiki да је користан у широкој разноликости улога, а понекад није лако уверити се у све предности начина викија.\nТако да имате избор.\n\nМодел <strong>{{int:config-profile-wiki}}</strong> дозвољава свима да уређују, без пријављивања.\nВикији са <strong>{{int:config-profile-no-anon}}</strong> пружају додатну одговорност, али може спречити случајне доприносе.\n\n<strong>{{int:config-profile-fishbowl}}</strong> сценарио дозвољава одобреним корисницима да уређују, али сви могу видети странице, укључујући историју.\n<strong>{{int:config-profile-private}}</strong> само дозвољава одобреним корисницима да виде странице, са истом групом дозвољеном да уређује.\n\nСложене конфигурације корисничких права су доступне након инсталације, погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights одговарајући ручни унос].",
        "config-license": "Ауторска права и лиценца:",
        "config-license-none": "Без подножја за лиценцу",
        "config-license-cc-by-sa": "Creative Commons Ауторство-Делити под истим условима",
        "config-cc-not-chosen": "Одаберите коју Creative Commons лиценцу желите и кликните на „настави”.",
        "config-advanced-settings": "Напредна конфигурација",
        "config-cache-options": "Подешавања за кеширање објекта:",
-       "config-cache-none": "Нема кеширања (функционалност није уклоњена, али брзина може утицати на веће wiki сајтове)",
+       "config-cache-none": "Нема кеширања (функционалност није уклоњена, али брзина може утицати на веће вики локације)",
        "config-cache-accel": "Кеширање PHP објекта (APC, APCu or WinCache)",
        "config-cache-memcached": "Користи Memcached (захтева додатно подешавање и конфигурацију)",
        "config-memcached-servers": "Memcached сервери:",
        "config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
        "config-install-extension-tables": "Прављење табела за омогућене додатке",
        "config-install-mainpage-failed": "Није могуће уметнути главну страну: $1",
-       "config-install-done": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у базу ваше wiki инсталације (исти директоријум као index.php). Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој wiki]</strong>.",
-       "config-install-done-path": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у <code>$4</code>. Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој wiki]</strong>.",
-       "config-install-success": "MediaWiki је успешно инсталиран. Сада можете посетити <$1$2> да бисте видели свој wiki.\nАко имате питања, погледајте нашу листу често постављаних питања: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или користите један од форума за подршку који су повезани на тој страници.",
+       "config-install-done": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у базу ваше вики инсталације (исти директоријум као index.php). Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
+       "config-install-done-path": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у <code>$4</code>. Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
+       "config-install-success": "MediaWiki је успешно инсталиран. Сада можете посетити <$1$2> да бисте видели свој вики.\nАко имате питања, погледајте нашу листу често постављаних питања: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или користите један од форума за подршку који су повезани на тој страници.",
        "config-download-localsettings": "Преузми датотеку <code>LocalSettings.php</code>",
        "config-help": "помоћ",
        "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 по категорији].",
+       "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-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (захтева $2)",
        "config-extension-not-found": "Није могуће пронаћи датотеку регистрације за додатак „$1”",
        "config-extension-dependency": "Дошло је до грешке зависности при инсталирању додатка „$1”: $2",
        "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 Листа поставки конфигурације]\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/Manual:Combating_spam Научите како да се борите против непожељног садржаја на свом wiki-ју]"
+       "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/Manual:Combating_spam Научите како да се борите против непожељног садржаја на свом викију]"
 }
index 98f44d1..9c6c907 100644 (file)
@@ -61,4 +61,40 @@ class WinCacheBagOStuff extends BagOStuff {
 
                return $ok;
        }
+
+       /**
+        * Construct a cache key.
+        *
+        * @since 1.27
+        * @param string $keyspace
+        * @param array $args
+        * @return string
+        */
+       public function makeKeyInternal( $keyspace, $args ) {
+               // WinCache keys have a maximum length of 150 characters. From that,
+               // subtract the number of characters we need for the keyspace and for
+               // the separator character needed for each argument. To handle some
+               // custom prefixes used by thing like WANObjectCache, limit to 125.
+               // NOTE: Same as in memcached, except the max key length there is 255.
+               $charsLeft = 125 - strlen( $keyspace ) - count( $args );
+
+               $args = array_map(
+                       function ( $arg ) use ( &$charsLeft ) {
+                               // 33 = 32 characters for the MD5 + 1 for the '#' prefix.
+                               if ( $charsLeft > 33 && strlen( $arg ) > $charsLeft ) {
+                                       $arg = '#' . md5( $arg );
+                               }
+
+                               $charsLeft -= strlen( $arg );
+                               return $arg;
+                       },
+                       $args
+               );
+
+               if ( $charsLeft < 0 ) {
+                       return $keyspace . ':BagOStuff-long-key:##' . md5( implode( ':', $args ) );
+               }
+
+               return $keyspace . ':' . implode( ':', $args );
+       }
 }
index 39f8f01..fdf96fe 100644 (file)
@@ -21,8 +21,8 @@ class SQLiteField implements Field {
        function defaultValue() {
                if ( is_string( $this->info->dflt_value ) ) {
                        // Typically quoted
-                       if ( preg_match( '/^\'(.*)\'$', $this->info->dflt_value ) ) {
-                               return str_replace( "''", "'", $this->info->dflt_value );
+                       if ( preg_match( '/^\'(.*)\'$/', $this->info->dflt_value, $matches ) ) {
+                               return str_replace( "''", "'", $matches[1] );
                        }
                }
 
diff --git a/includes/profiler/ProfilerExcimer.php b/includes/profiler/ProfilerExcimer.php
new file mode 100644 (file)
index 0000000..20f9a78
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+
+class ProfilerExcimer extends Profiler {
+       private $cpuProf;
+       private $realProf;
+       private $period;
+
+       /**
+        * @param array $params Associative array of parameters:
+        *    - period: The sampling period
+        *    - maxDepth: The maximum stack depth collected
+        *    - cpuProfiler: A pre-started ExcimerProfiler instance for CPU
+        *      profiling of the entire request including configuration.
+        *    - realProfiler: A pre-started ExcimerProfiler instance for wall
+        *      clock profiling of the entire request.
+        */
+       public function __construct( array $params = [] ) {
+               parent::__construct( $params );
+
+               $this->period = $params['period'] ?? 0.01;
+               $maxDepth = $params['maxDepth'] ?? 100;
+
+               if ( isset( $params['cpuProfiler'] ) ) {
+                       $this->cpuProf = $params['cpuProfiler'];
+               } else {
+                       $this->cpuProf = new ExcimerProfiler;
+                       $this->cpuProf->setEventType( EXCIMER_CPU );
+                       $this->cpuProf->setPeriod( $this->period );
+                       $this->cpuProf->setMaxDepth( $maxDepth );
+                       $this->cpuProf->start();
+               }
+
+               if ( isset( $params['realProfiler'] ) ) {
+                       $this->realProf = $params['realProfiler'];
+               } else {
+                       $this->realProf = new ExcimerProfiler;
+                       $this->realProf->setEventType( EXCIMER_REAL );
+                       $this->realProf->setPeriod( $this->period );
+                       $this->realProf->setMaxDepth( $maxDepth );
+                       $this->realProf->start();
+               }
+       }
+
+       public function scopedProfileIn( $section ) {
+       }
+
+       public function close() {
+               $this->cpuProf->stop();
+               $this->realProf->stop();
+       }
+
+       public function getFunctionStats() {
+               $this->close();
+               $cpuStats = $this->cpuProf->getLog()->aggregateByFunction();
+               $realStats = $this->realProf->getLog()->aggregateByFunction();
+               $allNames = array_keys( $realStats + $cpuStats );
+               $cpuSamples = $this->cpuProf->getLog()->getEventCount();
+               $realSamples = $this->realProf->getLog()->getEventCount();
+
+               $resultStats = [ [
+                       'name' => '-total',
+                       'calls' => 1,
+                       'memory' => 0,
+                       '%memory' => 0,
+                       'min_real' => 0,
+                       'max_real' => 0,
+                       'cpu' => $cpuSamples * $this->period * 1000,
+                       '%cpu' => 100,
+                       'real' => $realSamples * $this->period * 1000,
+                       '%real' => 100,
+               ] ];
+
+               foreach ( $allNames as $funcName ) {
+                       $cpuEntry = $cpuStats[$funcName] ?? false;
+                       $realEntry = $realStats[$funcName] ?? false;
+                       $resultEntry = [
+                               'name' => $funcName,
+                               'calls' => 0,
+                               'memory' => 0,
+                               '%memory' => 0,
+                               'min_real' => 0,
+                               'max_real' => 0,
+                       ];
+
+                       if ( $cpuEntry ) {
+                               $resultEntry['cpu'] = $cpuEntry['inclusive'] * $this->period * 1000;
+                               $resultEntry['%cpu'] = $cpuEntry['inclusive'] / $cpuSamples * 100;
+                       } else {
+                               $resultEntry['cpu'] = 0;
+                               $resultEntry['%cpu'] = 0;
+                       }
+                       if ( $realEntry ) {
+                               $resultEntry['real'] = $realEntry['inclusive'] * $this->period * 1000;
+                               $resultEntry['%real'] = $realEntry['inclusive'] / $realSamples * 100;
+                       } else {
+                               $resultEntry['real'] = 0;
+                               $resultEntry['%real'] = 0;
+                       }
+
+                       $resultStats[] = $resultEntry;
+               }
+               return $resultStats;
+       }
+
+       public function getOutput() {
+               $this->close();
+               $cpuLog = $this->cpuProf->getLog();
+               $realLog = $this->realProf->getLog();
+               $cpuStats = $cpuLog->aggregateByFunction();
+               $realStats = $realLog->aggregateByFunction();
+               $allNames = array_keys( $cpuStats + $realStats );
+               $cpuSamples = $cpuLog->getEventCount();
+               $realSamples = $realLog->getEventCount();
+
+               $result = '';
+
+               $titleFormat = "%-70s %10s %11s %10s %11s %10s %11s %10s %11s\n";
+               $statsFormat = "%-70s %10d %10.1f%% %10d %10.1f%% %10d %10.1f%% %10d %10.1f%%\n";
+               $result .= sprintf( $titleFormat,
+                       'Name',
+                       'CPU incl', 'CPU incl%', 'CPU self', 'CPU self%',
+                       'Real incl', 'Real incl%', 'Real self', 'Real self%'
+               );
+
+               foreach ( $allNames as $funcName ) {
+                       $realEntry = $realStats[$funcName] ?? false;
+                       $cpuEntry = $cpuStats[$funcName] ?? false;
+                       $realIncl = $realEntry ? $realEntry['inclusive'] : 0;
+                       $realSelf = $realEntry ? $realEntry['self'] : 0;
+                       $cpuIncl = $cpuEntry ? $cpuEntry['inclusive'] : 0;
+                       $cpuSelf = $cpuEntry ? $cpuEntry['self'] : 0;
+                       $result .= sprintf( $statsFormat,
+                               $funcName,
+                               $cpuIncl * $this->period * 1000,
+                               $cpuIncl == 0 ? 0 : $cpuIncl / $cpuSamples * 100,
+                               $cpuSelf * $this->period * 1000,
+                               $cpuSelf == 0 ? 0 : $cpuSelf / $cpuSamples * 100,
+                               $realIncl * $this->period * 1000,
+                               $realIncl == 0 ? 0 : $realIncl / $realSamples * 100,
+                               $realSelf * $this->period * 1000,
+                               $realSelf == 0 ? 0 : $realSelf / $realSamples * 100
+                       );
+               }
+
+               return $result;
+       }
+}
index 6e0085d..ea5f7ad 100644 (file)
@@ -21,7 +21,6 @@
  * @ingroup Profiler
  */
 
-use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\DBError;
 
 /**
@@ -56,7 +55,7 @@ class ProfilerOutputDb extends ProfilerOutput {
                }
 
                $fname = __METHOD__;
-               $dbw->onTransactionCommitOrIdle( function ( Database $dbw ) use ( $stats, $fname ) {
+               $dbw->onTransactionCommitOrIdle( function () use ( $stats, $fname, $dbw ) {
                        $pfhost = $this->perHost ? wfHostname() : '';
                        // Sqlite: avoid excess b-tree rebuilds (mostly for non-WAL mode)
                        // non-Sqlite: lower contention with small transactions
index 1bb995a..4201f80 100644 (file)
@@ -1279,7 +1279,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $this->getOutput()->redirect( $this->getPageTitle()->getCanonicalURL( $query ) );
                }
 
-               $opts->validateIntBounds( 'limit', 0, 1000 );
+               $opts->validateIntBounds( 'limit', 0, 5000 );
                $opts->validateBounds( 'days', 0, $this->getConfig()->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
        }
 
index 78b8f8a..67d1873 100644 (file)
@@ -394,7 +394,7 @@ class SpecialBlock extends FormSpecialPage {
         * @return string
         */
        protected function preText() {
-               $this->getOutput()->addModuleStyles( 'mediawiki.widgets.TitlesMultiselectWidget.styles' );
+               $this->getOutput()->addModuleStyles( 'mediawiki.widgets.TagMultiselectWidget.styles' );
                $this->getOutput()->addModules( [ 'mediawiki.special.block' ] );
 
                $blockCIDRLimit = $this->getConfig()->get( 'BlockCIDRLimit' );
@@ -1034,18 +1034,20 @@ class SpecialBlock extends FormSpecialPage {
         * Exception: Users can block the user who blocked them, to reduce
         * advantage of a malicious account blocking all admins (T150826)
         *
-        * @param User|int|string $user Target to block or unblock
+        * @param User|int|string|null $target Target to block or unblock; could be a User object,
+        *   or a user ID or username, or null when the target is not known yet (e.g. when
+        *   displaying Special:Block)
         * @param User $performer User doing the request
         * @return bool|string True or error message key
         */
-       public static function checkUnblockSelf( $user, User $performer ) {
-               if ( is_int( $user ) ) {
-                       $user = User::newFromId( $user );
-               } elseif ( is_string( $user ) ) {
-                       $user = User::newFromName( $user );
+       public static function checkUnblockSelf( $target, User $performer ) {
+               if ( is_int( $target ) ) {
+                       $target = User::newFromId( $target );
+               } elseif ( is_string( $target ) ) {
+                       $target = User::newFromName( $target );
                }
                if ( $performer->isBlocked() ) {
-                       if ( $user instanceof User && $user->getId() == $performer->getId() ) {
+                       if ( $target instanceof User && $target->getId() == $performer->getId() ) {
                                # User is trying to unblock themselves
                                if ( $performer->isAllowed( 'unblockself' ) ) {
                                        return true;
@@ -1056,10 +1058,10 @@ class SpecialBlock extends FormSpecialPage {
                                        return 'ipbnounblockself';
                                }
                        } elseif (
-                               $user instanceof User &&
+                               $target instanceof User &&
                                $performer->getBlock() instanceof Block &&
                                $performer->getBlock()->getBy() &&
-                               $performer->getBlock()->getBy() === $user->getId()
+                               $performer->getBlock()->getBy() === $target->getId()
                        ) {
                                // Allow users to block the user that blocked them.
                                // This is to prevent a situation where a malicious user
index 16cebe0..70b4207 100644 (file)
@@ -159,7 +159,6 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        $out->addReturnTo( SpecialPage::getTitleFor( 'Watchlist' ) );
                } elseif ( $this->toc !== false ) {
                        $out->prependHTML( $this->toc );
-                       $out->addModules( 'mediawiki.toc' );
                        $out->addModuleStyles( 'mediawiki.toc.styles' );
                }
        }
index 7ea9ba0..3524d79 100644 (file)
@@ -79,7 +79,8 @@ class SpecialPasswordReset extends FormSpecialPage {
                $a = [];
                if ( isset( $resetRoutes['username'] ) && $resetRoutes['username'] ) {
                        $a['Username'] = [
-                               'type' => 'user',
+                               'type' => 'text',
+                               'default' => $this->getRequest()->getSession()->suggestLoginUsername(),
                                'label-message' => 'passwordreset-username',
                        ];
 
index 04be22b..cc7ed55 100644 (file)
@@ -53,7 +53,10 @@ class SpecialPreferences extends SpecialPage {
                }
 
                $out->addModules( 'mediawiki.special.preferences.ooui' );
-               $out->addModuleStyles( 'mediawiki.special.preferences.styles.ooui' );
+               $out->addModuleStyles( [
+                       'mediawiki.special.preferences.styles.ooui',
+                       'mediawiki.widgets.TagMultiselectWidget.styles',
+               ] );
                $out->addModuleStyles( 'oojs-ui-widgets.styles' );
 
                $session = $this->getRequest()->getSession();
index 6a01b0c..cd754ca 100644 (file)
@@ -23,6 +23,7 @@
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Storage\NameTableAccessException;
 use Wikimedia\Rdbms\IResultWrapper;
 
 /**
@@ -596,12 +597,22 @@ class SpecialUndelete extends SpecialPage {
 
                $minor = $rev->isMinor() ? ChangesList::flag( 'minor' ) : '';
 
-               $tags = wfGetDB( DB_REPLICA )->selectField(
-                       'tag_summary',
-                       'ts_tags',
-                       [ 'ts_rev_id' => $rev->getId() ],
+               $tagIds = wfGetDB( DB_REPLICA )->selectFieldValues(
+                       'change_tag',
+                       'ct_tag_id',
+                       [ 'ct_rev_id' => $rev->getId() ],
                        __METHOD__
                );
+               $tags = [];
+               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+               foreach ( $tagIds as $tagId ) {
+                       try {
+                               $tags[] = $changeTagDefStore->getName( (int)$tagId );
+                       } catch ( NameTableAccessException $exception ) {
+                               continue;
+                       }
+               }
+               $tags = implode( ',', $tags );
                $tagSummary = ChangeTags::formatSummaryRow( $tags, 'deleteddiff', $this->getContext() );
 
                // FIXME This is reimplementing DifferenceEngine#getRevisionHeader
index a9479c4..8363e56 100644 (file)
@@ -295,7 +295,11 @@ class AllMessagesTablePager extends TablePager {
                                <th>" .
                $this->msg( 'allmessagescurrent' )->escaped() .
                "</th>
-                       </tr></thead><tbody>\n";
+                       </tr></thead>\n";
+       }
+
+       function getEndBody() {
+               return Html::closeElement( 'table' );
        }
 
        function formatValue( $field, $value ) {
@@ -345,48 +349,49 @@ class AllMessagesTablePager extends TablePager {
                return '';
        }
 
+       /** @return string HTML */
        function formatRow( $row ) {
                // Do all the normal stuff
                $s = parent::formatRow( $row );
 
                // But if there's a customised message, add that too.
                if ( $row->am_customised ) {
-                       $s .= Xml::openElement( 'tr', $this->getRowAttrs( $row, true ) );
+                       $s .= Html::openElement( 'tr', $this->getRowAttrs( $row, true ) );
                        $formatted = strval( $this->formatValue( 'am_actual', $row->am_actual ) );
 
                        if ( $formatted === '' ) {
                                $formatted = "\u{00A0}";
                        }
 
-                       $s .= Xml::tags( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted )
-                               . "</tr>\n";
+                       $s .= Html::element( 'td', $this->getCellAttrs( 'am_actual', $row->am_actual ), $formatted )
+                               . Html::closeElement( 'tr' );
                }
 
-               return $s;
+               return Html::rawElement( 'tbody', [], $s );
        }
 
-       function getRowAttrs( $row, $isSecond = false ) {
-               $arr = [];
-
-               if ( $row->am_customised ) {
-                       $arr['class'] = 'allmessages-customised';
-               }
-
-               return $arr;
+       function getRowAttrs( $row ) {
+               return [];
        }
 
+       /** @return array HTML attributes */
        function getCellAttrs( $field, $value ) {
-               if ( $this->mCurrentRow->am_customised && $field === 'am_title' ) {
-                       return [ 'rowspan' => '2', 'class' => $field ];
-               } elseif ( $field === 'am_title' ) {
-                       return [ 'class' => $field ];
+               $attr = [];
+               if ( $field === 'am_title' ) {
+                       if ( $this->mCurrentRow->am_customised ) {
+                               $attr += [ 'rowspan' => '2' ];
+                       }
                } else {
-                       return [
+                       $attr += [
                                'lang' => $this->lang->getHtmlCode(),
                                'dir' => $this->lang->getDir(),
-                               'class' => $field
                        ];
+                       if ( $this->mCurrentRow->am_customised ) {
+                               // CSS class: am_default, am_actual
+                               $attr += [ 'class' => $field ];
+                       }
                }
+               return $attr;
        }
 
        // This is not actually used, as getStartBody is overridden above
diff --git a/includes/widget/TagMultiselectWidget.php b/includes/widget/TagMultiselectWidget.php
new file mode 100644 (file)
index 0000000..43e184c
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+namespace MediaWiki\Widget;
+
+use OOUI\MultilineTextInputWidget;
+
+/**
+ * Abstract base class for widgets to select multiple users, titles,
+ * namespaces, etc.
+ *
+ * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license MIT
+ */
+abstract class TagMultiselectWidget extends \OOUI\Widget {
+
+       protected $selectedArray = [];
+       protected $inputName = null;
+       protected $inputPlaceholder = null;
+       protected $tagLimit = null;
+
+       /**
+        * @param array $config Configuration options
+        *   - array $config['default'] Array of items to use as preset data
+        *   - array $config['name'] Name attribute (used in forms)
+        *   - array $config['placeholder'] Placeholder message for input
+        *   - array $config['input'] Config options for the input widget
+        *   - number $config['tagLimit'] Maximum number of selected items
+        */
+       public function __construct( array $config = [] ) {
+               parent::__construct( $config );
+
+               // Properties
+               if ( isset( $config['default'] ) ) {
+                       $this->selectedArray = $config['default'];
+               }
+               if ( isset( $config['name'] ) ) {
+                       $this->inputName = $config['name'];
+               }
+               if ( isset( $config['placeholder'] ) ) {
+                       $this->inputPlaceholder = $config['placeholder'];
+               }
+               if ( isset( $config['input'] ) ) {
+                       $this->input = $config['input'];
+               } else {
+                       $this->input = [];
+               }
+               if ( isset( $config['tagLimit'] ) ) {
+                       $this->tagLimit = $config['tagLimit'];
+               }
+
+               $textarea = new MultilineTextInputWidget( array_merge( [
+                       'name' => $this->inputName,
+                       'value' => implode( "\n", $this->selectedArray ),
+                       'rows' => 10,
+                       'classes' => [
+                               'mw-widgets-tagMultiselectWidget-multilineTextInputWidget'
+                       ],
+               ], $this->input ) );
+
+               $pending = new PendingTextInputWidget();
+
+               $this->appendContent( $textarea, $pending );
+               $this->addClasses( [ 'mw-widgets-tagMultiselectWidget' ] );
+       }
+
+       public function getConfig( &$config ) {
+               if ( $this->selectedArray !== null ) {
+                       $config['selected'] = $this->selectedArray;
+               }
+               if ( $this->inputName !== null ) {
+                       $config['name'] = $this->inputName;
+               }
+               if ( $this->inputPlaceholder !== null ) {
+                       $config['placeholder'] = $this->inputPlaceholder;
+               }
+               if ( $this->input !== null ) {
+                       $config['input'] = $this->input;
+               }
+               if ( $this->tagLimit !== null ) {
+                       $config['tagLimit'] = $this->tagLimit;
+               }
+
+               $config['$overlay'] = true;
+               return parent::getConfig( $config );
+       }
+
+}
index f62ee83..3246e7d 100644 (file)
@@ -2,66 +2,28 @@
 
 namespace MediaWiki\Widget;
 
-use OOUI\MultilineTextInputWidget;
-
 /**
  * Widget to select multiple titles.
  *
  * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license MIT
  */
-class TitlesMultiselectWidget extends \OOUI\Widget {
+class TitlesMultiselectWidget extends TagMultiselectWidget {
 
-       protected $titlesArray = [];
-       protected $inputName = null;
-       protected $inputPlaceholder = null;
-       protected $tagLimit = null;
        protected $showMissing = null;
 
        /**
         * @param array $config Configuration options
-        *   - array $config['default'] Array of titles to use as preset data
-        *   - array $config['placeholder'] Placeholder message for input
-        *   - array $config['name'] Name attribute (used in forms)
-        *   - number $config['tagLimit'] Maximum number of selected titles
         *   - bool $config['showMissing'] Show missing pages
-        *   - array $config['input'] Config options for the input widget
         */
        public function __construct( array $config = [] ) {
                parent::__construct( $config );
 
                // Properties
-               if ( isset( $config['default'] ) ) {
-                       $this->titlesArray = $config['default'];
-               }
-               if ( isset( $config['name'] ) ) {
-                       $this->inputName = $config['name'];
-               }
-               if ( isset( $config['placeholder'] ) ) {
-                       $this->inputPlaceholder = $config['placeholder'];
-               }
-               if ( isset( $config['tagLimit'] ) ) {
-                       $this->tagLimit = $config['tagLimit'];
-               }
                if ( isset( $config['showMissing'] ) ) {
                        $this->showMissing = $config['showMissing'];
                }
-               if ( isset( $config['input'] ) ) {
-                       $this->input = $config['input'];
-               }
-
-               $textarea = new MultilineTextInputWidget( array_merge( [
-                       'name' => $this->inputName,
-                       'value' => implode( "\n", $this->titlesArray ),
-                       'rows' => 10,
-                       'classes' => [
-                               'mw-widgets-titlesMultiselectWidget-multilineTextInputWidget'
-                       ],
-               ], $this->input ) );
 
-               $pending = new PendingTextInputWidget();
-
-               $this->appendContent( $textarea, $pending );
                $this->addClasses( [ 'mw-widgets-titlesMultiselectWidget' ] );
        }
 
@@ -70,26 +32,10 @@ class TitlesMultiselectWidget extends \OOUI\Widget {
        }
 
        public function getConfig( &$config ) {
-               if ( $this->titlesArray !== null ) {
-                       $config['selected'] = $this->titlesArray;
-               }
-               if ( $this->inputName !== null ) {
-                       $config['name'] = $this->inputName;
-               }
-               if ( $this->inputPlaceholder !== null ) {
-                       $config['placeholder'] = $this->inputPlaceholder;
-               }
-               if ( $this->tagLimit !== null ) {
-                       $config['tagLimit'] = $this->tagLimit;
-               }
                if ( $this->showMissing !== null ) {
                        $config['showMissing'] = $this->showMissing;
                }
-               if ( $this->input !== null ) {
-                       $config['input'] = $this->input;
-               }
 
-               $config['$overlay'] = true;
                return parent::getConfig( $config );
        }
 
index aaa46ae..066a2f3 100644 (file)
@@ -2,46 +2,19 @@
 
 namespace MediaWiki\Widget;
 
-use OOUI\MultilineTextInputWidget;
-
 /**
  * Widget to select multiple users.
  *
  * @copyright 2017 MediaWiki Widgets Team and others; see AUTHORS.txt
  * @license MIT
  */
-class UsersMultiselectWidget extends \OOUI\Widget {
-
-       protected $usersArray = [];
-       protected $inputName = null;
-       protected $inputPlaceholder = null;
+class UsersMultiselectWidget extends TagMultiselectWidget {
 
        /**
         * @param array $config Configuration options
-        *   - array $config['users'] Array of usernames to use as preset data
-        *   - array $config['placeholder'] Placeholder message for input
-        *   - array $config['name'] Name attribute (used in forms)
         */
        public function __construct( array $config = [] ) {
                parent::__construct( $config );
-
-               // Properties
-               if ( isset( $config['default'] ) ) {
-                       $this->usersArray = $config['default'];
-               }
-               if ( isset( $config['name'] ) ) {
-                       $this->inputName = $config['name'];
-               }
-               if ( isset( $config['placeholder'] ) ) {
-                       $this->inputPlaceholder = $config['placeholder'];
-               }
-
-               $textarea = new MultilineTextInputWidget( [
-                       'name' => $this->inputName,
-                       'value' => implode( "\n", $this->usersArray ),
-                       'rows' => 10,
-               ] );
-               $this->prependContent( $textarea );
        }
 
        protected function getJavaScriptClassName() {
@@ -49,17 +22,6 @@ class UsersMultiselectWidget extends \OOUI\Widget {
        }
 
        public function getConfig( &$config ) {
-               if ( $this->usersArray !== null ) {
-                       $config['selected'] = $this->usersArray;
-               }
-               if ( $this->inputName !== null ) {
-                       $config['name'] = $this->inputName;
-               }
-               if ( $this->inputPlaceholder !== null ) {
-                       $config['placeholder'] = $this->inputPlaceholder;
-               }
-
-               $config['$overlay'] = true;
                return parent::getConfig( $config );
        }
 
index de5d715..bb3261a 100644 (file)
        "accmailtext": "أُرسِلت كلمة سر مولدة عشوائيا ل[[User talk:$1|$1]] إلى $2. يمكن تغييرها في صفحة ''[[Special:ChangePassword|تغيير كلمة السر]]'' بعد تسجيل الدخول.",
        "newarticle": "(جديد)",
        "newarticletext": "لقد تبعت وصلة لصفحة لم يتم إنشائها بعد.\nلإنشاء هذه الصفحة ابدأ الكتابة في الصندوق بالأسفل (انظر في [$1 صفحة المساعدة] للمزيد من المعلومات).\nإذا كانت زيارتك لهذه الصفحة بالخطأ، اضغط على زر ''رجوع'' في متصفح الإنترنت لديك.",
-       "anontalkpagetext": "----\n<em>هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب.</em>\nلذا فيجب علينا استعمال رقم الأيبي للتعرف عليه/عليها.\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:CreateAccount|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.",
+       "anontalkpagetext": "----\n<em>هذه صفحة نقاش لمستخدم مجهول لم يقم بإنشاء حساب بعد أو لا يستعمل ذلك الحساب;</em>\nلذا يجب علينا استعمال رقم الأيبي للتعرف عليهم،\nمثل هذا العنوان يمكن أن يشترك فيه عدة مستخدمين.\nلو كنت مستخدما مجهولا وتشعر بأن تعليقات لا تخصك تم توجيهها إليك، من فضلك [[Special:CreateAccount|أنشئ حسابا]] أو [[Special:UserLogin|سجل الدخول]] لتجنب الارتباك المستقبلي مع مستخدمين مجهولين آخرين.",
        "noarticletext": "هذه الصفحة خالية حاليا. يمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوانها]] في الصفحات الأخرى أو\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات] (لتعرف إن كانت قد حُذِفَت)،\nأو '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} إنشاؤها]'''</span>.",
        "noarticletext-nopermission": "لا يوجد حاليا أي نص في هذه الصفحة.\nيمكنك [[Special:Search/{{PAGENAME}}|البحث عن عنوان هذه الصفحة]] في الصفحات الأخرى، أو <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} البحث في السجلات المتعلقة بها]</span>، لكن ليست لك صلاحية إنشاء هذه الصفحة.",
        "missing-revision": "المراجعة #$1 من الصفحة المسماة \"{{FULLPAGENAME}}\" غير موجودة.\n\nهذا يحدث عادة عن طريق اتباع وصلة تاريخ قديمة لصفحة تم حذفها.\nالتفاصيل يمكن إيجادها في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
index 519d1a9..646787e 100644 (file)
        "accmailtext": "Выпадковы пароль для [[User talk:$1|$1]] быў адасланы па адрасе $2. Яго можна зьмяніць на старонцы <em>[[Special:ChangePassword|зьмены паролю]]</em> пасьля ўваходу.",
        "newarticle": "(Новая)",
        "newarticletext": "Вы прыйшлі па спасылцы на старонку, якая яшчэ не існуе.\nКаб стварыць яе, напішыце тэкст у полі ніжэй (глядзіце [$1 старонку дапамогі] для дадатковай інфармацыі).\nКалі Вы трапілі сюды памылкова, націсьніце кнопку «<strong>назад</strong>» у вашым браўзэры.",
-       "anontalkpagetext": "----\n<em>Ð\93Ñ\8dÑ\82а Ñ\81Ñ\82аÑ\80онка Ð³Ñ\83Ñ\82аÑ\80ак Ð°Ð½Ð°Ð½Ñ\96мнага Ñ\9eдзелÑ\8cнÑ\96ка, Ñ\8fкÑ\96 Ñ\8fÑ\88Ñ\87Ñ\8d Ð½Ðµ Ñ\81Ñ\82ваÑ\80Ñ\8bÑ\9e Ñ\81абе Ñ\80аÑ\85Ñ\83нак Ð°Ð»Ñ\8cбо Ð½Ðµ Ñ\9eжÑ\8bвае Ñ\8fго.</em>\nТамÑ\83 Ð¼Ñ\8b Ð²Ñ\8bмÑ\83Ñ\88анÑ\8bÑ\8f Ñ\9eжÑ\8bваÑ\86Ñ\8c Ð»Ñ\96Ñ\87бавÑ\8b IP-адÑ\80аÑ\81 Ð´Ð·ÐµÐ»Ñ\8f Ñ\8fгонай Ñ\96дÑ\8dнÑ\82Ñ\8bÑ\84Ñ\96каÑ\86Ñ\8bÑ\96. Ð\90дзÑ\96н IP-адÑ\80аÑ\81 Ð¼Ð¾Ð¶Ð° Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\86а Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96мÑ\96 Ñ\9eдзелÑ\8cнÑ\96камÑ\96. Ð\9aалÑ\96 Ð\92Ñ\8b â\80\94 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8b Ñ\9eдзелÑ\8cнÑ\96к Ñ\96 Ð»Ñ\96Ñ\87Ñ\8bÑ\86е, Ñ\88Ñ\82о Ð°Ñ\82Ñ\80Ñ\8bмалÑ\96 Ð½Ðµ Ð¿Ñ\80Ñ\8bзнаÑ\87анÑ\8bÑ\8f Ð\92ам камэнтары, калі ласка, [[Special:CreateAccount|стварыце рахунак]] альбо [[Special:UserLogin|ўвайдзіце ў сыстэму]], каб у будучыні пазьбегнуць магчымай блытаніны зь іншымі ананімнымі ўдзельнікамі.",
+       "anontalkpagetext": "----\n<em>Ð\93Ñ\8dÑ\82а Ñ\81Ñ\82аÑ\80онка Ð³Ñ\83Ñ\82аÑ\80ак Ð°Ð½Ð°Ð½Ñ\96мнага Ñ\9eдзелÑ\8cнÑ\96ка, Ñ\8fкÑ\96 Ñ\8fÑ\88Ñ\87Ñ\8d Ð½Ðµ Ñ\81Ñ\82ваÑ\80Ñ\8bÑ\9e Ñ\81абе Ñ\80аÑ\85Ñ\83нак Ð°Ð»Ñ\8cбо Ð½Ðµ Ñ\9eжÑ\8bвае Ñ\8fго.</em>\nТамÑ\83 Ð¼Ñ\8b Ð²Ñ\8bмÑ\83Ñ\88анÑ\8bÑ\8f Ñ\9eжÑ\8bваÑ\86Ñ\8c Ð»Ñ\96Ñ\87бавÑ\8b IP-адÑ\80аÑ\81 Ð´Ð·ÐµÐ»Ñ\8f Ñ\8fгонай Ñ\96дÑ\8dнÑ\82Ñ\8bÑ\84Ñ\96каÑ\86Ñ\8bÑ\96. Ð\90дзÑ\96н IP-адÑ\80аÑ\81 Ð¼Ð¾Ð¶Ð° Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\86а Ð½ÐµÐºÐ°Ð»Ñ\8cкÑ\96мÑ\96 Ñ\9eдзелÑ\8cнÑ\96камÑ\96. Ð\9aалÑ\96 Ð²Ñ\8b â\80\94 Ð°Ð½Ð°Ð½Ñ\96мнÑ\8b Ñ\9eдзелÑ\8cнÑ\96к Ñ\96 Ð»Ñ\96Ñ\87Ñ\8bÑ\86е, Ñ\88Ñ\82о Ð°Ñ\82Ñ\80Ñ\8bмалÑ\96 Ð½Ðµ Ð¿Ñ\80Ñ\8bзнаÑ\87анÑ\8bÑ\8f Ð²ам камэнтары, калі ласка, [[Special:CreateAccount|стварыце рахунак]] альбо [[Special:UserLogin|ўвайдзіце ў сыстэму]], каб у будучыні пазьбегнуць магчымай блытаніны зь іншымі ананімнымі ўдзельнікамі.",
        "noarticletext": "Цяпер тэкст на гэтай старонцы адсутнічае.\nВы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэтую назву]] сярод іншых старонак, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць у адпаведных журналах падзеяў]\nальбо [{{fullurl:{{FULLPAGENAME}}|action=edit}} стварыць гэтую старонку]</span>.",
        "noarticletext-nopermission": "Цяпер на гэтай старонцы тэкст адсутнічае.\nВы можаце [[Special:Search/{{PAGENAME}}|пашукаць назву гэтай старонкі]] на іншых старонках, альбо <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць зьвязаныя запісы ў журналах]</span>, але ў вас няма дазволу ствараць гэтую старонку.",
        "missing-revision": "Вэрсія старонкі №$1 з назвай «{{FULLPAGENAME}}» не існуе.\n\nЗвычайна гэта здараецца з-за пераходу па састарэлай спасылцы на старонку, якая была выдаленая.\nПадрабязнасьці можна знайсьці ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
        "filedelete-intro-old": "Вы выдаляеце вэрсію <strong>[[Media:$1|$1]]</strong> ад [$4 $3, $2].",
        "filedelete-comment": "Прычына:",
        "filedelete-submit": "Выдаліць",
-       "filedelete-success": "'''$1''' выдалены.",
+       "filedelete-success": "<strong>$1</strong> выдалены.",
        "filedelete-success-old": "Вэрсія '''[[Media:$1|$1]]''' ад $3, $2 была выдаленая.",
-       "filedelete-nofile": "Файл '''$1''' не існуе.",
-       "filedelete-nofile-old": "Не існуе архіўнай вэрсіі '''$1''' з пазначанымі атрыбутамі.",
+       "filedelete-nofile": "Файл <strong>$1</strong> не існуе.",
+       "filedelete-nofile-old": "Не існуе архіўнай вэрсіі <strong>$1</strong> з пазначанымі атрыбутамі.",
        "filedelete-otherreason": "Іншая/дадатковая прычына:",
        "filedelete-reason-otherlist": "Іншая прычына",
        "filedelete-reason-dropdown": "* Звычайныя прычыны выдаленьня\n** парушэньне аўтарскіх правоў\n** файл-дублікат",
index 08d8082..3bded91 100644 (file)
        "botpasswords-existing": "Съществуващи пароли за ботове",
        "botpasswords-createnew": "Създаване на нова парола за бота",
        "botpasswords-editexisting": "Редактиране на съществуваща парола на бот",
+       "botpasswords-label-needsreset": "(нужна е нова парола)",
        "botpasswords-label-appid": "Име на бота:",
        "botpasswords-label-create": "Създаване",
        "botpasswords-label-update": "Обновяване",
        "content-not-allowed-here": "На страницата [[:$2]] не е позволено използването на $1",
        "editwarning-warning": "Ако излезете от тази страница, може да загубите всички несъхранени промени, които сте направили.\nАко сте влезли в системата, можете да изключите това предупреждение чрез менюто „{{int:prefs-editing}}“ в личните ви настройки.",
        "editpage-invalidcontentmodel-title": "Форматът на съдържанието не се поддържа",
+       "editpage-invalidcontentmodel-text": "Модел на съдържание „$1“ не се поддържа.",
        "editpage-notsupportedcontentformat-title": "Форматът на съдържанието не се поддържа",
+       "slot-name-main": "Основно",
        "content-model-wikitext": "уикитекст",
        "content-model-text": "обикновен текст",
        "content-model-javascript": "JavaScript",
        "special-characters-title-emdash": "дълго тире",
        "special-characters-title-minus": "знак минус",
        "mw-widgets-abandonedit": "Сигурни ли сте, че искате да напуснете режима за редактиране без да запишете статията преди това?",
-       "mw-widgets-abandonedit-discard": "Ð\9eÑ\82кажеÑ\82е редакциите",
-       "mw-widgets-abandonedit-keep": "Ð\9fÑ\80одÑ\8aлжеÑ\82е редактирането",
+       "mw-widgets-abandonedit-discard": "Ð\9eÑ\82казване Ð½Ð° редакциите",
+       "mw-widgets-abandonedit-keep": "Ð\9fÑ\80одÑ\8aлжаване Ð½Ð° редактирането",
        "mw-widgets-abandonedit-title": "Сигурни ли сте?",
        "mw-widgets-dateinput-no-date": "Нищо не е избрано",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
index 6e13ac9..1206f08 100644 (file)
        "returnto": "$1-এ ফেরত যান।",
        "tagline": "{{SITENAME}} থেকে",
        "help": "সাহায্য",
+       "help-mediawiki": "মিডিয়াউইকি সম্পর্কে সাহায্য",
        "search": "অনুসন্ধান",
        "search-ignored-headings": " #<!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন --> <pre>\n# যেসব শিরোনাম অনুসন্ধানে অগ্রাহ্য করা হবে।\n# যখনই শিরোনামযুক্ত পাতাটি সূচীভুক্ত হবে, তখনই এখানকার কোন পরিবর্তন বাস্তবায়িত হবে।\n# আপনি একটি নাল/শূন্য সম্পাদনা করে পাতাটিকে বলপূর্বক পুনঃসূচীভুক্ত করতে পারেন।\n# সিনট্যাক্স বা পদক্রম/পদবিন্যাসের নিয়মগুলি নিম্নরূপ:\n#   * অক্ষর থেকে শুরু করে লাইনের শেষ পর্যন্ত সবকিছু হচ্ছে একটি মন্তব্য।\n#   * প্রতিটি অশূন্য লাইন হচ্ছে যে শিরোনামটি অগ্রাহ্য করা হবে, বড় হাতের লেখা এবং অন্যান্য সবকিছু গণনায় ধরে।\nতথ্যসূত্র\nবহিঃসংযোগ\nআরও দেখুন\n#</pre> <!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন -->",
        "searchbutton": "অনুসন্ধান",
        "editpage-invalidcontentmodel-text": "এই \"$1\" বিষয়বস্তু মডেলটি অসমর্থিত।",
        "editpage-notsupportedcontentformat-title": "উল্লেখিত পদ্ধতি সমর্থনযোগ্য নয়।",
        "editpage-notsupportedcontentformat-text": "$1 লেখার ফরম্যাট, $2 কন্টেন্ট মডেলের উপযোগী নয়।",
+       "slot-name-main": "প্রধান",
        "content-model-wikitext": "উইকিপাঠ্য",
        "content-model-text": "সাধারণ লেখা",
        "content-model-javascript": "জাভাস্ক্রিপ্ট",
        "pageinfo-display-title": "শিরনাম প্রদর্শন",
        "pageinfo-default-sort": "পূর্বনির্ধারিত বাছাইয়ের চাবি",
        "pageinfo-length": "পাতার দৈর্ঘ্য (বাইটে)",
+       "pageinfo-namespace": "নামস্থান",
        "pageinfo-article-id": "পাতার আইডি",
        "pageinfo-language": "পাতার তথ্যের ভাষা",
        "pageinfo-language-change": "পরিবর্তন",
        "authprovider-confirmlink-success-line": "$1: সংযোগ করা সফল হয়েছে।",
        "authprovider-confirmlink-failed": "অ্যাকাউন্ট সংযোগ করা সম্পূর্ণরূপে সফল হয়নি: $1",
        "authprovider-confirmlink-ok-help": "সংযোগ করা ব্যর্থতাসূচক বার্তাগুলি প্রদর্শন করার পরেও চালিয়ে যান।",
-       "authprovider-resetpass-skip-label": "à¦\89পà§\87à¦\95à§\8dষা à¦\95রà§\8b",
+       "authprovider-resetpass-skip-label": "à¦\89পà§\87à¦\95à§\8dষা à¦\95রà§\81ন",
        "authprovider-resetpass-skip-help": "পাসওয়ার্ড পুনঃস্থাপন করা উপেক্ষা করুন।",
        "authform-nosession-login": "প্রমাণীকরণ সফল ছিল, কিন্তু আপনার ব্রাউজার \"স্মরণ\" রাখতে পারবে না যে আপনি প্রবেশ করেছেন।\n\n$1",
        "authform-nosession-signup": "অ্যাকাউন্ট তৈরি করা হয়েছে, কিন্তু আপনার ব্রাউজার \"স্মরণ\" রাখতে পারবে না যে আপনি প্রবেশ করেছেন।\n\n$1",
index a0da5b4..b38a675 100644 (file)
        "right-edituserjs": "Kemmañ restroù JS implijerien all",
        "right-editmyusercss": "Aozañ ho restroù implijer CSS deoc'h-c'hwi",
        "right-editmyuserjson": "Aozañ ho restroù implijer JSON deoc'h-c'hwi",
-       "right-editmyuserjs": "Aoazañ ho restroù JavaScript implijer deoc'h-c'hwi",
+       "right-editmyuserjs": "Aozañ ho restroù JavaScript implijer deoc'h-c'hwi",
        "right-viewmywatchlist": "Gwelet ho roll-evezhiañ deoc'h-c'hwi",
        "right-editmywatchlist": "Kemmañ ho roll evezhiañ deoc'h-c'hwi. Notit mat e vo c'hoazh ouzhpennet pajennoù hep ar gwir-mañ gant obererezhioù zo.",
        "right-viewmyprivateinfo": "Gwelet ho roadennoù prevez deoc'h-c'hwi (da sk. chomlec'h postel, anv gwirion)",
index 1ee34b4..28cec09 100644 (file)
        "returnto": "Torna cap a $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
+       "help-mediawiki": "Ajuda de MediaWiki",
        "search": "Cerca",
        "search-ignored-headings": " #<!-- deixeu aquesta línia tal com està --> <pre>\n# Títols que seran ignorats pel cercador.\n# Els canvis fets aquí tindran efecte tant aviat com la pàgina amb el títol sigui indexada.\n# Podeu forçar que una pàgina s'indexi de nou fent una edició nul·la.\n# La sintaxi és la següent:\n#   * Tot el que hi hagi des d'un caràcter \"#\" fins el final de línia és un comentari\n#   * Tota línia no buida és el títol exacte a ignorar, amb les majúscules i complet\nReferències\nEnllaços externs\nVegeu també\n #</pre> <!-- deixeu aquesta línia tal com està -->",
        "searchbutton": "Cerca",
        "accmailtext": "S'ha enviat una contrasenya aleatòria a $2 per a {{GENDER:$1|l'usuari|la usuària}} [[User talk:$1|$1]].\n\nLa contrasenya per aquest nou compte pot ser canviada a la pàgina de ''[[Special:ChangePassword|canvi de contrasenya]]'' un cop connectat.",
        "newarticle": "(Nou)",
        "newarticletext": "Heu seguit un enllaç a una pàgina que encara no existeix.\nPer a crear-la, comenceu a escriure en l'espai de sota\n(vegeu l'[$1 ajuda] per a més informació).\nSi sou ací per error, simplement cliqueu al botó «Enrere» del vostre navegador.",
-       "anontalkpagetext": "----\n<em>Aquesta és la pàgina de discussió d'un usuari anònim que encara no ha creat un compte o que no fa servir el seu nom registrat. Per tant, hem de fer servir la seua adreça IP numèrica per a identificar-lo. Una adreça IP pot ser compartida per diversos usuaris. Si sou un usuari anònim i trobeu que us han adreçat comentaris no apropiats, [[Special:CreateAccount|creeu un compte]] o [[Special:UserLogin|inicieu sessió]] per a evitar futures confusions amb altres usuaris anònims.",
+       "anontalkpagetext": "----\n<em>Aquesta és la pàgina de discussió d'un usuari anònim que encara no ha creat un compte o que no fa servir el seu nom registrat.</em>\nPer tant, hem de fer servir l'adreça IP numèrica per a identificar-lo. \nUna adreça IP pot ser compartida per diversos usuaris. \nSi sou un usuari anònim i trobeu que us han adreçat comentaris no apropiats, [[Special:CreateAccount|creeu un compte]] o [[Special:UserLogin|inicieu sessió]] per a evitar futures confusions amb altres usuaris anònims.",
        "noarticletext": "Actualment no hi ha text en aquesta pàgina.\nPodeu [[Special:Search/{{PAGENAME}}|cercar aquest títol]] en altres pàgines,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar en els registres]\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear-la ara]</span>.",
        "noarticletext-nopermission": "Actualment no hi ha text en aquesta pàgina.\nPodeu [[Special:Search/{{PAGENAME}}|cercar aquest títol]] en altres pàgines o bé <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar en els registres relacionats]</span>, però no teniu permisos per crear la pàgina.",
        "missing-revision": "La revisió núm. $1 de la pàgina anomenada «{{FULLPAGENAME}}» no existeix.\n\nNormalment això ocorre quan seguiu un enllaç d’historial desactualitzat que apunta a una pàgina que s’ha suprimit.\nPodeu trobar detalls en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
        "editpage-invalidcontentmodel-text": "El model de contingut «$1» no és permès.",
        "editpage-notsupportedcontentformat-title": "No s'admet el format del contingut",
        "editpage-notsupportedcontentformat-text": "No s'admet el format del contingut $1 pel model de contingut $2.",
+       "slot-name-main": "Principal",
        "content-model-wikitext": "wikitext",
        "content-model-text": "text net",
        "content-model-javascript": "JavaScript",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Utilitza l'hora per defecte del wiki ($1)",
        "timezoneuseoffset": "Altres (especifiqueu la diferència)",
+       "timezone-useoffset-placeholder": "Valors d'exemple: «-07:00» o «01:00»",
        "servertime": "Hora del servidor:",
        "guesstimezone": "Omple-ho des del navegador",
        "timezoneregion-africa": "Àfrica",
        "uploadstash-zero-length": "El fitxer té mida zero.",
        "invalid-chunk-offset": "El desplaçament del fragment no és vàlid",
        "img-auth-accessdenied": "Accés denegat",
-       "img-auth-nopathinfo": "Hi manca PATH_INFO.\nEl servidor no està configurat per passar aquesta informació.\nPot estar basat en CGI i no ser compatible amb img_auth.\nConsulteu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+       "img-auth-nopathinfo": "Hi manca la informació del camí.\nCal configurar el servidor per passar les variables REQUEST_URI i/o PATH_INFO.\nConsulteu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "img-auth-notindir": "No s'ha trobat la ruta sol·licitada al directori de càrrega configurat.",
        "img-auth-badtitle": "No s'ha pogut construir un títol vàlid a partir de \"$1\".",
        "img-auth-nologinnWL": "No has iniciat sessió i \"$1\" no està a la llista blanca.",
        "ipb-disableusertalk": "Impedeix que aquest usuari pugui modificar la seva pàgina de discussió mentre dura el blocatge",
        "ipb-change-block": "Torna a blocar l'usuari amb aquests paràmetres",
        "ipb-confirm": "Confirma el blocatge",
+       "ipb-sitewide": "A tot el lloc web",
        "ipb-partial": "Parcial",
        "ipb-type-label": "Tipus",
        "ipb-pages-label": "Pàgines",
        "pageinfo-display-title": "Títol mostrat",
        "pageinfo-default-sort": "Clau d'ordenació predeterminada",
        "pageinfo-length": "Mida de la pàgina (en bytes)",
+       "pageinfo-namespace": "Espai de noms",
        "pageinfo-article-id": "ID de la pàgina",
        "pageinfo-language": "Llengua del contingut de la pàgina",
        "pageinfo-language-change": "canvia",
        "confirm-mcrrestore-title": "Restaura una revisió",
        "confirm-mcrundo-title": "Desfés un canvi",
        "mcrundofailed": "Ha fallat el desfer",
+       "mcrundo-changed": "La pàgina ha canviat d'ençà que heu vist la diferència. Reviseu el nou canvi.",
+       "mcrundo-parse-failed": "No s'ha pogut analitzar la revisió nova: $1",
        "colon-separator": ":&#32;",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← pàgina anterior",
        "autosumm-replace": "Contingut canviat per «$1».",
        "autoredircomment": "Redirecció a [[$1]]",
        "autosumm-removed-redirect": "S'ha suprimit la redirecció a [[$1]]",
+       "autosumm-changed-redirect-target": "S'ha canviat la destinació de la redirecció de [[$1]] a [[$2]]",
        "autosumm-new": "Es crea la pàgina amb «$1».",
        "autosumm-newblank": "S'ha creat una pàgina en blanc",
        "lag-warn-normal": "Els canvis més nous de $1 {{PLURAL:$1|segon|segons}} podrien no mostrar-se a la llista.",
index a071548..d0cf811 100644 (file)
        "passwordtooshort": "Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.",
        "passwordtoolong": "Hesla nemohou být delší než {{PLURAL:$1|1 znak|$1 znaky|$1 znaků}}.",
        "passwordtoopopular": "Není možné používat běžně vybíraná hesla. Prosím vyberte si heslo, které je složitější uhodnout.",
+       "passwordinlargeblacklist": "Zadané heslo je uvedeno na seznamu velmi často používaných hesel. Zvolte si prosím unikátnější heslo.",
        "password-name-match": "Vaše heslo nesmí být stejné jako uživatelské jméno.",
        "password-login-forbidden": "Použití tohoto uživatelského jména a hesla bylo zakázáno.",
        "mailmypassword": "Poslat nové heslo",
        "edit-gone-missing": "Stránku se nepodařilo aktualizovat.\nZřejmě byla smazána.",
        "edit-conflict": "Editační konflikt.",
        "edit-no-change": "Vaše editace byla ignorována, protože nedošlo k žádné změně textu.",
+       "edit-slots-cannot-add": "Následující {{PLURAL:$1|slot zde není podporován|sloty zde nejsou podporovány}}: $2.",
+       "edit-slots-cannot-remove": "Následující {{PLURAL:$1|slot je vyžadován a nelze ho|sloty jsou vyžadovány a nelze je}} odstranit: $2.",
+       "edit-slots-missing": "Chybí následující {{PLURAL:$1|slot|sloty}}: $2.",
        "postedit-confirmation-created": "Stránka byla založena.",
        "postedit-confirmation-restored": "Stránka byla obnovena.",
        "postedit-confirmation-saved": "Vaše změny byly uloženy.",
        "defaultmessagetext": "Výchozí text hlášení",
        "content-failed-to-parse": "Nepodařilo se zpracovat data $2 do modelu $1: $3",
        "invalid-content-data": "Obsažená data jsou chybná",
-       "content-not-allowed-here": "Obsah typu $1 není na stránce [[:$2]] dovolen.",
+       "content-not-allowed-here": "Obsah typu „$1“ není ve slotu „$3“ stránky [[:$2]] dovolen.",
        "editwarning-warning": "Opuštěním této stránky se mohou veškeré provedené změny ztratit.\nPřihlášení uživatelé si mohou toto varování vypnout na záložce „{{int:prefs-editing}}“ v uživatelském nastavení.",
        "editpage-invalidcontentmodel-title": "Nepodporovaný model obsahu",
        "editpage-invalidcontentmodel-text": "Model obsahu „$1“ není podporován.",
        "rcfilters-watchlist-edit-watchlist-button": "Editovat seznam sledovaných stránek",
        "rcfilters-watchlist-showupdated": "Změny stránek, které jste od provedení změn nenavštívili, jsou zobrazeny <strong>tučně</strong> s vyplněnou značkou.",
        "rcfilters-preference-label": "Používat rozhraní bez JavaScriptu",
-       "rcfilters-preference-help": "Načte poslední změny bez filtrů či zvýrazňování.",
+       "rcfilters-preference-help": "Načte poslední změny bez vyhledávání filtrů či zvýrazňování.",
        "rcfilters-watchlist-preference-label": "Používat rozhraní bez JavaScriptu",
-       "rcfilters-watchlist-preference-help": "Načte sledované stránky bez filtrů či zvýrazňování.",
+       "rcfilters-watchlist-preference-help": "Načte sledované stránky bez vyhledávání filtrů či zvýrazňování.",
        "rcfilters-filter-showlinkedfrom-label": "Zobrazit změny stránek, na které se odkazuje",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Stránky odkazované z</strong> vybrané stránky",
        "rcfilters-filter-showlinkedto-label": "Zobrazit změny stránek, které sem odkazují",
        "move": "Přesunout",
        "movethispage": "Přesunout stránku",
        "unusedimagestext": "Následující soubory existují, ale nejsou vloženy do žádné stránky.\nUvědomte si, že jiné webové stránky mohou na soubor odkazovat pomocí přímého URL, takže zde mohou být uvedeny soubory, které se aktivně používají.",
+       "unusedimagestext-categorizedimgisused": "Následující soubory existují, ale nejsou vloženy do žádné stránky. Soubory v kategoriích se považují za použité, přestože nejsou vloženy do žádné stránky.\nUvědomte si, že jiné webové stránky mohou na soubor odkazovat pomocí přímého URL, takže zde mohou být uvedeny soubory, které se aktivně používají.",
        "unusedcategoriestext": "Následující stránky kategorií existují, avšak žádná stránka ani jiná kategorie je nepoužívá.",
        "notargettitle": "Bez cílové stránky",
        "notargettext": "Této funkci musíte určit cílovou stránku nebo uživatele.",
        "movepage-moved": "'''Stránka „$1“ byla přesunuta na „$2“'''",
        "movepage-moved-redirect": "Bylo vytvořeno přesměrování.",
        "movepage-moved-noredirect": "Přesměrování nebylo vytvořeno.",
+       "movepage-delete-first": "Cílová stránka má příliš mnoho verzí, než aby ji bylo možno smazat v rámci přesunu. Nejprve prosím cílovou stranu smažte ručně a poté to zkuste znovu.",
        "articleexists": "Takto nazvaná stránka již existuje, nebo Vámi zvolený název je neplatný. Zvolte jiný název.",
        "cantmove-titleprotected": "Stránku nelze přesunout na zadané místo, protože název je uzamčen proti vytváření",
        "movetalk": "Přesunout související diskusní stránku",
        "confirm-unwatch-top": "Vyjmout tuto stránku ze sledovaných?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Vrátit editace této stránky?",
+       "confirm-mcrrestore-title": "Obnovit revizi",
        "confirm-mcrundo-title": "Vrátit zpět změnu",
        "mcrundofailed": "Vrácení editace zpět se nezdařilo",
        "mcrundo-missingparam": "V požadavku chybí povinné parametry.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Heslo nesmí být v seznamu určitých zakázaných hesel",
        "passwordpolicies-policy-maximalpasswordlength": "Heslo musí být kratší než {{PLURAL:$1|$1 znak|$1 znaky|$1 znaků}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Heslo nesmí být {{PLURAL:$1|dané oblíbené heslo|v seznamu $1 oblíbených hesel}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Heslo nesmí být v seznamu 100 000 nejčastěji používaných hesel.",
        "easydeflate-invaliddeflate": "Poskytnutý obsah nebyl správně zkomprimován",
        "unprotected-js": "Z bezpečnostních důvodů nelze načítat JavaScript z nechráněných stran. Vyrábějte prosím JavaScriptové skripty jen ve jmenném prostoru MediaWiki: nebo jako uživatelskou podstránku"
 }
index 244d420..b703ffc 100644 (file)
        "accmailtext": "En tilfældigt dannet adgangskode for [[User talk:$1|$1]] er sendt til $2. Den kan ændres på siden ''[[Special:ChangePassword|skift adgangskode]]'', når du logger på.",
        "newarticle": "(Ny)",
        "newarticletext": "Du har fulgt en henvisning til en side som endnu ikke findes.\nFor at oprette siden skal du begynde at skrive i boksen nedenfor\n(se [$1 hjælpesiden] for yderligere information).\nHvis du er her ved en fejl, så tryk på din browsers '''tilbage'''-knap.",
-       "anontalkpagetext": "----\n<em>Dette er en diskussionsside for en anonym bruger, der ikke har oprettet en konto endnu eller ikke bruger den.</em>\nVi er derfor nødt til at bruge den numeriske IP-adresse til at identificere vedkommende.\nEn sådan IP-adresse kan være delt mellem flere brugere.\nHvis du er en anonym bruger og synes, at irrelevante kommentarer er blevet rettet mod dig, så [[Special:CreateAccount|opret en brugerkonto]] eller [[Special:UserLogin|log på]] for at undgå fremtidige forvekslinger med andre anonyme brugere.",
+       "anontalkpagetext": "----\n<em>Dette er diskussionssiden for en anonym bruger, der ikke har oprettet en konto endnu eller ikke bruger den.</em>\nVi er derfor nødt til at bruge den numeriske IP-adresse til at identificere vedkommende.\nEn sådan IP-adresse kan være delt mellem flere brugere.\nHvis du er en anonym bruger og synes, at irrelevante kommentarer er blevet rettet mod dig, så [[Special:CreateAccount|opret en brugerkonto]] eller [[Special:UserLogin|log på]] for at undgå fremtidige forvekslinger med andre anonyme brugere.",
        "noarticletext": "Der er i øjeblikket ikke nogen tekst på denne side.\nDu kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede logger]\neller [{{fullurl:{{FULLPAGENAME}}|action=edit}} oprette siden]</span>.",
        "noarticletext-nopermission": "Der er i øjeblikket ikke nogen tekst på denne side.\nDu kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,\neller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede loglister]</span>,\nmen du har ikke tilladelse til at oprette denne side.",
        "missing-revision": "Revision #$1 af siden med navnet \"{{FULLPAGENAME}}\" eksisterer ikke.\n\nDette skyldes normalt at et forældet historik-link er fulgt til en side der er slettet.\nDetaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletningsloggen].",
        "rcfilters-watchlist-edit-watchlist-button": "Rediger din liste med overvågede sider",
        "rcfilters-watchlist-showupdated": "Ændringer til sider du ikke har besøgt siden ændringerne blev gjort vises med <strong>fed</strong>, med faste markører.",
        "rcfilters-preference-label": "Brug grænsefladesnittet uden JavaScript",
+       "rcfilters-watchlist-preference-label": "Brug grænsefladesnittet uden JavaScript",
        "rcfilters-filter-showlinkedto-label": "Vis ændringer på sider der linker til",
        "rcfilters-target-page-placeholder": "Indtast et sidenavn (eller en kategori)",
        "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
        "pageinfo-robot-index": "Tilladt",
        "pageinfo-robot-noindex": "Ikke tilladt",
        "pageinfo-watchers": "Antal brugere, der overvåger siden",
+       "pageinfo-visiting-watchers": "Antal sideovervågere der har besøgt med senest aktivitet",
        "pageinfo-few-watchers": "Overvåget af færre end $1 {{PLURAL:$1|bruger|brugere}}",
        "pageinfo-redirects-name": "Antal omdirigeringer til denne side",
        "pageinfo-subpages-name": "Undersider til denne side",
        "tags-edit-chosen-no-results": "Ingen mærker fundet som matcher",
        "tags-edit-reason": "Årsag:",
        "tags-edit-success": "Ændringerne blev udført.",
+       "tags-edit-failure": "Ændringerne kunne ikke udføres:\n$1",
        "comparepages": "Sammenlign sider",
        "compare-page1": "Side 1",
        "compare-page2": "Side 2",
        "pagelang-submit": "Indsend",
        "pagelang-nonexistent-page": "Siden $1 findes ikke.",
        "pagelang-unchanged-language": "Siden $1 er allerede sat til sproget $2.",
+       "pagelang-db-failed": "Databasen kunne ikke ændre sidesproget.",
        "right-pagelang": "Ændre sidesproget",
        "action-pagelang": "ændre sidesproget",
+       "log-name-pagelang": "Log for sprogændringer",
+       "log-description-pagelang": "Dette er en log som viser ændringer i sidesprog",
        "mediastatistics": "Mediestatistik",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-type",
        "mw-widgets-dateinput-no-date": "Ingen dato valgt",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
+       "mw-widgets-mediasearch-input-placeholder": "Søg efter medier",
        "mw-widgets-mediasearch-noresults": "Der blev ikke fundet noget resultat.",
        "mw-widgets-titleinput-description-new-page": "side eksisterer ikke endnu",
        "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
        "date-range-to": "Til dato:",
        "sessionmanager-tie": "Kan ikke kombinere flere forespørgselgodkendelsetyper: $1.",
        "sessionprovider-generic": "$1 sessioner",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "cookie-baserede sessioner",
        "randomrootpage": "Tilfældig stamside",
        "log-action-filter-block": "Blokeringstype:",
        "log-action-filter-delete": "Sletningstype:",
        "log-action-filter-patrol": "Patruljeringstype:",
        "log-action-filter-protect": "Beskyttelsestype:",
        "log-action-filter-rights": "Type af rettighedændring:",
+       "log-action-filter-upload": "Type af overførsel:",
        "log-action-filter-all": "Alle",
        "log-action-filter-block-block": "Blokering",
        "log-action-filter-block-reblock": "Ændring af blokering",
        "authmanager-create-from-login": "For at oprette din konto, så udfyld venligst felterne.",
        "authmanager-authplugin-setpass-failed-title": "Ændring af adgangskode mislykkedes",
        "authmanager-authplugin-setpass-bad-domain": "Ugyldig domæne.",
+       "authmanager-autocreate-noperm": "Automatisk kontooprettelse er ikke tilladt.",
        "authmanager-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
        "authmanager-email-label": "E-post",
        "authmanager-email-help": "E-postadresse",
index ce541fc..da00c89 100644 (file)
        "accmailtext": "[[User talk:$1|$1]] parolayo ke raşt ameyo şırawiyo na adres $2.\n\nQey na hesabê newe parola, cıkewtış dıma şıma eşkeni na qısım de ''[[Special:ChangePassword|parola bıvurn]]'' bıvurni.",
        "newarticle": "(Newe)",
        "newarticletext": "To yew gıre tıkna be ra yew pela ke hewna çıniya.\nSeba afernayışê pele ra, qutiya metnê cêrêni bıgurene (seba melumati qaytê [$1 pela peşti] ke).\nEke be ğeletine ameya tiya, wa gocega <strong>peyser</strong>i programê xo de bıtıkne.",
-       "anontalkpagetext": "----''Na per, perêk kı karbero hesab a nêkerdeyan o, ya zi karbero hesab akerdeyan o labele pê hesabê xo nêkewto de. No sebeb ra ma IP adres xebetneno û ney IP adresan herkes nêşeno bıvino. Eke şıma qayil niye ina bo xorê [[Special:CreateAccount|yew hesab bıvıraze]] veya xut [[Special:UserLogin|hesab akere]].''",
+       "anontalkpagetext": "----''Na pele, pela karberana ke hesab anêkerdo ya zi yê karberana ke hesab kerdo a, labelê be hesabê xo ra nêkewtê cı.'' \nNê sebeb ra adresa ma IPyi xebetnenime û nê adresanê IPyi her kes nêşeno bıvêno. Eke şıma qayil niyê wına bo, xo rê [[Special:CreateAccount|yew hesab vırazê]] ya zi [[Special:UserLogin|hesab akerê]].",
        "noarticletext": "Ena perrer de hewna theba çıni yo.\nTı şenê zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|qandê  sernameyê ena pele cı geyre]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre],\nya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele vıraze]</span>.{{MediaWiki mesaca pera newi}}",
        "noarticletext-nopermission": "Ena pele de hewna theba çıniyo.\nTı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernameyê na pele cı geyre]], ya zi <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} qeydan miyan de cı geyre]</span>, ema destur çıniyo ke na pele vırazê.",
        "missing-revision": "Rewizyonê name dê pela da #$1 \"{{FULLPAGENAME}}\" dı çıniyo.\n\nNo normal de tarix dê pelanê besterneyan dı ena xırabin asena.\nDetayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} tiya dı] aseno.",
        "defaultmessagetext": "Metnê mesacê hesabiyayey",
        "content-failed-to-parse": "Qandê madela $3 zereyê $1, $2 sero nêagozyayo",
        "invalid-content-data": "Zerrey malumati nêravêrdeyo",
-       "content-not-allowed-here": "\"$1\" sero per da [[:$2]] rê mısade nêdeyêno",
+       "content-not-allowed-here": "Zerreki rê „$1“ punıkê „$3“ pela [[:$2]] de mısade nêdayo",
        "editwarning-warning": "Wexto ke şıma na pele ra veciyê, beno ke vurnayışê şıma vindi bê.\nEke şıma kewtê hesabê xo, şıma şenê nê balantışi qısmê \"{{int:prefs-editing}}\"i de tercihanê xo ra bıvındarnê.",
        "editpage-notsupportedcontentformat-title": "Formatê zerreki qebul nêbeno",
+       "slot-name-main": "Ser",
        "content-model-wikitext": "wikimetin",
        "content-model-text": "metno pan",
        "content-model-javascript": "JavaScript",
        "timezonelegend": "Warey saete:",
        "localtime": "saeta mehelliye:",
        "timezoneuseserverdefault": "Zey karkerdışê Wiki ($1)",
-       "timezoneuseoffset": "Zewbina (offseti beli bıke)",
+       "timezoneuseoffset": "Zewbina (ferqo cêrên areze ke)",
        "servertime": "Wextê serveri:",
        "guesstimezone": "Browser ra pırr ke",
        "timezoneregion-africa": "Afrika",
        "mimesearch": "MIME bigêre",
        "mimesearch-summary": "Na perre, dosyayanê MIME gorey tewran ra parzûn kena. Cıkewtış: tewrê zerreki/tewro bınên ya zi tewrê zerreki/*, nımune: <code>image/jpeg</code>.",
        "mimetype": "Babetê NIME",
-       "download": "Bıselagnê",
+       "download": "biya war",
        "unwatchedpages": "Pelanê seyrnibiyeyî",
        "listredirects": "Lista serşıkıtışan",
        "listduplicatedfiles": "Lista dosyeyanê ke kopyaya cı vêniyena",
        "protectedtitles": "Sernameyê pawıteyi",
        "protectedtitlesempty": "pê ney parametreyan sernuşteyê pawite çinê",
        "protectedtitles-submit": "Sereki bımotne",
-       "listusers": "Listeyê Karberan",
+       "listusers": "Lista karberan",
        "listusers-editsonly": "Teyna karberanê vırnayış kerdoğan bımotne",
        "listusers-creationsort": "goreyê wextê vıraştışi rêz ker",
        "listusers-desc": "Kemeyen rézed ratn",
        "sp-contributions-uploads": "Barkerdışi",
        "sp-contributions-logs": "qeydi",
        "sp-contributions-talk": "werênayış",
-       "sp-contributions-userrights": "idareyê heqanê karberan",
+       "sp-contributions-userrights": "idareyê heqanê {{GENDER:$1|karberan}}",
        "sp-contributions-blocked-notice": "verniyê no/na karber/e geriyayo/a\nqê referansi qeydê vernigrewtışi cêr de eşkera biyo:",
        "sp-contributions-blocked-notice-anon": "Eno adresê IPi bloke biyo.\nCıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:",
        "sp-contributions-search": "Dekerdena cı geyrê",
        "ipblocklist-empty": "Listay kılit kerdışi venga.",
        "ipblocklist-no-results": "Adresa IPya waştiye ya zi nameyê karberi kılit nêbiyo.",
        "blocklink": "kılit ke",
-       "unblocklink": "blokey wedare",
-       "change-blocklink": "kılit kerdışi bıvurne",
+       "unblocklink": "kılitkerdışi wedare",
+       "change-blocklink": "kılitkerdışi bıvurne",
        "contribslink": "iştıraki",
        "emaillink": "e-poste bırışe",
        "autoblocker": "Şıma otomatikmen kılit biy, çıke adresa şımaya ''IP''y terefê \"[[User:$1|$1]]\" gureniyena.\nSebebê kılitbiyayışê $1'i \"$2\"o",
index b3a0e9b..7a1cd1a 100644 (file)
        "newarticletext": "You have followed a link to a page that does not exist yet.\nTo create the page, start typing in the box below (see the [$1 help page] for more info).\nIf you are here by mistake, click your browser's <strong>back</strong> button.",
        "newarticletextanon": "{{int:newarticletext|$1}}",
        "talkpagetext": "<!-- MediaWiki:talkpagetext -->",
-       "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify him/her.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:CreateAccount|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
+       "anontalkpagetext": "----\n<em>This is the discussion page for an anonymous user who has not created an account yet, or who does not use it.</em>\nWe therefore have to use the numerical IP address to identify them.\nSuch an IP address can be shared by several users.\nIf you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:CreateAccount|create an account]] or [[Special:UserLogin|log in]] to avoid future confusion with other anonymous users.",
        "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
        "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
        "noarticletextanon": "{{int:noarticletext}}",
index f53b037..4a5ad37 100644 (file)
        "istemplate": "inkludo",
        "isimage": "ligilo al dosiero",
        "whatlinkshere-prev": "{{PLURAL:$1|antaŭan|antaŭajn $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|postan|postajn $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|sekvan|sekvajn $1}}",
        "whatlinkshere-links": "← ligiloj",
        "whatlinkshere-hideredirs": "$1 alidirektilojn",
        "whatlinkshere-hidetrans": "$1 inkludojn",
index b7575ff..1fecbd9 100644 (file)
                        "ديفيد",
                        "LittlePuppers",
                        "Theklan",
-                       "Laura Ospina"
+                       "Laura Ospina",
+                       "Pipino-pumuki"
                ]
        },
-       "tog-underline": "Subrayar los enlaces:",
+       "tog-underline": "Enlaces a subrayar:",
        "tog-hideminor": "Ocultar las ediciones menores en cambios recientes",
        "tog-hidepatrolled": "Ocultar las ediciones verificadas de cambios recientes",
-       "tog-newpageshidepatrolled": "Ocultar las páginas verificadas de la lista de páginas nuevas",
+       "tog-newpageshidepatrolled": "Ocultar, de la lista de páginas nuevas, las páginas verificadas",
        "tog-hidecategorization": "Ocultar la categorización de páginas",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
        "tog-usenewrc": "Agrupar los cambios por página en cambios recientes y en la lista de seguimiento",
        "spam_reverting": "Revirtiendo a la última versión que no contenga enlaces a $1",
        "spam_blanking": "Todas las revisiones contienen enlaces a $1, blanqueando",
        "spam_deleting": "Todas las revisiones que contienen enlaces a $1, en proceso de eliminación",
-       "simpleantispam-label": "Comprobación anti-spam.\n¡<strong>No</strong> rellenes esto!",
+       "simpleantispam-label": "Comprobación antispam.\n¡<strong>No</strong> rellenes esto!",
        "pageinfo-title": "Información de «$1»",
        "pageinfo-not-current": "Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.",
        "pageinfo-header-basic": "Información básica",
index 7641c2a..c2e7359 100644 (file)
                        "Niridya",
                        "Pamputt",
                        "Ash Crow",
-                       "Alacabe"
+                       "Alacabe",
+                       "Eihel"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "accmailtext": "Un mot de passe généré aléatoirement pour [[User talk:$1|$1]] a été envoyé à $2.\nIl peut être modifié sur la page ''[[Special:ChangePassword|Changement de mot de passe]]'' après connexion.",
        "newarticle": "(Nouveau)",
        "newarticletext": "Vous avez suivi un lien vers une page qui n’existe pas encore. \nAfin de créer cette page, entrez votre texte dans la boîte ci-après (vous pouvez consulter [$1 la page d’aide] pour plus d’informations). \nSi vous êtes arrivé{{GENDER:||e}} ici par erreur, cliquez sur le bouton <strong>Retour</strong> de votre navigateur.",
-       "anontalkpagetext": "----\n<em>Vous êtes sur la page de discussion d’un utilisateur anonyme qui n’a pas encore créé de compte ou qui n’en utilise pas</em>.\nPour cette raison, nous devons utiliser son adresse IP pour lidentifier.\nUne adresse IP peut être partagée par plusieurs utilisateurs.\nSi vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:CreateAccount|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d’éviter toute confusion future avec d’autres contributeurs anonymes.",
+       "anontalkpagetext": "----\n<em>Vous êtes sur la page de discussion d’un utilisateur anonyme qui n’a pas encore créé de compte ou qui n’en utilise pas</em>.\nPour cette raison, nous devons utiliser son adresse IP pour les identifier.\nUne adresse IP peut être partagée par plusieurs utilisateurs.\nSi vous êtes un{{GENDER:||e|}} utilisat{{GENDER:|eur|rice|eur}} anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:CreateAccount|créer un compte]] ou [[Special:UserLogin|vous connecter]] afin d’éviter toute confusion future avec d’autres contributeurs anonymes.",
        "noarticletext": "Il n’y a pour l’instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|lancer une recherche sur ce titre]] dans les autres pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les opérations liées]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} créer cette page]</span>.",
        "noarticletext-nopermission": "Il n'y a pour l'instant aucun texte sur cette page.\nVous pouvez [[Special:Search/{{PAGENAME}}|faire une recherche sur ce titre]] dans les autres pages,\nou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechercher dans les journaux associés]</span>, mais vous n'avez pas la permission de créer cette page.",
        "missing-revision": "La révision nº $1 de la page intitulée « {{FULLPAGENAME}} » n’existe pas.\n\nCela survient en général en suivant un lien historique désuet vers une page qui a été supprimée.\nVous pouvez trouver plus de détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
        "rcfilters-preference-label": "Utiliser l'interface non-JavaScript",
        "rcfilters-preference-help": "Charge les modifications récentes sans les fonctions de filtrage ni de mise en valeur.",
        "rcfilters-watchlist-preference-label": "Utiliser l'interface non-JavaScript",
-       "rcfilters-watchlist-preference-help": "Charge la liste de suivi sans les fonctions de filtrage ni de mise en valeur.",
+       "rcfilters-watchlist-preference-help": "Charge la liste de suivi sans les fonctions de filtrage ou de mise en valeur.",
        "rcfilters-filter-showlinkedfrom-label": "Montrer les modifications des pages liées depuis",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages liées depuis</strong> la page sélectionnée",
        "rcfilters-filter-showlinkedto-label": "Montrer les modifications des pages pointant vers",
index e55e3b3..9a8cb35 100644 (file)
        "pageinfo-category-files": "Taal faan datein",
        "markaspatrolleddiff": "Üs kontroliaret kääntiakne",
        "markaspatrolledtext": "Sidj üs kontroliaret kääntiakne",
+       "markaspatrolledtext-file": "Detdiar dateiwerjuun üs kontroliaret kääntiakne",
        "markedaspatrolled": "Üs kontroliaret kääntiakne",
        "markedaspatrolledtext": "Detdiar werjuun faan [[:$1]] as üs kontroliaret kääntiakent wurden.",
        "rcpatroldisabled": "A leetst feranrangen kön ei kontroliaret wurd.",
index f140fe0..c1ec9bd 100644 (file)
        "gender-unknown": "Kad Vas se spominje, programska će oprema pokušati upotrijebiti srednji rod kad god je to moguće.",
        "gender-male": "Uređivač sam wikistranica.",
        "gender-female": "Uređivačica sam wikistranica.",
-       "prefs-help-gender": "Mogućnost softvera da ispravno oslovljava razlikujući spol. Ovaj će podatak biti javan.",
+       "prefs-help-gender": "Postavljanje ove mogućnosti je opcionalno.\nProgramska oprema koristi danu vrijednost kako bi Vam se obratila i spomenula Vas drugima rabeći odgovarajući gramatički rod.\nOvaj podatak bit će javno dostupan.",
        "email": "Adresa elektroničke pošte *",
        "prefs-help-realname": "Pravo ime nije obvezno. Ako ga navedete, može biti rabljeno za pripisivanje Vaših doprinosa.",
        "prefs-help-email": "E-mail adresa nije obvezna, ali je potrebna za obnovu lozinke u slučaju da ju zaboravite.",
        "prefs-advancedwatchlist": "Napredne mogućnosti",
        "prefs-displayrc": "Mogućnosti prikaza",
        "prefs-displaywatchlist": "Mogućnosti prikaza",
+       "prefs-changeswatchlist": "Prikazivanje izmjena",
        "prefs-tokenwatchlist": "Tajni ključ",
        "prefs-diffs": "Razlike između inačica uređivanja",
        "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod sljedeće prijave.",
        "pageinfo-display-title": "Pokaži naslov",
        "pageinfo-default-sort": "Podrazumijevano sortiranje",
        "pageinfo-length": "Veličina stranice (u bajtovima)",
+       "pageinfo-namespace": "Imenski prostor",
        "pageinfo-article-id": "ID stranice",
        "pageinfo-language": "Jezik stranice",
        "pageinfo-language-change": "promijeni",
        "pageinfo-category-subcats": "Broj podkategorija",
        "pageinfo-category-files": "Broj datoteka",
        "pageinfo-user-id": "ID suradnika",
+       "pageinfo-view-protect-log": "Vidi evidenciju zaštićivanja ove stranice.",
        "markaspatrolleddiff": "Označi pregledanim",
        "markaspatrolledtext": "Označi ovu stranicu ophođenom",
        "markaspatrolledtext-file": "Označi ovu inačicu datoteke ophođenom",
        "limitreport-postexpandincludesize": "Uključena veličina nakon proširenja",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
        "limitreport-templateargumentsize": "Veličina argumenta predloška",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
        "limitreport-expansiondepth": "Najveća dubina proširenja",
        "limitreport-expensivefunctioncount": "Broj složenih funkcija raščlanjivača",
        "limitreport-unstrip-depth": "Dubina rekurzije unstrip",
        "limitreport-unstrip-size": "Veličina nakon proširenja unstrip",
+       "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
        "expandtemplates": "Prikaz sadržaja predložaka",
        "expand_templates_intro": "Ova posebna stranica omogućuje unos wikiteksta i prikazuje njegov rezultat,\nuključujući i (rekurzivno, tj. potpuno) sve uključene predloške u wikitekstu.\nPrikazuje i rezultate funkcija kao <nowiki>{{</nowiki>#language:...}} i varijabli\nkao <nowiki>{{</nowiki>CURRENTDAY}}. Funkcionira pozivanjem parsera same MedijeWiki.",
        "expand_templates_title": "Kontekstni naslov stranice, za {{FULLPAGENAME}} i sl.:",
index 0c1d608..d381e4e 100644 (file)
@@ -51,7 +51,8 @@
                        "Bencemac",
                        "Rodrigo",
                        "Tothasze",
-                       "David92003"
+                       "David92003",
+                       "--szabi--"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "returnto": "Vissza a(z) $1 laphoz.",
        "tagline": "Innen: {{SITENAME}}",
        "help": "Segítség",
+       "help-mediawiki": "Segítség a MédiaWiki-ről",
        "search": "Keresés",
        "search-ignored-headings": " #<!-- ezen a soron ne változtass --> <pre>\n# Az itt megadott szakaszokat figyelmen kívül hagyja a kereső.\n# Ha megváltoztatod ezt a listát, csak a változtatás után indexelt lapokra lesz hatása.\n# Ha újra akarsz indexelni egy adott oldalt, egy üres szerkesztéssel (megnyit-elment) megteheted.\n# Szintaxis:\n#   * A # jeltől a sor végéig tartó rész megjegyzés, a szoftver figyelmen kívül hagyja\n#   * Minden nem üres sor egy olyan szakasz címe, amit nem akarjuk, hogy indexeljen a kereső. (Csak a pontos egyezés számít, kisbetű/nagybetűt is beleértve.)\nForrások\nJegyzetek\nHivatkozások\nKülső hivatkozások\nLásd még\n #</pre> <!-- ezen a soron ne változtass -->",
        "searchbutton": "Keresés",
        "edit-gone-missing": "Nem lehet frissíteni a lapot.\nÚgy tűnik, hogy törölve lett.",
        "edit-conflict": "Szerkesztési ütközés.",
        "edit-no-change": "A szerkesztésed figyelmen kívül lett hagyva, mivel nem változtattál a lap szövegén.",
+       "edit-slots-cannot-add": "A következő {{PLURAL:$1|rés nem támogatott itt|rések nem támogatottak itt}}: $2.",
+       "edit-slots-cannot-remove": "A következő {{PLURAL:$1|rés kötelező és nem lehet eltávolítani|rések kötelezőek és nem lehet őket eltávolítani}}: $2.",
+       "edit-slots-missing": "A következő {{PLURAL:$1|rés hiányzik|rések hiányoznak}}: $2.",
        "postedit-confirmation-created": "Az oldal létrehozva.",
        "postedit-confirmation-restored": "Az oldal helyre lett állítva.",
        "postedit-confirmation-saved": "A szerkesztésedet elmentettük.",
        "defaultmessagetext": "Alapértelmezett szöveg",
        "content-failed-to-parse": "Hiba történt a $2 tartalom $1 modellre történő konvertálása során: $3",
        "invalid-content-data": "Érvénytelen tartalom adat",
-       "content-not-allowed-here": "\"$1\" tartalom nem engedélyezett a [[:$2]] oldalon",
+       "content-not-allowed-here": "\"$1\" tartalom nem engedélyezett a [[:$2]] oldalon a \"$3\" résben",
        "editwarning-warning": "A lap elhagyásával az összes itt végzett változtatás elveszhet. Ha be vagy jelentkezve, letilthatod ezt a figyelmeztetést a beállításaid „{{int:prefs-editing}}” szakaszában.",
        "editpage-invalidcontentmodel-title": "A tartalommodell nem támogatott",
        "editpage-invalidcontentmodel-text": "A(z) „$1” tartalommodell nem támogatott.",
        "editpage-notsupportedcontentformat-title": "Nem támogatott tartalom formátum",
        "editpage-notsupportedcontentformat-text": "$2 tartalommodell nem támogatja $1 tartalomformátumot.",
+       "slot-name-main": "Kezdőlap",
        "content-model-wikitext": "wikiszöveg",
        "content-model-text": "egyszerű szöveg",
        "content-model-javascript": "JavaScript",
        "move": "Átnevezés",
        "movethispage": "Nevezd át ezt a lapot",
        "unusedimagestext": "Az alábbi fájlokat nem használjuk egyetlen oldalon sem.\nVedd figyelembe, hogy más weboldalak közvetlenül hivatkozhatnak egy fájl URL-jére, ezért szerepelhet itt annak ellenére, hogy aktívan használják.",
+       "unusedimagestext-categorizedimgisused": "Az alábbi fájlok léteznek, de egyetlen lapon sincsenek beillesztve. A kategorizált fájlok használtként jelennek meg, még ha nincsenek is beillesztve.\n\nVedd figyelembe, hogy más weboldalak közvetlenül hivatkozhatnak egy fájl URL-jére, ezért szerepelhet itt annak ellenére, hogy aktívan használják.",
        "unusedcategoriestext": "A következő kategóriákban egyetlen szócikk, illetve alkategória sem szerepel.",
        "notargettitle": "Nincs cél",
        "notargettext": "Nem adtad meg annak a lapnak vagy szerkesztőnek a nevét, amin a műveletet végre akartad hajtani.",
index 67243a2..cedea01 100644 (file)
                        "Daimona Eaytoy",
                        "Sarah Bernabei",
                        "Wedhro",
-                       "Malore"
+                       "Malore",
+                       "Ruthven"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "searchprofile-everything-tooltip": "Cerca ovunque (incluse le pagine di discussione)",
        "searchprofile-advanced-tooltip": "Cerca nei namespace personalizzati",
        "search-result-size": "$1 ({{PLURAL:$2|una parola|$2 parole}})",
-       "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 files}})",
+       "search-result-category-size": "{{PLURAL:$1|1 elemento|$1 elementi}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 file}})",
        "search-redirect": "(reindirizzamento da $1)",
        "search-section": "(sezione $1)",
        "search-category": "(categoria $1)",
index 09b258c..c1585db 100644 (file)
@@ -6,7 +6,7 @@
                        "Sawmw"
                ]
        },
-       "underline-always": "á\80\80á\80­á\80¯á\80²ၜၠင်",
+       "underline-always": "á\80\80á\80­á\80¯á\80\9dá\80ºၜၠင်",
        "underline-never": "ၮင်းဖိုင့်အေႋ",
        "editfont-serif": "ခေါဟ်ထိင်ႋပါ့ဖောင့်",
        "sunday": "အ်ုတုက်",
        "upload-disallowed-here": "ၮ်ု File အ်ုယိုဝ် ဖိုဟ်ထိုင့်သာ ကီလ်ုၮေဝ်ၜး။",
        "filedelete-submit": "ထုဂ်ဆိင့်",
        "randompage": "ဆ်ုတံင်ဏံင်းလိက်မေံၜၠါ်",
+       "randomincategory": "အ်ုဆုဂ်ဍွယ်ဖိုင် ဆ်ုတံင်ဏံင်းလိက်မေံၜၠါ်",
        "statistics": "စ်ုရင့်ကါင်ကါ",
        "double-redirect-fixer": "ထါင်ၮဲအ်ုထိုဝ်အင်းတင်ဆာ",
        "brokenredirects-delete": "ထုဂ်ဆိင့်",
        "exif-colorspace": "အ်ုယံင့်လင်ခၠာ",
        "exif-datetimeoriginal": "ဒ်ှတာအင်းတင်ဖှ်ေ မူႋသင့်လ်ု အ်ုခါ့",
        "exif-datetimedigitized": "တ်ုဂျတယ်အင်းလယ် မူႋသင့်လ်ုအ်ုခါ့",
+       "exif-objectname": "ခေါဟ်တင်ဖူး",
+       "exif-headline": "မေါဝ်ႋတိုင်",
        "exif-orientation-1": "ဟ်ုအ်ှသှ်ေ",
        "exif-lightsource-2": "မှ်ေထေဝ် အ်ုဖါန်ႋၯာင်ႋ",
        "exif-gaincontrol-0": "အှ်ဏင်မိင်အေ",
index d8e4f84..3550919 100644 (file)
@@ -72,7 +72,8 @@
                        "Nuevo Paso",
                        "Doyoon1995",
                        "Jay94ks",
-                       "Ryuch"
+                       "Ryuch",
+                       "Delim"
                ]
        },
        "tog-underline": "링크에 밑줄 긋기:",
        "rawhtml-notallowed": "&lt;html&gt; 태그는 일반 페이지 밖에서는 사용할 수 없습니다.",
        "gotointerwiki": "{{SITENAME}}을(를) 떠납니다",
        "gotointerwiki-invalid": "지정된 제목이 올바르지 않습니다.",
-       "gotointerwiki-external": "ë\8b¤ë¥¸ ì\9b¹ì\82¬ì\9d´í\8a¸ [[$2]]ì\9d\84(를) ë°©ë¬¸í\95\98기 ì\9c\84í\95´, {{SITENAME}}ì\9d\84(를) ë\96 ë\82\98려고 í\95©ë\8b\88ë\8b¤.\n\n'''[$1 $1(ì\9c¼)ë¡\9c ê³\84ì\86\8d ì§\84í\96\89]'''",
+       "gotointerwiki-external": "ë³\84ê°\9cì\9d\98 [[$2]] ì\82¬ì\9d´í\8a¸ë¥¼ ë°©ë¬¸í\95\98기 ì\9c\84í\95´, {{SITENAME}} ì\82¬ì\9d´í\8a¸ë¥¼ ë\96 ë\82\98려고 í\95©ë\8b\88ë\8b¤.\n\n'''[$1 $1 ì\82¬ì\9d´í\8a¸ë¡\9c ê°\80기]'''",
        "undelete-cantedit": "이 문서를 편집할 권한이 없으므로 이 문서를 복구할 수 없습니다.",
        "undelete-cantcreate": "이 이름으로 된 문서가 없고 이 문서를 만들 권한이 없으므로 이 문서를 복구할 수 없습니다.",
        "pagedata-title": "문서 데이터",
index 56967aa..1cd139f 100644 (file)
@@ -16,7 +16,8 @@
                        "S4b1nuz E.656",
                        "Luensu1959",
                        "Feipìn",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Ruthven"
                ]
        },
        "tog-underline": "Sotolìnnia i colegaménti",
        "searchprofile-everything-tooltip": "Çerca in ògni dove (anche inte pàgine de discusción)",
        "searchprofile-advanced-tooltip": "Çerca inti namespace personalizæ",
        "search-result-size": "$1 ({{PLURAL:$2|1 paròlla|$2 paròlle}})",
-       "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utenti}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 file}})",
+       "search-result-category-size": "{{PLURAL:$1|1 elemento|$1 elementi}} ({{PLURAL:$2|1 sottocategoria|$2 sottocategorie}}, {{PLURAL:$3|1 file|$3 file}})",
        "search-redirect": "(Rendriçço da $1)",
        "search-section": "(seçión $1)",
        "search-category": "(categoria $1)",
index ab71fe3..8a70ae1 100644 (file)
        "prefs-displayrc": "दृश्य विकल्पसभ",
        "prefs-displaywatchlist": "दृश्य विकल्पसभ",
        "prefs-changesrc": "बदलेलहा देखाल",
+       "prefs-changeswatchlist": "बदलेलहा देखाल",
+       "prefs-pageswatchlist": "देखेल पन्नासभ",
        "prefs-tokenwatchlist": "टोकन",
        "prefs-diffs": "अन्तर",
        "prefs-help-prefershttps": "इ प्राथमिकता अहाँके फेर स सम्प्रवेश करलाक बाद प्रभाव पडत।",
        "userrights-user-editname": "एकटा प्रयोक्तानाम लिखी:",
        "editusergroup": "प्रयोगकर्ता समूह देखालजाय",
        "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 क अधिकार बदलि\n{{GENDER:$1|सदस्य}}क सदस्य अधिकार बदलल जा रहल अछि <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "सदस्य '''[[User:$1|$1]]''' $2 क अधिकार बदलि\n{{GENDER:$1|सदस्य}}क सदस्य अधिकार बदलल जा रहल अछि <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "प्रयोगकर्ता समूह सम्पादित करी",
+       "userrights-viewusergroup": "{{GENDER:$1|प्रयोक्ता}} समूह देखी",
        "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सङ्ग्रह करी",
        "userrights-groupsmember": "क सदस्य:",
        "userrights-groupsmember-auto": "क जानल सदस्य:",
        "userrights-changeable-col": "वर्ग जे अहाँ बदलि सकै छी",
        "userrights-unchangeable-col": "वर्ग जे अहाँ नै बदलि सकै छी",
        "userrights-irreversible-marker": "$1*",
+       "userrights-expiry-current": "खतम होइए $1",
+       "userrights-expiry-none": "खतम नै हएत:",
+       "userrights-expiry": "खतम हएत:",
+       "userrights-expiry-existing": "अखुनका खतम हेबाक समए : $3, $2",
+       "userrights-expiry-othertime": "दोसर समए:",
        "userrights-conflict": "प्रयोक्ता अधिकार बदलावक समयमे अंतर्विरोध! कृपया अपन बदलाव जाँच करु आ पुनः सुनिश्चित करु।",
        "group": "समूह:",
        "group-user": "प्रयोक्तासभ",
        "recentchanges-submit": "देखाबी",
        "rcfilters-tag-remove": "$1 हटा",
        "rcfilters-legend-heading": "<strong>सङ्केतक सूची:</strong>",
+       "rcfilters-activefilters": "सक्रिय फिल्टर",
        "rcfilters-activefilters-hide": "नुकाबी",
        "rcfilters-activefilters-show": "देखाबी",
+       "rcfilters-advancedfilters": "उन्नत फ़िल्टर",
        "rcfilters-limit-title": "परिणाम देखाबी",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन सभ}}, $2",
        "rcfilters-days-title": "कुछ दिन के",
        "rcfilters-hours-title": "कुछ समय",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|दिन}} पहिने",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|घंटा}} पहिने",
+       "rcfilters-highlighted-filters-list": "पर प्रकाश करल:$1",
        "rcfilters-quickfilters": "फ़िल्टर संरक्षण करू",
        "rcfilters-savedqueries-defaultlabel": "फ़िल्टर संरक्षण करू",
        "rcfilters-savedqueries-rename": "नाम बदलु",
        "rcfilters-savedqueries-apply-label": "फ़िल्टर बनाबु",
        "rcfilters-savedqueries-cancel-label": "रद्द करु",
        "rcfilters-clear-all-filters": "फ़िल्टरसभ मिटाबु",
+       "rcfilters-invalid-filter": "अमान्य फ़िल्टर",
        "rcfilters-filterlist-title": "चलनीसभ",
        "rcfilters-highlightmenu-title": "रंग चुनु",
        "rcfilters-filtergroup-authorship": "लेखक योगदान",
        "rcfilters-filter-user-experience-level-experienced-label": "अनुभवी सदस्यसभ",
        "rcfilters-filter-bots-label": "स्वचालक",
        "rcfilters-filter-bots-description": "स्वचालित औजार से करलहा सम्पादनसभ।",
+       "rcfilters-filter-humans-label": "मानव (बॉट नैछि)",
        "rcfilters-filtergroup-reviewstatus": "पुनरीक्षण स्थिति",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "अपरीक्षित",
        "rcfilters-filter-reviewstatus-auto-label": "सवापरिक्षित",
        "rcfilters-filtergroup-significance": "महत्व",
        "rcfilters-filter-minor-label": "छोट सम्पादन",
+       "rcfilters-filtergroup-watchlist": "देखेल पन्नासभ",
        "rcfilters-filter-watchlist-watched-label": "साकांक्षसूची",
+       "rcfilters-filter-watchlist-watchednew-label": "नया ध्यानसूची बदलाव",
+       "rcfilters-filter-watchlist-notwatched-label": "ध्यानसूची में नैछि",
        "rcfilters-filter-watchlistactivity-unseen-label": "परिवर्तन सभ चुनु",
        "rcfilters-filter-watchlistactivity-seen-label": "परिवर्तन सभ चुनु",
        "rcfilters-filtergroup-changetype": "बदल क प्रकार:",
        "rcfilters-filter-pageedits-label": "पन्नाक संपादनसभ",
        "rcfilters-filter-newpages-label": "प्रयोक्ता रचना लग",
+       "rcfilters-filter-categorization-label": "श्रेणी परिवर्तन",
        "rcfilters-filtergroup-lastRevision": "नूतन संशोधन",
        "rcfilters-filter-lastrevision-label": "नूतन संशोधन",
        "rcfilters-filter-excluded": "अपवर्जित",
+       "rcfilters-tag-prefix-namespace-inverted": " $1 <strong>:नैछि</strong>",
        "rcfilters-view-tags": "पन्नाक संपादनसभ",
        "rcfilters-liveupdates-button": "अखुनका अद्यतन",
        "rcfilters-target-page-placeholder": "पृष्ठ(अथवा श्रेणी) क नाम भरू",
        "uploadstash-errclear": "फाइलसभके साफ करनाए असफल रहल।",
        "uploadstash-refresh": "संचिका सभक सूचीकेँ ताजा करू।",
        "uploadstash-thumbnail": "छवि देखी",
+       "uploadstash-bad-path": "पथ नै अछि ।",
        "uploadstash-bad-path-unknown-type": "अज्ञात क्रिया \"$1\" ।",
        "uploadstash-no-extension": "आयतन शून्य छि|",
        "invalid-chunk-offset": "एकट्ठे अमान्य बौस्तु",
        "apisandbox-helpurls": "सहायता कड़ी",
        "apisandbox-examples": "उदाहरण",
        "apisandbox-dynamic-parameters": "काम मानकसभ",
+       "apisandbox-dynamic-parameters-add-label": "प्राचल जोडु:",
+       "apisandbox-dynamic-parameters-add-placeholder": "प्राचल नाम",
+       "apisandbox-fetch-token": "टोकन स्वतः भरू",
        "apisandbox-add-multi": "जोडू",
        "apisandbox-results": "परिणाम",
+       "apisandbox-sending-request": "एपीआई अनुरोध पठाअछि...",
+       "apisandbox-loading-results": "एपीआई परिणाम देखाछि...",
        "apisandbox-request-url-label": "अनुरोध URL:",
+       "apisandbox-request-json-label": "JSON अनुरोध:",
        "apisandbox-request-time": "अनुरोध समय: {{PLURAL:$1|$1 मिसे}}",
        "apisandbox-continue": "आगु चलु →",
        "apisandbox-continue-clear": "खाली करू",
        "apisandbox-multivalue-all-namespaces": "$1 (सभ नामस्थान)",
+       "apisandbox-multivalue-all-values": "$1 (सभ मूल्य)",
        "booksources": "किताबक स्रोत",
        "booksources-search-legend": "किताबक स्रोत ताकी",
        "booksources-isbn": "आइ.एस.बी.एन.:",
        "cachedspecial-refresh-now": "लब्का देखु",
        "categories": "श्रेणीसभ",
        "categories-submit": "देखाबी",
-       "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\n[[Special:UnusedCategories|अप्रयुक्त श्रेणीसभ]] एतए देखाएल नै अछि।\nईहो देखू [[Special:WantedCategories|आवश्यक श्रेणीसभ]]।",
+       "categoriespagetext": "ई {{PLURAL:$1|संवर्गमे अछि|संवर्ग सभमे अछि}} पन्ना वा मीडिया।\nईहो देखू [[Special:WantedCategories|आवश्यक श्रेणीसभ]]।",
        "categoriesfrom": "पन्ना प्रदर्शन प्रारम्भ भेल:",
        "deletedcontributions": "मेटाएल प्रयोक्ता योगदान",
        "deletedcontributions-title": "मेटाएल प्रयोक्ता योगदान",
        "deletepage": "पन्ना मेटाउ",
        "confirm": "पक्का छी",
        "excontent": "विषय छल:\"$1\"",
-       "excontentauthor": "पाठ छल:\"$1\" (आ एकमात्र योगदान दैबला छल \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|वार्ता]])",
+       "excontentauthor": "पाठ छल:\"$1\" आ एकमात्र योगदान दैबला छल \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|वार्ता]])",
        "exbeforeblank": "खतम होएबाक पहिने पाठ छल:\"$1\"",
        "delete-confirm": "$1 के मेटाबी",
        "delete-legend": "मेटाबी",
        "editcomment": "सम्पादन सार छल : <em>$1</em>।",
        "revertpage": "सम्पादन आपस कएल गेल [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) सँ अन्तिम संशोधन धरि एकरा द्वारा [[User:$1|$1]]।",
        "revertpage-nouser": "(प्रयोक्ताक नाम हटा देल गेल अछि) द्वारा केल गेल संपादनकेँ फेरसँ पुरान स्थितिमे आनि कऽ एकर पहिलुक [[User:$1|$1]] सँ बनल संस्करणकेँ फेरसँ ताजा संस्करण बनाऊ।",
-       "rollback-success": "$1 केर सम्पादन हटाबी। \n$2 केर सम्पादित आखिरी अवतरणक पुनर्स्थापित करल गेल।",
+       "rollback-success": "{{GENDER:$3|$1}} क संपादन हटाबी;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण क पुनर्स्थापित करू।",
        "rollback-success-notify": "$1द्वारा पूर्ववत सम्पादन;\n$2द्वारा केल अन्तिम अवतरण पर वापस। [$3 परिवर्तन देखाबी]",
        "sessionfailure-title": "सत्र विफल भ गेल",
        "sessionfailure": "एहन लागैत अछि जे अहां के लागिन सत्र में कोनो त्रुटि अछि. सत्र अपहरण से बचाबय  सं सावधानीक लेल अहां के अहि क्रियाकलाप क रद्द क देल गेल. अहां पाछां के पृष्ठ पर जौउ आ पृष्ठ के फेर सं लोड क दोबारा कोशिश करू.",
        "import-mapping-namespace": "कोनो नामस्थान पर आयात करी",
        "import-mapping-subpage": "निम्न लिखित पृष्ठके उपपृष्ठक रूपमे आयात करी:",
        "import-upload-filename": "संचिकानाम:",
+       "import-upload-username-prefix": "इंटरविकी उपसर्ग:",
        "import-comment": "समीक्षा:",
        "importtext": "मूल विकी [[Special:Export|export utility]] क प्रयोग कऽ संचिका पठाउ।\nअपन संगणकमे एकरा सुरक्षित करू आ एतए उपारोपित करू।",
        "importstart": "पन्ना सभकेँ आनि रहल छी...",
        "pageinfo-category-subcats": "उपसंवर्ग के संख्या",
        "pageinfo-category-files": "फाइल सभके संख्या",
        "pageinfo-user-id": "प्रयोक्ता आई॰डी॰",
+       "pageinfo-file-hash": "हैश मान",
        "markaspatrolleddiff": "जाँच सम्पन्न करी",
        "markaspatrolledtext": "देखि लेल गेल, एहन चिन्ह लगाऊ",
        "markaspatrolledtext-file": "ई फाइल संस्करणके जांचल चिन्हित करी",
        "confirmrecreate": "प्रयोगकर्ता [[User:$1|$1]] ([[User talk:$1|वार्ता]]) अहाँक कारण सहित सम्पादनक बाद ई पन्नाके मेटाए देलक:\n: ''$2''\nकृपा कऽ अहाँ सुनिश्चित करी जे अहाँ ई पन्नाक फेरसँ बनबऽ चाहै छी।",
        "confirmrecreate-noreason": "प्रयोक्ता [[User:$1|$1]] ([[User talk:$1|वार्ता]]) अहाँक सम्पादनक बाद ऐ पन्नाकेँ मेटा देलक| कृपा कऽ अहाँ सुनिश्चित करू जे अहाँ ऐ पन्नाकेँ फेरसँ बनबऽ चाहै छी।",
        "recreate": "फेर सँ बनाबी",
+       "confirm-purge-title": "पृष्ठ ताजा करू",
        "confirm_purge_button": "ठीक अछि",
        "confirm-purge-top": "ऐ पन्नाक उपस्मृति खतम कऽ दिअ?",
        "confirm-purge-bottom": "कोनो पन्नाक सफाइ उपस्मृतिकेँ खतम करैए आ अद्यतन संशोधनकेँ अएबाले जोर दैए।",
        "compare-title-not-exists": "जे शीर्षक अहाँ कहलौं से अछिये नै।",
        "compare-revision-not-exists": "जे संशोधन अहाँ कहलौं से अछिये नै।",
        "diff-form": "अन्तर",
+       "diff-form-oldid": "पुरना संशोधन (वैकल्पिक)",
        "diff-form-submit": "(कोनो अंतर नै)",
        "permanentlink": "स्थायी लिङ्क",
        "permanentlink-revid": "संशोधन",
        "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
        "htmlform-title-not-exists": "$1 अस्तित्व में नै अछि",
        "htmlform-user-not-exists": "'''$1''' नै अछि।",
+       "htmlform-user-not-valid": "<strong>$1</strong> मान्य सदस्य नाम नै अछि।",
        "logentry-delete-delete": "$1 पृष्ठ $3 {{GENDER:$2|मेटौलक}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
        "logentry-delete-restore-nocount": "$1 {{GENDER:$2|दबाएल}} page $3",
        "logentry-newusers-byemail": "$1 द्वारा प्रयोक्ता खाता $3 {{GENDER:$2|बनाओल}} गेल आ कूटशब्द ई-पत्र द्वारा भेजल गेल",
        "logentry-newusers-autocreate": "खाता $1 छल {{GENDER:$2|बनाएल}} स्वतः",
        "logentry-upload-upload": "$1 {{GENDER:$2|ए}} $3 अपलोड केलक",
-       "logentry-managetags-create": "$1 {{GENDER:$2|दबाएल}} page $3",
+       "logentry-managetags-create": "$1 {{GENDER:$2 बनाएल}} टैग $4",
        "log-name-tag": "ट्याग लौग",
        "rightsnone": "(कोनो नै)",
+       "rightslogentry-temporary-group": "$1 (अस्थाई, $2 तक)",
        "feedback-adding": "पन्ना उपर प्रतिक्रिया जोडु ...",
        "feedback-back": "पाछां",
        "feedback-bugcheck": "बहुत निक! जांच करु कि [ $1 known bugs] पहिले स त नै अछि ।",
        "feedback-bugnew": "हम जाँच केलौ। एक नव बग रिपोर्ट करी",
        "feedback-cancel": "रद्द करी",
        "feedback-close": "भ गेल",
+       "feedback-external-bug-report-button": "तकनीकी काम क जोड़",
+       "feedback-dialog-title": "प्रतिपुष्टि पठाबी",
        "feedback-error1": "त्रुटि: नै पहचानल गेल परिणाम एपीआईसँ",
        "feedback-error2": "त्रुटि: संपादन विफल भेल",
        "feedback-error3": "त्रुटि:एपीआईसँग कोनो प्रतिक्रिया नै",
+       "feedback-error4": "त्रुटि: दिएल गलहा प्रतिपुष्टि शीर्षक नै जाेडल गेल",
        "feedback-message": "सन्देश:",
        "feedback-subject": "विषय:",
        "feedback-submit": "दिअ",
        "duration-days": "$1 {{PLURAL:$1|दिन}} पहिने",
        "duration-weeks": "{{PLURAL:$1|सप्ताह|सप्ताहसभ}}",
        "duration-years": "{{PLURAL:$1|वर्ष|वर्षमे}}",
+       "limitreport-cputime": "सी०पी०यू० समय क प्रयोग",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|सॅकेंड|सॅकेंडसभ}}",
+       "limitreport-walltime": "रियल टाइम प्रयोग",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|सॅकेंड|सॅकेंडसभ}}",
+       "limitreport-ppgeneratednodes": "प्रिप्रोसेसर द्वारा जारी नोड क गिनती",
+       "limitreport-postexpandincludesize": "विस्तार उपरांत विकिपाठ आकार",
+       "limitreport-postexpandincludesize-value": "$1 {{PLURAL:$1|बाइट|बाइट्स}}",
+       "limitreport-templateargumentsize": "ढाचा प्राचल आकार",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}",
+       "limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
+       "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}",
+       "expandtemplates": "ढाचा विस्तार",
+       "expand_templates_input": "विकिपाठ्य इनपुट करू:",
        "expand_templates_output": "परिणाम",
        "expand_templates_xml_output": "XML आउटपुट",
        "expand_templates_ok": "ठीक अछि",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदलि देल गेल}} पृष्ठ भाषा $3 क लेल $4 सँ $5।",
        "mediastatistics": "मिडिया तथ्याङ्क",
        "mediastatistics-table-mimetype": "माइम प्रकार",
+       "mediastatistics-table-extensions": "सम्भवतः विस्तार",
        "mediastatistics-table-count": "फाइल सभके संख्या",
+       "mediastatistics-table-totalbytes": "संयुक्त साइज़",
        "mediastatistics-header-unknown": "अज्ञात",
+       "mediastatistics-header-bitmap": "बिटमैप चित्र",
+       "mediastatistics-header-drawing": "चित्र (वेक्टर चित्रसभ)",
        "mediastatistics-header-audio": "ऑडियो",
        "mediastatistics-header-video": "भिडियो",
+       "mediastatistics-header-office": "ऑफ़िस",
+       "mediastatistics-header-text": "पाठ",
+       "mediastatistics-header-executable": "निष्पादनसभ",
+       "mediastatistics-header-archive": "संकुचित प्रारूप",
        "mediastatistics-header-total": "सभ फ़िल्टर",
+       "json-error-syntax": "सिन्टॅक्स त्रुटि",
        "special-characters-group-latin": "ल्याटिन",
        "special-characters-group-latinextended": "ल्याटिन विस्तारित",
        "special-characters-group-ipa": "आइपीए",
        "special-characters-title-endash": "एन डैश",
        "special-characters-title-emdash": "एम डैश",
        "special-characters-title-minus": "ऋण चिह्न",
+       "mw-widgets-abandonedit-discard": "सम्पादन रद्द करू",
+       "mw-widgets-abandonedit-keep": "सम्पादन जारी राखु",
+       "mw-widgets-abandonedit-title": "निश्चित ?",
+       "mw-widgets-dateinput-no-date": "कियो नै चुनाएल",
+       "mw-widgets-mediasearch-input-placeholder": "मीडिया खाेजु",
+       "mw-widgets-mediasearch-noresults": "कोनाे परिणाम नै मिलल",
+       "mw-widgets-titleinput-description-new-page": "पृष्ठ मौजूद नै अछि",
+       "mw-widgets-titleinput-description-redirect": "अनुप्रेषित $1",
        "mw-widgets-categoryselector-add-category-placeholder": "श्रेणी जोड़",
        "mw-widgets-usersmultiselect-placeholder": "और जोड़ु",
        "mw-widgets-titlesmultiselect-placeholder": "और जोड़ु",
        "date-range-from": "दिन से (शुरू):",
        "date-range-to": "दिन तक (समाप्त):",
        "sessionprovider-generic": "$1 सत्र",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "कुकी-आधारित सत्र",
        "randomrootpage": "अविशिष्ट मूल पृष्ठ",
        "log-action-filter-block": "प्रतिबन्धक प्रकार:",
        "log-action-filter-delete": "मेटबैक प्रकार:",
        "log-action-filter-patrol": "परीक्षणक प्रकार:",
        "log-action-filter-protect": "सुरक्षाक प्रकार:",
        "log-action-filter-rights": "अधिकार परिवर्तनक प्रकार:",
+       "log-action-filter-suppress": "दमन क प्रकार:",
+       "log-action-filter-upload": "अपलोड क प्रकार:",
        "log-action-filter-all": "सभटा",
        "log-action-filter-block-block": "अवरोध",
        "log-action-filter-block-reblock": "अवरोध परिवर्तन",
        "log-action-filter-block-unblock": "अवरोधरहित",
        "log-action-filter-contentmodel-change": "सामग्रीक नमूना परिवर्तन",
+       "log-action-filter-delete-delete": "पृष्ठ हटाबी",
+       "log-action-filter-delete-delete_redir": "पुननिर्देशित ओभरराइट",
+       "log-action-filter-delete-event": "पृष्ठ हटाबी",
        "log-action-filter-delete-revision": "खाली मेटाएल",
+       "log-action-filter-import-interwiki": "अंतरविकि आयात",
        "log-action-filter-managetags-create": "प्रयोक्ता रचना लग",
+       "log-action-filter-managetags-delete": "टैग हटाबी",
+       "log-action-filter-managetags-activate": "टैग सक्रियण",
+       "log-action-filter-managetags-deactivate": "टैग निष्क्रियकरण",
        "log-action-filter-newusers-create": "अज्ञात सदस्य द्वारा निर्मित",
        "log-action-filter-newusers-autocreate": "स्वचालित निर्माण",
+       "log-action-filter-patrol-patrol": "सदस्य द्वारा पुनरीक्षण",
+       "log-action-filter-patrol-autopatrol": "स्वतः पुनरीक्षण",
        "log-action-filter-protect-protect": "सुरक्षा",
        "log-action-filter-protect-modify": "सुरक्षा परिवर्तन",
        "log-action-filter-protect-unprotect": "असुरक्षा",
        "log-action-filter-protect-move_prot": "पन्ना संरक्षण",
+       "log-action-filter-rights-rights": "मैनुअल परिवर्तन",
        "log-action-filter-rights-autopromote": "स्वतः परिवर्तन",
        "log-action-filter-suppress-event": "लॉग अवरोध",
        "log-action-filter-suppress-revision": "संशोधन अवरोध",
        "log-action-filter-suppress-delete": "पृष्ठ अवरोध",
        "log-action-filter-upload-upload": "नया अपलोड",
+       "log-action-filter-upload-overwrite": "फैनसे अपलोड",
        "authmanager-create-disabled": "लेखा निर्माण अशक्त कएल",
+       "authmanager-authplugin-setpass-bad-domain": "अमान्य जालस्थल।",
        "authmanager-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
        "authmanager-email-label": "इमेल",
        "authmanager-email-help": "ई-पत्र ठेगान:",
        "authmanager-realname-label": "असली नाम",
        "authmanager-provider-temporarypassword": "तात्कालिक कूटशब्द:",
        "authprovider-resetpass-skip-label": "छाेड",
+       "authform-newtoken": "टोकन नै अछि । $1",
+       "authform-notoken": "टोकन नै अछि",
        "authform-wrongtoken": "गलत टोकन",
+       "specialpage-securitylevel-not-allowed-title": "अनुमति नै अछि",
+       "authpage-cannot-create": "खाता निर्माण में अक्षम छि।",
        "cannotauth-not-allowed-title": "अनुमति नै मिलली।",
        "changecredentials": "साख बदल",
        "changecredentials-submit": "साख बदल",
        "removecredentials": "परिचय निकाल",
+       "removecredentials-submit": "परिचय निकाल",
        "credentialsform-provider": "परिचय प्रकार :",
        "credentialsform-account": "खाता क नाम:",
+       "linkaccounts": "जाेडल खातासभ",
+       "linkaccounts-success-text": "खाता जाेडल गेल।",
+       "linkaccounts-submit": "जाेडल खातासभ",
+       "unlinkaccounts": "खाता सभ जोडू",
+       "unlinkaccounts-success": "खाता अलग करल गेल।",
        "restrictionsfield-badip": "अमान्य अनिकेत क्षेत्र: $1",
+       "restrictionsfield-label": "अनुमत आईपी सीमा:",
        "edit-error-short": "त्रुटि: $1",
        "edit-error-long": "त्रुटि:\n\n$1",
        "revid": "संशोधन $1",
        "pageid": "पेज आईडी $1",
+       "gotointerwiki": "आहा {{SITENAME}} स बाहार जायछि",
+       "gotointerwiki-invalid": "देल शीर्षक अमान्य अछि।",
+       "pagedata-title": "पृष्ठ डाटा",
        "pagedata-bad-title": "अवैध शीर्षक: $1.",
        "passwordpolicies-group": "समूह",
        "passwordpolicies-policies": "राजनीति",
index b9b6c35..7c2ad50 100644 (file)
        "createacct-reason": "Причина",
        "createacct-reason-ph": "Зошто правите друга сметка",
        "createacct-reason-help": "Порака што се прикажува во дневникот на создадени сметки",
-       "createacct-submit": "Направи ја",
+       "createacct-submit": "Направи ја сметката",
        "createacct-another-submit": "Создај сметка",
        "createacct-continue-submit": "Продолжи со создавањето на сметката",
        "createacct-another-continue-submit": "Продолжи со создавањето на сметката",
        "cannotchangeemail": "На ова вики не може да се менува е-пошта на сметките.",
        "emaildisabled": "Ова мреж. место не може да праќа е-пошта.",
        "accountcreated": "Корисничката сметка е направена",
-       "accountcreatedtext": "Корисничкта сметка за [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|разговор]]) е направена.",
+       "accountcreatedtext": "Корисничката сметка за [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|разговор]]) е направена.",
        "createaccount-title": "Создавање на сметка за {{SITENAME}}",
        "createaccount-text": "Некој направил сметка со вашата е-поштенска адреса на {{SITENAME}} ($4) со име „$2“ и  лозинка „$3“.\nБи требало сега да се пријавите и да ја промените вашата лозинка.\n\nМожете да ја занемарите оваа порака ако сметката била направена по грешка.",
        "login-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
        "blockedtitle": "Корисникот е блокиран",
        "blocked-email-user": "<strong><strong>На вашето корисничко име му е забрането да праќа е-пошта. Можете сепак да уредувате други страници на ова вики.</strong> Сите поединости за забраната ќе ги најдете во [[Special:MyContributions|придонесите на сметката]].\n\nЗабраната ја дал $1.\n\nНаведената причина гласи <em>$2</em>.\n\n* Почеток на забраната: $8\n* Истек на забраната: $6\n* Предвиден забраненик: $7\n* Назнака на забраната #$5",
        "blockedtext-partial": "<strong>На вашето корисничко или IP-адреса му е забрането да прави измени на страницава. Можете сепак да уредувате други страници на ова вики.</strong> Сите поединости за забраната ќе ги најдете во [[Special:MyContributions|придонесите на сметката]].\n\nЗабраната ја дал $1.\n\nНаведената причина гласи <em>$2</em>.\n\n* Почеток на забраната: $8\n* Истек на забраната: $6\n* Предвиден забраненик: $7\n* Назнака на забраната #$5",
-       "blockedtext": "<strong>Вашето корисничко име или IP-адреса е блокирано.</strong>\n\nБлокирањето е направено од страна на $1.\nДаденото образложение е ''$2''.\n\n* Почеток на блокирањето: $8\n* Истекување на блокирањето: $6\n* Корисникот што требало да биде блокиран: $7\n\nМоже да контактирате со $1 или некој друг [[{{MediaWiki:Grouppage-sysop}}|администратор]] за да разговарате во врска со блокирањето.\nМожете да ја искористите можноста „{{int:emailuser}}“ ако е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и не ви е забрането да ја користите.\nВашата сегашна IP-адреса е $3, а назнака на блокирањето гласи #$5.\nВе молиме наведете ги сите подробности прикажани погоре, во вашата евентуална реакција.",
-       "autoblockedtext": "Ð\92аÑ\88аÑ\82а IP-адÑ\80еÑ\81а Ðµ Ð°Ð²Ñ\82омаÑ\82Ñ\81ки Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ð±Ð¸Ð»Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82ена Ð¾Ð´ Ñ\81Ñ\82Ñ\80ана Ð½Ð° Ð´Ñ\80Ñ\83г ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ñ\98 Ð±Ð¸Ð» Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð¾Ð´ $1.\nÐ\94аденоÑ\82о Ð¾Ð±Ñ\80азложение Ðµ Ñ\81ледново:\n\n:<em>$2</em>\n\n* Ð\9fоÑ\87еÑ\82ок Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеÑ\82о: $8\n* Ð\98Ñ\81Ñ\82екÑ\83ваÑ\9aе Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеÑ\82о: $6\n* Ð¡Ð¾ Ð½Ð°Ð¼ÐµÑ\80а Ð´Ð° Ñ\81е Ð±Ð»Ð¾ÐºÐ¸Ñ\80а: $7\n\nÐ\9cоже Ð´Ð° ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\82е Ñ\81о $1 Ð¸Ð»Ð¸ Ð½ÐµÐºÐ¾Ñ\98 Ð´Ñ\80Ñ\83г [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80]] Ð·Ð° Ð´Ð° Ñ\80азговаÑ\80аÑ\82е Ð²Ð¾ Ð²Ñ\80Ñ\81ка Ñ\81о Ð¾Ð²Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÐ±Ð¸ Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¸Ñ\81коÑ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82а â\80\9e{{int:emailuser}}â\80\9c Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ð½Ðµ Ðµ Ð½Ð°Ð·Ð½Ð°Ñ\87ена Ð²Ð°Ð¶ÐµÑ\87ка Ðµ-поÑ\88Ñ\82енÑ\81ка Ð°Ð´Ñ\80еÑ\81а Ð²Ð¾ [[Special:Preferences|ваÑ\88иÑ\82е Ð½Ð°Ð³Ð¾Ð´Ñ\83ваÑ\9aа]] Ð¸ Ð²Ð¸ Ðµ Ð·Ð°Ð±Ñ\80анеÑ\82о ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82еÑ\9aе Ð½Ð° Ð¸Ñ\81Ñ\82аÑ\82а.\n\nÐ\92аÑ\88аÑ\82а IP-адÑ\80еÑ\81а Ðµ $3, a ID Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеto е $5.\nВе молиме наведете ги овие подробности доколку реагирате на блокирањето.",
+       "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Можете да ја искористите можноста „{{int:emailuser}}“ ако е назначена важечка е-поштенска адреса во [[Special:Preferences|вашите нагодувања]] и не ви е забрането да ја користите.\nВашата сегашна IP-адреса е $3, а назнака на блокирањето гласи #$5.\nВе молиме наведете ги сите подробности прикажани погоре, во вашата евентуална реакција.",
+       "autoblockedtext": "Ð\92аÑ\88аÑ\82а IP-адÑ\80еÑ\81а Ðµ Ð°Ð²Ñ\82омаÑ\82Ñ\81ки Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ð±Ð¸Ð»Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82ена Ð¾Ð´ Ñ\81Ñ\82Ñ\80ана Ð½Ð° Ð´Ñ\80Ñ\83г ÐºÐ¾Ñ\80иÑ\81ник, ÐºÐ¾Ñ\98 Ð±Ð¸Ð» Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð¾Ð´ $1.\nÐ\94аденоÑ\82о Ð¾Ð±Ñ\80азложение Ðµ Ñ\81ледново:\n\n:<em>$2</em>\n\n* Ð\9fоÑ\87еÑ\82ок Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеÑ\82о: $8\n* Ð\98Ñ\81Ñ\82екÑ\83ваÑ\9aе Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеÑ\82о: $6\n* Ð¡Ð¾ Ð½Ð°Ð¼ÐµÑ\80а Ð´Ð° Ñ\81е Ð±Ð»Ð¾ÐºÐ¸Ñ\80а: $7\n\nÐ\9cоже Ð´Ð° ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\82е Ñ\81о $1 Ð¸Ð»Ð¸ Ð½ÐµÐºÐ¾Ñ\98 Ð´Ñ\80Ñ\83г [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80]] Ð·Ð° Ð´Ð° Ñ\80азговаÑ\80аÑ\82е Ð²Ð¾ Ð²Ñ\80Ñ\81ка Ñ\81о Ð¾Ð²Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aе.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÐ±Ð¸ Ð½ÐµÐ¼Ð° Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¸Ñ\81коÑ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82а â\80\9e{{int:emailuser}}â\80\9c Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ð½Ðµ Ðµ Ð½Ð°Ð·Ð½Ð°Ñ\87ена Ð²Ð°Ð¶ÐµÑ\87ка Ðµ-поÑ\88Ñ\82енÑ\81ка Ð°Ð´Ñ\80еÑ\81а Ð²Ð¾ [[Special:Preferences|ваÑ\88иÑ\82е Ð½Ð°Ð³Ð¾Ð´Ñ\83ваÑ\9aа]] Ð¸ Ð²Ð¸ Ðµ Ð·Ð°Ð±Ñ\80анеÑ\82о ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\9aе Ð½Ð° Ð¸Ñ\81Ñ\82аÑ\82а.\n\nÐ\92аÑ\88аÑ\82а IP-адÑ\80еÑ\81а Ðµ $3, a Ð½Ð°Ð·Ð½Ð°ÐºÐ° Ð½Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aеÑ\82o е $5.\nВе молиме наведете ги овие подробности доколку реагирате на блокирањето.",
        "systemblockedtext": "Вашето корисничко име или IP-адреса е автоматски блокирано од МедијаВики.\nПонудена причина:\n\n:<em>$2</em>\n\n* Почеток на блокот: $8\n* Истек на блокот: $6\n* Блокот е наменет за: $7\n\nВашата тековна IP-адреса гласи $3.\nПрепишете ги сите горенаведени поединости доколку сакате да се распрашате кај надлежните во врска со блокот.",
        "blockednoreason": "не е наведена причина",
        "whitelistedittext": "Мора да сте $1 за да уредувате страници.",
        "protectedpagewarning": "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "semiprotectedpagewarning": "<strong>Предупредување:</strong> Оваа страница е заштитена, така што може да ја уредуваат само автопотврдени корисници.'''\nЗа ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
        "cascadeprotectedwarning": "<strong>Предупредување:</strong> Оваа страница е заклучена, така што можат да ја уредуваат само корисници со [[Special:ListGroupRights|извесни права]], бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
-       "titleprotectedwarning": "'''Предупредување:'''  Оваа страница е заклучена, така што се потребни [[Special:ListGroupRights|посебни права]] за да се создаде.''''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
+       "titleprotectedwarning": "<strong>Предупредување: Оваа страница е заштитена, така што се потребни [[Special:ListGroupRights|посебни права]] за да се создаде.</strong>\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на страницава:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} на прегледуваната страница:",
        "templatesusedsection": "{{PLURAL:$1|Шаблон|Шаблони}} во прегледуваниот поднаслов:",
        "undo-nochange": "Се чини дека измената (уредувањето) е веќе вратена.",
        "undo-summary": "Откажано уредувањето $1 на уредникот [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
        "undo-summary-username-hidden": "Поништи ја преработката $1 на скриен корисник",
-       "cantcreateaccount-text": "Создавањето на корисничка сметка од оваа IP-адреса ('''$1''') е блокирано од страна на [[User:$3|$3]].\n\nОбразложението дадено од страна на $3 е ''$2''",
+       "cantcreateaccount-text": "Создавањето на корисничка сметка од оваа IP-адреса (<strong>$1</strong>) е блокирано од страна на [[User:$3|$3]].\n\nОбразложението дадено од страна на $3 е <em>$2</em>",
        "cantcreateaccount-range-text": "Создавањето на сметки од IP-адреси во опсегот <strong>$1</strong> каде спаѓа вашата IP-адреса (<strong>$4</strong>) е блокирано од корисникот [[User:$3|$3]].\n\n$3 ја наведе следнава причина: <em>$2</em>",
        "viewpagelogs": "Преглед на дневници за оваа страница",
        "nohistory": "Страницата нема историја на уредување.",
index e2f48aa..f325592 100644 (file)
        "protectedtitles-submit": "തലക്കെട്ടുകൾ പ്രദർശിപ്പിക്കുക",
        "listusers": "ഉപയോക്താക്കളുടെ പട്ടിക",
        "listusers-editsonly": "തിരുത്തുകൾ ചെയ്തിട്ടുള്ള ഉപയോക്താക്കളെ മാത്രം കാണിക്കുക",
+       "listusers-temporarygroupsonly": "താത്കാലിക ഉപയോക്തൃസംഘങ്ങളിലുള്ള ഉപയോക്താക്കളെ മാത്രം പ്രദർശിപ്പിക്കുക",
        "listusers-creationsort": "സൃഷ്ടിക്കപ്പെട്ട തീയതി അനുസരിച്ച് ക്രമീകരിക്കുക",
        "listusers-desc": "അവരോഹണക്രമത്തിൽ ആക്കുക",
        "usereditcount": "{{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}",
        "listgrouprights-namespaceprotection-namespace": "നാമമേഖല",
        "listgrouprights-namespaceprotection-restrictedto": "ഉപയോക്താവിന് ഉപയോഗിക്കാവുന്ന അവകാശം (അവകാശങ്ങൾ)",
        "listgrants": "അനുമതികൾ",
+       "listgrants-summary": "ഉപയോക്തൃ അവകാശങ്ങളുമായി ബന്ധപ്പെടുത്തിയുള്ള അനുമതികളുടെ പട്ടികയാണ് ഇനിക്കൊടുക്കുന്നത്. ഉപയോക്താക്കൾക്ക് ലഭ്യമായ അനുമതികൾ വീണ്ടും പരിമിതപ്പെടുത്തി, തങ്ങൾക്ക് വേണ്ടി ആപ്ലിക്കേഷനുകൾ പ്രവർത്തിപ്പിക്കാൻ ഉപയോക്താക്കൾക്ക് കഴിയുന്നതാണ്. ഒരു ഉപയോക്താവിന് വേണ്ടി പ്രവർത്തിക്കുന്ന ആപ്ലിക്കേഷന് ഉപയോക്താവിന് ലഭ്യമല്ലാത്ത ഒരു ഉപയോക്തൃ അവകാശം ഉപയോഗിക്കാൻ കഴിയുന്നതല്ല.\nവ്യക്തിഗത അവകാശങ്ങളെ കുറിച്ച് [[{{MediaWiki:Listgrouprights-helppage}}|അധിക വിവരങ്ങൾ]] ലഭ്യമായേക്കാവുന്നതാണ്.",
        "listgrants-grant": "അനുമതി",
        "listgrants-rights": "അവകാശങ്ങൾ",
        "trackingcategories": "പിന്തുടരൽ വർഗ്ഗങ്ങൾ",
index 4096af6..de78a5f 100644 (file)
        "returnto": "$1 ꯗꯥ ꯍꯟꯂꯨ",
        "tagline": "{{SITENAME}} ꯗꯒꯤ",
        "help": "ꯃꯇꯦꯡ",
+       "help-mediawiki": "ꯃꯦꯗꯤꯌꯥꯋꯤꯀꯤ ꯃꯇꯥꯡꯗ ꯃꯇꯦꯡ",
        "search": "ꯊꯤꯕꯥ",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nꯂꯧꯔꯛꯐꯝꯁꯤꯡ\nꯃꯄꯥꯟꯒꯥ ꯁꯝꯅꯕꯁꯤꯡ\nꯁꯤꯖꯨ ꯌꯦꯡꯉꯨ\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "ꯊꯤꯕꯥ",
        "ns-specialprotected": "ꯑꯈꯟꯅꯕꯥ ꯂꯥꯃꯥꯏꯅꯤ ꯁꯦꯝꯗꯣꯛꯄꯥ ꯌꯥꯗꯦ",
        "titleprotected": "ꯃꯁꯤꯒꯤ ꯃꯃꯤꯡ ꯁꯤ ꯉꯥꯛꯊꯣꯛꯂꯦ ꯁꯥꯒꯠꯂꯛꯄꯗꯥ [[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": "ꯃꯃꯤꯡꯁꯤ ꯂꯩꯇꯦ",
        "invalidtitle-knownnamespace": "Invalid title with namespace \"$2\" and text \"$3\"",
        "invalidtitle-unknownnamespace": "Invalid title with unknown namespace number $1 and text \"$2\"",
        "exception-nologin": "ꯂꯦꯒ ꯏꯟ ꯇꯧꯗꯦ",
        "postedit-confirmation-published": "ꯅꯪꯒꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯐꯣꯡꯗꯣꯛꯈꯔꯦ ꯫",
        "edit-already-exists": "ꯃꯔꯤꯒꯤ ꯂꯃꯥꯏ ꯑꯁꯤ ꯁꯦꯝꯕ ꯌꯥꯔꯥꯔꯣꯏ ꯍꯥꯅꯗꯒꯤ ꯂꯩꯔꯦ ꯫",
        "defaultmessagetext": "ꯄꯥꯎꯖꯦꯜ ꯋꯥꯍꯩ ꯋꯥꯇꯥ ꯑꯃꯥ ꯍꯦꯛꯇꯥ",
+       "slot-name-main": "ꯃꯔꯨꯑꯣꯏꯕ",
        "content-model-wikitext": "ꯋꯤꯀꯤ ꯋꯥꯍꯩ ꯋꯥꯇꯥ",
+       "content-model-text": "ꯑꯆꯝꯕ ꯋꯥꯍꯩ ꯋꯥꯇꯥ",
        "content-model-javascript": "ꯖꯥꯕꯥ ꯃꯌꯦꯛ",
        "content-json-empty-object": "ꯑꯍꯥꯡꯕꯥ ꯄꯣꯠꯁꯛ",
        "viewpagelogs": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯅꯧꯅ ꯆꯪꯉꯨ",
+       "currentrev": "ꯈꯨꯋꯥꯏꯗꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛ ꯌꯦꯡꯕꯥ",
        "currentrev-asof": "$1 ꯒꯤ ꯅꯧꯅꯥ ꯑꯃꯨꯛꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ ꯃꯤꯠꯌꯦꯡ",
        "revisionasof": " $1 ꯒꯤ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕ",
        "revision-info": " $1 ꯒꯤ ꯑꯃꯨꯛꯌꯦꯡꯕ {{GENDER:$6|$2}}$7 ꯅꯥ",
        "revdelete-show-file-submit": "ꯍꯣꯏ",
        "revdelete-radio-set": "ꯑꯔꯣꯠꯄ",
        "revdelete-radio-unset": "ꯎꯍꯟꯕ",
+       "revdelete-log": "ꯃꯔꯝ:",
        "pagehist": "ꯂꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ",
        "deletedhist": "ꯀꯛꯊꯠꯈꯤꯕꯒꯤ ꯄꯨꯋꯥꯔꯤ",
        "revdelete-reasonotherlist": "ꯑꯇꯩ ꯃꯔꯝ",
        "mergehistory-from": "ꯂꯃꯥꯏ ꯑꯣꯏꯔꯛꯐꯝ:",
        "mergehistory-into": "ꯂꯃꯥꯏꯒꯤ ꯄꯟꯊꯨꯪꯐꯝ:",
        "mergehistory-list": "ꯄꯎꯋꯥꯔꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯑꯃꯁꯨ ꯑꯃꯁꯨ ꯆꯪꯍꯟꯕ",
+       "mergehistory-fail-invalid-source": "ꯂꯧꯔꯛꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
+       "mergehistory-fail-invalid-dest": "ꯂꯝꯊꯨꯡꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
        "mergehistory-reason": "ꯃꯔꯝ:",
        "mergelog": "ꯂꯣꯒ ꯄꯨꯟꯁꯤꯟꯕ",
        "history-title": "Revision history of \"$1\"",
        "searchresults-title": "Search results for \"$1\"",
        "prevn": "ꯍꯥꯟꯅꯒꯤ {{PLURAL:$1|$1}}",
        "nextn": "ꯃꯥꯊꯪ{{PLURAL:$1|$1}}",
+       "prev-page": "ꯃꯃꯥꯡꯒꯤ ꯂꯃꯥꯏ",
+       "next-page": "ꯃꯊꯪ ꯂꯃꯥꯏ",
        "prevn-title": "ꯃꯃꯥꯡꯒꯤ $1 {{PLURAL:$1|result|results}}",
        "nextn-title": "ꯃꯊꯪ $1 {{PLURAL:$1|ꯐꯣꯜ|ꯐꯣꯜꯁꯤꯡ}}",
        "shown-title": "ꯎꯠꯂꯨ $1 {{PLURAL:$1|result|results}} ꯂꯃꯥꯏ ꯑꯃꯝ ꯑꯃꯝꯒꯤ ꯑꯣꯏꯅꯥ",
        "searchprofile-everything-tooltip": "ꯃꯁꯤꯗ ꯌꯥꯎꯔꯤꯕꯁꯤ ꯂꯣꯏꯅ ꯊꯤꯌꯨ(ꯉꯥꯡꯐꯝ ꯂꯃꯥꯏꯁꯤꯡ ꯌꯥꯎꯅꯥ)",
        "searchprofile-advanced-tooltip": "ꯀꯁꯇꯝꯒꯤ ꯃꯤꯡ ꯏꯕꯝ ꯗꯒꯤ ꯊꯤꯌꯨ",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
+       "search-result-category-size": "{{PLURAL:$1|1 ꯈꯣꯡꯕꯨ|$1 ꯈꯣꯡꯕꯨꯁꯤꯡ}} ({{PLURAL:$2|1 ꯃꯆꯥꯈꯥꯏꯕ ꯃꯆꯥ|$2 ꯃꯆꯥꯈꯥꯏꯕ ꯃꯆꯥꯁꯤꯡ}}, {{PLURAL:$3|1 ꯐꯥꯏꯜ|$3 ꯐꯥꯏꯜꯁꯤꯡ}})",
        "search-redirect": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
        "search-section": "(section $1)",
+       "search-category": "(ꯃꯆꯥꯈꯥꯏꯕ $1)",
        "search-file-match": "(ꯐꯥꯏꯜ ꯒꯤ ꯌꯥꯎꯕꯁꯤ ꯆꯥꯟꯅꯔꯦ)",
        "search-suggest": "$1 ꯁꯤꯔꯥ ꯅꯪꯅꯥ ꯍꯥꯏꯅꯤꯡꯂꯤꯕꯥꯁꯤ",
+       "search-interwiki-more": "(ꯋꯥꯠꯂꯤ)",
        "search-interwiki-more-results": "ꯑꯍꯦꯟꯕ ꯐꯣꯜ ꯁꯤꯡ",
        "search-relatedarticle": "ꯃꯔꯤꯂꯩꯅꯔꯦ",
        "searchrelated": "ꯃꯔꯤꯂꯩꯅꯔꯦ",
        "searchall": "ꯄꯨꯂꯞ",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 – $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "ꯃꯁꯤꯒꯤ ꯐꯣꯜꯁꯤꯒꯥ ꯆꯥꯟꯅꯕꯥ ꯂꯩꯇꯦ",
+       "powersearch-legend": "ꯈꯨꯃꯥꯡ ꯆꯥꯎꯁꯤꯟꯅ ꯊꯤꯕꯥ",
        "powersearch-togglelabel": "ꯑꯁꯣꯏ ꯑꯔꯥꯟ ꯌꯥꯎꯕꯔ ꯌꯦꯡꯕ:",
        "powersearch-toggleall": "ꯄꯨꯂꯞ",
        "powersearch-togglenone": "ꯌꯥꯎꯗꯦ",
        "yourrealname": "ꯑꯁꯦꯡꯕ ꯃꯃꯤꯡ:",
        "yourlanguage": "ꯂꯣꯟ:",
        "yournick": "ꯑꯅꯧꯕ ꯈꯨꯠꯌꯦꯛ:",
+       "gender-male": "ꯅꯨꯄꯥ ꯑꯗꯨꯅꯥ ꯋꯤꯀꯤ ꯂꯃꯥꯏꯁꯤꯡ ꯁꯦꯝꯒꯠꯂꯤ",
+       "gender-female": "ꯅꯨꯄꯤ ꯑꯗꯨꯅꯥ ꯋꯤꯀꯤ ꯂꯃꯥꯏꯁꯤꯡ ꯁꯦꯝꯒꯠꯂꯤ",
+       "email": "ꯏꯃꯦꯜ",
+       "prefs-help-email-required": "ꯏꯃꯦꯜ ꯑꯦꯗ꯭ꯔꯦꯁ ꯆꯪꯒꯅꯤ ꯫",
        "prefs-signature": "ꯈꯨꯠꯌꯦꯛ",
+       "prefs-dateformat": "ꯆꯩꯆꯠ ꯃꯑꯣꯡ",
+       "prefs-editor": "ꯏꯈꯠꯂꯤꯕ",
+       "prefs-preview": "ꯃꯃꯥꯡꯒꯤꯗꯨ ꯎꯠꯄ",
+       "prefs-advancedrc": "ꯈꯨꯃꯥꯡꯆꯥꯎꯁꯤꯟꯂꯕ ꯈꯟꯐꯝ",
+       "prefs-advancedrendering": "ꯈꯨꯃꯥꯡꯆꯥꯎꯁꯤꯟꯂꯕ ꯈꯟꯐꯝ",
+       "prefs-advancedsearchoptions": "ꯈꯨꯃꯥꯡꯆꯥꯎꯁꯤꯟꯂꯕ ꯈꯟꯐꯝ",
+       "prefs-advancedwatchlist": "ꯈꯨꯃꯥꯡꯆꯥꯎꯁꯤꯟꯂꯕ ꯈꯟꯐꯝ",
+       "prefs-displayrc": "ꯈꯟꯐꯝꯁꯤꯡ ꯎꯠꯄ",
+       "prefs-displaywatchlist": "ꯈꯟꯐꯝꯁꯤꯡ ꯎꯠꯄ",
+       "prefs-changesrc": "ꯑꯍꯣꯡꯕꯁꯤꯡ ꯎꯠꯂꯛꯄ",
+       "prefs-changeswatchlist": "ꯑꯍꯣꯡꯕꯁꯤꯡ ꯎꯠꯂꯛꯄ",
+       "prefs-pageswatchlist": "ꯌꯦꯡꯂꯤꯕ ꯂꯃꯥꯏꯁꯤꯡ",
+       "prefs-tokenwatchlist": "ꯌꯥꯅꯕ ꯆꯦ",
+       "prefs-diffs": "ꯈꯦꯠ",
+       "userrights": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯃꯤꯑꯣꯏ ꯍꯛꯁꯤꯡ",
+       "userrights-reason": "ꯃꯔꯝ:",
+       "userrights-expiry": "ꯃꯇꯝ ꯍꯦꯟꯂꯕ:",
+       "userrights-expiry-othertime": "ꯃꯇꯝ ꯑꯇꯦ:",
        "group": "ꯀꯥꯡꯕꯨ:",
        "group-user": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ",
        "group-bot": "ꯔꯣꯕꯣꯠꯁꯤꯡ",
        "group-sysop": "ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
+       "group-all": "(ꯄꯨꯂꯞ)",
        "group-user-member": "{{GENDER:$1|ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|ꯁꯈꯪꯂꯕ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ}}",
+       "group-bot-member": "{{GENDER:$1|ꯔꯣꯕꯣꯠ}}",
+       "group-sysop-member": "{{GENDER:$1|ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕ}}",
+       "group-interface-admin-member": "{{GENDER:$1|interface ꯆꯨꯞꯂꯤꯄꯥꯏꯔꯤꯕ}}",
+       "group-bureaucrat-member": "{{GENDER:$1|ꯐꯝ ꯑꯆꯧꯕ}}",
+       "group-suppress-member": "{{GENDER:$1|ꯅꯝꯊꯅꯕ ꯃꯤꯑꯣꯏꯁꯤꯡ}}",
        "grouppage-user": "{{ns:project}}:ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ",
+       "grouppage-autoconfirmed": "{{ns:project}}:ꯁꯈꯪꯂꯕ ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯁꯤꯡ",
        "grouppage-bot": "{{ns:project}}:ꯕꯣꯠꯁꯤꯡ",
        "grouppage-sysop": "{{ns:project}}:ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
+       "grouppage-interface-admin": "{{ns:project}}:Interface ꯆꯨꯞꯂꯤ ꯄꯥꯏꯔꯤꯕꯁꯤꯡ",
+       "grouppage-bureaucrat": "{{ns:project}}:ꯐꯝ ꯑꯆꯧꯕꯁꯤꯡ",
+       "grouppage-suppress": "{{ns:project}}:ꯅꯝꯊꯕ",
+       "right-read": "ꯂꯃꯥꯏꯁꯤꯡ ꯄꯥꯕꯥ",
        "right-edit": "ꯂꯃꯥꯏꯁꯤꯡ ꯁꯦꯝꯒꯠꯄ",
        "right-writeapi": "API sijinaduna eba",
        "newuserlogpage": "ꯁꯤꯖꯤꯅꯅꯔꯤꯕ creation log",
index b2c1a4e..a9fcce4 100644 (file)
        "login": "सनोंद-प्रवेश(लॉग-ईन)",
        "login-security": "तुमची ओळख पटवा",
        "nav-login-createaccount": "सनोंद-प्रवेश / सदस्यखाते उघडा",
-       "logout": "सनà¥\8bà¤\82द-निरà¥\8dà¤\97म",
-       "userlogout": "सनà¥\8bà¤\82द-निरà¥\8dà¤\97म",
+       "logout": "बाहà¥\87र à¤ªà¤¡à¤¾",
+       "userlogout": "बाहà¥\87र à¤ªà¤¡à¤¾",
        "notloggedin": "आपण सनोंद-प्रवेशित नाहीत",
        "userlogin-noaccount": "आपले खाते नाही?",
        "userlogin-joinproject": "{{SITENAME}}मध्ये सहभागी व्हा",
        "defaultmessagetext": "अविचल संदेश मजकूर",
        "content-failed-to-parse": "$2 चा आशय(कंटेंट) $1 साठी पार्स करण्यात असफलता - नमुना: $3",
        "invalid-content-data": "अवैध माहिती",
-       "content-not-allowed-here": "\"$1\" हा आशय [[:$2]] लेखावर टाकण्याची अनुमती नाही.",
+       "content-not-allowed-here": "\"$1\" हा आशय [[:$2]] लेखावर \"$3\" मध्ये  टाकण्याची अनुमती नाही.",
        "editwarning-warning": "या पानावरुन दुसर्‍या पानावर गेल्यास, तुम्ही येथे केलेले बदल जतन होणार नाहीत.\nजर आपण सनोंद-प्रवेशित असाल तर, ही सूचना घालवण्यासाठी ''{{int:prefs-editing}}'' मधील संपादनपसंतीत बदल करा.",
        "editpage-invalidcontentmodel-title": "आशय प्रारुप सहाय्यीकृत नाही",
        "editpage-invalidcontentmodel-text": "आशय प्रारुप \"$1\" हे सहाय्यीकृत नाही.",
        "pageinfo-display-title": "दृश्य शीर्षक",
        "pageinfo-default-sort": "डिफॉल्ट निवड-कळ (सॉर्ट कि)",
        "pageinfo-length": "पानाचा आकार (बाइट्समध्ये)",
+       "pageinfo-namespace": "नामविश्व",
        "pageinfo-article-id": "पृष्ठ-ओळखण",
        "pageinfo-language": "पान-आशय भाषा",
        "pageinfo-language-change": "बदल",
        "log-action-filter-suppress-revision": "आवृत्ती दडपणे",
        "log-action-filter-suppress-delete": "पान दडपणे",
        "log-action-filter-suppress-block": "रोधामार्फत सदस्य दाबणे",
+       "authmanager-provider-password": "परवलीच्या शब्दाधारीत (पासवर्ड) अधिप्रमाणन",
        "changecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
        "changecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
        "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
        "removecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
+       "credentialsform-provider": "अधिकारपत्राचा प्रकार:",
+       "credentialsform-account": "खात्याचे नाव:",
        "edit-error-short": "त्रुटी: $1",
        "edit-error-long": "त्रुट्या:\n\n$1",
        "revid": "आवृत्ती $1",
+       "gotointerwiki-invalid": "नमूद केलेले शीर्षक अवैध आहे.",
        "passwordpolicies": "परवलीच्या शब्दांची नीती",
        "passwordpolicies-summary": "ही, या विकिवरील व्याख्यिकृत सदस्य गटांसाठी असलेली व सध्या प्रभावात असलेल्या परवलीच्या शब्दांच्या नीतींची यादी आहे.",
        "passwordpolicies-group": "गट",
        "passwordpolicies-policy-passwordcannotmatchusername": "परवलीचा शब्द हा सदस्यनाव असू शकत नाही",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "परवलीच्या शब्दाचे,विशिष्ट काळ्या यादीत टाकलेल्या परवलीच्या शब्दाशी अनुरूपन (मॅच) असू शकत नाही.",
        "passwordpolicies-policy-maximalpasswordlength": "परवलीचा शब्द हा $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचा हवा",
-       "passwordpolicies-policy-passwordcannotbepopular": "परवलीचा शब्द हा {{PLURAL:$1|the popular password|$1 प्रसिद्ध शब्दांच्या यादीतील असू शकत नाही}}"
+       "passwordpolicies-policy-passwordcannotbepopular": "परवलीचा शब्द हा {{PLURAL:$1|the popular password|$1 प्रसिद्ध शब्दांच्या यादीतील असू शकत नाही}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "परवलीचा शब्द हा १,००,००० सामान्यरित्या वापरण्यात येणाऱ्या परवलीच्या शब्दांच्या यादीत नको."
 }
index 2fdd407..4397bef 100644 (file)
        "nstab-project": "Проектэнь лопа",
        "nstab-image": "Файла",
        "nstab-mediawiki": "Сёрмине",
-       "nstab-template": "Лопа парцун",
+       "nstab-template": "Лопапарцун",
        "nstab-help": "Лезкс лопа",
        "nstab-category": "Категория",
        "mainpage-nstab": "Прявтлопа",
        "copyrightwarning": "Инескеть кирдть мельсэ {{SITENAME}}-сэ весе путовкстнэнь, лововить нолдазекс ало $2  конёвонть коряс (вант $1 педе пес). Арась мелеть витневтемс-петневтемс сёрмадовксот педе пес, иляк сестэ путо сонзэ тезэнь.<br />\nИстяжо тезэнь материалонь максомсот, кемекстат тон тонсь сёрмадык сонзэ, али саик сонзэ вейсэнь ёнксто али олячинь порталсто.\n'''ИЛЯ МАКСО ВАНСТОНЬ ВИДЕЧИСЭ ЛОМАНЕНЬ ВАЖОДЕМАНТЬ АПАК КЕВКСТНЕ!'''",
        "titleprotectedwarning": "'''ВАНОК:  Те лопась пекстазь, сонзэ шкамга-теемга эрявить [[Special:ListGroupRights|башка видечить]].'''\nЖурналонь меельце сёрмадовксось максозь ало, эрявиндеряй сонзэ ваномс.",
        "templatesused": "Те лопасонть тевс нолдазь {{PLURAL:$1|лопапарцун|лопапарцунт}}:",
-       "templatesusedpreview": "Те икелькс вановкссонть тевс нолдазь  {{PLURAL:$1|лопа парцун|лопа парцунт}}:",
+       "templatesusedpreview": "Те икелькс вановкссонть тевс нолдазь  {{PLURAL:$1|лопапарцун|лопапарцунт}}:",
        "templatesusedsection": "Те пелькссэнть тевс нолдазь {{PLURAL:$1|лопа парцунось|лопа парцунтнэ}}:",
        "template-protected": "(ванстозь)",
        "template-semiprotected": "(пельс ванстозь)",
        "action-sendemail": "кучомс е-сёрмат",
        "nchanges": "$1 {{PLURAL:$1|полавтнема|полавтнемат}}",
        "enhancedrc-history": "путовксонзо-юронзо",
-       "recentchanges": "Чияконь полавтнемат-лиякстомтомат",
+       "recentchanges": "Чиень полавтнемат-лиякстомтомат",
        "recentchanges-legend": "Улконь полавтнематнень аравтнемаст",
        "recentchanges-summary": "",
        "recentchanges-feed-description": "Мельга ваннынк кода ульнесть витьнемат-петнемат wiki-сэ те максовксонть.",
        "tooltip-n-randompage": "Макста ловномс кодамо понгсь лопа",
        "tooltip-n-help": "Превс путыть косо.",
        "tooltip-t-whatlinkshere": "Викинь весе лопатне, конат тезэнь сюлмазь",
-       "tooltip-t-recentchangeslinked": "Чияконь полавтнемат сеть лопатнесэ, конат сюлмазь те лопанть марто",
+       "tooltip-t-recentchangeslinked": "Чиень полавтнемат сеть лопатнесэ, конат сюлмазь те лопанть марто",
        "tooltip-feed-rss": "\"RSS\" чидикерькске те лопантень",
        "tooltip-feed-atom": "Атом лезкс те лопантень",
        "tooltip-t-contributions": "Невтть мезе {{GENDER:$1|те теицясь}} полавтсь",
        "tooltip-ca-nstab-special": "Те башка тевень лопась, те лопанть а витнесак-петнесак",
        "tooltip-ca-nstab-project": "Ваннынк проетной лопанть",
        "tooltip-ca-nstab-image": "Ванык файлань лопанть",
-       "tooltip-ca-nstab-mediawiki": "Ваномс системань пачтямнэнть",
-       "tooltip-ca-nstab-template": "Ванномс лопа парцунонть",
+       "tooltip-ca-nstab-mediawiki": "Ваномс системань пачтямненть",
+       "tooltip-ca-nstab-template": "Ванномс лопапарцунонть",
        "tooltip-ca-nstab-help": "Ванномс лездамонь лопанть",
        "tooltip-ca-nstab-category": "Варштынк категориянь лопатьнень",
        "tooltip-minoredit": "Тешкстынк тень, сон вишкинесте витнезь-петнезь",
        "spambot_username": "MediaWiki-нь шукшто ванькскавтома",
        "pageinfo-header-basic": "Васень информациязо",
        "pageinfo-header-edits": "Витнемс-петнемс юронзо-путовксонзо",
+       "pageinfo-header-restrictions": "Лопанть ванстоманзо",
        "pageinfo-header-properties": "Лопанть уликсчинзэ",
        "pageinfo-display-title": "Коняксонть таргамс лангс",
+       "pageinfo-article-id": "Лопа ID",
+       "pageinfo-robot-index": "Маштови",
+       "pageinfo-few-watchers": "$1 эли седе ламо {{PLURAL:$1|ваныцянзо}} арасть",
        "pageinfo-subpages-name": "Те лопанть явкслопанзо",
+       "pageinfo-firstuser": "Лопанть шкицязо",
+       "pageinfo-firsttime": "Лопась шказель",
+       "pageinfo-lastuser": "Меельцеде витнизе-петнизе",
+       "pageinfo-lasttime": "Меельцеде витнезель-петнезель",
        "pageinfo-edits": "Зяроксть витнезь-петнезь",
        "pageinfo-authors": "Весемезэ зяро авторонзо",
        "pageinfo-toolboxlink": "Лопадо иформация",
+       "pageinfo-contentpage": "Текст марто лопакс ловови",
+       "pageinfo-contentpage-yes": "Истя",
        "markaspatrolleddiff": "Тешкстамс ванстнемань ютазекс",
        "markaspatrolledtext": "Тешкстамс те лопанть ванстнемань ютазекс",
        "markedaspatrolled": "Тешкстазь ванстнемань ютазекс",
        "htmlform-reset": "Саемс мекев полавтоматнень",
        "htmlform-selectorother-other": "Лия",
        "logentry-delete-delete": "$1 {{GENDER:$2|нардызе}} $3 лопанть",
+       "revdelete-content-hid": "текстэнзэ-фотокувонзо кекшезь",
        "logentry-move-move": "$1 {{GENDER:$2|печтявтызе}} $3 лопанть $4 лопакс",
        "logentry-newusers-create": "Совамо тарка $1 {{GENDER:$2|шказь}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|ёвкстызе}} $3 файланть",
index e1c7db0..fc66784 100644 (file)
        "loginlanguagelabel": "Gí-giân: $1",
        "pt-login": "Teng-ji̍p",
        "pt-login-button": "Teng-ji̍p",
+       "pt-login-continue-button": "Kè-sio̍k teng-ji̍p",
        "pt-createaccount": "Khui sin kháu-chō",
        "pt-userlogout": "Teng-chhut",
        "user-mail-no-addy": "Siūⁿ beh kià tiān-chú-phoe, m̄-koh bô siá tē-chí.",
index 3d3386b..c541d98 100644 (file)
@@ -52,7 +52,8 @@
                        "Telaneo",
                        "Jon Harald Søby",
                        "Fitoschido",
-                       "Orf3us"
+                       "Orf3us",
+                       "Pyscowicz"
                ]
        },
        "tog-underline": "Strek under lenker:",
index e7e428b..1ede3d0 100644 (file)
        "expansion-depth-exceeded-warning": "De pagina bevat te veel sjablonen",
        "parser-unstrip-loop-warning": "Er is een \"unstrip\"-lus gedetecteerd",
        "unstrip-depth-warning": "De recursielimiet ($1) voor \"unstrip\" is overschreden",
-       "unstrip-depth-category": "Pagina's waar de \"unstrip\" dieptelimiet is overschreden.",
+       "unstrip-depth-category": "Pagina's waar de \"unstrip\"-dieptelimiet is overschreden",
        "unstrip-size-warning": "De groottelimiet ($1) voor \"unstrip\" is overschreden",
-       "unstrip-size-category": "Pagina's waar de \"unstrip\" groottelimiet is overschreden",
+       "unstrip-size-category": "Pagina's waar de \"unstrip\"-groottelimiet is overschreden",
        "converter-manual-rule-error": "Er is een fout gedetecteerd in een handmatig toegevoegde taalconversieregel.",
        "undo-success": "Deze bewerking kan ongedaan gemaakt worden.\nHieronder staat de tekst waarin de wijziging ongedaan is gemaakt.\nControleer voor het opslaan of het resultaat gewenst is.",
        "undo-failure": "De wijziging kan niet ongedaan gemaakt worden vanwege andere strijdige wijzigingen.",
        "limitreport-templateargumentsize-value": "$1 / $2 {{PLURAL:$2|byte|bytes}}",
        "limitreport-expansiondepth": "Hoogste uitbreidingsdiepte",
        "limitreport-expensivefunctioncount": "Aantal kostbare parserfuncties",
-       "limitreport-unstrip-depth": "\"Unstrip\" recursiediepte",
-       "limitreport-unstrip-size": "\"Unstrip\" grootte na uitbreiden",
+       "limitreport-unstrip-depth": "\"Unstrip\"-recursiediepte",
+       "limitreport-unstrip-size": "\"Unstrip\"-grootte na uitbreiden",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "expandtemplates": "Sjablonen substitueren",
        "expand_templates_intro": "Deze speciale pagina leest de opgegeven wikitekst in en substitueert recursief alle sjablonen in de wikitekst.\nHet substitueert ook alle parserfuncties zoals\n<code><nowiki>{{</nowiki>#language:…}}</code> en\nvariabelen als <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nVrijwel alles tussen dubbele accolades wordt gesubstitueerd.",
index eb8cdfa..e0cc820 100644 (file)
        "userlogout": "Logg ut",
        "notloggedin": "Ikkje innlogga",
        "userlogin-noaccount": "Har du ingen konto?",
-       "userlogin-joinproject": "Vert med på {{SITENAME}}",
+       "userlogin-joinproject": "Ta del i {{SITENAME}}",
        "createaccount": "Opprett ny konto",
        "userlogin-resetpassword-link": "Gløymt passordet ditt?",
        "userlogin-helplink2": "Hjelp med innlogging",
        "sp-contributions-newbies-title": "Brukarbidrag av nye brukarar",
        "sp-contributions-blocklog": "blokkeringslogg",
        "sp-contributions-deleted": "sletta brukarbidrag",
-       "sp-contributions-uploads": "opplastingar",
+       "sp-contributions-uploads": "opplastingar",
        "sp-contributions-logs": "loggar",
        "sp-contributions-talk": "diskusjon",
        "sp-contributions-userrights": "administrering av brukartilgang",
index 53fc271..fe4c4ae 100644 (file)
        "prefs-advancedwatchlist": "Opcions avançadas",
        "prefs-displayrc": "Opcions d'afichatge",
        "prefs-displaywatchlist": "Opcions d'afichatge",
+       "prefs-changesrc": "cambiaments mostrats",
+       "prefs-changeswatchlist": "Cambiaments mostrats",
+       "prefs-pageswatchlist": "Paginas seguidas",
        "prefs-tokenwatchlist": "Geton",
        "prefs-diffs": "Diferéncias",
        "prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
        "group-autoconfirmed": "Utilizaires enregistrats",
        "group-bot": "Bòts",
        "group-sysop": "Administrators",
+       "group-interface-admin": "Administrators de l'interfàcia",
        "group-bureaucrat": "Burocratas",
        "group-suppress": "Limitadors",
        "group-all": "(totes)",
        "group-autoconfirmed-member": "Utilizaire enregistrat",
        "group-bot-member": "Robòt",
        "group-sysop-member": "Administrator",
+       "group-interface-admin-member": "{{GENDER:$1|interfàcia d'administracion}}",
        "group-bureaucrat-member": "Burocrata",
        "group-suppress-member": "{{GENDER:$1|limitador|limitatritz}}",
        "grouppage-user": "{{ns:project}}:Utilizaires",
        "grouppage-autoconfirmed": "{{ns:project}}:Utilizaires enregistrats",
        "grouppage-bot": "{{ns:project}}:Bòts",
        "grouppage-sysop": "{{ns:project}}:Administrators",
+       "grouppage-interface-admin": "{{ns:project}}:Administrators de l'interfàcia",
        "grouppage-bureaucrat": "{{ns:project}}:Burocratas",
        "grouppage-suppress": "{{ns:project}}:Supressors",
        "right-read": "Legir las paginas",
        "right-editusercss": "Modificar los fichièrs CSS d'autres utilizaires",
        "right-edituserjson": "Modificar los fichièrs JSON dels autres utilizators",
        "right-edituserjs": "Modificar los fichièrs JS d'autres utilizaires",
+       "right-editsitecss": "Modificar lo CSS del siti",
+       "right-editsitejson": "Modificar lo JSON del siti",
+       "right-editsitejs": "Modificar lo Javascript del siti",
        "right-editmyusercss": "Modificar vòstres pròpris fichièrs CSS utilizaire",
        "right-editmyuserjson": "Modificar vòstres fichièrs JSON d'utilizator pròpris",
        "right-editmyuserjs": "Modificar vòstres pròpris fichièrs JavaScript utilizaire",
        "grant-createaccount": "Crear de comptes",
        "grant-createeditmovepage": "Crear, modificar e desplaçar de paginas",
        "grant-delete": "Suprimir paginas, revisions e dintradas de jornal",
-       "grant-editinterface": "Modificar l'espaci de noms de MediaWiki e lo CSS/JSON/Javascript",
+       "grant-editinterface": "Modificar l'espaci de noms de MediaWiki e  JSON del siti o de l'utilizaire",
        "grant-editmycssjs": "Modificar vòstre CSS/JSON/JavaScript utilizator",
        "grant-editmyoptions": "Modificar vòstras preferéncias d'utilizaire",
        "grant-editmywatchlist": "Modificar la vòstra lista de seguiment",
+       "grant-editsiteconfig": "Modificar lo CSS/JS del siti e de l'utilizaire",
        "grant-editpage": "Modificar de paginas existentas",
        "grant-editprotected": "Modificar de paginas protegidas",
        "grant-highvolume": "Modificacion de volum naut",
        "rcfilters-other-review-tools": "Autras aisinas de supervision",
        "rcfilters-group-results-by-page": "Agropar los resultats per pagina",
        "rcfilters-activefilters": "Filtres actius",
+       "rcfilters-activefilters-hide": "Amagar",
+       "rcfilters-activefilters-show": "Mostrar",
+       "rcfilters-activefilters-hide-tooltip": "Amagar l'airal de filtres actius",
+       "rcfilters-activefilters-show-tooltip": "Mòstrar l'airal de filtres actius",
        "rcfilters-advancedfilters": "Filtres avançats",
        "rcfilters-limit-title": "Resultats d'affichar",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|cambiament|cambiaments}}, $2",
+       "rcfilters-date-popup-title": "Periòde de temps per cercar",
        "rcfilters-days-title": "Darrièrs jorns",
        "rcfilters-hours-title": "Darrièras oras",
        "rcfilters-days-show-days": "($1 {{PLURAL:$1|jorn|jorns}})",
        "rcfilters-empty-filter": "I a pas cap de filtre actiu. Se mòstran totas las contribucions.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filterlist-whatsthis": "Cossí fonciona aquò ?",
-       "rcfilters-filterlist-feedbacklink": "Digatz nos que pensatz d'aquestas aisinas (novelas) per filtrar",
+       "rcfilters-filterlist-feedbacklink": "Digatz nos que pensatz d'aquestas aisinas per filtrar",
        "rcfilters-highlightbutton-title": "Valorar los resultats",
        "rcfilters-highlightmenu-title": "Causir una color",
        "rcfilters-highlightmenu-help": "Causir una color per valorar aquesta proprietat",
        "rcfilters-view-tags-help-icon-tooltip": "Ne saber mai suls cambiaments marcats",
        "rcfilters-liveupdates-button": "Actualizacion en dirècte",
        "rcfilters-liveupdates-button-title-on": "Desactivar los cambiaments en dirècte",
+       "rcfilters-liveupdates-button-title-off": "Mostrar cambiaments novèls tanlèu se produson",
+       "rcfilters-watchlist-markseen-button": "Marcar totes los cambiaments coma vistes",
+       "rcfilters-watchlist-edit-watchlist-button": "Editar la vòstra lista de paginas seguidas",
+       "rcfilters-watchlist-showupdated": "Los cambiaments faches a las paginas qu'avètz pas visitat dempuèi que foguèron modificadas, son escrits en <strong>letras espessas</strong> amb un cercle plen davant.",
+       "rcfilters-preference-label": "Utilizar l'interfàcia non-Javascript",
+       "rcfilters-preference-help": "Cargar los cambiaments recents sens las foncions de filtratge o de mesa en valor.",
+       "rcfilters-watchlist-preference-label": "Utilizar l'interfàcia non-JavaScript",
+       "rcfilters-watchlist-preference-help": "Cargar la lista se seguiment sens las foncions de filtratge o de mesa en valor.",
+       "rcfilters-filter-showlinkedfrom-label": "Mostrar los cambiaments sus las paginas ligadas dempuèi",
+       "rcfilters-filter-showlinkedfrom-option-label": "<strong>Paginas ligadas a</strong> la pagina seleccionada",
+       "rcfilters-filter-showlinkedto-label": "Mostrar los cambiaments de las paginas ligadas a",
+       "rcfilters-filter-showlinkedto-option-label": "<strong>Paginas ligadas a</strong> la pagina seleccionada",
+       "rcfilters-target-page-placeholder": "Picatz lo nom d'una pagina (o d'una categoria)",
        "rcnotefrom": "Çaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo <strong>$3, $4</strong> (afichadas fins a <strong>$1</strong>).",
+       "rclistfromreset": "Tornar inicializar la seleccion de la data",
        "rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
        "rcshowhideminor": "$1 los cambiaments menors",
        "rcshowhideminor-show": "Afichar",
        "recentchangeslinked-page": "Nom de la pagina :",
        "recentchangeslinked-to": "Afichar los cambiaments cap a las paginas ligadas al luòc de la pagina donada",
        "recentchanges-page-added-to-category": "[[:$1]] apondut a la categoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] ajustat a la categoria, [[Special:WhatLinksHere/$1|aquela pagina es inclusa dins d'autras]]",
        "recentchanges-page-removed-from-category": "[[:$1]] suprimit de la categoria",
        "autochange-username": "Cambiament automatic de MediaWiki",
        "upload": "Importar un fichièr",
index 3fdf133..c888880 100644 (file)
        "rcfilters-watchlist-edit-watchlist-button": "Edytuj swoją listę obserwowanych stron",
        "rcfilters-watchlist-showupdated": "<strong>Wytłuszczono</strong> strony, których nie odwiedził{{GENDER:|e|a|e}}ś od czasu zapisania ostatnich zmian.",
        "rcfilters-preference-label": "Używaj interfejsu bez użycia JavaScriptu",
-       "rcfilters-preference-help": "Ładuje Ostatnie zmiany bez filtrów lub opcji podświetlania.",
+       "rcfilters-preference-help": "Ładuje Ostatnie zmiany bez filtrów wyszukiwania lub opcji podświetlania.",
        "rcfilters-watchlist-preference-label": "Używaj interfejsu bez użycia JavaScriptu",
-       "rcfilters-watchlist-preference-help": "Ładuje listę obserwowanych bez filtrów lub opcji podświetlania.",
+       "rcfilters-watchlist-preference-help": "Ładuje listę obserwowanych bez filtrów wyszukiwania lub opcji podświetlania.",
        "rcfilters-filter-showlinkedfrom-label": "Pokaż zmiany na stronach linkowanych z",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Strony linkowane z</strong> zaznaczonej strony",
        "rcfilters-filter-showlinkedto-label": "Pokaż zmiany na stronach linkujących do",
index b6ad377..cca7a8d 100644 (file)
        "search-error": "د لټون په وخت کې یوه تېروتنه رامنځته شوه: $1",
        "search-warning": "د لټون کولو په وخت کې یو خبرداری راغلی دی:$1",
        "preferences": "غوره توبونه",
-       "mypreferences": "غÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\87",
+       "mypreferences": "تÙ\86ظÙ\8aÙ\85ات",
        "prefs-edits": "د سمونو شمېر:",
        "prefsnologintext2": "د غوره توبونو بدلولو لپاره مو غونډال ته ننوځئ.",
        "prefs-skin": "پوښۍ",
        "rcfilters-other-review-tools": "د بیاکتنې نور وسايل",
        "rcfilters-group-results-by-page": "د ګروپ پایلې د پاڼې لخوا",
        "rcfilters-activefilters": "فعال فيلټرونه",
+       "rcfilters-activefilters-hide": "پټول",
+       "rcfilters-activefilters-show": "ښکاره کول",
        "rcfilters-advancedfilters": "پرمختللي فلټرونه",
        "rcfilters-limit-title": "د ښودلو لپاره بدلونونه",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|بدلونونه|$1 بدلونونه}}، $2",
        "createaccountblock": "په گڼون جوړولو بنديز لگېدلی",
        "emailblock": "پر برېښليک بنديز ولگېد",
        "blocklist-nousertalk": "د خبرواترو خپل مخ نه شی سمولای",
+       "blocklist-editing": "سمېدنې کې دی",
        "ipblocklist-empty": "د بنديز لړليک تش دی",
        "ipblocklist-no-results": "پر غوښتل شوي آي پي پتې باندې بنديز نه دي لګول شوي.",
        "blocklink": "بنديز لگول",
        "confirm-unwatch-button": "ښه",
        "confirm-unwatch-top": "همدا مخ خپل کتنلړ څخه لرې کوې؟",
        "confirm-rollback-button": "هوکې",
+       "comma-separator": "،&#32;",
        "percent": "$1%",
        "parentheses": "($1)",
        "brackets": "[$1]",
index e46430e..916aa1c 100644 (file)
        "hidden-category-category": "Categorias ocultas",
        "category-subcat-count": "{{PLURAL:$2|Esta categoria possui apenas a seguinte subcategoria.|Esta categoria possui {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}}, de um total de $2.}}",
        "category-subcat-count-limited": "Esta categoria possui {{PLURAL:$1|a seguinte subcategoria|as $1 subcategorias a seguir}}.",
-       "category-article-count": "{{PLURAL:$2|Esta categoria contém apenas a seguinte página.|{{PLURA:$1|A seguinte página pertence|As seguintes $1 páginas pertencem}} a esta categoria, de um total de $2.}}",
+       "category-article-count": "{{PLURAL:$2|Esta categoria contém apenas a seguinte página.|{{PLURAL:$1|A seguinte página pertence|As seguintes $1 páginas pertencem}} a esta categoria, de um total de $2.}}",
        "category-article-count-limited": "Esta categoria possui {{PLURAL:$1|a seguinte página|as $1 páginas a seguir}}.",
        "category-file-count": "{{PLURAL:$2|Esta categoria possui apenas o seguinte arquivo.|Esta categoria possui {{PLURAL:$1|o seguinte arquivo|os $1 arquivos a seguir}}, de um total de $2.}}",
        "category-file-count-limited": "Esta categoria possui {{PLURAL:$1|um arquivo|$1 arquivos}}.",
        "rcfilters-watchlist-edit-watchlist-button": "Editar lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
        "rcfilters-preference-label": "Use a interface não JavaScript",
-       "rcfilters-preference-help": "Carrega RecentChanges sem filtros ou realce de funcionalidade.",
+       "rcfilters-preference-help": "Carrega as mudanças recentes sem filtros nem funcionalidade de realce.",
        "rcfilters-watchlist-preference-label": "Use a interface não JavaScript",
-       "rcfilters-watchlist-preference-help": "Carrega Páginas vigiadas sem filtros ou funcionalidade de destaque.",
+       "rcfilters-watchlist-preference-help": "Carrega a lista de páginas vigiadas sem filtros nem funcionalidade de realce.",
        "rcfilters-filter-showlinkedfrom-label": "Mostrar alterações nas páginas ligadas de",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Páginas ligadas da</strong> página selecionada",
        "rcfilters-filter-showlinkedto-label": "Mostrar alterações nas páginas que ligam para",
index 77b03c8..0b39a24 100644 (file)
        "accmailtext": "Uma palavra-passe gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-passe]] depois de iniciar sessão.",
        "newarticle": "(Nova)",
        "newarticletext": "Seguiu uma hiperligação para uma página que ainda não existe.\nPara criá-la, escreva o seu conteúdo na caixa abaixo (consulte a [$1 página de ajuda] para mais detalhes).\nSe chegou aqui por engano, clique o botão <strong>voltar</strong> do seu navegador.",
-       "anontalkpagetext": "----\n<em>Esta é a página de discussão de um utilizador anónimo que ainda não criou uma conta ou não a utiliza.</em>\nPor isso, temos de utilizar o endereço IP numérico para identificá-lo(a).\nUm mesmo endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram direcionados comentários irrelevantes, [[Special:CreateAccount|crie uma conta]] ou [[Special:UserLogin|inicie sessão]] para evitar futuras confusões com outros utilizadores anónimos.",
+       "anontalkpagetext": "----\n<em>Esta página de discussão é de um utilizador anónimo que ainda não criou uma conta ou que não a utiliza.</em>\nPor isso, temos de utilizar o endereço IP numérico para identificá-lo.\nUm mesmo endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram endereçados comentários irrelevantes, [[Special:CreateAccount|crie uma conta]] ou [[Special:UserLogin|inicie uma sessão]] para evitar futuras confusões com outros utilizadores anónimos.",
        "noarticletext": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.",
        "noarticletext-nopermission": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas, ou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]</span>, mas não tem permissão para criar esta página.",
        "missing-revision": "A revisão nº $1 da página \"{{FULLPAGENAME}}\" não existe.\n\nIsto normalmente ocorre ao seguir uma hiperligação de histórico desatualizada para uma página que foi eliminada.\nPode encontrar detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].",
index c0dc7ca..f3635f2 100644 (file)
        "edit-gone-missing": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "edit-conflict": "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "edit-no-change": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-already-exists}}",
-       "edit-slots-cannot-add": "An error message shown when trying to save an edit, if the edit tries to add a {{Identical|slot}} that is not allowed on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be added but are not allowed",
-       "edit-slots-cannot-remove": "An error message shown when trying to save an edit, if the edit tries to remove a {{Identical|slot}} that is required on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be removed but are required",
-       "edit-slots-missing": "An error message shown when trying to save an edit, if the edit is missing some required {{Identical|slot}}, which could not be inherited from a parent revision.\n* $1 - the number of slots\n* $2 - the slots that are required but missing from the new revision",
+       "edit-slots-cannot-add": "An error message shown when trying to save an edit, if the edit tries to add a slot that is not allowed on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be added but are not allowed",
+       "edit-slots-cannot-remove": "An error message shown when trying to save an edit, if the edit tries to remove a slot that is required on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be removed but are required",
+       "edit-slots-missing": "An error message shown when trying to save an edit, if the edit is missing some required slot, which could not be inherited from a parent revision.\n* $1 - the number of slots\n* $2 - the slots that are required but missing from the new revision",
        "postedit-confirmation-created": "{{gender}}\nShown after a user creates a new page. Parameters:\n* $1 - the current user, for GENDER support",
        "postedit-confirmation-restored": "{{gender}}\nShown after a user restores a page to a previous revision. Parameters:\n* $1 - the current user, for GENDER support",
        "postedit-confirmation-saved": "{{gender}}\nShown after a user saves a page. Parameters:\n* $1 - the current user, for GENDER support",
index 8b75c88..4b473fb 100644 (file)
        "changepassword-success": "'A password toje ha state cangiate!",
        "changepassword-throttled": "Tu è pruvate 'nu sacche de vote a trasè.\nPe piacere aspitte $1 apprime de pruvà arrete.",
        "botpasswords": "Password d'u bot",
+       "botpasswords-summary": "<em>Passuord bot</em> permette l'ause a 'nu cunde ausanne le API, senze ausà le credenziale de accesse prengepàle. Le deritte de l'utende disponibbele quanne se ave trasute cu 'na passuord bot ponne essere limitate.\n\nCe non ge canusce 'u mutive purcé puè fa sta cose, allore probbabbilmende non ge l'ha fà. Nisciune t'addà cercà de generà 'na passuord bot pe pò darle a otre crestiane.",
        "botpasswords-disabled": "Le passuord bot so disabbilitate.",
        "botpasswords-no-central-id": "Pe ausà 'na passuor bot, a trasè a 'nu utende cendralizzate.",
        "botpasswords-existing": "Passuord de le bot esistende",
index 0017297..b596aa8 100644 (file)
                        "Michgrig",
                        "Force majeure",
                        "Infovarius",
-                       "Cronolio"
+                       "Cronolio",
+                       "Nk88"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
-       "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð¸Ð· Ñ\81пиÑ\81ка Ñ\81вежиÑ\85 Ð¿Ñ\80авок",
+       "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¿Ñ\80авки Ð¸Ð· Ð¿Ð¾Ñ\81ледниÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹",
        "tog-hidepatrolled": "Скрывать патрулированные правки в списке свежих правок",
        "tog-newpageshidepatrolled": "Скрывать отпатрулированные страницы в списке новых страниц",
        "tog-hidecategorization": "Скрывать категоризацию страниц",
        "tog-showhiddencats": "Показывать скрытые категории",
        "tog-norollbackdiff": "Не показывать разницу версий после выполнения отката",
        "tog-useeditwarning": "Предупреждать, когда я покидаю страницу с несохранёнными изменениями",
-       "tog-prefershttps": "Всегда использовать защищённое соединение",
+       "tog-prefershttps": "\nВсегда используйте безопасное соединение при входе в систему",
        "underline-always": "Всегда",
        "underline-never": "Никогда",
        "underline-default": "Использовать настройки браузера",
        "helppage-top-gethelp": "Помощь",
        "mainpage": "Заглавная страница",
        "mainpage-description": "Заглавная страница",
-       "policy-url": "Project:Правила",
+       "policy-url": "Project:Политика вики",
        "portal": "Портал сообщества",
        "portal-url": "Project:Портал сообщества",
        "privacy": "Политика конфиденциальности",
        "pagetitle": "$1 — {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
-       "retrievedfrom": "Ð\98Ñ\81Ñ\82оÑ\87ник â\80\94 $1",
+       "retrievedfrom": "Ð\9fолÑ\83Ñ\87ено Ð¾Ñ\82 \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Вы получили}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы получили}} $1 от {{PLURAL:$3|$3 участника|$3 участников|1=другого участника}} ($2).",
        "youhavenewmessagesmanyusers": "Вы получили $1 от множества пользователей ($2).",
        "editsectionhint": "Редактировать раздел «$1»",
        "toc": "Содержание",
        "showtoc": "показать",
-       "hidetoc": "Ñ\83бÑ\80ать",
+       "hidetoc": "Ñ\81кÑ\80Ñ\8bть",
        "collapsible-collapse": "свернуть",
        "collapsible-expand": "развернуть",
        "confirmable-confirm": "{{GENDER:$1|Вы}} уверены?",
        "confirmable-yes": "Да",
-       "confirmable-no": "Ð\9dет",
+       "confirmable-no": "нет",
        "thisisdeleted": "Просмотреть или восстановить $1?",
        "viewdeleted": "Просмотреть $1?",
        "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
        "sort-descending": "Упорядочить по убыванию",
        "sort-ascending": "Упорядочить по возрастанию",
        "nstab-main": "Статья",
-       "nstab-user": "{{GENDER:{{ROOTPAGENAME}}|Участник|Участница}}",
+       "nstab-user": "\nСтраница пользователя",
        "nstab-media": "Мультимедиа",
        "nstab-special": "Служебная страница",
        "nstab-project": "О проекте",
        "accmailtext": "Сгенерированный случайным образом пароль для [[User talk:$1|$1]] выслан на адрес $2.\n\nПосле авторизации можно будет сменить пароль для этой учётной записи на ''[[Special:ChangePassword|специальной странице смены пароля]]''.",
        "newarticle": "(Новая)",
        "newarticletext": "Вы перешли по ссылке на страницу, которой пока не существует.\nЧтобы её создать, наберите текст в окне, расположенном ниже (подробнее см. [$1 справочную страницу]).\nЕсли вы оказались здесь по ошибке, просто нажмите кнопку '''назад''' своего браузера.",
-       "anontalkpagetext": "----\n<em>Эта страница обсуждения анонимного участника, который ещё не создал учётной записи или не использует её.</em>\nПоэтому мы вынуждены для его/её идентификации использовать цифровой IP-адрес.\nЭтот же адрес может использоваться нескольким другим участникам.\nЕсли вы анонимный участник и полагаете, что получили сообщения, адресованные не вам, пожалуйста, [[Special:CreateAccount|создайте учётную запись]] или [[Special:UserLogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими анонимными участниками.",
+       "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": "Версия $1 страницы «{{FULLPAGENAME}}» не существует.\n\nОбычно это бывает, если проследовать по устаревшей ссылке на удалённую страницу.\nПодробности могут быть в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале удалений].",
        "prefs-watchlist-managetokens": "Управление токенами",
        "prefs-misc": "Другие настройки",
        "prefs-resetpass": "Изменить пароль",
-       "prefs-changeemail": "изменить или удалить адрес электронной почты",
+       "prefs-changeemail": "Ð\98зменить или удалить адрес электронной почты",
        "prefs-setemail": "Установка адреса эл. почты",
        "prefs-email": "Параметры электронной почты",
        "prefs-rendering": "Внешний вид",
        "autosumm-new": "Новая страница: «$1»",
        "autosumm-newblank": "Создана пустая страница",
        "size-bytes": "$1 {{PLURAL:$1|байт|байта|байт}}",
-       "size-kilobytes": "$1 Ð\9aÐ\91",
-       "size-megabytes": "$1 Ð\9cÐ\91",
-       "size-gigabytes": "$1 Ð\93Ð\91",
-       "size-terabytes": "$1 Ð¢Ð\91",
-       "size-petabytes": "$1 Ð\9fÐ\91",
-       "size-exabytes": "$1 Ð­Ð\91",
-       "size-zetabytes": "$1 Ð\97Ð\91",
-       "size-yottabytes": "$1 Ð\98Ð\91",
+       "size-kilobytes": "$1 Ð\9aб",
+       "size-megabytes": "$1 Ð\9cб",
+       "size-gigabytes": "$1 Ð\93б",
+       "size-terabytes": "$1 Ð¢Ð±",
+       "size-petabytes": "$1 Ð\9fб",
+       "size-exabytes": "$1 Ð­Ð±",
+       "size-zetabytes": "$1 Ð\97б",
+       "size-yottabytes": "$1 Ð\98б",
        "size-pixel": "$1 {{PLURAL:$1|пиксель|пикселя|пикселей}}",
+       "size-kilopixel": "$1 кпикс",
+       "size-megapixel": "$1 Мпикс",
+       "size-gigapixel": "$1 Гпикс",
+       "size-terapixel": "$1 Тпикс",
+       "size-petapixel": "$1 Ппикс",
+       "size-exapixel": "$1 Эпикс",
+       "size-zetapixel": "$1 Зпикс",
+       "size-yottapixel": "$1 Ипикс",
        "bitrate-bits": "$1 б/с",
        "bitrate-kilobits": "$1 Кб/с",
        "bitrate-megabits": "$1 Мб/с",
index 1677159..6d0794e 100644 (file)
        "pool-servererror": "ဢၼ်ပဵၼ်ၼႃႈၵၢၼ် တူဝ်ဢၢၼ်ႇၼွင်ၼၼ်ႉ မၼ်းဢမ်ႇႁဵတ်းၵၢၼ် ($1).",
        "poolcounter-usage-error": "ၵၢၼ်ၸႂ်ႉၸိုဝ်း ၽိတ်းပိူင်ႈ: $1",
        "aboutsite": "လွင်ႈ​တၢင်း {{SITENAME}}",
-       "aboutpage": "Project: လွင်ႈဝႅပ်ႉသႆႉ",
+       "aboutpage": "Project:လွင်ႈဝႅပ်ႉသၢႆႉ",
        "copyright": "ၸိူဝ်းၶဝ်ႈပႃးဝႆႉၼႆႉ မၼ်းတေၸၢင်ႈၸႂ်ႉလႆႈ ၵႃႈတီႈ ဝႂ် $1",
        "copyrightpage": "{{ns:project}}:သုၼ်ႇထုတ်ႇ",
        "currentevents": "ၵၢၼ်ႁဵတ်းသၢင်ႈယၢမ်းလဵဝ်",
index 9b44b35..3e5e213 100644 (file)
        "accmailtext": "Naključno generirano geslo za [[User talk:$1|$1]] smo poslali na $2. Po prijavi ga lahko spremenite na strani za ''[[Special:ChangePassword|spremembo gesla]]''.",
        "newarticle": "(Nov)",
        "newarticletext": "Sledili ste povezavi na stran, ki še ne obstaja.\nDa bi stran ustvarili, vnesite v spodnji obrazec besedilo\n(za več informacij glej [$1 pomoč]).\nČe ste sem prišli po pomoti, v svojem brskalniku kliknite gumb ''Nazaj''.",
-       "anontalkpagetext": "----\n<em>To je pogovorna stran brezimnega uporabnika, ki si še ni ustvaril računa ali pa ga ne uporablja.</em>\nZaradi tega moramo uporabiti IP-naslov za njegovo/njeno ugotavljanje istovetnosti.\nTakšen IP-naslov si lahko deli več uporabnikov.\nČe ste brezimni uporabnik in menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:CreateAccount|ustvarite račun]] ali pa se [[Special:UserLogin|vpišite]], da preprečite zmedo z drugimi nepodpisanimi uporabniki.",
+       "anontalkpagetext": "----\n<em>To je pogovorna stran brezimnega uporabnika, ki si še ni ustvaril računa ali pa ga ne uporablja.</em>\nZaradi tega moramo uporabiti IP-naslov za njihovo ugotavljanje istovetnosti.\nTakšen IP-naslov si lahko deli več uporabnikov.\nČe ste brezimni uporabnik in menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:CreateAccount|ustvarite račun]] ali pa se [[Special:UserLogin|vpišite]], da preprečite zmedo z drugimi nepodpisanimi uporabniki.",
        "noarticletext": "Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v dnevniških zapisih] ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran ustvarite]</span>.",
        "noarticletext-nopermission": "Na strani trenutno ni nobenega besedila.\nLahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov strani]] na drugih straneh ali <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v povezanih dnevniških zapisih]</span>, vendar za ustvarjanje strani nimate zadostnih dovoljenj.",
        "missing-revision": "Redakcija št. $1 strani »{{FULLPAGENAME}}« ne obstaja.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na zgodovino strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
index 0333773..45b8a2d 100644 (file)
        "protectedpagetext": "Ова страница је закључана за измене и друге радње.",
        "viewsourcetext": "Можете да видите и копирате извор ове странице.",
        "viewyourtext": "Можете да видите и копирате извор <strong>ваших измена</strong> на овој страници.",
-       "protectedinterface": "Ова страница садржи текст интерфејса за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или променили преводе било којег викија, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију Медијавикија.",
-       "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
+       "protectedinterface": "Ова страница обезбеђује текст интерфејса за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или променили преводе свих викија, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију MediaWiki-ја.",
+       "editinginterface": "<strong>Упозорење:</strong> Уређујете страницу која се користи за обезбеђивање текста интерфејса за софтвер.\nПромене на овој страници утицаће на изглед корисничког интерфејса других корисника овог викија.",
        "translateinterface": "Да бисте додали или променили преводе за све викије, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију Медијавикија.",
        "cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
        "namespaceprotected": "Немате дозволу да уређујете странице у именском простору: <strong>$1</strong>.",
        "eauthentsent": "Имејл о потврди је послат на наведену имејл-адресу.\nПре било којих других слања имејлова на налог, мораћете пратити упутства у имејлу да бисте потврдили да је налог заиста ваш.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
-       "acct_creation_throttle_hit": "Ð\9fоÑ\81еÑ\82иоÑ\86и Ð¾Ð²Ð¾Ð³ Ð²Ð¸ÐºÐ¸Ñ\98а ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82е Ð²Ð°Ñ\88Ñ\83 IP Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\81Ñ\83 Ð²ÐµÑ\9b Ð¾Ñ\82воÑ\80или {{PLURAL:$1|1=Ñ\98едан Ð½Ð°Ð»Ð¾Ð³|$1 Ð½Ð°Ð»Ð¾Ð³Ð°}} Ð¿Ñ\80еÑ\82Ñ\85одни $2, Ñ\88Ñ\82о Ñ\98е Ð½Ð°Ñ\98веÑ\9bи Ð´Ð¾Ð·Ð²Ð¾Ñ\99ени Ð±Ñ\80оÑ\98 Ñ\83 Ñ\82ом Ð²Ñ\80еменÑ\81ком Ð¿ÐµÑ\80иодÑ\83.\nÐ\97бог Ñ\82ога Ð¿Ð¾Ñ\81еÑ\82иоÑ\86и Ñ\81 Ð¾Ð²Ðµ IP Ð°Ð´Ñ\80еÑ\81е Ñ\82Ñ\80енÑ\83Ñ\82но Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð¾Ñ\82воÑ\80ити више налога.",
+       "acct_creation_throttle_hit": "Ð\9fоÑ\81еÑ\82иоÑ\86и Ð¾Ð²Ð¾Ð³ Ð²Ð¸ÐºÐ¸Ñ\98а ÐºÐ¾Ñ\98и ÐºÐ¾Ñ\80иÑ\81Ñ\82е Ð²Ð°Ñ\88Ñ\83 IP Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\81Ñ\83 Ð¾Ñ\82воÑ\80или {{PLURAL:$1|1=Ñ\98едан Ð½Ð°Ð»Ð¾Ð³|$1 Ð½Ð°Ð»Ð¾Ð³Ð°}} Ñ\83 Ð¿Ñ\80еÑ\82Ñ\85одниÑ\85 $2, Ñ\88Ñ\82о Ñ\98е Ð½Ð°Ñ\98веÑ\9bа Ð´Ð¾Ð·Ð²Ð¾Ñ\99ена Ð²Ñ\80едноÑ\81Ñ\82 Ñ\83 Ð¾Ð²Ð¾Ð¼ Ð²Ñ\80еменÑ\81ком Ð¿ÐµÑ\80иодÑ\83.\nÐ\9aао Ñ\80езÑ\83лÑ\82аÑ\82 Ñ\82ога, Ñ\82и Ð¿Ð¾Ñ\81еÑ\82иоÑ\86и Ñ\82Ñ\80енÑ\83Ñ\82но Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð¾Ñ\82ваÑ\80ати више налога.",
        "emailauthenticated": "Ваша имејл-адреса је потврђена на дан $2 у $3 ч.",
        "emailnotauthenticated": "Ваша имејл-адреса још није потврђена.\nНиједан имејл неће да буде послат ни у једном од следећих случајева.",
        "noemailprefs": "Наведите имејл-адресу у подешавањима за оспособљавање ових функција.",
        "emailconfirmlink": "Потврдите своју имејл-адресу",
        "invalidemailaddress": "Имејл-адреса не може да буде прихваћена јер је у неважећем облику.\nУнесите исправну адресу или оставите празно поље.",
-       "cannotchangeemail": "Ð\9dа Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83 Ð½Ð¸Ñ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¿Ñ\80омениÑ\82и Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81е Ð½Ð°Ð»Ð¾Ð³Ð°.",
+       "cannotchangeemail": "Ð\90дÑ\80еÑ\81е Ðµ-поÑ\88Ñ\82е Ð½Ð°Ð»Ð¾Ð³Ð° Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ñ\81е Ð¿Ñ\80омениÑ\82и Ð½Ð° Ð¾Ð²Ð¾Ð¼ Ð²Ð¸ÐºÐ¸Ñ\98Ñ\83.",
        "emaildisabled": "Овај сајт не може да шаље имејлове.",
        "accountcreated": "Налог је отворен",
        "accountcreatedtext": "Кориснички налог [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) је отворен.",
        "createaccount-text": "Неко је отворио налог са вашом имејл-адресом на пројекту {{SITENAME}} ($4) под именом „$2“ и са лозинком „$3“.\nОдмах требате да се пријавите и промените своју лозинку.\n\nМожете да занемарите ову поруку, ако је овај налог отворен грешком.",
        "login-throttled": "Превише пута сте покушали да се пријавите.\nСачекајте $1 пре него што покушате поново.",
        "login-abort-generic": "Неуспешна пријава – прекинуто",
-       "login-migrated-generic": "Ваш налог је мигриран и ваше корисничко више не постоји на овом викију.",
+       "login-migrated-generic": "Ваш налог је мигриран. Ваше корисничко више не постоји на овом викију.",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер изгледа да га је послао покварени прегледач или кеширани прокси.",
        "createacct-another-realname-tip": "Право име је опционално.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
        "changeemail-no-info": "Морате бити пријављени да бисте приступили овој страници.",
        "changeemail-oldemail": "Актуелна имејл-адреса:",
        "changeemail-newemail": "Нова имејл-адреса:",
-       "changeemail-newemail-help": "Ово поље треба да оставите празно ако желите да уклоните своју имејл-адресу. Нећете бити у могућности да ресетујете заборављену лозинку и нећете примати имејлове са овог викија ако је имејл-адреса уклоњена.",
+       "changeemail-newemail-help": "Ово поље треба да оставите празно ако желите да уклоните адресу е-поште. Нећете бити у могућности да ресетујете заборављену лозинку и нећете примати е-поруке са овог викија ако је адреса е-поште уклоњена.",
        "changeemail-none": "(ништа)",
        "changeemail-password": "Ваша лозинка за пројекат {{SITENAME}}:",
        "changeemail-submit": "Промени имејл",
        "headline_sample": "Текст наслова",
        "headline_tip": "Поднаслов (ниво 2)",
        "nowiki_sample": "Овде уметните необликован текст",
-       "nowiki_tip": "Занемари вики-обликовање",
+       "nowiki_tip": "Занемари вики обликовање",
        "image_sample": "Пример.jpg",
        "image_tip": "Уграђивање датотеке",
        "media_sample": "Пример.ogg",
        "recentchanges-timeout": "Ова претрага је истекла. Можда желите да покушате другачије параметре претраге.",
        "recentchanges-network": "Због техничког проблема, није могуће учитати резултате. Покушајте да освежите страницу.",
        "recentchanges-notargetpage": "Унесите име странице изнад да бисте видели промене сродне с овом страницом",
-       "recentchanges-feed-description": "Ð\9fÑ\80аÑ\82иÑ\82е Ð½Ð°Ñ\98Ñ\81коÑ\80иÑ\98е промене на викију у овом фиду.",
+       "recentchanges-feed-description": "Ð\9fÑ\80аÑ\82иÑ\82е Ð½ÐµÐ´Ð°Ð²Ð½е промене на викију у овом фиду.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Мања измена",
        "recentchanges-label-bot": "Ботовска измена",
        "rcfilters-watchlist-edit-watchlist-button": "Уреди списак надгледаних страница",
        "rcfilters-watchlist-showupdated": "Промене на страницама које нисте посетили од када је измена извршена су <strong>подебљане</strong>, с испуњеним ознакама.",
        "rcfilters-preference-label": "Користи интерфејс без JavaScript-а",
-       "rcfilters-preference-help": "Учитава скорашње измене без филтера или функционалности истицања.",
+       "rcfilters-preference-help": "Учитава скорашње измене без претраге филтера или функционалности истицања.",
        "rcfilters-watchlist-preference-label": "Користи интерфејс без JavaScript-а",
-       "rcfilters-watchlist-preference-help": "Учитава списак надгледања без филтера или функционалности истицања.",
+       "rcfilters-watchlist-preference-help": "Учитава списак надгледања без претраге филтера или функционалности истицања.",
        "rcfilters-filter-showlinkedfrom-label": "Прикажи промене на страницама са којих долазе везе",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Странице са којих долазе везе до</strong> изабране странице",
        "rcfilters-filter-showlinkedto-label": "Прикажи промене на страницама ка којима воде везе",
        "upload-options": "Опције отпремања",
        "watchthisupload": "Надгледај ову датотеку",
        "filewasdeleted": "Датотека са овим именом је раније оптремљена и након тога избрисана.\nТребате да проверите $1 пре него што наставите са њеним поновним оптремањем.",
-       "filename-thumb-name": "Ово изгледа као назив сличице. Молимо вас да не отпремате сличице на исти вики. У супротном, молимо вас, поправите име датотеке тако да је корисније и нема префикс сличице.",
+       "filename-thumb-name": "Ово изгледа као наслов сличице. Не отпремајте сличице на исти вики. У супротном, поправите име датотеке тако да је корисније и нема префикс сличице.",
        "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "filename-prefix-blacklist": " #<!-- оставите овај ред онаквим какав јесте --> <pre>\n# Синтакса је следећа:\n#   * Све од тарабе па до краја реда је коментар\n#   * Сваки ред означава префикс типичних назива датотека које додељивају дигитални апарати\nCIMG # Касио\nDSC_ # Никон\nDSCF # Фуџи\nDSCN # Никон\nDUW # неки мобилни телефони\nIMG # опште\nJD # Џеноптик\nMGP # Пентакс\nPICT # разно\n #</pre> <!-- оставите овај ред онаквим какав јесте -->",
        "upload-proto-error": "Неважећи протокол",
        "upload-too-many-redirects": "Адреса садржи превише преусмерења",
        "upload-http-error": "Дошло је до HTTP грешке: $1",
        "upload-copy-upload-invalid-domain": "Примерци отпремања нису доступни на овом домену.",
-       "upload-dialog-disabled": "Ð\9fоÑ\81Ñ\82авÑ\99аÑ\9aе Ð´Ð°Ñ\82оÑ\82ека Ð¿Ð¾Ð¼Ð¾Ñ\9bÑ\83 Ð¾Ð²Ð¾Ð³ Ð´Ð¸Ñ\98алога Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bено на овом викију.",
+       "upload-dialog-disabled": "Ð\9eÑ\82пÑ\80емаÑ\9aа Ð´Ð°Ñ\82оÑ\82ека ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aем Ð¾Ð²Ð¾Ð³ Ð´Ð¸Ñ\98алога Ñ\81Ñ\83 Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bена на овом викију.",
        "upload-dialog-title": "Отпремање датотеке",
        "upload-dialog-button-cancel": "Откажи",
        "upload-dialog-button-back": "Назад",
        "lockmanager-fail-closelock": "Није могуће затворити катанац за „$1”.",
        "lockmanager-fail-deletelock": "Није могуће избрисати катанац за „$1”.",
        "lockmanager-fail-acquirelock": "Није могуће стећи катанац за „$1”.",
-       "lockmanager-fail-openlock": "Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¾Ñ\82воÑ\80им ÐºÐ°Ñ\82анаÑ\86 Ð·Ð° â\80\9e$1â\80\9c. Ð£Ð²ÐµÑ\80иÑ\82е Ñ\81е Ð´Ð° Ñ\98е Ð²Ð°Ñ\88 Ð´Ð¸Ñ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð° Ð¾Ñ\82пÑ\80емаÑ\9aе Ð¸Ñ\81пÑ\80авно ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\81ан Ð¸ Ð´Ð° Ð²Ð°Ñ\88 Ð²ÐµÐ±-Ñ\81еÑ\80веÑ\80 Ð¸Ð¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð¿Ð¸Ñ\88е у том директоријуму. Погледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory за више информација.",
+       "lockmanager-fail-openlock": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ñ\82воÑ\80иÑ\82и ÐºÐ°Ñ\82анаÑ\86 Ð·Ð° â\80\9e$1â\80\9d. Ð£Ð²ÐµÑ\80иÑ\82е Ñ\81е Ð´Ð° Ñ\98е Ð²Ð°Ñ\88 Ð´Ð¸Ñ\80екÑ\82оÑ\80иÑ\98Ñ\83м Ð·Ð° Ð¾Ñ\82пÑ\80емаÑ\9aе Ð¸Ñ\81пÑ\80авно ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\81ан Ð¸ Ð´Ð° Ð²Ð°Ñ\88 Ð²ÐµÐ±-Ñ\81еÑ\80веÑ\80 Ð¸Ð¼Ð° Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ñ\83пиÑ\81Ñ\83Ñ\98е у том директоријуму. Погледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory за више информација.",
        "lockmanager-fail-releaselock": "Није могуће ослободити катанац за „$1”.",
        "lockmanager-fail-db-bucket": "Није могуће контактирати са довољно катанаца у канти $1.",
        "lockmanager-fail-db-release": "Није могуће ослободити катанце у бази података $1.",
        "zip-bad": "Датотека је оштећена или је нечитљива ZIP датотека.\nБезбедносна провера не може да се изврши како треба.",
        "zip-unsupported": "Датотека је формата ZIP који користи функције ZIP које Медијавики не подржава.\nНе може се правилно проверити у вези безбедности.",
        "uploadstash": "Отпремање низа датотека",
-       "uploadstash-summary": "Ова страница пружа приступ датотекама које су отпремљене или се отпремају, али још нису објављене. Ове датотеке нису видљиве никоме, осим кориснику који их је отпремио.",
+       "uploadstash-summary": "Ова страница пружа приступ датотекама које су отпремљене или су у процесу отпремања, али још нису објављене на вики. Ове датотеке нису видљиве никоме, осим кориснику који их је отпремио.",
        "uploadstash-clear": "Обриши низ датотека",
        "uploadstash-nofiles": "Немате сакривене датотеке.",
        "uploadstash-badtoken": "Извршавање ове радње није успело, разлог томе може бити истек времена за уређивање. Покушајте поново.",
        "version-license-not-found": "За овај додатак није пронађена информација о лиценци.",
        "version-credits-title": "Заслуге за $1",
        "version-credits-not-found": "За овај додатак није пронађена информација о заслугама.",
-       "version-poweredby-credits": "Овај вики покреће '''[https://www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
+       "version-poweredby-credits": "Овај вики покреће <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, ауторска права © 2001-$1 $2.",
        "version-poweredby-others": "остали",
        "version-poweredby-translators": "translatewiki.net преводиоци",
        "version-credits-summary": "Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].",
index 8217afb..6ef0b47 100644 (file)
        "accmailtext": "Ett slumpgenererat lösenord för [[User talk:$1|$1]] har skickats till $2. Det kan ändras på sidan ''[[Special:ChangePassword|ändra lösenord]]'' när du loggar in.",
        "newarticle": "(Ny)",
        "newarticletext": "Du har klickat på en länk till en sida som inte finns ännu. För att skapa sidan, börja att skriva i fältet nedan (du kan läsa mer på [$1 hjälpsidan]). Om du kom hit av misstag kan du bara trycka på <strong>tillbaka</strong>-knappen i din webbläsare.",
-       "anontalkpagetext": "----<em>Detta är diskussionssidan för en anonym användare som inte ännu skapat ett konto, eller som inte använder det.</em>\nDärför måste vi använda den numeriska IP-adressen för att identifiera honom/henne.\nEn sådan IP-adress kan delas av flera användare.\nOm du är en anonym användare och känner att irrelevanta kommentarer har riktats mot dig, vänligen [[Special:CreateAccount|skapa ett konto]] eller [[Special:UserLogin|logga in]] för att undvika framtida förväxlingar med andra anonyma användare.",
+       "anontalkpagetext": "----<em>Detta är diskussionssidan för en anonym användare som inte ännu skapat ett konto, eller som inte använder det.</em>\nDärför måste vi använda den numeriska IP-adressen för att identifiera användaren.\nEn sådan IP-adress kan delas av flera användare.\nOm du är en anonym användare och känner att irrelevanta kommentarer har riktats mot dig, vänligen [[Special:CreateAccount|skapa ett konto]] eller [[Special:UserLogin|logga in]] för att undvika framtida förväxlingar med andra anonyma användare.",
        "noarticletext": "Det finns just nu ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidtitel]] på andra sidor, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar], eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} skapa denna sida]</span>.",
        "noarticletext-nopermission": "Det finns för tillfället ingen text på denna sida.\nDu kan [[Special:Search/{{PAGENAME}}|söka efter denna sidas titel]] på andra sidor,\neller <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} söka i relaterade loggar]</span> men du har inte behörighet att skapa sidan.",
        "missing-revision": "Version #$1 av sidan med namnet \"{{FULLPAGENAME}}\" finns inte.\n\nDetta orsakas vanligen genom att en gammal historiklänk följts till en sida som har raderats.\nDetaljer kan hittas i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
index 425c05a..56c8692 100644 (file)
@@ -30,7 +30,8 @@
                        "Aefgh39622",
                        "Fitoschido",
                        "TrisT7",
-                       "Patsagorn Y."
+                       "Patsagorn Y.",
+                       "Geonuch"
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "group-autoconfirmed": "ผู้ใช้ทั่วไป",
        "group-bot": "บอต",
        "group-sysop": "ผู้ดูแลระบบ",
-       "group-interface-admin": "ผู้ดูแลอินเตอร์เฟซ",
+       "group-interface-admin": "à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8b",
        "group-bureaucrat": "ผู้ดูแลระบบสิทธิแต่งตั้ง",
        "group-suppress": "ผู้ดูแลประวัติ",
        "group-all": "(ทั้งหมด)",
        "group-autoconfirmed-member": "{{GENDER:$1|ผู้ใช้ทั่วไป}}",
        "group-bot-member": "{{GENDER:$1|บอต}}",
        "group-sysop-member": "{{GENDER:$1|ผู้ดูแลระบบ}}",
-       "group-interface-admin-member": "{{GENDER:$1|ผู้ดูแลอินเตอร์เฟซ}}",
+       "group-interface-admin-member": "{{GENDER:$1|à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8b}}",
        "group-bureaucrat-member": "{{GENDER:$1|ผู้ดูแลระบบสิทธิแต่งตั้ง}}",
        "group-suppress-member": "{{GENDER:$1|ผู้ดูแลประวัติ}}",
        "grouppage-user": "{{ns:project}}:ผู้ใช้",
        "grouppage-autoconfirmed": "{{ns:project}}:ผู้ใช้ทั่วไป",
        "grouppage-bot": "{{ns:project}}:บอต",
        "grouppage-sysop": "{{ns:project}}:ผู้ดูแลระบบ",
-       "grouppage-interface-admin": "{{ns:project}}:ผู้ดูแลอินเตอร์เฟซ",
+       "grouppage-interface-admin": "{{ns:project}}:à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8b",
        "grouppage-bureaucrat": "{{ns:project}}:ผู้ดูแลระบบสิทธิแต่งตั้ง",
        "grouppage-suppress": "{{ns:project}}:ผู้ดูแลประวัติ",
        "right-read": "อ่านหน้า",
        "group-autoconfirmed.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ใช้ทั่วไปเท่านั้น */",
        "group-bot.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่บอตเท่านั้น */",
        "group-sysop.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลเท่านั้น */",
-       "group-bureaucrat.css": "/* สไตล์ชีตในหน้านี้จะส่งผลแก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */",
+       "group-bureaucrat.css": "/* à¸ªà¹\84à¸\95ลà¹\8cà¸\8aีà¸\95à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะสà¹\88à¸\87à¸\9cลà¹\81à¸\81à¹\88à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aสิà¸\97à¸\98ิà¹\81à¸\95à¹\88à¸\87à¸\95ัà¹\89à¸\87à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 */",
        "common.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทุกคนในทุกหน้า */",
        "group-autoconfirmed.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ใช้ทั่วไปเท่านั้น */",
        "group-bot.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่บอตเท่านั้น */",
        "group-sysop.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ดูแลเท่านั้น */",
-       "group-bureaucrat.js": "/* จาวาสคริปต์ใด ๆ ในหน้านี้จะถูกโหลดให้แก่ผู้ดูแลสิทธิแต่งตั้งเท่านั้น */",
+       "group-bureaucrat.js": "/* à¸\88าวาสà¸\84ริà¸\9bà¸\95à¹\8cà¹\83à¸\94 à¹\86 à¹\83à¸\99หà¸\99à¹\89าà¸\99ีà¹\89à¸\88ะà¸\96ูà¸\81à¹\82หลà¸\94à¹\83หà¹\89à¹\81à¸\81à¹\88à¸\9cูà¹\89à¸\94ูà¹\81ลระà¸\9aà¸\9aสิà¸\97à¸\98ิà¹\81à¸\95à¹\88à¸\87à¸\95ัà¹\89à¸\87à¹\80à¸\97à¹\88าà¸\99ัà¹\89à¸\99 */",
        "anonymous": "{{PLURAL:$1|ผู้ใช้|ผู้ใช้}}นิรนามของ{{SITENAME}}",
        "siteuser": "ผู้ใช้ $1 จาก {{SITENAME}}",
        "anonuser": "ผู้ใช้นิรนามจาก {{SITENAME}} $1",
        "pageinfo-display-title": "แสดงผลชื่อเรื่อง",
        "pageinfo-default-sort": "ค่าปริยายของคำหลักในการเรียงลำดับ",
        "pageinfo-length": "ความยาวหน้า (ไบต์)",
+       "pageinfo-namespace": "เนมสเปซ",
        "pageinfo-article-id": "เลขหน้า",
        "pageinfo-language": "ภาษาของเนื้อหาของหน้า",
        "pageinfo-language-change": "เปลี่ยน",
        "pageinfo-magic-words": "{{PLURAL:$1|คำสั่งพิเศษ}} ($1)",
        "pageinfo-hidden-categories": "หมวดหมู่ที่ซ่อนอยู่ ($1)",
        "pageinfo-templates": "แม่แบบที่ใช้ ($1)",
-       "pageinfo-toolboxlink": "หà¸\99à¹\89าสารสà¸\99à¹\80à¸\97ศ",
+       "pageinfo-toolboxlink": "สารสà¸\99à¹\80à¸\97ศหà¸\99à¹\89า",
        "pageinfo-redirectsto": "เปลี่ยนทางไป",
        "pageinfo-redirectsto-info": "สนเทศ",
        "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
        "duration-decades": "$1 ทศวรรษ",
        "duration-centuries": "$1 ศตวรรษ",
        "duration-millennia": "$1 สหัสวรรษ",
-       "limitreport-title": "à¸\82à¹\89อมูลà¸\9aัà¸\99à¸\97ึà¸\81à¸\95ัวà¹\81à¸\88à¸\87สà¹\88วà¸\99:",
+       "limitreport-title": "à¸\82à¹\89อมูลà¸\81ารà¸\9bระมวลà¸\9cลà¹\83à¸\99สà¹\88วà¸\99วิà¹\80à¸\84ราะหà¹\8cà¹\84วยาà¸\81รà¸\93à¹\8c:",
        "limitreport-cputime": "การใช้เวลาของซีพียู",
        "limitreport-cputime-value": "$1 วินาที",
        "limitreport-walltime": "การใช้เวลาจริง",
        "limitreport-walltime-value": "$1 วินาที",
-       "limitreport-ppvisitednodes": "à¸\88ำà¸\99วà¸\99à¸\9bมà¸\97ีà¹\88à¹\80à¸\82à¹\89าà¸\8aมà¹\81ลà¹\89วà¸\82อà¸\87à¸\95ัวà¸\9bระมวลà¸\81à¹\88อน",
-       "limitreport-ppgeneratednodes": "à¸\88ำà¸\99วà¸\99à¸\9bมà¸\97ีà¹\88สรà¹\89าà¸\87à¹\81ลà¹\89วà¸\82อà¸\87à¸\95ัวà¸\9bระมวลà¸\81à¹\88อน",
+       "limitreport-ppvisitednodes": "à¸\88ำà¸\99วà¸\99à¸\88ุà¸\94à¸\95à¹\88อà¸\97ีà¹\88à¹\80ยือà¸\99à¹\81ลà¹\89วà¸\82อà¸\87à¸\95ัวà¸\9bระมวลà¸\82ัà¹\89à¸\99à¸\95à¹\89น",
+       "limitreport-ppgeneratednodes": "à¸\88ำà¸\99วà¸\99à¸\88ุà¸\94à¸\95à¹\88อà¸\97ีà¹\88สรà¹\89าà¸\87à¸\82ึà¹\89à¸\99à¸\82อà¸\87à¸\95ัวà¸\9bระมวลà¸\82ัà¹\89à¸\99à¸\95à¹\89น",
        "limitreport-postexpandincludesize": "ขนาดเมื่อรวมขยายแล้ว",
        "limitreport-postexpandincludesize-value": "$1/$2 ไบต์",
        "limitreport-templateargumentsize": "ขนาดอาร์กิวเมนต์แม่แบบ",
index f04dd5b..eec84ac 100644 (file)
@@ -51,7 +51,7 @@
        "tog-enotifrevealaddr": "Ipakita ang aking direksiyong e-liham sa loob ng mga e-liham ng pagpapahayag",
        "tog-shownumberswatching": "Ipakita ang bilang ng mga nagbabantay na tagagamit",
        "tog-oldsig": "Ang iyong umiiral na lagda:",
-       "tog-fancysig": "Ituring ang lagda bilang teksto ng wiki (walang automatikong pagkawing)",
+       "tog-fancysig": "Ituring ang lagda bilang teksto ng wiki (walang automatikong pag-link)",
        "tog-uselivepreview": "Ipakita ang mga paunang tingin nang hindi kinakargang muli ang pahina",
        "tog-forceeditsummary": "Sabihan ako kapag nagpapasok ng walang-lamang buod ng pagbabago",
        "tog-watchlisthideown": "Itago ang aking mga pagbabago mula sa tala ng mga binabantayan",
        "badretype": "Hindi magkatugma ang ipinasok mong mga password.",
        "usernameinprogress": "Ang paggawa ng account para sa pangalan ng tagagamit na ito ay nasa progreso na. Mangyaring maghintay.",
        "userexists": "May gumagamit na ng ipinasok na bansag.\nPumili po ng ibang pangalan.",
-       "loginerror": "Kamalian sa paglagda",
+       "loginerror": "Kamalian sa pag-login",
        "createacct-error": "May pagkakamali sa paglikha ng account",
        "createaccounterror": "Hindi mailikha ang account: $1",
        "nocookiesnew": "Nalikha ang account ng tagagamit, ngunit hindi ka naka-login.\nGumagamit ang {{SITENAME}} ng cookies upang maka-login ang mga tagagamit.\nHindi pinapagana ng browser mo ang cookies.\nPaganahin ito at subukang mag-login na kasama ang bagong pangalan at password.",
        "nocookieslogin": "Gumagamit ang {{SITENAME}} ng mga kuki (''cookies'') para mailagda ang mga tagagamit.\nHindi mo pinagagana ang mga kuki.\nPaki-andar mo ang mga ito at sumubok uli.",
        "nocookiesfornew": "Hindi nalikha ang account ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito. \nTiyaking mayroon kang pinagaganang cookies, ikarga muli ang pahinang ito at subukan muli.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
-       "createacct-loginerror": "Matagumpay na nagawa ang account ngunit hindi ka mailagda ng awtomatiko. Mangyaring pumunta sa [[Special:UserLogin|manu-manong paglagda]].",
+       "createacct-loginerror": "Matagumpay na nagawa ang account ngunit hindi ka mai-login ng awtomatiko. Mangyaring pumunta sa [[Special:UserLogin|manu-manong pag-login]].",
        "noname": "Hindi mo tinukoy ang isang tanggap na pangalan ng tagagamit.",
        "loginsuccesstitle": "Nailagda",
        "loginsuccess": "'''Nakalagda ka na sa {{SITENAME}} bilang si \"$1\".'''",
        "createaccount-title": "Paglikha ng account para sa {{SITENAME}}",
        "createaccount-text": "May lumikha ng account para sa iyong email address sa {{SITENAME}} ($4) na pinangalanang \"$2\", na may password na \"$3\".\nDapat kang mag-login at baguhin ang password mo ngayon.\n\nMaaari mong huwag pansinin ang mensaheng ito, kung mali ang paglikha ng account na ito.",
        "login-throttled": "Masyadong madami ang kamakailan lamang mong pagsubok sa pag-login.\nMaghintay po muna ng $1 bago subukan uli.",
-       "login-abort-generic": "Nabigo ang iyong paglagda - Pinigil",
+       "login-abort-generic": "Nabigo ang iyong pag-login - hindi tagumpay",
        "login-migrated-generic": "Ang iyong account ay inilipat, at ang iyong pangalan ay hindi na umiiral sa wiking ito.",
        "loginlanguagelabel": "Wika: $1",
        "suspicious-userlogout": "Tinanggihan ang inyong kahilingang umalis sa pagkalagda dahil tila ito ay ipinadala ng sirang pambasa-basa o apoderadong pambaon (''caching proxy'')",
        "createacct-another-realname-tip": "Hindi kinakailangan ang tunay na pangalan.\nKung nais mo na ibigay ito, gagamitin ito para sa pagbibigay ng atribusyon para sa kanilang gawa.",
        "pt-login": "Mag-login",
        "pt-login-button": "Mag-login",
-       "pt-login-continue-button": "Magpatuloy sa paglagda",
+       "pt-login-continue-button": "Magpatuloy sa pag-login",
        "pt-createaccount": "Lumikha ng account",
        "pt-userlogout": "Umalis sa pagkakatala",
        "php-mail-error-unknown": "Hindi malamang kamalian sa tungkulin ng liham ng PHP ()",
        "confirmedittext": "Kailangang kumpirmahin mo muna ang adres ng iyong e-liham bago makapagbago ng mga pahina.\nPakihanda at patotohanan ang adres ng e-liham sa pamamagitan ng iyong [[Special:Preferences|kagustuhan ng tagagamit]].",
        "nosuchsectiontitle": "Hindi mahanap ang seksyon",
        "nosuchsectiontext": "Sinubukan mong baguhin ang isang seksyong hindi umiiral.\nMaaaring inilipat o ibinura ito habang tinitingnan mo ang pahina.",
-       "loginreqtitle": "Paglagda/Pagtala Kailangan",
+       "loginreqtitle": "Kailangan ang pag-login",
        "loginreqlink": "mag-login",
        "loginreqpagetext": "Kailangan mong $1 para matanaw ang ibang mga pahina.",
        "accmailtitle": "Ipinadala na ang password.",
        "yourvariant": "Iba pang anyo ng wika ng nilalaman:",
        "prefs-help-variant": "Ang nais mong kaibahan o ortograpiya sa pagpapakita ng mga pahina ng nilalaman ng wiking ito.",
        "yournick": "Panglagda:",
-       "prefs-help-signature": "Ang mga puna sa mga pahina ng usapan ay dapat na lagdaan ng \"<nowiki>~~~~</nowiki>\" na magiging lagda mo at marka ng oras.",
-       "badsig": "Hindi tamang hilaw na lagda.\nPakisuri ang mga tatak ng HTML.",
+       "prefs-help-signature": "Ang mga kumento sa mga pahina ng usapan ay dapat na lagdaan ng \"<nowiki>~~~~</nowiki>\" na magiging lagda mo na may kasamang marka ng petsa at oras.",
+       "badsig": "Hindi tamang hilaw na lagda.\nPakisuri ang mga tag ng HTML.",
        "badsiglength": "Napakahaba ng iyong lagda.\nDapat na mas mababa kaysa $1 {{PLURAL:$1|panitik|mga panitik}}.",
        "yourgender": "Sa anong paraan nais mo bang ilarawan ang sarili mo?",
        "gender-unknown": "Hindi ko nais itukoy",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
        "date-range-from": "Mula sa petsang:",
        "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina",
+       "authprovider-resetpass-skip-label": "Laktawan",
        "edit-error-long": "Mga kamalian:",
        "gotointerwiki-invalid": "Di-wasto ang tinukoy na pamagat."
 }
index e2a7984..5c856ee 100644 (file)
        "returnto": "$1 sayfasına geri dön.",
        "tagline": "{{SITENAME}} sitesinden",
        "help": "Yardım",
+       "help-mediawiki": "MediaWiki hakkında yardım",
        "search": "Ara",
        "search-ignored-headings": " #<!-- bu satırı olduğu gibi bırakın --> <pre>\n# Başlıklar aramada göz ardı edilecektir.\n# Bu değişiklikler başlık ve sayfa endeksli şekilde en kısa sürede yürürlüğe girecektir.\n# Boş bir düzenleme yaparak, yeniden dizin oluşturulmasını zorlayabilirsiniz.\n# Sözdizimi aşağıdaki gibidir:\n#   * \"#\" karakteri ile başlayan her satır, satır sonuna kadar bir yorumdur.\n#   * Boş olmayan her türlü satırın tam başlığı her durumda görmezden gelinir.\nKaynaklar\nDış bağlantılar\nAyrıca bakınız\n #</pre> <!-- bu satırları olduğu gibi bırakın-->",
        "searchbutton": "Ara",
        "confirmable-confirm": "Emin misiniz?",
        "confirmable-yes": "Evet",
        "confirmable-no": "Hayır",
-       "thisisdeleted": "$1 görmek veya geri getirmek istermisiniz?",
+       "thisisdeleted": "$1 görmek veya geri getirmek ister misiniz?",
        "viewdeleted": "$1 gör?",
        "restorelink": "{{PLURAL:$1|bir silinmiş değişikliği|$1 silinmiş değişikliği}}",
        "feedlinks": "Besleme:",
        "enterlockreason": "Koruma için bir neden belirtin. Korumanın ne zaman kaldırılacağına dair tahmini bir tarih eklemeyi unutmayın.",
        "readonlytext": "Veritabanı, muhtemelen olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Çalışmaların ardından normale dönecektir.\n\nVeritabanını kilitleyen sistem yöneticisinin açıklaması şu şekilde: $1",
        "missing-article": "Veritabanında bulunması istenen \"$1\" $2 adlı sayfaya ait metin bulunamadı.\n\nBu durum, genellikle silinmiş bir sayfanın geçmiş bir sürümüne yönlendirilmekten kaynaklanır.\n\nEğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz.\nLütfen URL'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.",
-       "missingarticle-rev": "(revizyon#: $1)",
+       "missingarticle-rev": "(sürüm#: $1)",
        "missingarticle-diff": "(Fark: $1, $2)",
        "readonly_lag": "Yedek sunucular ana sunucu ile güncellenirken veritabanı otomatik olarak kilitlendi.",
        "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' HTTP üstbilgisi gönderildi, ancak istek bir API yazma modülüne yapıldı.",
        "passwordtooshort": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.",
        "passwordtoolong": "Parolalar $1 karakterden uzun olamaz.",
        "passwordtoopopular": "Yaygın olarak seçilen parolalar kullanılamaz. Lütfen tahmin edilmesi daha zor bir parola seçin.",
+       "passwordinlargeblacklist": "Girilen şifre çok sık kullanılan şifrelerin bir listesidir. Lütfen daha benzersiz bir şifre seçin.",
        "password-name-match": "Parolanız kullanıcı adınızdan farklı olmalıdır.",
        "password-login-forbidden": "Bu kullanıcı adı ve parolanın kullanımı yasaklanmıştır.",
        "mailmypassword": "Parolayı sıfırla",
        "accmailtext": "[[User talk:$1|$1]] için rastgele oluşturulan parola $2 adresine gönderildi.\n\nBu yeni hesap için parola, giriş yapıldıktan sonra ''[[Special:ChangePassword|parolayı değiştir]]'' bölümünde değiştirilebilir.",
        "newarticle": "(Yeni)",
        "newarticletext": "Henüz varolmayan bir sayfaya konulmuş bir bağlantıya tıkladınız.\nSayfayı oluşturmak için aşağıdaki metin kutusunu kullanın. ([$1 yardım sayfasına] bakınız).\nBuraya yanlışlıkla geldiyseniz tarayıcınızın  <strong>geri </strong> tuşuna tıklayın.",
-       "anontalkpagetext": "----\n<em>Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır.</em>\nBu nedenle bu kişiyi belirtmek için rakamsal IP adresini kullanmak zorundayız.\nBu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir.\nEğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:CreateAccount|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].",
+       "anontalkpagetext": "----\n<em>Bu sayfa henüz bir kullanıcı hesabı oluşturmamış veya hesabını kullanmayan bir anonim kullanıcının mesaj sayfasıdır.</em>\nBu nedenle bu kişileri belirtmek için rakamsal IP adresini kullanmak zorundayız.\nBu gibi IP adresleri birçok kullanıcı tarafından paylaşılabilir.\nEğer siz de bir anonim kullanıcıysanız ve size sizin ilginiz olmayan iletiler geliyorsa, lütfen diğer anonim kullanıcılarla olabilecek olan karmaşayı önlemek için [[Special:CreateAccount|bir hesap edinin]] veya [[Special:UserLogin|oturum açın]].",
        "noarticletext": "Bu sayfa şu anda boştur.\nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],\nya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} oluşturabilirsiniz]</span>.",
        "noarticletext-nopermission": "Bu sayfa şu anda boştur. \nBu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz]</span>, fakat sayfayı oluşturma yetkiniz bulunmamaktadır.",
        "missing-revision": "\"{{FULLPAGENAME}}\" sayfasının #$1 sürümü yok.\n\nBu duruma genellikle silinmiş bir sayfaya eski tarihli bir bağlantının takip edilmesi neden olur.\n\nDaha fazla detaylı bilgi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sayfasında bulunabilir].",
        "edit-gone-missing": "Sayfa güncellenemiyor.\nSilinmiş görünüyor.",
        "edit-conflict": "Değişiklik çakışması.",
        "edit-no-change": "Değişikliğiniz yoksayıldı, çünkü metinde bir değişiklik yapılmadı.",
+       "edit-slots-cannot-add": "Şu {{PLURAL:$1|yuva|yuvalar}} burada desteklenmiyor: $2.",
+       "edit-slots-cannot-remove": "Şu {{PLURAL:$1|yuva|yuvalar}} gereklidir ve kaldırılamaz: $2.",
+       "edit-slots-missing": "Şu {{PLURAL:$1|yuva|yuvalar}} eksik: $2.",
        "postedit-confirmation-created": "Sayfa oluşturuldu.",
        "postedit-confirmation-restored": "Sayfa geri yüklendi.",
        "postedit-confirmation-saved": "Değişikliğiniz kaydedildi.",
        "editpage-invalidcontentmodel-text": "\"$1\" içerik modeli desteklenmemektedir.",
        "editpage-notsupportedcontentformat-title": "İçerik biçimi desteklenmiyor",
        "editpage-notsupportedcontentformat-text": "$1 içerik biçimi $2 içerik modeli tarafından desteklenmiyor.",
+       "slot-name-main": "Ana",
        "content-model-wikitext": "vikimetin",
        "content-model-text": "düz metin",
        "content-model-javascript": "JavaScript",
        "timezonelegend": "Zaman dilimi:",
        "localtime": "Yerel saat:",
        "timezoneuseserverdefault": "Viki varsayılanını kullanın ($1)",
-       "timezoneuseoffset": "Diğer (ofset belirtin)",
+       "timezoneuseoffset": "Diğer (aşağıdaki ofset belirtiniz)",
        "timezone-useoffset-placeholder": "Örnek değerler: \"-07:00\" veya \"01:00\"",
        "servertime": "Sunucu saati:",
        "guesstimezone": "Tarayıcınız sizin yerinize doldursun",
        "prefs-advancedwatchlist": "Gelişmiş seçenekler",
        "prefs-displayrc": "Görüntüleme seçenekleri",
        "prefs-displaywatchlist": "Görüntüleme seçenekleri",
+       "prefs-changesrc": "Gösterilen değişiklikler",
+       "prefs-changeswatchlist": "Gösterilen değişiklikler",
        "prefs-pageswatchlist": "İzlenen sayfalar",
        "prefs-tokenwatchlist": "Anahtar",
        "prefs-diffs": "Farklar",
        "grant-group-email": "E-posta gönder",
        "grant-group-high-volume": "Yüksek hacimli etkinlik gerçekleştir",
        "grant-group-customization": "Özelleştirme ve tercihler",
+       "grant-group-administration": "Hizmetli işlemlerini uygulayın",
        "grant-group-private-information": "Sizinle ilgili özel verilere erişme",
        "grant-group-other": "Çeşitli aktivite",
        "grant-blockusers": "Kullanıcıları engelle ve engeli kaldır",
        "rcfilters-filter-reviewstatus-manual-description": "Devriye onayından el ile geçmiş düzenlemeler.",
        "rcfilters-filter-reviewstatus-manual-label": "Manuel olarak devriye edilmiş",
        "rcfilters-filter-reviewstatus-auto-description": "İşleri otomatik olarak devriye olarak işaretlenen gelişmiş kullanıcılara göre düzenler.",
+       "rcfilters-filter-reviewstatus-auto-label": "Oto-devriyeler",
        "rcfilters-filtergroup-significance": "Önem",
        "rcfilters-filter-minor-label": "Küçük düzenlemeler",
        "rcfilters-filter-minor-description": "Yazarın küçük olarak etiketlediği düzenlemeler.",
        "uploadstash-errclear": "Dosyaların silinmesi başarısız oldu.",
        "uploadstash-refresh": "Dosya listelerini yenile",
        "uploadstash-thumbnail": "küçük resmi görüntüle",
+       "uploadstash-bad-path": "Yol mevcut değil.",
+       "uploadstash-bad-path-invalid": "Yol geçerli değil.",
        "uploadstash-bad-path-unknown-type": "Bilinmeyen tür \"$1\".",
        "uploadstash-bad-path-unrecognized-thumb-name": "Tanınmayan başparmak adı.",
+       "uploadstash-file-not-found-no-thumb": "Küçük resim alınamadı.",
+       "uploadstash-file-not-found-no-local-path": "Ölçeklenmiş öge için yerel yol yok.",
+       "uploadstash-file-not-found-no-object": "Küçük resim için yerel dosya nesnesi oluşturulamadı.",
+       "uploadstash-file-not-found-no-remote-thumb": "Küçük resim alma başarısız oldu: $1\nURL = $2",
        "invalid-chunk-offset": "Geçersiz öbek ofset",
        "img-auth-accessdenied": "Erişim engellendi",
        "img-auth-nopathinfo": "Eksik path bilgilendirmesi.\nSunucunuz REQUEST_URI and/or PATH_INFO değişlenlerini geçirmek için ayarlanmış olmalıdır.\nEğer etkinse, $wgUsePathInfo'i etkinleştirmeyi deneyin.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization sayfasına bakın.",
        "pageinfo-display-title": "Görüntülenen başlık",
        "pageinfo-default-sort": "Varsayılan sıralama anahtarı",
        "pageinfo-length": "Sayfa uzunluğu (bayt cinsinden)",
+       "pageinfo-namespace": "Ad alanı",
        "pageinfo-article-id": "Sayfa ID",
        "pageinfo-language": "Sayfa içeriğinin dili",
+       "pageinfo-language-change": "değiştir",
        "pageinfo-content-model": "Sayfa içerik modeli",
        "pageinfo-content-model-change": "değiştir",
        "pageinfo-robot-policy": "Robotlar tarafından endeksleniyor",
        "pageinfo-watchers": "Sayfanın izleyici sayısı",
        "pageinfo-visiting-watchers": "Son değişiklikleri görüntüleyen izleyici sayısı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izleyiciden|izleyiciden}} az",
+       "pageinfo-few-visiting-watchers": "Son değişiklikleri izleyen bir kullanıcı olabilir veya olmayabilir",
        "pageinfo-redirects-name": "Bu sayfaya yönlendirme sayısı",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Bu sayfanın alt sayfaları",
        "tags-edit-reason": "Neden:",
        "tags-edit-revision-submit": "{{PLURAL:$1|Bu sürüme|$1 sürüme}} değişiklikleri uygula",
        "tags-edit-logentry-submit": "{{PLURAL:$1|Bu günlük kaydına|Bu $1 günlük kaydına}} değişiklikleri uygula",
-       "tags-edit-success": "Değişiklikler başarıyla uygulandı.",
+       "tags-edit-success": "Değişiklikler uygulandı.",
        "tags-edit-failure": "Değişiklikler uygulanamadı:\n$1",
        "tags-edit-nooldid-title": "Hedef sürüm geçersiz",
        "tags-edit-nooldid-text": "Bu işlemi gerçekleştirmek için herhangi bir hedef sürüm belirtmediniz, ya da belirtilen sürüm mevcut değil.",
        "htmlform-date-placeholder": "YYYY-AA-GG",
        "htmlform-time-placeholder": "SS:DD:SS",
        "htmlform-datetime-placeholder": "YYYY-AA-GG SS:DD:SS",
+       "htmlform-date-invalid": "Belirttiğiniz değer tanınan bir tarih değil. YYYY-AA-GG formatını kullanmayı deneyin.",
+       "htmlform-time-invalid": "Belirttiğiniz değer tanınan bir saat değil. SS:DD:SS formatını kullanmayı deneyin.",
        "htmlform-title-not-creatable": "\"$1\"oluşturulabilir bir sayfa ismi değil.",
        "htmlform-title-not-exists": "$1 mevcut değil.",
        "htmlform-user-not-exists": "<strong>$1</strong> mevcut değil.",
        "authform-notoken": "Eksik token",
        "authform-wrongtoken": "Yanlış token",
        "specialpage-securitylevel-not-allowed-title": "İzin verilmedi",
+       "authpage-cannot-login": "Giriş başlatılamıyor.",
        "credentialsform-account": "Hesap adı:",
        "edit-error-short": "Hata: $1",
        "edit-error-long": "Hatalar:\n\n$1",
        "passwordpolicies-policy-passwordcannotmatchusername": "Parola kullanıcı adıyla aynı olamaz",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Şifre özellikle kara listeye alınmış şifrelerle aynı olamaz",
        "passwordpolicies-policy-maximalpasswordlength": "Parola $1 karakterden kısa olmalı",
-       "passwordpolicies-policy-passwordcannotbepopular": "Parola, $1 popüler parola listesinde olamaz"
+       "passwordpolicies-policy-passwordcannotbepopular": "Parola, $1 popüler parola listesinde olamaz",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Parola, en sık kullanılan 100.000 parola listesinde olamaz."
 }
index cdfc245..fc73611 100644 (file)
@@ -3,7 +3,8 @@
                "authors": [
                        "Ariyo",
                        "Arjunaraoc",
-                       "아라"
+                       "아라",
+                       "Mirzali"
                ]
        },
        "tog-oldsig": "Imḍa du3do:",
index 69c3250..ada8f7f 100644 (file)
        "protect-otherreason": "Інша/додаткова причина:",
        "protect-otherreason-op": "Інша причина",
        "protect-dropdown": "* Типові причини захисту\n** частий вандалізм\n** надмірний спам\n** непродуктивна війна редагувань\n** популярна сторінка",
-       "protect-edit-reasonlist": "Ð\9fÑ\80иÑ\87ини Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83 Ð²Ñ\96д Ñ\80едагÑ\83ванÑ\8c",
+       "protect-edit-reasonlist": "РедагÑ\83ваÑ\82и Ð¿Ñ\80иÑ\87ини Ð·Ð°Ñ\85иÑ\81Ñ\82Ñ\83",
        "protect-expiry-options": "1 година:1 hour,1 день:1 day,1 тиждень:1 week,2 тижні:2 weeks,1 місяць:1 month,3 місяці:3 months,6 місяців:6 months,1 рік:1 year,назавжди:infinite",
        "restriction-type": "Права:",
        "restriction-level": "Рівень доступу:",
index 3b32542..aa4cafc 100644 (file)
        "suspicious-userlogout": "کھاتے سے خارج ہونے کی درخواست رد کر دی گئی ہے کیونکہ ایسا معلوم ہوتا ہے یہ درخواست کسی شکستہ براؤزر یا کیش (cache) کی حامل پراکسی سے بھیجی گئی تھی۔",
        "createacct-another-realname-tip": "حقیقی نام اختیاری ہے۔\nاگر آپ اسے فراہم کریں تو آپ کے کاموں کو اس نام سے منسوب کرنے کے لیے استعمال کیا جائے گا۔",
        "pt-login": "داخل ہوں",
-       "pt-login-button": "داخل ہو",
+       "pt-login-button": "داخل ہوں",
        "pt-login-continue-button": "داخل ہوں",
        "pt-createaccount": "کھاتا بنائیں",
        "pt-userlogout": "خارج ہوجائیں",
        "semiprotectedpagewarning": "<strong>اطلاع:</strong> اس صفحہ کو محفوظ کر دیا گیا ہے، لہذا اب اس میں محض خود توثیق شدہ صارفین ہی ترمیم کر سکتے ہیں۔\nحوالہ کے لیے ذیل میں نوشتہ کا تازہ ترین اندراج درج ہے:",
        "cascadeprotectedwarning": "<strong>انتباہ:</strong> اس صفحہ میں ترمیم کاری کو محفوظ کر دیا گیا ہے اور محض [[Special:ListGroupRights|انتظامی اختیارات]] کے حامل صارفین ہی اس میں ترمیم کر سکتے ہیں۔ اسے محفوظ کرنے کی وجہ یہ ہے کہ پیش نظر صفحہ درج ذیل محفوظ {{PLURAL:$1|صفحہ|صفحات}} کی آبشاری حفاظت میں شامل ہے:",
        "titleprotectedwarning": "<strong>انتباہ: اس صفحہ کو محفوظ کر دیا گیا ہے، چنانچہ اسے تخلیق کرنے کے لیے [[Special:ListGroupRights|خصوصی اختیارات]] درکار ہونگے۔</strong>\nحوالہ کے لیے ذیل میں نوشتہ کا تازہ ترین اندراج موجود ہے:",
-       "templatesused": "اِس صفحہ پر مستعمل {{PLURAL:$1|سانچہ|سانچے}}:",
-       "templatesusedpreview": "اÙ\90س Ù¾Û\8cØ´ Ù\85Ù\86ظر Ù\85Û\8cÚº Ù\85ستعÙ\85Ù\84 {{PLURAL:$1|ساÙ\86Ú\86Û\81|ساÙ\86Ú\86Û\92}}:",
+       "templatesused": "اِس صفحہ پر مستعمل {{PLURAL:$1|سانچہ|سانچے}} حسب ذیل {{PLURAL:$1|ہے|ہیں}}:",
+       "templatesusedpreview": "اÙ\90س Ù\86Ù\85ائش Ù\85Û\8cÚº Ù\85ستعÙ\85Ù\84 {{PLURAL:$1|ساÙ\86Ú\86Û\81|ساÙ\86Ú\86Û\92}} Ø­Ø³Ø¨ Ø°Û\8cÙ\84 {{PLURAL:$1|Û\81Û\92\81Û\8cÚº}}:",
        "templatesusedsection": "اِس قطعہ میں مستعمل {{PLURAL:$1|سانچہ|سانچے}}:",
        "template-protected": "(محفوظ شدہ)",
        "template-semiprotected": "(نیم محفوظ)",
        "protectedtitles-submit": "دکھائیں",
        "listusers": "فہرست ارکان",
        "listusers-editsonly": "محض ترمیم کرنے والے صارفین دکھائیں",
+       "listusers-temporarygroupsonly": "محض عارضی حلقہ ہائے صارف میں شامل صارفین کو دکھائیں",
        "listusers-creationsort": "تاریخ تخلیق کے مطابق مرتب کریں",
        "listusers-desc": "نزولی ترتیب",
        "usereditcount": "$1 {{PLURAL:$1|ترمیم|ترامیم}}",
index 6cc95fc..171e877 100644 (file)
        "searcharticle": "O‘tish",
        "history": "Sahifa tarixi",
        "history_short": "Tarix",
+       "history_small": "tarix",
        "updatedmarker": "oxirgi tashrifimdan keyingi oʻzgarishlar",
        "printableversion": "Bosma uchun versiya",
        "permalink": "Doimiy ishorat",
        "notextmatches": "Bunday matn topilmadi",
        "prevn": "oldingi {{PLURAL:$1|$1}}",
        "nextn": "keyingi {{PLURAL:$1|$1}}",
+       "next-page": "keyingi sahifa",
        "prevn-title": "Avvalgi $1 {{PLURAL:$1|natija|natijalar}}",
        "nextn-title": "Keyingi $1 {{PLURAL:$1|natija|natijalar}}",
        "shown-title": "Sahifada $1 ta {{PLURAL:$1|natija}} koʻrsat",
index 433d966..f7fe6ca 100644 (file)
        "defaultmessagetext": "預設訊息文字",
        "content-failed-to-parse": "從$1模型解析到$2目錄時肥佬咗。原因:$3。",
        "invalid-content-data": "無效嘅內容資料",
-       "content-not-allowed-here": "「$1」唔可以輸入[[:$2]]。",
+       "content-not-allowed-here": "喺「[[:$2]]」呢版,「$3」呢個位唔准填「$1」",
        "editwarning-warning": "離開爾一版會令到閣下嘅修改唔見咗。\n閣下可以喺喜好設定嘅\"{{int:prefs-editing}}\"小節度停用爾個警告。",
        "editpage-invalidcontentmodel-title": "唔支援爾種內容模型。",
        "editpage-invalidcontentmodel-text": "內容模型 \"$1\" 唔支援。",
        "editpage-notsupportedcontentformat-title": "唔支持爾種內容格式。",
        "editpage-notsupportedcontentformat-text": "指定嘅目錄類$1同$2唔兼容",
+       "slot-name-main": "主",
        "content-model-wikitext": "維基文字",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript程式語言",
        "post-expand-template-argument-category": "包含住略過模參數嘅版",
        "parser-template-loop-warning": "已偵測迴模: [[$1]]",
        "template-loop-category": "有循環模嘅頁",
+       "template-loop-category-desc": "呢版包含一個模循環,即係遞歸調用自己嘅模。",
        "parser-template-recursion-depth-warning": "迴模深度限制超過咗 ($1)",
        "language-converter-depth-warning": "字體變換器深度限制超過咗 ($1)",
        "node-count-exceeded-category": "有頁面超出咗指定數",
        "prefs-labs": "實驗性嘅特色",
        "prefs-user-pages": "用戶頁",
        "prefs-personal": "用戶簡介",
-       "prefs-rc": "最近改",
+       "prefs-rc": "最近改",
        "prefs-watchlist": "監視清單",
        "prefs-editwatchlist": "編輯監視清單",
        "prefs-editwatchlist-label": "編輯監視清單入面嘅項目:",
        "stub-threshold": "楔位連結格式門檻 ($1):",
        "stub-threshold-sample-link": "樣辦",
        "stub-threshold-disabled": "閂咗",
-       "recentchangesdays": "最近改中嘅顯示日數:",
+       "recentchangesdays": "最近改中嘅顯示日數:",
        "recentchangesdays-max": "最多 $1 日",
        "recentchangescount": "喺最近修改、版歷史同日誌度預設顯示嘅編輯數:",
        "prefs-help-recentchangescount": "最大數目:1000",
        "timezonelegend": "時區:",
        "localtime": "本地時間:",
        "timezoneuseserverdefault": "用維基預設值($1)",
-       "timezoneuseoffset": "其他 (指定偏移)",
+       "timezoneuseoffset": "第啲(喺下低指定時區偏移)",
        "servertime": "伺機器時間:",
        "guesstimezone": "由瀏覽器填上",
        "timezoneregion-africa": "非洲",
        "prefs-advancedwatchlist": "進階選項",
        "prefs-displayrc": "顯示選項",
        "prefs-displaywatchlist": "顯示選項",
+       "prefs-pageswatchlist": "監視嘅版",
        "prefs-tokenwatchlist": "密匙",
        "prefs-diffs": "差異",
        "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
        "nchanges": "$1次更改",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|你上次嚟之後}}有 $1 個",
        "enhancedrc-history": "歷史",
-       "recentchanges": "最近改過嘅嘢",
+       "recentchanges": "最近修改",
        "recentchanges-legend": "最近更改選項",
-       "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
+       "recentchanges-summary": "喺呢版追蹤對呢個wiki嘅最近修改。",
        "recentchanges-noresult": "喺指定時段無符合呢啲條件嘅改動。",
        "recentchanges-timeout": "呢勻搜索超時。你不妨試下唔同嘅搜索參數。",
        "recentchanges-network": "因為技術出錯,冇結果載入到。請試下刷新呢版。",
-       "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
+       "recentchanges-feed-description": "喺呢條訂閱頻道追蹤呢個wiki嘅最近修改。",
        "recentchanges-label-newpage": "呢次編輯開咗一個新版",
        "recentchanges-label-minor": "呢個係一個細編輯",
        "recentchanges-label-bot": "呢次編輯係由機械人進行",
        "rcfilters-watchlist-markseen-button": "標記所有改動睇咗",
        "rcfilters-watchlist-edit-watchlist-button": "編輯監視清單",
        "rcfilters-watchlist-showupdated": "標<strong>粗體字</strong>嘅頁響你上次嚟之後畀人改過。",
-       "rcfilters-preference-label": "隱藏最近修改嘅改良版本。",
+       "rcfilters-preference-label": "用冇JavaScript嘅界面",
        "rcfilters-preference-help": "還原返2017年介面新設計同相關架撐。",
        "rcfilters-filter-showlinkedfrom-label": "顯示鏈自呢版嘅版面上嘅修改",
        "rcfilters-target-page-placeholder": "入版(或者類)名",
        "booksources-search": "搵",
        "booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
        "booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
+       "magiclink-tracking-rfc": "用緊RFC魔術鏈嘅版",
+       "magiclink-tracking-pmid": "用緊PMID魔術鏈嘅版",
+       "magiclink-tracking-isbn": "用緊ISBN魔術鏈嘅版",
        "specialloguserlabel": "執行人:",
        "speciallogtitlelabel": "目標(入標題或者用戶「{{ns:user}}:用戶名」 ):",
        "log": "日誌",
        "ipb-disableusertalk": "唔畀封鎖緊嘅用戶去改自己個用戶討論頁",
        "ipb-change-block": "用呢啲設定重新封鎖用戶",
        "ipb-confirm": "確認封鎖",
+       "ipb-sitewide": "全站",
+       "ipb-partial": "部分",
+       "ipb-type-label": "類型",
+       "ipb-pages-label": "版",
        "badipaddress": "無效嘅IP地址",
        "blockipsuccesssub": "封鎖成功",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經封鎖。<br />\n去[[Special:BlockList|封鎖清單]]睇返封鎖。",
        "tooltip-n-randompage": "是但載入一個頁面",
        "tooltip-n-help": "搵吓點做嘅地方",
        "tooltip-t-whatlinkshere": "列出所有連接過嚟呢度嘅頁面",
-       "tooltip-t-recentchangeslinked": "喺呢個頁面連出嘅頁面更改",
+       "tooltip-t-recentchangeslinked": "由呢版連出去嘅版嘅最近修改",
        "tooltip-feed-rss": "呢一頁嘅RSS集合",
        "tooltip-feed-atom": "呢一頁嘅Atom集合",
        "tooltip-t-contributions": "{{GENDER:$1|呢個用戶}}嘅貢獻一覽",
        "svg-long-error": "無效嘅SVG檔: $1",
        "show-big-image": "原本檔案",
        "show-big-image-preview": "預覽大細:$1。",
+       "show-big-image-preview-differ": "呢個「$2」檔案嘅呢個「$3」預覽嘅大細:$1。",
        "show-big-image-other": "第啲{{PLURAL:$2|解像度}}:$1。",
        "show-big-image-size": "$1 × $2 像素",
        "file-info-gif-looped": "循環",
        "exif-giffilecomment": "GIF文件註",
        "exif-intellectualgenre": "項類",
        "exif-subjectnewscode": "項碼",
+       "exif-originalimageheight": "呢幅圖裁之前嘅高度",
+       "exif-originalimagewidth": "呢幅圖裁之前嘅闊度",
        "exif-compression-1": "未壓過",
        "exif-copyrighted-true": "受版權保護",
+       "exif-copyrighted-false": "未設版權狀態",
        "exif-photometricinterpretation-1": "黑同白(黑係0)",
        "exif-unknowndate": "未知日期",
        "exif-orientation-1": "正常",
        "imgmultigo": "去!",
        "imgmultigoto": "去第$1版",
        "img-lang-default": "(預設語言)",
+       "img-lang-info": "整幅$1版嘅圖。 $2",
        "img-lang-go": "去",
        "ascending_abbrev": "增",
        "descending_abbrev": "減",
        "autosumm-blank": "成版洗曬",
        "autosumm-replace": "用「$1」取代內容",
        "autoredircomment": "跳緊轉呢版到[[$1]]",
+       "autosumm-removed-redirect": "刪咗去「[[$1]]」嘅跳轉",
+       "autosumm-changed-redirect-target": "將跳轉目標由「[[$1]]」改成「[[$2]]」",
        "autosumm-new": "開咗新版「$1」",
        "autosumm-newblank": "開空頁",
+       "size-bytes": "$1字節",
        "lag-warn-normal": "新過$1秒嘅更改可能唔會響呢個表度顯示。",
        "lag-warn-high": "由於資料庫嘅過度延遲,新過$1秒嘅更改可能唔會響呢個表度顯示。",
        "watchlistedit-normal-title": "編輯監視清單",
        "watchlistedit-clear-explain": "將會刪走監視清單入邊所有嘢",
        "watchlistedit-clear-titles": "標題:",
        "watchlistedit-clear-submit": "清空監視清單(永久清空!)",
+       "watchlistedit-clear-done": "你嘅監視清單洗晒。",
        "watchlistedit-clear-jobqueue": "清緊你嘅監視清單。可能要等一陣!",
+       "watchlistedit-clear-removed": "$1個題目刪咗:",
        "watchlisttools-clear": "清空監視清單",
        "watchlisttools-view": "睇吓有關嘅更改",
        "watchlisttools-edit": "睇吓同埋編輯監視清單",
        "specialpages-group-maintenance": "維護報告",
        "specialpages-group-other": "其它特別頁",
        "specialpages-group-login": "簽到/開新戶口",
-       "specialpages-group-changes": "最近改同日誌",
+       "specialpages-group-changes": "最近改同日誌",
        "specialpages-group-media": "媒體報告同上載",
        "specialpages-group-users": "用戶同權限",
        "specialpages-group-highuse": "高度使用頁",
        "tags": "有效更改過嘅標籤",
        "tag-filter": "[[Special:Tags|標籤]]過濾器:",
        "tag-filter-submit": "過濾器",
-       "tag-list-wrapper": "[[Special:Tags|$1個標籤]]:$2",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|標籤|標籤}}]]:$2",
        "tag-mw-new-redirect": "新跳轉",
        "tag-mw-removed-redirect": "剷走跳轉",
        "tag-mw-blank": "清空",
index 55e03bf..347a832 100644 (file)
        "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
        "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯方塊中輸入內容 (詳情請參考 [$1 使用說明頁面]) 。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
-       "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位址可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:CreateAccount|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
+       "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識對方,但相同的 IP 位址可能是由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請[[Special:CreateAccount|建立新帳號]]或[[Special:UserLogin|登入]]避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,您可以在其它頁面中[[Special:Search/{{PAGENAME}}|搜尋此頁面標題]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 建立此頁面]</span>。",
        "noarticletext-nopermission": "此頁面目前沒有內容,\n您可以在其它頁面中 [[Special:Search/{{PAGENAME}}|搜尋此頁面標題]],或 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋相關日誌]</span>,但您沒有權限建立此頁面。",
        "missing-revision": "頁面名稱 \"{{FULLPAGENAME}}\" 的 #$1 修訂版本不存在。\n\n通常是因連結到過期的歷史頁面,該頁面已被刪除。\n詳情請參考 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "blocklog-showsuppresslog": "此使用者先前被封鎖並且隱藏過。\n以下為禁止顯示紀錄以供參考:",
        "blocklogentry": "已封鎖 [[$1]] 的期限至 $2 $3",
        "reblock-logentry": "變更 [[$1]] 的封鎖設定,到期時間為 $2 $3",
-       "blocklogtext": "此為使用者的封鎖及取消封鎖動作的記錄。未列出自動封鎖的IP位址。請參考[[Special:BlockList|封鎖清單]]中的目前正在作業的阻止與封鎖。",
+       "blocklogtext": "此為使用者的封鎖及取消封鎖動作的記錄。未列出自動封鎖的IP位址。請參考[[Special:BlockList|封鎖清單]]中的目前正在運作的阻止與封鎖。",
        "unblocklogentry": "已解除封鎖 $1",
        "block-log-flags-anononly": "僅限匿名使用者",
        "block-log-flags-nocreate": "停用帳號建立",
index 9f8d8f8..9c7bc00 100644 (file)
@@ -7,15 +7,7 @@ DROP INDEX ct_log_id ON /*_*/change_tag;
 DROP INDEX ct_rev_id ON /*_*/change_tag;
 DROP INDEX ct_tag ON /*_*/change_tag;
 
-DROP INDEX ts_rc_id ON /*_*/tag_summary;
-DROP INDEX ts_log_id ON /*_*/tag_summary;
-DROP INDEX ts_rev_id ON /*_*/tag_summary;
-
 CREATE UNIQUE INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag (ct_rc_id,ct_tag);
 CREATE UNIQUE INDEX /*i*/change_tag_log_tag ON /*_*/change_tag (ct_log_id,ct_tag);
 CREATE UNIQUE INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag (ct_rev_id,ct_tag);
 CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
-
-CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
diff --git a/maintenance/archives/patch-tag_summary-ts_id.sql b/maintenance/archives/patch-tag_summary-ts_id.sql
deleted file mode 100644 (file)
index 66fa72e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
--- Primary key in tag_summary table
-
-ALTER TABLE /*$wgDBprefix*/tag_summary
-       ADD COLUMN ts_id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-       ADD PRIMARY KEY (ts_id);
diff --git a/maintenance/archives/patch-tag_summary-ts_log_id-unsigned.sql b/maintenance/archives/patch-tag_summary-ts_log_id-unsigned.sql
deleted file mode 100644 (file)
index 617073d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE /*_*/tag_summary MODIFY ts_log_id int unsigned NULL;
\ No newline at end of file
diff --git a/maintenance/archives/patch-tag_summary-ts_rev_id-unsigned.sql b/maintenance/archives/patch-tag_summary-ts_rev_id-unsigned.sql
deleted file mode 100644 (file)
index e6a5bcd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE /*_*/tag_summary MODIFY ts_rev_id int unsigned NULL;
\ No newline at end of file
diff --git a/maintenance/archives/patch-tag_summary.sql b/maintenance/archives/patch-tag_summary.sql
deleted file mode 100644 (file)
index a81b368..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
--- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT that only works on MySQL 4.1+
--- Andrew Garrett, 2009-01
-CREATE TABLE /*_*/tag_summary (
-       ts_rc_id int NULL,
-       ts_log_id int NULL,
-       ts_rev_id int NULL,
-       ts_tags BLOB NOT NULL
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
diff --git a/maintenance/archives/patch-valid_tag.sql b/maintenance/archives/patch-valid_tag.sql
deleted file mode 100644 (file)
index 994a5d5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
--- Andrew Garrett, 2009-01
-CREATE TABLE /*_*/valid_tag (
-       vt_tag varchar(255) NOT NULL PRIMARY KEY
-) /*$wgDBTableOptions*/;
diff --git a/maintenance/mssql/archives/patch-tag_summary-ts_id.sql b/maintenance/mssql/archives/patch-tag_summary-ts_id.sql
deleted file mode 100644 (file)
index d62bd35..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
--- Primary key in tag_summary table
-
-ALTER TABLE /*_*/tag_summary ADD ts_id INT IDENTITY;
-ALTER TABLE /*_*/tag_summary ADD CONSTRAINT pk_tag_summary PRIMARY KEY(ts_id)
index 371d80b..4bafc8b 100644 (file)
@@ -1,6 +1,6 @@
 -- Primary key and expiry column in user_groups table
 
 DROP INDEX IF EXISTS /*i*/ug_user_group ON /*_*/user_groups;
-ALTER TABLE /*_*/tag_summary ADD CONSTRAINT pk_user_groups PRIMARY KEY(ug_user, ug_group);
-ALTER TABLE /*_*/tag_summary ADD ug_expiry varchar(14) DEFAULT NULL;
+ALTER TABLE /*_*/user_groups ADD CONSTRAINT pk_user_groups PRIMARY KEY(ug_user, ug_group);
+ALTER TABLE /*_*/user_groups ADD ug_expiry varchar(14) DEFAULT NULL;
 CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups(ug_expiry);
index fd2fae7..4ecc6db 100644 (file)
@@ -1411,29 +1411,6 @@ CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_
 -- Covering index, so we can pull all the info only out of the index.
 CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
--- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
--- that only works on MySQL 4.1+
-CREATE TABLE /*_*/tag_summary (
-  ts_id int NOT NULL PRIMARY KEY IDENTITY,
-  -- RCID for the change
-  ts_rc_id int NULL REFERENCES /*_*/recentchanges(rc_id),
-  -- LOGID for the change
-  ts_log_id int NULL REFERENCES /*_*/logging(log_id),
-  -- REVID for the change
-  ts_rev_id int NULL REFERENCES /*_*/revision(rev_id),
-  -- Comma-separated list of tags
-  ts_tags nvarchar(max) NOT NULL
-);
-
-CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
-
-
-CREATE TABLE /*_*/valid_tag (
-  vt_tag nvarchar(255) NOT NULL PRIMARY KEY
-);
-
 -- Table for storing localisation data
 CREATE TABLE /*_*/l10n_cache (
   -- Language code
diff --git a/maintenance/oracle/archives/patch-tag_summary-ts_id.sql b/maintenance/oracle/archives/patch-tag_summary-ts_id.sql
deleted file mode 100644 (file)
index 91c3338..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.tag_summary ADD (
-ts_id NUMBER NOT NULL,
-);
-ALTER TABLE &mw_prefix.tag_summary ADD CONSTRAINT &mw_prefix.tag_summary_pk PRIMARY KEY (ts_id);
index 4c36fe1..2c20fff 100644 (file)
@@ -946,23 +946,6 @@ CREATE UNIQUE INDEX &mw_prefix.change_tag_u06 ON &mw_prefix.change_tag (ct_rev_i
 
 CREATE INDEX &mw_prefix.change_tag_i02 ON &mw_prefix.change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
-CREATE TABLE &mw_prefix.tag_summary (
-  ts_id NUMBER NOT NULL,
-  ts_rc_id NUMBER NULL,
-  ts_log_id NUMBER NULL,
-  ts_rev_id NUMBER NULL,
-  ts_tags BLOB NOT NULL
-);
-ALTER TABLE &mw_prefix.tag_summary ADD CONSTRAINT &mw_prefix.tag_summary_pk PRIMARY KEY (ts_id);
-CREATE UNIQUE INDEX &mw_prefix.tag_summary_u01 ON &mw_prefix.tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX &mw_prefix.tag_summary_u02 ON &mw_prefix.tag_summary (ts_log_id);
-CREATE UNIQUE INDEX &mw_prefix.tag_summary_u03 ON &mw_prefix.tag_summary (ts_rev_id);
-
-CREATE TABLE &mw_prefix.valid_tag (
-  vt_tag VARCHAR2(255) NOT NULL
-);
-ALTER TABLE &mw_prefix.valid_tag ADD CONSTRAINT &mw_prefix.valid_tag_pk PRIMARY KEY (vt_tag);
-
 -- This table is not used unless profiling is turned on
 --CREATE TABLE &mw_prefix.profiling (
 --  pf_count   NUMBER          DEFAULT 0 NOT NULL,
index 9594137..6c46597 100644 (file)
@@ -34,7 +34,7 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance {
                $this->setBatchSize( 1000 );
                $this->addOption(
                        'sleep',
-                       'Sleep time (in seconds) between every batch',
+                       'Sleep time (in seconds) between every batch, defaults to zero',
                        false,
                        true
                );
@@ -197,7 +197,7 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance {
        private function backpopulateChangeTagPerTag( $tagName, $tagId ) {
                $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
                $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER );
-               $sleep = (int)$this->getOption( 'sleep', 10 );
+               $sleep = (int)$this->getOption( 'sleep', 0 );
                $lastId = 0;
                $this->output( "Starting to add ct_tag_id = {$tagId} for ct_tag = {$tagName}\n" );
                while ( true ) {
diff --git a/maintenance/postgres/archives/patch-tag_summary.sql b/maintenance/postgres/archives/patch-tag_summary.sql
deleted file mode 100644 (file)
index 49e05e7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CREATE TABLE tag_summary (
-  ts_rc_id   INTEGER      NULL,
-  ts_log_id  INTEGER      NULL,
-  ts_rev_id  INTEGER      NULL,
-  ts_tags    TEXT     NOT NULL
-);
-CREATE UNIQUE INDEX tag_summary_rc_id ON tag_summary(ts_rc_id);
-CREATE UNIQUE INDEX tag_summary_log_id ON tag_summary(ts_log_id);
-CREATE UNIQUE INDEX tag_summary_rev_id ON tag_summary(ts_rev_id);
diff --git a/maintenance/postgres/archives/patch-valid_tag.sql b/maintenance/postgres/archives/patch-valid_tag.sql
deleted file mode 100644 (file)
index 98575c6..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE valid_tag (
-  vt_tag TEXT NOT NULL PRIMARY KEY
-);
index 4f636ae..b6858c5 100644 (file)
@@ -28,7 +28,6 @@ DROP SEQUENCE IF EXISTS archive_ar_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS externallinks_el_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS sites_site_id_seq CASCADE;
 DROP SEQUENCE IF EXISTS change_tag_ct_id_seq CASCADE;
-DROP SEQUENCE IF EXISTS tag_summary_ts_id_seq CASCADE;
 DROP FUNCTION IF EXISTS page_deleted() CASCADE;
 DROP FUNCTION IF EXISTS ts2_page_title() CASCADE;
 DROP FUNCTION IF EXISTS ts2_page_text() CASCADE;
@@ -397,7 +396,6 @@ CREATE TABLE site_stats (
   ss_total_pages    INTEGER            DEFAULT NULL,
   ss_users          INTEGER            DEFAULT NULL,
   ss_active_users   INTEGER            DEFAULT NULL,
-  ss_admins         INTEGER            DEFAULT NULL,
   ss_images         INTEGER            DEFAULT NULL
 );
 
@@ -556,7 +554,6 @@ CREATE SEQUENCE recentchanges_rc_id_seq;
 CREATE TABLE recentchanges (
   rc_id              INTEGER      NOT NULL  PRIMARY KEY DEFAULT nextval('recentchanges_rc_id_seq'),
   rc_timestamp       TIMESTAMPTZ  NOT NULL,
-  rc_cur_time        TIMESTAMPTZ      NULL,
   rc_user            INTEGER      NOT NULL  DEFAULT 0 REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
   rc_user_text       TEXT         NOT NULL  DEFAULT '',
   rc_actor           INTEGER      NOT NULL  DEFAULT 0,
@@ -791,8 +788,7 @@ CREATE TABLE category (
   cat_title    TEXT     NOT NULL,
   cat_pages    INTEGER  NOT NULL  DEFAULT 0,
   cat_subcats  INTEGER  NOT NULL  DEFAULT 0,
-  cat_files    INTEGER  NOT NULL  DEFAULT 0,
-  cat_hidden   SMALLINT NOT NULL  DEFAULT 0
+  cat_files    INTEGER  NOT NULL  DEFAULT 0
 );
 ALTER SEQUENCE category_cat_id_seq OWNED BY category.cat_id;
 CREATE UNIQUE INDEX category_title ON category(cat_title);
@@ -815,23 +811,6 @@ CREATE UNIQUE INDEX change_tag_rev_tag_id ON change_tag(ct_rev_id,ct_tag_id);
 
 CREATE INDEX change_tag_tag_id_id ON change_tag(ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
-CREATE SEQUENCE tag_summary_ts_id_seq;
-CREATE TABLE tag_summary (
-  ts_id      INTEGER  NOT NULL  PRIMARY KEY DEFAULT nextval('tag_summary_ts_id_seq'),
-  ts_rc_id   INTEGER      NULL,
-  ts_log_id  INTEGER      NULL,
-  ts_rev_id  INTEGER      NULL,
-  ts_tags    TEXT     NOT NULL
-);
-ALTER SEQUENCE tag_summary_ts_id_seq OWNED BY tag_summary.ts_id;
-CREATE UNIQUE INDEX tag_summary_rc_id ON tag_summary(ts_rc_id);
-CREATE UNIQUE INDEX tag_summary_log_id ON tag_summary(ts_log_id);
-CREATE UNIQUE INDEX tag_summary_rev_id ON tag_summary(ts_rev_id);
-
-CREATE TABLE valid_tag (
-  vt_tag TEXT NOT NULL PRIMARY KEY
-);
-
 CREATE TABLE user_properties (
   up_user     INTEGER      NULL  REFERENCES mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
   up_property TEXT     NOT NULL,
index e8b7448..dba4a22 100644 (file)
@@ -177,19 +177,26 @@ class MwSql extends Maintenance {
                if ( !$res ) {
                        // Do nothing
                        return;
-               } elseif ( is_object( $res ) && $res->numRows() ) {
+               } elseif ( is_object( $res ) ) {
                        $out = '';
+                       $rows = [];
                        foreach ( $res as $row ) {
                                $out .= print_r( $row, true );
                                $rows[] = $row;
                        }
                        if ( $this->hasOption( 'json' ) ) {
                                $out = json_encode( $rows, JSON_PRETTY_PRINT );
+                       } elseif ( !$rows ) {
+                               $out = 'Query OK, 0 row(s) affected';
                        }
                        $this->output( $out . "\n" );
                } else {
                        $affected = $db->affectedRows();
-                       $this->output( "Query OK, $affected row(s) affected\n" );
+                       if ( $this->hasOption( 'json' ) ) {
+                               $this->output( json_encode( [ 'affected' => $affected ], JSON_PRETTY_PRINT ) . "\n" );
+                       } else {
+                               $this->output( "Query OK, $affected row(s) affected\n" );
+                       }
                }
        }
 
diff --git a/maintenance/sqlite/archives/patch-tag_summary-ts_id.sql b/maintenance/sqlite/archives/patch-tag_summary-ts_id.sql
deleted file mode 100644 (file)
index b6a1202..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-DROP TABLE IF EXISTS /*_*/tag_summary_tmp;
-
-CREATE TABLE /*$wgDBprefix*/tag_summary_tmp (
-  ts_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  ts_rc_id int NULL,
-  ts_log_id int NULL,
-  ts_rev_id int NULL,
-  ts_tags blob NOT NULL
-);
-
-INSERT OR IGNORE INTO /*_*/tag_summary_tmp (
-    ts_rc_id, ts_log_id, ts_rev_id, ts_tags )
-    SELECT
-    ts_rc_id, ts_log_id, ts_rev_id, ts_tags
-    FROM /*_*/tag_summary;
-
-DROP TABLE /*_*/tag_summary;
-
-ALTER TABLE /*_*/tag_summary_tmp RENAME TO /*_*/tag_summary;
-
-CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
index 72db8c3..83ba4e2 100644 (file)
@@ -1859,28 +1859,6 @@ CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_
 -- Covering index, so we can pull all the info only out of the index.
 CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
--- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
--- that only works on MySQL 4.1+
-CREATE TABLE /*_*/tag_summary (
-  ts_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  -- RCID for the change
-  ts_rc_id int NULL,
-  -- LOGID for the change
-  ts_log_id int unsigned NULL,
-  -- REVID for the change
-  ts_rev_id int unsigned NULL,
-  -- Comma-separated list of tags
-  ts_tags blob NOT NULL
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/tag_summary_rc_id ON /*_*/tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_log_id ON /*_*/tag_summary (ts_log_id);
-CREATE UNIQUE INDEX /*i*/tag_summary_rev_id ON /*_*/tag_summary (ts_rev_id);
-
-
-CREATE TABLE /*_*/valid_tag (
-  vt_tag varchar(255) NOT NULL PRIMARY KEY
-) /*$wgDBTableOptions*/;
 
 -- Table for storing localisation data
 CREATE TABLE /*_*/l10n_cache (
index 317385d..ef8d974 100644 (file)
@@ -2735,8 +2735,8 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.widgets.TitlesMultiselectWidget.styles' => [
-               'styles' => 'resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.base.css',
+       'mediawiki.widgets.TagMultiselectWidget.styles' => [
+               'styles' => 'resources/src/mediawiki.widgets/mw.widgets.TagMultiselectWidget.base.css',
        ],
        'mediawiki.widgets.SearchInputWidget' => [
                'scripts' => [
index 04ed5d6..107ab33 100644 (file)
        /**
         * Replace $* with a list of parameters for &uselang=qqx.
         *
+        * @private
         * @since 1.33
         * @param {string} formatString Format string
         * @param {Array} parameters Values for $N replacements
         * @return {string} Transformed format string
         */
-       mw.transformFormatForQqx = function ( formatString, parameters ) {
+       mw.internalDoTransformFormatForQqx = function ( formatString, parameters ) {
                var parametersString;
                if ( formatString.indexOf( '$*' ) !== -1 ) {
                        parametersString = '';
         */
        mw.format = function ( formatString ) {
                var parameters = slice.call( arguments, 1 );
-               formatString = mw.transformFormatForQqx( formatString, parameters );
+               formatString = mw.internalDoTransformFormatForQqx( formatString, parameters );
                return formatString.replace( /\$(\d+)/g, function ( str, match ) {
                        var index = parseInt( match, 10 ) - 1;
                        return parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;
index 8f1d563..18fb4a2 100644 (file)
@@ -87,6 +87,8 @@
        margin-right: @ooui-spacing-medium;
 }
 
+// First selector is flatlist specific
+.mw-htmlform-field-HTMLMultiSelectField.oo-ui-fieldLayout,
 .mw-htmlform-ooui .htmlform-tip,
 .mw-htmlform-ooui .mw-htmlform-submit-buttons {
        margin-top: @ooui-spacing-medium;
index 3dc09b7..540de23 100644 (file)
                                                wikiText = '⧼' + key + '⧽';
                                        }
                                }
-                               wikiText = mw.transformFormatForQqx( wikiText, replacements );
+                               wikiText = mw.internalDoTransformFormatForQqx( wikiText, replacements );
                                this.astCache[ key ] = this.wikiTextToAst( wikiText );
                        }
                        return this.astCache[ key ];
index 9264a39..df2079e 100644 (file)
 
                                subsetNames = [];
 
-                               filter.subset.forEach( function ( subsetFilterName ) { // eslint-disable-line no-loop-func
+                               filter.subset.forEach( function ( subsetFilterName ) {
                                        // Subsets (unlike conflicts) are always inside the same group
                                        // We can re-map the names of the filters we are getting from
                                        // the subsets with the group prefix
index 35cdee7..cb996f3 100644 (file)
@@ -1,9 +1,16 @@
 /* Special:AllMessages */
-#mw-allmessagestable .allmessages-customised .am_default {
+#mw-allmessagestable tbody:hover td {
+       /* Duplicate of `.mw-datatable tr:hover td` from shared.css,
+        * so that it also applies when hovering a lower cell
+        * within the same rowspan */
+       background-color: #eaf3ff;
+}
+
+#mw-allmessagestable .am_default {
        background-color: #fcffc4;
 }
 
-#mw-allmessagestable .allmessages-customised:hover .am_default {
+#mw-allmessagestable tbody:hover .am_default {
        background-color: #faff90;
 }
 
@@ -11,7 +18,7 @@
        background-color: #e2ffe2;
 }
 
-#mw-allmessagestable .allmessages-customised:hover + .allmessages-customised .am_actual {
+#mw-allmessagestable tbody:hover .am_actual {
        background-color: #b1ffb1;
 }
 
index ef7cea9..545bf40 100644 (file)
                        this.clearButton = new OO.ui.ButtonWidget( {
                                classes: [ 'mw-widgets-datetime-dateTimeInputWidget-field', 'mw-widgets-datetime-dateTimeInputWidget-clearButton' ],
                                framed: false,
-                               icon: 'trash',
+                               icon: 'clear',
                                disabled: disabled
                        } ).connect( this, {
                                click: 'onClearClick'
index 370a19f..a6b6de4 100644 (file)
 
                > .oo-ui-indicatorElement-indicator {
                        right: @padding-horizontal-base;
-                       min-width: @min-size-indicator;
-                       width: @size-indicator;
-                       min-height: @min-size-indicator;
-                       height: @size-indicator;
-                       max-height: @size-base;
                }
        }
 
-       &-empty &-handle {
-               color: @color-base--subtle;
-       }
-
        &.oo-ui-iconElement .mw-widgets-datetime-dateTimeInputWidget-handle {
                padding-left: @padding-start-input-text-icon-label;
        }
@@ -82,8 +73,7 @@
                .oo-ui-box-sizing( border-box );
                border: 0;
                border-radius: @border-radius-base;
-               // Provide more top padding due to border not being part of the calculation
-               padding-top: 10 / @ooui-font-size-browser / @ooui-font-size-base;
+               padding-top: @padding-top-base;
                padding-bottom: @padding-bottom-base;
                box-shadow: none;
                font-size: inherit;
                line-height: @line-height-widget-singleline;
                text-align: center;
                vertical-align: top;
+
+               // Day field, f.e. “Sat”
+               &:first-child {
+                       cursor: pointer;
+               }
+
+               // Day field & time zome field, f.e. “Sat” & “Z”
+               &[ tabindex='-1' ] {
+                       // Support: Firefox, Chrome
+                       outline: 0;
+               }
        }
 
        &-editField {
        }
 
        &-clearButton {
+               // Override `&-field` from above
                padding-top: 0;
+               padding-bottom: 0;
+               padding-left: @padding-start-button-clear;
+
+               // `&.oo-ui-iconElement` needed for specificity
+               &.oo-ui-iconElement > .oo-ui-buttonElement-button {
+                       padding-top: @padding-top-button-clear;
+               }
+
+               .oo-ui-iconElement-icon {
+                       background-size: @size-indicator @size-indicator;
+               }
+       }
+
+       &-empty {
+               .mw-widgets-datetime-dateTimeInputWidget-handle {
+                       color: @color-base--subtle;
+               }
+
+               .mw-widgets-datetime-dateTimeInputWidget-clearButton {
+                       display: none;
+               }
        }
 
        &.oo-ui-widget-enabled {
index 58a5bc3..a0d6f4a 100644 (file)
 @padding-horizontal-base: 12 / @ooui-font-size-browser / @ooui-font-size-base;
 @padding-horizontal-input-text: 8 / @ooui-font-size-browser / @ooui-font-size-base;
 @padding-top-base: 8 / @ooui-font-size-browser / @ooui-font-size-base;
+@padding-top-button-clear: 28 / @ooui-font-size-browser / @ooui-font-size-base; // As it's inside an input, we need to reduce from borders surrounding
 @padding-bottom-base: 7 / @ooui-font-size-browser / @ooui-font-size-base;
 @padding-start-input-text-icon: 6 / @ooui-font-size-browser / @ooui-font-size-base;
 @padding-start-input-text-icon-label: 32 / @ooui-font-size-browser / @ooui-font-size-base;
+@padding-start-button-clear: 4 / @ooui-font-size-browser / @ooui-font-size-base;
 
 @border-base: 1px solid #a2a9b1;
 @border-color-base--disabled: #c8ccd1;
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TagMultiselectWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.TagMultiselectWidget.base.css
new file mode 100644 (file)
index 0000000..86e7ecd
--- /dev/null
@@ -0,0 +1,11 @@
+/*!
+ * MediaWiki Widgets - base TagMultiselectWidget styles.
+ *
+ * @copyright 2011-2018 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+.client-nojs .mw-widgets-tagMultiselectWidget .mw-widgets-pendingTextInputWidget,
+.client-js .mw-widgets-tagMultiselectWidget .mw-widgets-tagMultiselectWidget-multilineTextInputWidget {
+       display: none;
+}
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.base.css b/resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.base.css
deleted file mode 100644 (file)
index de43fb3..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
- * MediaWiki Widgets - base TitlesMultiselectWidget styles.
- *
- * @copyright 2011-2018 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-
-.client-nojs .mw-widgets-titlesMultiselectWidget .mw-widgets-pendingTextInputWidget,
-.client-js .mw-widgets-titlesMultiselectWidget .mw-widgets-titlesMultiselectWidget-multilineTextInputWidget {
-       display: none;
-}
index fee69c0..03f02b4 100644 (file)
@@ -99,7 +99,6 @@
         * @param {string} [data.module] Name of module which caused the error
         */
        function logError( topic, data ) {
-               /* eslint-disable no-console */
                var msg,
                        e = data.exception,
                        source = data.source,
                                console.warn( e );
                        }
                }
-               /* eslint-enable no-console */
        }
 
        /**
index 286a1a4..a8aa936 100644 (file)
@@ -461,7 +461,7 @@ Talk for this IP
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:5bbc19f4&amp;action=edit 07575f81]&lt;br&gt;
 [[MediaWiki_talk:5bbc19f4|Talk]]
 &lt;/td&gt;&lt;td&gt;
-----&amp;#39;&amp;#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &amp;#91;&amp;#91;IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &amp;#91;&amp;#91;Special:Userlogin&amp;#124;create an account or log in]] to avoid future confusion with other anonymous users.&amp;#39;&amp;#39; 
+----&amp;#39;&amp;#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &amp;#91;&amp;#91;IP address]] to identify them. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &amp;#91;&amp;#91;Special:Userlogin&amp;#124;create an account or log in]] to avoid future confusion with other anonymous users.&amp;#39;&amp;#39; 
 &lt;/td&gt;&lt;td&gt;
 <template lineStart="1"><title>int:5bbc19f4</title></template>
 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
index 3212ae1..3bae4aa 100644 (file)
@@ -461,7 +461,7 @@ Talk for this IP
 [http://tl.wiktionary.org/w/wiki.phtml?title=MediaWiki:5bbc19f4&action=edit 07575f81]<br>
 [[MediaWiki_talk:5bbc19f4|Talk]]
 </td><td>
-----&#39;&#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &#91;&#91;IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &#91;&#91;Special:Userlogin&#124;create an account or log in]] to avoid future confusion with other anonymous users.&#39;&#39; 
+----&#39;&#39;This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical &#91;&#91;IP address]] to identify them. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please &#91;&#91;Special:Userlogin&#124;create an account or log in]] to avoid future confusion with other anonymous users.&#39;&#39; 
 </td><td>
 {{int:5bbc19f4}}
 </td></tr><tr><td>
index 585ebb9..fa351ea 100644 (file)
@@ -42,6 +42,7 @@ return [
                // Load the interface for the version of PHPUnit that isn't installed.
                // Phan only supports PHP 7.0+ (and not HHVM), so we only need to stub PHPUnit 4.
                class_exists( PHPUnit_TextUI_Command::class ) ? [] : [ 'tests/phan/stubs/phpunit4.php' ],
+               class_exists( ProfilerExcimer::class ) ? [] : [ 'tests/phan/stubs/excimer.php' ],
                [
                        'maintenance/7zip.inc',
                        'maintenance/cleanupTable.inc',
diff --git a/tests/phan/stubs/excimer.php b/tests/phan/stubs/excimer.php
new file mode 100644 (file)
index 0000000..af3a673
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+
+// phpcs:ignoreFile
+
+class ExcimerProfiler {
+       public function __construct() {
+       }
+       public function setPeriod( $period ) {
+       }
+       public function setEventType( $event_type ) {
+       }
+       public function setMaxDepth( $maxDepth ) {
+       }
+       public function setFlushCallback( $callback, $max_samples ) {
+       }
+       public function clearFlushCallback() {
+       }
+       public function start() {
+       }
+       public function stop() {
+       }
+       public function getLog() {
+       }
+       public function flush() {
+       }
+}
+
+class ExcimerLog {
+       private final function __construct() {
+       }
+       function formatCollapsed() {
+       }
+       function aggregateByFunction() {
+       }
+       function getEventCount() {
+       }
+       function current() {
+       }
+       function key() {
+       }
+       function next() {
+       }
+       function rewind() {
+       }
+       function valid() {
+       }
+       function count() {
+       }
+       function offsetExists( $offset ) {
+       }
+       function offsetGet( $offset ) {
+       }
+       function offsetSet( $offset, $value ) {
+       }
+       function offsetUnset( $offset ) {
+       }
+
+}
+
+class ExcimerLogEntry {
+       private final function __construct() {
+       }
+       function getTimestamp() {
+       }
+       function getEventCount() {
+       }
+       function getTrace() {
+       }
+}
+
+class ExcimerTimer {
+       function setEventType( $event_type ) {
+       }
+       function setInterval( $interval ) {
+       }
+       function setPeriod( $period ) {
+       }
+       function setCallback( $callback ) {
+       }
+       function start() {
+       }
+       function stop() {
+       }
+       function getTime() {
+       }
+}
diff --git a/tests/phpunit/includes/MagicWordFactoryTest.php b/tests/phpunit/includes/MagicWordFactoryTest.php
new file mode 100644 (file)
index 0000000..63ca139
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+/**
+ * @covers \MagicWordFactory
+ *
+ * @author Derick N. Alangi
+ */
+class MagicWordFactoryTest extends MediaWikiTestCase {
+       private function makeMagicWordFactory( Language $contLang = null ) {
+               if ( $contLang === null ) {
+                       return new MagicWordFactory( Language::factory( 'en' ) );
+               }
+               return new MagicWordFactory( $contLang );
+       }
+
+       public function testGetContentLanguage() {
+               $contLang = Language::factory( 'en' );
+
+               $magicWordFactory = $this->makeMagicWordFactory( $contLang );
+               $magicWordContLang = $magicWordFactory->getContentLanguage();
+
+               $this->assertSame( $contLang, $magicWordContLang );
+       }
+
+       public function testGetMagicWord() {
+               $magicWordIdValid = 'pageid';
+               $magicWordFactory = $this->makeMagicWordFactory();
+               $mwActual = $magicWordFactory->get( $magicWordIdValid );
+               $contLang = $magicWordFactory->getContentLanguage();
+               $expected = new MagicWord( $magicWordIdValid, [ 'PAGEID' ], false, $contLang );
+
+               $this->assertEquals( $expected, $mwActual );
+       }
+
+       public function testGetInvalidMagicWord() {
+               $magicWordFactory = $this->makeMagicWordFactory();
+
+               $this->setExpectedException( MWException::class );
+               \Wikimedia\suppressWarnings();
+               try {
+                       $magicWordFactory->get( 'invalid magic word' );
+               } finally {
+                       \Wikimedia\restoreWarnings();
+               }
+       }
+
+       public function testGetVariableIDs() {
+               $magicWordFactory = $this->makeMagicWordFactory();
+               $varIds = $magicWordFactory->getVariableIDs();
+
+               $this->assertInternalType( 'array', $varIds );
+               $this->assertNotEmpty( $varIds );
+               $this->assertContainsOnly( 'string', $varIds );
+       }
+
+       public function testGetSubstIDs() {
+               $magicWordFactory = $this->makeMagicWordFactory();
+               $substIds = $magicWordFactory->getSubstIDs();
+
+               $this->assertInternalType( 'array', $substIds );
+               $this->assertNotEmpty( $substIds );
+               $this->assertContainsOnly( 'string', $substIds );
+       }
+
+       /**
+        * Test both valid and invalid caching hints paths
+        */
+       public function testGetCacheTTL() {
+               $magicWordFactory = $this->makeMagicWordFactory();
+               $actual = $magicWordFactory->getCacheTTL( 'localday' );
+
+               $this->assertSame( 3600, $actual );
+
+               $actual = $magicWordFactory->getCacheTTL( 'currentmonth' );
+               $this->assertSame( 86400, $actual );
+
+               $actual = $magicWordFactory->getCacheTTL( 'invalid' );
+               $this->assertSame( -1, $actual );
+       }
+
+       public function testGetDoubleUnderscoreArray() {
+               $magicWordFactory = $this->makeMagicWordFactory();
+               $actual = $magicWordFactory->getDoubleUnderscoreArray();
+
+               $this->assertInstanceOf( MagicWordArray::class, $actual );
+       }
+}
index 9898e53..e229f0c 100644 (file)
@@ -274,7 +274,8 @@ class ApiBlockTest extends ApiTestCase {
 
        /**
         * @expectedException ApiUsageException
-        * @expectedExceptionMessage "pagerestrictions" may not be over 10 (set to 11) for bots or sysops.
+        * @expectedExceptionMessage Too many values supplied for parameter "pagerestrictions". The
+        * limit is 10.
         */
        public function testBlockingToManyRestrictions() {
                $this->setMwGlobals( [
index e8cd342..7bab542 100644 (file)
@@ -553,6 +553,62 @@ class ApiComparePagesTest extends ApiTestCase {
                                        ]
                                ],
                        ],
+                       'Relative diff, no prev' => [
+                               [
+                                       'fromrev' => '{{REPL:revA1}}',
+                                       'torelative' => 'prev',
+                                       'prop' => 'ids|rel|diff|title|user|comment',
+                               ],
+                               [
+                                       'warnings' => [
+                                               [
+                                                       'code' => 'compare-no-prev',
+                                                       'module' => 'compare',
+                                               ],
+                                       ],
+                                       'compare' => [
+                                               'toid' => '{{REPL:pageA}}',
+                                               'torevid' => '{{REPL:revA1}}',
+                                               'tons' => 0,
+                                               'totitle' => 'ApiComparePagesTest A',
+                                               'touser' => '{{REPL:creator}}',
+                                               'touserid' => '{{REPL:creatorid}}',
+                                               'tocomment' => 'Test for ApiComparePagesTest: A 1',
+                                               'toparsedcomment' => 'Test for ApiComparePagesTest: A 1',
+                                               'next' => '{{REPL:revA2}}',
+                                               'body' => '<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1" >Line 1:</td>' . "\n"
+                                                       . '<td colspan="2" class="diff-lineno">Line 1:</td></tr>' . "\n"
+                                                       . '<tr><td class=\'diff-marker\'>−</td><td class=\'diff-deletedline\'><div> </div></td><td class=\'diff-marker\'>+</td><td class=\'diff-addedline\'><div><ins class="diffchange diffchange-inline">A 1</ins></div></td></tr>' . "\n",
+                                       ],
+                               ],
+                       ],
+                       'Relative diff, no next' => [
+                               [
+                                       'fromrev' => '{{REPL:revA4}}',
+                                       'torelative' => 'next',
+                                       'prop' => 'ids|rel|diff|title|user|comment',
+                               ],
+                               [
+                                       'warnings' => [
+                                               [
+                                                       'code' => 'compare-no-next',
+                                                       'module' => 'compare',
+                                               ],
+                                       ],
+                                       'compare' => [
+                                               'fromid' => '{{REPL:pageA}}',
+                                               'fromrevid' => '{{REPL:revA4}}',
+                                               'fromns' => 0,
+                                               'fromtitle' => 'ApiComparePagesTest A',
+                                               'fromuser' => '{{REPL:creator}}',
+                                               'fromuserid' => '{{REPL:creatorid}}',
+                                               'fromcomment' => 'Test for ApiComparePagesTest: A 4',
+                                               'fromparsedcomment' => 'Test for ApiComparePagesTest: A 4',
+                                               'prev' => '{{REPL:revA3}}',
+                                               'body' => '',
+                                       ],
+                               ],
+                       ],
                        'Diff for specific slots' => [
                                // @todo Use a page with multiple slots here
                                [
@@ -898,24 +954,6 @@ class ApiComparePagesTest extends ApiTestCase {
                                [],
                                'missingcontent'
                        ],
-                       'Error, Relative diff, no prev' => [
-                               [
-                                       'fromrev' => '{{REPL:revA1}}',
-                                       'torelative' => 'prev',
-                                       'prop' => 'ids',
-                               ],
-                               [],
-                               'baddiff'
-                       ],
-                       'Error, Relative diff, no next' => [
-                               [
-                                       'fromrev' => '{{REPL:revA4}}',
-                                       'torelative' => 'next',
-                                       'prop' => 'ids',
-                               ],
-                               [],
-                               'baddiff'
-                       ],
                        'Error, section diff with no revision' => [
                                [
                                        'fromtitle' => 'ApiComparePagesTest F',
index 8265af8..f1ee99f 100644 (file)
@@ -13,8 +13,6 @@ class ChangeTagsTest extends MediaWikiTestCase {
 
                $this->tablesUsed[] = 'change_tag';
                $this->tablesUsed[] = 'change_tag_def';
-               $this->tablesUsed[] = 'tag_summary';
-               $this->tablesUsed[] = 'valid_tag';
 
                // Truncate these to avoid the supposed-to-be-unused IDs in tests here turning
                // out to be used, leading ChangeTags::updateTags() to pick up bogus rc_id,
@@ -421,6 +419,102 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
        }
 
+       public function testUpdateTagsSkipDuplicates() {
+               // FIXME: fails under postgres
+               $this->markTestSkippedIfDbType( 'postgres' );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'change_tag', '*' );
+               $dbw->delete( 'change_tag_def', '*' );
+
+               $rcId = 123;
+               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+               ChangeTags::updateTags( [ 'tag2', 'tag3' ], [], $rcId );
+
+               $dbr = wfGetDB( DB_REPLICA );
+
+               $expected = [
+                       (object)[
+                               'ctd_name' => 'tag1',
+                               'ctd_id' => 1,
+                               'ctd_count' => 1
+                       ],
+                       (object)[
+                               'ctd_name' => 'tag2',
+                               'ctd_id' => 2,
+                               'ctd_count' => 1
+                       ],
+                       (object)[
+                               'ctd_name' => 'tag3',
+                               'ctd_id' => 3,
+                               'ctd_count' => 1
+                       ],
+               ];
+               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+               $this->assertEquals( $expected, iterator_to_array( $res, false ) );
+
+               $expected2 = [
+                       (object)[
+                               'ct_tag_id' => 1,
+                               'ct_rc_id' => 123
+                       ],
+                       (object)[
+                               'ct_tag_id' => 2,
+                               'ct_rc_id' => 123
+                       ],
+                       (object)[
+                               'ct_tag_id' => 3,
+                               'ct_rc_id' => 123
+                       ],
+               ];
+               $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
+               $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+       }
+
+       public function testUpdateTagsDoNothingOnRepeatedCall() {
+               // FIXME: fails under postgres
+               $this->markTestSkippedIfDbType( 'postgres' );
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'change_tag', '*' );
+               $dbw->delete( 'change_tag_def', '*' );
+
+               $rcId = 123;
+               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
+               $res = ChangeTags::updateTags( [ 'tag2', 'tag1' ], [], $rcId );
+               $this->assertEquals( [ [], [], [ 'tag1', 'tag2' ] ], $res );
+
+               $dbr = wfGetDB( DB_REPLICA );
+
+               $expected = [
+                       (object)[
+                               'ctd_name' => 'tag1',
+                               'ctd_id' => 1,
+                               'ctd_count' => 1
+                       ],
+                       (object)[
+                               'ctd_name' => 'tag2',
+                               'ctd_id' => 2,
+                               'ctd_count' => 1
+                       ],
+               ];
+               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
+               $this->assertEquals( $expected, iterator_to_array( $res, false ) );
+
+               $expected2 = [
+                       (object)[
+                               'ct_tag_id' => 1,
+                               'ct_rc_id' => 123
+                       ],
+                       (object)[
+                               'ct_tag_id' => 2,
+                               'ct_rc_id' => 123
+                       ],
+               ];
+               $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
+               $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
+       }
+
        public function testDeleteTags() {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
@@ -473,7 +567,6 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
                $dbw->delete( 'change_tag_def', '*' );
-               $dbw->delete( 'valid_tag', '*' );
 
                $rcId = 123;
                ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
@@ -494,7 +587,5 @@ class ChangeTagsTest extends MediaWikiTestCase {
                ];
                $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
                $this->assertEquals( $expected, iterator_to_array( $res, false ) );
-
-               $this->assertEquals( [], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
        }
 }